@minimaltech/ra-infra
Version:
Minimal Technology ReactJS Infrastructure
44 lines • 1.7 kB
JavaScript
import React from 'react';
import { useDebounce } from './use-debounce';
export const useAutosave = (params) => {
const { data, onSave, interval = 2000, enableSaveOnUnmount, disabled } = params;
//---------------------------------------------------------------------------
const valueOnCleanup = React.useRef(data);
const initialRender = React.useRef(true);
const handleSave = React.useRef(onSave);
//---------------------------------------------------------------------------
const { debouncedValue: debouncedValueToSave } = useDebounce({
value: data,
delay: interval,
disabled,
});
//---------------------------------------------------------------------------
React.useEffect(() => {
if (initialRender.current) {
initialRender.current = false;
return;
}
handleSave.current(debouncedValueToSave);
return () => { };
}, [debouncedValueToSave]);
//---------------------------------------------------------------------------
React.useEffect(() => {
valueOnCleanup.current = data;
return () => { };
}, [data]);
//---------------------------------------------------------------------------
React.useEffect(() => {
handleSave.current = onSave;
return () => { };
}, [onSave]);
//---------------------------------------------------------------------------
React.useEffect(() => {
return () => {
if (!enableSaveOnUnmount) {
return;
}
handleSave.current(valueOnCleanup.current);
};
}, [enableSaveOnUnmount]);
};
//# sourceMappingURL=use-autosave.js.map