modal
This commit is contained in:
@@ -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>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user