@tanstack/form-core 0.0.8 → 0.0.9
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 +0 -2
- package/build/cjs/FieldApi.js.map +1 -1
- package/build/cjs/FormApi.js +0 -1
- package/build/cjs/FormApi.js.map +1 -1
- package/build/esm/index.js +0 -3
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +48 -48
- package/build/umd/index.development.js +0 -3
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/FieldApi.ts +0 -1
- package/src/FormApi.ts +0 -1
package/build/cjs/FieldApi.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldApi.js","sources":["../../src/FieldApi.ts"],"sourcesContent":["//\nimport type { DeepKeys, DeepValue, RequiredByKey, Updater } from './utils'\nimport type { FormApi, ValidationError } from './FormApi'\nimport { Store } from '@tanstack/store'\n\nexport type ValidationCause = 'change' | 'blur' | 'submit'\n\nexport interface FieldOptions<TData, TFormData> {\n name: unknown extends TFormData ? string : DeepKeys<TFormData>\n index?: TData extends any[] ? number : never\n defaultValue?: TData\n validate?: (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n ) => ValidationError\n validateAsync?: (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n ) => ValidationError | Promise<ValidationError>\n validatePristine?: boolean // Default: false\n validateOn?: ValidationCause // Default: 'change'\n validateAsyncOn?: ValidationCause // Default: 'blur'\n validateAsyncDebounceMs?: number\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: (updater: Updater<TData>) => void\n onBlur: (event: any) => void\n}\n\nexport type InputProps = {\n value: string\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\nexport class FieldApi<TData, TFormData> {\n uid: number\n form: FormApi<TFormData>\n name!: DeepKeys<TFormData>\n store!: Store<FieldState<TData>>\n state!: FieldState<TData>\n options: RequiredByKey<\n FieldOptions<TData, TFormData>,\n | 'validatePristine'\n | 'validateOn'\n | 'validateAsyncOn'\n | 'validateAsyncDebounceMs'\n > = {} 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<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 ...this.options.defaultMeta,\n },\n },\n {\n onUpdate: (next) => {\n next.meta.touchedError = next.meta.isTouched\n ? next.meta.error\n : undefined\n\n // Do not validate pristine fields\n const prevState = this.state\n this.state = next\n if (next.value !== prevState.value) {\n this.validate('change', next.value)\n }\n console.log(this)\n },\n },\n )\n\n this.state = this.store.state\n this.update(opts)\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.#updateStore()\n })\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 #updateStore = () => {\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 update = (opts: FieldApiOptions<TData, TFormData>) => {\n this.options = {\n validatePristine: this.form.options.defaultValidatePristine ?? false,\n validateOn: this.form.options.defaultValidateOn ?? 'change',\n validateAsyncOn: this.form.options.defaultValidateAsyncOn ?? 'blur',\n validateAsyncDebounceMs:\n this.form.options.defaultValidateAsyncDebounceMs ?? 0,\n ...opts,\n }\n\n // Default Value\n if (\n this.state.value === undefined &&\n this.options.defaultValue !== undefined\n ) {\n this.setValue(this.options.defaultValue)\n }\n\n // Default Meta\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.getMeta() === undefined) {\n this.setMeta(this.state.meta)\n }\n }\n\n getValue = (): TData => {\n return this.form.getFieldValue(this.name)\n }\n setValue = (\n updater: Updater<TData>,\n options?: { touch?: boolean; notify?: boolean },\n ) => this.form.setFieldValue(this.name, updater as any, options)\n\n getMeta = (): FieldMeta => this.form.getFieldMeta(this.name)\n setMeta = (updater: Updater<FieldMeta>) =>\n this.form.setFieldMeta(this.name, updater)\n\n getInfo = () => this.form.getFieldInfo(this.name)\n\n pushValue = (value: TData extends any[] ? TData[number] : never) =>\n this.form.pushFieldValue(this.name, value as any)\n insertValue = (index: number, value: TData) =>\n this.form.insertFieldValue(this.name, index, value as any)\n removeValue = (index: number) => this.form.removeFieldValue(this.name, index)\n swapValues = (aIndex: number, bIndex: number) =>\n this.form.swapFieldValues(this.name, aIndex, bIndex)\n\n getSubField = <TName extends DeepKeys<TData>>(name: TName) =>\n new FieldApi<DeepValue<TData, TName>, TFormData>({\n name: `${this.name}.${name}` as any,\n form: this.form,\n })\n\n validateSync = async (value = this.state.value) => {\n const { validate } = this.options\n\n if (!validate) {\n return\n }\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, this))\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) => {\n const { validateAsync, validateAsyncDebounceMs } = this.options\n\n if (!validateAsync) {\n return\n }\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 (validateAsyncDebounceMs > 0) {\n await new Promise((r) => setTimeout(r, validateAsyncDebounceMs))\n }\n\n // Only kick off validation if this validation is the latest attempt\n if (checkLatest()) {\n try {\n const rawError = await validateAsync(value, this)\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 shouldValidate = (isAsync: boolean, cause?: ValidationCause) => {\n const { validateOn, validateAsyncOn } = this.options\n const level = getValidationCauseLevel(cause)\n\n // Must meet *at least* the validation level to validate,\n // e.g. if validateOn is 'change' and validateCause is 'blur',\n // the field will still validate\n return Object.keys(validateCauseLevels).some((d) =>\n isAsync\n ? validateAsyncOn\n : validateOn === d && level >= validateCauseLevels[d],\n )\n }\n\n validate = async (\n cause?: ValidationCause,\n value?: TData,\n ): Promise<ValidationError> => {\n // If the field is pristine and validatePristine is false, do not validate\n if (!this.options.validatePristine && !this.state.meta.isTouched) return\n\n // Attempt to sync validate first\n if (this.shouldValidate(false, cause)) {\n this.validateSync(value)\n }\n\n // If there is an error, return it, do not attempt async validation\n if (this.state.meta.error) {\n return this.state.meta.error\n }\n\n // No error? Attempt async validation\n if (this.shouldValidate(true, cause)) {\n return this.validateAsync(value)\n }\n\n // If there is no sync error or async validation attempt, there is no error\n return undefined\n }\n\n getChangeProps = <T extends UserChangeProps<any>>(\n props: T = {} as T,\n ): ChangeProps<TData> & Omit<T, keyof ChangeProps<TData>> => {\n return {\n ...props,\n value: this.state.value,\n onChange: (value) => {\n this.setValue(value)\n props.onChange?.(value)\n },\n onBlur: (e) => {\n this.setMeta((prev) => ({ ...prev, isTouched: true }))\n this.validate('blur')\n props.onBlur?.(e)\n },\n } as ChangeProps<TData> & Omit<T, keyof ChangeProps<TData>>\n }\n\n getInputProps = <T extends UserInputProps>(\n props: T = {} as T,\n ): InputProps & Omit<T, keyof InputProps> => {\n return {\n ...props,\n value: String(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 }\n }\n}\n\nconst validateCauseLevels = {\n change: 0,\n blur: 1,\n submit: 2,\n}\n\nfunction getValidationCauseLevel(cause?: ValidationCause) {\n return !cause ? 3 : validateCauseLevels[cause]\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","FieldApi","constructor","opts","options","mount","info","getInfo","instances","unsubscribe","form","store","subscribe","_classPrivateFieldLooseBase","Object","keys","length","fieldInfo","name","batch","nextValue","getValue","nextMeta","getMeta","state","value","setState","prev","meta","update","validatePristine","defaultValidatePristine","validateOn","defaultValidateOn","validateAsyncOn","defaultValidateAsyncOn","validateAsyncDebounceMs","defaultValidateAsyncDebounceMs","undefined","defaultValue","setValue","setMeta","getFieldValue","updater","setFieldValue","getFieldMeta","setFieldMeta","getFieldInfo","pushValue","pushFieldValue","insertValue","index","insertFieldValue","removeValue","removeFieldValue","swapValues","aIndex","bIndex","swapFieldValues","getSubField","validateSync","validate","validationCount","error","normalizeError","cancelValidateAsync","count","validationAsyncCount","isValidating","validateAsync","checkLatest","validationPromise","Promise","resolve","reject","validationResolve","validationReject","r","setTimeout","rawError","shouldValidate","isAsync","cause","level","getValidationCauseLevel","validateCauseLevels","some","d","isTouched","getChangeProps","props","onChange","onBlur","e","getInputProps","String","target","Store","defaultMeta","onUpdate","next","touchedError","prevState","console","log","change","blur","submit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FieldApi.js","sources":["../../src/FieldApi.ts"],"sourcesContent":["//\nimport type { DeepKeys, DeepValue, RequiredByKey, Updater } from './utils'\nimport type { FormApi, ValidationError } from './FormApi'\nimport { Store } from '@tanstack/store'\n\nexport type ValidationCause = 'change' | 'blur' | 'submit'\n\nexport interface FieldOptions<TData, TFormData> {\n name: unknown extends TFormData ? string : DeepKeys<TFormData>\n index?: TData extends any[] ? number : never\n defaultValue?: TData\n validate?: (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n ) => ValidationError\n validateAsync?: (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n ) => ValidationError | Promise<ValidationError>\n validatePristine?: boolean // Default: false\n validateOn?: ValidationCause // Default: 'change'\n validateAsyncOn?: ValidationCause // Default: 'blur'\n validateAsyncDebounceMs?: number\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: (updater: Updater<TData>) => void\n onBlur: (event: any) => void\n}\n\nexport type InputProps = {\n value: string\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\nexport class FieldApi<TData, TFormData> {\n uid: number\n form: FormApi<TFormData>\n name!: DeepKeys<TFormData>\n store!: Store<FieldState<TData>>\n state!: FieldState<TData>\n options: RequiredByKey<\n FieldOptions<TData, TFormData>,\n | 'validatePristine'\n | 'validateOn'\n | 'validateAsyncOn'\n | 'validateAsyncDebounceMs'\n > = {} 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<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 ...this.options.defaultMeta,\n },\n },\n {\n onUpdate: (next) => {\n next.meta.touchedError = next.meta.isTouched\n ? next.meta.error\n : undefined\n\n // Do not validate pristine fields\n const prevState = this.state\n this.state = next\n if (next.value !== prevState.value) {\n this.validate('change', next.value)\n }\n },\n },\n )\n\n this.state = this.store.state\n this.update(opts)\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.#updateStore()\n })\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 #updateStore = () => {\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 update = (opts: FieldApiOptions<TData, TFormData>) => {\n this.options = {\n validatePristine: this.form.options.defaultValidatePristine ?? false,\n validateOn: this.form.options.defaultValidateOn ?? 'change',\n validateAsyncOn: this.form.options.defaultValidateAsyncOn ?? 'blur',\n validateAsyncDebounceMs:\n this.form.options.defaultValidateAsyncDebounceMs ?? 0,\n ...opts,\n }\n\n // Default Value\n if (\n this.state.value === undefined &&\n this.options.defaultValue !== undefined\n ) {\n this.setValue(this.options.defaultValue)\n }\n\n // Default Meta\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.getMeta() === undefined) {\n this.setMeta(this.state.meta)\n }\n }\n\n getValue = (): TData => {\n return this.form.getFieldValue(this.name)\n }\n setValue = (\n updater: Updater<TData>,\n options?: { touch?: boolean; notify?: boolean },\n ) => this.form.setFieldValue(this.name, updater as any, options)\n\n getMeta = (): FieldMeta => this.form.getFieldMeta(this.name)\n setMeta = (updater: Updater<FieldMeta>) =>\n this.form.setFieldMeta(this.name, updater)\n\n getInfo = () => this.form.getFieldInfo(this.name)\n\n pushValue = (value: TData extends any[] ? TData[number] : never) =>\n this.form.pushFieldValue(this.name, value as any)\n insertValue = (index: number, value: TData) =>\n this.form.insertFieldValue(this.name, index, value as any)\n removeValue = (index: number) => this.form.removeFieldValue(this.name, index)\n swapValues = (aIndex: number, bIndex: number) =>\n this.form.swapFieldValues(this.name, aIndex, bIndex)\n\n getSubField = <TName extends DeepKeys<TData>>(name: TName) =>\n new FieldApi<DeepValue<TData, TName>, TFormData>({\n name: `${this.name}.${name}` as any,\n form: this.form,\n })\n\n validateSync = async (value = this.state.value) => {\n const { validate } = this.options\n\n if (!validate) {\n return\n }\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, this))\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) => {\n const { validateAsync, validateAsyncDebounceMs } = this.options\n\n if (!validateAsync) {\n return\n }\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 (validateAsyncDebounceMs > 0) {\n await new Promise((r) => setTimeout(r, validateAsyncDebounceMs))\n }\n\n // Only kick off validation if this validation is the latest attempt\n if (checkLatest()) {\n try {\n const rawError = await validateAsync(value, this)\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 shouldValidate = (isAsync: boolean, cause?: ValidationCause) => {\n const { validateOn, validateAsyncOn } = this.options\n const level = getValidationCauseLevel(cause)\n\n // Must meet *at least* the validation level to validate,\n // e.g. if validateOn is 'change' and validateCause is 'blur',\n // the field will still validate\n return Object.keys(validateCauseLevels).some((d) =>\n isAsync\n ? validateAsyncOn\n : validateOn === d && level >= validateCauseLevels[d],\n )\n }\n\n validate = async (\n cause?: ValidationCause,\n value?: TData,\n ): Promise<ValidationError> => {\n // If the field is pristine and validatePristine is false, do not validate\n if (!this.options.validatePristine && !this.state.meta.isTouched) return\n\n // Attempt to sync validate first\n if (this.shouldValidate(false, cause)) {\n this.validateSync(value)\n }\n\n // If there is an error, return it, do not attempt async validation\n if (this.state.meta.error) {\n return this.state.meta.error\n }\n\n // No error? Attempt async validation\n if (this.shouldValidate(true, cause)) {\n return this.validateAsync(value)\n }\n\n // If there is no sync error or async validation attempt, there is no error\n return undefined\n }\n\n getChangeProps = <T extends UserChangeProps<any>>(\n props: T = {} as T,\n ): ChangeProps<TData> & Omit<T, keyof ChangeProps<TData>> => {\n return {\n ...props,\n value: this.state.value,\n onChange: (value) => {\n this.setValue(value)\n props.onChange?.(value)\n },\n onBlur: (e) => {\n this.setMeta((prev) => ({ ...prev, isTouched: true }))\n this.validate('blur')\n props.onBlur?.(e)\n },\n } as ChangeProps<TData> & Omit<T, keyof ChangeProps<TData>>\n }\n\n getInputProps = <T extends UserInputProps>(\n props: T = {} as T,\n ): InputProps & Omit<T, keyof InputProps> => {\n return {\n ...props,\n value: String(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 }\n }\n}\n\nconst validateCauseLevels = {\n change: 0,\n blur: 1,\n submit: 2,\n}\n\nfunction getValidationCauseLevel(cause?: ValidationCause) {\n return !cause ? 3 : validateCauseLevels[cause]\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","FieldApi","constructor","opts","options","mount","info","getInfo","instances","unsubscribe","form","store","subscribe","_classPrivateFieldLooseBase","Object","keys","length","fieldInfo","name","batch","nextValue","getValue","nextMeta","getMeta","state","value","setState","prev","meta","update","validatePristine","defaultValidatePristine","validateOn","defaultValidateOn","validateAsyncOn","defaultValidateAsyncOn","validateAsyncDebounceMs","defaultValidateAsyncDebounceMs","undefined","defaultValue","setValue","setMeta","getFieldValue","updater","setFieldValue","getFieldMeta","setFieldMeta","getFieldInfo","pushValue","pushFieldValue","insertValue","index","insertFieldValue","removeValue","removeFieldValue","swapValues","aIndex","bIndex","swapFieldValues","getSubField","validateSync","validate","validationCount","error","normalizeError","cancelValidateAsync","count","validationAsyncCount","isValidating","validateAsync","checkLatest","validationPromise","Promise","resolve","reject","validationResolve","validationReject","r","setTimeout","rawError","shouldValidate","isAsync","cause","level","getValidationCauseLevel","validateCauseLevels","some","d","isTouched","getChangeProps","props","onChange","onBlur","e","getInputProps","String","target","Store","defaultMeta","onUpdate","next","touchedError","prevState","change","blur","submit"],"mappings":"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"}
|
package/build/cjs/FormApi.js
CHANGED
package/build/cjs/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 onSubmit?: (values: TData, formApi: FormApi<TData>) => void\n onInvalidSubmit?: (values: TData, formApi: FormApi<TData>) => void\n validate?: (values: TData, formApi: FormApi<TData>) => Promise<any>\n defaultValidatePristine?: boolean\n defaultValidateOn?: ValidationCause\n defaultValidateAsyncOn?: ValidationCause\n defaultValidateAsyncDebounceMs?: number\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: !opts?.validate,\n }),\n {\n onUpdate: (next) => {\n // Computed state\n const fieldMetaValues = Object.values(next.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 || next.isFormValidating\n const isFormValid = !next.formError\n const isValid = isFieldsValid && isFormValid\n const canSubmit =\n (next.submissionAttempts === 0 && !isTouched) ||\n (!isValidating && !next.isSubmitting && isValid)\n\n next = {\n ...next,\n isFieldsValidating,\n isFieldsValid,\n isFormValid,\n isValid,\n canSubmit,\n isTouched,\n }\n\n // Create a shortcut for the state\n // Write it back to the store\n this.store.state = next\n this.state = next\n console.log(this.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 if (\n options.defaultState &&\n options.defaultState !== this.options.defaultState\n ) {\n this.store.setState((prev) => ({\n ...prev,\n ...options.defaultState,\n }))\n }\n\n if (options.defaultValues !== this.options.defaultValues) {\n this.store.setState((prev) => ({\n ...prev,\n values: options.defaultValues as TFormData,\n }))\n }\n })\n\n this.options = options\n }\n\n reset = () =>\n this.store.setState(() => getDefaultFormState(this.options.defaultValues!))\n\n validateAllFields = async () => {\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 if (instance.options.validate) {\n fieldValidationPromises.push(instance.validate())\n }\n }\n })\n },\n )\n })\n\n return Promise.all(fieldValidationPromises)\n }\n\n validateForm = async () => {\n const { validate } = this.options\n\n if (!validate) {\n return\n }\n\n // Use the formValidationCount for all field instances to\n // track freshness of the validation\n this.store.setState((prev) => ({\n ...prev,\n isValidating: true,\n formValidationCount: prev.formValidationCount + 1,\n }))\n\n const formValidationCount = this.state.formValidationCount\n\n const checkLatest = () =>\n formValidationCount === this.state.formValidationCount\n\n if (!this.validationMeta.validationPromise) {\n this.validationMeta.validationPromise = new Promise((resolve, reject) => {\n this.validationMeta.validationResolve = resolve\n this.validationMeta.validationReject = reject\n })\n }\n\n const doValidation = async () => {\n try {\n const error = await validate(this.state.values, this)\n\n if (checkLatest()) {\n this.store.setState((prev) => ({\n ...prev,\n isValidating: false,\n error: error\n ? typeof error === 'string'\n ? error\n : 'Invalid Form Values'\n : null,\n }))\n\n this.validationMeta.validationResolve?.(error)\n }\n } catch (err) {\n if (checkLatest()) {\n this.validationMeta.validationReject?.(err)\n }\n } finally {\n delete this.validationMeta.validationPromise\n }\n }\n\n doValidation()\n\n return this.validationMeta.validationPromise\n }\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()\n\n // Fields are invalid, do not submit\n if (!this.state.isFieldsValid) {\n done()\n this.options.onInvalidSubmit?.(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.onInvalidSubmit?.(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 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 ?? true\n\n this.store.batch(() => {\n this.store.setState((prev) => {\n return {\n ...prev,\n values: setBy(prev.values, field, updater),\n }\n })\n\n if (touch) {\n this.setFieldMeta(field, (prev) => ({\n ...prev,\n isTouched: true,\n }))\n }\n })\n }\n\n pushFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n value: DeepValue<TFormData, TField>,\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>,\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n // invariant( // TODO: bring in invariant\n // Array.isArray(prev),\n // `Cannot insert a field value into a non-array field. Check that this field's existing value is an array: ${field}.`\n // )\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 // invariant( // TODO: bring in invariant\n // Array.isArray(prev),\n // `Cannot insert a field value into a non-array field. Check that this field's existing value is an array: ${field}.`\n // )\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","options","fieldInfo","validationMeta","update","store","batch","setState","prev","defaultValues","reset","validateAllFields","fieldValidationPromises","Object","forEach","field","instances","instance","state","meta","setMeta","validate","push","Promise","all","validateForm","checkLatest","validationPromise","resolve","reject","validationResolve","validationReject","doValidation","error","err","handleSubmit","e","preventDefault","stopPropagation","old","d","done","onInvalidSubmit","onSubmit","getFieldValue","getBy","getFieldMeta","getFieldInfo","setFieldMeta","updater","functionalUpdate","setFieldValue","touch","setBy","pushFieldValue","value","Array","isArray","insertFieldValue","index","map","i","removeFieldValue","filter","_d","swapFieldValues","index1","index2","prev1","prev2","Store","onUpdate","next","fieldMetaValues","some","formError","console","log"],"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 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 onSubmit?: (values: TData, formApi: FormApi<TData>) => void\n onInvalidSubmit?: (values: TData, formApi: FormApi<TData>) => void\n validate?: (values: TData, formApi: FormApi<TData>) => Promise<any>\n defaultValidatePristine?: boolean\n defaultValidateOn?: ValidationCause\n defaultValidateAsyncOn?: ValidationCause\n defaultValidateAsyncDebounceMs?: number\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: !opts?.validate,\n }),\n {\n onUpdate: (next) => {\n // Computed state\n const fieldMetaValues = Object.values(next.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 || next.isFormValidating\n const isFormValid = !next.formError\n const isValid = isFieldsValid && isFormValid\n const canSubmit =\n (next.submissionAttempts === 0 && !isTouched) ||\n (!isValidating && !next.isSubmitting && isValid)\n\n next = {\n ...next,\n isFieldsValidating,\n isFieldsValid,\n isFormValid,\n isValid,\n canSubmit,\n isTouched,\n }\n\n // Create a shortcut for the state\n // Write it back to the store\n this.store.state = next\n this.state = next\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 if (\n options.defaultState &&\n options.defaultState !== this.options.defaultState\n ) {\n this.store.setState((prev) => ({\n ...prev,\n ...options.defaultState,\n }))\n }\n\n if (options.defaultValues !== this.options.defaultValues) {\n this.store.setState((prev) => ({\n ...prev,\n values: options.defaultValues as TFormData,\n }))\n }\n })\n\n this.options = options\n }\n\n reset = () =>\n this.store.setState(() => getDefaultFormState(this.options.defaultValues!))\n\n validateAllFields = async () => {\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 if (instance.options.validate) {\n fieldValidationPromises.push(instance.validate())\n }\n }\n })\n },\n )\n })\n\n return Promise.all(fieldValidationPromises)\n }\n\n validateForm = async () => {\n const { validate } = this.options\n\n if (!validate) {\n return\n }\n\n // Use the formValidationCount for all field instances to\n // track freshness of the validation\n this.store.setState((prev) => ({\n ...prev,\n isValidating: true,\n formValidationCount: prev.formValidationCount + 1,\n }))\n\n const formValidationCount = this.state.formValidationCount\n\n const checkLatest = () =>\n formValidationCount === this.state.formValidationCount\n\n if (!this.validationMeta.validationPromise) {\n this.validationMeta.validationPromise = new Promise((resolve, reject) => {\n this.validationMeta.validationResolve = resolve\n this.validationMeta.validationReject = reject\n })\n }\n\n const doValidation = async () => {\n try {\n const error = await validate(this.state.values, this)\n\n if (checkLatest()) {\n this.store.setState((prev) => ({\n ...prev,\n isValidating: false,\n error: error\n ? typeof error === 'string'\n ? error\n : 'Invalid Form Values'\n : null,\n }))\n\n this.validationMeta.validationResolve?.(error)\n }\n } catch (err) {\n if (checkLatest()) {\n this.validationMeta.validationReject?.(err)\n }\n } finally {\n delete this.validationMeta.validationPromise\n }\n }\n\n doValidation()\n\n return this.validationMeta.validationPromise\n }\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()\n\n // Fields are invalid, do not submit\n if (!this.state.isFieldsValid) {\n done()\n this.options.onInvalidSubmit?.(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.onInvalidSubmit?.(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 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 ?? true\n\n this.store.batch(() => {\n this.store.setState((prev) => {\n return {\n ...prev,\n values: setBy(prev.values, field, updater),\n }\n })\n\n if (touch) {\n this.setFieldMeta(field, (prev) => ({\n ...prev,\n isTouched: true,\n }))\n }\n })\n }\n\n pushFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n value: DeepValue<TFormData, TField>,\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>,\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n // invariant( // TODO: bring in invariant\n // Array.isArray(prev),\n // `Cannot insert a field value into a non-array field. Check that this field's existing value is an array: ${field}.`\n // )\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 // invariant( // TODO: bring in invariant\n // Array.isArray(prev),\n // `Cannot insert a field value into a non-array field. Check that this field's existing value is an array: ${field}.`\n // )\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","options","fieldInfo","validationMeta","update","store","batch","setState","prev","defaultValues","reset","validateAllFields","fieldValidationPromises","Object","forEach","field","instances","instance","state","meta","setMeta","validate","push","Promise","all","validateForm","checkLatest","validationPromise","resolve","reject","validationResolve","validationReject","doValidation","error","err","handleSubmit","e","preventDefault","stopPropagation","old","d","done","onInvalidSubmit","onSubmit","getFieldValue","getBy","getFieldMeta","getFieldInfo","setFieldMeta","updater","functionalUpdate","setFieldValue","touch","setBy","pushFieldValue","value","Array","isArray","insertFieldValue","index","map","i","removeFieldValue","filter","_d","swapFieldValues","index1","index2","prev1","prev2","Store","onUpdate","next","fieldMetaValues","some","formError"],"mappings":"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"}
|
package/build/esm/index.js
CHANGED
|
@@ -372,7 +372,6 @@ class FormApi {
|
|
|
372
372
|
|
|
373
373
|
this.store.state = next;
|
|
374
374
|
this.state = next;
|
|
375
|
-
console.log(this.state);
|
|
376
375
|
}
|
|
377
376
|
});
|
|
378
377
|
this.state = this.store.state;
|
|
@@ -692,8 +691,6 @@ class FieldApi {
|
|
|
692
691
|
if (next.value !== prevState.value) {
|
|
693
692
|
this.validate('change', next.value);
|
|
694
693
|
}
|
|
695
|
-
|
|
696
|
-
console.log(this);
|
|
697
694
|
}
|
|
698
695
|
});
|
|
699
696
|
this.state = this.store.state;
|
package/build/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/utils.ts","../../src/FormApi.ts","../../src/FieldApi.ts"],"sourcesContent":["export type UpdaterFn<TInput, TOutput = TInput> = (input: TInput) => TOutput\n\nexport type Updater<TInput, TOutput = TInput> =\n | TOutput\n | UpdaterFn<TInput, TOutput>\n\nexport function functionalUpdate<TInput, TOutput = TInput>(\n updater: Updater<TInput, TOutput>,\n input: TInput,\n): TOutput {\n return typeof updater === 'function'\n ? (updater as UpdaterFn<TInput, TOutput>)(input)\n : updater\n}\n\nexport function getBy(obj: any, path: any) {\n const pathArray = makePathArray(path)\n const pathObj = pathArray\n return pathObj.reduce((current: any, pathPart: any) => {\n if (typeof current !== 'undefined') {\n return current[pathPart]\n }\n return undefined\n }, obj)\n}\n\nexport function setBy(obj: any, _path: any, updater: Updater<any>) {\n const path = makePathArray(_path)\n\n function doSet(parent?: any): any {\n if (!path.length) {\n return functionalUpdate(updater, parent)\n }\n\n const key = path.shift()\n\n if (typeof key === 'string') {\n if (typeof parent === 'object') {\n return {\n ...parent,\n [key]: doSet(parent[key]),\n }\n }\n return {\n [key]: doSet(),\n }\n }\n\n if (typeof key === 'number') {\n if (Array.isArray(parent)) {\n const prefix = parent.slice(0, key)\n return [\n ...(prefix.length ? prefix : new Array(key)),\n doSet(parent[key]),\n ...parent.slice(key + 1),\n ]\n }\n return [...new Array(key), doSet()]\n }\n\n throw new Error('Uh oh!')\n }\n\n return doSet(obj)\n}\n\nconst reFindNumbers0 = /^(\\d*)$/gm\nconst reFindNumbers1 = /\\.(\\d*)\\./gm\nconst reFindNumbers2 = /^(\\d*)\\./gm\nconst reFindNumbers3 = /\\.(\\d*$)/gm\nconst reFindMultiplePeriods = /\\.{2,}/gm\n\nconst intPrefix = '__int__'\nconst intReplace = `${intPrefix}$1`\n\nfunction makePathArray(str: string) {\n if (typeof str !== 'string') {\n throw new Error()\n }\n\n return str\n .replace('[', '.')\n .replace(']', '')\n .replace(reFindNumbers0, intReplace)\n .replace(reFindNumbers1, `.${intReplace}.`)\n .replace(reFindNumbers2, `${intReplace}.`)\n .replace(reFindNumbers3, `.${intReplace}`)\n .replace(reFindMultiplePeriods, '.')\n .split('.')\n .map((d) => {\n if (d.indexOf(intPrefix) === 0) {\n return parseInt(d.substring(intPrefix.length), 10)\n }\n return d\n })\n}\n\nexport type RequiredByKey<T, K extends keyof T> = Omit<T, K> &\n Required<Pick<T, K>>\n\ntype ComputeRange<\n N extends number,\n Result extends Array<unknown> = [],\n> = Result['length'] extends N\n ? Result\n : ComputeRange<N, [...Result, Result['length']]>\ntype Index40 = ComputeRange<40>[number]\n\n// Is this type a tuple?\ntype IsTuple<T> = T extends readonly any[] & { length: infer Length }\n ? Length extends Index40\n ? T\n : never\n : never\n\n// If this type is a tuple, what indices are allowed?\ntype AllowedIndexes<\n Tuple extends ReadonlyArray<any>,\n Keys extends number = never,\n> = Tuple extends readonly []\n ? Keys\n : Tuple extends readonly [infer _, ...infer Tail]\n ? AllowedIndexes<Tail, Keys | Tail['length']>\n : Keys\n\nexport type DeepKeys<T> = unknown extends T\n ? keyof T\n : object extends T\n ? string\n : T extends readonly any[] & IsTuple<T>\n ? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>>\n : T extends any[]\n ? DeepKeys<T[number]>\n : T extends Date\n ? never\n : T extends object\n ? (keyof T & string) | DeepKeysPrefix<T, keyof T>\n : never\n\ntype DeepKeysPrefix<T, TPrefix> = TPrefix extends keyof T & (number | string)\n ? `${TPrefix}.${DeepKeys<T[TPrefix]> & string}`\n : never\n\nexport type DeepValue<T, TProp> = T extends Record<string | number, any>\n ? TProp extends `${infer TBranch}.${infer TDeepProp}`\n ? DeepValue<T[TBranch], TDeepProp>\n : T[TProp & string]\n : never\n\ntype Narrowable = string | number | bigint | boolean\n\ntype NarrowRaw<A> =\n | (A extends [] ? [] : never)\n | (A extends Narrowable ? A : never)\n | {\n [K in keyof A]: A[K] extends Function ? A[K] : NarrowRaw<A[K]>\n }\n\nexport type Narrow<A> = Try<A, [], NarrowRaw<A>>\n\ntype Try<A1, A2, Catch = never> = A1 extends A2 ? A1 : Catch\n","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 onSubmit?: (values: TData, formApi: FormApi<TData>) => void\n onInvalidSubmit?: (values: TData, formApi: FormApi<TData>) => void\n validate?: (values: TData, formApi: FormApi<TData>) => Promise<any>\n defaultValidatePristine?: boolean\n defaultValidateOn?: ValidationCause\n defaultValidateAsyncOn?: ValidationCause\n defaultValidateAsyncDebounceMs?: number\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: !opts?.validate,\n }),\n {\n onUpdate: (next) => {\n // Computed state\n const fieldMetaValues = Object.values(next.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 || next.isFormValidating\n const isFormValid = !next.formError\n const isValid = isFieldsValid && isFormValid\n const canSubmit =\n (next.submissionAttempts === 0 && !isTouched) ||\n (!isValidating && !next.isSubmitting && isValid)\n\n next = {\n ...next,\n isFieldsValidating,\n isFieldsValid,\n isFormValid,\n isValid,\n canSubmit,\n isTouched,\n }\n\n // Create a shortcut for the state\n // Write it back to the store\n this.store.state = next\n this.state = next\n console.log(this.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 if (\n options.defaultState &&\n options.defaultState !== this.options.defaultState\n ) {\n this.store.setState((prev) => ({\n ...prev,\n ...options.defaultState,\n }))\n }\n\n if (options.defaultValues !== this.options.defaultValues) {\n this.store.setState((prev) => ({\n ...prev,\n values: options.defaultValues as TFormData,\n }))\n }\n })\n\n this.options = options\n }\n\n reset = () =>\n this.store.setState(() => getDefaultFormState(this.options.defaultValues!))\n\n validateAllFields = async () => {\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 if (instance.options.validate) {\n fieldValidationPromises.push(instance.validate())\n }\n }\n })\n },\n )\n })\n\n return Promise.all(fieldValidationPromises)\n }\n\n validateForm = async () => {\n const { validate } = this.options\n\n if (!validate) {\n return\n }\n\n // Use the formValidationCount for all field instances to\n // track freshness of the validation\n this.store.setState((prev) => ({\n ...prev,\n isValidating: true,\n formValidationCount: prev.formValidationCount + 1,\n }))\n\n const formValidationCount = this.state.formValidationCount\n\n const checkLatest = () =>\n formValidationCount === this.state.formValidationCount\n\n if (!this.validationMeta.validationPromise) {\n this.validationMeta.validationPromise = new Promise((resolve, reject) => {\n this.validationMeta.validationResolve = resolve\n this.validationMeta.validationReject = reject\n })\n }\n\n const doValidation = async () => {\n try {\n const error = await validate(this.state.values, this)\n\n if (checkLatest()) {\n this.store.setState((prev) => ({\n ...prev,\n isValidating: false,\n error: error\n ? typeof error === 'string'\n ? error\n : 'Invalid Form Values'\n : null,\n }))\n\n this.validationMeta.validationResolve?.(error)\n }\n } catch (err) {\n if (checkLatest()) {\n this.validationMeta.validationReject?.(err)\n }\n } finally {\n delete this.validationMeta.validationPromise\n }\n }\n\n doValidation()\n\n return this.validationMeta.validationPromise\n }\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()\n\n // Fields are invalid, do not submit\n if (!this.state.isFieldsValid) {\n done()\n this.options.onInvalidSubmit?.(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.onInvalidSubmit?.(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 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 ?? true\n\n this.store.batch(() => {\n this.store.setState((prev) => {\n return {\n ...prev,\n values: setBy(prev.values, field, updater),\n }\n })\n\n if (touch) {\n this.setFieldMeta(field, (prev) => ({\n ...prev,\n isTouched: true,\n }))\n }\n })\n }\n\n pushFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n value: DeepValue<TFormData, TField>,\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>,\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n // invariant( // TODO: bring in invariant\n // Array.isArray(prev),\n // `Cannot insert a field value into a non-array field. Check that this field's existing value is an array: ${field}.`\n // )\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 // invariant( // TODO: bring in invariant\n // Array.isArray(prev),\n // `Cannot insert a field value into a non-array field. Check that this field's existing value is an array: ${field}.`\n // )\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","//\nimport type { DeepKeys, DeepValue, RequiredByKey, Updater } from './utils'\nimport type { FormApi, ValidationError } from './FormApi'\nimport { Store } from '@tanstack/store'\n\nexport type ValidationCause = 'change' | 'blur' | 'submit'\n\nexport interface FieldOptions<TData, TFormData> {\n name: unknown extends TFormData ? string : DeepKeys<TFormData>\n index?: TData extends any[] ? number : never\n defaultValue?: TData\n validate?: (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n ) => ValidationError\n validateAsync?: (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n ) => ValidationError | Promise<ValidationError>\n validatePristine?: boolean // Default: false\n validateOn?: ValidationCause // Default: 'change'\n validateAsyncOn?: ValidationCause // Default: 'blur'\n validateAsyncDebounceMs?: number\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: (updater: Updater<TData>) => void\n onBlur: (event: any) => void\n}\n\nexport type InputProps = {\n value: string\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\nexport class FieldApi<TData, TFormData> {\n uid: number\n form: FormApi<TFormData>\n name!: DeepKeys<TFormData>\n store!: Store<FieldState<TData>>\n state!: FieldState<TData>\n options: RequiredByKey<\n FieldOptions<TData, TFormData>,\n | 'validatePristine'\n | 'validateOn'\n | 'validateAsyncOn'\n | 'validateAsyncDebounceMs'\n > = {} 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<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 ...this.options.defaultMeta,\n },\n },\n {\n onUpdate: (next) => {\n next.meta.touchedError = next.meta.isTouched\n ? next.meta.error\n : undefined\n\n // Do not validate pristine fields\n const prevState = this.state\n this.state = next\n if (next.value !== prevState.value) {\n this.validate('change', next.value)\n }\n console.log(this)\n },\n },\n )\n\n this.state = this.store.state\n this.update(opts)\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.#updateStore()\n })\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 #updateStore = () => {\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 update = (opts: FieldApiOptions<TData, TFormData>) => {\n this.options = {\n validatePristine: this.form.options.defaultValidatePristine ?? false,\n validateOn: this.form.options.defaultValidateOn ?? 'change',\n validateAsyncOn: this.form.options.defaultValidateAsyncOn ?? 'blur',\n validateAsyncDebounceMs:\n this.form.options.defaultValidateAsyncDebounceMs ?? 0,\n ...opts,\n }\n\n // Default Value\n if (\n this.state.value === undefined &&\n this.options.defaultValue !== undefined\n ) {\n this.setValue(this.options.defaultValue)\n }\n\n // Default Meta\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.getMeta() === undefined) {\n this.setMeta(this.state.meta)\n }\n }\n\n getValue = (): TData => {\n return this.form.getFieldValue(this.name)\n }\n setValue = (\n updater: Updater<TData>,\n options?: { touch?: boolean; notify?: boolean },\n ) => this.form.setFieldValue(this.name, updater as any, options)\n\n getMeta = (): FieldMeta => this.form.getFieldMeta(this.name)\n setMeta = (updater: Updater<FieldMeta>) =>\n this.form.setFieldMeta(this.name, updater)\n\n getInfo = () => this.form.getFieldInfo(this.name)\n\n pushValue = (value: TData extends any[] ? TData[number] : never) =>\n this.form.pushFieldValue(this.name, value as any)\n insertValue = (index: number, value: TData) =>\n this.form.insertFieldValue(this.name, index, value as any)\n removeValue = (index: number) => this.form.removeFieldValue(this.name, index)\n swapValues = (aIndex: number, bIndex: number) =>\n this.form.swapFieldValues(this.name, aIndex, bIndex)\n\n getSubField = <TName extends DeepKeys<TData>>(name: TName) =>\n new FieldApi<DeepValue<TData, TName>, TFormData>({\n name: `${this.name}.${name}` as any,\n form: this.form,\n })\n\n validateSync = async (value = this.state.value) => {\n const { validate } = this.options\n\n if (!validate) {\n return\n }\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, this))\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) => {\n const { validateAsync, validateAsyncDebounceMs } = this.options\n\n if (!validateAsync) {\n return\n }\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 (validateAsyncDebounceMs > 0) {\n await new Promise((r) => setTimeout(r, validateAsyncDebounceMs))\n }\n\n // Only kick off validation if this validation is the latest attempt\n if (checkLatest()) {\n try {\n const rawError = await validateAsync(value, this)\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 shouldValidate = (isAsync: boolean, cause?: ValidationCause) => {\n const { validateOn, validateAsyncOn } = this.options\n const level = getValidationCauseLevel(cause)\n\n // Must meet *at least* the validation level to validate,\n // e.g. if validateOn is 'change' and validateCause is 'blur',\n // the field will still validate\n return Object.keys(validateCauseLevels).some((d) =>\n isAsync\n ? validateAsyncOn\n : validateOn === d && level >= validateCauseLevels[d],\n )\n }\n\n validate = async (\n cause?: ValidationCause,\n value?: TData,\n ): Promise<ValidationError> => {\n // If the field is pristine and validatePristine is false, do not validate\n if (!this.options.validatePristine && !this.state.meta.isTouched) return\n\n // Attempt to sync validate first\n if (this.shouldValidate(false, cause)) {\n this.validateSync(value)\n }\n\n // If there is an error, return it, do not attempt async validation\n if (this.state.meta.error) {\n return this.state.meta.error\n }\n\n // No error? Attempt async validation\n if (this.shouldValidate(true, cause)) {\n return this.validateAsync(value)\n }\n\n // If there is no sync error or async validation attempt, there is no error\n return undefined\n }\n\n getChangeProps = <T extends UserChangeProps<any>>(\n props: T = {} as T,\n ): ChangeProps<TData> & Omit<T, keyof ChangeProps<TData>> => {\n return {\n ...props,\n value: this.state.value,\n onChange: (value) => {\n this.setValue(value)\n props.onChange?.(value)\n },\n onBlur: (e) => {\n this.setMeta((prev) => ({ ...prev, isTouched: true }))\n this.validate('blur')\n props.onBlur?.(e)\n },\n } as ChangeProps<TData> & Omit<T, keyof ChangeProps<TData>>\n }\n\n getInputProps = <T extends UserInputProps>(\n props: T = {} as T,\n ): InputProps & Omit<T, keyof InputProps> => {\n return {\n ...props,\n value: String(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 }\n }\n}\n\nconst validateCauseLevels = {\n change: 0,\n blur: 1,\n submit: 2,\n}\n\nfunction getValidationCauseLevel(cause?: ValidationCause) {\n return !cause ? 3 : validateCauseLevels[cause]\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":["functionalUpdate","updater","input","getBy","obj","path","pathArray","makePathArray","pathObj","reduce","current","pathPart","undefined","setBy","_path","doSet","parent","length","key","shift","Array","isArray","prefix","slice","Error","reFindNumbers0","reFindNumbers1","reFindNumbers2","reFindNumbers3","reFindMultiplePeriods","intPrefix","intReplace","str","replace","split","map","d","indexOf","parseInt","substring","getDefaultFormState","defaultState","values","fieldMeta","canSubmit","isFieldsValid","isFieldsValidating","isFormValid","isFormValidating","isSubmitted","isSubmitting","isTouched","isValid","isValidating","submissionAttempts","formValidationCount","FormApi","constructor","opts","options","fieldInfo","validationMeta","update","store","batch","setState","prev","defaultValues","reset","validateAllFields","fieldValidationPromises","Object","forEach","field","instances","instance","state","meta","setMeta","validate","push","Promise","all","validateForm","checkLatest","validationPromise","resolve","reject","validationResolve","validationReject","doValidation","error","err","handleSubmit","e","preventDefault","stopPropagation","old","done","onInvalidSubmit","onSubmit","getFieldValue","getFieldMeta","getFieldInfo","setFieldMeta","setFieldValue","touch","pushFieldValue","value","insertFieldValue","index","i","removeFieldValue","filter","_d","swapFieldValues","index1","index2","prev1","prev2","Store","onUpdate","next","fieldMetaValues","some","formError","console","log","uid","FieldApi","mount","info","getInfo","unsubscribe","form","subscribe","keys","name","nextValue","getValue","nextMeta","getMeta","validatePristine","defaultValidatePristine","validateOn","defaultValidateOn","validateAsyncOn","defaultValidateAsyncOn","validateAsyncDebounceMs","defaultValidateAsyncDebounceMs","defaultValue","setValue","pushValue","insertValue","removeValue","swapValues","aIndex","bIndex","getSubField","validateSync","validationCount","normalizeError","cancelValidateAsync","count","validationAsyncCount","validateAsync","r","setTimeout","rawError","shouldValidate","isAsync","cause","level","getValidationCauseLevel","validateCauseLevels","getChangeProps","props","onChange","onBlur","getInputProps","String","target","defaultMeta","touchedError","prevState","change","blur","submit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/utils.ts","../../src/FormApi.ts","../../src/FieldApi.ts"],"sourcesContent":["export type UpdaterFn<TInput, TOutput = TInput> = (input: TInput) => TOutput\n\nexport type Updater<TInput, TOutput = TInput> =\n | TOutput\n | UpdaterFn<TInput, TOutput>\n\nexport function functionalUpdate<TInput, TOutput = TInput>(\n updater: Updater<TInput, TOutput>,\n input: TInput,\n): TOutput {\n return typeof updater === 'function'\n ? (updater as UpdaterFn<TInput, TOutput>)(input)\n : updater\n}\n\nexport function getBy(obj: any, path: any) {\n const pathArray = makePathArray(path)\n const pathObj = pathArray\n return pathObj.reduce((current: any, pathPart: any) => {\n if (typeof current !== 'undefined') {\n return current[pathPart]\n }\n return undefined\n }, obj)\n}\n\nexport function setBy(obj: any, _path: any, updater: Updater<any>) {\n const path = makePathArray(_path)\n\n function doSet(parent?: any): any {\n if (!path.length) {\n return functionalUpdate(updater, parent)\n }\n\n const key = path.shift()\n\n if (typeof key === 'string') {\n if (typeof parent === 'object') {\n return {\n ...parent,\n [key]: doSet(parent[key]),\n }\n }\n return {\n [key]: doSet(),\n }\n }\n\n if (typeof key === 'number') {\n if (Array.isArray(parent)) {\n const prefix = parent.slice(0, key)\n return [\n ...(prefix.length ? prefix : new Array(key)),\n doSet(parent[key]),\n ...parent.slice(key + 1),\n ]\n }\n return [...new Array(key), doSet()]\n }\n\n throw new Error('Uh oh!')\n }\n\n return doSet(obj)\n}\n\nconst reFindNumbers0 = /^(\\d*)$/gm\nconst reFindNumbers1 = /\\.(\\d*)\\./gm\nconst reFindNumbers2 = /^(\\d*)\\./gm\nconst reFindNumbers3 = /\\.(\\d*$)/gm\nconst reFindMultiplePeriods = /\\.{2,}/gm\n\nconst intPrefix = '__int__'\nconst intReplace = `${intPrefix}$1`\n\nfunction makePathArray(str: string) {\n if (typeof str !== 'string') {\n throw new Error()\n }\n\n return str\n .replace('[', '.')\n .replace(']', '')\n .replace(reFindNumbers0, intReplace)\n .replace(reFindNumbers1, `.${intReplace}.`)\n .replace(reFindNumbers2, `${intReplace}.`)\n .replace(reFindNumbers3, `.${intReplace}`)\n .replace(reFindMultiplePeriods, '.')\n .split('.')\n .map((d) => {\n if (d.indexOf(intPrefix) === 0) {\n return parseInt(d.substring(intPrefix.length), 10)\n }\n return d\n })\n}\n\nexport type RequiredByKey<T, K extends keyof T> = Omit<T, K> &\n Required<Pick<T, K>>\n\ntype ComputeRange<\n N extends number,\n Result extends Array<unknown> = [],\n> = Result['length'] extends N\n ? Result\n : ComputeRange<N, [...Result, Result['length']]>\ntype Index40 = ComputeRange<40>[number]\n\n// Is this type a tuple?\ntype IsTuple<T> = T extends readonly any[] & { length: infer Length }\n ? Length extends Index40\n ? T\n : never\n : never\n\n// If this type is a tuple, what indices are allowed?\ntype AllowedIndexes<\n Tuple extends ReadonlyArray<any>,\n Keys extends number = never,\n> = Tuple extends readonly []\n ? Keys\n : Tuple extends readonly [infer _, ...infer Tail]\n ? AllowedIndexes<Tail, Keys | Tail['length']>\n : Keys\n\nexport type DeepKeys<T> = unknown extends T\n ? keyof T\n : object extends T\n ? string\n : T extends readonly any[] & IsTuple<T>\n ? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>>\n : T extends any[]\n ? DeepKeys<T[number]>\n : T extends Date\n ? never\n : T extends object\n ? (keyof T & string) | DeepKeysPrefix<T, keyof T>\n : never\n\ntype DeepKeysPrefix<T, TPrefix> = TPrefix extends keyof T & (number | string)\n ? `${TPrefix}.${DeepKeys<T[TPrefix]> & string}`\n : never\n\nexport type DeepValue<T, TProp> = T extends Record<string | number, any>\n ? TProp extends `${infer TBranch}.${infer TDeepProp}`\n ? DeepValue<T[TBranch], TDeepProp>\n : T[TProp & string]\n : never\n\ntype Narrowable = string | number | bigint | boolean\n\ntype NarrowRaw<A> =\n | (A extends [] ? [] : never)\n | (A extends Narrowable ? A : never)\n | {\n [K in keyof A]: A[K] extends Function ? A[K] : NarrowRaw<A[K]>\n }\n\nexport type Narrow<A> = Try<A, [], NarrowRaw<A>>\n\ntype Try<A1, A2, Catch = never> = A1 extends A2 ? A1 : Catch\n","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 onSubmit?: (values: TData, formApi: FormApi<TData>) => void\n onInvalidSubmit?: (values: TData, formApi: FormApi<TData>) => void\n validate?: (values: TData, formApi: FormApi<TData>) => Promise<any>\n defaultValidatePristine?: boolean\n defaultValidateOn?: ValidationCause\n defaultValidateAsyncOn?: ValidationCause\n defaultValidateAsyncDebounceMs?: number\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: !opts?.validate,\n }),\n {\n onUpdate: (next) => {\n // Computed state\n const fieldMetaValues = Object.values(next.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 || next.isFormValidating\n const isFormValid = !next.formError\n const isValid = isFieldsValid && isFormValid\n const canSubmit =\n (next.submissionAttempts === 0 && !isTouched) ||\n (!isValidating && !next.isSubmitting && isValid)\n\n next = {\n ...next,\n isFieldsValidating,\n isFieldsValid,\n isFormValid,\n isValid,\n canSubmit,\n isTouched,\n }\n\n // Create a shortcut for the state\n // Write it back to the store\n this.store.state = next\n this.state = next\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 if (\n options.defaultState &&\n options.defaultState !== this.options.defaultState\n ) {\n this.store.setState((prev) => ({\n ...prev,\n ...options.defaultState,\n }))\n }\n\n if (options.defaultValues !== this.options.defaultValues) {\n this.store.setState((prev) => ({\n ...prev,\n values: options.defaultValues as TFormData,\n }))\n }\n })\n\n this.options = options\n }\n\n reset = () =>\n this.store.setState(() => getDefaultFormState(this.options.defaultValues!))\n\n validateAllFields = async () => {\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 if (instance.options.validate) {\n fieldValidationPromises.push(instance.validate())\n }\n }\n })\n },\n )\n })\n\n return Promise.all(fieldValidationPromises)\n }\n\n validateForm = async () => {\n const { validate } = this.options\n\n if (!validate) {\n return\n }\n\n // Use the formValidationCount for all field instances to\n // track freshness of the validation\n this.store.setState((prev) => ({\n ...prev,\n isValidating: true,\n formValidationCount: prev.formValidationCount + 1,\n }))\n\n const formValidationCount = this.state.formValidationCount\n\n const checkLatest = () =>\n formValidationCount === this.state.formValidationCount\n\n if (!this.validationMeta.validationPromise) {\n this.validationMeta.validationPromise = new Promise((resolve, reject) => {\n this.validationMeta.validationResolve = resolve\n this.validationMeta.validationReject = reject\n })\n }\n\n const doValidation = async () => {\n try {\n const error = await validate(this.state.values, this)\n\n if (checkLatest()) {\n this.store.setState((prev) => ({\n ...prev,\n isValidating: false,\n error: error\n ? typeof error === 'string'\n ? error\n : 'Invalid Form Values'\n : null,\n }))\n\n this.validationMeta.validationResolve?.(error)\n }\n } catch (err) {\n if (checkLatest()) {\n this.validationMeta.validationReject?.(err)\n }\n } finally {\n delete this.validationMeta.validationPromise\n }\n }\n\n doValidation()\n\n return this.validationMeta.validationPromise\n }\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()\n\n // Fields are invalid, do not submit\n if (!this.state.isFieldsValid) {\n done()\n this.options.onInvalidSubmit?.(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.onInvalidSubmit?.(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 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 ?? true\n\n this.store.batch(() => {\n this.store.setState((prev) => {\n return {\n ...prev,\n values: setBy(prev.values, field, updater),\n }\n })\n\n if (touch) {\n this.setFieldMeta(field, (prev) => ({\n ...prev,\n isTouched: true,\n }))\n }\n })\n }\n\n pushFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n value: DeepValue<TFormData, TField>,\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>,\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n // invariant( // TODO: bring in invariant\n // Array.isArray(prev),\n // `Cannot insert a field value into a non-array field. Check that this field's existing value is an array: ${field}.`\n // )\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 // invariant( // TODO: bring in invariant\n // Array.isArray(prev),\n // `Cannot insert a field value into a non-array field. Check that this field's existing value is an array: ${field}.`\n // )\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","//\nimport type { DeepKeys, DeepValue, RequiredByKey, Updater } from './utils'\nimport type { FormApi, ValidationError } from './FormApi'\nimport { Store } from '@tanstack/store'\n\nexport type ValidationCause = 'change' | 'blur' | 'submit'\n\nexport interface FieldOptions<TData, TFormData> {\n name: unknown extends TFormData ? string : DeepKeys<TFormData>\n index?: TData extends any[] ? number : never\n defaultValue?: TData\n validate?: (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n ) => ValidationError\n validateAsync?: (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n ) => ValidationError | Promise<ValidationError>\n validatePristine?: boolean // Default: false\n validateOn?: ValidationCause // Default: 'change'\n validateAsyncOn?: ValidationCause // Default: 'blur'\n validateAsyncDebounceMs?: number\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: (updater: Updater<TData>) => void\n onBlur: (event: any) => void\n}\n\nexport type InputProps = {\n value: string\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\nexport class FieldApi<TData, TFormData> {\n uid: number\n form: FormApi<TFormData>\n name!: DeepKeys<TFormData>\n store!: Store<FieldState<TData>>\n state!: FieldState<TData>\n options: RequiredByKey<\n FieldOptions<TData, TFormData>,\n | 'validatePristine'\n | 'validateOn'\n | 'validateAsyncOn'\n | 'validateAsyncDebounceMs'\n > = {} 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<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 ...this.options.defaultMeta,\n },\n },\n {\n onUpdate: (next) => {\n next.meta.touchedError = next.meta.isTouched\n ? next.meta.error\n : undefined\n\n // Do not validate pristine fields\n const prevState = this.state\n this.state = next\n if (next.value !== prevState.value) {\n this.validate('change', next.value)\n }\n },\n },\n )\n\n this.state = this.store.state\n this.update(opts)\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.#updateStore()\n })\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 #updateStore = () => {\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 update = (opts: FieldApiOptions<TData, TFormData>) => {\n this.options = {\n validatePristine: this.form.options.defaultValidatePristine ?? false,\n validateOn: this.form.options.defaultValidateOn ?? 'change',\n validateAsyncOn: this.form.options.defaultValidateAsyncOn ?? 'blur',\n validateAsyncDebounceMs:\n this.form.options.defaultValidateAsyncDebounceMs ?? 0,\n ...opts,\n }\n\n // Default Value\n if (\n this.state.value === undefined &&\n this.options.defaultValue !== undefined\n ) {\n this.setValue(this.options.defaultValue)\n }\n\n // Default Meta\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.getMeta() === undefined) {\n this.setMeta(this.state.meta)\n }\n }\n\n getValue = (): TData => {\n return this.form.getFieldValue(this.name)\n }\n setValue = (\n updater: Updater<TData>,\n options?: { touch?: boolean; notify?: boolean },\n ) => this.form.setFieldValue(this.name, updater as any, options)\n\n getMeta = (): FieldMeta => this.form.getFieldMeta(this.name)\n setMeta = (updater: Updater<FieldMeta>) =>\n this.form.setFieldMeta(this.name, updater)\n\n getInfo = () => this.form.getFieldInfo(this.name)\n\n pushValue = (value: TData extends any[] ? TData[number] : never) =>\n this.form.pushFieldValue(this.name, value as any)\n insertValue = (index: number, value: TData) =>\n this.form.insertFieldValue(this.name, index, value as any)\n removeValue = (index: number) => this.form.removeFieldValue(this.name, index)\n swapValues = (aIndex: number, bIndex: number) =>\n this.form.swapFieldValues(this.name, aIndex, bIndex)\n\n getSubField = <TName extends DeepKeys<TData>>(name: TName) =>\n new FieldApi<DeepValue<TData, TName>, TFormData>({\n name: `${this.name}.${name}` as any,\n form: this.form,\n })\n\n validateSync = async (value = this.state.value) => {\n const { validate } = this.options\n\n if (!validate) {\n return\n }\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, this))\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) => {\n const { validateAsync, validateAsyncDebounceMs } = this.options\n\n if (!validateAsync) {\n return\n }\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 (validateAsyncDebounceMs > 0) {\n await new Promise((r) => setTimeout(r, validateAsyncDebounceMs))\n }\n\n // Only kick off validation if this validation is the latest attempt\n if (checkLatest()) {\n try {\n const rawError = await validateAsync(value, this)\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 shouldValidate = (isAsync: boolean, cause?: ValidationCause) => {\n const { validateOn, validateAsyncOn } = this.options\n const level = getValidationCauseLevel(cause)\n\n // Must meet *at least* the validation level to validate,\n // e.g. if validateOn is 'change' and validateCause is 'blur',\n // the field will still validate\n return Object.keys(validateCauseLevels).some((d) =>\n isAsync\n ? validateAsyncOn\n : validateOn === d && level >= validateCauseLevels[d],\n )\n }\n\n validate = async (\n cause?: ValidationCause,\n value?: TData,\n ): Promise<ValidationError> => {\n // If the field is pristine and validatePristine is false, do not validate\n if (!this.options.validatePristine && !this.state.meta.isTouched) return\n\n // Attempt to sync validate first\n if (this.shouldValidate(false, cause)) {\n this.validateSync(value)\n }\n\n // If there is an error, return it, do not attempt async validation\n if (this.state.meta.error) {\n return this.state.meta.error\n }\n\n // No error? Attempt async validation\n if (this.shouldValidate(true, cause)) {\n return this.validateAsync(value)\n }\n\n // If there is no sync error or async validation attempt, there is no error\n return undefined\n }\n\n getChangeProps = <T extends UserChangeProps<any>>(\n props: T = {} as T,\n ): ChangeProps<TData> & Omit<T, keyof ChangeProps<TData>> => {\n return {\n ...props,\n value: this.state.value,\n onChange: (value) => {\n this.setValue(value)\n props.onChange?.(value)\n },\n onBlur: (e) => {\n this.setMeta((prev) => ({ ...prev, isTouched: true }))\n this.validate('blur')\n props.onBlur?.(e)\n },\n } as ChangeProps<TData> & Omit<T, keyof ChangeProps<TData>>\n }\n\n getInputProps = <T extends UserInputProps>(\n props: T = {} as T,\n ): InputProps & Omit<T, keyof InputProps> => {\n return {\n ...props,\n value: String(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 }\n }\n}\n\nconst validateCauseLevels = {\n change: 0,\n blur: 1,\n submit: 2,\n}\n\nfunction getValidationCauseLevel(cause?: ValidationCause) {\n return !cause ? 3 : validateCauseLevels[cause]\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":["functionalUpdate","updater","input","getBy","obj","path","pathArray","makePathArray","pathObj","reduce","current","pathPart","undefined","setBy","_path","doSet","parent","length","key","shift","Array","isArray","prefix","slice","Error","reFindNumbers0","reFindNumbers1","reFindNumbers2","reFindNumbers3","reFindMultiplePeriods","intPrefix","intReplace","str","replace","split","map","d","indexOf","parseInt","substring","getDefaultFormState","defaultState","values","fieldMeta","canSubmit","isFieldsValid","isFieldsValidating","isFormValid","isFormValidating","isSubmitted","isSubmitting","isTouched","isValid","isValidating","submissionAttempts","formValidationCount","FormApi","constructor","opts","options","fieldInfo","validationMeta","update","store","batch","setState","prev","defaultValues","reset","validateAllFields","fieldValidationPromises","Object","forEach","field","instances","instance","state","meta","setMeta","validate","push","Promise","all","validateForm","checkLatest","validationPromise","resolve","reject","validationResolve","validationReject","doValidation","error","err","handleSubmit","e","preventDefault","stopPropagation","old","done","onInvalidSubmit","onSubmit","getFieldValue","getFieldMeta","getFieldInfo","setFieldMeta","setFieldValue","touch","pushFieldValue","value","insertFieldValue","index","i","removeFieldValue","filter","_d","swapFieldValues","index1","index2","prev1","prev2","Store","onUpdate","next","fieldMetaValues","some","formError","uid","FieldApi","mount","info","getInfo","unsubscribe","form","subscribe","keys","name","nextValue","getValue","nextMeta","getMeta","validatePristine","defaultValidatePristine","validateOn","defaultValidateOn","validateAsyncOn","defaultValidateAsyncOn","validateAsyncDebounceMs","defaultValidateAsyncDebounceMs","defaultValue","setValue","pushValue","insertValue","removeValue","swapValues","aIndex","bIndex","getSubField","validateSync","validationCount","normalizeError","cancelValidateAsync","count","validationAsyncCount","validateAsync","r","setTimeout","rawError","shouldValidate","isAsync","cause","level","getValidationCauseLevel","validateCauseLevels","getChangeProps","props","onChange","onBlur","getInputProps","String","target","defaultMeta","touchedError","prevState","change","blur","submit"],"mappings":"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"}
|
package/build/stats-html.html
CHANGED
|
@@ -2669,7 +2669,7 @@ var drawChart = (function (exports) {
|
|
|
2669
2669
|
</script>
|
|
2670
2670
|
<script>
|
|
2671
2671
|
/*<!--*/
|
|
2672
|
-
const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.production.js","children":[{"name":"node_modules/.pnpm/@tanstack+store@0.0.1-beta.84/node_modules/@tanstack/store/build/esm/index.js","uid":"
|
|
2672
|
+
const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.production.js","children":[{"name":"node_modules/.pnpm/@tanstack+store@0.0.1-beta.84/node_modules/@tanstack/store/build/esm/index.js","uid":"766a-1"},{"name":"packages/form-core/src","children":[{"uid":"766a-3","name":"utils.ts"},{"uid":"766a-5","name":"FormApi.ts"},{"uid":"766a-9","name":"FieldApi.ts"},{"uid":"766a-11","name":"index.ts"}]},{"uid":"766a-7","name":"\u0000rollupPluginBabelHelpers.js"}]}],"isRoot":true},"nodeParts":{"766a-1":{"renderedLength":1288,"gzipLength":497,"brotliLength":0,"mainUid":"766a-0"},"766a-3":{"renderedLength":2008,"gzipLength":694,"brotliLength":0,"mainUid":"766a-2"},"766a-5":{"renderedLength":10297,"gzipLength":2316,"brotliLength":0,"mainUid":"766a-4"},"766a-7":{"renderedLength":353,"gzipLength":227,"brotliLength":0,"mainUid":"766a-6"},"766a-9":{"renderedLength":10622,"gzipLength":2522,"brotliLength":0,"mainUid":"766a-8"},"766a-11":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"mainUid":"766a-10"}},"nodeMetas":{"766a-0":{"id":"/node_modules/.pnpm/@tanstack+store@0.0.1-beta.84/node_modules/@tanstack/store/build/esm/index.js","moduleParts":{"index.production.js":"766a-1"},"imported":[],"importedBy":[{"uid":"766a-4"},{"uid":"766a-8"}]},"766a-2":{"id":"/packages/form-core/src/utils.ts","moduleParts":{"index.production.js":"766a-3"},"imported":[],"importedBy":[{"uid":"766a-10"},{"uid":"766a-4"}]},"766a-4":{"id":"/packages/form-core/src/FormApi.ts","moduleParts":{"index.production.js":"766a-5"},"imported":[{"uid":"766a-0"},{"uid":"766a-2"}],"importedBy":[{"uid":"766a-10"}]},"766a-6":{"id":"\u0000rollupPluginBabelHelpers.js","moduleParts":{"index.production.js":"766a-7"},"imported":[],"importedBy":[{"uid":"766a-8"}]},"766a-8":{"id":"/packages/form-core/src/FieldApi.ts","moduleParts":{"index.production.js":"766a-9"},"imported":[{"uid":"766a-6"},{"uid":"766a-0"}],"importedBy":[{"uid":"766a-10"}]},"766a-10":{"id":"/packages/form-core/src/index.ts","moduleParts":{"index.production.js":"766a-11"},"imported":[{"uid":"766a-4"},{"uid":"766a-8"},{"uid":"766a-2"}],"importedBy":[],"isEntry":true}},"env":{"rollup":"2.78.1"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
|
|
2673
2673
|
|
|
2674
2674
|
const run = () => {
|
|
2675
2675
|
const width = window.innerWidth;
|