UNPKG

@ariakit/react-core

Version:

Ariakit React core

61 lines (58 loc) 1.55 kB
"use client"; import { useCollectionStoreProps } from "./55ENK5IP.js"; import { useStore, useStoreProps, useStoreState } from "./SOQQIDO4.js"; import { useEvent } from "./W2TDKEPX.js"; // src/form/form-store.ts import * as Core from "@ariakit/core/form/form-store"; import { useCallback, useEffect, useMemo } from "react"; function useFormStoreProps(store, update, props) { store = useCollectionStoreProps(store, update, props); useStoreProps(store, props, "values", "setValues"); useStoreProps(store, props, "errors", "setErrors"); useStoreProps(store, props, "touched", "setTouched"); const useValue = useCallback( (name) => useStoreState(store, () => store.getValue(name)), [store] ); const useValidate = useCallback( (callback) => { callback = useEvent(callback); const items = useStoreState(store, "items"); useEffect(() => store.onValidate(callback), [items, callback]); }, [store] ); const useSubmit = useCallback( (callback) => { callback = useEvent(callback); const items = useStoreState(store, "items"); useEffect(() => store.onSubmit(callback), [items, callback]); }, [store] ); return useMemo( () => ({ ...store, useValue, useValidate, useSubmit }), [store, useValue, useValidate, useSubmit] ); } function useFormStore(props = {}) { const [store, update] = useStore(Core.createFormStore, props); return useFormStoreProps(store, update, props); } export { useFormStoreProps, useFormStore };