@nlabs/gothamjs
Version:
Platform
53 lines (52 loc) • 8.19 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
/**
* Copyright (c) 2021-Present, Nitrogen Labs, Inc.
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
*/ import { zodResolver } from '@hookform/resolvers/zod';
import { useCallback } from 'react';
import { FormProvider, useForm } from 'react-hook-form';
export const Form = ({ children, className, defaultValues = {}, errors = {}, mode = 'onBlur', name = 'default', schema, onSubmit })=>{
const methods = useForm({
defaultValues,
mode,
// @ts-ignore - Type compatibility issues between zod versions
resolver: schema ? zodResolver(schema) : undefined
});
const { handleSubmit, setError, formState: { errors: formErrors } } = methods;
const handleFormSubmit = useCallback((event)=>{
event.preventDefault();
event.stopPropagation();
handleSubmit((data, submitEvent)=>onSubmit(data, submitEvent, setError))(event);
}, [
handleSubmit,
onSubmit,
setError
]);
const allErrors = {
...formErrors,
...errors
};
return /*#__PURE__*/ _jsx(FormProvider, {
...methods,
children: /*#__PURE__*/ _jsxs("form", {
className: className,
"data-testid": `form-${name}`,
onSubmit: handleFormSubmit,
noValidate: true,
children: [
Object.keys(allErrors).length > 0 && /*#__PURE__*/ _jsx("ul", {
className: "p-3 mb-4 text-sm text-red-700 bg-red-100 rounded-lg dark:bg-red-200 dark:text-red-800",
children: Object.keys(allErrors).map((error)=>{
const errorValue = allErrors[error];
const message = typeof errorValue === 'object' && errorValue && 'message' in errorValue ? errorValue.message : String(errorValue);
return /*#__PURE__*/ _jsx("li", {
children: message
}, error);
})
}),
typeof children === 'function' ? children(methods) : children
]
})
});
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL0Zvcm0vRm9ybS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjEtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7em9kUmVzb2x2ZXJ9IGZyb20gJ0Bob29rZm9ybS9yZXNvbHZlcnMvem9kJztcbmltcG9ydCB7dXNlQ2FsbGJhY2t9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7Rm9ybVByb3ZpZGVyLCB1c2VGb3JtfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuXG5pbXBvcnQgdHlwZSB7QmFzZVN5bnRoZXRpY0V2ZW50LCBSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBGb3JtUHJvcHM8VD4ge1xuICByZWFkb25seSBjaGlsZHJlbjogUmVhY3ROb2RlIHwgKChtZXRob2RzOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VGb3JtPikgPT4gUmVhY3ROb2RlKTtcbiAgcmVhZG9ubHkgY2xhc3NOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBkZWZhdWx0VmFsdWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IGVycm9ycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZWFkb25seSBtb2RlPzogJ29uU3VibWl0JyB8ICdvbkJsdXInIHwgJ29uQ2hhbmdlJyB8ICdvblRvdWNoZWQnIHwgJ2FsbCc7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9uQ2hhbmdlPzogKGRhdGE6IHVua25vd24pID0+IHZvaWQ7XG4gIHJlYWRvbmx5IG9uU3VibWl0OiAoZGF0YTogVCwgZXZlbnQ6IEJhc2VTeW50aGV0aWNFdmVudCwgc2V0RXJyb3I6IChmaWVsZDogc3RyaW5nLCBlcnJvcjogeyB0eXBlOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9KSA9PiB2b2lkKSA9PiB2b2lkO1xuICByZWFkb25seSBzY2hlbWE/OiB6LlpvZFNjaGVtYTxUPjtcbiAgcmVhZG9ubHkgdmFsaWRhdGU/OiAoZGF0YTogdW5rbm93bikgPT4gdm9pZDtcbiAgcmVhZG9ubHkgdmFsaWRhdGVPbkJsdXI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgRm9ybSA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgZGVmYXVsdFZhbHVlcyA9IHt9LFxuICBlcnJvcnMgPSB7fSxcbiAgbW9kZSA9ICdvbkJsdXInLFxuICBuYW1lID0gJ2RlZmF1bHQnLFxuICBzY2hlbWEsXG4gIG9uU3VibWl0XG59OiBGb3JtUHJvcHM8VD4pID0+IHtcbiAgY29uc3QgbWV0aG9kcyA9IHVzZUZvcm0oe1xuICAgIGRlZmF1bHRWYWx1ZXMsXG4gICAgbW9kZSxcbiAgICAvLyBAdHMtaWdub3JlIC0gVHlwZSBjb21wYXRpYmlsaXR5IGlzc3VlcyBiZXR3ZWVuIHpvZCB2ZXJzaW9uc1xuICAgIHJlc29sdmVyOiBzY2hlbWEgPyB6b2RSZXNvbHZlcihzY2hlbWEpIDogdW5kZWZpbmVkXG4gIH0pO1xuICBjb25zdCB7aGFuZGxlU3VibWl0LCBzZXRFcnJvciwgZm9ybVN0YXRlOiB7ZXJyb3JzOiBmb3JtRXJyb3JzfX0gPSBtZXRob2RzO1xuICBjb25zdCBoYW5kbGVGb3JtU3VibWl0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBCYXNlU3ludGhldGljRXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGhhbmRsZVN1Ym1pdCgoZGF0YSwgc3VibWl0RXZlbnQpID0+IG9uU3VibWl0KGRhdGEsIHN1Ym1pdEV2ZW50IGFzIEJhc2VTeW50aGV0aWNFdmVudCwgc2V0RXJyb3IpKShldmVudCk7XG4gICAgfSxcbiAgICBbaGFuZGxlU3VibWl0LCBvblN1Ym1pdCwgc2V0RXJyb3JdXG4gICk7XG5cbiAgY29uc3QgYWxsRXJyb3JzID0gey4uLmZvcm1FcnJvcnMsIC4uLmVycm9yc307XG5cbiAgcmV0dXJuIChcbiAgICA8Rm9ybVByb3ZpZGVyIHsuLi5tZXRob2RzfT5cbiAgICAgIDxmb3JtXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICBkYXRhLXRlc3RpZD17YGZvcm0tJHtuYW1lfWB9XG4gICAgICAgIG9uU3VibWl0PXtoYW5kbGVGb3JtU3VibWl0fVxuICAgICAgICBub1ZhbGlkYXRlXG4gICAgICA+XG4gICAgICAgIHtPYmplY3Qua2V5cyhhbGxFcnJvcnMpLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJwLTMgbWItNCB0ZXh0LXNtIHRleHQtcmVkLTcwMCBiZy1yZWQtMTAwIHJvdW5kZWQtbGcgZGFyazpiZy1yZWQtMjAwIGRhcms6dGV4dC1yZWQtODAwXCI+XG4gICAgICAgICAgICB7T2JqZWN0LmtleXMoYWxsRXJyb3JzKS5tYXAoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yVmFsdWUgPSBhbGxFcnJvcnNbZXJyb3JdO1xuICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdHlwZW9mIGVycm9yVmFsdWUgPT09ICdvYmplY3QnICYmIGVycm9yVmFsdWUgJiYgJ21lc3NhZ2UnIGluIGVycm9yVmFsdWVcbiAgICAgICAgICAgICAgICA/IChlcnJvclZhbHVlIGFzIHttZXNzYWdlOiBzdHJpbmd9KS5tZXNzYWdlXG4gICAgICAgICAgICAgICAgOiBTdHJpbmcoZXJyb3JWYWx1ZSk7XG4gICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtlcnJvcn0+e21lc3NhZ2V9PC9saT47XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L3VsPlxuICAgICAgICApfVxuICAgICAgICB7dHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4obWV0aG9kcykgOiBjaGlsZHJlbn1cbiAgICAgIDwvZm9ybT5cbiAgICA8L0Zvcm1Qcm92aWRlcj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOlsiem9kUmVzb2x2ZXIiLCJ1c2VDYWxsYmFjayIsIkZvcm1Qcm92aWRlciIsInVzZUZvcm0iLCJGb3JtIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJkZWZhdWx0VmFsdWVzIiwiZXJyb3JzIiwibW9kZSIsIm5hbWUiLCJzY2hlbWEiLCJvblN1Ym1pdCIsIm1ldGhvZHMiLCJyZXNvbHZlciIsInVuZGVmaW5lZCIsImhhbmRsZVN1Ym1pdCIsInNldEVycm9yIiwiZm9ybVN0YXRlIiwiZm9ybUVycm9ycyIsImhhbmRsZUZvcm1TdWJtaXQiLCJldmVudCIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiZGF0YSIsInN1Ym1pdEV2ZW50IiwiYWxsRXJyb3JzIiwiZm9ybSIsImRhdGEtdGVzdGlkIiwibm9WYWxpZGF0ZSIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJ1bCIsIm1hcCIsImVycm9yIiwiZXJyb3JWYWx1ZSIsIm1lc3NhZ2UiLCJTdHJpbmciLCJsaSJdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFdBQVcsUUFBTywwQkFBMEI7QUFDcEQsU0FBUUMsV0FBVyxRQUFPLFFBQVE7QUFDbEMsU0FBUUMsWUFBWSxFQUFFQyxPQUFPLFFBQU8sa0JBQWtCO0FBbUJ0RCxPQUFPLE1BQU1DLE9BQU8sQ0FBb0MsRUFDdERDLFFBQVEsRUFDUkMsU0FBUyxFQUNUQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQ2xCQyxTQUFTLENBQUMsQ0FBQyxFQUNYQyxPQUFPLFFBQVEsRUFDZkMsT0FBTyxTQUFTLEVBQ2hCQyxNQUFNLEVBQ05DLFFBQVEsRUFDSztJQUNiLE1BQU1DLFVBQVVWLFFBQVE7UUFDdEJJO1FBQ0FFO1FBQ0EsOERBQThEO1FBQzlESyxVQUFVSCxTQUFTWCxZQUFZVyxVQUFVSTtJQUMzQztJQUNBLE1BQU0sRUFBQ0MsWUFBWSxFQUFFQyxRQUFRLEVBQUVDLFdBQVcsRUFBQ1YsUUFBUVcsVUFBVSxFQUFDLEVBQUMsR0FBR047SUFDbEUsTUFBTU8sbUJBQW1CbkIsWUFDdkIsQ0FBQ29CO1FBQ0NBLE1BQU1DLGNBQWM7UUFDcEJELE1BQU1FLGVBQWU7UUFDckJQLGFBQWEsQ0FBQ1EsTUFBTUMsY0FBZ0JiLFNBQVNZLE1BQU1DLGFBQW1DUixXQUFXSTtJQUNuRyxHQUNBO1FBQUNMO1FBQWNKO1FBQVVLO0tBQVM7SUFHcEMsTUFBTVMsWUFBWTtRQUFDLEdBQUdQLFVBQVU7UUFBRSxHQUFHWCxNQUFNO0lBQUE7SUFFM0MscUJBQ0UsS0FBQ047UUFBYyxHQUFHVyxPQUFPO2tCQUN2QixjQUFBLE1BQUNjO1lBQ0NyQixXQUFXQTtZQUNYc0IsZUFBYSxDQUFDLEtBQUssRUFBRWxCLE1BQU07WUFDM0JFLFVBQVVRO1lBQ1ZTLFVBQVU7O2dCQUVUQyxPQUFPQyxJQUFJLENBQUNMLFdBQVdNLE1BQU0sR0FBRyxtQkFDL0IsS0FBQ0M7b0JBQUczQixXQUFVOzhCQUNYd0IsT0FBT0MsSUFBSSxDQUFDTCxXQUFXUSxHQUFHLENBQUMsQ0FBQ0M7d0JBQzNCLE1BQU1DLGFBQWFWLFNBQVMsQ0FBQ1MsTUFBTTt3QkFDbkMsTUFBTUUsVUFBVSxPQUFPRCxlQUFlLFlBQVlBLGNBQWMsYUFBYUEsYUFDekUsQUFBQ0EsV0FBaUNDLE9BQU8sR0FDekNDLE9BQU9GO3dCQUNYLHFCQUFPLEtBQUNHO3NDQUFnQkY7MkJBQVJGO29CQUNsQjs7Z0JBR0gsT0FBTzlCLGFBQWEsYUFBYUEsU0FBU1EsV0FBV1I7Ozs7QUFJOUQsRUFBRSJ9