29 lines
796 B
JavaScript
29 lines
796 B
JavaScript
/* eslint-disable import/prefer-default-export */
|
|
import { useEffect, useState } from 'react';
|
|
import { useValue } from 'stores/calculation/values/hooks';
|
|
import { useDebouncedCallback } from 'use-debounce';
|
|
|
|
export function useStoreValue(valueName) {
|
|
const [storeValue, setStoreValue] = useValue(valueName);
|
|
const [value, setValue] = useState(storeValue);
|
|
|
|
// eslint-disable-next-line object-curly-newline
|
|
const debouncedSetStoreValue = useDebouncedCallback(setStoreValue, 350, { maxWait: 1000 });
|
|
|
|
useEffect(
|
|
() => {
|
|
if (storeValue !== value) {
|
|
debouncedSetStoreValue(value);
|
|
}
|
|
},
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
[value]
|
|
);
|
|
|
|
useEffect(() => {
|
|
setValue(storeValue);
|
|
}, [storeValue]);
|
|
|
|
return [value, setValue];
|
|
}
|