@mantine/form
Version:
Mantine form management library
97 lines (96 loc) • 4.18 kB
JavaScript
"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