mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-09-18 09:29:24 +00:00

Added Filewithid type Updated code where file was being used to use filewithid Updated places we identified files by name or composite keys to use UUID Updated places we should have been using quickkey Updated pageeditor issue where we parsed pagenumber from pageid instead of using pagenumber directly --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: James Brunton <jbrunton96@gmail.com>
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import { useMemo } from 'react';
|
|
import { isFileObject } from '../types/fileContext';
|
|
|
|
/**
|
|
* Hook to convert a File object to { file: File; url: string } format
|
|
* Creates blob URL on-demand and handles cleanup
|
|
*/
|
|
export function useFileWithUrl(file: File | Blob | null): { file: File | Blob; url: string } | null {
|
|
return useMemo(() => {
|
|
if (!file) return null;
|
|
|
|
// Validate that file is a proper File, StirlingFile, or Blob object
|
|
if (!isFileObject(file) && !(file instanceof Blob)) {
|
|
console.warn('useFileWithUrl: Expected File or Blob, got:', file);
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
const url = URL.createObjectURL(file);
|
|
|
|
// Return object with cleanup function
|
|
const result = { file, url };
|
|
|
|
// Store cleanup function for later use
|
|
(result as any)._cleanup = () => URL.revokeObjectURL(url);
|
|
|
|
return result;
|
|
} catch (error) {
|
|
console.error('useFileWithUrl: Failed to create object URL:', error, file);
|
|
return null;
|
|
}
|
|
}, [file]);
|
|
}
|
|
|
|
/**
|
|
* Hook variant that returns cleanup function separately
|
|
*/
|
|
export function useFileWithUrlAndCleanup(file: File | null): {
|
|
fileObj: { file: File; url: string } | null;
|
|
cleanup: () => void;
|
|
} {
|
|
return useMemo(() => {
|
|
if (!file) return { fileObj: null, cleanup: () => {} };
|
|
|
|
const url = URL.createObjectURL(file);
|
|
const fileObj = { file, url };
|
|
const cleanup = () => URL.revokeObjectURL(url);
|
|
|
|
return { fileObj, cleanup };
|
|
}, [file]);
|
|
}
|