@nlabs/gothamjs
Version:
Platform
49 lines (48 loc) • 6.64 kB
JavaScript
import { zodResolver } from "@hookform/resolvers/zod";
import { useCallback } from "react";
import { FormProvider, useForm } from "react-hook-form";
import { jsx, jsxs } from "react/jsx-runtime";
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) : void 0
});
const { handleSubmit, setError, formState: { errors: formErrors } } = methods;
const handleFormSubmit = useCallback(
handleSubmit((data, event) => onSubmit(data, event, setError)),
[]
);
const allErrors = { ...formErrors, ...errors };
return /* @__PURE__ */ jsx(FormProvider, { ...methods, children: /* @__PURE__ */ jsxs(
"form",
{
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
]
}
) });
};
export {
Form
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvRm9ybS9Gb3JtLnRzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjEtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7em9kUmVzb2x2ZXJ9IGZyb20gJ0Bob29rZm9ybS9yZXNvbHZlcnMvem9kJztcbmltcG9ydCB7dXNlQ2FsbGJhY2t9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7Rm9ybVByb3ZpZGVyLCB1c2VGb3JtfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuXG5cbmltcG9ydCB0eXBlIHtCYXNlU3ludGhldGljRXZlbnQsIFJlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1Qcm9wczxUPiB7XG4gIHJlYWRvbmx5IGNoaWxkcmVuOiBSZWFjdE5vZGUgfCAoKG1ldGhvZHM6IFJldHVyblR5cGU8dHlwZW9mIHVzZUZvcm0+KSA9PiBSZWFjdE5vZGUpO1xuICByZWFkb25seSBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgZXJyb3JzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IG1vZGU/OiAnb25TdWJtaXQnIHwgJ29uQmx1cicgfCAnb25DaGFuZ2UnIHwgJ29uVG91Y2hlZCcgfCAnYWxsJztcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgb25DaGFuZ2U/OiAoZGF0YTogdW5rbm93bikgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25TdWJtaXQ6IChkYXRhOiBULCBldmVudDogQmFzZVN5bnRoZXRpY0V2ZW50LCBzZXRFcnJvcjogKGZpZWxkOiBzdHJpbmcsIGVycm9yOiB7IHR5cGU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH0pID0+IHZvaWQpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHNjaGVtYT86IHouWm9kU2NoZW1hPFQ+O1xuICByZWFkb25seSB2YWxpZGF0ZT86IChkYXRhOiB1bmtub3duKSA9PiB2b2lkO1xuICByZWFkb25seSB2YWxpZGF0ZU9uQmx1cj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBGb3JtID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBkZWZhdWx0VmFsdWVzID0ge30sXG4gIGVycm9ycyA9IHt9LFxuICBtb2RlID0gJ29uQmx1cicsXG4gIG5hbWUgPSAnZGVmYXVsdCcsXG4gIHNjaGVtYSxcbiAgb25TdWJtaXRcbn06IEZvcm1Qcm9wczxUPikgPT4ge1xuICBjb25zdCBtZXRob2RzID0gdXNlRm9ybSh7XG4gICAgZGVmYXVsdFZhbHVlcyxcbiAgICBtb2RlLFxuICAgIC8vIEB0cy1pZ25vcmUgLSBUeXBlIGNvbXBhdGliaWxpdHkgaXNzdWVzIGJldHdlZW4gem9kIHZlcnNpb25zXG4gICAgcmVzb2x2ZXI6IHNjaGVtYSA/IHpvZFJlc29sdmVyKHNjaGVtYSkgOiB1bmRlZmluZWRcbiAgfSk7XG4gIGNvbnN0IHtoYW5kbGVTdWJtaXQsIHNldEVycm9yLCBmb3JtU3RhdGU6IHtlcnJvcnM6IGZvcm1FcnJvcnN9fSA9IG1ldGhvZHM7XG4gIGNvbnN0IGhhbmRsZUZvcm1TdWJtaXQgPSB1c2VDYWxsYmFjayhcbiAgICBoYW5kbGVTdWJtaXQoKGRhdGEsIGV2ZW50KSA9PiBvblN1Ym1pdChkYXRhLCBldmVudCBhcyBCYXNlU3ludGhldGljRXZlbnQsIHNldEVycm9yKSksXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBhbGxFcnJvcnMgPSB7Li4uZm9ybUVycm9ycywgLi4uZXJyb3JzfTtcblxuICByZXR1cm4gKFxuICAgIDxGb3JtUHJvdmlkZXIgey4uLm1ldGhvZHN9PlxuICAgICAgPGZvcm1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIGRhdGEtdGVzdGlkPXtgZm9ybS0ke25hbWV9YH1cbiAgICAgICAgb25TdWJtaXQ9e2hhbmRsZUZvcm1TdWJtaXR9XG4gICAgICAgIG5vVmFsaWRhdGVcbiAgICAgID5cbiAgICAgICAge09iamVjdC5rZXlzKGFsbEVycm9ycykubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT1cInAtMyBtYi00IHRleHQtc20gdGV4dC1yZWQtNzAwIGJnLXJlZC0xMDAgcm91bmRlZC1sZyBkYXJrOmJnLXJlZC0yMDAgZGFyazp0ZXh0LXJlZC04MDBcIj5cbiAgICAgICAgICAgIHtPYmplY3Qua2V5cyhhbGxFcnJvcnMpLm1hcCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JWYWx1ZSA9IGFsbEVycm9yc1tlcnJvcl07XG4gICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgZXJyb3JWYWx1ZSA9PT0gJ29iamVjdCcgJiYgZXJyb3JWYWx1ZSAmJiAnbWVzc2FnZScgaW4gZXJyb3JWYWx1ZVxuICAgICAgICAgICAgICAgID8gKGVycm9yVmFsdWUgYXMge21lc3NhZ2U6IHN0cmluZ30pLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICA6IFN0cmluZyhlcnJvclZhbHVlKTtcbiAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e2Vycm9yfT57bWVzc2FnZX08L2xpPjtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvdWw+XG4gICAgICAgICl9XG4gICAgICAgIHt0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbihtZXRob2RzKSA6IGNoaWxkcmVufVxuICAgICAgPC9mb3JtPlxuICAgIDwvRm9ybVByb3ZpZGVyPlxuICApO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICJBQUlBLFNBQVEsbUJBQWtCO0FBQzFCLFNBQVEsbUJBQWtCO0FBQzFCLFNBQVEsY0FBYyxlQUFjO0FBOEM5QixTQWFlLEtBYmY7QUExQkMsTUFBTSxPQUFPLENBQW9DO0FBQUEsRUFDdEQ7QUFBQSxFQUNBO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLFNBQVMsQ0FBQztBQUFBLEVBQ1YsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1A7QUFBQSxFQUNBO0FBQ0YsTUFBb0I7QUFDbEIsUUFBTSxVQUFVLFFBQVE7QUFBQSxJQUN0QjtBQUFBLElBQ0E7QUFBQTtBQUFBLElBRUEsVUFBVSxTQUFTLFlBQVksTUFBTSxJQUFJO0FBQUEsRUFDM0MsQ0FBQztBQUNELFFBQU0sRUFBQyxjQUFjLFVBQVUsV0FBVyxFQUFDLFFBQVEsV0FBVSxFQUFDLElBQUk7QUFDbEUsUUFBTSxtQkFBbUI7QUFBQSxJQUN2QixhQUFhLENBQUMsTUFBTSxVQUFVLFNBQVMsTUFBTSxPQUE2QixRQUFRLENBQUM7QUFBQSxJQUNuRixDQUFDO0FBQUEsRUFDSDtBQUVBLFFBQU0sWUFBWSxFQUFDLEdBQUcsWUFBWSxHQUFHLE9BQU07QUFFM0MsU0FDRSxvQkFBQyxnQkFBYyxHQUFHLFNBQ2hCO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDQztBQUFBLE1BQ0EsZUFBYSxRQUFRLElBQUk7QUFBQSxNQUN6QixVQUFVO0FBQUEsTUFDVixZQUFVO0FBQUEsTUFFVDtBQUFBLGVBQU8sS0FBSyxTQUFTLEVBQUUsU0FBUyxLQUMvQixvQkFBQyxRQUFHLFdBQVUseUZBQ1gsaUJBQU8sS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7QUFDckMsZ0JBQU0sYUFBYSxVQUFVLEtBQUs7QUFDbEMsZ0JBQU0sVUFBVSxPQUFPLGVBQWUsWUFBWSxjQUFjLGFBQWEsYUFDeEUsV0FBaUMsVUFDbEMsT0FBTyxVQUFVO0FBQ3JCLGlCQUFPLG9CQUFDLFFBQWdCLHFCQUFSLEtBQWdCO0FBQUEsUUFDbEMsQ0FBQyxHQUNIO0FBQUEsUUFFRCxPQUFPLGFBQWEsYUFBYSxTQUFTLE9BQU8sSUFBSTtBQUFBO0FBQUE7QUFBQSxFQUN4RCxHQUNGO0FBRUo7IiwKICAibmFtZXMiOiBbXQp9Cg==