import { useMemo } from 'react'; import type { WorkspaceSelectionValue } from '../../app/WorkspaceSelectionContext'; type Identifier = string | number; interface DocumentLinkLike { url?: string | null; contentType?: string | null; } export interface Breadcrumb { id?: Identifier; name?: string; label?: string; title?: string; } export interface FolderClickHandlers { onDrop?: (...args: unknown[]) => void; onDragOver?: (...args: unknown[]) => void; onDragLeave?: (...args: unknown[]) => void; } export interface UseDocumentsPanelPropsArgs { currentFolderName?: string | null; breadcrumbs?: Breadcrumb[]; refreshCurrentFolder?: () => void | Promise; currentSubfolders?: unknown[]; documents?: unknown[]; searchResultIds?: Identifier[] | null; folderClickHandlers: FolderClickHandlers; selectFolder?: (...args: unknown[]) => void; handleFolderDragStart?: (...args: unknown[]) => void; handleFolderDragEnd?: (...args: unknown[]) => void; draggedFolderId?: Identifier | null; handleFolderRename?: (...args: unknown[]) => void; openDocumentPreview?: (...args: unknown[]) => void; handleDocumentTitleUpdate?: (...args: unknown[]) => void; focusedRowKey?: Identifier | string | null; draggedDocumentIds?: Identifier[]; handleDocumentDragStart?: (...args: unknown[]) => void; handleDocumentDragEnd?: (...args: unknown[]) => void; searchLoading?: boolean; tagLookupById?: unknown; activeCorrespondentFilters?: Identifier[]; ensureAssetUrl?: (...args: unknown[]) => void; getDocumentAsset?: (...args: unknown[]) => unknown; handleDocumentTagDrop?: (...args: unknown[]) => void; documentsViewMode?: string; documentsSortField?: string; documentsSortDirection?: string; handleDocumentsSortFieldChange?: (field: string) => void; handleDocumentsSortDirectionToggle?: () => void; handleDocumentsViewModeChange?: (mode: string) => void; clearDocumentSelection?: () => void; handleDeleteSelection?: () => void; handleEntryPointerCore?: (...args: unknown[]) => void; inspectDocument?: (docId: Identifier | null, metadata?: unknown) => void; tags?: unknown[]; correspondents?: unknown[]; documentLookup?: unknown; handleBulkTagAddFromDetail?: (...args: unknown[]) => void; handleBulkTagRemoveFromDetail?: (...args: unknown[]) => void; handleBulkCorrespondentAdd?: (...args: unknown[]) => void; handleBulkCorrespondentRemove?: (...args: unknown[]) => void; handleBulkSelectionReanalyze?: (...args: unknown[]) => void; folderOptions?: unknown[]; moveDocumentsToFolder?: (...args: unknown[]) => void; documentLinks?: Map; ensureDownloadUrl?: (documentId: Identifier, options?: { force?: boolean }) => Promise; selectionValue: WorkspaceSelectionValue; } export type DocumentsPanelProps = ReturnType; const useDocumentsPanelProps = (props: UseDocumentsPanelPropsArgs) => { const { currentFolderName, breadcrumbs, refreshCurrentFolder, currentSubfolders, documents, searchResultIds, folderClickHandlers, selectFolder, handleFolderDragStart, handleFolderDragEnd, draggedFolderId, handleFolderRename, openDocumentPreview, handleDocumentTitleUpdate, focusedRowKey, draggedDocumentIds, handleDocumentDragStart, handleDocumentDragEnd, searchLoading, tagLookupById, activeCorrespondentFilters, ensureAssetUrl, getDocumentAsset, handleDocumentTagDrop, documentsViewMode, documentsSortField, documentsSortDirection, handleDocumentsSortFieldChange, handleDocumentsSortDirectionToggle, handleDocumentsViewModeChange, handleDeleteSelection, handleEntryPointerCore, inspectDocument, tags, correspondents, documentLookup, handleBulkTagAddFromDetail, handleBulkTagRemoveFromDetail, handleBulkCorrespondentAdd, handleBulkCorrespondentRemove, handleBulkSelectionReanalyze, folderOptions, moveDocumentsToFolder, documentLinks, ensureDownloadUrl, selectionValue, } = props; return useMemo( () => ({ currentFolderName, breadcrumbs, onRefresh: refreshCurrentFolder, subfolders: currentSubfolders, documents, searchResultIds, onFolderSelect: selectFolder, onFolderDrop: folderClickHandlers.onDrop, onFolderDragOver: folderClickHandlers.onDragOver, onFolderDragLeave: folderClickHandlers.onDragLeave, onFolderDragStart: handleFolderDragStart, onFolderDragEnd: handleFolderDragEnd, draggedFolderId, onFolderRename: handleFolderRename, onDocumentOpen: openDocumentPreview, onDocumentRename: handleDocumentTitleUpdate, focusedRowKey, draggingDocumentIds: draggedDocumentIds, onDocumentDragStart: handleDocumentDragStart, onDocumentDragEnd: handleDocumentDragEnd, isSearchLoading: searchLoading, tagLookupById, activeCorrespondentIds: activeCorrespondentFilters, ensureAssetUrl, getDocumentAsset, onDocumentTagDrop: handleDocumentTagDrop, viewMode: documentsViewMode, sortField: documentsSortField, sortDirection: documentsSortDirection, onSortFieldChange: handleDocumentsSortFieldChange, onSortDirectionToggle: handleDocumentsSortDirectionToggle, onViewModeChange: handleDocumentsViewModeChange, onDeleteSelection: handleDeleteSelection, onEntryPointer: handleEntryPointerCore, onInspectDocument: inspectDocument, tags, correspondents, documentLookup, onBulkTagAdd: handleBulkTagAddFromDetail, onBulkTagRemove: handleBulkTagRemoveFromDetail, onBulkCorrespondentAdd: handleBulkCorrespondentAdd, onBulkCorrespondentRemove: handleBulkCorrespondentRemove, onBulkReanalyze: handleBulkSelectionReanalyze, folderOptions, onMoveDocumentsToFolder: moveDocumentsToFolder, documentLinks, ensureDownloadUrl, selectionValue, }), [ activeCorrespondentFilters, breadcrumbs, correspondents, currentFolderName, currentSubfolders, documents, documentsSortDirection, documentsSortField, documentsViewMode, documentLookup, draggedDocumentIds, draggedFolderId, focusedRowKey, folderClickHandlers, handleBulkCorrespondentAdd, handleBulkCorrespondentRemove, handleBulkSelectionReanalyze, handleBulkTagAddFromDetail, handleBulkTagRemoveFromDetail, handleDeleteSelection, handleDocumentDragEnd, handleDocumentDragStart, handleDocumentTagDrop, handleDocumentTitleUpdate, handleDocumentsSortDirectionToggle, handleDocumentsSortFieldChange, handleDocumentsViewModeChange, handleEntryPointerCore, handleFolderDragEnd, handleFolderDragStart, handleFolderRename, inspectDocument, moveDocumentsToFolder, openDocumentPreview, refreshCurrentFolder, searchLoading, searchResultIds, selectFolder, tagLookupById, tags, ensureAssetUrl, getDocumentAsset, folderOptions, documentLinks, ensureDownloadUrl, selectionValue, ], ); }; export default useDocumentsPanelProps;