@ariakit/react-core
Version:
Ariakit React core
61 lines (58 loc) • 1.55 kB
JavaScript
"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
};