@de100/form-echo
Version:
A form state management for fields validations and errors
1 lines • 40.3 kB
Source Map (JSON)
{"version":3,"sources":["../src/utils/FormStoreField.js","../src/utils/zod.ts","../src/utils/zustand.ts","../src/utils/index.ts"],"sourcesContent":["/**\r\n * @template Name\r\n * @template Value\r\n * @typedef FieldMetadata\r\n *\r\n * @prop {Name & string} name\r\n * @prop {Value} initialValue\r\n */\r\n\r\n/** @exports FieldMetadata */\r\n\r\n/**\r\n * @template FieldsValues\r\n * @template {keyof FieldsValues} Key\r\n */\r\nexport default class FormStoreField {\r\n\t/** @type {string} */\r\n\tid;\r\n\r\n\t/** @type {FieldsValues[Key]} */\r\n\tvalue;\r\n\r\n\t/** @type {FieldMetadata<Key, FieldsValues[Key]>} */\r\n\tmetadata;\r\n\r\n\t/** @type {((fieldValue: unknown) => Exclude<FieldsValues[Key], (value: FieldsValues[Key]) => FieldsValues[Key]>) | undefined} */\r\n\tvalueFromFieldToStore;\r\n\r\n\t/** @type {(storeValue: FieldsValues[Key]) => string | ReadonlyArray<string> | number | undefined} */\r\n\tvalueFromStoreToField;\r\n\r\n\t/**\r\n\t * @param {{\r\n\t * id: string;\r\n\t * value: FieldsValues[Key];\r\n\t * metadata: FieldMetadata<Key, FieldsValues[Key]>;\r\n\t * valueFromFieldToStore?: (fieldValue: unknown) => Exclude<FieldsValues[Key], (value: FieldsValues[Key]) => FieldsValues[Key]>;\r\n\t * valueFromStoreToField?: (StoreValue: FieldsValues[Key]) => string | ReadonlyArray<string> | number | undefined;\r\n\t * }} params\r\n\t */\r\n\tconstructor(params) {\r\n\t\t/** @type {string} */\r\n\t\tthis.id = params.id;\r\n\r\n\t\t/** @type {FieldsValues[Key]} */\r\n\t\tthis.value = params.value;\r\n\r\n\t\t/** @type {FieldMetadata<Key, FieldsValues[Key]>} */\r\n\t\tthis.metadata = params.metadata;\r\n\r\n\t\t/** @type {boolean} */\r\n\r\n\t\t/** @type {(fieldValue: unknown) => Exclude<FieldsValues[Key], (value: FieldsValues[Key]) => FieldsValues[Key]>} */\r\n\t\tthis.valueFromFieldToStore = params.valueFromFieldToStore;\r\n\r\n\t\t/** @type {(StoreValue: FieldsValues[Key]) => string | ReadonlyArray<string> | number | undefined} */\r\n\t\tthis.valueFromStoreToField =\r\n\t\t\tparams.valueFromStoreToField ??\r\n\t\t\t/**\r\n\t\t\t * @param {FieldsValues[Key]} StoreValue\r\n\t\t\t * @returns string | ReadonlyArray<string> | number | undefined\r\n\t\t\t */\r\n\t\t\t((value) => value ?? '');\r\n\t}\r\n\r\n\t/**\r\n\t * @description Gets the field value converted _(using the passed `valueFromStoreToField` if not it will just return the original value)_ from the store value.\r\n\t *\r\n\t * @type {string | ReadonlyArray<string> | number | undefined}\r\n\t * */\r\n\tget storeToFieldValue() {\r\n\t\treturn this.valueFromStoreToField(this.value);\r\n\t}\r\n}\r\n","import { type ZodError, type ZodSchema } from 'zod';\r\n\r\nexport function isZodValidator(validator: unknown): validator is ZodSchema {\r\n\treturn !!(\r\n\t\tvalidator instanceof Object &&\r\n\t\t'parseAsync' in validator &&\r\n\t\ttypeof validator.parseAsync === 'function'\r\n\t);\r\n}\r\n\r\nexport function isZodError(error: unknown): error is ZodError {\r\n\treturn error instanceof Object && 'errors' in error;\r\n}\r\n\r\n// export const generateUUIDV4 = () =>\r\n// \t'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n// \t\tconst r = (Math.random() * 16) | 0;\r\n// \t\tconst v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n// \t\treturn v.toString(16);\r\n// \t});\r\n\r\nexport function errorFormatter(error: unknown) {\r\n\tif (isZodError(error)) return error.format()._errors.join(', ');\r\n\r\n\tif (error instanceof Error) return error.message;\r\n\r\n\treturn 'Something went wrong!';\r\n}\r\n","import { createStore } from 'zustand';\r\nimport { type CreateFormStoreProps } from '../types';\r\nimport { createFormStoreBuilder } from '.';\r\nimport { useId, useState } from 'react';\r\n\r\nexport const handleCreateFormStore = <FieldsValues, ValidationsHandlers>(\r\n\tparams: CreateFormStoreProps<FieldsValues, ValidationsHandlers>,\r\n) => createStore(createFormStoreBuilder(params));\r\n\r\nexport const useCreateFormStore = <FieldsValues, ValidationsHandlers>(\r\n\tprops: Omit<\r\n\t\tCreateFormStoreProps<FieldsValues, ValidationsHandlers>,\r\n\t\t'baseId'\r\n\t> & {\r\n\t\tbaseId?: CreateFormStoreProps<FieldsValues, ValidationsHandlers>['baseId'];\r\n\t},\r\n) => {\r\n\tconst baseId = useId();\r\n\tconst formStore = useState(\r\n\t\thandleCreateFormStore({ ...props, baseId: props.baseId || baseId }),\r\n\t);\r\n\r\n\treturn formStore[0];\r\n};\r\n","import FormStoreField from './FormStoreField';\r\n\r\nimport { type FormEvent } from 'react';\r\nimport {\r\n\ttype ValidationEvents,\r\n\ttype CreateFormStoreProps,\r\n\ttype FormStoreShape,\r\n\ttype GetFromFormStoreShape,\r\n\t// type HandlePreSubmit,\r\n\ttype HandleSubmitCB,\r\n\ttype GetValidationValuesFromSchema,\r\n} from '../types';\r\nimport { errorFormatter, isZodValidator } from './zod';\r\n\r\nexport * from './zod';\r\nexport * from './zustand';\r\n// export * from './helpers';\r\n\r\nexport {\r\n\t/**\r\n\t * @description field value helpers\r\n\t */\r\n\tdefault as fvh,\r\n} from './helpers/fieldValue';\r\n\r\ntype SetStateInternal<T> = (\r\n\tpartial: T | Partial<T> | ((state: T) => T | Partial<T>),\r\n\t// replace?: boolean | undefined,\r\n) => void;\r\n\r\nfunction createFormStoreMetadata<FieldsValues, ValidationsHandlers>(\r\n\tparams: CreateFormStoreProps<FieldsValues, ValidationsHandlers>,\r\n\tbaseId: string,\r\n) {\r\n\ttype FormStore = FormStoreShape<FieldsValues, ValidationsHandlers>;\r\n\r\n\tif (!params.initialValues || typeof params.initialValues !== 'object')\r\n\t\tthrow new Error('');\r\n\r\n\tconst metadata = {\r\n\t\tbaseId,\r\n\t\tformId: `${baseId}-form`,\r\n\t\tfieldsNames: {},\r\n\t\tfieldsNamesMap: {},\r\n\t\t//\r\n\t\tvalidatedFieldsNames: [],\r\n\t\tvalidatedFieldsNamesMap: {},\r\n\t\t// //\r\n\t\tmanualValidatedFields: [],\r\n\t\tmanualValidatedFieldsMap: [],\r\n\t\t// //\r\n\t\treferencedValidatedFields: [],\r\n\t\treferencedValidatedFieldsMap: [],\r\n\t} as unknown as FormStore['metadata'];\r\n\r\n\tmetadata.fieldsNames = Object.keys(\r\n\t\tparams.initialValues,\r\n\t) as typeof metadata.fieldsNames;\r\n\tfor (const fieldName of metadata.fieldsNames) {\r\n\t\tmetadata.fieldsNamesMap[fieldName] = true;\r\n\t}\r\n\tfor (const key in params.validationsHandlers) {\r\n\t\tmetadata.validatedFieldsNames.push(key);\r\n\t\tmetadata.validatedFieldsNamesMap[key] = true;\r\n\r\n\t\tif (key in metadata.fieldsNamesMap) {\r\n\t\t\tmetadata.referencedValidatedFields.push(\r\n\t\t\t\tkey as unknown as (typeof metadata)['referencedValidatedFields'][number],\r\n\t\t\t);\r\n\t\t\tmetadata.referencedValidatedFieldsMap[\r\n\t\t\t\tkey as unknown as (typeof metadata)['referencedValidatedFields'][number]\r\n\t\t\t] = true;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tmetadata.manualValidatedFields.push(\r\n\t\t\tkey as unknown as (typeof metadata)['manualValidatedFields'][number],\r\n\t\t);\r\n\t\t(metadata.manualValidatedFieldsMap as Record<string, true>)[\r\n\t\t\tkey // as unknown as (typeof metadata)['manualValidatedFieldsMap'][number]\r\n\t\t] = true;\r\n\t}\r\n\r\n\treturn metadata;\r\n}\r\n\r\nfunction createFormStoreValidations<FieldsValues, ValidationsHandlers>(\r\n\tparams: CreateFormStoreProps<FieldsValues, ValidationsHandlers>,\r\n\tmetadata: FormStoreShape<FieldsValues, ValidationsHandlers>['metadata'],\r\n) {\r\n\ttype FormStore = FormStoreShape<FieldsValues, ValidationsHandlers>;\r\n\r\n\tlet fieldValidationEvents: NonNullable<typeof params.validationEvents> = {\r\n\t\tsubmit: true,\r\n\t\tblur: true,\r\n\t};\r\n\tlet isFieldHavingPassedValidations = false;\r\n\tlet fieldValidationEventKey: ValidationEvents;\r\n\r\n\tconst validations: FormStore['validations'] = {} as FormStore['validations'];\r\n\tfor (const fieldName of metadata.validatedFieldsNames) {\r\n\t\tconst fieldValidationsHandler =\r\n\t\t\tparams.validationsHandlers?.[\r\n\t\t\t\tfieldName as keyof GetFromFormStoreShape<FormStore> &\r\n\t\t\t\t\tkeyof GetFromFormStoreShape<FormStore, 'validationHandlers'>\r\n\t\t\t];\r\n\r\n\t\tvalidations[fieldName] = {\r\n\t\t\thandler: !fieldValidationsHandler\r\n\t\t\t\t? undefined\r\n\t\t\t\t: isZodValidator(fieldValidationsHandler)\r\n\t\t\t\t? (value: unknown) => fieldValidationsHandler.parse(value)\r\n\t\t\t\t: fieldValidationsHandler,\r\n\t\t\tcurrentDirtyEventsCounter: 0,\r\n\t\t\tfailedAttempts: 0,\r\n\t\t\tpassedAttempts: 0,\r\n\t\t\tevents: {\r\n\t\t\t\t// mount: { },\r\n\t\t\t\tblur: {\r\n\t\t\t\t\tfailedAttempts: 0,\r\n\t\t\t\t\tpassedAttempts: 0,\r\n\t\t\t\t\tisActive: params.validationEvents?.blur ?? true,\r\n\t\t\t\t\tisDirty: false,\r\n\t\t\t\t\terror: null,\r\n\t\t\t\t},\r\n\t\t\t\tchange: {\r\n\t\t\t\t\tfailedAttempts: 0,\r\n\t\t\t\t\tpassedAttempts: 0,\r\n\t\t\t\t\tisActive: params.validationEvents?.change ?? false,\r\n\t\t\t\t\tisDirty: false,\r\n\t\t\t\t\terror: null,\r\n\t\t\t\t},\r\n\t\t\t\tsubmit: {\r\n\t\t\t\t\tfailedAttempts: 0,\r\n\t\t\t\t\tpassedAttempts: 0,\r\n\t\t\t\t\tisActive: params.validationEvents?.submit ?? true,\r\n\t\t\t\t\tisDirty: false,\r\n\t\t\t\t\terror: null,\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\tisDirty: false,\r\n\t\t\tmetadata: { name: fieldName },\r\n\t\t} as NonNullable<FormStore['validations'][keyof FormStore['validations']]>;\r\n\r\n\t\tif (params.validationEvents) {\r\n\t\t\tisFieldHavingPassedValidations = true;\r\n\t\t\tfieldValidationEvents = {\r\n\t\t\t\t...fieldValidationEvents,\r\n\t\t\t\t...params.validationEvents,\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (isFieldHavingPassedValidations) {\r\n\t\t\tfor (fieldValidationEventKey in fieldValidationEvents) {\r\n\t\t\t\tvalidations[fieldName].events[fieldValidationEventKey].isActive =\r\n\t\t\t\t\t!!typeof fieldValidationEvents[fieldValidationEventKey];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn validations;\r\n}\r\n\r\nfunction createFormStoreFields<FieldsValues, ValidationsHandlers>(\r\n\tparams: CreateFormStoreProps<FieldsValues, ValidationsHandlers>,\r\n\tbaseId: string,\r\n\tmetadata: FormStoreShape<FieldsValues, ValidationsHandlers>['metadata'],\r\n) {\r\n\ttype FormStore = FormStoreShape<FieldsValues, ValidationsHandlers>;\r\n\r\n\tconst fields = {} as FormStore['fields'];\r\n\tfor (const fieldName of metadata.fieldsNames) {\r\n\t\tfields[fieldName] = new FormStoreField({\r\n\t\t\tvalue: params.initialValues[fieldName],\r\n\t\t\tvalueFromFieldToStore: params.valuesFromFieldsToStore?.[fieldName]\r\n\t\t\t\t? params.valuesFromFieldsToStore[fieldName]\r\n\t\t\t\t: undefined,\r\n\t\t\tvalueFromStoreToField: params.valuesFromStoreToFields?.[fieldName]\r\n\t\t\t\t? params.valuesFromStoreToFields[fieldName]\r\n\t\t\t\t: undefined,\r\n\t\t\tid: `${baseId}field-${String(fieldName)}`,\r\n\t\t\tmetadata: {\r\n\t\t\t\tname: fieldName,\r\n\t\t\t\tinitialValue: params.initialValues[fieldName],\r\n\t\t\t},\r\n\t\t} as (typeof fields)[typeof fieldName]);\r\n\t}\r\n\r\n\treturn fields;\r\n}\r\n\r\nfunction _setFieldError<FieldsValues, ValidationsHandlers>(params: {\r\n\tname: keyof ValidationsHandlers;\r\n\tmessage: string | null;\r\n\tvalidationEvent: ValidationEvents;\r\n}) {\r\n\treturn function (\r\n\t\tcurrentState: FormStoreShape<FieldsValues, ValidationsHandlers>,\r\n\t): FormStoreShape<FieldsValues, ValidationsHandlers> {\r\n\t\tif (\r\n\t\t\t!currentState.validations[params.name].events[params.validationEvent]\r\n\t\t\t\t.isActive\r\n\t\t)\r\n\t\t\treturn currentState;\r\n\r\n\t\tlet currentDirtyFieldsCounter = currentState.currentDirtyFieldsCounter;\r\n\t\tconst validation = {\r\n\t\t\t...currentState.validations[params.name],\r\n\t\t};\r\n\r\n\t\tif (params.message) {\r\n\t\t\tvalidation.failedAttempts++;\r\n\t\t\tvalidation.events[params.validationEvent].failedAttempts++;\r\n\r\n\t\t\tif (!validation.isDirty) {\r\n\t\t\t\tvalidation.currentDirtyEventsCounter++;\r\n\t\t\t\tif (validation.currentDirtyEventsCounter > 0) {\r\n\t\t\t\t\tcurrentDirtyFieldsCounter++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvalidation.events[params.validationEvent].error = {\r\n\t\t\t\tmessage: params.message,\r\n\t\t\t};\r\n\t\t\tvalidation.error = { message: params.message };\r\n\t\t\tvalidation.events[params.validationEvent].isDirty = true;\r\n\t\t\tvalidation.isDirty = true;\r\n\t\t} else {\r\n\t\t\tvalidation.passedAttempts++;\r\n\t\t\tvalidation.events[params.validationEvent].passedAttempts++;\r\n\r\n\t\t\tif (validation.isDirty) {\r\n\t\t\t\tvalidation.currentDirtyEventsCounter--;\r\n\t\t\t\tif (validation.currentDirtyEventsCounter === 0) {\r\n\t\t\t\t\tcurrentDirtyFieldsCounter--;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvalidation.events[params.validationEvent].error = null;\r\n\t\t\tvalidation.error = null;\r\n\t\t\tvalidation.events[params.validationEvent].isDirty = false;\r\n\t\t\tvalidation.isDirty = false;\r\n\t\t}\r\n\r\n\t\tcurrentState.currentDirtyFieldsCounter = currentDirtyFieldsCounter;\r\n\t\tcurrentState.isDirty = currentDirtyFieldsCounter > 0;\r\n\t\tcurrentState.validations = {\r\n\t\t\t...currentState.validations,\r\n\t\t\t[params.name]: validation,\r\n\t\t};\r\n\r\n\t\treturn currentState;\r\n\t};\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ntype TFunction = (...args: any[]) => any;\r\ntype AnyValueExceptFunctions = // eslint-disable-next-line @typescript-eslint/ban-types\r\n\tExclude<{} | null | undefined, TFunction>;\r\nfunction _setFieldValue<\r\n\tFieldsValues,\r\n\tValidationsHandlers,\r\n\tName extends keyof FieldsValues,\r\n>(\r\n\tname: Name,\r\n\tvalueOrUpdater:\r\n\t\t| AnyValueExceptFunctions\r\n\t\t| ((value: FieldsValues[Name]) => FieldsValues[Name]),\r\n) {\r\n\treturn function (\r\n\t\tcurrentState: FormStoreShape<FieldsValues, ValidationsHandlers>,\r\n\t): FormStoreShape<FieldsValues, ValidationsHandlers> {\r\n\t\tconst field = currentState.fields[name];\r\n\r\n\t\tfield.value = (\r\n\t\t\ttypeof valueOrUpdater === 'function'\r\n\t\t\t\t? valueOrUpdater(field.value)\r\n\t\t\t\t: valueOrUpdater\r\n\t\t) as FieldsValues[typeof name];\r\n\r\n\t\treturn {\r\n\t\t\t...currentState,\r\n\t\t\tfields: {\r\n\t\t\t\t...currentState.fields,\r\n\t\t\t\t[name]: field,\r\n\t\t\t},\r\n\t\t};\r\n\t};\r\n}\r\n\r\nconst itemsToResetDefaults = {\r\n\tfields: true,\r\n\tvalidations: true,\r\n\tsubmit: false,\r\n\tfocus: true,\r\n};\r\n\r\nexport function createFormStoreBuilder<FieldsValues, ValidationsHandlers>(\r\n\tparams: CreateFormStoreProps<FieldsValues, ValidationsHandlers>,\r\n) {\r\n\ttype FormStore = FormStoreShape<FieldsValues, ValidationsHandlers>;\r\n\r\n\tconst baseId = params.baseId ? `${params.baseId}-` : '';\r\n\tconst metadata = createFormStoreMetadata(params, baseId);\r\n\tconst fields = createFormStoreFields(params, baseId, metadata);\r\n\tconst validations = createFormStoreValidations(params, metadata);\r\n\r\n\treturn (\r\n\t\tset: SetStateInternal<FormStore>,\r\n\t\tget: () => FormStore,\r\n\t): FormStore => {\r\n\t\treturn {\r\n\t\t\tbaseId,\r\n\t\t\tmetadata,\r\n\t\t\tvalidations,\r\n\t\t\tfields,\r\n\t\t\tid: `${baseId}form`,\r\n\t\t\tisDirty: false,\r\n\t\t\tsubmit: {\r\n\t\t\t\tcounter: 0,\r\n\t\t\t\tpassedAttempts: 0,\r\n\t\t\t\tfailedAttempts: 0,\r\n\t\t\t\terrorMessage: null,\r\n\t\t\t\tisActive: false,\r\n\t\t\t},\r\n\t\t\tfocus: { isActive: false, field: null },\r\n\t\t\tcurrentDirtyFieldsCounter: 0,\r\n\t\t\tgetFieldValues() {\r\n\t\t\t\tconst currentState = get();\r\n\t\t\t\tconst fieldsValues = {} as FieldsValues;\r\n\r\n\t\t\t\tlet fieldName: string;\r\n\t\t\t\tfor (fieldName in currentState.fields) {\r\n\t\t\t\t\tfieldsValues[fieldName as keyof FieldsValues] =\r\n\t\t\t\t\t\tcurrentState.fields[fieldName as keyof FieldsValues].value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn fieldsValues;\r\n\t\t\t},\r\n\t\t\tsetSubmitState(valueOrUpdater) {\r\n\t\t\t\tset(function (currentState) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\t// ...currentState,\r\n\t\t\t\t\t\tsubmit: {\r\n\t\t\t\t\t\t\t...currentState.submit,\r\n\t\t\t\t\t\t\t...(typeof valueOrUpdater === 'function'\r\n\t\t\t\t\t\t\t\t? valueOrUpdater(currentState.submit)\r\n\t\t\t\t\t\t\t\t: valueOrUpdater),\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tsetFocusState(fieldName, validationName, isActive) {\r\n\t\t\t\tset(function (currentState) {\r\n\t\t\t\t\tlet _currentState = currentState;\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!isActive &&\r\n\t\t\t\t\t\t_currentState.validations[validationName].events.blur.isActive\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t_currentState.validations[validationName].handler(\r\n\t\t\t\t\t\t\t\tvalidationName && fieldName !== validationName\r\n\t\t\t\t\t\t\t\t\t? _currentState.getFieldValues()\r\n\t\t\t\t\t\t\t\t\t: _currentState.fields[fieldName].value,\r\n\t\t\t\t\t\t\t\t'blur',\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t_currentState = _setFieldError<FieldsValues, ValidationsHandlers>(\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tname: validationName,\r\n\t\t\t\t\t\t\t\t\tmessage: null,\r\n\t\t\t\t\t\t\t\t\tvalidationEvent: 'blur',\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t)(_currentState);\r\n\t\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\t\tconst message = _currentState.errorFormatter(error, 'blur');\r\n\t\t\t\t\t\t\t_currentState = _setFieldError<FieldsValues, ValidationsHandlers>(\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tname: validationName,\r\n\t\t\t\t\t\t\t\t\tmessage,\r\n\t\t\t\t\t\t\t\t\tvalidationEvent: 'blur',\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t)(_currentState);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t_currentState.focus.isActive &&\r\n\t\t\t\t\t\t\t_currentState.focus.field.name !== fieldName\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\treturn _currentState;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\t..._currentState,\r\n\t\t\t\t\t\tfocus: isActive\r\n\t\t\t\t\t\t\t? {\r\n\t\t\t\t\t\t\t\t\tisActive: true,\r\n\t\t\t\t\t\t\t\t\tfield: {\r\n\t\t\t\t\t\t\t\t\t\tname: fieldName,\r\n\t\t\t\t\t\t\t\t\t\tid: _currentState.fields[fieldName].id,\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t: { isActive: false, field: null },\r\n\t\t\t\t\t};\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tresetFormStore: function (itemsToReset = itemsToResetDefaults) {\r\n\t\t\t\treturn set(function (currentState) {\r\n\t\t\t\t\tconst fields = currentState.fields;\r\n\t\t\t\t\tconst validations = currentState.validations;\r\n\t\t\t\t\tlet isDirty = currentState.isDirty;\r\n\t\t\t\t\tlet submit = currentState.submit;\r\n\t\t\t\t\tlet focus = currentState.focus;\r\n\r\n\t\t\t\t\tif (itemsToReset.fields) {\r\n\t\t\t\t\t\tlet fieldName: keyof typeof fields;\r\n\t\t\t\t\t\tfor (fieldName in fields) {\r\n\t\t\t\t\t\t\tfields[fieldName].value = fields[fieldName].metadata.initialValue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (itemsToReset.validations) {\r\n\t\t\t\t\t\tfor (const key in validations) {\r\n\t\t\t\t\t\t\tvalidations[key].failedAttempts = 0;\r\n\t\t\t\t\t\t\tvalidations[key].passedAttempts = 0;\r\n\t\t\t\t\t\t\tvalidations[key].isDirty = false;\r\n\t\t\t\t\t\t\tvalidations[key].error = null;\r\n\r\n\t\t\t\t\t\t\tlet eventKey: keyof (typeof validations)[typeof key]['events'];\r\n\t\t\t\t\t\t\tfor (eventKey in validations[key].events) {\r\n\t\t\t\t\t\t\t\t// validations[key].events[eventKey].\r\n\t\t\t\t\t\t\t\tvalidations[key].events[eventKey].failedAttempts = 0;\r\n\t\t\t\t\t\t\t\tvalidations[key].events[eventKey].passedAttempts = 0;\r\n\t\t\t\t\t\t\t\tvalidations[key].events[eventKey].isDirty = false;\r\n\t\t\t\t\t\t\t\tvalidations[key].events[eventKey].error = null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tisDirty = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (itemsToReset.submit) {\r\n\t\t\t\t\t\tsubmit = {\r\n\t\t\t\t\t\t\tcounter: 0,\r\n\t\t\t\t\t\t\tpassedAttempts: 0,\r\n\t\t\t\t\t\t\tfailedAttempts: 0,\r\n\t\t\t\t\t\t\terrorMessage: null,\r\n\t\t\t\t\t\t\tisActive: false,\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (itemsToReset.focus) {\r\n\t\t\t\t\t\tfocus = {\r\n\t\t\t\t\t\t\tisActive: false,\r\n\t\t\t\t\t\t\tfield: null,\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\t// ...currentState,\r\n\t\t\t\t\t\tfields,\r\n\t\t\t\t\t\tvalidations,\r\n\t\t\t\t\t\tisDirty,\r\n\t\t\t\t\t\tsubmit,\r\n\t\t\t\t\t\tfocus,\r\n\t\t\t\t\t};\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tsetFieldValue(name, value) {\r\n\t\t\t\treturn set(_setFieldValue(name, value));\r\n\t\t\t},\r\n\t\t\tsetFieldError(params) {\r\n\t\t\t\tset(_setFieldError(params));\r\n\t\t\t},\r\n\t\t\terrorFormatter: params.errorFormatter ?? errorFormatter,\r\n\t\t\thandleInputChange(name, valueOrUpdater, validationName) {\r\n\t\t\t\tlet currentState = get();\r\n\t\t\t\tconst field = currentState.fields[name];\r\n\r\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\r\n\t\t\t\tconst _value =\r\n\t\t\t\t\ttypeof valueOrUpdater === 'function'\r\n\t\t\t\t\t\t? valueOrUpdater(field.value)\r\n\t\t\t\t\t\t: valueOrUpdater;\r\n\t\t\t\tconst value = field.valueFromFieldToStore\r\n\t\t\t\t\t? field.valueFromFieldToStore(_value)\r\n\t\t\t\t\t: (_value as FieldsValues[typeof name]);\r\n\r\n\t\t\t\tconst _validationName = (\r\n\t\t\t\t\tvalidationName\r\n\t\t\t\t\t\t? validationName\r\n\t\t\t\t\t\t: // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n\t\t\t\t\t\t// @ts-ignore\r\n\t\t\t\t\t\tcurrentState.metadata.referencedValidatedFieldsMap[name]\r\n\t\t\t\t\t\t? name\r\n\t\t\t\t\t\t: undefined\r\n\t\t\t\t) as typeof validationName;\r\n\r\n\t\t\t\tconst setFieldValue = _setFieldValue<\r\n\t\t\t\t\tFieldsValues,\r\n\t\t\t\t\tValidationsHandlers,\r\n\t\t\t\t\ttypeof name\r\n\t\t\t\t>;\r\n\t\t\t\tconst setFieldError = _setFieldError<FieldsValues, ValidationsHandlers>;\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\t_validationName &&\r\n\t\t\t\t\tcurrentState.validations[_validationName].events['change'].isActive\r\n\t\t\t\t) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tcurrentState = setFieldValue(\r\n\t\t\t\t\t\t\tname,\r\n\t\t\t\t\t\t\tcurrentState.validations[_validationName].handler(\r\n\t\t\t\t\t\t\t\tvalidationName &&\r\n\t\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n\t\t\t\t\t\t\t\t\t// @ts-ignore\r\n\t\t\t\t\t\t\t\t\tvalidationName !== name\r\n\t\t\t\t\t\t\t\t\t? currentState.getFieldValues()\r\n\t\t\t\t\t\t\t\t\t: value,\r\n\t\t\t\t\t\t\t\t'change',\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t)(currentState);\r\n\t\t\t\t\t\tcurrentState = setFieldError({\r\n\t\t\t\t\t\t\tname: _validationName,\r\n\t\t\t\t\t\t\tmessage: null,\r\n\t\t\t\t\t\t\tvalidationEvent: 'change',\r\n\t\t\t\t\t\t})(currentState);\r\n\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\tcurrentState = setFieldError({\r\n\t\t\t\t\t\t\tname: _validationName,\r\n\t\t\t\t\t\t\tmessage: currentState.errorFormatter(error, 'change'),\r\n\t\t\t\t\t\t\tvalidationEvent: 'change',\r\n\t\t\t\t\t\t})(currentState);\r\n\r\n\t\t\t\t\t\tcurrentState = setFieldValue(name, value)(currentState);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcurrentState = setFieldValue(name, value)(currentState);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tset(currentState);\r\n\t\t\t},\r\n\t\t\tgetFieldEventsListeners(name, validationName) {\r\n\t\t\t\tconst currentState = get();\r\n\t\t\t\tconst _validationName = validationName ?? name;\r\n\t\t\t\treturn {\r\n\t\t\t\t\tonChange: (event: { target: { value: string } }) => {\r\n\t\t\t\t\t\tcurrentState.handleInputChange(name, event.target.value);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonFocus: () => {\r\n\t\t\t\t\t\tcurrentState.setFocusState(\r\n\t\t\t\t\t\t\tname,\r\n\t\t\t\t\t\t\t_validationName as keyof ValidationsHandlers,\r\n\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonBlur: () => {\r\n\t\t\t\t\t\tcurrentState.setFocusState(\r\n\t\t\t\t\t\t\tname,\r\n\t\t\t\t\t\t\t_validationName as keyof ValidationsHandlers,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t\thandleSubmit(cb: HandleSubmitCB<FieldsValues, ValidationsHandlers>) {\r\n\t\t\t\treturn async function (\r\n\t\t\t\t\tevent: FormEvent<HTMLFormElement>,\r\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n\t\t\t\t\t// @ts-ignore\r\n\t\t\t\t): Promise<unknown> | unknown {\r\n\t\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t\tconst currentState = get();\r\n\r\n\t\t\t\t\tcurrentState.setSubmitState({ isActive: true });\r\n\r\n\t\t\t\t\tconst metadata = currentState.metadata;\r\n\t\t\t\t\tconst fields = currentState.fields;\r\n\t\t\t\t\tconst validations = currentState.validations;\r\n\t\t\t\t\tconst values: Record<string, unknown> = {};\r\n\t\t\t\t\tconst validatedValues: Record<string, unknown> = {};\r\n\r\n\t\t\t\t\tconst errors: Record<\r\n\t\t\t\t\t\tstring,\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: string | number | symbol;\r\n\t\t\t\t\t\t\tmessage: string | null;\r\n\t\t\t\t\t\t\tvalidationEvent: ValidationEvents;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t> = {};\r\n\r\n\t\t\t\t\tlet hasError = false;\r\n\r\n\t\t\t\t\tlet fieldName: keyof typeof fields & string;\r\n\t\t\t\t\tfor (fieldName in fields) {\r\n\t\t\t\t\t\tvalues[fieldName] = fields[fieldName].value;\r\n\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tconst validationSchema =\r\n\t\t\t\t\t\t\t\tfieldName in metadata.referencedValidatedFieldsMap &&\r\n\t\t\t\t\t\t\t\tvalidations[fieldName as unknown as keyof typeof validations]\r\n\t\t\t\t\t\t\t\t\t.handler;\r\n\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\ttypeof validationSchema !== 'function' ||\r\n\t\t\t\t\t\t\t\t!validations[fieldName as unknown as keyof typeof validations]\r\n\t\t\t\t\t\t\t\t\t.events.submit.isActive\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tvalidatedValues[fieldName] = validationSchema(\r\n\t\t\t\t\t\t\t\tfields[fieldName].value,\r\n\t\t\t\t\t\t\t\t'submit',\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\terrors[fieldName] = {\r\n\t\t\t\t\t\t\t\tname: fieldName,\r\n\t\t\t\t\t\t\t\tmessage: null,\r\n\t\t\t\t\t\t\t\tvalidationEvent: 'submit',\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\t\terrors[fieldName] = {\r\n\t\t\t\t\t\t\t\tname: fieldName,\r\n\t\t\t\t\t\t\t\tmessage: currentState.errorFormatter(error, 'submit'),\r\n\t\t\t\t\t\t\t\tvalidationEvent: 'submit',\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet manualFieldName: keyof (typeof metadata)['manualValidatedFieldsMap'];\r\n\t\t\t\t\tfor (manualFieldName of metadata.manualValidatedFields) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tconst validationSchema =\r\n\t\t\t\t\t\t\t\tcurrentState.validations[manualFieldName].handler;\r\n\t\t\t\t\t\t\tif (typeof validationSchema !== 'function') {\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tvalidatedValues[manualFieldName as string] = validationSchema(\r\n\t\t\t\t\t\t\t\tvalues as FieldsValues,\r\n\t\t\t\t\t\t\t\t'submit',\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\terrors[manualFieldName as string] = {\r\n\t\t\t\t\t\t\t\tname: manualFieldName,\r\n\t\t\t\t\t\t\t\tmessage: null,\r\n\t\t\t\t\t\t\t\tvalidationEvent: 'submit',\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\t\terrors[manualFieldName as string] = {\r\n\t\t\t\t\t\t\t\tname: manualFieldName,\r\n\t\t\t\t\t\t\t\tmessage: currentState.errorFormatter(error, 'submit'),\r\n\t\t\t\t\t\t\t\tvalidationEvent: 'submit',\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttype NecessaryEvil = {\r\n\t\t\t\t\t\tvalues: FieldsValues;\r\n\t\t\t\t\t\tvalidatedValues: GetValidationValuesFromSchema<ValidationsHandlers>;\r\n\t\t\t\t\t\terror: Parameters<\r\n\t\t\t\t\t\t\ttypeof _setFieldError<FieldsValues, ValidationsHandlers> // ['utils']['setFieldError']\r\n\t\t\t\t\t\t>[0];\r\n\t\t\t\t\t\terrors: {\r\n\t\t\t\t\t\t\t[Key in keyof ValidationsHandlers]: {\r\n\t\t\t\t\t\t\t\tname: Key;\r\n\t\t\t\t\t\t\t\tmessage: string | null;\r\n\t\t\t\t\t\t\t\tvalidationEvent: ValidationEvents;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tlet _currentState: FormStoreShape<FieldsValues, ValidationsHandlers> =\r\n\t\t\t\t\t\tget();\r\n\t\t\t\t\tlet errorKey: keyof typeof errors & string;\r\n\t\t\t\t\tfor (errorKey in errors) {\r\n\t\t\t\t\t\tconst errorObj = errors[errorKey];\r\n\r\n\t\t\t\t\t\t_currentState = _setFieldError<FieldsValues, ValidationsHandlers>(\r\n\t\t\t\t\t\t\terrors[errorKey] as unknown as NecessaryEvil['error'],\r\n\t\t\t\t\t\t)(_currentState);\r\n\r\n\t\t\t\t\t\tif (typeof errorObj.message !== 'string') continue;\r\n\r\n\t\t\t\t\t\thasError = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!hasError) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tawait cb({\r\n\t\t\t\t\t\t\t\tevent,\r\n\t\t\t\t\t\t\t\tvalues: values as NecessaryEvil['values'],\r\n\t\t\t\t\t\t\t\tvalidatedValues:\r\n\t\t\t\t\t\t\t\t\tvalidatedValues as NecessaryEvil['validatedValues'],\r\n\t\t\t\t\t\t\t\thasError,\r\n\t\t\t\t\t\t\t\terrors: errors as NecessaryEvil['errors'],\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tcurrentState.setSubmitState((prev) => ({\r\n\t\t\t\t\t\t\t\tisActive: false,\r\n\t\t\t\t\t\t\t\tcounter: prev.counter + 1,\r\n\t\t\t\t\t\t\t\tpassedAttempts: prev.counter + 1,\r\n\t\t\t\t\t\t\t\terrorMessage: null,\r\n\t\t\t\t\t\t\t}));\r\n\t\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\t\tcurrentState.setSubmitState((prev) => ({\r\n\t\t\t\t\t\t\t\tisActive: false,\r\n\t\t\t\t\t\t\t\tcounter: prev.counter + 1,\r\n\t\t\t\t\t\t\t\tfailedAttempts: prev.counter + 1,\r\n\t\t\t\t\t\t\t\terrorMessage: currentState.errorFormatter(error, 'submit'),\r\n\t\t\t\t\t\t\t}));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tset(_currentState);\r\n\t\t\t\t\t\tcurrentState.setSubmitState((prev) => ({\r\n\t\t\t\t\t\t\tisActive: false,\r\n\t\t\t\t\t\t\tcounter: prev.counter + 1,\r\n\t\t\t\t\t\t\tfailedAttempts: prev.counter + 1,\r\n\t\t\t\t\t\t\terrorMessage: null,\r\n\t\t\t\t\t\t}));\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t};\r\n\t};\r\n}\r\n"],"mappings":"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","names":["fields","validations","params","metadata"]}