evermark-sdk
Version:
Unified SDK for robust image handling and content management with storage orchestration
73 lines • 2.66 kB
JavaScript
/**
* Main hook implementing your 3-step storage flow
* MINIMAL CHANGES: Fixed import paths only
*/
import { useState, useCallback, useRef, useEffect } from 'react';
import { StorageOrchestrator } from '../../storage/storage-orchestrator.js';
export function useStorageFlow(options) {
const { storageConfig, autoStart = false, debug = false } = options;
const [status, setStatus] = useState('idle');
const [result, setResult] = useState(null);
const [progress, setProgress] = useState(null);
const [error, setError] = useState(null);
const [lastInput, setLastInput] = useState(null);
const orchestratorRef = useRef(null);
// Initialize orchestrator
useEffect(() => {
orchestratorRef.current = new StorageOrchestrator(storageConfig);
}, [storageConfig]);
const startFlow = useCallback(async (input) => {
if (!orchestratorRef.current)
return;
try {
setStatus('checking');
setError(null);
setProgress(null);
setResult(null);
setLastInput(input);
if (debug)
console.log('[StorageFlow] Starting flow with input:', input);
const flowResult = await orchestratorRef.current.ensureImageInSupabase(input, (progressUpdate) => {
setProgress(progressUpdate);
if (progressUpdate.phase === 'uploading') {
setStatus('transferring');
}
});
setResult(flowResult);
setStatus('complete');
setProgress({ phase: 'complete', percentage: 100, message: 'Flow complete' });
if (debug)
console.log('[StorageFlow] Flow completed:', flowResult);
}
catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Storage flow failed';
setError(errorMessage);
setStatus('failed');
setProgress(null);
if (debug)
console.error('[StorageFlow] Flow failed:', err);
}
}, [debug]);
const reset = useCallback(() => {
setStatus('idle');
setResult(null);
setProgress(null);
setError(null);
setLastInput(null);
}, []);
const retry = useCallback(async () => {
if (lastInput)
await startFlow(lastInput);
}, [lastInput, startFlow]);
return {
status,
result,
progress,
error,
isProcessing: status === 'checking' || status === 'transferring',
startFlow,
reset,
retry
};
}
//# sourceMappingURL=useStorageFlow.js.map