UNPKG

@nlabs/gothamjs

Version:
49 lines (48 loc) 6.64 kB
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==