@ariakit/react-core
Version:
Ariakit React core
113 lines (93 loc) • 3.65 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true});
var _52OIQPAOcjs = require('../__chunks/52OIQPAO.cjs');
var _IH6KF7WRcjs = require('../__chunks/IH6KF7WR.cjs');
var _F4ZQFU26cjs = require('../__chunks/F4ZQFU26.cjs');
require('../__chunks/DHAXJ5PA.cjs');
require('../__chunks/YUGKYIYY.cjs');
require('../__chunks/T3QB4FR3.cjs');
require('../__chunks/6HKL3JR2.cjs');
var _WULEED4Qcjs = require('../__chunks/WULEED4Q.cjs');
var _OZM4QA2Vcjs = require('../__chunks/OZM4QA2V.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 = _WULEED4Qcjs.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 = _52OIQPAOcjs.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 = _OZM4QA2Vcjs.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 = _F4ZQFU26cjs.useButton.call(void 0, props);
props = _IH6KF7WRcjs.useCollectionItem.call(void 0, _7EQBAZ46cjs.__spreadProps.call(void 0, _7EQBAZ46cjs.__spreadValues.call(void 0, { store }, props), { getItem }));
return props;
}
);
var FormPush = _WULEED4Qcjs.forwardRef.call(void 0, function FormPush2(props) {
const htmlProps = useFormPush(props);
return _WULEED4Qcjs.createElement.call(void 0, TagName, htmlProps);
});
exports.FormPush = FormPush; exports.useFormPush = useFormPush;