This commit is contained in:
2025-11-10 13:34:12 +01:00
parent 9252883a2b
commit 6eb50c0555
7 changed files with 39 additions and 24 deletions
+6
View File
@@ -5,6 +5,7 @@ import DropOverlay from './DropOverlay';
import UploadQueueOverlay from './UploadQueueOverlay'; import UploadQueueOverlay from './UploadQueueOverlay';
import useDocumentsWorkspace from '../hooks/documents/useDocumentsWorkspace'; import useDocumentsWorkspace from '../hooks/documents/useDocumentsWorkspace';
import { useDocumentsPreferences } from './useDocumentsPreferences'; import { useDocumentsPreferences } from './useDocumentsPreferences';
import SettingsRoute from './SettingsRoute';
const AppLayout = () => { const AppLayout = () => {
const documentsPreferences = useDocumentsPreferences(); const documentsPreferences = useDocumentsPreferences();
@@ -15,6 +16,8 @@ const AppLayout = () => {
dropOverlayState, dropOverlayState,
managementModals, managementModals,
contextValue, contextValue,
settingsOpen,
closeSettings,
} = useDocumentsWorkspace({ } = useDocumentsWorkspace({
documentsViewMode: documentsPreferences.documentsViewMode, documentsViewMode: documentsPreferences.documentsViewMode,
documentsSortField: documentsPreferences.documentsSortField, documentsSortField: documentsPreferences.documentsSortField,
@@ -61,6 +64,9 @@ const AppLayout = () => {
/> />
<Outlet /> <Outlet />
{managementModals} {managementModals}
{settingsOpen ? (
<SettingsRoute open onClose={closeSettings} />
) : null}
</div> </div>
</AppShellContext.Provider> </AppShellContext.Provider>
); );
-2
View File
@@ -3,7 +3,6 @@ import { Navigate, Route, Routes } from 'react-router-dom';
import AppLayout from './AppLayout'; import AppLayout from './AppLayout';
import DocumentsRoute from './DocumentsRoute'; import DocumentsRoute from './DocumentsRoute';
import LoginRoute from './LoginRoute'; import LoginRoute from './LoginRoute';
import SettingsRoute from './SettingsRoute';
const AppRouter = () => ( const AppRouter = () => (
<Routes> <Routes>
@@ -13,7 +12,6 @@ const AppRouter = () => (
<Route path="/documents" element={<DocumentsRoute />} /> <Route path="/documents" element={<DocumentsRoute />} />
<Route path="/documents/folder/:folderId" element={<DocumentsRoute />} /> <Route path="/documents/folder/:folderId" element={<DocumentsRoute />} />
<Route path="/documents/:documentId" element={<DocumentsRoute />} /> <Route path="/documents/:documentId" element={<DocumentsRoute />} />
<Route path="/settings" element={<SettingsRoute />} />
<Route path="*" element={<Navigate to="/documents" replace />} /> <Route path="*" element={<Navigate to="/documents" replace />} />
</Route> </Route>
</Routes> </Routes>
+8 -17
View File
@@ -1,5 +1,4 @@
import React, { useEffect, useCallback } from 'react'; import React, { useEffect, useCallback } from 'react';
import { useNavigate } from 'react-router-dom';
import SettingsModal from '../settings/SettingsModal'; import SettingsModal from '../settings/SettingsModal';
import { useAppShell } from '../appShellContext'; import { useAppShell } from '../appShellContext';
import useApiTokens from '../settings/useApiTokens'; import useApiTokens from '../settings/useApiTokens';
@@ -7,8 +6,7 @@ import useCapabilitySets from '../settings/useCapabilitySets';
import useCapabilities from '../settings/useCapabilities'; import useCapabilities from '../settings/useCapabilities';
import { api } from './appState'; import { api } from './appState';
const SettingsRoute = () => { const SettingsRoute = ({ open = true, onClose }) => {
const navigate = useNavigate();
const { const {
token, token,
notifyApiError, notifyApiError,
@@ -71,27 +69,20 @@ const SettingsRoute = () => {
const handleClose = useCallback(() => { const handleClose = useCallback(() => {
dismissSecret(); dismissSecret();
navigate(-1); onClose?.();
}, [dismissSecret, navigate]); }, [dismissSecret, onClose]);
useEffect(() => {
const handleKeyDown = (event) => {
if (event.key === 'Escape') {
event.preventDefault();
handleClose();
}
};
window.addEventListener('keydown', handleKeyDown);
return () => window.removeEventListener('keydown', handleKeyDown);
}, [handleClose]);
useEffect(() => () => { useEffect(() => () => {
dismissSecret(); dismissSecret();
}, [dismissSecret]); }, [dismissSecret]);
if (!open) {
return null;
}
return ( return (
<SettingsModal <SettingsModal
open open={open}
onClose={handleClose} onClose={handleClose}
tokens={tokens} tokens={tokens}
loading={tokensLoading} loading={tokensLoading}
@@ -1027,9 +1027,27 @@ const useDocumentsWorkspace = ({
setStatusMessage, setStatusMessage,
}); });
const [settingsOpen, setSettingsOpen] = useState(false);
const openSettings = useCallback(() => { const openSettings = useCallback(() => {
navigate('/settings'); setSettingsOpen(true);
}, [navigate]); }, []);
const closeSettings = useCallback(() => {
setSettingsOpen(false);
}, []);
useEffect(() => {
if (!settingsOpen) {
return undefined;
}
const handleKeyDown = (event) => {
if (event.key === 'Escape') {
event.preventDefault();
setSettingsOpen(false);
}
};
window.addEventListener('keydown', handleKeyDown);
return () => window.removeEventListener('keydown', handleKeyDown);
}, [settingsOpen]);
useEffect( useEffect(
() => () => { () => () => {
@@ -1548,6 +1566,8 @@ const useDocumentsWorkspace = ({
dropOverlayState, dropOverlayState,
managementModals, managementModals,
contextValue, contextValue,
settingsOpen,
closeSettings,
}; };
}; };
+1 -1
View File
@@ -51,7 +51,7 @@
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 1.5rem; padding: 1.5rem;
z-index: 3000; z-index: 2000000;
} }
.modal { .modal {
@@ -45,7 +45,7 @@
pointer-events: none; pointer-events: none;
filter: blur(15px) grayscale(100%); filter: blur(15px) grayscale(100%);
transition: opacity 0.6s ease, filter 0.28s ease; transition: opacity 0.6s ease, filter 0.28s ease;
z-index: 0 !important; z-index: 0;
} }
.desk-item.is-selected { .desk-item.is-selected {
@@ -2,7 +2,7 @@
.desk-help-overlay { .desk-help-overlay {
position: fixed; position: fixed;
inset: 0; inset: 0;
z-index: 5000000; z-index: 2000000;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;