tweak-tools
Version:
Tweak your React projects until awesomeness
35 lines (34 loc) • 1.48 kB
JavaScript
;
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;