@tanstack/form-core 0.0.11 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/{cjs/FieldApi.js → lib/FieldApi.cjs} +80 -113
- package/build/lib/FieldApi.cjs.map +1 -0
- package/build/lib/FieldApi.d.ts +112 -0
- package/build/lib/FieldApi.d.ts.map +1 -0
- package/build/lib/FieldApi.js +305 -0
- package/build/lib/FieldApi.js.map +1 -0
- package/build/lib/FieldApi.legacy.cjs +307 -0
- package/build/lib/FieldApi.legacy.cjs.map +1 -0
- package/build/lib/FieldApi.legacy.js +305 -0
- package/build/lib/FieldApi.legacy.js.map +1 -0
- package/build/{cjs/FormApi.js → lib/FormApi.cjs} +66 -78
- package/build/lib/FormApi.cjs.map +1 -0
- package/build/{types → lib}/FormApi.d.ts +3 -2
- package/build/lib/FormApi.d.ts.map +1 -0
- package/build/lib/FormApi.js +246 -0
- package/build/lib/FormApi.js.map +1 -0
- package/build/lib/FormApi.legacy.cjs +248 -0
- package/build/lib/FormApi.legacy.cjs.map +1 -0
- package/build/lib/FormApi.legacy.js +246 -0
- package/build/lib/FormApi.legacy.js.map +1 -0
- package/build/{cjs/_virtual/_rollupPluginBabelHelpers.js → lib/_virtual/_rollupPluginBabelHelpers.cjs} +18 -45
- package/build/lib/_virtual/_rollupPluginBabelHelpers.cjs.map +1 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.js +56 -0
- package/build/{cjs → lib}/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
- package/build/lib/_virtual/_rollupPluginBabelHelpers.legacy.cjs +65 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.legacy.cjs.map +1 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.legacy.js +56 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.legacy.js.map +1 -0
- package/build/lib/index.cjs +14 -0
- package/build/lib/index.cjs.map +1 -0
- package/build/{types → lib}/index.d.ts +1 -0
- package/build/lib/index.d.ts.map +1 -0
- package/build/lib/index.js +4 -0
- package/build/{cjs → lib}/index.js.map +1 -1
- package/build/lib/index.legacy.cjs +14 -0
- package/build/lib/index.legacy.cjs.map +1 -0
- package/build/lib/index.legacy.js +4 -0
- package/build/lib/index.legacy.js.map +1 -0
- package/build/lib/tests/FieldApi.spec.d.ts +2 -0
- package/build/lib/tests/FieldApi.spec.d.ts.map +1 -0
- package/build/lib/tests/FieldApi.test-d.d.ts +2 -0
- package/build/lib/tests/FieldApi.test-d.d.ts.map +1 -0
- package/build/lib/tests/FormApi.spec.d.ts +2 -0
- package/build/lib/tests/FormApi.spec.d.ts.map +1 -0
- package/build/{cjs/utils.js → lib/utils.cjs} +18 -27
- package/build/lib/utils.cjs.map +1 -0
- package/build/{types → lib}/utils.d.ts +10 -0
- package/build/lib/utils.d.ts.map +1 -0
- package/build/lib/utils.js +77 -0
- package/build/lib/utils.js.map +1 -0
- package/build/lib/utils.legacy.cjs +81 -0
- package/build/lib/utils.legacy.cjs.map +1 -0
- package/build/lib/utils.legacy.js +77 -0
- package/build/lib/utils.legacy.js.map +1 -0
- package/package.json +22 -9
- package/src/FieldApi.ts +101 -46
- package/src/FormApi.ts +34 -14
- package/src/tests/FieldApi.spec.ts +169 -0
- package/src/tests/FieldApi.test-d.ts +41 -0
- package/src/tests/FormApi.spec.ts +216 -0
- package/src/utils.ts +10 -1
- package/build/cjs/FieldApi.js.map +0 -1
- package/build/cjs/FormApi.js.map +0 -1
- package/build/cjs/index.js +0 -26
- package/build/cjs/utils.js.map +0 -1
- package/build/esm/index.js +0 -716
- package/build/esm/index.js.map +0 -1
- package/build/stats-html.html +0 -2689
- package/build/stats-react.json +0 -196
- package/build/types/FieldApi.d.ts +0 -85
- package/build/types/tests/test.test.d.ts +0 -0
- package/build/umd/index.development.js +0 -779
- package/build/umd/index.development.js.map +0 -1
- package/build/umd/index.production.js +0 -22
- package/build/umd/index.production.js.map +0 -1
- package/src/tests/test.test.tsx +0 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormApi.js","sources":["../../src/FormApi.ts"],"sourcesContent":["import { Store } from '@tanstack/store'\n//\nimport type { DeepKeys, DeepValue, Updater } from './utils'\nimport { functionalUpdate, getBy, setBy } from './utils'\nimport type { FieldApi, FieldMeta, ValidationCause } from './FieldApi'\n\nexport interface Register {\n // FormSubmitEvent\n}\n\nexport type FormSubmitEvent = Register extends {\n FormSubmitEvent: infer E\n}\n ? E\n : Event\n\nexport type FormOptions<TData> = {\n defaultValues?: TData\n defaultState?: Partial<FormState<TData>>\n asyncDebounceMs?: number\n onMount?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onMountAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onMountAsyncDebounceMs?: number\n onChange?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onChangeAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onChangeAsyncDebounceMs?: number\n onBlur?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onBlurAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onBlurAsyncDebounceMs?: number\n onSubmit?: (values: TData, formApi: FormApi<TData>) => any | Promise<any>\n onSubmitInvalid?: (values: TData, formApi: FormApi<TData>) => void\n}\n\nexport type FieldInfo<TFormData> = {\n instances: Record<string, FieldApi<any, TFormData>>\n} & ValidationMeta\n\nexport type ValidationMeta = {\n validationCount?: number\n validationAsyncCount?: number\n validationPromise?: Promise<ValidationError>\n validationResolve?: (error: ValidationError) => void\n validationReject?: (error: unknown) => void\n}\n\nexport type ValidationError = undefined | false | null | string\n\nexport type FormState<TData> = {\n values: TData\n // Form Validation\n isFormValidating: boolean\n formValidationCount: number\n isFormValid: boolean\n formError?: ValidationError\n // Fields\n fieldMeta: Record<DeepKeys<TData>, FieldMeta>\n isFieldsValidating: boolean\n isFieldsValid: boolean\n isSubmitting: boolean\n // General\n isTouched: boolean\n isSubmitted: boolean\n isValidating: boolean\n isValid: boolean\n canSubmit: boolean\n submissionAttempts: number\n}\n\nfunction getDefaultFormState<TData>(\n defaultState: Partial<FormState<TData>>,\n): FormState<TData> {\n return {\n values: {} as any,\n fieldMeta: {} as any,\n canSubmit: true,\n isFieldsValid: false,\n isFieldsValidating: false,\n isFormValid: false,\n isFormValidating: false,\n isSubmitted: false,\n isSubmitting: false,\n isTouched: false,\n isValid: false,\n isValidating: false,\n submissionAttempts: 0,\n formValidationCount: 0,\n ...defaultState,\n }\n}\n\nexport class FormApi<TFormData> {\n // // This carries the context for nested fields\n options: FormOptions<TFormData> = {}\n store!: Store<FormState<TFormData>>\n // Do not use __state directly, as it is not reactive.\n // Please use form.useStore() utility to subscribe to state\n state!: FormState<TFormData>\n fieldInfo: Record<DeepKeys<TFormData>, FieldInfo<TFormData>> = {} as any\n fieldName?: string\n validationMeta: ValidationMeta = {}\n\n constructor(opts?: FormOptions<TFormData>) {\n this.store = new Store<FormState<TFormData>>(\n getDefaultFormState({\n ...opts?.defaultState,\n values: opts?.defaultValues ?? opts?.defaultState?.values,\n isFormValid: true,\n }),\n {\n onUpdate: () => {\n let { state } = this.store\n // Computed state\n const fieldMetaValues = Object.values(state.fieldMeta) as (\n | FieldMeta\n | undefined\n )[]\n\n const isFieldsValidating = fieldMetaValues.some(\n (field) => field?.isValidating,\n )\n\n const isFieldsValid = !fieldMetaValues.some((field) => field?.error)\n\n const isTouched = fieldMetaValues.some((field) => field?.isTouched)\n\n const isValidating = isFieldsValidating || state.isFormValidating\n const isFormValid = !state.formError\n const isValid = isFieldsValid && isFormValid\n const canSubmit =\n (state.submissionAttempts === 0 && !isTouched) ||\n (!isValidating && !state.isSubmitting && isValid)\n\n state = {\n ...state,\n isFieldsValidating,\n isFieldsValid,\n isFormValid,\n isValid,\n canSubmit,\n isTouched,\n }\n\n this.store.state = state\n this.state = state\n },\n },\n )\n\n this.state = this.store.state\n\n this.update(opts || {})\n }\n\n update = (options?: FormOptions<TFormData>) => {\n if (!options) return\n\n this.store.batch(() => {\n const shouldUpdateValues =\n options.defaultValues &&\n options.defaultValues !== this.options.defaultValues\n\n const shouldUpdateState =\n options.defaultState !== this.options.defaultState\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!shouldUpdateValues || !shouldUpdateValues) {\n return\n }\n\n this.store.setState(() =>\n getDefaultFormState(\n Object.assign(\n {},\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n shouldUpdateState ? options.defaultState : {},\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n shouldUpdateValues\n ? {\n values: options.defaultValues,\n }\n : {},\n ),\n ),\n )\n })\n\n this.options = options\n }\n\n reset = () =>\n this.store.setState(() =>\n getDefaultFormState({\n ...this.options.defaultState,\n values: this.options.defaultValues ?? this.options.defaultState?.values,\n }),\n )\n\n validateAllFields = async (cause: ValidationCause) => {\n const fieldValidationPromises: Promise<ValidationError>[] = [] as any\n\n this.store.batch(() => {\n void (Object.values(this.fieldInfo) as FieldInfo<any>[]).forEach(\n (field) => {\n Object.values(field.instances).forEach((instance) => {\n // If any fields are not touched\n if (!instance.state.meta.isTouched) {\n // Mark them as touched\n instance.setMeta((prev) => ({ ...prev, isTouched: true }))\n // Validate the field\n fieldValidationPromises.push(\n Promise.resolve().then(() => instance.validate(cause)),\n )\n }\n })\n },\n )\n })\n\n return Promise.all(fieldValidationPromises)\n }\n\n // validateForm = async () => {}\n\n handleSubmit = async (e: FormSubmitEvent) => {\n e.preventDefault()\n e.stopPropagation()\n\n // Check to see that the form and all fields have been touched\n // If they have not, touch them all and run validation\n // Run form validation\n // Submit the form\n\n this.store.setState((old) => ({\n ...old,\n // Submittion attempts mark the form as not submitted\n isSubmitted: false,\n // Count submission attempts\n submissionAttempts: old.submissionAttempts + 1,\n }))\n\n // Don't let invalid forms submit\n if (!this.state.canSubmit) return\n\n this.store.setState((d) => ({ ...d, isSubmitting: true }))\n\n const done = () => {\n this.store.setState((prev) => ({ ...prev, isSubmitting: false }))\n }\n\n // Validate all fields\n await this.validateAllFields('submit')\n\n // Fields are invalid, do not submit\n if (!this.state.isFieldsValid) {\n done()\n this.options.onSubmitInvalid?.(this.state.values, this)\n return\n }\n\n // Run validation for the form\n // await this.validateForm()\n\n if (!this.state.isValid) {\n done()\n this.options.onSubmitInvalid?.(this.state.values, this)\n return\n }\n\n try {\n // Run the submit code\n await this.options.onSubmit?.(this.state.values, this)\n\n this.store.batch(() => {\n this.store.setState((prev) => ({ ...prev, isSubmitted: true }))\n done()\n })\n } catch (err) {\n done()\n throw err\n }\n }\n\n getFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): DeepValue<TFormData, TField> => getBy(this.state.values, field)\n\n getFieldMeta = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): FieldMeta => {\n return this.state.fieldMeta[field]\n }\n\n getFieldInfo = <TField extends DeepKeys<TFormData>>(field: TField) => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return (this.fieldInfo[field] ||= {\n instances: {},\n })\n }\n\n setFieldMeta = <TField extends DeepKeys<TFormData>>(\n field: TField,\n updater: Updater<FieldMeta>,\n ) => {\n this.store.setState((prev) => {\n return {\n ...prev,\n fieldMeta: {\n ...prev.fieldMeta,\n [field]: functionalUpdate(updater, prev.fieldMeta[field]),\n },\n }\n })\n }\n\n setFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n updater: Updater<DeepValue<TFormData, TField>>,\n opts?: { touch?: boolean },\n ) => {\n const touch = opts?.touch\n\n this.store.batch(() => {\n if (touch) {\n this.setFieldMeta(field, (prev) => ({\n ...prev,\n isTouched: true,\n }))\n }\n\n this.store.setState((prev) => {\n return {\n ...prev,\n values: setBy(prev.values, field, updater),\n }\n })\n })\n }\n\n pushFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n value: DeepValue<TFormData, TField>[number],\n opts?: { touch?: boolean },\n ) => {\n return this.setFieldValue(\n field,\n (prev) => [...(Array.isArray(prev) ? prev : []), value] as any,\n opts,\n )\n }\n\n insertFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index: number,\n value: DeepValue<TFormData, TField>[number],\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n return (prev as DeepValue<TFormData, TField>[]).map((d, i) =>\n i === index ? value : d,\n ) as any\n },\n opts,\n )\n }\n\n removeFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index: number,\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n return (prev as DeepValue<TFormData, TField>[]).filter(\n (_d, i) => i !== index,\n ) as any\n },\n opts,\n )\n }\n\n swapFieldValues = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index1: number,\n index2: number,\n ) => {\n this.setFieldValue(field, (prev: any) => {\n const prev1 = prev[index1]!\n const prev2 = prev[index2]!\n return setBy(setBy(prev, `${index1}`, prev2), `${index2}`, prev1)\n })\n }\n}\n"],"names":["getDefaultFormState","defaultState","values","fieldMeta","canSubmit","isFieldsValid","isFieldsValidating","isFormValid","isFormValidating","isSubmitted","isSubmitting","isTouched","isValid","isValidating","submissionAttempts","formValidationCount","FormApi","constructor","opts","_opts$defaultValues","_opts$defaultState","_defineProperty","options","store","batch","shouldUpdateValues","defaultValues","shouldUpdateState","setState","Object","assign","_this$options$default","_this$options$default2","cause","fieldValidationPromises","fieldInfo","forEach","field","instances","instance","state","meta","setMeta","prev","push","Promise","resolve","then","validate","all","e","preventDefault","stopPropagation","old","d","done","validateAllFields","_this$options$onSubmi","_this$options","onSubmitInvalid","call","_this$options$onSubmi2","_this$options2","_this$options$onSubmi3","_this$options3","onSubmit","err","getBy","_this$fieldInfo","updater","functionalUpdate","touch","setFieldMeta","setBy","value","setFieldValue","Array","isArray","index","map","i","filter","_d","index1","index2","prev1","prev2","Store","onUpdate","fieldMetaValues","some","error","formError","update"],"mappings":";;;;AA6EA,SAASA,mBAAmBA,CAC1BC,YAAuC,EACrB;EAClB,OAAO;IACLC,MAAM,EAAE,EAAS;IACjBC,SAAS,EAAE,EAAS;AACpBC,IAAAA,SAAS,EAAE,IAAI;AACfC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,kBAAkB,EAAE,KAAK;AACzBC,IAAAA,WAAW,EAAE,KAAK;AAClBC,IAAAA,gBAAgB,EAAE,KAAK;AACvBC,IAAAA,WAAW,EAAE,KAAK;AAClBC,IAAAA,YAAY,EAAE,KAAK;AACnBC,IAAAA,SAAS,EAAE,KAAK;AAChBC,IAAAA,OAAO,EAAE,KAAK;AACdC,IAAAA,YAAY,EAAE,KAAK;AACnBC,IAAAA,kBAAkB,EAAE,CAAC;AACrBC,IAAAA,mBAAmB,EAAE,CAAC;IACtB,GAAGd,YAAAA;GACJ,CAAA;AACH,CAAA;AAEO,MAAMe,OAAO,CAAY;EAW9BC,WAAWA,CAACC,KAA6B,EAAE;IAAA,IAAAC,mBAAA,EAAAC,kBAAA,CAAA;AAV3C;IAAAC,eAAA,CAAA,IAAA,EAAA,SAAA,EACkC,EAAE,CAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEpC;AACA;IAAAA,eAAA,CAAA,IAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,WAAA,EAE+D,EAAE,CAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,gBAAA,EAEhC,EAAE,CAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,QAAA,EAsDzBC,OAAgC,IAAK;MAC7C,IAAI,CAACA,OAAO,EAAE,OAAA;AAEd,MAAA,IAAI,CAACC,KAAK,CAACC,KAAK,CAAC,MAAM;AACrB,QAAA,MAAMC,kBAAkB,GACtBH,OAAO,CAACI,aAAa,IACrBJ,OAAO,CAACI,aAAa,KAAK,IAAI,CAACJ,OAAO,CAACI,aAAa,CAAA;QAEtD,MAAMC,iBAAiB,GACrBL,OAAO,CAACrB,YAAY,KAAK,IAAI,CAACqB,OAAO,CAACrB,YAAY,CAAA;;AAEpD;AACA,QAAA,IAAI,CAACwB,kBAAkB,IAAI,CAACA,kBAAkB,EAAE;AAC9C,UAAA,OAAA;AACF,SAAA;AAEA,QAAA,IAAI,CAACF,KAAK,CAACK,QAAQ,CAAC,MAClB5B,mBAAmB,CACjB6B,MAAM,CAACC,MAAM,CACX,EAAE;AACF;AACAH,QAAAA,iBAAiB,GAAGL,OAAO,CAACrB,YAAY,GAAG,EAAE;AAC7C;AACAwB,QAAAA,kBAAkB,GACd;UACEvB,MAAM,EAAEoB,OAAO,CAACI,aAAAA;AAClB,SAAC,GACD,EACN,CACF,CACF,CAAC,CAAA;AACH,OAAC,CAAC,CAAA;MAEF,IAAI,CAACJ,OAAO,GAAGA,OAAO,CAAA;KACvB,CAAA,CAAA;AAAAD,IAAAA,eAAA,gBAEO,MACN,IAAI,CAACE,KAAK,CAACK,QAAQ,CAAC,MAAA;MAAA,IAAAG,qBAAA,EAAAC,sBAAA,CAAA;AAAA,MAAA,OAClBhC,mBAAmB,CAAC;AAClB,QAAA,GAAG,IAAI,CAACsB,OAAO,CAACrB,YAAY;QAC5BC,MAAM,EAAA,CAAA6B,qBAAA,GAAE,IAAI,CAACT,OAAO,CAACI,aAAa,KAAAK,IAAAA,GAAAA,qBAAA,IAAAC,sBAAA,GAAI,IAAI,CAACV,OAAO,CAACrB,YAAY,KAAA,IAAA,GAAA,KAAA,CAAA,GAAzB+B,sBAAA,CAA2B9B,MAAAA;AACnE,OAAC,CAAC,CAAA;AAAA,KACJ,CAAC,CAAA,CAAA;IAAAmB,eAAA,CAAA,IAAA,EAAA,mBAAA,EAEiB,MAAOY,KAAsB,IAAK;MACpD,MAAMC,uBAAmD,GAAG,EAAS,CAAA;AAErE,MAAA,IAAI,CAACX,KAAK,CAACC,KAAK,CAAC,MAAM;AACrB,QAAA,KAAMK,MAAM,CAAC3B,MAAM,CAAC,IAAI,CAACiC,SAAS,CAAC,CAAsBC,OAAO,CAC7DC,KAAK,IAAK;UACTR,MAAM,CAAC3B,MAAM,CAACmC,KAAK,CAACC,SAAS,CAAC,CAACF,OAAO,CAAEG,QAAQ,IAAK;AACnD;YACA,IAAI,CAACA,QAAQ,CAACC,KAAK,CAACC,IAAI,CAAC9B,SAAS,EAAE;AAClC;AACA4B,cAAAA,QAAQ,CAACG,OAAO,CAAEC,IAAI,KAAM;AAAE,gBAAA,GAAGA,IAAI;AAAEhC,gBAAAA,SAAS,EAAE,IAAA;AAAK,eAAC,CAAC,CAAC,CAAA;AAC1D;AACAuB,cAAAA,uBAAuB,CAACU,IAAI,CAC1BC,OAAO,CAACC,OAAO,EAAE,CAACC,IAAI,CAAC,MAAMR,QAAQ,CAACS,QAAQ,CAACf,KAAK,CAAC,CACvD,CAAC,CAAA;AACH,aAAA;AACF,WAAC,CAAC,CAAA;AACJ,SACF,CAAC,CAAA;AACH,OAAC,CAAC,CAAA;AAEF,MAAA,OAAOY,OAAO,CAACI,GAAG,CAACf,uBAAuB,CAAC,CAAA;KAC5C,CAAA,CAAA;AAED;IAAAb,eAAA,CAAA,IAAA,EAAA,cAAA,EAEe,MAAO6B,CAAkB,IAAK;MAC3CA,CAAC,CAACC,cAAc,EAAE,CAAA;MAClBD,CAAC,CAACE,eAAe,EAAE,CAAA;;AAEnB;AACA;AACA;AACA;;AAEA,MAAA,IAAI,CAAC7B,KAAK,CAACK,QAAQ,CAAEyB,GAAG,KAAM;AAC5B,QAAA,GAAGA,GAAG;AACN;AACA5C,QAAAA,WAAW,EAAE,KAAK;AAClB;AACAK,QAAAA,kBAAkB,EAAEuC,GAAG,CAACvC,kBAAkB,GAAG,CAAA;AAC/C,OAAC,CAAC,CAAC,CAAA;;AAEH;AACA,MAAA,IAAI,CAAC,IAAI,CAAC0B,KAAK,CAACpC,SAAS,EAAE,OAAA;AAE3B,MAAA,IAAI,CAACmB,KAAK,CAACK,QAAQ,CAAE0B,CAAC,KAAM;AAAE,QAAA,GAAGA,CAAC;AAAE5C,QAAAA,YAAY,EAAE,IAAA;AAAK,OAAC,CAAC,CAAC,CAAA;MAE1D,MAAM6C,IAAI,GAAGA,MAAM;AACjB,QAAA,IAAI,CAAChC,KAAK,CAACK,QAAQ,CAAEe,IAAI,KAAM;AAAE,UAAA,GAAGA,IAAI;AAAEjC,UAAAA,YAAY,EAAE,KAAA;AAAM,SAAC,CAAC,CAAC,CAAA;OAClE,CAAA;;AAED;AACA,MAAA,MAAM,IAAI,CAAC8C,iBAAiB,CAAC,QAAQ,CAAC,CAAA;;AAEtC;AACA,MAAA,IAAI,CAAC,IAAI,CAAChB,KAAK,CAACnC,aAAa,EAAE;QAAA,IAAAoD,qBAAA,EAAAC,aAAA,CAAA;AAC7BH,QAAAA,IAAI,EAAE,CAAA;QACN,CAAAE,qBAAA,IAAAC,aAAA,GAAA,IAAI,CAACpC,OAAO,EAACqC,eAAe,KAAA,IAAA,GAAA,KAAA,CAAA,GAA5BF,qBAAA,CAAAG,IAAA,CAAAF,aAAA,EAA+B,IAAI,CAAClB,KAAK,CAACtC,MAAM,EAAE,IAAI,CAAC,CAAA;AACvD,QAAA,OAAA;AACF,OAAA;;AAEA;AACA;;AAEA,MAAA,IAAI,CAAC,IAAI,CAACsC,KAAK,CAAC5B,OAAO,EAAE;QAAA,IAAAiD,sBAAA,EAAAC,cAAA,CAAA;AACvBP,QAAAA,IAAI,EAAE,CAAA;QACN,CAAAM,sBAAA,IAAAC,cAAA,GAAA,IAAI,CAACxC,OAAO,EAACqC,eAAe,KAAA,IAAA,GAAA,KAAA,CAAA,GAA5BE,sBAAA,CAAAD,IAAA,CAAAE,cAAA,EAA+B,IAAI,CAACtB,KAAK,CAACtC,MAAM,EAAE,IAAI,CAAC,CAAA;AACvD,QAAA,OAAA;AACF,OAAA;MAEA,IAAI;QAAA,IAAA6D,sBAAA,EAAAC,cAAA,CAAA;AACF;QACA,OAAAD,CAAAA,sBAAA,GAAM,CAAAC,cAAA,OAAI,CAAC1C,OAAO,EAAC2C,QAAQ,KAArBF,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,sBAAA,CAAAH,IAAA,CAAAI,cAAA,EAAwB,IAAI,CAACxB,KAAK,CAACtC,MAAM,EAAE,IAAI,CAAC,CAAA,CAAA;AAEtD,QAAA,IAAI,CAACqB,KAAK,CAACC,KAAK,CAAC,MAAM;AACrB,UAAA,IAAI,CAACD,KAAK,CAACK,QAAQ,CAAEe,IAAI,KAAM;AAAE,YAAA,GAAGA,IAAI;AAAElC,YAAAA,WAAW,EAAE,IAAA;AAAK,WAAC,CAAC,CAAC,CAAA;AAC/D8C,UAAAA,IAAI,EAAE,CAAA;AACR,SAAC,CAAC,CAAA;OACH,CAAC,OAAOW,GAAG,EAAE;AACZX,QAAAA,IAAI,EAAE,CAAA;AACN,QAAA,MAAMW,GAAG,CAAA;AACX,OAAA;KACD,CAAA,CAAA;AAAA7C,IAAAA,eAAA,CAGCgB,IAAAA,EAAAA,eAAAA,EAAAA,KAAa,IACoB8B,KAAK,CAAC,IAAI,CAAC3B,KAAK,CAACtC,MAAM,EAAEmC,KAAK,CAAC,CAAA,CAAA;IAAAhB,eAAA,CAAA,IAAA,EAAA,cAAA,EAGhEgB,KAAa,IACC;AACd,MAAA,OAAO,IAAI,CAACG,KAAK,CAACrC,SAAS,CAACkC,KAAK,CAAC,CAAA;KACnC,CAAA,CAAA;IAAAhB,eAAA,CAAA,IAAA,EAAA,cAAA,EAEmDgB,KAAa,IAAK;AAAA,MAAA,IAAA+B,eAAA,CAAA;AACpE;AACA,MAAA,OAAQ,CAAAA,eAAA,GAAI,IAAA,CAACjC,SAAS,EAACE,KAAK,CAAC,KAArB+B,eAAA,CAAe/B,KAAK,CAAC,GAAK;AAChCC,QAAAA,SAAS,EAAE,EAAC;OACb,CAAA,CAAA;KACF,CAAA,CAAA;AAAAjB,IAAAA,eAAA,CAEc,IAAA,EAAA,cAAA,EAAA,CACbgB,KAAa,EACbgC,OAA2B,KACxB;AACH,MAAA,IAAI,CAAC9C,KAAK,CAACK,QAAQ,CAAEe,IAAI,IAAK;QAC5B,OAAO;AACL,UAAA,GAAGA,IAAI;AACPxC,UAAAA,SAAS,EAAE;YACT,GAAGwC,IAAI,CAACxC,SAAS;YACjB,CAACkC,KAAK,GAAGiC,gBAAgB,CAACD,OAAO,EAAE1B,IAAI,CAACxC,SAAS,CAACkC,KAAK,CAAC,CAAA;AAC1D,WAAA;SACD,CAAA;AACH,OAAC,CAAC,CAAA;KACH,CAAA,CAAA;AAAAhB,IAAAA,eAAA,wBAEe,CACdgB,KAAa,EACbgC,OAA8C,EAC9CnD,IAA0B,KACvB;AACH,MAAA,MAAMqD,KAAK,GAAGrD,IAAI,IAAJA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAEqD,KAAK,CAAA;AAEzB,MAAA,IAAI,CAAChD,KAAK,CAACC,KAAK,CAAC,MAAM;AACrB,QAAA,IAAI+C,KAAK,EAAE;AACT,UAAA,IAAI,CAACC,YAAY,CAACnC,KAAK,EAAGM,IAAI,KAAM;AAClC,YAAA,GAAGA,IAAI;AACPhC,YAAAA,SAAS,EAAE,IAAA;AACb,WAAC,CAAC,CAAC,CAAA;AACL,SAAA;AAEA,QAAA,IAAI,CAACY,KAAK,CAACK,QAAQ,CAAEe,IAAI,IAAK;UAC5B,OAAO;AACL,YAAA,GAAGA,IAAI;YACPzC,MAAM,EAAEuE,KAAK,CAAC9B,IAAI,CAACzC,MAAM,EAAEmC,KAAK,EAAEgC,OAAO,CAAA;WAC1C,CAAA;AACH,SAAC,CAAC,CAAA;AACJ,OAAC,CAAC,CAAA;KACH,CAAA,CAAA;AAAAhD,IAAAA,eAAA,yBAEgB,CACfgB,KAAa,EACbqC,KAA2C,EAC3CxD,IAA0B,KACvB;MACH,OAAO,IAAI,CAACyD,aAAa,CACvBtC,KAAK,EACJM,IAAI,IAAK,CAAC,IAAIiC,KAAK,CAACC,OAAO,CAAClC,IAAI,CAAC,GAAGA,IAAI,GAAG,EAAE,CAAC,EAAE+B,KAAK,CAAQ,EAC9DxD,IACF,CAAC,CAAA;KACF,CAAA,CAAA;IAAAG,eAAA,CAAA,IAAA,EAAA,kBAAA,EAEkB,CACjBgB,KAAa,EACbyC,KAAa,EACbJ,KAA2C,EAC3CxD,IAA0B,KACvB;AACH,MAAA,IAAI,CAACyD,aAAa,CAChBtC,KAAK,EACJM,IAAI,IAAK;AACR,QAAA,OAAQA,IAAI,CAAoCoC,GAAG,CAAC,CAACzB,CAAC,EAAE0B,CAAC,KACvDA,CAAC,KAAKF,KAAK,GAAGJ,KAAK,GAAGpB,CACxB,CAAC,CAAA;OACF,EACDpC,IACF,CAAC,CAAA;KACF,CAAA,CAAA;AAAAG,IAAAA,eAAA,2BAEkB,CACjBgB,KAAa,EACbyC,KAAa,EACb5D,IAA0B,KACvB;AACH,MAAA,IAAI,CAACyD,aAAa,CAChBtC,KAAK,EACJM,IAAI,IAAK;AACR,QAAA,OAAQA,IAAI,CAAoCsC,MAAM,CACpD,CAACC,EAAE,EAAEF,CAAC,KAAKA,CAAC,KAAKF,KACnB,CAAC,CAAA;OACF,EACD5D,IACF,CAAC,CAAA;KACF,CAAA,CAAA;AAAAG,IAAAA,eAAA,0BAEiB,CAChBgB,KAAa,EACb8C,MAAc,EACdC,MAAc,KACX;AACH,MAAA,IAAI,CAACT,aAAa,CAACtC,KAAK,EAAGM,IAAS,IAAK;AACvC,QAAA,MAAM0C,KAAK,GAAG1C,IAAI,CAACwC,MAAM,CAAE,CAAA;AAC3B,QAAA,MAAMG,KAAK,GAAG3C,IAAI,CAACyC,MAAM,CAAE,CAAA;AAC3B,QAAA,OAAOX,KAAK,CAACA,KAAK,CAAC9B,IAAI,EAAKwC,EAAAA,GAAAA,MAAM,EAAIG,KAAK,CAAC,EAAA,EAAA,GAAKF,MAAM,EAAIC,KAAK,CAAC,CAAA;AACnE,OAAC,CAAC,CAAA;KACH,CAAA,CAAA;AAnSC,IAAA,IAAI,CAAC9D,KAAK,GAAG,IAAIgE,KAAK,CACpBvF,mBAAmB,CAAC;AAClB,MAAA,IAAGkB,KAAI,IAAA,IAAA,GAAA,KAAA,CAAA,GAAJA,KAAI,CAAEjB,YAAY,CAAA;MACrBC,MAAM,EAAA,CAAAiB,mBAAA,GAAED,KAAI,oBAAJA,KAAI,CAAEQ,aAAa,KAAAP,IAAAA,GAAAA,mBAAA,GAAID,KAAI,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAAE,kBAAA,GAAJF,KAAI,CAAEjB,YAAY,KAAA,IAAA,GAAA,KAAA,CAAA,GAAlBmB,kBAAA,CAAoBlB,MAAM;AACzDK,MAAAA,WAAW,EAAE,IAAA;AACf,KAAC,CAAC,EACF;MACEiF,QAAQ,EAAEA,MAAM;QACd,IAAI;AAAEhD,UAAAA,KAAAA;SAAO,GAAG,IAAI,CAACjB,KAAK,CAAA;AAC1B;QACA,MAAMkE,eAAe,GAAG5D,MAAM,CAAC3B,MAAM,CAACsC,KAAK,CAACrC,SAAS,CAGlD,CAAA;AAEH,QAAA,MAAMG,kBAAkB,GAAGmF,eAAe,CAACC,IAAI,CAC5CrD,KAAK,IAAKA,KAAK,IAAA,IAAA,GAAA,KAAA,CAAA,GAALA,KAAK,CAAExB,YACpB,CAAC,CAAA;AAED,QAAA,MAAMR,aAAa,GAAG,CAACoF,eAAe,CAACC,IAAI,CAAErD,KAAK,IAAKA,KAAK,IAAA,IAAA,GAAA,KAAA,CAAA,GAALA,KAAK,CAAEsD,KAAK,CAAC,CAAA;AAEpE,QAAA,MAAMhF,SAAS,GAAG8E,eAAe,CAACC,IAAI,CAAErD,KAAK,IAAKA,KAAK,IAAA,IAAA,GAAA,KAAA,CAAA,GAALA,KAAK,CAAE1B,SAAS,CAAC,CAAA;AAEnE,QAAA,MAAME,YAAY,GAAGP,kBAAkB,IAAIkC,KAAK,CAAChC,gBAAgB,CAAA;AACjE,QAAA,MAAMD,WAAW,GAAG,CAACiC,KAAK,CAACoD,SAAS,CAAA;AACpC,QAAA,MAAMhF,OAAO,GAAGP,aAAa,IAAIE,WAAW,CAAA;AAC5C,QAAA,MAAMH,SAAS,GACZoC,KAAK,CAAC1B,kBAAkB,KAAK,CAAC,IAAI,CAACH,SAAS,IAC5C,CAACE,YAAY,IAAI,CAAC2B,KAAK,CAAC9B,YAAY,IAAIE,OAAQ,CAAA;AAEnD4B,QAAAA,KAAK,GAAG;AACN,UAAA,GAAGA,KAAK;UACRlC,kBAAkB;UAClBD,aAAa;UACbE,WAAW;UACXK,OAAO;UACPR,SAAS;AACTO,UAAAA,SAAAA;SACD,CAAA;AAED,QAAA,IAAI,CAACY,KAAK,CAACiB,KAAK,GAAGA,KAAK,CAAA;QACxB,IAAI,CAACA,KAAK,GAAGA,KAAK,CAAA;AACpB,OAAA;AACF,KACF,CAAC,CAAA;AAED,IAAA,IAAI,CAACA,KAAK,GAAG,IAAI,CAACjB,KAAK,CAACiB,KAAK,CAAA;AAE7B,IAAA,IAAI,CAACqD,MAAM,CAAC3E,KAAI,IAAI,EAAE,CAAC,CAAA;AACzB,GAAA;AAmPF;;;;"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.legacy.cjs');
|
|
4
|
+
var store = require('@tanstack/store');
|
|
5
|
+
var utils = require('./utils.legacy.cjs');
|
|
6
|
+
|
|
7
|
+
function getDefaultFormState(defaultState) {
|
|
8
|
+
return {
|
|
9
|
+
values: {},
|
|
10
|
+
fieldMeta: {},
|
|
11
|
+
canSubmit: true,
|
|
12
|
+
isFieldsValid: false,
|
|
13
|
+
isFieldsValidating: false,
|
|
14
|
+
isFormValid: false,
|
|
15
|
+
isFormValidating: false,
|
|
16
|
+
isSubmitted: false,
|
|
17
|
+
isSubmitting: false,
|
|
18
|
+
isTouched: false,
|
|
19
|
+
isValid: false,
|
|
20
|
+
isValidating: false,
|
|
21
|
+
submissionAttempts: 0,
|
|
22
|
+
formValidationCount: 0,
|
|
23
|
+
...defaultState
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
class FormApi {
|
|
27
|
+
constructor(_opts) {
|
|
28
|
+
var _opts$defaultValues, _opts$defaultState;
|
|
29
|
+
// // This carries the context for nested fields
|
|
30
|
+
_rollupPluginBabelHelpers.defineProperty(this, "options", {});
|
|
31
|
+
_rollupPluginBabelHelpers.defineProperty(this, "store", void 0);
|
|
32
|
+
// Do not use __state directly, as it is not reactive.
|
|
33
|
+
// Please use form.useStore() utility to subscribe to state
|
|
34
|
+
_rollupPluginBabelHelpers.defineProperty(this, "state", void 0);
|
|
35
|
+
_rollupPluginBabelHelpers.defineProperty(this, "fieldInfo", {});
|
|
36
|
+
_rollupPluginBabelHelpers.defineProperty(this, "fieldName", void 0);
|
|
37
|
+
_rollupPluginBabelHelpers.defineProperty(this, "validationMeta", {});
|
|
38
|
+
_rollupPluginBabelHelpers.defineProperty(this, "update", options => {
|
|
39
|
+
if (!options) return;
|
|
40
|
+
this.store.batch(() => {
|
|
41
|
+
const shouldUpdateValues = options.defaultValues && options.defaultValues !== this.options.defaultValues;
|
|
42
|
+
const shouldUpdateState = options.defaultState !== this.options.defaultState;
|
|
43
|
+
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
45
|
+
if (!shouldUpdateValues || !shouldUpdateValues) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
this.store.setState(() => getDefaultFormState(Object.assign({},
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
50
|
+
shouldUpdateState ? options.defaultState : {},
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
52
|
+
shouldUpdateValues ? {
|
|
53
|
+
values: options.defaultValues
|
|
54
|
+
} : {})));
|
|
55
|
+
});
|
|
56
|
+
this.options = options;
|
|
57
|
+
});
|
|
58
|
+
_rollupPluginBabelHelpers.defineProperty(this, "reset", () => this.store.setState(() => {
|
|
59
|
+
var _this$options$default, _this$options$default2;
|
|
60
|
+
return getDefaultFormState({
|
|
61
|
+
...this.options.defaultState,
|
|
62
|
+
values: (_this$options$default = this.options.defaultValues) != null ? _this$options$default : (_this$options$default2 = this.options.defaultState) == null ? void 0 : _this$options$default2.values
|
|
63
|
+
});
|
|
64
|
+
}));
|
|
65
|
+
_rollupPluginBabelHelpers.defineProperty(this, "validateAllFields", async cause => {
|
|
66
|
+
const fieldValidationPromises = [];
|
|
67
|
+
this.store.batch(() => {
|
|
68
|
+
void Object.values(this.fieldInfo).forEach(field => {
|
|
69
|
+
Object.values(field.instances).forEach(instance => {
|
|
70
|
+
// If any fields are not touched
|
|
71
|
+
if (!instance.state.meta.isTouched) {
|
|
72
|
+
// Mark them as touched
|
|
73
|
+
instance.setMeta(prev => ({
|
|
74
|
+
...prev,
|
|
75
|
+
isTouched: true
|
|
76
|
+
}));
|
|
77
|
+
// Validate the field
|
|
78
|
+
fieldValidationPromises.push(Promise.resolve().then(() => instance.validate(cause)));
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
return Promise.all(fieldValidationPromises);
|
|
84
|
+
});
|
|
85
|
+
// validateForm = async () => {}
|
|
86
|
+
_rollupPluginBabelHelpers.defineProperty(this, "handleSubmit", async e => {
|
|
87
|
+
e.preventDefault();
|
|
88
|
+
e.stopPropagation();
|
|
89
|
+
|
|
90
|
+
// Check to see that the form and all fields have been touched
|
|
91
|
+
// If they have not, touch them all and run validation
|
|
92
|
+
// Run form validation
|
|
93
|
+
// Submit the form
|
|
94
|
+
|
|
95
|
+
this.store.setState(old => ({
|
|
96
|
+
...old,
|
|
97
|
+
// Submittion attempts mark the form as not submitted
|
|
98
|
+
isSubmitted: false,
|
|
99
|
+
// Count submission attempts
|
|
100
|
+
submissionAttempts: old.submissionAttempts + 1
|
|
101
|
+
}));
|
|
102
|
+
|
|
103
|
+
// Don't let invalid forms submit
|
|
104
|
+
if (!this.state.canSubmit) return;
|
|
105
|
+
this.store.setState(d => ({
|
|
106
|
+
...d,
|
|
107
|
+
isSubmitting: true
|
|
108
|
+
}));
|
|
109
|
+
const done = () => {
|
|
110
|
+
this.store.setState(prev => ({
|
|
111
|
+
...prev,
|
|
112
|
+
isSubmitting: false
|
|
113
|
+
}));
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
// Validate all fields
|
|
117
|
+
await this.validateAllFields('submit');
|
|
118
|
+
|
|
119
|
+
// Fields are invalid, do not submit
|
|
120
|
+
if (!this.state.isFieldsValid) {
|
|
121
|
+
var _this$options$onSubmi, _this$options;
|
|
122
|
+
done();
|
|
123
|
+
(_this$options$onSubmi = (_this$options = this.options).onSubmitInvalid) == null ? void 0 : _this$options$onSubmi.call(_this$options, this.state.values, this);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Run validation for the form
|
|
128
|
+
// await this.validateForm()
|
|
129
|
+
|
|
130
|
+
if (!this.state.isValid) {
|
|
131
|
+
var _this$options$onSubmi2, _this$options2;
|
|
132
|
+
done();
|
|
133
|
+
(_this$options$onSubmi2 = (_this$options2 = this.options).onSubmitInvalid) == null ? void 0 : _this$options$onSubmi2.call(_this$options2, this.state.values, this);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
var _this$options$onSubmi3, _this$options3;
|
|
138
|
+
// Run the submit code
|
|
139
|
+
await ((_this$options$onSubmi3 = (_this$options3 = this.options).onSubmit) == null ? void 0 : _this$options$onSubmi3.call(_this$options3, this.state.values, this));
|
|
140
|
+
this.store.batch(() => {
|
|
141
|
+
this.store.setState(prev => ({
|
|
142
|
+
...prev,
|
|
143
|
+
isSubmitted: true
|
|
144
|
+
}));
|
|
145
|
+
done();
|
|
146
|
+
});
|
|
147
|
+
} catch (err) {
|
|
148
|
+
done();
|
|
149
|
+
throw err;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
_rollupPluginBabelHelpers.defineProperty(this, "getFieldValue", field => utils.getBy(this.state.values, field));
|
|
153
|
+
_rollupPluginBabelHelpers.defineProperty(this, "getFieldMeta", field => {
|
|
154
|
+
return this.state.fieldMeta[field];
|
|
155
|
+
});
|
|
156
|
+
_rollupPluginBabelHelpers.defineProperty(this, "getFieldInfo", field => {
|
|
157
|
+
var _this$fieldInfo;
|
|
158
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
159
|
+
return (_this$fieldInfo = this.fieldInfo)[field] || (_this$fieldInfo[field] = {
|
|
160
|
+
instances: {}
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
_rollupPluginBabelHelpers.defineProperty(this, "setFieldMeta", (field, updater) => {
|
|
164
|
+
this.store.setState(prev => {
|
|
165
|
+
return {
|
|
166
|
+
...prev,
|
|
167
|
+
fieldMeta: {
|
|
168
|
+
...prev.fieldMeta,
|
|
169
|
+
[field]: utils.functionalUpdate(updater, prev.fieldMeta[field])
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
_rollupPluginBabelHelpers.defineProperty(this, "setFieldValue", (field, updater, opts) => {
|
|
175
|
+
const touch = opts == null ? void 0 : opts.touch;
|
|
176
|
+
this.store.batch(() => {
|
|
177
|
+
if (touch) {
|
|
178
|
+
this.setFieldMeta(field, prev => ({
|
|
179
|
+
...prev,
|
|
180
|
+
isTouched: true
|
|
181
|
+
}));
|
|
182
|
+
}
|
|
183
|
+
this.store.setState(prev => {
|
|
184
|
+
return {
|
|
185
|
+
...prev,
|
|
186
|
+
values: utils.setBy(prev.values, field, updater)
|
|
187
|
+
};
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
_rollupPluginBabelHelpers.defineProperty(this, "pushFieldValue", (field, value, opts) => {
|
|
192
|
+
return this.setFieldValue(field, prev => [...(Array.isArray(prev) ? prev : []), value], opts);
|
|
193
|
+
});
|
|
194
|
+
_rollupPluginBabelHelpers.defineProperty(this, "insertFieldValue", (field, index, value, opts) => {
|
|
195
|
+
this.setFieldValue(field, prev => {
|
|
196
|
+
return prev.map((d, i) => i === index ? value : d);
|
|
197
|
+
}, opts);
|
|
198
|
+
});
|
|
199
|
+
_rollupPluginBabelHelpers.defineProperty(this, "removeFieldValue", (field, index, opts) => {
|
|
200
|
+
this.setFieldValue(field, prev => {
|
|
201
|
+
return prev.filter((_d, i) => i !== index);
|
|
202
|
+
}, opts);
|
|
203
|
+
});
|
|
204
|
+
_rollupPluginBabelHelpers.defineProperty(this, "swapFieldValues", (field, index1, index2) => {
|
|
205
|
+
this.setFieldValue(field, prev => {
|
|
206
|
+
const prev1 = prev[index1];
|
|
207
|
+
const prev2 = prev[index2];
|
|
208
|
+
return utils.setBy(utils.setBy(prev, "" + index1, prev2), "" + index2, prev1);
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
this.store = new store.Store(getDefaultFormState({
|
|
212
|
+
...(_opts == null ? void 0 : _opts.defaultState),
|
|
213
|
+
values: (_opts$defaultValues = _opts == null ? void 0 : _opts.defaultValues) != null ? _opts$defaultValues : _opts == null ? void 0 : (_opts$defaultState = _opts.defaultState) == null ? void 0 : _opts$defaultState.values,
|
|
214
|
+
isFormValid: true
|
|
215
|
+
}), {
|
|
216
|
+
onUpdate: () => {
|
|
217
|
+
let {
|
|
218
|
+
state
|
|
219
|
+
} = this.store;
|
|
220
|
+
// Computed state
|
|
221
|
+
const fieldMetaValues = Object.values(state.fieldMeta);
|
|
222
|
+
const isFieldsValidating = fieldMetaValues.some(field => field == null ? void 0 : field.isValidating);
|
|
223
|
+
const isFieldsValid = !fieldMetaValues.some(field => field == null ? void 0 : field.error);
|
|
224
|
+
const isTouched = fieldMetaValues.some(field => field == null ? void 0 : field.isTouched);
|
|
225
|
+
const isValidating = isFieldsValidating || state.isFormValidating;
|
|
226
|
+
const isFormValid = !state.formError;
|
|
227
|
+
const isValid = isFieldsValid && isFormValid;
|
|
228
|
+
const canSubmit = state.submissionAttempts === 0 && !isTouched || !isValidating && !state.isSubmitting && isValid;
|
|
229
|
+
state = {
|
|
230
|
+
...state,
|
|
231
|
+
isFieldsValidating,
|
|
232
|
+
isFieldsValid,
|
|
233
|
+
isFormValid,
|
|
234
|
+
isValid,
|
|
235
|
+
canSubmit,
|
|
236
|
+
isTouched
|
|
237
|
+
};
|
|
238
|
+
this.store.state = state;
|
|
239
|
+
this.state = state;
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
this.state = this.store.state;
|
|
243
|
+
this.update(_opts || {});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
exports.FormApi = FormApi;
|
|
248
|
+
//# sourceMappingURL=FormApi.legacy.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormApi.legacy.cjs","sources":["../../src/FormApi.ts"],"sourcesContent":["import { Store } from '@tanstack/store'\n//\nimport type { DeepKeys, DeepValue, Updater } from './utils'\nimport { functionalUpdate, getBy, setBy } from './utils'\nimport type { FieldApi, FieldMeta, ValidationCause } from './FieldApi'\n\nexport interface Register {\n // FormSubmitEvent\n}\n\nexport type FormSubmitEvent = Register extends {\n FormSubmitEvent: infer E\n}\n ? E\n : Event\n\nexport type FormOptions<TData> = {\n defaultValues?: TData\n defaultState?: Partial<FormState<TData>>\n asyncDebounceMs?: number\n onMount?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onMountAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onMountAsyncDebounceMs?: number\n onChange?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onChangeAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onChangeAsyncDebounceMs?: number\n onBlur?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onBlurAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onBlurAsyncDebounceMs?: number\n onSubmit?: (values: TData, formApi: FormApi<TData>) => any | Promise<any>\n onSubmitInvalid?: (values: TData, formApi: FormApi<TData>) => void\n}\n\nexport type FieldInfo<TFormData> = {\n instances: Record<string, FieldApi<any, TFormData>>\n} & ValidationMeta\n\nexport type ValidationMeta = {\n validationCount?: number\n validationAsyncCount?: number\n validationPromise?: Promise<ValidationError>\n validationResolve?: (error: ValidationError) => void\n validationReject?: (error: unknown) => void\n}\n\nexport type ValidationError = undefined | false | null | string\n\nexport type FormState<TData> = {\n values: TData\n // Form Validation\n isFormValidating: boolean\n formValidationCount: number\n isFormValid: boolean\n formError?: ValidationError\n // Fields\n fieldMeta: Record<DeepKeys<TData>, FieldMeta>\n isFieldsValidating: boolean\n isFieldsValid: boolean\n isSubmitting: boolean\n // General\n isTouched: boolean\n isSubmitted: boolean\n isValidating: boolean\n isValid: boolean\n canSubmit: boolean\n submissionAttempts: number\n}\n\nfunction getDefaultFormState<TData>(\n defaultState: Partial<FormState<TData>>,\n): FormState<TData> {\n return {\n values: {} as any,\n fieldMeta: {} as any,\n canSubmit: true,\n isFieldsValid: false,\n isFieldsValidating: false,\n isFormValid: false,\n isFormValidating: false,\n isSubmitted: false,\n isSubmitting: false,\n isTouched: false,\n isValid: false,\n isValidating: false,\n submissionAttempts: 0,\n formValidationCount: 0,\n ...defaultState,\n }\n}\n\nexport class FormApi<TFormData> {\n // // This carries the context for nested fields\n options: FormOptions<TFormData> = {}\n store!: Store<FormState<TFormData>>\n // Do not use __state directly, as it is not reactive.\n // Please use form.useStore() utility to subscribe to state\n state!: FormState<TFormData>\n fieldInfo: Record<DeepKeys<TFormData>, FieldInfo<TFormData>> = {} as any\n fieldName?: string\n validationMeta: ValidationMeta = {}\n\n constructor(opts?: FormOptions<TFormData>) {\n this.store = new Store<FormState<TFormData>>(\n getDefaultFormState({\n ...opts?.defaultState,\n values: opts?.defaultValues ?? opts?.defaultState?.values,\n isFormValid: true,\n }),\n {\n onUpdate: () => {\n let { state } = this.store\n // Computed state\n const fieldMetaValues = Object.values(state.fieldMeta) as (\n | FieldMeta\n | undefined\n )[]\n\n const isFieldsValidating = fieldMetaValues.some(\n (field) => field?.isValidating,\n )\n\n const isFieldsValid = !fieldMetaValues.some((field) => field?.error)\n\n const isTouched = fieldMetaValues.some((field) => field?.isTouched)\n\n const isValidating = isFieldsValidating || state.isFormValidating\n const isFormValid = !state.formError\n const isValid = isFieldsValid && isFormValid\n const canSubmit =\n (state.submissionAttempts === 0 && !isTouched) ||\n (!isValidating && !state.isSubmitting && isValid)\n\n state = {\n ...state,\n isFieldsValidating,\n isFieldsValid,\n isFormValid,\n isValid,\n canSubmit,\n isTouched,\n }\n\n this.store.state = state\n this.state = state\n },\n },\n )\n\n this.state = this.store.state\n\n this.update(opts || {})\n }\n\n update = (options?: FormOptions<TFormData>) => {\n if (!options) return\n\n this.store.batch(() => {\n const shouldUpdateValues =\n options.defaultValues &&\n options.defaultValues !== this.options.defaultValues\n\n const shouldUpdateState =\n options.defaultState !== this.options.defaultState\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!shouldUpdateValues || !shouldUpdateValues) {\n return\n }\n\n this.store.setState(() =>\n getDefaultFormState(\n Object.assign(\n {},\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n shouldUpdateState ? options.defaultState : {},\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n shouldUpdateValues\n ? {\n values: options.defaultValues,\n }\n : {},\n ),\n ),\n )\n })\n\n this.options = options\n }\n\n reset = () =>\n this.store.setState(() =>\n getDefaultFormState({\n ...this.options.defaultState,\n values: this.options.defaultValues ?? this.options.defaultState?.values,\n }),\n )\n\n validateAllFields = async (cause: ValidationCause) => {\n const fieldValidationPromises: Promise<ValidationError>[] = [] as any\n\n this.store.batch(() => {\n void (Object.values(this.fieldInfo) as FieldInfo<any>[]).forEach(\n (field) => {\n Object.values(field.instances).forEach((instance) => {\n // If any fields are not touched\n if (!instance.state.meta.isTouched) {\n // Mark them as touched\n instance.setMeta((prev) => ({ ...prev, isTouched: true }))\n // Validate the field\n fieldValidationPromises.push(\n Promise.resolve().then(() => instance.validate(cause)),\n )\n }\n })\n },\n )\n })\n\n return Promise.all(fieldValidationPromises)\n }\n\n // validateForm = async () => {}\n\n handleSubmit = async (e: FormSubmitEvent) => {\n e.preventDefault()\n e.stopPropagation()\n\n // Check to see that the form and all fields have been touched\n // If they have not, touch them all and run validation\n // Run form validation\n // Submit the form\n\n this.store.setState((old) => ({\n ...old,\n // Submittion attempts mark the form as not submitted\n isSubmitted: false,\n // Count submission attempts\n submissionAttempts: old.submissionAttempts + 1,\n }))\n\n // Don't let invalid forms submit\n if (!this.state.canSubmit) return\n\n this.store.setState((d) => ({ ...d, isSubmitting: true }))\n\n const done = () => {\n this.store.setState((prev) => ({ ...prev, isSubmitting: false }))\n }\n\n // Validate all fields\n await this.validateAllFields('submit')\n\n // Fields are invalid, do not submit\n if (!this.state.isFieldsValid) {\n done()\n this.options.onSubmitInvalid?.(this.state.values, this)\n return\n }\n\n // Run validation for the form\n // await this.validateForm()\n\n if (!this.state.isValid) {\n done()\n this.options.onSubmitInvalid?.(this.state.values, this)\n return\n }\n\n try {\n // Run the submit code\n await this.options.onSubmit?.(this.state.values, this)\n\n this.store.batch(() => {\n this.store.setState((prev) => ({ ...prev, isSubmitted: true }))\n done()\n })\n } catch (err) {\n done()\n throw err\n }\n }\n\n getFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): DeepValue<TFormData, TField> => getBy(this.state.values, field)\n\n getFieldMeta = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): FieldMeta => {\n return this.state.fieldMeta[field]\n }\n\n getFieldInfo = <TField extends DeepKeys<TFormData>>(field: TField) => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return (this.fieldInfo[field] ||= {\n instances: {},\n })\n }\n\n setFieldMeta = <TField extends DeepKeys<TFormData>>(\n field: TField,\n updater: Updater<FieldMeta>,\n ) => {\n this.store.setState((prev) => {\n return {\n ...prev,\n fieldMeta: {\n ...prev.fieldMeta,\n [field]: functionalUpdate(updater, prev.fieldMeta[field]),\n },\n }\n })\n }\n\n setFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n updater: Updater<DeepValue<TFormData, TField>>,\n opts?: { touch?: boolean },\n ) => {\n const touch = opts?.touch\n\n this.store.batch(() => {\n if (touch) {\n this.setFieldMeta(field, (prev) => ({\n ...prev,\n isTouched: true,\n }))\n }\n\n this.store.setState((prev) => {\n return {\n ...prev,\n values: setBy(prev.values, field, updater),\n }\n })\n })\n }\n\n pushFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n value: DeepValue<TFormData, TField>[number],\n opts?: { touch?: boolean },\n ) => {\n return this.setFieldValue(\n field,\n (prev) => [...(Array.isArray(prev) ? prev : []), value] as any,\n opts,\n )\n }\n\n insertFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index: number,\n value: DeepValue<TFormData, TField>[number],\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n return (prev as DeepValue<TFormData, TField>[]).map((d, i) =>\n i === index ? value : d,\n ) as any\n },\n opts,\n )\n }\n\n removeFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index: number,\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n return (prev as DeepValue<TFormData, TField>[]).filter(\n (_d, i) => i !== index,\n ) as any\n },\n opts,\n )\n }\n\n swapFieldValues = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index1: number,\n index2: number,\n ) => {\n this.setFieldValue(field, (prev: any) => {\n const prev1 = prev[index1]!\n const prev2 = prev[index2]!\n return setBy(setBy(prev, `${index1}`, prev2), `${index2}`, prev1)\n })\n }\n}\n"],"names":["getDefaultFormState","defaultState","values","fieldMeta","canSubmit","isFieldsValid","isFieldsValidating","isFormValid","isFormValidating","isSubmitted","isSubmitting","isTouched","isValid","isValidating","submissionAttempts","formValidationCount","FormApi","constructor","opts","_opts$defaultValues","_opts$defaultState","_defineProperty","options","store","batch","shouldUpdateValues","defaultValues","shouldUpdateState","setState","Object","assign","_this$options$default","_this$options$default2","cause","fieldValidationPromises","fieldInfo","forEach","field","instances","instance","state","meta","setMeta","prev","push","Promise","resolve","then","validate","all","e","preventDefault","stopPropagation","old","d","done","validateAllFields","_this$options$onSubmi","_this$options","onSubmitInvalid","call","_this$options$onSubmi2","_this$options2","_this$options$onSubmi3","_this$options3","onSubmit","err","getBy","_this$fieldInfo","updater","functionalUpdate","touch","setFieldMeta","setBy","value","setFieldValue","Array","isArray","index","map","i","filter","_d","index1","index2","prev1","prev2","Store","onUpdate","fieldMetaValues","some","error","formError","update"],"mappings":"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"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { defineProperty as _defineProperty } from './_virtual/_rollupPluginBabelHelpers.legacy.js';
|
|
2
|
+
import { Store } from '@tanstack/store';
|
|
3
|
+
import { getBy, functionalUpdate, setBy } from './utils.legacy.js';
|
|
4
|
+
|
|
5
|
+
function getDefaultFormState(defaultState) {
|
|
6
|
+
return {
|
|
7
|
+
values: {},
|
|
8
|
+
fieldMeta: {},
|
|
9
|
+
canSubmit: true,
|
|
10
|
+
isFieldsValid: false,
|
|
11
|
+
isFieldsValidating: false,
|
|
12
|
+
isFormValid: false,
|
|
13
|
+
isFormValidating: false,
|
|
14
|
+
isSubmitted: false,
|
|
15
|
+
isSubmitting: false,
|
|
16
|
+
isTouched: false,
|
|
17
|
+
isValid: false,
|
|
18
|
+
isValidating: false,
|
|
19
|
+
submissionAttempts: 0,
|
|
20
|
+
formValidationCount: 0,
|
|
21
|
+
...defaultState
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
class FormApi {
|
|
25
|
+
constructor(_opts) {
|
|
26
|
+
var _opts$defaultValues, _opts$defaultState;
|
|
27
|
+
// // This carries the context for nested fields
|
|
28
|
+
_defineProperty(this, "options", {});
|
|
29
|
+
_defineProperty(this, "store", void 0);
|
|
30
|
+
// Do not use __state directly, as it is not reactive.
|
|
31
|
+
// Please use form.useStore() utility to subscribe to state
|
|
32
|
+
_defineProperty(this, "state", void 0);
|
|
33
|
+
_defineProperty(this, "fieldInfo", {});
|
|
34
|
+
_defineProperty(this, "fieldName", void 0);
|
|
35
|
+
_defineProperty(this, "validationMeta", {});
|
|
36
|
+
_defineProperty(this, "update", options => {
|
|
37
|
+
if (!options) return;
|
|
38
|
+
this.store.batch(() => {
|
|
39
|
+
const shouldUpdateValues = options.defaultValues && options.defaultValues !== this.options.defaultValues;
|
|
40
|
+
const shouldUpdateState = options.defaultState !== this.options.defaultState;
|
|
41
|
+
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
43
|
+
if (!shouldUpdateValues || !shouldUpdateValues) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.store.setState(() => getDefaultFormState(Object.assign({},
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
48
|
+
shouldUpdateState ? options.defaultState : {},
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
50
|
+
shouldUpdateValues ? {
|
|
51
|
+
values: options.defaultValues
|
|
52
|
+
} : {})));
|
|
53
|
+
});
|
|
54
|
+
this.options = options;
|
|
55
|
+
});
|
|
56
|
+
_defineProperty(this, "reset", () => this.store.setState(() => {
|
|
57
|
+
var _this$options$default, _this$options$default2;
|
|
58
|
+
return getDefaultFormState({
|
|
59
|
+
...this.options.defaultState,
|
|
60
|
+
values: (_this$options$default = this.options.defaultValues) != null ? _this$options$default : (_this$options$default2 = this.options.defaultState) == null ? void 0 : _this$options$default2.values
|
|
61
|
+
});
|
|
62
|
+
}));
|
|
63
|
+
_defineProperty(this, "validateAllFields", async cause => {
|
|
64
|
+
const fieldValidationPromises = [];
|
|
65
|
+
this.store.batch(() => {
|
|
66
|
+
void Object.values(this.fieldInfo).forEach(field => {
|
|
67
|
+
Object.values(field.instances).forEach(instance => {
|
|
68
|
+
// If any fields are not touched
|
|
69
|
+
if (!instance.state.meta.isTouched) {
|
|
70
|
+
// Mark them as touched
|
|
71
|
+
instance.setMeta(prev => ({
|
|
72
|
+
...prev,
|
|
73
|
+
isTouched: true
|
|
74
|
+
}));
|
|
75
|
+
// Validate the field
|
|
76
|
+
fieldValidationPromises.push(Promise.resolve().then(() => instance.validate(cause)));
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
return Promise.all(fieldValidationPromises);
|
|
82
|
+
});
|
|
83
|
+
// validateForm = async () => {}
|
|
84
|
+
_defineProperty(this, "handleSubmit", async e => {
|
|
85
|
+
e.preventDefault();
|
|
86
|
+
e.stopPropagation();
|
|
87
|
+
|
|
88
|
+
// Check to see that the form and all fields have been touched
|
|
89
|
+
// If they have not, touch them all and run validation
|
|
90
|
+
// Run form validation
|
|
91
|
+
// Submit the form
|
|
92
|
+
|
|
93
|
+
this.store.setState(old => ({
|
|
94
|
+
...old,
|
|
95
|
+
// Submittion attempts mark the form as not submitted
|
|
96
|
+
isSubmitted: false,
|
|
97
|
+
// Count submission attempts
|
|
98
|
+
submissionAttempts: old.submissionAttempts + 1
|
|
99
|
+
}));
|
|
100
|
+
|
|
101
|
+
// Don't let invalid forms submit
|
|
102
|
+
if (!this.state.canSubmit) return;
|
|
103
|
+
this.store.setState(d => ({
|
|
104
|
+
...d,
|
|
105
|
+
isSubmitting: true
|
|
106
|
+
}));
|
|
107
|
+
const done = () => {
|
|
108
|
+
this.store.setState(prev => ({
|
|
109
|
+
...prev,
|
|
110
|
+
isSubmitting: false
|
|
111
|
+
}));
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// Validate all fields
|
|
115
|
+
await this.validateAllFields('submit');
|
|
116
|
+
|
|
117
|
+
// Fields are invalid, do not submit
|
|
118
|
+
if (!this.state.isFieldsValid) {
|
|
119
|
+
var _this$options$onSubmi, _this$options;
|
|
120
|
+
done();
|
|
121
|
+
(_this$options$onSubmi = (_this$options = this.options).onSubmitInvalid) == null ? void 0 : _this$options$onSubmi.call(_this$options, this.state.values, this);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Run validation for the form
|
|
126
|
+
// await this.validateForm()
|
|
127
|
+
|
|
128
|
+
if (!this.state.isValid) {
|
|
129
|
+
var _this$options$onSubmi2, _this$options2;
|
|
130
|
+
done();
|
|
131
|
+
(_this$options$onSubmi2 = (_this$options2 = this.options).onSubmitInvalid) == null ? void 0 : _this$options$onSubmi2.call(_this$options2, this.state.values, this);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
var _this$options$onSubmi3, _this$options3;
|
|
136
|
+
// Run the submit code
|
|
137
|
+
await ((_this$options$onSubmi3 = (_this$options3 = this.options).onSubmit) == null ? void 0 : _this$options$onSubmi3.call(_this$options3, this.state.values, this));
|
|
138
|
+
this.store.batch(() => {
|
|
139
|
+
this.store.setState(prev => ({
|
|
140
|
+
...prev,
|
|
141
|
+
isSubmitted: true
|
|
142
|
+
}));
|
|
143
|
+
done();
|
|
144
|
+
});
|
|
145
|
+
} catch (err) {
|
|
146
|
+
done();
|
|
147
|
+
throw err;
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
_defineProperty(this, "getFieldValue", field => getBy(this.state.values, field));
|
|
151
|
+
_defineProperty(this, "getFieldMeta", field => {
|
|
152
|
+
return this.state.fieldMeta[field];
|
|
153
|
+
});
|
|
154
|
+
_defineProperty(this, "getFieldInfo", field => {
|
|
155
|
+
var _this$fieldInfo;
|
|
156
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
157
|
+
return (_this$fieldInfo = this.fieldInfo)[field] || (_this$fieldInfo[field] = {
|
|
158
|
+
instances: {}
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
_defineProperty(this, "setFieldMeta", (field, updater) => {
|
|
162
|
+
this.store.setState(prev => {
|
|
163
|
+
return {
|
|
164
|
+
...prev,
|
|
165
|
+
fieldMeta: {
|
|
166
|
+
...prev.fieldMeta,
|
|
167
|
+
[field]: functionalUpdate(updater, prev.fieldMeta[field])
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
_defineProperty(this, "setFieldValue", (field, updater, opts) => {
|
|
173
|
+
const touch = opts == null ? void 0 : opts.touch;
|
|
174
|
+
this.store.batch(() => {
|
|
175
|
+
if (touch) {
|
|
176
|
+
this.setFieldMeta(field, prev => ({
|
|
177
|
+
...prev,
|
|
178
|
+
isTouched: true
|
|
179
|
+
}));
|
|
180
|
+
}
|
|
181
|
+
this.store.setState(prev => {
|
|
182
|
+
return {
|
|
183
|
+
...prev,
|
|
184
|
+
values: setBy(prev.values, field, updater)
|
|
185
|
+
};
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
_defineProperty(this, "pushFieldValue", (field, value, opts) => {
|
|
190
|
+
return this.setFieldValue(field, prev => [...(Array.isArray(prev) ? prev : []), value], opts);
|
|
191
|
+
});
|
|
192
|
+
_defineProperty(this, "insertFieldValue", (field, index, value, opts) => {
|
|
193
|
+
this.setFieldValue(field, prev => {
|
|
194
|
+
return prev.map((d, i) => i === index ? value : d);
|
|
195
|
+
}, opts);
|
|
196
|
+
});
|
|
197
|
+
_defineProperty(this, "removeFieldValue", (field, index, opts) => {
|
|
198
|
+
this.setFieldValue(field, prev => {
|
|
199
|
+
return prev.filter((_d, i) => i !== index);
|
|
200
|
+
}, opts);
|
|
201
|
+
});
|
|
202
|
+
_defineProperty(this, "swapFieldValues", (field, index1, index2) => {
|
|
203
|
+
this.setFieldValue(field, prev => {
|
|
204
|
+
const prev1 = prev[index1];
|
|
205
|
+
const prev2 = prev[index2];
|
|
206
|
+
return setBy(setBy(prev, "" + index1, prev2), "" + index2, prev1);
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
this.store = new Store(getDefaultFormState({
|
|
210
|
+
...(_opts == null ? void 0 : _opts.defaultState),
|
|
211
|
+
values: (_opts$defaultValues = _opts == null ? void 0 : _opts.defaultValues) != null ? _opts$defaultValues : _opts == null ? void 0 : (_opts$defaultState = _opts.defaultState) == null ? void 0 : _opts$defaultState.values,
|
|
212
|
+
isFormValid: true
|
|
213
|
+
}), {
|
|
214
|
+
onUpdate: () => {
|
|
215
|
+
let {
|
|
216
|
+
state
|
|
217
|
+
} = this.store;
|
|
218
|
+
// Computed state
|
|
219
|
+
const fieldMetaValues = Object.values(state.fieldMeta);
|
|
220
|
+
const isFieldsValidating = fieldMetaValues.some(field => field == null ? void 0 : field.isValidating);
|
|
221
|
+
const isFieldsValid = !fieldMetaValues.some(field => field == null ? void 0 : field.error);
|
|
222
|
+
const isTouched = fieldMetaValues.some(field => field == null ? void 0 : field.isTouched);
|
|
223
|
+
const isValidating = isFieldsValidating || state.isFormValidating;
|
|
224
|
+
const isFormValid = !state.formError;
|
|
225
|
+
const isValid = isFieldsValid && isFormValid;
|
|
226
|
+
const canSubmit = state.submissionAttempts === 0 && !isTouched || !isValidating && !state.isSubmitting && isValid;
|
|
227
|
+
state = {
|
|
228
|
+
...state,
|
|
229
|
+
isFieldsValidating,
|
|
230
|
+
isFieldsValid,
|
|
231
|
+
isFormValid,
|
|
232
|
+
isValid,
|
|
233
|
+
canSubmit,
|
|
234
|
+
isTouched
|
|
235
|
+
};
|
|
236
|
+
this.store.state = state;
|
|
237
|
+
this.state = state;
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
this.state = this.store.state;
|
|
241
|
+
this.update(_opts || {});
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export { FormApi };
|
|
246
|
+
//# sourceMappingURL=FormApi.legacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormApi.legacy.js","sources":["../../src/FormApi.ts"],"sourcesContent":["import { Store } from '@tanstack/store'\n//\nimport type { DeepKeys, DeepValue, Updater } from './utils'\nimport { functionalUpdate, getBy, setBy } from './utils'\nimport type { FieldApi, FieldMeta, ValidationCause } from './FieldApi'\n\nexport interface Register {\n // FormSubmitEvent\n}\n\nexport type FormSubmitEvent = Register extends {\n FormSubmitEvent: infer E\n}\n ? E\n : Event\n\nexport type FormOptions<TData> = {\n defaultValues?: TData\n defaultState?: Partial<FormState<TData>>\n asyncDebounceMs?: number\n onMount?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onMountAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onMountAsyncDebounceMs?: number\n onChange?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onChangeAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onChangeAsyncDebounceMs?: number\n onBlur?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onBlurAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onBlurAsyncDebounceMs?: number\n onSubmit?: (values: TData, formApi: FormApi<TData>) => any | Promise<any>\n onSubmitInvalid?: (values: TData, formApi: FormApi<TData>) => void\n}\n\nexport type FieldInfo<TFormData> = {\n instances: Record<string, FieldApi<any, TFormData>>\n} & ValidationMeta\n\nexport type ValidationMeta = {\n validationCount?: number\n validationAsyncCount?: number\n validationPromise?: Promise<ValidationError>\n validationResolve?: (error: ValidationError) => void\n validationReject?: (error: unknown) => void\n}\n\nexport type ValidationError = undefined | false | null | string\n\nexport type FormState<TData> = {\n values: TData\n // Form Validation\n isFormValidating: boolean\n formValidationCount: number\n isFormValid: boolean\n formError?: ValidationError\n // Fields\n fieldMeta: Record<DeepKeys<TData>, FieldMeta>\n isFieldsValidating: boolean\n isFieldsValid: boolean\n isSubmitting: boolean\n // General\n isTouched: boolean\n isSubmitted: boolean\n isValidating: boolean\n isValid: boolean\n canSubmit: boolean\n submissionAttempts: number\n}\n\nfunction getDefaultFormState<TData>(\n defaultState: Partial<FormState<TData>>,\n): FormState<TData> {\n return {\n values: {} as any,\n fieldMeta: {} as any,\n canSubmit: true,\n isFieldsValid: false,\n isFieldsValidating: false,\n isFormValid: false,\n isFormValidating: false,\n isSubmitted: false,\n isSubmitting: false,\n isTouched: false,\n isValid: false,\n isValidating: false,\n submissionAttempts: 0,\n formValidationCount: 0,\n ...defaultState,\n }\n}\n\nexport class FormApi<TFormData> {\n // // This carries the context for nested fields\n options: FormOptions<TFormData> = {}\n store!: Store<FormState<TFormData>>\n // Do not use __state directly, as it is not reactive.\n // Please use form.useStore() utility to subscribe to state\n state!: FormState<TFormData>\n fieldInfo: Record<DeepKeys<TFormData>, FieldInfo<TFormData>> = {} as any\n fieldName?: string\n validationMeta: ValidationMeta = {}\n\n constructor(opts?: FormOptions<TFormData>) {\n this.store = new Store<FormState<TFormData>>(\n getDefaultFormState({\n ...opts?.defaultState,\n values: opts?.defaultValues ?? opts?.defaultState?.values,\n isFormValid: true,\n }),\n {\n onUpdate: () => {\n let { state } = this.store\n // Computed state\n const fieldMetaValues = Object.values(state.fieldMeta) as (\n | FieldMeta\n | undefined\n )[]\n\n const isFieldsValidating = fieldMetaValues.some(\n (field) => field?.isValidating,\n )\n\n const isFieldsValid = !fieldMetaValues.some((field) => field?.error)\n\n const isTouched = fieldMetaValues.some((field) => field?.isTouched)\n\n const isValidating = isFieldsValidating || state.isFormValidating\n const isFormValid = !state.formError\n const isValid = isFieldsValid && isFormValid\n const canSubmit =\n (state.submissionAttempts === 0 && !isTouched) ||\n (!isValidating && !state.isSubmitting && isValid)\n\n state = {\n ...state,\n isFieldsValidating,\n isFieldsValid,\n isFormValid,\n isValid,\n canSubmit,\n isTouched,\n }\n\n this.store.state = state\n this.state = state\n },\n },\n )\n\n this.state = this.store.state\n\n this.update(opts || {})\n }\n\n update = (options?: FormOptions<TFormData>) => {\n if (!options) return\n\n this.store.batch(() => {\n const shouldUpdateValues =\n options.defaultValues &&\n options.defaultValues !== this.options.defaultValues\n\n const shouldUpdateState =\n options.defaultState !== this.options.defaultState\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!shouldUpdateValues || !shouldUpdateValues) {\n return\n }\n\n this.store.setState(() =>\n getDefaultFormState(\n Object.assign(\n {},\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n shouldUpdateState ? options.defaultState : {},\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n shouldUpdateValues\n ? {\n values: options.defaultValues,\n }\n : {},\n ),\n ),\n )\n })\n\n this.options = options\n }\n\n reset = () =>\n this.store.setState(() =>\n getDefaultFormState({\n ...this.options.defaultState,\n values: this.options.defaultValues ?? this.options.defaultState?.values,\n }),\n )\n\n validateAllFields = async (cause: ValidationCause) => {\n const fieldValidationPromises: Promise<ValidationError>[] = [] as any\n\n this.store.batch(() => {\n void (Object.values(this.fieldInfo) as FieldInfo<any>[]).forEach(\n (field) => {\n Object.values(field.instances).forEach((instance) => {\n // If any fields are not touched\n if (!instance.state.meta.isTouched) {\n // Mark them as touched\n instance.setMeta((prev) => ({ ...prev, isTouched: true }))\n // Validate the field\n fieldValidationPromises.push(\n Promise.resolve().then(() => instance.validate(cause)),\n )\n }\n })\n },\n )\n })\n\n return Promise.all(fieldValidationPromises)\n }\n\n // validateForm = async () => {}\n\n handleSubmit = async (e: FormSubmitEvent) => {\n e.preventDefault()\n e.stopPropagation()\n\n // Check to see that the form and all fields have been touched\n // If they have not, touch them all and run validation\n // Run form validation\n // Submit the form\n\n this.store.setState((old) => ({\n ...old,\n // Submittion attempts mark the form as not submitted\n isSubmitted: false,\n // Count submission attempts\n submissionAttempts: old.submissionAttempts + 1,\n }))\n\n // Don't let invalid forms submit\n if (!this.state.canSubmit) return\n\n this.store.setState((d) => ({ ...d, isSubmitting: true }))\n\n const done = () => {\n this.store.setState((prev) => ({ ...prev, isSubmitting: false }))\n }\n\n // Validate all fields\n await this.validateAllFields('submit')\n\n // Fields are invalid, do not submit\n if (!this.state.isFieldsValid) {\n done()\n this.options.onSubmitInvalid?.(this.state.values, this)\n return\n }\n\n // Run validation for the form\n // await this.validateForm()\n\n if (!this.state.isValid) {\n done()\n this.options.onSubmitInvalid?.(this.state.values, this)\n return\n }\n\n try {\n // Run the submit code\n await this.options.onSubmit?.(this.state.values, this)\n\n this.store.batch(() => {\n this.store.setState((prev) => ({ ...prev, isSubmitted: true }))\n done()\n })\n } catch (err) {\n done()\n throw err\n }\n }\n\n getFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): DeepValue<TFormData, TField> => getBy(this.state.values, field)\n\n getFieldMeta = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): FieldMeta => {\n return this.state.fieldMeta[field]\n }\n\n getFieldInfo = <TField extends DeepKeys<TFormData>>(field: TField) => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return (this.fieldInfo[field] ||= {\n instances: {},\n })\n }\n\n setFieldMeta = <TField extends DeepKeys<TFormData>>(\n field: TField,\n updater: Updater<FieldMeta>,\n ) => {\n this.store.setState((prev) => {\n return {\n ...prev,\n fieldMeta: {\n ...prev.fieldMeta,\n [field]: functionalUpdate(updater, prev.fieldMeta[field]),\n },\n }\n })\n }\n\n setFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n updater: Updater<DeepValue<TFormData, TField>>,\n opts?: { touch?: boolean },\n ) => {\n const touch = opts?.touch\n\n this.store.batch(() => {\n if (touch) {\n this.setFieldMeta(field, (prev) => ({\n ...prev,\n isTouched: true,\n }))\n }\n\n this.store.setState((prev) => {\n return {\n ...prev,\n values: setBy(prev.values, field, updater),\n }\n })\n })\n }\n\n pushFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n value: DeepValue<TFormData, TField>[number],\n opts?: { touch?: boolean },\n ) => {\n return this.setFieldValue(\n field,\n (prev) => [...(Array.isArray(prev) ? prev : []), value] as any,\n opts,\n )\n }\n\n insertFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index: number,\n value: DeepValue<TFormData, TField>[number],\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n return (prev as DeepValue<TFormData, TField>[]).map((d, i) =>\n i === index ? value : d,\n ) as any\n },\n opts,\n )\n }\n\n removeFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index: number,\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n return (prev as DeepValue<TFormData, TField>[]).filter(\n (_d, i) => i !== index,\n ) as any\n },\n opts,\n )\n }\n\n swapFieldValues = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index1: number,\n index2: number,\n ) => {\n this.setFieldValue(field, (prev: any) => {\n const prev1 = prev[index1]!\n const prev2 = prev[index2]!\n return setBy(setBy(prev, `${index1}`, prev2), `${index2}`, prev1)\n })\n }\n}\n"],"names":["getDefaultFormState","defaultState","values","fieldMeta","canSubmit","isFieldsValid","isFieldsValidating","isFormValid","isFormValidating","isSubmitted","isSubmitting","isTouched","isValid","isValidating","submissionAttempts","formValidationCount","FormApi","constructor","opts","_opts$defaultValues","_opts$defaultState","_defineProperty","options","store","batch","shouldUpdateValues","defaultValues","shouldUpdateState","setState","Object","assign","_this$options$default","_this$options$default2","cause","fieldValidationPromises","fieldInfo","forEach","field","instances","instance","state","meta","setMeta","prev","push","Promise","resolve","then","validate","all","e","preventDefault","stopPropagation","old","d","done","validateAllFields","_this$options$onSubmi","_this$options","onSubmitInvalid","call","_this$options$onSubmi2","_this$options2","_this$options$onSubmi3","_this$options3","onSubmit","err","getBy","_this$fieldInfo","updater","functionalUpdate","touch","setFieldMeta","setBy","value","setFieldValue","Array","isArray","index","map","i","filter","_d","index1","index2","prev1","prev2","Store","onUpdate","fieldMetaValues","some","error","formError","update"],"mappings":"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"}
|