UNPKG

@mantine/form

Version:

Mantine form management library

51 lines (50 loc) 1.75 kB
"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