feat: refactor frontend document sorting preferences and sidebar utilities.

This commit is contained in:
2025-12-07 22:55:26 +01:00
parent 53664f2421
commit b29e856225
9 changed files with 160 additions and 314 deletions
+22 -37
View File
@@ -1,44 +1,14 @@
import React, { useRef } from 'react';
import { useAppShell } from '../lib/context/AppShellContext';
import { usePanelResizeBindings } from '../app/PanelManagerContext';
import type { Identifier } from '../types/identifiers';
import SidebarFolderList from './components/SidebarFolderList';
import SidebarTagList from './components/SidebarTagList';
import SidebarCorrespondentList from './components/SidebarCorrespondentList';
import { FolderIdentifier } from './components/SidebarFolderNode';
import { TenantOption } from './components/SidebarMenu';
import SidebarHeader from './components/SidebarHeader';
import SidebarSearch from './components/SidebarSearch';
interface SidebarProps {
onSelect: (folderId: FolderIdentifier) => void;
onDrop: (event: React.DragEvent<HTMLDivElement>, folderId: FolderIdentifier) => void;
onDragOver: (event: React.DragEvent<HTMLDivElement>, folderId: FolderIdentifier) => void;
onDragLeave: (event: React.DragEvent<HTMLDivElement>) => void;
onDeleteFolder: (folderId: FolderIdentifier) => void;
onRenameFolder?: (folderId: FolderIdentifier, name: string) => void;
selectedFolder?: FolderIdentifier | null;
onFolderDragStart?: (event: React.DragEvent<HTMLDivElement>, folderId: FolderIdentifier) => void;
onFolderDragEnd?: (event: React.DragEvent<HTMLDivElement>) => void;
draggedFolderId?: FolderIdentifier | null;
onCreateFolder?: (parentId?: Identifier | null) => void;
creatingFolder?: boolean;
}
const Sidebar: React.FC<SidebarProps> = ({
onSelect,
onDrop,
onDragOver,
onDragLeave,
onDeleteFolder,
onRenameFolder,
selectedFolder = null,
onFolderDragStart,
onFolderDragEnd,
draggedFolderId = null,
onCreateFolder,
creatingFolder = false,
}) => {
const Sidebar: React.FC = () => {
const {
sidebarSuppressed,
openTagsModal,
@@ -52,7 +22,22 @@ const Sidebar: React.FC<SidebarProps> = ({
handleTenantSelect,
openSettings,
handleFileSelection, // Used for upload
} = useAppShell();
// Folder Tree Context Props
folderClickHandlers = {},
handleFolderDelete,
handleFolderRename,
selectedFolder = null,
handleFolderDragStart,
handleFolderDragEnd,
draggedFolderId = null,
handlePromptCreateFolder,
creatingFolder = false,
} = useAppShell() as any;
const onSelect = folderClickHandlers.onSelect;
const onDrop = folderClickHandlers.onDrop;
const onDragOver = folderClickHandlers.onDragOver;
const onDragLeave = folderClickHandlers.onDragLeave;
const onManageTags = openTagsModal;
const onManageCorrespondents = openCorrespondentsModal;
@@ -110,12 +95,12 @@ const Sidebar: React.FC<SidebarProps> = ({
onDrop={onDrop}
onDragOver={onDragOver}
onDragLeave={onDragLeave}
onDeleteFolder={onDeleteFolder}
onRenameFolder={onRenameFolder}
onFolderDragStart={onFolderDragStart}
onFolderDragEnd={onFolderDragEnd}
onDeleteFolder={handleFolderDelete}
onRenameFolder={handleFolderRename}
onFolderDragStart={handleFolderDragStart}
onFolderDragEnd={handleFolderDragEnd}
draggedFolderId={draggedFolderId}
onCreateFolder={onCreateFolder}
onCreateFolder={handlePromptCreateFolder}
creatingFolder={creatingFolder}
/>
-64
View File
@@ -1,64 +0,0 @@
import { useMemo } from 'react';
import type { DragEvent } from 'react';
import type { Identifier } from '../types/identifiers';
type FolderDropHandler = (
event: DragEvent<HTMLElement>,
folderId: Identifier,
) => void | Promise<void>;
interface FolderClickHandlers {
onSelect: (folderId: Identifier | null) => void;
onDrop: FolderDropHandler;
onDragOver: (event: DragEvent<HTMLElement>, folderId: Identifier) => void;
onDragLeave: (event: DragEvent<HTMLElement>) => void;
}
interface UseSidebarPropsArgs {
folderClickHandlers: FolderClickHandlers;
handleFolderDelete: (folderId: Identifier) => void | Promise<void>;
handleFolderRename: (folderId: Identifier, name: string) => void | Promise<void>;
selectedFolder: Identifier | null;
handleFolderDragStart: (event: DragEvent<HTMLElement>, folderId: Identifier) => void;
handleFolderDragEnd: (event: DragEvent<HTMLElement>) => void;
draggedFolderId: Identifier | null;
handlePromptCreateFolder?: (parentId?: Identifier | null) => void;
creatingFolder: boolean;
}
interface SidebarHookResult {
onSelect: FolderClickHandlers['onSelect'];
onDrop: FolderClickHandlers['onDrop'];
onDragOver: FolderClickHandlers['onDragOver'];
onDragLeave: FolderClickHandlers['onDragLeave'];
onDeleteFolder: UseSidebarPropsArgs['handleFolderDelete'];
onRenameFolder: UseSidebarPropsArgs['handleFolderRename'];
selectedFolder: Identifier | null;
onFolderDragStart: UseSidebarPropsArgs['handleFolderDragStart'];
onFolderDragEnd: UseSidebarPropsArgs['handleFolderDragEnd'];
draggedFolderId: Identifier | null;
onCreateFolder: UseSidebarPropsArgs['handlePromptCreateFolder'];
creatingFolder: boolean;
}
const useSidebarProps = (args: UseSidebarPropsArgs): SidebarHookResult =>
useMemo(
() => ({
onSelect: args.folderClickHandlers.onSelect,
onDrop: args.folderClickHandlers.onDrop,
onDragOver: args.folderClickHandlers.onDragOver,
onDragLeave: args.folderClickHandlers.onDragLeave,
onDeleteFolder: args.handleFolderDelete,
onRenameFolder: args.handleFolderRename,
selectedFolder: args.selectedFolder,
onFolderDragStart: args.handleFolderDragStart,
onFolderDragEnd: args.handleFolderDragEnd,
draggedFolderId: args.draggedFolderId,
onCreateFolder: (parentId) => args.handlePromptCreateFolder?.(parentId),
creatingFolder: args.creatingFolder,
}),
[args],
);
export default useSidebarProps;