diff --git a/src/atoms/schemaValidate.ts b/src/atoms/schemaValidate.ts index b03f07f..0f8c38c 100644 --- a/src/atoms/schemaValidate.ts +++ b/src/atoms/schemaValidate.ts @@ -1,6 +1,7 @@ import { RESET } from "form-atoms"; import { zodValidate } from "form-atoms/zod"; -import { Getter, WritableAtom, atom } from "jotai"; +import type { Getter, WritableAtom } from "jotai"; +import { atom } from "jotai"; import { atomWithDefault } from "jotai/utils"; import { ZodUndefined, z } from "zod"; @@ -12,16 +13,16 @@ export type ValidateConfig< optionalSchema?: OptSchema | ((get: Getter) => OptSchema); }; +export type DefaultRequiredAtom = typeof defaultRequiredAtom; export type WritableRequiredAtom = WritableAtom< boolean, [boolean | typeof RESET | ((prev: boolean) => boolean)], void >; - /** * Read-only atom for default zodFields which all are required. */ -const defaultRequiredAtom = atom(true as const); +const defaultRequiredAtom = atom(() => true); defaultRequiredAtom.debugLabel = "zodField/defaultRequired"; export type ReadRequired = Parameters>[0]; diff --git a/src/fields/list-field/listField.ts b/src/fields/list-field/listField.ts index 78eeb15..eac2a5c 100644 --- a/src/fields/list-field/listField.ts +++ b/src/fields/list-field/listField.ts @@ -5,6 +5,7 @@ import { ZodAny, ZodArray, z } from "zod"; import { extendAtom } from "../../atoms/extendAtom"; import { + DefaultRequiredAtom, ReadRequired, ValidateConfig, WritableRequiredAtom, @@ -21,7 +22,7 @@ export type ExtendListAtom = export type ListField< Fields extends FormFields, Value, - RequiredAtom = Atom, + RequiredAtom = DefaultRequiredAtom, > = ExtendListAtom & { optional: (readRequired?: ReadRequired) => OptionalListField; }; @@ -31,7 +32,7 @@ export type ListFieldSubmitValue< Required, > = Required extends WritableRequiredAtom ? FormFieldSubmitValues[] - : Required extends Atom + : Required extends DefaultRequiredAtom ? [FormFieldSubmitValues, ...FormFieldSubmitValues[]] : never; diff --git a/src/fields/zod-field/zodField.ts b/src/fields/zod-field/zodField.ts index 2fe9baa..23f8877 100644 --- a/src/fields/zod-field/zodField.ts +++ b/src/fields/zod-field/zodField.ts @@ -4,9 +4,10 @@ import { ZodAny, ZodUndefined, z } from "zod"; import { extendAtom } from "../../atoms/extendAtom"; import { - ReadRequired, - ValidateConfig, - WritableRequiredAtom, + type DefaultRequiredAtom, + type ReadRequired, + type ValidateConfig, + type WritableRequiredAtom, schemaValidate, } from "../../atoms/schemaValidate"; import { ExtendFieldAtom, PrimitiveFieldAtom } from "../../atoms/types"; @@ -24,7 +25,7 @@ export type ZodFieldSubmitValue = Field extends ZodField ? Required extends WritableRequiredAtom ? Schema["_output"] | OptSchema["_output"] - : Required extends Atom + : Required extends DefaultRequiredAtom ? Schema["_output"] : never : never; @@ -45,7 +46,7 @@ type RequiredZodField< export type ZodField< Schema extends z.Schema = ZodAny, OptSchema extends z.Schema = ZodUndefined, - RequiredAtom = Atom, + RequiredAtom = DefaultRequiredAtom, > = ExtendFieldAtom< Schema["_output"] | OptSchema["_output"], { required: RequiredAtom }