UNPKG

@ariakit/react-core

Version:

Ariakit React core

113 lines (93 loc) 3.65 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); var _ZCS6RONRcjs = require('../__chunks/ZCS6RONR.cjs'); var _DQ3AW7HUcjs = require('../__chunks/DQ3AW7HU.cjs'); var _PK35DJGAcjs = require('../__chunks/PK35DJGA.cjs'); require('../__chunks/H5ZMZIC6.cjs'); require('../__chunks/PDQXLIRF.cjs'); require('../__chunks/T3QB4FR3.cjs'); require('../__chunks/FVVTEJ4K.cjs'); var _6TI3NXX6cjs = require('../__chunks/6TI3NXX6.cjs'); var _L5A2ID7Scjs = require('../__chunks/L5A2ID7S.cjs'); require('../__chunks/FDRJDQ5Y.cjs'); var _7EQBAZ46cjs = require('../__chunks/7EQBAZ46.cjs'); // src/form/form-push.tsx var _misc = require('@ariakit/core/utils/misc'); var _react = require('react'); var TagName = "button"; function getFirstFieldsByName(items, name) { if (!items) return []; const fields = []; for (const item of items) { if (item.type !== "field") continue; if (!item.name.startsWith(name)) continue; const nameWithIndex = item.name.replace(/(\.\d+)\..+$/, "$1"); const regex = new RegExp(`^${nameWithIndex}`); if (!fields.some((i) => regex.test(i.name))) { fields.push(item); } } return fields; } var useFormPush = _6TI3NXX6cjs.createHook.call(void 0, function useFormPush2(_a) { var _b = _a, { store, value, name: nameProp, getItem: getItemProp, autoFocusOnClick = true } = _b, props = _7EQBAZ46cjs.__objRest.call(void 0, _b, [ "store", "value", "name", "getItem", "autoFocusOnClick" ]); const context = _ZCS6RONRcjs.useFormContext.call(void 0, ); store = store || context; _misc.invariant.call(void 0, store, process.env.NODE_ENV !== "production" && "FormPush must be wrapped in a Form component." ); const name = `${nameProp}`; const [shouldFocus, setShouldFocus] = _react.useState.call(void 0, false); _react.useEffect.call(void 0, () => { var _a2; if (!shouldFocus) return; const items = getFirstFieldsByName(store == null ? void 0 : store.getState().items, name); const element = (_a2 = items == null ? void 0 : items[items.length - 1]) == null ? void 0 : _a2.element; if (!element) return; element.focus(); setShouldFocus(false); }, [store, shouldFocus, name]); const getItem = _react.useCallback.call(void 0, (item) => { const nextItem = _7EQBAZ46cjs.__spreadProps.call(void 0, _7EQBAZ46cjs.__spreadValues.call(void 0, {}, item), { type: "button", name }); if (getItemProp) { return getItemProp(nextItem); } return nextItem; }, [name, getItemProp] ); const onClickProp = props.onClick; const onClick = _L5A2ID7Scjs.useEvent.call(void 0, (event) => { onClickProp == null ? void 0 : onClickProp(event); if (event.defaultPrevented) return; store == null ? void 0 : store.pushValue(name, value); if (!autoFocusOnClick) return; setShouldFocus(true); }); props = _7EQBAZ46cjs.__spreadProps.call(void 0, _7EQBAZ46cjs.__spreadValues.call(void 0, {}, props), { onClick }); props = _PK35DJGAcjs.useButton.call(void 0, props); props = _DQ3AW7HUcjs.useCollectionItem.call(void 0, _7EQBAZ46cjs.__spreadProps.call(void 0, _7EQBAZ46cjs.__spreadValues.call(void 0, { store }, props), { getItem })); return props; } ); var FormPush = _6TI3NXX6cjs.forwardRef.call(void 0, function FormPush2(props) { const htmlProps = useFormPush(props); return _6TI3NXX6cjs.createElement.call(void 0, TagName, htmlProps); }); exports.FormPush = FormPush; exports.useFormPush = useFormPush;