UNPKG

tweak-tools

Version:

Tweak your React projects until awesomeness

35 lines (34 loc) 1.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useInputSetters = void 0; const lite_1 = require("dequal/lite"); const react_1 = require("react"); const plugin_1 = require("../plugin"); function useInputSetters({ value, type, settings, setValue }) { // the value used by the panel vs the value const [displayValue, setDisplayValue] = (0, react_1.useState)((0, plugin_1.format)(type, value, settings)); const previousValueRef = (0, react_1.useRef)(value); const settingsRef = (0, react_1.useRef)(settings); settingsRef.current = settings; const setFormat = (0, react_1.useCallback)((v) => setDisplayValue((0, plugin_1.format)(type, v, settingsRef.current)), [type]); const onUpdate = (0, react_1.useCallback)((updatedValue) => { try { setValue(updatedValue); } catch (error) { const { type, previousValue } = error; // make sure we throw an error if it's not a sanitization error if (type !== 'tweak_error') throw error; setFormat(previousValue); } }, [setFormat, setValue]); (0, react_1.useEffect)(() => { if (!(0, lite_1.dequal)(value, previousValueRef.current)) { setFormat(value); } previousValueRef.current = value; }, [value, setFormat]); return { displayValue, onChange: setDisplayValue, onUpdate }; } exports.useInputSetters = useInputSetters;