From 6923a68837dd4db2116cf10f4eec41ff1aab4521 Mon Sep 17 00:00:00 2001 From: Nils Schneider Date: Wed, 19 Nov 2025 00:57:06 +0100 Subject: [PATCH] selection cleanup --- frontend/src/app/AppLayout.tsx | 12 ++++------- .../src/app/WorkspaceSelectionContext.tsx | 20 +++++++++++-------- .../documents/hooks/useDocumentsPanelProps.ts | 5 +++++ .../src/documents/panel/DocumentsPanel.tsx | 20 ++++++++++++++++--- .../hooks/documents/useDocumentsWorkspace.ts | 2 +- 5 files changed, 39 insertions(+), 20 deletions(-) diff --git a/frontend/src/app/AppLayout.tsx b/frontend/src/app/AppLayout.tsx index 1e15ed3..6cf8fa3 100644 --- a/frontend/src/app/AppLayout.tsx +++ b/frontend/src/app/AppLayout.tsx @@ -6,7 +6,6 @@ import UploadQueueOverlay from './UploadQueueOverlay'; import useDocumentsWorkspace from '../hooks/documents/useDocumentsWorkspace'; import { useDocumentsPreferences } from './useDocumentsPreferences'; import SettingsRoute from './SettingsRoute'; -import { WorkspaceSelectionProvider } from './WorkspaceSelectionContext'; const AppLayout: React.FC = () => { const documentsPreferences = useDocumentsPreferences(); @@ -17,7 +16,6 @@ const AppLayout: React.FC = () => { dropOverlayState, managementModals, contextValue, - workspaceSelection, settingsOpen, closeSettings, } = useDocumentsWorkspace({ @@ -47,9 +45,8 @@ const AppLayout: React.FC = () => { } return ( - - -
+ +
{ {settingsOpen ? ( ) : null} -
-
- +
+
); }; diff --git a/frontend/src/app/WorkspaceSelectionContext.tsx b/frontend/src/app/WorkspaceSelectionContext.tsx index a5aa4eb..47fc5ad 100644 --- a/frontend/src/app/WorkspaceSelectionContext.tsx +++ b/frontend/src/app/WorkspaceSelectionContext.tsx @@ -1,16 +1,20 @@ import React, { createContext, useContext } from 'react'; import type useWorkspaceSelection from './useWorkspaceSelection'; -type WorkspaceSelectionValue = ReturnType | null; +export type WorkspaceSelectionValue = ReturnType; -const WorkspaceSelectionContext = createContext(null); +const WorkspaceSelectionContext = createContext(null); -export const WorkspaceSelectionProvider: React.FC<{ value: NonNullable; children: React.ReactNode }> - = ({ value, children }) => ( - - {children} - - ); +interface WorkspaceSelectionProviderProps { + value: WorkspaceSelectionValue; + children: React.ReactNode; +} + +export const WorkspaceSelectionProvider: React.FC = ({ value, children }) => ( + + {children} + +); export const useWorkspaceSelectionContext = () => { const context = useContext(WorkspaceSelectionContext); diff --git a/frontend/src/documents/hooks/useDocumentsPanelProps.ts b/frontend/src/documents/hooks/useDocumentsPanelProps.ts index 435851b..accabd6 100644 --- a/frontend/src/documents/hooks/useDocumentsPanelProps.ts +++ b/frontend/src/documents/hooks/useDocumentsPanelProps.ts @@ -1,4 +1,5 @@ import { useMemo } from 'react'; +import type { WorkspaceSelectionValue } from '../../app/WorkspaceSelectionContext'; type Identifier = string | number; @@ -72,6 +73,7 @@ export interface UseDocumentsPanelPropsArgs { moveDocumentsToFolder?: (...args: unknown[]) => void; documentLinks?: Map; ensureDownloadUrl?: (documentId: Identifier, options?: { force?: boolean }) => Promise; + selectionValue: WorkspaceSelectionValue; } export type DocumentsPanelProps = ReturnType; @@ -128,6 +130,7 @@ const useDocumentsPanelProps = (props: UseDocumentsPanelPropsArgs) => { moveDocumentsToFolder, documentLinks, ensureDownloadUrl, + selectionValue, } = props; return useMemo( @@ -184,6 +187,7 @@ const useDocumentsPanelProps = (props: UseDocumentsPanelPropsArgs) => { onMoveDocumentsToFolder: moveDocumentsToFolder, documentLinks, ensureDownloadUrl, + selectionValue, }), [ activeCorrespondentFilters, @@ -236,6 +240,7 @@ const useDocumentsPanelProps = (props: UseDocumentsPanelPropsArgs) => { folderOptions, documentLinks, ensureDownloadUrl, + selectionValue, ], ); }; diff --git a/frontend/src/documents/panel/DocumentsPanel.tsx b/frontend/src/documents/panel/DocumentsPanel.tsx index 65ee46f..e0e87de 100644 --- a/frontend/src/documents/panel/DocumentsPanel.tsx +++ b/frontend/src/documents/panel/DocumentsPanel.tsx @@ -6,7 +6,11 @@ import DesktopWorkspace from '../../desktop/DesktopWorkspace'; import { isTagTransferEvent } from '../tagTransfer'; import PreviewZoomOverlay from '../../detail/PreviewZoomOverlay'; import { isPointerModifierEvent, isPrimaryPointerEvent } from '../useEntryPointer'; -import { useWorkspaceSelectionContext } from '../../app/WorkspaceSelectionContext'; +import { + WorkspaceSelectionProvider, + useWorkspaceSelectionContext, +} from '../../app/WorkspaceSelectionContext'; +import type { WorkspaceSelectionValue } from '../../app/WorkspaceSelectionContext'; import DocumentsPanelHeader, { DocumentsPanelHeaderConfig, DocumentsHeaderBreadcrumb, @@ -21,17 +25,21 @@ const EntryType = { document: 'document', }; -interface DocumentsPanelProps { +interface DocumentsPanelInnerProps { headerLeading?: ReactNode; onBreadcrumbNavigate?: (crumb: DocumentsHeaderBreadcrumb) => void; [key: string]: any; } +interface DocumentsPanelProps extends DocumentsPanelInnerProps { + selectionValue: WorkspaceSelectionValue; +} + const defaultGetDocumentAsset = (_doc?: unknown, _type?: string) => null; export type DocumentLinkLike = { url?: string | null; contentType?: string | null }; -const DocumentsPanel: React.FC = ({ +const DocumentsPanelInner: React.FC = ({ headerLeading = null, onBreadcrumbNavigate, currentFolderName, @@ -825,4 +833,10 @@ const DocumentsPanel: React.FC = ({ ); }; +const DocumentsPanel: React.FC = ({ selectionValue, ...rest }) => ( + + + +); + export default DocumentsPanel; diff --git a/frontend/src/hooks/documents/useDocumentsWorkspace.ts b/frontend/src/hooks/documents/useDocumentsWorkspace.ts index a6bb546..73fcfdd 100644 --- a/frontend/src/hooks/documents/useDocumentsWorkspace.ts +++ b/frontend/src/hooks/documents/useDocumentsWorkspace.ts @@ -1539,6 +1539,7 @@ const useDocumentsWorkspace = ({ selectFolder, documentLinks, ensureDownloadUrl, + selectionValue: selection, }); const documentsTableProps = useMemo( @@ -1700,7 +1701,6 @@ const useDocumentsWorkspace = ({ dropOverlayState, managementModals, contextValue, - workspaceSelection: selection, settingsOpen, closeSettings, };