mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-08-22 04:09:22 +00:00
39 lines
1.0 KiB
TypeScript
39 lines
1.0 KiB
TypeScript
![]() |
import { useMemo } from 'react';
|
||
|
|
||
|
/**
|
||
|
* 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 | null): { file: File; url: string } | null {
|
||
|
return useMemo(() => {
|
||
|
if (!file) return null;
|
||
|
|
||
|
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;
|
||
|
}, [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]);
|
||
|
}
|