@tanstack/form-core 0.0.15 → 0.1.0
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/lib/FieldApi.cjs +14 -30
- package/build/lib/FieldApi.cjs.map +1 -1
- package/build/lib/FieldApi.d.ts +2 -20
- package/build/lib/FieldApi.d.ts.map +1 -1
- package/build/lib/FieldApi.js +14 -30
- package/build/lib/FieldApi.js.map +1 -1
- package/build/lib/FieldApi.legacy.cjs +14 -30
- package/build/lib/FieldApi.legacy.cjs.map +1 -1
- package/build/lib/FieldApi.legacy.js +14 -30
- package/build/lib/FieldApi.legacy.js.map +1 -1
- package/build/lib/FormApi.cjs +2 -6
- package/build/lib/FormApi.cjs.map +1 -1
- package/build/lib/FormApi.d.ts +1 -6
- package/build/lib/FormApi.d.ts.map +1 -1
- package/build/lib/FormApi.js +2 -6
- package/build/lib/FormApi.js.map +1 -1
- package/build/lib/FormApi.legacy.cjs +2 -6
- package/build/lib/FormApi.legacy.cjs.map +1 -1
- package/build/lib/FormApi.legacy.js +2 -6
- package/build/lib/FormApi.legacy.js.map +1 -1
- package/package.json +1 -1
- package/src/FieldApi.ts +9 -57
- package/src/FormApi.ts +2 -17
|
@@ -236,37 +236,21 @@ class FieldApi {
|
|
|
236
236
|
// No error? Attempt async validation
|
|
237
237
|
return this.validateAsync(value, cause);
|
|
238
238
|
});
|
|
239
|
-
_defineProperty(this, "
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
onChange: value => {
|
|
244
|
-
this.setValue(value);
|
|
245
|
-
props.onChange == null ? void 0 : props.onChange(value);
|
|
246
|
-
},
|
|
247
|
-
onBlur: e => {
|
|
248
|
-
const prevTouched = this.state.meta.isTouched;
|
|
249
|
-
this.setMeta(prev => ({
|
|
250
|
-
...prev,
|
|
251
|
-
isTouched: true
|
|
252
|
-
}));
|
|
253
|
-
if (!prevTouched) {
|
|
254
|
-
this.validate('change');
|
|
255
|
-
}
|
|
256
|
-
this.validate('blur');
|
|
257
|
-
}
|
|
258
|
-
};
|
|
239
|
+
_defineProperty(this, "handleChange", updater => {
|
|
240
|
+
this.setValue(updater, {
|
|
241
|
+
touch: true
|
|
242
|
+
});
|
|
259
243
|
});
|
|
260
|
-
_defineProperty(this, "
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
244
|
+
_defineProperty(this, "handleBlur", () => {
|
|
245
|
+
const prevTouched = this.state.meta.isTouched;
|
|
246
|
+
if (!prevTouched) {
|
|
247
|
+
this.setMeta(prev => ({
|
|
248
|
+
...prev,
|
|
249
|
+
isTouched: true
|
|
250
|
+
}));
|
|
251
|
+
this.validate('change');
|
|
252
|
+
}
|
|
253
|
+
this.validate('blur');
|
|
270
254
|
});
|
|
271
255
|
this.form = _opts.form;
|
|
272
256
|
this.uid = uid++;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldApi.legacy.js","sources":["../../src/FieldApi.ts"],"sourcesContent":["import type { DeepKeys, DeepValue, Updater } from './utils'\nimport type { FormApi, ValidationError } from './FormApi'\nimport { Store } from '@tanstack/store'\n\nexport type ValidationCause = 'change' | 'blur' | 'submit'\n\ntype ValidateFn<TData, TFormData> = (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n) => ValidationError\n\ntype ValidateAsyncFn<TData, TFormData> = (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n) => ValidationError | Promise<ValidationError>\n\nexport interface FieldOptions<\n _TData,\n TFormData,\n /**\n * This allows us to restrict the name to only be a valid field name while\n * also assigning it to a generic\n */\n TName = unknown extends TFormData ? string : DeepKeys<TFormData>,\n /**\n * If TData is unknown, we can use the TName generic to determine the type\n */\n TData = unknown extends _TData ? DeepValue<TFormData, TName> : _TData,\n> {\n name: TName\n index?: TData extends any[] ? number : never\n defaultValue?: TData\n asyncDebounceMs?: number\n asyncAlways?: boolean\n onMount?: (formApi: FieldApi<TData, TFormData>) => void\n onChange?: ValidateFn<TData, TFormData>\n onChangeAsync?: ValidateAsyncFn<TData, TFormData>\n onChangeAsyncDebounceMs?: number\n onBlur?: ValidateFn<TData, TFormData>\n onBlurAsync?: ValidateAsyncFn<TData, TFormData>\n onBlurAsyncDebounceMs?: number\n onSubmitAsync?: ValidateAsyncFn<TData, TFormData>\n defaultMeta?: Partial<FieldMeta>\n}\n\nexport type FieldApiOptions<TData, TFormData> = FieldOptions<\n TData,\n TFormData\n> & {\n form: FormApi<TFormData>\n}\n\nexport type FieldMeta = {\n isTouched: boolean\n touchedError?: ValidationError\n error?: ValidationError\n isValidating: boolean\n}\n\nexport type UserChangeProps<TData> = {\n onChange?: (updater: Updater<TData>) => void\n onBlur?: (event: any) => void\n}\n\nexport type UserInputProps = {\n onChange?: (event: any) => void\n onBlur?: (event: any) => void\n}\n\nexport type ChangeProps<TData> = {\n value: TData\n onChange: (value: TData) => void\n onBlur: (event: any) => void\n}\n\nexport type InputProps<T> = {\n value: T\n onChange: (event: any) => void\n onBlur: (event: any) => void\n}\n\nlet uid = 0\n\nexport type FieldState<TData> = {\n value: TData\n meta: FieldMeta\n}\n\n/**\n * TData may not be known at the time of FieldApi construction, so we need to\n * use a conditional type to determine if TData is known or not.\n *\n * If TData is not known, we use the TFormData type to determine the type of\n * the field value based on the field name.\n */\ntype GetTData<Name, TData, TFormData> = unknown extends TData\n ? DeepValue<TFormData, Name>\n : TData\n\nexport class FieldApi<TData, TFormData> {\n uid: number\n form: FormApi<TFormData>\n name!: DeepKeys<TFormData>\n /**\n * This is a hack that allows us to use `GetTData` without calling it everywhere\n *\n * Unfortunately this hack appears to be needed alongside the `TName` hack\n * further up in this file. This properly types all of the internal methods,\n * while the `TName` hack types the options properly\n */\n _tdata!: GetTData<typeof this.name, TData, TFormData>\n store!: Store<FieldState<typeof this._tdata>>\n state!: FieldState<typeof this._tdata>\n prevState!: FieldState<typeof this._tdata>\n options: FieldOptions<typeof this._tdata, TFormData> = {} as any\n\n constructor(opts: FieldApiOptions<TData, TFormData>) {\n this.form = opts.form\n this.uid = uid++\n // Support field prefixing from FieldScope\n // let fieldPrefix = ''\n // if (this.form.fieldName) {\n // fieldPrefix = `${this.form.fieldName}.`\n // }\n\n this.name = opts.name as any\n\n this.store = new Store<FieldState<typeof this._tdata>>(\n {\n value: this.getValue(),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n meta: this._getMeta() ?? {\n isValidating: false,\n isTouched: false,\n ...opts.defaultMeta,\n },\n },\n {\n onUpdate: () => {\n const state = this.store.state\n\n state.meta.touchedError = state.meta.isTouched\n ? state.meta.error\n : undefined\n\n this.prevState = state\n this.state = state\n },\n },\n )\n\n this.state = this.store.state\n this.prevState = this.state\n this.update(opts as never)\n }\n\n mount = () => {\n const info = this.getInfo()\n info.instances[this.uid] = this\n\n const unsubscribe = this.form.store.subscribe(() => {\n this.store.batch(() => {\n const nextValue = this.getValue()\n const nextMeta = this.getMeta()\n\n if (nextValue !== this.state.value) {\n this.store.setState((prev) => ({ ...prev, value: nextValue }))\n }\n\n if (nextMeta !== this.state.meta) {\n this.store.setState((prev) => ({ ...prev, meta: nextMeta }))\n }\n })\n })\n\n this.options.onMount?.(this as never)\n\n return () => {\n unsubscribe()\n delete info.instances[this.uid]\n if (!Object.keys(info.instances).length) {\n delete this.form.fieldInfo[this.name]\n }\n }\n }\n\n update = (opts: FieldApiOptions<typeof this._tdata, TFormData>) => {\n this.options = {\n asyncDebounceMs: this.form.options.asyncDebounceMs ?? 0,\n onChangeAsyncDebounceMs: this.form.options.onChangeAsyncDebounceMs ?? 0,\n onBlurAsyncDebounceMs: this.form.options.onBlurAsyncDebounceMs ?? 0,\n ...opts,\n } as never\n\n // Default Value\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.state.value === undefined) {\n if (this.options.defaultValue !== undefined) {\n this.setValue(this.options.defaultValue as never)\n } else if (\n opts.form.options.defaultValues?.[\n this.options.name as keyof TFormData\n ] !== undefined\n ) {\n this.setValue(\n opts.form.options.defaultValues[\n this.options.name as keyof TFormData\n ] as never,\n )\n }\n }\n\n // Default Meta\n if (this._getMeta() === undefined) {\n this.setMeta(this.state.meta)\n }\n }\n\n getValue = (): typeof this._tdata => {\n return this.form.getFieldValue(this.name)\n }\n\n setValue = (\n updater: Updater<typeof this._tdata>,\n options?: { touch?: boolean; notify?: boolean },\n ) => {\n this.form.setFieldValue(this.name, updater as never, options)\n this.validate('change', this.state.value)\n }\n\n _getMeta = () => this.form.getFieldMeta(this.name)\n getMeta = () =>\n this._getMeta() ??\n ({\n isValidating: false,\n isTouched: false,\n ...this.options.defaultMeta,\n } as FieldMeta)\n\n setMeta = (updater: Updater<FieldMeta>) =>\n this.form.setFieldMeta(this.name, updater)\n\n getInfo = () => this.form.getFieldInfo(this.name)\n\n pushValue = (\n value: typeof this._tdata extends any[]\n ? (typeof this._tdata)[number]\n : never,\n ) => this.form.pushFieldValue(this.name, value as any)\n\n insertValue = (\n index: number,\n value: typeof this._tdata extends any[]\n ? (typeof this._tdata)[number]\n : never,\n ) => this.form.insertFieldValue(this.name, index, value as any)\n\n removeValue = (index: number) => this.form.removeFieldValue(this.name, index)\n\n swapValues = (aIndex: number, bIndex: number) =>\n this.form.swapFieldValues(this.name, aIndex, bIndex)\n\n getSubField = <TName extends DeepKeys<typeof this._tdata>>(name: TName) =>\n new FieldApi<DeepValue<typeof this._tdata, TName>, TFormData>({\n name: `${this.name}.${name}` as never,\n form: this.form,\n })\n\n validateSync = (value = this.state.value, cause: ValidationCause) => {\n const { onChange, onBlur } = this.options\n const validate =\n cause === 'submit' ? undefined : cause === 'change' ? onChange : onBlur\n\n if (!validate) return\n\n // Use the validationCount for all field instances to\n // track freshness of the validation\n const validationCount = (this.getInfo().validationCount || 0) + 1\n this.getInfo().validationCount = validationCount\n const error = normalizeError(validate(value as never, this as never))\n\n if (this.state.meta.error !== error) {\n this.setMeta((prev) => ({\n ...prev,\n error,\n }))\n }\n\n // If a sync error is encountered, cancel any async validation\n if (this.state.meta.error) {\n this.cancelValidateAsync()\n }\n }\n\n #leaseValidateAsync = () => {\n const count = (this.getInfo().validationAsyncCount || 0) + 1\n this.getInfo().validationAsyncCount = count\n return count\n }\n\n cancelValidateAsync = () => {\n // Lease a new validation count to ignore any pending validations\n this.#leaseValidateAsync()\n // Cancel any pending validation state\n this.setMeta((prev) => ({\n ...prev,\n isValidating: false,\n }))\n }\n\n validateAsync = async (value = this.state.value, cause: ValidationCause) => {\n const {\n onChangeAsync,\n onBlurAsync,\n onSubmitAsync,\n asyncDebounceMs,\n onBlurAsyncDebounceMs,\n onChangeAsyncDebounceMs,\n } = this.options\n\n const validate =\n cause === 'change'\n ? onChangeAsync\n : cause === 'submit'\n ? onSubmitAsync\n : onBlurAsync\n\n if (!validate) return\n\n const debounceMs =\n cause === 'submit'\n ? 0\n : (cause === 'change'\n ? onChangeAsyncDebounceMs\n : onBlurAsyncDebounceMs) ??\n asyncDebounceMs ??\n 500\n\n if (this.state.meta.isValidating !== true)\n this.setMeta((prev) => ({ ...prev, isValidating: true }))\n\n // Use the validationCount for all field instances to\n // track freshness of the validation\n const validationAsyncCount = this.#leaseValidateAsync()\n\n const checkLatest = () =>\n validationAsyncCount === this.getInfo().validationAsyncCount\n\n if (!this.getInfo().validationPromise) {\n this.getInfo().validationPromise = new Promise((resolve, reject) => {\n this.getInfo().validationResolve = resolve\n this.getInfo().validationReject = reject\n })\n }\n\n if (debounceMs > 0) {\n await new Promise((r) => setTimeout(r, debounceMs))\n }\n\n // Only kick off validation if this validation is the latest attempt\n if (checkLatest()) {\n try {\n const rawError = await validate(value as never, this as never)\n\n if (checkLatest()) {\n const error = normalizeError(rawError)\n this.setMeta((prev) => ({\n ...prev,\n isValidating: false,\n error,\n }))\n this.getInfo().validationResolve?.(error)\n }\n } catch (error) {\n if (checkLatest()) {\n this.getInfo().validationReject?.(error)\n throw error\n }\n } finally {\n if (checkLatest()) {\n this.setMeta((prev) => ({ ...prev, isValidating: false }))\n delete this.getInfo().validationPromise\n }\n }\n }\n\n // Always return the latest validation promise to the caller\n return this.getInfo().validationPromise\n }\n\n validate = (\n cause: ValidationCause,\n value?: typeof this._tdata,\n ): ValidationError | Promise<ValidationError> => {\n // If the field is pristine and validatePristine is false, do not validate\n if (!this.state.meta.isTouched) return\n\n // Attempt to sync validate first\n this.validateSync(value, cause)\n\n // If there is an error, return it, do not attempt async validation\n if (this.state.meta.error) {\n if (!this.options.asyncAlways) {\n return this.state.meta.error\n }\n }\n\n // No error? Attempt async validation\n return this.validateAsync(value, cause)\n }\n\n getChangeProps = <T extends UserChangeProps<any>>(\n props: T = {} as T,\n ): ChangeProps<typeof this._tdata> &\n Omit<T, keyof ChangeProps<typeof this._tdata>> => {\n return {\n ...props,\n value: this.state.value,\n onChange: (value) => {\n this.setValue(value as never)\n props.onChange?.(value)\n },\n onBlur: (e) => {\n const prevTouched = this.state.meta.isTouched\n this.setMeta((prev) => ({ ...prev, isTouched: true }))\n if (!prevTouched) {\n this.validate('change')\n }\n this.validate('blur')\n },\n } as ChangeProps<typeof this._tdata> &\n Omit<T, keyof ChangeProps<typeof this._tdata>>\n }\n\n getInputProps = <T extends UserInputProps>(\n props: T = {} as T,\n ): InputProps<typeof this._tdata> &\n Omit<T, keyof InputProps<typeof this._tdata>> => {\n return {\n ...props,\n value: this.state.value,\n onChange: (e) => {\n this.setValue(e.target.value)\n props.onChange?.(e.target.value)\n },\n onBlur: this.getChangeProps(props).onBlur,\n } as InputProps<typeof this._tdata> &\n Omit<T, keyof InputProps<typeof this._tdata>>\n }\n}\n\nfunction normalizeError(rawError?: ValidationError) {\n if (rawError) {\n if (typeof rawError !== 'string') {\n return 'Invalid Form Values'\n }\n\n return rawError\n }\n\n return undefined\n}\n"],"names":["uid","_leaseValidateAsync","WeakMap","FieldApi","constructor","opts","_this$_getMeta2","_defineProperty","_this$options$onMount","_this$options","info","getInfo","instances","unsubscribe","form","store","subscribe","batch","nextValue","getValue","nextMeta","getMeta","state","value","setState","prev","meta","options","onMount","call","Object","keys","length","fieldInfo","name","_this$form$options$as","_this$form$options$on","_this$form$options$on2","asyncDebounceMs","onChangeAsyncDebounceMs","onBlurAsyncDebounceMs","undefined","_opts$form$options$de","defaultValue","setValue","defaultValues","_getMeta","setMeta","getFieldValue","updater","setFieldValue","validate","getFieldMeta","_this$_getMeta","isValidating","isTouched","defaultMeta","setFieldMeta","getFieldInfo","pushFieldValue","index","insertFieldValue","removeFieldValue","aIndex","bIndex","swapFieldValues","cause","onChange","onBlur","validationCount","error","normalizeError","cancelValidateAsync","_classPrivateFieldInitSpec","writable","count","validationAsyncCount","_classPrivateFieldGet","_ref","_ref2","onChangeAsync","onBlurAsync","onSubmitAsync","debounceMs","checkLatest","validationPromise","Promise","resolve","reject","validationResolve","validationReject","r","setTimeout","rawError","_this$getInfo$validat","_this$getInfo","_this$getInfo$validat2","_this$getInfo2","validateSync","asyncAlways","validateAsync","props","e","prevTouched","target","getChangeProps","Store","onUpdate","touchedError","prevState","update"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FieldApi.legacy.js","sources":["../../src/FieldApi.ts"],"sourcesContent":["import type { DeepKeys, DeepValue, Updater } from './utils'\nimport type { FormApi, ValidationError } from './FormApi'\nimport { Store } from '@tanstack/store'\n\nexport type ValidationCause = 'change' | 'blur' | 'submit'\n\ntype ValidateFn<TData, TFormData> = (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n) => ValidationError\n\ntype ValidateAsyncFn<TData, TFormData> = (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n) => ValidationError | Promise<ValidationError>\n\nexport interface FieldOptions<\n _TData,\n TFormData,\n /**\n * This allows us to restrict the name to only be a valid field name while\n * also assigning it to a generic\n */\n TName = unknown extends TFormData ? string : DeepKeys<TFormData>,\n /**\n * If TData is unknown, we can use the TName generic to determine the type\n */\n TData = unknown extends _TData ? DeepValue<TFormData, TName> : _TData,\n> {\n name: TName\n index?: TData extends any[] ? number : never\n defaultValue?: TData\n asyncDebounceMs?: number\n asyncAlways?: boolean\n onMount?: (formApi: FieldApi<TData, TFormData>) => void\n onChange?: ValidateFn<TData, TFormData>\n onChangeAsync?: ValidateAsyncFn<TData, TFormData>\n onChangeAsyncDebounceMs?: number\n onBlur?: ValidateFn<TData, TFormData>\n onBlurAsync?: ValidateAsyncFn<TData, TFormData>\n onBlurAsyncDebounceMs?: number\n onSubmitAsync?: ValidateAsyncFn<TData, TFormData>\n defaultMeta?: Partial<FieldMeta>\n}\n\nexport type FieldApiOptions<TData, TFormData> = FieldOptions<\n TData,\n TFormData\n> & {\n form: FormApi<TFormData>\n}\n\nexport type FieldMeta = {\n isTouched: boolean\n touchedError?: ValidationError\n error?: ValidationError\n isValidating: boolean\n}\n\nlet uid = 0\n\nexport type FieldState<TData> = {\n value: TData\n meta: FieldMeta\n}\n\n/**\n * TData may not be known at the time of FieldApi construction, so we need to\n * use a conditional type to determine if TData is known or not.\n *\n * If TData is not known, we use the TFormData type to determine the type of\n * the field value based on the field name.\n */\ntype GetTData<Name, TData, TFormData> = unknown extends TData\n ? DeepValue<TFormData, Name>\n : TData\n\nexport class FieldApi<TData, TFormData> {\n uid: number\n form: FormApi<TFormData>\n name!: DeepKeys<TFormData>\n /**\n * This is a hack that allows us to use `GetTData` without calling it everywhere\n *\n * Unfortunately this hack appears to be needed alongside the `TName` hack\n * further up in this file. This properly types all of the internal methods,\n * while the `TName` hack types the options properly\n */\n _tdata!: GetTData<typeof this.name, TData, TFormData>\n store!: Store<FieldState<typeof this._tdata>>\n state!: FieldState<typeof this._tdata>\n prevState!: FieldState<typeof this._tdata>\n options: FieldOptions<typeof this._tdata, TFormData> = {} as any\n\n constructor(opts: FieldApiOptions<TData, TFormData>) {\n this.form = opts.form\n this.uid = uid++\n // Support field prefixing from FieldScope\n // let fieldPrefix = ''\n // if (this.form.fieldName) {\n // fieldPrefix = `${this.form.fieldName}.`\n // }\n\n this.name = opts.name as any\n\n this.store = new Store<FieldState<typeof this._tdata>>(\n {\n value: this.getValue(),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n meta: this._getMeta() ?? {\n isValidating: false,\n isTouched: false,\n ...opts.defaultMeta,\n },\n },\n {\n onUpdate: () => {\n const state = this.store.state\n\n state.meta.touchedError = state.meta.isTouched\n ? state.meta.error\n : undefined\n\n this.prevState = state\n this.state = state\n },\n },\n )\n\n this.state = this.store.state\n this.prevState = this.state\n this.update(opts as never)\n }\n\n mount = () => {\n const info = this.getInfo()\n info.instances[this.uid] = this\n\n const unsubscribe = this.form.store.subscribe(() => {\n this.store.batch(() => {\n const nextValue = this.getValue()\n const nextMeta = this.getMeta()\n\n if (nextValue !== this.state.value) {\n this.store.setState((prev) => ({ ...prev, value: nextValue }))\n }\n\n if (nextMeta !== this.state.meta) {\n this.store.setState((prev) => ({ ...prev, meta: nextMeta }))\n }\n })\n })\n\n this.options.onMount?.(this as never)\n\n return () => {\n unsubscribe()\n delete info.instances[this.uid]\n if (!Object.keys(info.instances).length) {\n delete this.form.fieldInfo[this.name]\n }\n }\n }\n\n update = (opts: FieldApiOptions<typeof this._tdata, TFormData>) => {\n this.options = {\n asyncDebounceMs: this.form.options.asyncDebounceMs ?? 0,\n onChangeAsyncDebounceMs: this.form.options.onChangeAsyncDebounceMs ?? 0,\n onBlurAsyncDebounceMs: this.form.options.onBlurAsyncDebounceMs ?? 0,\n ...opts,\n } as never\n\n // Default Value\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.state.value === undefined) {\n if (this.options.defaultValue !== undefined) {\n this.setValue(this.options.defaultValue as never)\n } else if (\n opts.form.options.defaultValues?.[\n this.options.name as keyof TFormData\n ] !== undefined\n ) {\n this.setValue(\n opts.form.options.defaultValues[\n this.options.name as keyof TFormData\n ] as never,\n )\n }\n }\n\n // Default Meta\n if (this._getMeta() === undefined) {\n this.setMeta(this.state.meta)\n }\n }\n\n getValue = (): typeof this._tdata => {\n return this.form.getFieldValue(this.name)\n }\n\n setValue = (\n updater: Updater<typeof this._tdata>,\n options?: { touch?: boolean; notify?: boolean },\n ) => {\n this.form.setFieldValue(this.name, updater as never, options)\n this.validate('change', this.state.value)\n }\n\n _getMeta = () => this.form.getFieldMeta(this.name)\n getMeta = () =>\n this._getMeta() ??\n ({\n isValidating: false,\n isTouched: false,\n ...this.options.defaultMeta,\n } as FieldMeta)\n\n setMeta = (updater: Updater<FieldMeta>) =>\n this.form.setFieldMeta(this.name, updater)\n\n getInfo = () => this.form.getFieldInfo(this.name)\n\n pushValue = (\n value: typeof this._tdata extends any[]\n ? (typeof this._tdata)[number]\n : never,\n ) => this.form.pushFieldValue(this.name, value as any)\n\n insertValue = (\n index: number,\n value: typeof this._tdata extends any[]\n ? (typeof this._tdata)[number]\n : never,\n ) => this.form.insertFieldValue(this.name, index, value as any)\n\n removeValue = (index: number) => this.form.removeFieldValue(this.name, index)\n\n swapValues = (aIndex: number, bIndex: number) =>\n this.form.swapFieldValues(this.name, aIndex, bIndex)\n\n getSubField = <TName extends DeepKeys<typeof this._tdata>>(name: TName) =>\n new FieldApi<DeepValue<typeof this._tdata, TName>, TFormData>({\n name: `${this.name}.${name}` as never,\n form: this.form,\n })\n\n validateSync = (value = this.state.value, cause: ValidationCause) => {\n const { onChange, onBlur } = this.options\n const validate =\n cause === 'submit' ? undefined : cause === 'change' ? onChange : onBlur\n\n if (!validate) return\n\n // Use the validationCount for all field instances to\n // track freshness of the validation\n const validationCount = (this.getInfo().validationCount || 0) + 1\n this.getInfo().validationCount = validationCount\n const error = normalizeError(validate(value as never, this as never))\n\n if (this.state.meta.error !== error) {\n this.setMeta((prev) => ({\n ...prev,\n error,\n }))\n }\n\n // If a sync error is encountered, cancel any async validation\n if (this.state.meta.error) {\n this.cancelValidateAsync()\n }\n }\n\n #leaseValidateAsync = () => {\n const count = (this.getInfo().validationAsyncCount || 0) + 1\n this.getInfo().validationAsyncCount = count\n return count\n }\n\n cancelValidateAsync = () => {\n // Lease a new validation count to ignore any pending validations\n this.#leaseValidateAsync()\n // Cancel any pending validation state\n this.setMeta((prev) => ({\n ...prev,\n isValidating: false,\n }))\n }\n\n validateAsync = async (value = this.state.value, cause: ValidationCause) => {\n const {\n onChangeAsync,\n onBlurAsync,\n onSubmitAsync,\n asyncDebounceMs,\n onBlurAsyncDebounceMs,\n onChangeAsyncDebounceMs,\n } = this.options\n\n const validate =\n cause === 'change'\n ? onChangeAsync\n : cause === 'submit'\n ? onSubmitAsync\n : onBlurAsync\n\n if (!validate) return\n\n const debounceMs =\n cause === 'submit'\n ? 0\n : (cause === 'change'\n ? onChangeAsyncDebounceMs\n : onBlurAsyncDebounceMs) ??\n asyncDebounceMs ??\n 500\n\n if (this.state.meta.isValidating !== true)\n this.setMeta((prev) => ({ ...prev, isValidating: true }))\n\n // Use the validationCount for all field instances to\n // track freshness of the validation\n const validationAsyncCount = this.#leaseValidateAsync()\n\n const checkLatest = () =>\n validationAsyncCount === this.getInfo().validationAsyncCount\n\n if (!this.getInfo().validationPromise) {\n this.getInfo().validationPromise = new Promise((resolve, reject) => {\n this.getInfo().validationResolve = resolve\n this.getInfo().validationReject = reject\n })\n }\n\n if (debounceMs > 0) {\n await new Promise((r) => setTimeout(r, debounceMs))\n }\n\n // Only kick off validation if this validation is the latest attempt\n if (checkLatest()) {\n try {\n const rawError = await validate(value as never, this as never)\n\n if (checkLatest()) {\n const error = normalizeError(rawError)\n this.setMeta((prev) => ({\n ...prev,\n isValidating: false,\n error,\n }))\n this.getInfo().validationResolve?.(error)\n }\n } catch (error) {\n if (checkLatest()) {\n this.getInfo().validationReject?.(error)\n throw error\n }\n } finally {\n if (checkLatest()) {\n this.setMeta((prev) => ({ ...prev, isValidating: false }))\n delete this.getInfo().validationPromise\n }\n }\n }\n\n // Always return the latest validation promise to the caller\n return this.getInfo().validationPromise\n }\n\n validate = (\n cause: ValidationCause,\n value?: typeof this._tdata,\n ): ValidationError | Promise<ValidationError> => {\n // If the field is pristine and validatePristine is false, do not validate\n if (!this.state.meta.isTouched) return\n\n // Attempt to sync validate first\n this.validateSync(value, cause)\n\n // If there is an error, return it, do not attempt async validation\n if (this.state.meta.error) {\n if (!this.options.asyncAlways) {\n return this.state.meta.error\n }\n }\n\n // No error? Attempt async validation\n return this.validateAsync(value, cause)\n }\n\n handleChange = (updater: Updater<typeof this._tdata>) => {\n this.setValue(updater, { touch: true })\n }\n\n handleBlur = () => {\n const prevTouched = this.state.meta.isTouched\n if (!prevTouched) {\n this.setMeta((prev) => ({ ...prev, isTouched: true }))\n this.validate('change')\n }\n this.validate('blur')\n }\n}\n\nfunction normalizeError(rawError?: ValidationError) {\n if (rawError) {\n if (typeof rawError !== 'string') {\n return 'Invalid Form Values'\n }\n\n return rawError\n }\n\n return undefined\n}\n"],"names":["uid","_leaseValidateAsync","WeakMap","FieldApi","constructor","opts","_this$_getMeta2","_defineProperty","_this$options$onMount","_this$options","info","getInfo","instances","unsubscribe","form","store","subscribe","batch","nextValue","getValue","nextMeta","getMeta","state","value","setState","prev","meta","options","onMount","call","Object","keys","length","fieldInfo","name","_this$form$options$as","_this$form$options$on","_this$form$options$on2","asyncDebounceMs","onChangeAsyncDebounceMs","onBlurAsyncDebounceMs","undefined","_opts$form$options$de","defaultValue","setValue","defaultValues","_getMeta","setMeta","getFieldValue","updater","setFieldValue","validate","getFieldMeta","_this$_getMeta","isValidating","isTouched","defaultMeta","setFieldMeta","getFieldInfo","pushFieldValue","index","insertFieldValue","removeFieldValue","aIndex","bIndex","swapFieldValues","cause","onChange","onBlur","validationCount","error","normalizeError","cancelValidateAsync","_classPrivateFieldInitSpec","writable","count","validationAsyncCount","_classPrivateFieldGet","_ref","_ref2","onChangeAsync","onBlurAsync","onSubmitAsync","debounceMs","checkLatest","validationPromise","Promise","resolve","reject","validationResolve","validationReject","r","setTimeout","rawError","_this$getInfo$validat","_this$getInfo","_this$getInfo$validat2","_this$getInfo2","validateSync","asyncAlways","validateAsync","touch","prevTouched","Store","onUpdate","touchedError","prevState","update"],"mappings":"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"}
|
package/build/lib/FormApi.cjs
CHANGED
|
@@ -77,11 +77,7 @@ class FormApi {
|
|
|
77
77
|
});
|
|
78
78
|
return Promise.all(fieldValidationPromises);
|
|
79
79
|
});
|
|
80
|
-
|
|
81
|
-
_rollupPluginBabelHelpers.defineProperty(this, "handleSubmit", async e => {
|
|
82
|
-
e.preventDefault();
|
|
83
|
-
e.stopPropagation();
|
|
84
|
-
|
|
80
|
+
_rollupPluginBabelHelpers.defineProperty(this, "handleSubmit", async () => {
|
|
85
81
|
// Check to see that the form and all fields have been touched
|
|
86
82
|
// If they have not, touch them all and run validation
|
|
87
83
|
// Run form validation
|
|
@@ -89,7 +85,7 @@ class FormApi {
|
|
|
89
85
|
|
|
90
86
|
this.store.setState(old => ({
|
|
91
87
|
...old,
|
|
92
|
-
//
|
|
88
|
+
// Submission attempts mark the form as not submitted
|
|
93
89
|
isSubmitted: false,
|
|
94
90
|
// Count submission attempts
|
|
95
91
|
submissionAttempts: old.submissionAttempts + 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormApi.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 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 | undefined => {\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,wCAAA,CAAA,IAAA,EAAA,SAAA,EACkC,EAAE,CAAA,CAAA;IAAAA,wCAAA,CAAA,IAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEpC;AACA;IAAAA,wCAAA,CAAA,IAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA,CAAA;IAAAA,wCAAA,CAAA,IAAA,EAAA,WAAA,EAE+D,EAAE,CAAA,CAAA;IAAAA,wCAAA,CAAA,IAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;IAAAA,wCAAA,CAAA,IAAA,EAAA,gBAAA,EAEhC,EAAE,CAAA,CAAA;IAAAA,wCAAA,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,QAAA,IAAI,CAACsB,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,wCAAA,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,wCAAA,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,wCAAA,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,wCAAA,CAGCgB,IAAAA,EAAAA,eAAAA,EAAAA,KAAa,IACoB8B,WAAK,CAAC,IAAI,CAAC3B,KAAK,CAACtC,MAAM,EAAEmC,KAAK,CAAC,CAAA,CAAA;IAAAhB,wCAAA,CAAA,IAAA,EAAA,cAAA,EAGhEgB,KAAa,IACa;AAC1B,MAAA,OAAO,IAAI,CAACG,KAAK,CAACrC,SAAS,CAACkC,KAAK,CAAC,CAAA;KACnC,CAAA,CAAA;IAAAhB,wCAAA,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,wCAAA,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,sBAAgB,CAACD,OAAO,EAAE1B,IAAI,CAACxC,SAAS,CAACkC,KAAK,CAAC,CAAA;AAC1D,WAAA;SACD,CAAA;AACH,OAAC,CAAC,CAAA;KACH,CAAA,CAAA;AAAAhB,IAAAA,wCAAA,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,WAAK,CAAC9B,IAAI,CAACzC,MAAM,EAAEmC,KAAK,EAAEgC,OAAO,CAAA;WAC1C,CAAA;AACH,SAAC,CAAC,CAAA;AACJ,OAAC,CAAC,CAAA;KACH,CAAA,CAAA;AAAAhD,IAAAA,wCAAA,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,wCAAA,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,wCAAA,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,wCAAA,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,WAAK,CAACA,WAAK,CAAC9B,IAAI,EAAKwC,EAAAA,GAAAA,MAAM,EAAIG,KAAK,CAAC,EAAA,EAAA,GAAKF,MAAM,EAAIC,KAAK,CAAC,CAAA;AACnE,OAAC,CAAC,CAAA;KACH,CAAA,CAAA;AA9RC,IAAA,IAAI,CAAC9D,KAAK,GAAG,IAAIgE,WAAK,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;AA8OF;;;;"}
|
|
1
|
+
{"version":3,"file":"FormApi.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 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 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 handleSubmit = async () => {\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 // Submission 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 | undefined => {\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","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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"}
|
package/build/lib/FormApi.d.ts
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import { Store } from '@tanstack/store';
|
|
2
2
|
import type { DeepKeys, DeepValue, Updater } from './utils';
|
|
3
3
|
import type { FieldApi, FieldMeta, ValidationCause } from './FieldApi';
|
|
4
|
-
export interface Register {
|
|
5
|
-
}
|
|
6
|
-
export type FormSubmitEvent = Register extends {
|
|
7
|
-
FormSubmitEvent: infer E;
|
|
8
|
-
} ? E : Event;
|
|
9
4
|
export type FormOptions<TData> = {
|
|
10
5
|
defaultValues?: TData;
|
|
11
6
|
defaultState?: Partial<FormState<TData>>;
|
|
@@ -61,7 +56,7 @@ export declare class FormApi<TFormData> {
|
|
|
61
56
|
update: (options?: FormOptions<TFormData>) => void;
|
|
62
57
|
reset: () => void;
|
|
63
58
|
validateAllFields: (cause: ValidationCause) => Promise<ValidationError[]>;
|
|
64
|
-
handleSubmit: (
|
|
59
|
+
handleSubmit: () => Promise<void>;
|
|
65
60
|
getFieldValue: <TField extends DeepKeys<TFormData>>(field: TField) => DeepValue<TFormData, TField>;
|
|
66
61
|
getFieldMeta: <TField extends DeepKeys<TFormData>>(field: TField) => FieldMeta | undefined;
|
|
67
62
|
getFieldInfo: <TField extends DeepKeys<TFormData>>(field: TField) => Record<DeepKeys<TFormData>, FieldInfo<TFormData>>[TField];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormApi.d.ts","sourceRoot":"","sources":["../../src/FormApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAE3D,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEtE,MAAM,
|
|
1
|
+
{"version":3,"file":"FormApi.d.ts","sourceRoot":"","sources":["../../src/FormApi.ts"],"names":[],"mappings":"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"}
|
package/build/lib/FormApi.js
CHANGED
|
@@ -75,11 +75,7 @@ class FormApi {
|
|
|
75
75
|
});
|
|
76
76
|
return Promise.all(fieldValidationPromises);
|
|
77
77
|
});
|
|
78
|
-
|
|
79
|
-
_defineProperty(this, "handleSubmit", async e => {
|
|
80
|
-
e.preventDefault();
|
|
81
|
-
e.stopPropagation();
|
|
82
|
-
|
|
78
|
+
_defineProperty(this, "handleSubmit", async () => {
|
|
83
79
|
// Check to see that the form and all fields have been touched
|
|
84
80
|
// If they have not, touch them all and run validation
|
|
85
81
|
// Run form validation
|
|
@@ -87,7 +83,7 @@ class FormApi {
|
|
|
87
83
|
|
|
88
84
|
this.store.setState(old => ({
|
|
89
85
|
...old,
|
|
90
|
-
//
|
|
86
|
+
// Submission attempts mark the form as not submitted
|
|
91
87
|
isSubmitted: false,
|
|
92
88
|
// Count submission attempts
|
|
93
89
|
submissionAttempts: old.submissionAttempts + 1
|
package/build/lib/FormApi.js.map
CHANGED
|
@@ -1 +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 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 | undefined => {\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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"}
|
|
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 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 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 handleSubmit = async () => {\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 // Submission 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 | undefined => {\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","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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"}
|
|
@@ -77,11 +77,7 @@ class FormApi {
|
|
|
77
77
|
});
|
|
78
78
|
return Promise.all(fieldValidationPromises);
|
|
79
79
|
});
|
|
80
|
-
|
|
81
|
-
_rollupPluginBabelHelpers.defineProperty(this, "handleSubmit", async e => {
|
|
82
|
-
e.preventDefault();
|
|
83
|
-
e.stopPropagation();
|
|
84
|
-
|
|
80
|
+
_rollupPluginBabelHelpers.defineProperty(this, "handleSubmit", async () => {
|
|
85
81
|
// Check to see that the form and all fields have been touched
|
|
86
82
|
// If they have not, touch them all and run validation
|
|
87
83
|
// Run form validation
|
|
@@ -89,7 +85,7 @@ class FormApi {
|
|
|
89
85
|
|
|
90
86
|
this.store.setState(old => ({
|
|
91
87
|
...old,
|
|
92
|
-
//
|
|
88
|
+
// Submission attempts mark the form as not submitted
|
|
93
89
|
isSubmitted: false,
|
|
94
90
|
// Count submission attempts
|
|
95
91
|
submissionAttempts: old.submissionAttempts + 1
|