UNPKG

@mantine/form

Version:

Mantine form management library

97 lines (96 loc) 4.18 kB
"use client"; const require_runtime = require("../../_virtual/_rolldown/runtime.cjs"); const require_clear_list_state = require("../../lists/clear-list-state.cjs"); const require_get_path = require("../../paths/get-path.cjs"); const require_get_status = require("../../get-status/get-status.cjs"); let react = require("react"); let fast_deep_equal = require("fast-deep-equal"); fast_deep_equal = require_runtime.__toESM(fast_deep_equal); //#region packages/@mantine/form/src/hooks/use-form-status/use-form-status.ts function useFormStatus({ initialDirty, initialTouched, mode, $values }) { const [touchedState, setTouchedState] = (0, react.useState)(initialTouched); const [dirtyState, setDirtyState] = (0, react.useState)(initialDirty); const touchedRef = (0, react.useRef)(initialTouched); const dirtyRef = (0, react.useRef)(initialDirty); const setTouched = (0, react.useCallback)((values) => { const resolvedValues = typeof values === "function" ? values(touchedRef.current) : values; touchedRef.current = resolvedValues; if (mode === "controlled") setTouchedState(resolvedValues); }, []); const setDirty = (0, react.useCallback)((values, forceUpdate = false) => { const resolvedValues = typeof values === "function" ? values(dirtyRef.current) : values; dirtyRef.current = resolvedValues; if (mode === "controlled" || forceUpdate) setDirtyState(resolvedValues); }, []); const resetTouched = (0, react.useCallback)(() => setTouched({}), []); const resetDirty = (0, react.useCallback)((values) => { const newSnapshot = values ? { ...$values.refValues.current, ...values } : $values.refValues.current; $values.setValuesSnapshot(newSnapshot); setDirty({}); }, []); const setFieldTouched = (0, react.useCallback)((path, touched) => { setTouched((currentTouched) => { if (require_get_status.getStatus(currentTouched, path) === touched) return currentTouched; return { ...currentTouched, [path]: touched }; }); }, []); const setFieldDirty = (0, react.useCallback)((path, dirty, forceUpdate) => { setDirty((currentDirty) => { if (require_get_status.getStatus(currentDirty, path) === dirty) return currentDirty; return { ...currentDirty, [path]: dirty }; }, forceUpdate); }, []); const setCalculatedFieldDirty = (0, react.useCallback)((path, value) => { const currentDirty = require_get_status.getStatus(dirtyRef.current, path); const dirty = !(0, fast_deep_equal.default)(require_get_path.getPath(path, $values.getValuesSnapshot()), value); const clearedState = require_clear_list_state.clearListState(path, dirtyRef.current); clearedState[path] = dirty; setDirty(clearedState, currentDirty !== dirty); }, []); return { touchedState, dirtyState, touchedRef, dirtyRef, setTouched, setDirty, resetDirty, resetTouched, isTouched: (0, react.useCallback)((path) => require_get_status.getStatus(touchedRef.current, path), []), setFieldTouched, setFieldDirty, setTouchedState, setDirtyState, clearFieldDirty: (0, react.useCallback)((path) => setDirty((current) => { if (typeof path !== "string") return current; const result = require_clear_list_state.clearListState(path, current); delete result[path]; if ((0, fast_deep_equal.default)(result, current)) return current; return result; }), []), isDirty: (0, react.useCallback)((path) => { if (path) { const overriddenValue = require_get_path.getPath(path, dirtyRef.current); if (typeof overriddenValue === "boolean") return overriddenValue; return !(0, fast_deep_equal.default)(require_get_path.getPath(path, $values.refValues.current), require_get_path.getPath(path, $values.valuesSnapshot.current)); } if (Object.keys(dirtyRef.current).length > 0) return require_get_status.getStatus(dirtyRef.current); return !(0, fast_deep_equal.default)($values.refValues.current, $values.valuesSnapshot.current); }, []), getDirty: (0, react.useCallback)(() => dirtyRef.current, []), getTouched: (0, react.useCallback)(() => touchedRef.current, []), setCalculatedFieldDirty }; } //#endregion exports.useFormStatus = useFormStatus; //# sourceMappingURL=use-form-status.cjs.map