@mantine/form
Version:
Mantine form management library
51 lines (50 loc) • 1.75 kB
JavaScript
"use client";
import { useCallback, useRef, useState } from "react";
//#region packages/@mantine/form/src/hooks/use-form-validating/use-form-validating.ts
function useFormValidating() {
const [validatingFields, setValidatingFields] = useState({});
const [formValidating, setFormValidatingState] = useState(false);
const validatingRef = useRef({});
const formValidatingRef = useRef(false);
const abortControllers = useRef({});
const setFieldValidating = useCallback((path, value) => {
validatingRef.current = {
...validatingRef.current,
[path]: value
};
setValidatingFields({ ...validatingRef.current });
}, []);
const setFormValidating = useCallback((value) => {
formValidatingRef.current = value;
setFormValidatingState(value);
}, []);
const isValidating = useCallback((path) => {
if (path) return !!validatingRef.current[path];
if (formValidatingRef.current) return true;
return Object.values(validatingRef.current).some(Boolean);
}, []);
const getAbortSignal = useCallback((path) => {
abortControllers.current[path]?.abort();
abortControllers.current[path] = new AbortController();
return abortControllers.current[path].signal;
}, []);
const clearValidating = useCallback(() => {
validatingRef.current = {};
setValidatingFields({});
formValidatingRef.current = false;
setFormValidatingState(false);
Object.values(abortControllers.current).forEach((c) => c.abort());
abortControllers.current = {};
}, []);
return {
validating: formValidating || Object.values(validatingFields).some(Boolean),
isValidating,
setFieldValidating,
setFormValidating,
getAbortSignal,
clearValidating
};
}
//#endregion
export { useFormValidating };
//# sourceMappingURL=use-form-validating.mjs.map