feat: Add file ID lookup and integrate with file consumption in tool operations

This commit is contained in:
Reece Browne 2025-08-19 22:32:29 +01:00
parent 50f4ccd4d5
commit b8cf5fda7e
4 changed files with 18 additions and 9 deletions

View File

@ -375,7 +375,7 @@ const PageEditor = ({
}
);
console.log(`📸 PageEditor: Thumbnail generation completed for ${pageNumbers.length} pages`);
// Removed verbose logging - only log errors
} catch (error) {
console.error('PageEditor: Thumbnail generation failed:', error);
}
@ -399,7 +399,7 @@ const PageEditor = ({
}
if (chunkPageNumbers.length > 0) {
console.log(`📸 PageEditor: Background generating chunk: pages ${start}-${end} (${chunkPageNumbers.length} needed)`);
// Background thumbnail generation in progress (removed verbose logging)
await generateThumbnailBatch(file, fileId, chunkPageNumbers);
// Small delay between chunks to keep UI responsive

View File

@ -161,6 +161,17 @@ export function useFileContext() {
markOperationApplied: (fileId: string, operationId: string) => {}, // TODO: Implement operation tracking
markOperationFailed: (fileId: string, operationId: string, error: string) => {}, // TODO: Implement operation tracking
// File ID lookup
findFileId: (file: File) => {
return state.files.ids.find(id => {
const record = state.files.byId[id];
return record &&
record.name === file.name &&
record.size === file.size &&
record.lastModified === file.lastModified;
});
},
// Pinned files
pinnedFiles: state.pinnedFiles,
pinFile: actions.pinFile,

View File

@ -104,7 +104,7 @@ export const useToolOperation = <TParams = void>(
config: ToolOperationConfig<TParams>
): ToolOperationHook<TParams> => {
const { t } = useTranslation();
const { recordOperation, markOperationApplied, markOperationFailed, addFiles } = useFileContext();
const { recordOperation, markOperationApplied, markOperationFailed, addFiles, consumeFiles, findFileId } = useFileContext();
// Composed hooks
const { state, actions } = useToolState();
@ -198,8 +198,9 @@ export const useToolOperation = <TParams = void>(
actions.setThumbnails(thumbnails);
actions.setDownloadInfo(downloadInfo.url, downloadInfo.filename);
// Add processed files to the file context
await addFiles(processedFiles);
// Replace input files with processed files (consumeFiles handles pinning)
const inputFileIds = validFiles.map(file => findFileId(file)).filter(Boolean) as string[];
await consumeFiles(inputFileIds, processedFiles);
markOperationApplied(fileId, operationId);
}
@ -213,7 +214,7 @@ export const useToolOperation = <TParams = void>(
actions.setLoading(false);
actions.setProgress(null);
}
}, [t, config, actions, recordOperation, markOperationApplied, markOperationFailed, addFiles, processFiles, generateThumbnails, createDownloadInfo, cleanupBlobUrls, extractZipFiles, extractAllZipFiles]);
}, [t, config, actions, recordOperation, markOperationApplied, markOperationFailed, addFiles, consumeFiles, findFileId, processFiles, generateThumbnails, createDownloadInfo, cleanupBlobUrls, extractZipFiles, extractAllZipFiles]);
const cancelOperation = useCallback(() => {
cancelApiCalls();

View File

@ -248,9 +248,6 @@ export interface FileContextActions {
trackPdfDocument: (key: string, pdfDoc: any) => void;
scheduleCleanup: (fileId: string, delay?: number) => void;
cleanupFile: (fileId: string) => void;
// Persistence operations
loadFromPersistence: () => Promise<void>;
}
// File selectors (separate from actions to avoid re-renders)