@ariakit/react-core
Version:
Ariakit React core
103 lines (87 loc) • 3.17 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true});
var _5CBRED7Acjs = require('../__chunks/5CBRED7A.cjs');
var _QM74NV6Dcjs = require('../__chunks/QM74NV6D.cjs');
var _F6OAWDMCcjs = require('../__chunks/F6OAWDMC.cjs');
require('../__chunks/HAR6UDZU.cjs');
require('../__chunks/BB34VMZX.cjs');
require('../__chunks/T3QB4FR3.cjs');
require('../__chunks/ZYZTL3IQ.cjs');
var _SQLDFLTEcjs = require('../__chunks/SQLDFLTE.cjs');
var _4KGS3DOWcjs = require('../__chunks/4KGS3DOW.cjs');
require('../__chunks/TWX5YNTH.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 = _SQLDFLTEcjs.createHook.call(void 0,
function useFormPush2({
store,
value,
name: nameProp,
getItem: getItemProp,
autoFocusOnClick = true,
...props
}) {
const context = _5CBRED7Acjs.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 = String(nameProp);
const [shouldFocus, setShouldFocus] = _react.useState.call(void 0, false);
_react.useEffect.call(void 0, () => {
var _a;
if (!shouldFocus) return;
const items = getFirstFieldsByName(store == null ? void 0 : store.getState().items, name);
const element = (_a = items == null ? void 0 : items[items.length - 1]) == null ? void 0 : _a.element;
if (!element) return;
element.focus();
setShouldFocus(false);
}, [store, shouldFocus, name]);
const getItem = _react.useCallback.call(void 0,
(item) => {
const nextItem = { ...item, type: "button", name };
if (getItemProp) {
return getItemProp(nextItem);
}
return nextItem;
},
[name, getItemProp]
);
const onClickProp = props.onClick;
const onClick = _4KGS3DOWcjs.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 = {
...props,
onClick
};
props = _F6OAWDMCcjs.useButton.call(void 0, props);
props = _QM74NV6Dcjs.useCollectionItem.call(void 0, { store, ...props, getItem });
return props;
}
);
var FormPush = _SQLDFLTEcjs.forwardRef.call(void 0, function FormPush2(props) {
const htmlProps = useFormPush(props);
return _SQLDFLTEcjs.createElement.call(void 0, TagName, htmlProps);
});
exports.FormPush = FormPush; exports.useFormPush = useFormPush;