use-form-auto-save
Version:
A customizable React hook for automatically saving and restoring form data with support for localStorage, sessionStorage, and external APIs.
70 lines • 2.5 kB
JavaScript
import { useCallback } from 'react';
export function useSaveHandler({ formKey, storageType, saveFunction, onError, maxRetries, logDebug, retryCount, setRetryCount, setShouldRetry, setIsAutoSavePaused, setIsSaving, setIsSaveSuccessful, setLastSavedData, }) {
const performSave = useCallback(async (formData) => {
logDebug(`Initiating auto-save for formKey: ${formKey}`);
try {
setIsSaving(true);
setIsSaveSuccessful(false);
if (storageType === 'api' && saveFunction) {
logDebug('Saving via API:', formData);
await saveFunction(formData);
}
else {
try {
const storage = storageType === 'localStorage' ? localStorage : sessionStorage;
logDebug(`Saving to ${storageType}:`, formData);
storage.setItem(formKey, JSON.stringify(formData));
}
catch (storageError) {
logDebug('Storage save failed:', storageError);
if (onError)
onError(storageError);
if (retryCount < maxRetries) {
setShouldRetry(true);
}
else {
setIsAutoSavePaused(true);
}
return;
}
}
setLastSavedData(formData);
setRetryCount(0);
setIsSaveSuccessful(true);
setShouldRetry(false);
logDebug('Auto-save successful.');
}
catch (error) {
logDebug('Auto-save encountered an error:', error);
if (onError)
onError(error);
if (retryCount < maxRetries) {
setShouldRetry(true);
}
else {
setIsAutoSavePaused(true);
logDebug(`Auto-save paused after ${maxRetries} retries.`);
}
}
finally {
setIsSaving(false);
logDebug('Auto-save operation completed.');
}
}, [
formKey,
logDebug,
maxRetries,
onError,
retryCount,
saveFunction,
setIsAutoSavePaused,
setIsSaveSuccessful,
setIsSaving,
setLastSavedData,
setRetryCount,
setShouldRetry,
storageType,
]);
return { performSave };
}
//# sourceMappingURL=useSaveHandler.js.map