UNPKG

@minimaltech/ra-infra

Version:

Minimal Technology ReactJS Infrastructure

44 lines 1.7 kB
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