Files
Stirling-PDF/frontend/src/hooks/useFileHandler.ts
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

40 lines
1.5 KiB
TypeScript
Raw Normal View History

2025-08-04 15:01:36 +01:00
import { useCallback } from 'react';
import { useFileState, useFileActions } from '../contexts/FileContext';
import { FileMetadata } from '../types/file';
import { FileId } from '../types/file';
2025-08-04 15:01:36 +01:00
export const useFileHandler = () => {
const { state } = useFileState(); // Still needed for addStoredFiles
const { actions } = useFileActions();
2025-08-04 15:01:36 +01:00
const addToActiveFiles = useCallback(async (file: File) => {
// Let FileContext handle deduplication with quickKey logic
2025-08-29 16:39:19 +01:00
await actions.addFiles([file], { selectFiles: true });
}, [actions.addFiles]);
2025-08-04 15:01:36 +01:00
const addMultipleFiles = useCallback(async (files: File[]) => {
// Let FileContext handle deduplication with quickKey logic
2025-08-29 16:39:19 +01:00
await actions.addFiles(files, { selectFiles: true });
}, [actions.addFiles]);
// Add stored files preserving their original IDs to prevent session duplicates
const addStoredFiles = useCallback(async (filesWithMetadata: Array<{ file: File; originalId: FileId; metadata: FileMetadata }>) => {
// Filter out files that already exist with the same ID (exact match)
const newFiles = filesWithMetadata.filter(({ originalId }) => {
return state.files.byId[originalId] === undefined;
});
2025-08-04 15:01:36 +01:00
if (newFiles.length > 0) {
2025-08-29 16:39:19 +01:00
await actions.addStoredFiles(newFiles, { selectFiles: true });
2025-08-04 15:01:36 +01:00
}
console.log(`📁 Added ${newFiles.length} stored files (${filesWithMetadata.length - newFiles.length} skipped as duplicates)`);
}, [state.files.byId, actions.addStoredFiles]);
2025-08-04 15:01:36 +01:00
return {
addToActiveFiles,
addMultipleFiles,
addStoredFiles,
2025-08-04 15:01:36 +01:00
};
};