UNPKG

@mantine/form

Version:

Mantine form management library

94 lines (93 loc) 3.3 kB
"use client"; require("../../_virtual/_rolldown/runtime.cjs"); const require_get_path = require("../../paths/get-path.cjs"); const require_set_path = require("../../paths/set-path.cjs"); let react = require("react"); //#region packages/@mantine/form/src/hooks/use-form-values/use-form-values.ts function useFormValues({ initialValues, onValuesChange, mode }) { const initialized = (0, react.useRef)(false); const [stateValues, setStateValues] = (0, react.useState)(initialValues || {}); const refValues = (0, react.useRef)(stateValues); const valuesSnapshot = (0, react.useRef)(stateValues); const setValues = (0, react.useCallback)(({ values, subscribers, updateState = true, mergeWithPreviousValues = true }) => { const previousValues = refValues.current; const resolvedValues = values instanceof Function ? values(refValues.current) : values; const updatedValues = mergeWithPreviousValues ? { ...previousValues, ...resolvedValues } : resolvedValues; refValues.current = updatedValues; if (updateState) { setStateValues(updatedValues); if (mode === "uncontrolled") refValues.current = updatedValues; } onValuesChange?.(updatedValues, previousValues); subscribers?.filter(Boolean).forEach((subscriber) => subscriber({ updatedValues, previousValues })); }, [onValuesChange]); const setFieldValue = (0, react.useCallback)((payload) => { const currentValue = require_get_path.getPath(payload.path, refValues.current); const updatedValue = payload.value instanceof Function ? payload.value(currentValue) : payload.value; if (currentValue !== updatedValue) { const previousValues = refValues.current; const updatedValues = require_set_path.setPath(payload.path, updatedValue, refValues.current); setValues({ values: updatedValues, updateState: payload.updateState }); payload.subscribers?.filter(Boolean).forEach((subscriber) => subscriber({ path: payload.path, updatedValues, previousValues })); } }, [setValues]); const setValuesSnapshot = (0, react.useCallback)((payload) => { valuesSnapshot.current = payload; }, []); const initialize = (0, react.useCallback)((values, onInitialize) => { if (!initialized.current) { initialized.current = true; setValues({ values, updateState: mode === "controlled" }); setValuesSnapshot(values); onInitialize(); } }, [setValues]); return { initialized, stateValues, refValues, valuesSnapshot, setValues, setFieldValue, resetValues: (0, react.useCallback)(() => { setValues({ values: valuesSnapshot.current, updateState: true, mergeWithPreviousValues: false }); }, [setValues]), setValuesSnapshot, initialize, getValues: (0, react.useCallback)(() => refValues.current, []), getValuesSnapshot: (0, react.useCallback)(() => valuesSnapshot.current, []), resetField: (0, react.useCallback)((path, subscribers) => { const snapshotValue = require_get_path.getPath(path, valuesSnapshot.current); if (typeof snapshotValue === "undefined") return; setFieldValue({ path, value: snapshotValue, updateState: mode === "controlled", subscribers }); }, [setFieldValue, mode]) }; } //#endregion exports.useFormValues = useFormValues; //# sourceMappingURL=use-form-values.cjs.map