@apia/validations 4.0.28 → 4.0.29
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/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -1541,14 +1541,18 @@ const Select = React.forwardRef(
|
|
|
1541
1541
|
...inputProps,
|
|
1542
1542
|
onChange: React.useCallback(
|
|
1543
1543
|
(ev) => {
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1544
|
+
if (props.multiple) {
|
|
1545
|
+
onChange(
|
|
1546
|
+
[...ev.target.options].filter((c) => c.selected).map((c) => c.value)
|
|
1547
|
+
);
|
|
1548
|
+
} else {
|
|
1549
|
+
onChange(ev);
|
|
1550
|
+
}
|
|
1547
1551
|
if (outerOnChange) {
|
|
1548
1552
|
outerOnChange(ev);
|
|
1549
1553
|
}
|
|
1550
1554
|
},
|
|
1551
|
-
[onChange, outerOnChange]
|
|
1555
|
+
[onChange, outerOnChange, props.multiple]
|
|
1552
1556
|
),
|
|
1553
1557
|
"aria-label": props["aria-label"] ?? label,
|
|
1554
1558
|
ref,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/form/FormContext.tsx","../src/validationMethods.ts","../src/util.ts","../src/validationStore.ts","../src/form/Form.tsx","../src/hooks/useField.ts","../src/hooks/useFieldStatesClassNames.ts","../src/hooks/useFieldValue.ts","../src/hooks/useValidationClass.ts","../src/components/ValidationError.tsx","../src/components/FieldWrapper.tsx","../src/components/Captcha.tsx","../src/components/Checkbox.tsx","../src/components/DeletableInput.tsx","../src/components/FileInput.tsx","../src/components/Input.tsx","../src/components/NumberInput.tsx","../src/components/Radio.tsx","../src/components/Select.tsx","../src/components/Switchbox.tsx","../src/components/Textarea.tsx","../src/collector/CollectorField.tsx","../src/collector/ValidatedCollectorField.ts","../src/collector/fields/Checkbox.tsx","../src/collector/fields/Input.tsx","../src/collector/fields/Select.tsx","../src/collector/fields/Textarea.tsx","../src/collector/fields/Label.tsx","../src/collector/fields/Button.tsx","../src/collector/Collector.tsx","../src/Validable/context.ts","../src/Validable/util.ts","../src/Validable/fields/ValidableField.tsx","../src/Validable/fields/makeValidableField.tsx","../src/Validable/fields/ValidableInput.tsx","../src/Validable/fields/ValidableSelect.tsx","../src/Validable/fields/ValidableTextarea.tsx","../src/Validable/fields/ValidableCheck.tsx","../src/Validable/index.tsx"],"sourcesContent":["import React from 'react';\r\nimport { TValidationResult } from '../types';\r\n\r\nexport interface IFormContext<\r\n ValueType extends Record<string, unknown> = Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n> {\r\n avoidFieldsTouch?: boolean;\r\n name: string;\r\n validate: () => Promise<TValidationResult<ValueType, SubmitValueType>>;\r\n}\r\n\r\nexport const FormContext = React.createContext<IFormContext>(\r\n {} as IFormContext,\r\n);\r\n\r\n/**\r\n * Provee acceso de forma sencilla al contexto de\r\n * validación, que básicamente posee el nombre del\r\n * form en caso de que se quiera usar para acceder\r\n * a través de Redux a la información del mismo y un\r\n * método validate, que dispara la validación del\r\n * form.\r\n *\r\n * En la práctica, el método validate es casi\r\n * innecesario, ya que la validación se puede disparar\r\n * con cualquier botón que no tenga seteado el\r\n * atributo type=\"button\" (esto es así ya que en el\r\n * DOM se renderiza un elemento de tipo form).\r\n */\r\nexport function useFormContext() {\r\n const formContext = React.useContext(FormContext);\r\n if (!formContext) throw new Error('There is no FormContext');\r\n return formContext;\r\n}\r\n","import { IFieldDefinition, TFieldValidationResult } from './types';\r\nimport { getValidations } from './util';\r\n\r\nexport interface IValidateByRules<ValueType> {\r\n rules: NonNullable<IFieldDefinition['validate']>;\r\n value: ValueType;\r\n}\r\n\r\n/**\r\n * Este método toma un valor y unas reglas de validación\r\n * y ejecuta la validación correspondiente a dichas reglas.\r\n */\r\nexport function validateByRules<ValueType>({\r\n rules,\r\n value,\r\n}: IValidateByRules<ValueType>): TFieldValidationResult {\r\n const validationResult = getValidations(rules).validate(value);\r\n return validationResult;\r\n}\r\n","import { customEvents } from '@apia/util';\r\nimport { notify } from '@apia/notifications';\r\nimport {\r\n TFieldValidationResult,\r\n TSuccessfulValidation,\r\n TValidationResult,\r\n IFieldDefinition,\r\n TValidationField,\r\n} from './types';\r\nimport { validateByRules } from './validationMethods';\r\n\r\nimport type formcheckLanguage from './lang/es';\r\nimport { validationsStore } from './validationStore';\r\n\r\ndeclare global {\r\n interface Window {\r\n NO_LANGUAGE_EXCEPTION: string;\r\n MSG_INVALID_REG_EXP: string;\r\n GNR_INVALID_NAME: string;\r\n }\r\n}\r\n\r\n/**\r\n * Realiza la validación del campo tomando en cuenta las\r\n * distintas posibilidades de validación.\r\n */\r\nexport async function validateField(\r\n field: TValidationField<unknown>,\r\n formName: string,\r\n): Promise<TFieldValidationResult> {\r\n let validationResult: TFieldValidationResult | null = null;\r\n const fieldValue = field.validationValueParser\r\n ? field.validationValueParser(field.value)\r\n : field.value;\r\n if (field.validationFunction) {\r\n validationResult = await field.validationFunction(fieldValue, formName);\r\n }\r\n if (\r\n (!field.validationFunction || validationResult === true) &&\r\n field.validationRules\r\n ) {\r\n validationResult = validateByRules({\r\n rules: field.validationRules,\r\n value: fieldValue,\r\n });\r\n } else if (validationResult === null) validationResult = true;\r\n return validationResult;\r\n}\r\n\r\n/**\r\n * Determina si la validación de un campo resultó exitosa.\r\n */\r\nexport function hasSucceedFieldValidation(\r\n result: TFieldValidationResult,\r\n): result is true {\r\n return result === true;\r\n}\r\n\r\n/**\r\n * Determina si la validación de un formulario resultó\r\n * exitosa. Está pensada para utilizar en el callback\r\n * onValidate de Form o en la acción validationsActions.validateForm\r\n */\r\nexport function hasSucceedFormValidation<\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n>(\r\n result: TValidationResult<ValueType, SubmitValueType>,\r\n): result is TSuccessfulValidation<ValueType, SubmitValueType> {\r\n return !('errors' in result);\r\n}\r\n\r\n/**\r\n * Intenta hacer foco en el campo y devuelve un booleano\r\n * indicando si se logró o no.\r\n */\r\nexport async function focusOnField(formName: string, field: TValidationField) {\r\n if (field.focus) {\r\n return (await field.focus()) || true;\r\n }\r\n\r\n const formElement = document.getElementById(\r\n `ValidationForm-${formName}`,\r\n ) as HTMLFormElement;\r\n const fieldElement: HTMLElement | null = formElement?.querySelector(\r\n `[name=\"${CSS.escape(field.name)}\"], #${CSS.escape(field.name)}`,\r\n );\r\n\r\n if (fieldElement) {\r\n return new Promise((resolve) => {\r\n const event = new CustomEvent(customEvents.focus, { bubbles: true });\r\n fieldElement.focus();\r\n fieldElement.dispatchEvent(event);\r\n fieldElement.scrollIntoView({\r\n block: 'center',\r\n behavior: 'auto',\r\n });\r\n resolve(true);\r\n });\r\n }\r\n return false;\r\n}\r\n\r\nlet langDefinition: typeof formcheckLanguage;\r\n/**\r\n * Devuelve la cadena correspondiente a un código\r\n * de error, realizando los reemplazos correspondientes.\r\n */\r\nexport function lang(\r\n errorCode: keyof typeof formcheckLanguage,\r\n ...replacements: (string | number)[]\r\n) {\r\n if (!langDefinition[errorCode]) return '';\r\n let returnString = langDefinition[errorCode];\r\n replacements.forEach((replace, index) => {\r\n returnString = returnString.replace(`%${index}`, replace.toString());\r\n });\r\n return returnString;\r\n}\r\n\r\nexport function classToValidationFunction<T = string>(\r\n className: string,\r\n): TValidationField<T>['validationFunction'] {\r\n // validate[confirm:fieldName:fieldTitle?]\r\n const match = className?.match(/'confirm:(\\w+):(.+?)']/);\r\n if (match) {\r\n const validationFunction: TValidationField<T>['validationFunction'] = (\r\n value,\r\n formName,\r\n ) => {\r\n return value === validationsStore.getFieldStore(formName, match[1])?.value\r\n ? true\r\n : lang('confirm', match[2] ?? match[1]);\r\n };\r\n\r\n return validationFunction;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function classToValidate(\r\n className: string,\r\n): IFieldDefinition['validate'] {\r\n const validations: Record<string, unknown> = {};\r\n if (className) {\r\n const match = className.match(/validate\\[([^\\]]+)\\]/);\r\n if (match) {\r\n const definitions = match[1].replaceAll('~', '').split(',');\r\n definitions.forEach((definition) => {\r\n const definitionMatch = definition.match(/(\\w+)(?:=([\\w\\d]+))?/);\r\n if (definitionMatch) {\r\n const prop = definitionMatch[1] as keyof NonNullable<\r\n IFieldDefinition['validate']\r\n >;\r\n if (prop === 'pattern' && definitionMatch[2])\r\n validations[prop] = new RegExp(definitionMatch[2]);\r\n else if (definitionMatch[2]) {\r\n const value = definitionMatch[2].split(',');\r\n const actualValue = (\r\n value.length < 2 ? value.join() : value\r\n ) as NonNullable<IFieldDefinition['validate']>[typeof prop];\r\n validations[prop] =\r\n actualValue as (typeof validations)[typeof prop];\r\n } else validations[prop] = true;\r\n }\r\n });\r\n return validations as IFieldDefinition['validate'];\r\n }\r\n }\r\n return {};\r\n}\r\n\r\nexport const getValidationErrorMessagesByLang = async (\r\n langCode = window.LANG_CODE,\r\n): Promise<typeof formcheckLanguage> => {\r\n return (\r\n (await import(\r\n /* webpackChunkName: \"val-lang-[request]\" */ `./lang/${langCode}.ts`\r\n ).catch((error) => {\r\n throw error;\r\n })) as { default: typeof formcheckLanguage }\r\n ).default;\r\n};\r\n\r\n/**\r\n * Carga el archivo con mensajes de errores según el lenguaje\r\n * especificado.\r\n */\r\nexport const getErrorsMapByLang = async (\r\n langCode = window.LANG_CODE,\r\n): Promise<typeof formcheckLanguage> => {\r\n return (\r\n (await import(\r\n /* webpackChunkName: \"val-lang-[request]\" */ `./lang/${langCode}.ts`\r\n ).catch((error) => {\r\n throw error;\r\n })) as { default: typeof formcheckLanguage }\r\n ).default;\r\n};\r\n\r\n/**\r\n * Realiza la carga de los mensajes de errores para el lenguaje\r\n * especificado. Este método debe llamarse antes de utilizar\r\n * las validaciones.\r\n */\r\nexport async function initValidations() {\r\n if (langDefinition) return;\r\n const code = document.documentElement.lang ?? 'es';\r\n langDefinition = (\r\n (await import(\r\n /* webpackChunkName: \"val-lang-[request]\" */ `./lang/${code}.ts`\r\n ).catch((error) => {\r\n notify({\r\n type: 'danger',\r\n message: window.NO_LANGUAGE_EXCEPTION,\r\n });\r\n throw error;\r\n })) as { default: typeof formcheckLanguage }\r\n ).default;\r\n}\r\n\r\n/**\r\n * Devuelve una función validadora, que devolverá true\r\n * o una cadena con el mensaje de error correspondiente\r\n * según el lenguaje actual y las reglas de validación\r\n * establecidas.\r\n */\r\nexport function getValidations(outerValidation: IFieldDefinition['validate']): {\r\n validate: (v: unknown) => string | true;\r\n} {\r\n const validation = { ...outerValidation };\r\n if (!validation)\r\n return {\r\n validate: () => {\r\n return true;\r\n },\r\n } as { validate: () => true };\r\n\r\n return {\r\n validate: (outerV: unknown) => {\r\n const v = outerV ?? '';\r\n let returnValue: boolean | string = true;\r\n\r\n if (returnValue && validation.pattern) {\r\n let actualRegexp: RegExp;\r\n\r\n if (!(validation.pattern instanceof RegExp)) {\r\n const patternResult = validation.pattern.match(\r\n /(?:^\\/(.+)\\/(\\w+)?$)|(^.*$)/,\r\n ) as RegExpMatchArray;\r\n\r\n const regexp = patternResult[1];\r\n const flags = patternResult[2];\r\n const stringPattern = patternResult[3];\r\n\r\n actualRegexp = new RegExp(\r\n regexp || stringPattern,\r\n flags || undefined,\r\n );\r\n } else actualRegexp = validation.pattern;\r\n\r\n returnValue =\r\n !!String(v).match(actualRegexp) ||\r\n (validation.patternMessage ?? window.MSG_INVALID_REG_EXP);\r\n }\r\n if (returnValue === true && validation.maxLength)\r\n returnValue =\r\n String(v).length <= validation.maxLength ||\r\n lang('lengthmax', validation.maxLength);\r\n if (returnValue === true && validation.minLength)\r\n returnValue =\r\n String(v).length >= validation.minLength ||\r\n lang('lengthmin', validation.minLength);\r\n if (returnValue === true && validation.max && validation.min)\r\n returnValue =\r\n (Number(v) <= validation.max && Number(v) >= validation.min) ||\r\n lang('digitltd', validation.min, validation.max);\r\n if (returnValue === true && validation.min)\r\n returnValue =\r\n Number(v) >= validation.min || lang('digitmin', validation.min);\r\n if (returnValue === true && validation.max)\r\n returnValue =\r\n Number(v) <= validation.max || lang('digitltd', 0, validation.max);\r\n if (returnValue === true && validation.validName)\r\n returnValue =\r\n !!String(v).match(/^[a-zA-Z0-9_.]*$/) || window.GNR_INVALID_NAME;\r\n if (returnValue === true && (validation.alpha || validation.nodigit))\r\n returnValue = !!String(v).match(/^[a-zA-Z]*$/) || lang('alpha');\r\n if (returnValue === true && validation.alphanum)\r\n returnValue = !!String(v).match(/^[a-zA-Z0-9]*$/) || lang('alphanum');\r\n if (returnValue === true && (validation.digit || validation.number))\r\n returnValue = !!String(v).match(/^[0-9]*$/) || lang('digit');\r\n if (returnValue === true && validation.email)\r\n returnValue =\r\n !!String(v).match(\r\n // eslint-disable-next-line no-control-regex\r\n /(?:^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i,\r\n ) || lang('email');\r\n if (returnValue === true && validation.differs)\r\n returnValue =\r\n v !== validation.differs || lang('differs', validation.differs);\r\n if (returnValue === true && validation.length_str)\r\n returnValue =\r\n (String(v).length >= validation.length_str[0] &&\r\n String(v).length <= validation.length_str[1]) ||\r\n lang('length_str', ...validation.length_str);\r\n if (returnValue === true && validation.length_fix)\r\n returnValue =\r\n String(v).length === validation.length_fix ||\r\n lang('length_fix', validation.length_fix);\r\n if (returnValue === true && validation.words_min) {\r\n const words = String(v).split(' ').length;\r\n return (\r\n words >= validation.words_min ||\r\n lang('words_min', validation.words_min)\r\n );\r\n }\r\n if (returnValue === true && validation.words_max) {\r\n const words = String(v).split(' ').length;\r\n return (\r\n words <= validation.words_max ||\r\n lang('words_max', validation.words_max)\r\n );\r\n }\r\n if (returnValue === true && validation.words_range) {\r\n const words = String(v).split(' ').length;\r\n return (\r\n (words <= validation.words_range[0] &&\r\n words >= validation.words_range[1]) ||\r\n lang('words_range', ...validation.words_range)\r\n );\r\n }\r\n if (returnValue === true && validation.required)\r\n returnValue =\r\n (Array.isArray(outerV) && outerV.length > 0) ||\r\n typeof outerV === 'number' ||\r\n (!Array.isArray(v) && !!v) ||\r\n lang('required');\r\n\r\n return returnValue;\r\n },\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-dynamic-delete */\r\nimport { notify } from '@apia/notifications';\r\nimport {\r\n TPropsComparator,\r\n TPropsSelector,\r\n TPropsConfiguration,\r\n propsStore,\r\n usePropsSelector,\r\n} from '@apia/util';\r\nimport {\r\n TValidationField,\r\n TFieldValidationResult,\r\n TSuccessfulValidation,\r\n TValidationResult,\r\n TWrongValidation,\r\n TRegisterFormOptions,\r\n TUpdateFieldOptions,\r\n TFormState,\r\n TRegisterField,\r\n TRegisterFieldOptions,\r\n} from './types';\r\nimport { focusOnField, hasSucceedFieldValidation, validateField } from './util';\r\n\r\ndeclare global {\r\n interface Window {\r\n MSG_WRONG_VALIDATION_NO_FOCUSED_FILE: string;\r\n }\r\n}\r\n\r\nexport const validationsStore = new (class {\r\n activeForms: string[] = [];\r\n\r\n timeouts: Record<string, ReturnType<typeof setTimeout> | true> = {};\r\n\r\n loadFromSessionStorage(formName: string) {\r\n const storageValue = sessionStorage.getItem(this.makeFormName(formName));\r\n\r\n if (storageValue) {\r\n try {\r\n const parsedValue = JSON.parse(storageValue) as {\r\n formProps: Partial<TFormState>;\r\n fields: Record<string, Partial<TValidationField>>;\r\n };\r\n this.activeForms.push(formName);\r\n this.updateFormStore(formName, parsedValue.formProps, true);\r\n Object.entries(parsedValue.fields).forEach(([name, field]) => {\r\n propsStore.updateField(\r\n this.makeFieldName(formName, name),\r\n {\r\n ...this.getFieldStore(formName, name),\r\n ...field,\r\n },\r\n { noEmit: true },\r\n );\r\n });\r\n\r\n return true;\r\n } catch (e) {\r\n e;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n persistFormToSessionStorage(formName: string) {\r\n const { isTouched, isValid, validationResult, ...formProps } =\r\n this.getFormStore(formName);\r\n const shouldPersist = formProps.persistToSessionStorage;\r\n\r\n if (shouldPersist) {\r\n const fields = formProps.fields\r\n .map((current) => {\r\n const {\r\n validationFunction,\r\n isTouched,\r\n error,\r\n validationValueParser,\r\n ...field\r\n } = this.getFieldStore(formName, current);\r\n return field;\r\n })\r\n .reduce(\r\n (o, c) => ({ ...o, [c.name]: c }),\r\n {} as Record<string, Partial<TValidationField>>,\r\n );\r\n\r\n sessionStorage.setItem(\r\n this.makeFormName(formName),\r\n JSON.stringify({\r\n formProps,\r\n fields,\r\n }),\r\n );\r\n }\r\n }\r\n\r\n getFieldStore(formName: string, fieldName: string) {\r\n return propsStore.getFieldProps<TValidationField>(\r\n this.makeFieldName(formName, fieldName),\r\n );\r\n }\r\n\r\n getFormStore(formName: string) {\r\n return propsStore.getFieldProps<TFormState>(this.makeFormName(formName));\r\n }\r\n\r\n updateFieldStore(\r\n formName: string,\r\n fieldName: string,\r\n props: Partial<TValidationField>,\r\n noEmit?: boolean,\r\n ) {\r\n propsStore.updateField(\r\n this.makeFieldName(formName, fieldName),\r\n {\r\n ...this.getFieldStore(formName, fieldName),\r\n ...props,\r\n },\r\n { noEmit },\r\n );\r\n this.persistFormToSessionStorage(formName);\r\n }\r\n\r\n updateFormStore(\r\n formName: string,\r\n newState: Partial<TFormState>,\r\n avoidPersist = false,\r\n ) {\r\n propsStore.updateField(this.makeFormName(formName), newState);\r\n if (!avoidPersist) this.persistFormToSessionStorage(formName);\r\n }\r\n\r\n enableFormTouch(formName: string) {\r\n this.timeouts[formName] = true;\r\n }\r\n\r\n existsField = (formName: string, fieldName: string) => {\r\n return !!this.getFormStore(formName)?.fields?.includes(fieldName);\r\n };\r\n\r\n makeFieldName(formName: string, fieldName: string) {\r\n return `validation_${formName}_${fieldName}`;\r\n }\r\n\r\n makeFormName(formName: string) {\r\n return `validation_${formName}`;\r\n }\r\n\r\n registerField = (\r\n formName: string,\r\n registerData: TRegisterField,\r\n options: TRegisterFieldOptions = { registerIfExists: true },\r\n ) => {\r\n const formProps = this.getFormStore(formName);\r\n if (formProps === undefined) this.registerForm(formName);\r\n\r\n if (!this.getFormStore(formName)?.fields.includes(registerData.name))\r\n this.updateFormStore(formName, {\r\n fields: [\r\n ...(this.getFormStore(formName)?.fields ?? []),\r\n registerData.name,\r\n ],\r\n });\r\n\r\n const existsInStore = this.getFieldStore(formName, registerData.name);\r\n\r\n if (\r\n (formProps?.avoidFieldsOverride || !options.registerIfExists) &&\r\n existsInStore\r\n ) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unused-vars\r\n const { value, ...updateData } = registerData;\r\n this.updateField(formName, updateData, {\r\n markFormAsTouched: false,\r\n avoidPropagation: options.avoidPropagation,\r\n });\r\n return;\r\n }\r\n\r\n this.updateFieldStore(\r\n formName,\r\n registerData.name,\r\n registerData,\r\n options.avoidPropagation,\r\n );\r\n };\r\n\r\n /**\r\n * Inicializa el estado de un nuevo formulario\r\n */\r\n registerForm = (\r\n formName: string,\r\n props: TRegisterFormOptions = { avoidFieldsOverride: false },\r\n ) => {\r\n props.persistToSessionStorage && this.loadFromSessionStorage(formName);\r\n\r\n if (this.activeForms.includes(formName)) {\r\n this.updateFormStore(\r\n formName,\r\n {\r\n avoidFieldsOverride: props.avoidFieldsOverride,\r\n },\r\n true,\r\n );\r\n if (props.initialValues)\r\n Object.entries(props.initialValues).forEach(([fieldId, fieldProps]) => {\r\n if (fieldProps instanceof Object)\r\n this.updateField(\r\n formName,\r\n { name: fieldId, ...fieldProps },\r\n { avoidFieldsOverride: props.avoidFieldsOverride },\r\n );\r\n });\r\n return;\r\n }\r\n this.activeForms.push(formName);\r\n this.updateFormStore(formName, {\r\n avoidFieldsOverride: props.avoidFieldsOverride,\r\n fields: [],\r\n isTouched: false,\r\n isValid: false,\r\n name: formName,\r\n validationResult: null,\r\n persistToSessionStorage: props.persistToSessionStorage,\r\n });\r\n\r\n // Set initial values\r\n Object.entries(props.initialValues ?? {}).forEach(([name, value]) => {\r\n this.updateField(\r\n formName,\r\n { name, value },\r\n {\r\n markFormAsTouched: false,\r\n avoidFieldsOverride: props.avoidFieldsOverride,\r\n },\r\n );\r\n });\r\n };\r\n\r\n /**\r\n * Setea el valor del campo con el nombre provisto. Si el campo no existe\r\n * en el formulario lo crea.\r\n */\r\n setFieldValue = (\r\n formName: string,\r\n fieldName: string,\r\n newValue: unknown,\r\n options?: TUpdateFieldOptions,\r\n ) => {\r\n if (!this.getFieldStore(formName, fieldName))\r\n this.registerField(formName, { name: fieldName, value: newValue });\r\n else\r\n this.updateField(\r\n formName,\r\n {\r\n name: fieldName,\r\n value: newValue,\r\n error: null,\r\n },\r\n options,\r\n );\r\n\r\n if (this.getFormStore(formName).isValid)\r\n this.updateFormStore(formName, { isValid: false });\r\n };\r\n\r\n setFormIsTouched = (formName: string, isTouched = true) => {\r\n this.updateFormStore(formName, { isTouched }, true);\r\n };\r\n\r\n /**\r\n * Elimina un campo del registro de validación de un formulario. De esta\r\n * forma cualquier validación que pudiera aplicarse sobre el mismo, ya no se\r\n * aplicará.\r\n */\r\n unregisterField = (formName: string, fieldName: string) => {\r\n if (this.getFormStore(formName))\r\n this.updateFormStore(formName, {\r\n fields: this.getFormStore(formName).fields.filter((current) => {\r\n return current !== fieldName;\r\n }),\r\n });\r\n propsStore.removeField(this.makeFieldName(formName, fieldName));\r\n };\r\n\r\n /**\r\n * Elimina un formulario del store de validación junto con todos los campos\r\n * asociados al mismo.\r\n */\r\n unregisterForm = (formName: string) => {\r\n this.getFormStore(formName)?.fields?.forEach((current) => {\r\n return propsStore.removeField(this.makeFieldName(formName, current));\r\n });\r\n this.activeForms = this.activeForms.filter((current) => {\r\n return current !== formName;\r\n });\r\n propsStore.removeField(this.makeFormName(formName));\r\n delete this.timeouts[formName];\r\n };\r\n\r\n /**\r\n * Actualiza las propiedades de un campo, si no existe, lo registra en el\r\n * formulario.\r\n */\r\n updateField = (\r\n formName: string,\r\n field: Partial<TValidationField> & Pick<TValidationField, 'name'>,\r\n options?: TUpdateFieldOptions,\r\n ) => {\r\n const previousValue = this.getFieldStore(formName, field.name)\r\n ?.value as unknown;\r\n\r\n if (this.getFormStore(formName))\r\n this.updateFormStore(formName, { isValid: false }, true);\r\n else this.registerForm(formName);\r\n\r\n if (previousValue !== undefined && options?.avoidFieldsOverride) return;\r\n\r\n const isTouched =\r\n field.value !== undefined &&\r\n field.value !== previousValue &&\r\n options?.markFormAsTouched !== false;\r\n\r\n if (!this.existsField(formName, field.name))\r\n this.registerField(formName, field, {\r\n avoidPropagation: options?.avoidPropagation,\r\n });\r\n this.updateFieldStore(\r\n formName,\r\n field.name,\r\n {\r\n ...field,\r\n isTouched:\r\n isTouched || this.getFieldStore(formName, field.name)?.isTouched,\r\n },\r\n options?.avoidPropagation,\r\n );\r\n if (isTouched) this.setFormIsTouched(formName);\r\n };\r\n\r\n /**\r\n * Actualiza múltiples campos al mismo tiempo.\r\n */\r\n updateMultipleFields = (\r\n formName: string,\r\n fields: (Partial<TValidationField> & Pick<TValidationField, 'name'>)[],\r\n options?: TUpdateFieldOptions,\r\n ) => {\r\n fields.forEach((current) => {\r\n return this.updateField(formName, current, options);\r\n });\r\n };\r\n\r\n /**\r\n * Ejecuta la validación sobre un formulario. En caso de que la validación\r\n * falle, se intenta hacer foco sobre el campo que no pudo validar.\r\n * Es importante notar que en caso de que un campo requiera validación,\r\n * debería estar presente en el DOM.\r\n *\r\n * No es necesario que el campo esté visible, ya que en caso de estar oculto\r\n * (por ejemplo por ser hijo de un acordeón), se emitirá un evento para\r\n * expandir al elemento padre que lo estuviera ocultando.\r\n *\r\n * @returns Devuelve una promesa que al ser resuelta otorga un objeto de tipo\r\n * TValidationResult. Este tipo está pensado para ser usado en conjunto con\r\n * el método hasSucceedFormValidation, que determinará si la validación fue\r\n * exitosa o hubo errores.\r\n *\r\n * @example\r\n *\r\n * const result = await validationStore.validateForm('myForm');\r\n * if(hasSucceedValidation(result)) {\r\n * console.log('Success!', result);\r\n * } else {\r\n * console.error('Validation error', result);\r\n * }\r\n */\r\n validateForm = async <\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n >(\r\n formName: string,\r\n ) => {\r\n const state = this.getFormStore(formName);\r\n\r\n if (!state) return { errors: { form: 'No form with name ' + formName } };\r\n\r\n const fields = state.fields.map((current) => {\r\n return this.getFieldStore(formName, current);\r\n });\r\n\r\n const validationErrors: TWrongValidation = { errors: {} };\r\n const validationValues: TSuccessfulValidation<Record<string, unknown>> = {\r\n submitValues: {},\r\n values: {},\r\n };\r\n let hasFiredFocus = false;\r\n let existsErrors = false;\r\n const fieldsWithError: Record<string, TFieldValidationResult> = {};\r\n\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const field of fields.filter((current) => {\r\n return current !== undefined;\r\n })) {\r\n // eslint-disable-next-line no-await-in-loop\r\n const validationResult = await validateField(field, formName);\r\n fieldsWithError[field.name] = validationResult;\r\n\r\n if (hasSucceedFieldValidation(validationResult)) {\r\n validationValues.submitValues[field.submitName ?? field.name] =\r\n field.submitValueParser\r\n ? await field.submitValueParser(field.value)\r\n : field.value;\r\n validationValues.values[field.name] = field.value;\r\n } else {\r\n this.updateField(formName, {\r\n name: field.name,\r\n error: validationResult,\r\n });\r\n if (!hasFiredFocus) {\r\n // eslint-disable-next-line no-await-in-loop\r\n if (await focusOnField(formName, field)) hasFiredFocus = true;\r\n }\r\n existsErrors = true;\r\n validationErrors.errors[field.name] = validationResult;\r\n }\r\n }\r\n\r\n if (existsErrors) {\r\n if (!hasFiredFocus) {\r\n notify({\r\n message: window.MSG_WRONG_VALIDATION_NO_FOCUSED_FILE,\r\n type: 'danger',\r\n });\r\n console.error('Campos que fallaron la validación', fieldsWithError);\r\n }\r\n this.updateFormStore(\r\n formName,\r\n {\r\n isValid: false,\r\n validationResult: validationErrors,\r\n },\r\n true,\r\n );\r\n return validationErrors as TValidationResult<ValueType, SubmitValueType>;\r\n }\r\n this.updateFormStore(\r\n formName,\r\n {\r\n isValid: true,\r\n validationResult: validationValues,\r\n },\r\n true,\r\n );\r\n return validationValues as TValidationResult<ValueType, SubmitValueType>;\r\n };\r\n})();\r\n\r\n/**\r\n * Este hook permite suscribirse a los cambios realizados en el\r\n * store de validación de un formulario. Funciona igual a un\r\n * useAppSelector en cuanto a la función selectora y comparadora.\r\n *\r\n * @param selector\r\n * @param comparator\r\n * @returns\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function useFormSelector<Selected = any>(\r\n formName: string,\r\n selector: TPropsSelector<Selected, TFormState>,\r\n comparator?: TPropsComparator<Selected>,\r\n) {\r\n return usePropsSelector(\r\n validationsStore.makeFormName(formName),\r\n selector,\r\n comparator,\r\n );\r\n}\r\n\r\n/**\r\n * Este hook permite suscribirse a los cambios realizados en el\r\n * store de validación de un campo de formulario. Funciona igual a un\r\n * useAppSelector en cuanto a la función selectora y comparadora.\r\n *\r\n * @param selector\r\n * @param comparator\r\n * @returns\r\n */\r\n\r\nexport function useFieldSelector<\r\n ValueType = unknown,\r\n SubmitValueType = unknown,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Selected = any,\r\n>(\r\n formName: string,\r\n fieldName: string,\r\n selector?: TPropsSelector<\r\n Selected,\r\n TValidationField<ValueType, SubmitValueType>\r\n >,\r\n comparator?: TPropsComparator<Selected>,\r\n): Selected;\r\nexport function useFieldSelector<\r\n ValueType = unknown,\r\n SubmitValueType = unknown,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Selected = any,\r\n>(\r\n formName: string,\r\n fieldName: string,\r\n configurator?: TPropsConfiguration<\r\n Selected,\r\n TValidationField<ValueType, SubmitValueType>\r\n >,\r\n): Selected;\r\nexport function useFieldSelector<\r\n ValueType = unknown,\r\n SubmitValueType = unknown,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Selected = any,\r\n>(\r\n formName: string,\r\n fieldName: string,\r\n confOrSelector?:\r\n | TPropsSelector<Selected, TValidationField<ValueType, SubmitValueType>>\r\n | TPropsConfiguration<\r\n Selected,\r\n TValidationField<ValueType, SubmitValueType>\r\n >,\r\n comparator?: TPropsComparator<Selected>,\r\n): Selected {\r\n const fieldId = validationsStore.makeFieldName(formName, fieldName);\r\n return usePropsSelector(fieldId, confOrSelector, comparator);\r\n}\r\n","import { useUnmount, useMount } from '@apia/util';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\nimport React from 'react';\r\nimport { getVariant, Box, BoxProps } from '@apia/theme';\r\nimport { FormContext, IFormContext } from './FormContext';\r\nimport { TValidationResult } from '../types';\r\nimport { validationsStore } from '../validationStore';\r\n\r\nexport type TOnValidate<\r\n ValueType extends Record<string, unknown> = Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n> = (\r\n validationResult: TValidationResult<ValueType, SubmitValueType>,\r\n) => unknown;\r\n\r\nexport interface IForm<\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n> {\r\n /**\r\n * Si se pasa en true, los campos que se registren en este form no\r\n * sobreescribirán valores previos si es que existen, sin importar el valor de\r\n * avoidRegisterIfExists pasado al useField.\r\n */\r\n avoidFieldsOverride?: boolean;\r\n /**\r\n * Impide que se apliquen los estilos que indican que un campo fue alterado.\r\n */\r\n avoidFieldsTouch?: boolean;\r\n children: React.ReactNode;\r\n className?: string;\r\n initialValues?: Partial<ValueType>;\r\n name?: string;\r\n onUnmount?: () => unknown;\r\n /**\r\n * Cuando se ejecuta una acción de validación desde\r\n * algún lugar de la aplicación se llama a este método\r\n * con el resultado de dicha ejecución.\r\n */\r\n onValidate?: TOnValidate<ValueType, SubmitValueType>;\r\n persistToSessionStorage?: boolean;\r\n /**\r\n * Permite definir si el formulario va a ser borrado de la validación al ser\r\n * desmontado\r\n */\r\n unregisterOnUnmount?: boolean;\r\n}\r\n\r\n/**\r\n * Cuando se desea usar el sistema de validación,\r\n * se debe utilizar este componente como form contenedor\r\n * de todos los campos que quieran validarse.\r\n *\r\n * Es importante que no se coloquen formularios dentro\r\n * de formularios ya que esto podría afectar negativamente\r\n * el proceso de validación.\r\n *\r\n * @props\r\n * *name:* Se puede pasar un nombre para identificar\r\n * el form. Este nombre será utilizado para almacenar\r\n * la información en Redux, por lo que si se desea\r\n * acceder a la información recolectada por la librería,\r\n * es conveniente pasar un nombre conocido y único. En\r\n * caso de no se pase ningún nombre, la aplicación\r\n * generará un nombre único automaticamente.\r\n *\r\n * *onValidate:* Un callback que será llamado cuando\r\n * se invoque el método validateForm del store o cuando\r\n * se lance el evento de submit del elemento form (por\r\n * ejemplo mediante un click en un botón que no tenga\r\n * type=\"button\"), con el resultado de la validación.\r\n *\r\n * avoidFieldsOverride\r\n * avoidFieldsTouch\r\n *\r\n * @see useField\r\n * @see useForm\r\n *\r\n * @important Debido a que este hook renderiza un elemento\r\n * form en el DOM, es importante agregar el atributo\r\n * type=\"button\" a todos los botones dentro del formulario\r\n * que no se desea que disparen la validación.\r\n *\r\n * @example\r\n * Para ver un ejemplo funcional, mira el componente\r\n * Invitations.tsx\r\n *\r\n * // IMPORTANTE: El tipado del componente Form es genérico\r\n * // por lo que es posible instanciarlo como se muestra a\r\n * // continuación, lo que nos da el tipado correcto en el\r\n * // callback onValidate.\r\n * <Form<FormDataType> onValidate={(res) => {\r\n * if(hasSucceedValidation(res)) {\r\n * // Do something with submitValues\r\n * } else {\r\n * // Do something with errors\r\n * }\r\n * }}>\r\n * ...{children}\r\n * </Form>\r\n */\r\nconst Form = <\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n>({\r\n avoidFieldsOverride,\r\n avoidFieldsTouch,\r\n children,\r\n className,\r\n name,\r\n initialValues,\r\n onUnmount,\r\n onValidate,\r\n persistToSessionStorage,\r\n unregisterOnUnmount,\r\n}: IForm<ValueType, SubmitValueType>) => {\r\n const actualName = React.useMemo(\r\n () => name ?? `ValidationForm${uniqueId()}`,\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n );\r\n\r\n const handleSubmit = React.useCallback<React.FormEventHandler>(\r\n async (ev) => {\r\n ev.preventDefault();\r\n const validationRes = (await validationsStore.validateForm(\r\n actualName,\r\n )) as TValidationResult<ValueType, SubmitValueType>;\r\n if (validationRes && onValidate) onValidate(validationRes);\r\n },\r\n [actualName, onValidate],\r\n );\r\n const contextValue = React.useMemo<IFormContext>(\r\n () => ({\r\n avoidFieldsTouch,\r\n name: actualName,\r\n validate: async () => validationsStore.validateForm(actualName),\r\n }),\r\n [actualName, avoidFieldsTouch],\r\n );\r\n\r\n useUnmount(() => {\r\n onUnmount?.();\r\n if (unregisterOnUnmount !== false)\r\n validationsStore.unregisterForm(actualName);\r\n });\r\n\r\n const [hasRegistered, setHasRegistered] = React.useState(false);\r\n\r\n useMount(() => {\r\n validationsStore.registerForm(actualName, {\r\n avoidFieldsOverride: avoidFieldsOverride ?? initialValues !== undefined,\r\n initialValues,\r\n persistToSessionStorage,\r\n });\r\n setHasRegistered(true);\r\n });\r\n if (!hasRegistered) return null;\r\n\r\n return (\r\n <FormContext.Provider value={contextValue}>\r\n <Box\r\n as=\"form\"\r\n {...getVariant('layout.validations.form')}\r\n className={`validationsForm ${className}`}\r\n id={`ValidationForm-${actualName}`}\r\n {...({ name: actualName } as unknown as BoxProps)}\r\n onSubmit={handleSubmit}\r\n >\r\n {children}\r\n </Box>\r\n </FormContext.Provider>\r\n );\r\n};\r\n\r\nexport { Form };\r\n","import { useMount, useUnmount } from '@apia/util';\r\nimport React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { PropsSelectorUndefinedObject } from '@apia/util';\r\nimport { TValidationField } from '../types';\r\nimport { useFieldSelector, validationsStore } from '../validationStore';\r\n\r\nexport type TUseField<ValueType = unknown, SubmitValueType = ValueType> = Omit<\r\n TValidationField<ValueType, SubmitValueType>,\r\n 'error' | 'value' | 'isTouched'\r\n> & {\r\n /**\r\n * Con esta propiedad es posible evitar que el campo\r\n * se registre cuando ya fue registrado previamente en\r\n * el store. De esta forma, se evitaría escribir sobre\r\n * un valor que ya estaba seteado anteriormente.\r\n */\r\n avoidRegisterIfExists?: boolean;\r\n /**\r\n * Si se está fuera de contexto de validación, se puede pasar un formName\r\n * para evitar que el hook lo intente tomar de contexto.\r\n */\r\n formName?: string;\r\n initialValue?: ValueType;\r\n removeOnUnmount?: boolean;\r\n};\r\n\r\n/**\r\n * Este hook permite registrar un field para ser validado,\r\n * o simplemente para recolectar su valor, e incluso aplicar\r\n * una función de transformación de dicho valor antes de\r\n * hacer submit.\r\n *\r\n * @returns\r\n * *error:* Es null mientras que no haya errores de\r\n * validación, y un string en caso de que si lo haya.\r\n *\r\n * *value:* Es el valor actual del campo.\r\n *\r\n * *name:* Debería utilizarse para dar * valor al atributo\r\n * name o id del contenedor que debe recibir el foco en caso\r\n * de que la validación fallara. (Esto es, cuando se deba\r\n * realizar foco porque la validación falló, la librería\r\n * intentará encontrar un campo con el selector\r\n * [name=${name}, #${name}] dentro del formulario).\r\n *\r\n * *onChange:* Se utiliza para setear el valor del campo,\r\n * puede utilizarse directamente como callback para la\r\n * propiedad onChange que aceptan la mayoría de los campos,\r\n * ya que intentará setear el valor con ev.target.value\r\n * y si esa propiedad no está definida, lo hará directamente\r\n * con ev.\r\n *\r\n * @example\r\n * // Si se desea un ejemplo más complejo, vea el componente\r\n * // Invitations.tsx que se encuentra dentro del directorio\r\n * // de la librería.\r\n *\r\n * const inputProps = useField<string>({\r\n name: 'name',\r\n validationRules: {\r\n required: true,\r\n minLength: 5,\r\n maxLength: 10\r\n },\r\n initialValue: metadata.value,\r\n * });\r\n\r\n return <Box>\r\n <Input {...inputProps} />\r\n <ValidationError name=\"name\" />\r\n </Box>\r\n */\r\nexport function useField<ValueType = unknown, SubmitValueType = ValueType>(\r\n fieldDefinition: TUseField<ValueType, SubmitValueType>,\r\n) {\r\n const formContext = React.useContext(FormContext);\r\n const formName = fieldDefinition.formName ?? formContext.name;\r\n\r\n if (!formName) {\r\n console.error(fieldDefinition);\r\n throw new Error(\r\n `useField: It was not possible to determine the formName in field with name ${fieldDefinition.name}`,\r\n );\r\n }\r\n\r\n React.useMemo(() => {\r\n validationsStore.registerField(\r\n formName,\r\n {\r\n ...fieldDefinition,\r\n ...(fieldDefinition.initialValue !== undefined\r\n ? { value: fieldDefinition.initialValue }\r\n : null),\r\n },\r\n {\r\n avoidPropagation: true,\r\n registerIfExists: !fieldDefinition.avoidRegisterIfExists,\r\n },\r\n );\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useMount(() => {\r\n if (\r\n fieldDefinition.initialValue !== undefined &&\r\n ((!validationsStore.getFormStore(formName)?.avoidFieldsOverride &&\r\n !fieldDefinition.avoidRegisterIfExists) ||\r\n validationsStore.getFieldStore(formName, fieldDefinition.name) ===\r\n undefined)\r\n )\r\n validationsStore.setFieldValue(\r\n formName,\r\n fieldDefinition.name,\r\n fieldDefinition.initialValue,\r\n );\r\n });\r\n\r\n useUnmount(() => {\r\n if (fieldDefinition.removeOnUnmount)\r\n validationsStore.unregisterField(formName, fieldDefinition.name);\r\n });\r\n\r\n const {\r\n name,\r\n value: storeValue,\r\n error,\r\n isTouched,\r\n } = useFieldSelector<\r\n ValueType,\r\n SubmitValueType,\r\n TValidationField<ValueType, SubmitValueType>\r\n >(\r\n formName,\r\n fieldDefinition.name,\r\n (props) => {\r\n return props;\r\n },\r\n (a, b) => {\r\n if (\r\n a === PropsSelectorUndefinedObject &&\r\n fieldDefinition.initialValue !== undefined\r\n )\r\n return true;\r\n return shallowEqual(a, b);\r\n },\r\n );\r\n\r\n const [localValue, setLocalValue] = React.useState<ValueType | undefined>(\r\n fieldDefinition.initialValue,\r\n );\r\n\r\n React.useEffect(() => {\r\n setLocalValue(storeValue);\r\n }, [storeValue]);\r\n\r\n const onChange = React.useCallback(\r\n (ev: React.ChangeEvent | ValueType) => {\r\n const reactChangeEvent = ev as React.ChangeEvent<HTMLInputElement>;\r\n let newValue: ValueType;\r\n if (\r\n typeof reactChangeEvent === 'object' &&\r\n reactChangeEvent &&\r\n reactChangeEvent.target !== undefined &&\r\n reactChangeEvent.target.value !== undefined\r\n ) {\r\n newValue = reactChangeEvent.target.value as unknown as ValueType;\r\n } else newValue = ev as ValueType;\r\n\r\n setLocalValue(newValue);\r\n validationsStore.setFieldValue(formName, fieldDefinition.name, newValue);\r\n },\r\n [fieldDefinition.name, formName],\r\n );\r\n\r\n return {\r\n error,\r\n isTouched,\r\n name,\r\n onChange,\r\n updateValidations: React.useCallback(\r\n ({\r\n validationFunction,\r\n validationRules,\r\n }: Pick<TValidationField, 'validationRules' | 'validationFunction'>) => {\r\n validationsStore.updateField(formName, {\r\n name: fieldDefinition.name,\r\n validationFunction,\r\n validationRules,\r\n });\r\n },\r\n [formName, fieldDefinition.name],\r\n ),\r\n value: localValue ?? (fieldDefinition.initialValue as ValueType),\r\n };\r\n}\r\n","import { useFormContext } from '../form/FormContext';\r\nimport { useField } from './useField';\r\n\r\nexport function useFieldStatesClassNames<T = unknown>(\r\n name: string,\r\n formName?: string,\r\n): string {\r\n const { error, isTouched } = useField<T>({\r\n name,\r\n formName,\r\n avoidRegisterIfExists: true,\r\n removeOnUnmount: false,\r\n });\r\n const { avoidFieldsTouch } = useFormContext();\r\n if (error) return 'error';\r\n if (!avoidFieldsTouch && isTouched) return 'touched';\r\n return '';\r\n}\r\n","import { shallowEqual } from 'react-redux';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { PropsSelectorUndefinedObject } from '@apia/util';\r\nimport { useFieldSelector } from '../validationStore';\r\n\r\ninterface IUseFieldValue {\r\n formName?: string;\r\n name: string;\r\n}\r\n\r\nexport function useFieldValue<T = unknown>({ formName, name }: IUseFieldValue) {\r\n const { name: hookFormName } = useFormContext();\r\n\r\n if (!formName && !hookFormName) {\r\n throw new Error(\r\n `useFieldValue: It was not possible to determine the formName in field with name ${name}`,\r\n );\r\n }\r\n\r\n const { value } = useFieldSelector(\r\n formName ?? hookFormName,\r\n name,\r\n (props) => {\r\n return props;\r\n },\r\n (a, b) => {\r\n if (a === PropsSelectorUndefinedObject && b?.value === undefined)\r\n return true;\r\n return shallowEqual(a?.value, b?.value);\r\n },\r\n );\r\n\r\n return value as T;\r\n}\r\n","import React from 'react';\r\nimport { TDefaultFieldType } from '../components/types';\r\nimport { TValidationFunction } from '../types';\r\nimport { classToValidate, classToValidationFunction } from '../util';\r\nimport { validationsStore } from '../validationStore';\r\nimport { FormContext } from '../form/FormContext';\r\n\r\nexport function useValidationClass<T>({\r\n customValidation,\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n}: Pick<\r\n TDefaultFieldType<T>,\r\n 'validationClass' | 'validationFunction' | 'validationRules' | 'name'\r\n> & {\r\n customValidation?: TValidationFunction<T>;\r\n formName?: string;\r\n}) {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n\r\n const classesValidationFunction = React.useMemo(\r\n () =>\r\n validationClass !== undefined\r\n ? classToValidationFunction<T>(validationClass)\r\n : undefined,\r\n [validationClass],\r\n );\r\n const initialValidationFunction = React.useMemo(\r\n () =>\r\n validationsStore.getFieldStore(formName ?? contextFormName, name)\r\n ?.validationFunction,\r\n [contextFormName, formName, name],\r\n );\r\n const actualValidationFunction: TValidationFunction<T> = React.useCallback(\r\n (currentValue, parameterFormName) => {\r\n let result =\r\n initialValidationFunction?.(currentValue, parameterFormName) ??\r\n validationFunction?.(currentValue, parameterFormName) ??\r\n true;\r\n if (typeof result === 'string') return result;\r\n\r\n if (customValidation) {\r\n result = customValidation(currentValue, parameterFormName);\r\n }\r\n if (typeof result === 'string') return result;\r\n\r\n if (classesValidationFunction)\r\n return classesValidationFunction(currentValue, parameterFormName);\r\n\r\n return true;\r\n },\r\n [\r\n classesValidationFunction,\r\n customValidation,\r\n initialValidationFunction,\r\n validationFunction,\r\n ],\r\n );\r\n const actualValidationRules = React.useMemo(() => {\r\n return {\r\n ...validationRules,\r\n ...(validationClass !== undefined\r\n ? classToValidate(validationClass)\r\n : {}),\r\n };\r\n }, [validationClass, validationRules]);\r\n\r\n return {\r\n actualValidationFunction,\r\n actualValidationRules,\r\n };\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { useFieldSelector } from '../validationStore';\r\n\r\n/**\r\n * Renderiza los errores del campo con el nombre pasado\r\n * como prop. En caso de que no exista error, no renderiza\r\n * nada.\r\n *\r\n * @props\r\n * *name:* El nombre del campo cuyos errores se quieren\r\n * renderizar.\r\n */\r\nexport const ValidationError = ({ name }: { name: string }) => {\r\n const formContext = useFormContext();\r\n const error = useFieldSelector(formContext.name, name, (state) => {\r\n return state?.error;\r\n });\r\n\r\n return error ? (\r\n <Box\r\n as=\"strong\"\r\n role=\"alert\"\r\n sx={{\r\n color: 'danger',\r\n }}\r\n dangerouslySetInnerHTML={{ __html: error }}\r\n />\r\n ) : null;\r\n};\r\n","import { RequiredMark } from '@apia/components';\r\nimport React from 'react';\r\nimport { Box, BoxProps } from '@apia/theme';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { useFieldSelector } from '../validationStore';\r\nimport { ValidationError } from './ValidationError';\r\n\r\ndeclare global {\r\n interface Window {\r\n SHOW_REQUIRED_POSITION: string;\r\n }\r\n}\r\n\r\nexport interface IWrapper extends BoxProps {\r\n avoidSemicolon?: boolean;\r\n children: React.ReactNode;\r\n label?: string;\r\n name: string;\r\n required?: boolean;\r\n type?: 'checkbox';\r\n}\r\n\r\nexport const FieldWrapper = ({\r\n name,\r\n label,\r\n avoidSemicolon,\r\n children,\r\n className,\r\n as = 'label',\r\n type,\r\n ...props\r\n}: IWrapper) => {\r\n const { name: formName } = useFormContext();\r\n const isRequired = useFieldSelector(\r\n formName,\r\n name,\r\n (global) => global?.validationRules?.required,\r\n );\r\n\r\n if (type === 'checkbox') {\r\n return (\r\n <Box\r\n className={`fieldWrapper checkboxWrapper ${className ?? ''}`}\r\n {...props}\r\n as={as}\r\n >\r\n {window.SHOW_REQUIRED_POSITION !== '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n {children}\r\n <span>\r\n {label}\r\n {window.SHOW_REQUIRED_POSITION === '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n </span>\r\n <ValidationError name={name} />\r\n </Box>\r\n );\r\n }\r\n\r\n /**\r\n * Cuando el campo no tiene etiqueta, no tiene ningún sentido mostrar marca\r\n * de requerido ni tag label.\r\n */\r\n if (!label) {\r\n return (\r\n <Box className=\"fieldWrapper\" as=\"span\">\r\n {children}\r\n <ValidationError name={name} />\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box className={`fieldWrapper ${className ?? ''}`} {...props} as={as}>\r\n <Box as=\"span\" className=\"fieldWrapper__label\">\r\n {window.SHOW_REQUIRED_POSITION !== '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n {label}\r\n {!avoidSemicolon && label && <abbr className=\"semicolon\">: </abbr>}\r\n {window.SHOW_REQUIRED_POSITION === '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n </Box>\r\n {children}\r\n <ValidationError name={name} />\r\n </Box>\r\n );\r\n};\r\n","import { Captcha } from '@apia/components';\r\nimport { useField, useFieldStatesClassNames } from '../hooks';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\nimport React from 'react';\r\n\r\ntype TCaptchaProps = {\r\n name: string;\r\n imageUrl: string;\r\n className?: string;\r\n};\r\n\r\ntype TCaptcha = TCaptchaProps &\r\n Omit<\r\n TDefaultFieldType,\r\n 'validationFunction' | 'validationRules' | 'validationClass'\r\n >;\r\n\r\nconst InnerCaptcha = ({\r\n className,\r\n name,\r\n imageUrl,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n avoidSemicolon,\r\n formName,\r\n label,\r\n removeOnUnmount,\r\n submitName,\r\n submitValueParser,\r\n validationValueParser,\r\n}: TCaptcha) => {\r\n const { error, updateValidations, onChange, isTouched, ...validationProps } =\r\n useField({\r\n name,\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue: '',\r\n removeOnUnmount,\r\n submitName,\r\n submitValueParser,\r\n validationValueParser,\r\n validationRules: { required: true },\r\n });\r\n const handleOnChange = React.useCallback(\r\n (ev: string | React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n },\r\n [onChange],\r\n );\r\n\r\n const stateClassName = useFieldStatesClassNames(name);\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <Captcha\r\n name={name}\r\n imageUrl={imageUrl}\r\n onChange={handleOnChange}\r\n value={validationProps.value}\r\n className={stateClassName}\r\n />\r\n </FieldWrapper>\r\n );\r\n};\r\n\r\nexport { InnerCaptcha as Captcha };\r\n","import React from 'react';\r\nimport { ButtonProps, InputProps } from '@apia/theme';\r\nimport { Checkbox as AppCheckbox } from '@apia/components';\r\nimport { useField } from '../hooks/useField';\r\nimport { TDefaultFieldType } from './types';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\n\r\nexport type TCheckboxProps = Omit<\r\n ButtonProps,\r\n 'onChange' | 'defaultChecked' | 'defaultValue'\r\n> &\r\n Pick<InputProps, 'onChange'>;\r\n\r\nexport type TCheckbox = TCheckboxProps &\r\n TDefaultFieldType<boolean | string> & { native?: boolean };\r\n\r\nexport const Checkbox = React.forwardRef<HTMLButtonElement, TCheckbox>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n native,\r\n onChange: outerOnChange,\r\n type,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const {\r\n value: innerValue,\r\n onChange,\r\n updateValidations,\r\n isTouched,\r\n ...inputProps\r\n } = useField<boolean | string>({\r\n avoidRegisterIfExists,\r\n formName,\r\n name,\r\n initialValue:\r\n ((initialValue as unknown) === true || initialValue === 'on') ?? false,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`checkbox ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <AppCheckbox\r\n {...props}\r\n {...inputProps}\r\n native={native}\r\n aria-label={props['aria-label'] ?? label}\r\n onChange={(ev) => {\r\n onChange(ev.target.checked);\r\n if (outerOnChange) outerOnChange(ev);\r\n }}\r\n checked={innerValue === true || innerValue === 'on'}\r\n ref={ref}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nCheckbox.displayName = 'Checkbox';\r\n","import { IconButton } from '@apia/components';\r\nimport React from 'react';\r\nimport { InputProps, Input as TUIInput, ThemeUICSSObject } from '@apia/theme';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { useFieldStatesClassNames } from '../hooks';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { validationsStore } from '../validationStore';\r\nimport { TDefaultFieldType } from './types';\r\nimport { FieldWrapper } from './FieldWrapper';\r\n\r\ntype TDeletableInput = InputProps & TDefaultFieldType;\r\n\r\nexport const DeletableInput = React.forwardRef<\r\n HTMLInputElement,\r\n TDeletableInput\r\n>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n type,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n const formName = propsFormName ?? contextFormName;\r\n\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const {\r\n error,\r\n updateValidations,\r\n onChange,\r\n isTouched,\r\n ...validationProps\r\n } = useField<string>({\r\n formName,\r\n name,\r\n initialValue:\r\n initialValue ??\r\n (value as string) ??\r\n validationsStore.getFieldStore(formName, name)?.value ??\r\n '',\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n const handleOnChange = React.useCallback(\r\n (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n outerOnChange?.(ev);\r\n },\r\n [onChange, outerOnChange],\r\n );\r\n\r\n const stateClassName = useFieldStatesClassNames(name);\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n sx={React.useCallback(\r\n () =>\r\n ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'start',\r\n } as ThemeUICSSObject),\r\n [],\r\n )}\r\n className={`deletableInput ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <TUIInput\r\n type={type}\r\n {...props}\r\n {...validationProps}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n onChange={handleOnChange}\r\n value={validationProps.value ?? ''}\r\n className={`deletableInput__input ${stateClassName ?? ''}`}\r\n />\r\n <IconButton\r\n icon=\"Close\"\r\n className=\"deletableInput__deleteButton\"\r\n onClick={() => onChange('')}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nDeletableInput.displayName = 'DeletableInput';\r\n","import { getFieldErrorStyles } from '@apia/components';\r\nimport React from 'react';\r\nimport { Input, InputProps } from '@apia/theme';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { useValidationClass } from '../hooks';\r\nimport { useField, TUseField } from '../hooks/useField';\r\nimport { lang } from '../util';\r\nimport { FieldWrapper, IWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\ntype TFileInput = Omit<InputProps, 'onChange' | 'type' | 'value' | 'multiple'> &\r\n TDefaultFieldType<File | null> &\r\n Pick<TUseField, 'removeOnUnmount'> &\r\n Pick<IWrapper, 'avoidSemicolon'>;\r\n\r\nexport const FileInput = React.memo(\r\n React.forwardRef<HTMLInputElement, TFileInput>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: formName } = useFormContext();\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n customValidation(fileValue) {\r\n return fileValue !== null && fileValue !== undefined\r\n ? true\r\n : lang('required');\r\n },\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const {\r\n error,\r\n onChange,\r\n value,\r\n updateValidations,\r\n isTouched,\r\n ...validationProps\r\n } = useField<File | null>({\r\n formName,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <Input\r\n {...props}\r\n {...validationProps}\r\n type=\"file\"\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n sx={getFieldErrorStyles(!error)}\r\n onChange={React.useCallback(\r\n (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev.target?.files?.[0] ?? null);\r\n },\r\n [onChange],\r\n )}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nFileInput.displayName = 'FileInput';\r\n","import { DateInput } from '@apia/components';\r\nimport React from 'react';\r\nimport { InputProps, Input as TUIInput } from '@apia/theme';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { useFieldStatesClassNames } from '../hooks';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { validationsStore } from '../validationStore';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\nexport type TInput = InputProps & TDefaultFieldType;\r\n\r\nexport const Input = React.memo(\r\n React.forwardRef<HTMLInputElement, TInput>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n type,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n const formName = propsFormName ?? contextFormName;\r\n\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const {\r\n error,\r\n updateValidations,\r\n onChange,\r\n isTouched,\r\n ...validationProps\r\n } = useField<string>({\r\n formName,\r\n name,\r\n initialValue:\r\n initialValue ??\r\n (value as string) ??\r\n validationsStore.getFieldStore(formName, name)?.value ??\r\n '',\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n const handleOnChange = React.useCallback(\r\n (ev: string | React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n if (typeof ev === 'string') {\r\n // Es date\r\n outerOnChange?.({\r\n target: ref,\r\n } as unknown as React.ChangeEvent<HTMLInputElement>);\r\n } else {\r\n // Es comun\r\n outerOnChange?.(ev);\r\n }\r\n },\r\n [onChange, outerOnChange, ref],\r\n );\r\n\r\n const stateClassName = useFieldStatesClassNames(name);\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n {type === 'date' ? (\r\n <DateInput\r\n {...props}\r\n {...validationProps}\r\n aria-label={props['aria-label'] ?? label}\r\n onError={undefined}\r\n ref={ref}\r\n onChange={handleOnChange}\r\n value={validationProps.value ?? ''}\r\n className={stateClassName}\r\n />\r\n ) : (\r\n <TUIInput\r\n type={type}\r\n {...props}\r\n {...validationProps}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n onChange={handleOnChange}\r\n value={validationProps.value ?? ''}\r\n className={stateClassName}\r\n />\r\n )}\r\n </FieldWrapper>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nInput.displayName = 'Input';\r\n","import {\r\n TNumberInput,\r\n NumberInput as AppNumberInput,\r\n TNumberInputChangeEvent,\r\n ApiaUtil,\r\n} from '@apia/components';\r\nimport { formatMessage } from '@apia/util';\r\nimport React from 'react';\r\nimport { ThemeUICSSObject } from '@apia/theme';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { useFieldStatesClassNames } from '../hooks';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { validationsStore } from '../validationStore';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\ndeclare global {\r\n interface Window {\r\n GNR_NUMERIC: string;\r\n }\r\n}\r\n\r\ntype TInput = TNumberInput & TDefaultFieldType;\r\n\r\nexport const NumberInputf = React.memo(\r\n React.forwardRef<HTMLInputElement, TInput>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n const formName = propsFormName ?? contextFormName;\r\n\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const { onChange, value: innerValue } = useField<string, number>({\r\n formName,\r\n name,\r\n initialValue:\r\n initialValue ??\r\n (value as string) ??\r\n validationsStore.getFieldStore(formName, name)?.value ??\r\n '',\r\n removeOnUnmount,\r\n submitValueParser: React.useCallback(\r\n (current: string) =>\r\n ApiaUtil.instance.parsers.jsNumber(current ?? ''),\r\n [],\r\n ),\r\n validationValueParser: React.useCallback(\r\n (current: string) =>\r\n ApiaUtil.instance.parsers.jsNumber(current ?? ''),\r\n [],\r\n ),\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n const handleOnChange = React.useCallback(\r\n (ev: TNumberInputChangeEvent) => {\r\n if (ev.error) {\r\n outerOnChange?.({ ...ev, value: '' });\r\n onChange('');\r\n validationsStore.updateField(formName, {\r\n name,\r\n error: formatMessage(window.GNR_NUMERIC, { TOK: '' }),\r\n });\r\n } else {\r\n onChange(ev.value);\r\n outerOnChange?.(ev);\r\n validationsStore.updateField(formName, { name, error: null });\r\n }\r\n },\r\n [formName, name, onChange, outerOnChange],\r\n );\r\n const stateClassName = useFieldStatesClassNames(name);\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n sx={React.useMemo(\r\n () =>\r\n ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'start',\r\n }) as ThemeUICSSObject,\r\n [],\r\n )}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <AppNumberInput\r\n ref={ref}\r\n {...props}\r\n name={name}\r\n value={innerValue}\r\n onChange={handleOnChange}\r\n className={stateClassName}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nNumberInputf.displayName = 'NumberInputf';\r\n","import React from 'react';\r\nimport { RadioProps, Radio as TUIRadio, Label, Box } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\nexport type TRadio = RadioProps &\r\n TDefaultFieldType & {\r\n options: { value: string; label: string }[];\r\n };\r\n\r\nexport const Radio = React.forwardRef<HTMLInputElement, TRadio>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n formName,\r\n label,\r\n onChange: outerOnChange,\r\n options,\r\n value: outerValue,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const { value, updateValidations, onChange, isTouched, ...inputProps } =\r\n useField<string>({\r\n formName,\r\n name,\r\n initialValue: initialValue ?? (outerValue as string),\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n const handleOnChange = React.useCallback(\r\n (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n },\r\n [onChange, outerOnChange],\r\n );\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`radio ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n as=\"ul\"\r\n >\r\n {options?.map((option) => (\r\n <li key={option.value}>\r\n <Label title={option.label} className=\"radio-label\">\r\n <TUIRadio\r\n {...props}\r\n {...inputProps}\r\n role=\"radio\"\r\n className=\"radio-button\"\r\n aria-label={option.label}\r\n ref={ref}\r\n value={option.value}\r\n checked={value === option.value}\r\n onChange={handleOnChange}\r\n />\r\n <Box as=\"span\" className=\"radio-text\">\r\n {option.label}\r\n </Box>\r\n </Label>\r\n </li>\r\n ))}\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nRadio.displayName = 'Radio';\r\n","import React from 'react';\r\nimport { SelectProps, Select as TUISelect } from '@apia/theme';\r\nimport { getVariant } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { TDefaultFieldType } from './types';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TId } from '@apia/util';\r\n\r\nexport type TOption = { value: TId; label: string };\r\n\r\nexport type TSelectProps = Omit<SelectProps, 'defaultValue'>;\r\n\r\nexport type TSelect = TSelectProps &\r\n TDefaultFieldType & {\r\n options: TOption[];\r\n };\r\n\r\nexport const Select = React.forwardRef<HTMLSelectElement, TSelect>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n formName,\r\n label,\r\n onChange: outerOnChange,\r\n options,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const { updateValidations, onChange, isTouched, ...inputProps } =\r\n useField<string>({\r\n avoidRegisterIfExists,\r\n initialValue: initialValue ?? (value as string) ?? options[0]?.value,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`select ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <TUISelect\r\n {...getVariant('forms.select')}\r\n {...props}\r\n {...inputProps}\r\n onChange={React.useCallback(\r\n (ev: React.ChangeEvent<HTMLSelectElement>) => {\r\n onChange(\r\n [...ev.target.options]\r\n .filter((c) => c.selected)\r\n .map((c) => c.value) as any,\r\n );\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n },\r\n [onChange, outerOnChange],\r\n )}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n value={inputProps.value ?? ''}\r\n >\r\n {options?.map((option) => (\r\n <option key={option.value} value={option.value}>\r\n {option.label}\r\n </option>\r\n ))}\r\n {props.children}\r\n </TUISelect>\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nSelect.displayName = 'Select';\r\n","import { toBoolean } from '@apia/util';\r\nimport React from 'react';\r\nimport { InputProps, Switch, SwitchProps } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\nexport type TSwitchbox = Omit<SwitchProps, 'onChange'> &\r\n Pick<InputProps, 'onChange'> &\r\n TDefaultFieldType & { reverse?: boolean };\r\n\r\nexport const Switchbox = React.forwardRef<HTMLInputElement, TSwitchbox>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n type,\r\n reverse = false,\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const { onChange, updateValidations, isTouched, ...inputProps } =\r\n useField<string>({\r\n avoidRegisterIfExists,\r\n formName,\r\n name,\r\n initialValue:\r\n (initialValue ?? 'off') === 'on' || toBoolean(initialValue)\r\n ? 'on'\r\n : 'off',\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`switchbox ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <Switch\r\n {...props}\r\n {...inputProps}\r\n aria-label={props['aria-label'] ?? label}\r\n onChange={(ev) => {\r\n onChange(ev.target.checked !== reverse ? 'on' : 'off');\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n }}\r\n checked={((inputProps.value ?? 'off') === 'on') !== reverse}\r\n ref={ref}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nSwitchbox.displayName = 'Switchbox';\r\n","import React from 'react';\r\nimport { Textarea as TUITextarea, TextareaProps } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\ntype TTextarea = TextareaProps & TDefaultFieldType;\r\n\r\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TTextarea>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n formName,\r\n label,\r\n onChange: outerOnChange,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const { updateValidations, onChange, isTouched, ...inputProps } =\r\n useField<string>({\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue: initialValue ?? (value as string),\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationRules: actualValidationRules,\r\n validationFunction: actualValidationFunction,\r\n });\r\n const handleOnChange = React.useCallback(\r\n (ev: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n onChange(ev);\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n },\r\n [onChange, outerOnChange],\r\n );\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`textarea ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <TUITextarea\r\n {...props}\r\n {...inputProps}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n value={inputProps.value ?? ''}\r\n onChange={handleOnChange}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nTextarea.displayName = 'Textarea';\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { EventEmitter, useSubscription, StatefulEmitter } from '@apia/util';\r\nimport { FC, ReactNode } from 'react';\r\nimport { TOption } from '../components';\r\nimport {\r\n TFocusRetriever,\r\n TValidationFunction,\r\n TValidationRules,\r\n} from '../types';\r\nimport { Box } from '@apia/theme';\r\nimport { Collector } from './Collector';\r\n\r\nexport abstract class CollectorField<\r\n ValueType = any,\r\n FieldProps = any,\r\n> extends EventEmitter<{\r\n focusFunctionUpdate: TFocusRetriever;\r\n functionUpdate: TValidationFunction<ValueType>;\r\n optionsUpdate: TOption[];\r\n propsUpdate: Partial<FieldProps>;\r\n rulesUpdate: TValidationRules;\r\n}> {\r\n /**\r\n * Este es el componente de implementación de cada campo particular\r\n */\r\n abstract Component: FC;\r\n abstract type: string;\r\n\r\n #emitter = new StatefulEmitter<{\r\n isHidden: boolean;\r\n }>({\r\n isHidden: false,\r\n });\r\n\r\n constructor(\r\n public readonly name: string,\r\n protected label: ReactNode,\r\n properties?: Partial<FieldProps>,\r\n ) {\r\n super();\r\n\r\n if (properties) {\r\n this.properties = properties;\r\n }\r\n }\r\n\r\n public collector: Collector = {} as Collector;\r\n\r\n isHidden = () => this.#emitter.getState('isHidden');\r\n setIsHidden = (isHidden: boolean) => {\r\n this.#emitter.emit('isHidden', isHidden);\r\n };\r\n\r\n protected properties: Partial<FieldProps> = {};\r\n setProperties = (newProps: Partial<FieldProps>) => {\r\n this.properties = newProps;\r\n this.emit('propsUpdate', { ...this.properties });\r\n };\r\n\r\n protected useProperties = () => {\r\n return useSubscription<Partial<FieldProps>>({\r\n getInitialState: () => this.properties,\r\n makeSubscription: (setProps) => this.on('propsUpdate', setProps),\r\n });\r\n };\r\n\r\n /**\r\n * Este componente se utiliza para controlar propiedades comunes a todos los\r\n * campos.\r\n */\r\n SuperComponent = () => {\r\n if (this.#emitter.useState('isHidden')) return null;\r\n\r\n return (\r\n <Box className={`collector__field ${this.type}`}>\r\n <this.Component />\r\n </Box>\r\n );\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useSubscription } from '@apia/util';\r\nimport { CollectorField } from './CollectorField';\r\nimport { TValidationRules, TValidationFunction } from '../types';\r\nimport { validationsStore } from '../validationStore';\r\n\r\nexport abstract class ValidatedCollectorField<\r\n ValueType = any,\r\n FieldProps = any,\r\n> extends CollectorField<ValueType, FieldProps> {\r\n constructor(\r\n public readonly name: string,\r\n protected label: string,\r\n protected config: Partial<{\r\n initialValue: ValueType;\r\n properties: Partial<FieldProps>;\r\n validationFunction: TValidationFunction<ValueType>;\r\n validationRules: TValidationRules;\r\n }> = {},\r\n ) {\r\n super(name, label, config?.properties);\r\n }\r\n\r\n get initialValue() {\r\n return this.config.initialValue;\r\n }\r\n\r\n get value() {\r\n return validationsStore.getFieldStore(this.collector.id, this.name).value;\r\n }\r\n\r\n setInitialValue = (newValue: ValueType) => {\r\n this.config.initialValue = newValue;\r\n };\r\n\r\n setValidationFunction = (newFunction: TValidationFunction<ValueType>) => {\r\n this.config.validationFunction = newFunction;\r\n this.emit('functionUpdate', this.config.validationFunction);\r\n };\r\n\r\n setValidationRules = (newRules: TValidationRules) => {\r\n this.config.validationRules = newRules;\r\n this.emit('rulesUpdate', { ...this.config.validationRules });\r\n };\r\n\r\n setValue = (newValue: ValueType) => {\r\n validationsStore.setFieldValue(this.collector.id, this.name, newValue);\r\n };\r\n\r\n protected useValidationFunction = () => {\r\n return useSubscription<TValidationFunction<ValueType> | undefined>({\r\n getInitialState: () => () => this.config.validationFunction,\r\n makeSubscription: (setValidationFunction) => {\r\n return this.on('functionUpdate', setValidationFunction);\r\n },\r\n });\r\n };\r\n\r\n protected useValidationRules = () => {\r\n return useSubscription({\r\n getInitialState: () => this.config.validationRules,\r\n makeSubscription: (setValidationRules) => {\r\n return this.on('rulesUpdate', setValidationRules);\r\n },\r\n });\r\n };\r\n}\r\n","import { Checkbox, TCheckboxProps } from '../../components';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\n\r\nexport class CollectorCheckbox extends ValidatedCollectorField<\r\n string | boolean,\r\n Omit<TCheckboxProps, 'name'>\r\n> {\r\n type = 'checkbox';\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Checkbox\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n validationFunction={validationFunction}\r\n name={this.name}\r\n label={this.label}\r\n validationRules={rules}\r\n avoidSemicolon\r\n />\r\n );\r\n };\r\n}\r\n","import { InputProps } from '@apia/theme';\r\nimport { Input } from '../../components';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\n\r\nexport class CollectorInput extends ValidatedCollectorField<\r\n string,\r\n Omit<InputProps, 'name'>\r\n> {\r\n type = 'input';\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Input\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n validationFunction={validationFunction}\r\n name={this.name}\r\n label={this.label}\r\n validationRules={rules}\r\n />\r\n );\r\n };\r\n}\r\n","import { useMount } from '@apia/util';\r\nimport { useState } from 'react';\r\nimport { TSelectProps, TOption } from '../../components';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\nimport { Select } from '../../components';\r\nimport { TValidationFunction, TValidationRules } from '../../types';\r\n\r\nexport class CollectorSelect extends ValidatedCollectorField<\r\n string,\r\n Omit<TSelectProps, 'name'>\r\n> {\r\n type = 'select';\r\n\r\n constructor(\r\n protected _name: string,\r\n protected label: string,\r\n config?: Partial<{\r\n initialValue: string;\r\n options: TOption[];\r\n properties: Partial<Omit<TSelectProps, 'name'>>;\r\n validationFunction: TValidationFunction<string>;\r\n validationRules: TValidationRules;\r\n }>,\r\n ) {\r\n super(_name, label, config);\r\n if (config?.options) {\r\n this.#options = config.options;\r\n }\r\n }\r\n #options: TOption[] = [];\r\n\r\n addOption = (newOption: TOption) => {\r\n this.#options = [...this.#options, newOption];\r\n this.emit('optionsUpdate', this.#options);\r\n };\r\n\r\n setOptions = (newOptions: TOption[]) => {\r\n this.#options = [...newOptions];\r\n this.emit('optionsUpdate', this.#options);\r\n };\r\n\r\n #useOptions = () => {\r\n const [options, setOptions] = useState(this.#options);\r\n\r\n useMount(() => {\r\n return this.on('optionsUpdate', setOptions);\r\n });\r\n\r\n return options;\r\n };\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const options = this.#useOptions();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Select\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n validationFunction={validationFunction}\r\n name={this.name}\r\n label={this.label}\r\n validationRules={rules}\r\n options={options}\r\n />\r\n );\r\n };\r\n}\r\n","import { TextareaProps } from '@apia/theme';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\nimport { Textarea } from '../../components';\r\n\r\nexport class CollectorTextarea extends ValidatedCollectorField<\r\n string,\r\n Omit<TextareaProps, 'name'>\r\n> {\r\n type = 'textarea';\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Textarea\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n name={this.name}\r\n validationFunction={validationFunction}\r\n validationRules={rules}\r\n label={this.label}\r\n />\r\n );\r\n };\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { CollectorField } from '../CollectorField';\r\nimport { ReactNode } from 'react';\r\n\r\nexport class CollectorLabel extends CollectorField {\r\n private static maxId = 0;\r\n\r\n type = 'label';\r\n\r\n constructor(\r\n label: ReactNode,\r\n private kind:\r\n | 'h1'\r\n | 'h2'\r\n | 'h3'\r\n | 'h4'\r\n | 'h5'\r\n | 'h6'\r\n | 'p'\r\n | 'label' = 'label',\r\n ) {\r\n super(`label${CollectorLabel.maxId++}`, label);\r\n }\r\n\r\n Component = () => {\r\n if (this.kind === 'label') return <Box as={this.kind}>{this.label}</Box>;\r\n\r\n return <Box as={this.kind}>{this.label}</Box>;\r\n };\r\n}\r\n","import { SimpleButton } from '@apia/components';\r\nimport { CollectorField } from '../CollectorField';\r\nimport { ButtonProps } from '@apia/theme';\r\n\r\nlet i = 0;\r\n\r\nexport class CollectorButton extends CollectorField<\r\n null,\r\n Omit<ButtonProps, 'children'>\r\n> {\r\n type = 'button';\r\n\r\n constructor(\r\n protected label: string,\r\n properties?: Omit<ButtonProps, 'children'>,\r\n ) {\r\n super(`Button${i++}`, label, properties);\r\n }\r\n\r\n Component = () => {\r\n const props = this.useProperties();\r\n\r\n return <SimpleButton {...props}>{this.label}</SimpleButton>;\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport {\r\n ApiaUtil,\r\n ApiaUtilModalHandler,\r\n TOpenModal,\r\n useModalContext,\r\n} from '@apia/components';\r\nimport { getLabel } from '@apia/util';\r\nimport { Box, Button, getVariant } from '@apia/theme';\r\nimport { hasSucceedFormValidation, initValidations } from '../util';\r\nimport { Form } from '../form/Form';\r\nimport { CollectorField } from './CollectorField';\r\nimport { CollectorCheckbox } from './fields/Checkbox';\r\nimport { CollectorInput } from './fields/Input';\r\nimport { CollectorSelect } from './fields/Select';\r\nimport { CollectorTextarea } from './fields/Textarea';\r\nimport { CollectorLabel } from './fields/Label';\r\nimport { CollectorButton } from './fields/Button';\r\nimport { ValidatedCollectorField } from './ValidatedCollectorField';\r\nimport { TModalContext } from '@apia/components/src/components/modals/ModalContext';\r\n\r\ntry {\r\n void initValidations().catch(() => {});\r\n} catch (e) {\r\n console.error(e);\r\n}\r\n\r\nlet maxId = 0;\r\n\r\nexport class Collector {\r\n fields = {\r\n button: CollectorButton,\r\n checkbox: CollectorCheckbox,\r\n input: CollectorInput,\r\n /**\r\n * Muestra una etiqueta con tag personalizable: h1...h6, p, label. (Por\r\n * defecto: label)\r\n */\r\n label: CollectorLabel,\r\n select: CollectorSelect,\r\n textarea: CollectorTextarea,\r\n };\r\n\r\n private private__id = `Collector${maxId++}`;\r\n public get id() {\r\n return this.private__id;\r\n }\r\n modal: ApiaUtilModalHandler | null = null;\r\n\r\n #fields: Record<string, CollectorField> = {};\r\n\r\n add = (...fields: CollectorField[]) => {\r\n fields.forEach((field) => {\r\n this.#fields[field.name] = field;\r\n // eslint-disable-next-line no-param-reassign\r\n field.collector = this;\r\n });\r\n return this;\r\n };\r\n\r\n forEach = (cb: (field: CollectorField, i: number) => void) => {\r\n Object.values(this.#fields).forEach(cb);\r\n };\r\n\r\n #Component = ({\r\n hideConfirm,\r\n resolve,\r\n }: {\r\n hideConfirm?: boolean;\r\n resolve: (v: Record<string, unknown>) => boolean;\r\n }) => {\r\n const modal = useModalContext();\r\n\r\n return (\r\n <this.Render resolve={resolve} hideConfirm={hideConfirm} modal={modal} />\r\n );\r\n };\r\n\r\n public readonly Render = ({\r\n hideConfirm,\r\n modal,\r\n resolve,\r\n className,\r\n }: {\r\n className?: string;\r\n hideConfirm?: boolean;\r\n modal?: TModalContext;\r\n resolve: (v: Record<string, unknown>) => boolean;\r\n }) => {\r\n let hasValidated = false;\r\n\r\n return (\r\n <Box\r\n className={`formContainer ${className || ''}`}\r\n {...getVariant('layout.util.collector.formContainer')}\r\n >\r\n <Form\r\n name={this.private__id}\r\n onValidate={(result) => {\r\n if (hasSucceedFormValidation(result)) {\r\n const res = resolve(result.submitValues);\r\n if (res) {\r\n modal?.close();\r\n }\r\n }\r\n }}\r\n >\r\n <Box className=\"collector__fields\">\r\n {Object.values(this.#fields).map((current) => {\r\n if (current instanceof ValidatedCollectorField)\r\n hasValidated = true;\r\n\r\n return <current.SuperComponent key={current.name} />;\r\n })}\r\n </Box>\r\n {hasValidated && !hideConfirm && (\r\n <Box className=\"collector__buttons\">\r\n <Button variant=\"outline\">{getLabel('btnCon').text}</Button>\r\n </Box>\r\n )}\r\n </Form>\r\n </Box>\r\n );\r\n };\r\n\r\n show = <FormValues extends Record<string, unknown>>(\r\n modalProps?: Partial<\r\n Omit<TOpenModal, 'children' | 'onConfirm' | 'onCancel' | 'confirmProps'>\r\n > &\r\n Partial<{\r\n hideConfirm: boolean;\r\n /**\r\n * Si este método devuelve false, el modal no se cerrará\r\n */\r\n onConfirm?: (res: FormValues | null) => boolean;\r\n }>,\r\n ): Promise<FormValues | null> => {\r\n const { onConfirm, ...actualModalProps } = modalProps ?? {};\r\n const hasResolved = false;\r\n return new Promise<FormValues | null>((resolve) => {\r\n const C = this.#Component;\r\n const modal = ApiaUtil.instance.modals.open({\r\n onExited: () => {\r\n if (!hasResolved) {\r\n this.modal = null;\r\n resolve(null);\r\n }\r\n },\r\n children: (\r\n <C\r\n hideConfirm={modalProps?.hideConfirm}\r\n resolve={(values) => {\r\n if (onConfirm) {\r\n const confirmResult = onConfirm(values as FormValues);\r\n if (!confirmResult) {\r\n return false;\r\n }\r\n }\r\n\r\n resolve(values as FormValues);\r\n return true;\r\n }}\r\n />\r\n ),\r\n variant: 'layout.util.collector.modal',\r\n initialFocusGetter(modalInnerRef) {\r\n return modalInnerRef.querySelector<HTMLElement>(\r\n 'input,textarea,select,button:not(.modal__closeButton)',\r\n );\r\n },\r\n ...actualModalProps,\r\n });\r\n this.modal = modal;\r\n });\r\n };\r\n}\r\n","import { createContext, useContext } from 'react';\r\nimport { Validable } from '.';\r\n\r\nexport const ValidableContext = createContext<Validable<any> | undefined>(\r\n undefined,\r\n);\r\n\r\nexport function useValidableContext<T extends object>() {\r\n const context = useContext<Validable<T> | undefined>(ValidableContext);\r\n return context;\r\n}\r\n","export function setValueByPath<T extends object>(\r\n obj: T,\r\n path: string,\r\n value: unknown,\r\n) {\r\n if (path !== '') {\r\n const steps = path.split('.');\r\n if (steps.length === 0) {\r\n console.warn(`An empty path was provoided ${path}`);\r\n return null;\r\n }\r\n if (steps.length === 1) {\r\n (obj as any)[steps[0]] = value;\r\n } else {\r\n const step = steps.shift()!;\r\n if (!(obj as any)[step]) (obj as any)[step] = {};\r\n setValueByPath((obj as any)[step], steps.join('.'), value);\r\n }\r\n }\r\n}\r\n","import { observer } from 'mobx-react-lite';\r\nimport { ReactNode } from 'react';\r\nimport { FieldLabel, TFieldLabel } from '@apia/components';\r\nimport { TObjectInspection, useValidableContext, Validable } from '..';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport const ValidableField = observer(\r\n <T extends object>({\r\n children,\r\n context,\r\n label,\r\n path,\r\n ...props\r\n }: {\r\n children: ReactNode;\r\n context?: Validable<T>;\r\n label?: string;\r\n path: typeof context extends undefined ? string : TObjectInspection<T>;\r\n } & Omit<TFieldLabel, 'label' | 'error' | 'required'>) => {\r\n const reactContext = useValidableContext<T>();\r\n const actualContext = context ?? reactContext;\r\n\r\n if (!actualContext) throw new Error('ValidableContext not found');\r\n\r\n const validations = actualContext.getValidations(path);\r\n const error = actualContext.getError(path);\r\n label = label ?? validations?.fieldLabel;\r\n return (\r\n <FieldLabel\r\n {...props}\r\n error={error}\r\n label={\r\n label?.startsWith('lbl')\r\n ? getLabel(label).text\r\n : (label ?? `Label not provided: ${path}`)\r\n }\r\n required={validations?.required}\r\n >\r\n {children}\r\n </FieldLabel>\r\n );\r\n },\r\n);\r\n","import { observer } from 'mobx-react-lite';\r\nimport { TObjectInspection, useValidableContext, Validable } from '..';\r\nimport { ChangeEvent, ReactNode } from 'react';\r\n\r\nexport type ValidableFieldProps<T extends object> = {\r\n className?: string;\r\n context: Validable<T>;\r\n label?: string;\r\n onChange?: (\r\n value: ChangeEvent<\r\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\r\n >,\r\n ) => void;\r\n path: TObjectInspection<T>;\r\n title?: string;\r\n};\r\n\r\nexport function makeValidableField<\r\n AdditionalProps extends Record<string, any> = Record<string, any>,\r\n>(\r\n Component: (\r\n props: ValidableFieldProps<{ name: string }> & AdditionalProps,\r\n ) => ReactNode,\r\n) {\r\n const ActualComponent = observer(Component);\r\n\r\n const NewValidableField = <T extends object>(\r\n props: ValidableFieldProps<T> & AdditionalProps,\r\n ) => {\r\n const reactContext = useValidableContext<T>();\r\n const actualContext = props.context ?? reactContext;\r\n\r\n if (!actualContext) throw new Error('ValidableContext not found');\r\n\r\n return <ActualComponent {...(props as any)} context={actualContext} />;\r\n };\r\n\r\n return NewValidableField;\r\n}\r\n","import { ValidableField } from './ValidableField';\r\nimport { ChangeEvent } from 'react';\r\nimport { Input } from '@apia/theme';\r\nimport { makeValidableField } from './makeValidableField';\r\n\r\nexport const ValidableInput = makeValidableField(\r\n ({ type, context, label, path, onChange, ...props }) => {\r\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\r\n context.setValue(path, event.target.value);\r\n onChange?.(event);\r\n };\r\n\r\n return (\r\n <ValidableField\r\n context={context}\r\n path={path as never}\r\n label={label}\r\n {...props}\r\n className={`input ${props.className}`}\r\n >\r\n <Input\r\n name={path}\r\n type={type}\r\n value={context.getValue(path)}\r\n onChange={handleChange}\r\n />\r\n </ValidableField>\r\n );\r\n },\r\n);\r\n","import { ValidableField } from './ValidableField';\r\nimport { ChangeEvent } from 'react';\r\nimport { Select } from '@apia/theme';\r\nimport { makeValidableField } from './makeValidableField';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport const ValidableSelect = makeValidableField<{\r\n options: {\r\n value: string;\r\n label: string;\r\n selected?: boolean;\r\n disabled?: boolean;\r\n }[];\r\n}>(({ context, label, path, onChange, options, ...props }) => {\r\n const handleChange = (event: ChangeEvent<HTMLSelectElement>) => {\r\n context.setValue(path, event.target.value);\r\n onChange?.(event);\r\n };\r\n\r\n return (\r\n <ValidableField\r\n context={context}\r\n path={path as never}\r\n label={label}\r\n {...props}\r\n className={`select ${props.className}`}\r\n >\r\n <Select\r\n name={path}\r\n value={context.getValue(path)}\r\n onChange={handleChange}\r\n >\r\n {options.map((option) => (\r\n <option\r\n selected={option.selected}\r\n key={option.value}\r\n value={option.value}\r\n disabled={option.disabled}\r\n >\r\n {option.label.startsWith('lbl')\r\n ? getLabel(option.label).text\r\n : option.label}\r\n </option>\r\n ))}\r\n </Select>\r\n </ValidableField>\r\n );\r\n});\r\n","import { ValidableField } from './ValidableField';\r\nimport { ChangeEvent } from 'react';\r\nimport { Textarea } from '@apia/theme';\r\nimport { makeValidableField } from './makeValidableField';\r\n\r\nexport const ValidableTextarea = makeValidableField(\r\n ({ context, label, path, onChange, ...props }) => {\r\n const handleChange = (event: ChangeEvent<HTMLTextAreaElement>) => {\r\n context.setValue(path, event.target.value);\r\n onChange?.(event);\r\n };\r\n\r\n return (\r\n <ValidableField\r\n context={context}\r\n path={path}\r\n label={label}\r\n {...props}\r\n className={`textarea ${props.className}`}\r\n >\r\n <Textarea\r\n name={path}\r\n value={context.getValue(path)}\r\n onChange={handleChange}\r\n />\r\n </ValidableField>\r\n );\r\n },\r\n);\r\n","import { ValidableField } from './ValidableField';\r\nimport { ChangeEvent } from 'react';\r\nimport { Checkbox } from '@apia/components';\r\nimport { makeValidableField } from './makeValidableField';\r\n\r\nexport const ValidableCheck = makeValidableField(\r\n ({ context, label, path, onChange, ...props }) => {\r\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\r\n context.setValue(path, event.target.value);\r\n onChange?.(event);\r\n };\r\n\r\n return (\r\n <ValidableField\r\n context={context}\r\n path={path as never}\r\n avoidSemicolon\r\n label={label}\r\n {...props}\r\n className={`checkbox ${props.className}`}\r\n >\r\n <Checkbox\r\n name={path}\r\n checked={context.getValue(path)}\r\n onChange={handleChange}\r\n />\r\n </ValidableField>\r\n );\r\n },\r\n);\r\n","import { getLabel, getValueByPath } from '@apia/util';\r\nimport { TObjectInspection, ValidationRules, ValidationsMap } from './types';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { ReactNode } from 'react';\r\nimport { ValidableContext } from './context';\r\nimport { setValueByPath } from './util';\r\n\r\nexport async function validate<T extends object>(\r\n target: T,\r\n validations: ValidationsMap<T>,\r\n): Promise<true | Record<string, string>> {\r\n const errors: Record<string, string> = {};\r\n let focus: undefined | (() => void) = undefined;\r\n\r\n for (const key in validations) {\r\n const validation = validations[key as keyof ValidationsMap<T>]!;\r\n\r\n const value = getValueByPath(target as Record<string, unknown>, key);\r\n\r\n if (validation.validationFunction) {\r\n const validationResult = await validation.validationFunction(value);\r\n if (validationResult !== true) {\r\n errors[key] = validationResult;\r\n }\r\n } else if (validation.required && !value) {\r\n errors[key] =\r\n validation.errorsLabels?.required ??\r\n getLabel('msgReqField', { text: { TOK1: key } }).text;\r\n } else if (\r\n validation.minLength !== undefined &&\r\n value &&\r\n String(value).length < validation.minLength\r\n ) {\r\n errors[key] =\r\n validation.errorsLabels?.minLength ??\r\n getLabel('msgMinLength', { text: { TOK1: key } }).text;\r\n } else if (\r\n validation.maxLength !== undefined &&\r\n value &&\r\n String(value).length > validation.maxLength\r\n ) {\r\n errors[key] =\r\n validation.errorsLabels?.maxLength ??\r\n getLabel('msgMaxLength', { text: { TOK1: key } }).text;\r\n } else if (\r\n validation.min !== undefined &&\r\n value &&\r\n Number(value) < validation.min\r\n ) {\r\n errors[key] =\r\n validation.errorsLabels?.min ??\r\n getLabel('msgMinValue', { text: { TOK1: key } }).text;\r\n } else if (\r\n validation.max !== undefined &&\r\n value &&\r\n Number(value) > validation.max\r\n ) {\r\n errors[key] =\r\n validation.errorsLabels?.max ??\r\n getLabel('msgMaxValue', { text: { TOK1: key } }).text;\r\n } else if (\r\n validation.pattern &&\r\n value &&\r\n !new RegExp(validation.pattern).test(String(value))\r\n ) {\r\n errors[key] =\r\n validation.errorsLabels?.pattern ??\r\n getLabel('msgExpRegFal', { text: { TOK1: key } }).text;\r\n }\r\n\r\n if (errors[key] && !focus) {\r\n focus =\r\n validation.focus ||\r\n (() =>\r\n document\r\n .querySelector<HTMLElement>(`[name=${key.replace(/\\./g, '\\\\.')}]`)\r\n ?.focus());\r\n }\r\n }\r\n\r\n const hasErrors = Object.keys(errors).length > 0;\r\n hasErrors && focus?.();\r\n\r\n return hasErrors ? errors : true;\r\n}\r\n\r\nexport abstract class Validable<T extends object> {\r\n errors: Record<string, string> = {};\r\n\r\n public abstract state: T;\r\n\r\n public abstract validations: ValidationsMap<T>;\r\n\r\n constructor() {\r\n makeObservable(this, {\r\n errors: observable,\r\n });\r\n }\r\n\r\n public Context = ({ children }: { children: ReactNode }) => {\r\n return (\r\n <ValidableContext.Provider value={this}>\r\n {children}\r\n </ValidableContext.Provider>\r\n );\r\n };\r\n\r\n public getError(path: TObjectInspection<T>) {\r\n return this.errors[path];\r\n }\r\n\r\n public getValidations(path: TObjectInspection<T>) {\r\n return getValueByPath<ValidationRules>(this.validations, path)!;\r\n }\r\n\r\n public getValue<V>(path: TObjectInspection<T>) {\r\n return getValueByPath<V>(this.state, path)!;\r\n }\r\n\r\n public setValue<V>(path: TObjectInspection<T>, value: V) {\r\n setValueByPath(this.state, path, value);\r\n }\r\n\r\n async validate(): Promise<true | Record<string, string>> {\r\n const result = await validate<T>(this.state, this.validations);\r\n\r\n if (result !== true) {\r\n Object.assign(this.errors, result);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport * from './types';\r\nexport * from './context';\r\nexport * from './fields';\r\n"],"names":["__publicField","isTouched","AppCheckbox","TUIInput","Input","AppNumberInput","TUIRadio","TUISelect","TUITextarea","__privateAdd","__privateGet","Select","Textarea","Checkbox"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/form/FormContext.tsx","../src/validationMethods.ts","../src/util.ts","../src/validationStore.ts","../src/form/Form.tsx","../src/hooks/useField.ts","../src/hooks/useFieldStatesClassNames.ts","../src/hooks/useFieldValue.ts","../src/hooks/useValidationClass.ts","../src/components/ValidationError.tsx","../src/components/FieldWrapper.tsx","../src/components/Captcha.tsx","../src/components/Checkbox.tsx","../src/components/DeletableInput.tsx","../src/components/FileInput.tsx","../src/components/Input.tsx","../src/components/NumberInput.tsx","../src/components/Radio.tsx","../src/components/Select.tsx","../src/components/Switchbox.tsx","../src/components/Textarea.tsx","../src/collector/CollectorField.tsx","../src/collector/ValidatedCollectorField.ts","../src/collector/fields/Checkbox.tsx","../src/collector/fields/Input.tsx","../src/collector/fields/Select.tsx","../src/collector/fields/Textarea.tsx","../src/collector/fields/Label.tsx","../src/collector/fields/Button.tsx","../src/collector/Collector.tsx","../src/Validable/context.ts","../src/Validable/util.ts","../src/Validable/fields/ValidableField.tsx","../src/Validable/fields/makeValidableField.tsx","../src/Validable/fields/ValidableInput.tsx","../src/Validable/fields/ValidableSelect.tsx","../src/Validable/fields/ValidableTextarea.tsx","../src/Validable/fields/ValidableCheck.tsx","../src/Validable/index.tsx"],"sourcesContent":["import React from 'react';\r\nimport { TValidationResult } from '../types';\r\n\r\nexport interface IFormContext<\r\n ValueType extends Record<string, unknown> = Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n> {\r\n avoidFieldsTouch?: boolean;\r\n name: string;\r\n validate: () => Promise<TValidationResult<ValueType, SubmitValueType>>;\r\n}\r\n\r\nexport const FormContext = React.createContext<IFormContext>(\r\n {} as IFormContext,\r\n);\r\n\r\n/**\r\n * Provee acceso de forma sencilla al contexto de\r\n * validación, que básicamente posee el nombre del\r\n * form en caso de que se quiera usar para acceder\r\n * a través de Redux a la información del mismo y un\r\n * método validate, que dispara la validación del\r\n * form.\r\n *\r\n * En la práctica, el método validate es casi\r\n * innecesario, ya que la validación se puede disparar\r\n * con cualquier botón que no tenga seteado el\r\n * atributo type=\"button\" (esto es así ya que en el\r\n * DOM se renderiza un elemento de tipo form).\r\n */\r\nexport function useFormContext() {\r\n const formContext = React.useContext(FormContext);\r\n if (!formContext) throw new Error('There is no FormContext');\r\n return formContext;\r\n}\r\n","import { IFieldDefinition, TFieldValidationResult } from './types';\r\nimport { getValidations } from './util';\r\n\r\nexport interface IValidateByRules<ValueType> {\r\n rules: NonNullable<IFieldDefinition['validate']>;\r\n value: ValueType;\r\n}\r\n\r\n/**\r\n * Este método toma un valor y unas reglas de validación\r\n * y ejecuta la validación correspondiente a dichas reglas.\r\n */\r\nexport function validateByRules<ValueType>({\r\n rules,\r\n value,\r\n}: IValidateByRules<ValueType>): TFieldValidationResult {\r\n const validationResult = getValidations(rules).validate(value);\r\n return validationResult;\r\n}\r\n","import { customEvents } from '@apia/util';\r\nimport { notify } from '@apia/notifications';\r\nimport {\r\n TFieldValidationResult,\r\n TSuccessfulValidation,\r\n TValidationResult,\r\n IFieldDefinition,\r\n TValidationField,\r\n} from './types';\r\nimport { validateByRules } from './validationMethods';\r\n\r\nimport type formcheckLanguage from './lang/es';\r\nimport { validationsStore } from './validationStore';\r\n\r\ndeclare global {\r\n interface Window {\r\n NO_LANGUAGE_EXCEPTION: string;\r\n MSG_INVALID_REG_EXP: string;\r\n GNR_INVALID_NAME: string;\r\n }\r\n}\r\n\r\n/**\r\n * Realiza la validación del campo tomando en cuenta las\r\n * distintas posibilidades de validación.\r\n */\r\nexport async function validateField(\r\n field: TValidationField<unknown>,\r\n formName: string,\r\n): Promise<TFieldValidationResult> {\r\n let validationResult: TFieldValidationResult | null = null;\r\n const fieldValue = field.validationValueParser\r\n ? field.validationValueParser(field.value)\r\n : field.value;\r\n if (field.validationFunction) {\r\n validationResult = await field.validationFunction(fieldValue, formName);\r\n }\r\n if (\r\n (!field.validationFunction || validationResult === true) &&\r\n field.validationRules\r\n ) {\r\n validationResult = validateByRules({\r\n rules: field.validationRules,\r\n value: fieldValue,\r\n });\r\n } else if (validationResult === null) validationResult = true;\r\n return validationResult;\r\n}\r\n\r\n/**\r\n * Determina si la validación de un campo resultó exitosa.\r\n */\r\nexport function hasSucceedFieldValidation(\r\n result: TFieldValidationResult,\r\n): result is true {\r\n return result === true;\r\n}\r\n\r\n/**\r\n * Determina si la validación de un formulario resultó\r\n * exitosa. Está pensada para utilizar en el callback\r\n * onValidate de Form o en la acción validationsActions.validateForm\r\n */\r\nexport function hasSucceedFormValidation<\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n>(\r\n result: TValidationResult<ValueType, SubmitValueType>,\r\n): result is TSuccessfulValidation<ValueType, SubmitValueType> {\r\n return !('errors' in result);\r\n}\r\n\r\n/**\r\n * Intenta hacer foco en el campo y devuelve un booleano\r\n * indicando si se logró o no.\r\n */\r\nexport async function focusOnField(formName: string, field: TValidationField) {\r\n if (field.focus) {\r\n return (await field.focus()) || true;\r\n }\r\n\r\n const formElement = document.getElementById(\r\n `ValidationForm-${formName}`,\r\n ) as HTMLFormElement;\r\n const fieldElement: HTMLElement | null = formElement?.querySelector(\r\n `[name=\"${CSS.escape(field.name)}\"], #${CSS.escape(field.name)}`,\r\n );\r\n\r\n if (fieldElement) {\r\n return new Promise((resolve) => {\r\n const event = new CustomEvent(customEvents.focus, { bubbles: true });\r\n fieldElement.focus();\r\n fieldElement.dispatchEvent(event);\r\n fieldElement.scrollIntoView({\r\n block: 'center',\r\n behavior: 'auto',\r\n });\r\n resolve(true);\r\n });\r\n }\r\n return false;\r\n}\r\n\r\nlet langDefinition: typeof formcheckLanguage;\r\n/**\r\n * Devuelve la cadena correspondiente a un código\r\n * de error, realizando los reemplazos correspondientes.\r\n */\r\nexport function lang(\r\n errorCode: keyof typeof formcheckLanguage,\r\n ...replacements: (string | number)[]\r\n) {\r\n if (!langDefinition[errorCode]) return '';\r\n let returnString = langDefinition[errorCode];\r\n replacements.forEach((replace, index) => {\r\n returnString = returnString.replace(`%${index}`, replace.toString());\r\n });\r\n return returnString;\r\n}\r\n\r\nexport function classToValidationFunction<T = string>(\r\n className: string,\r\n): TValidationField<T>['validationFunction'] {\r\n // validate[confirm:fieldName:fieldTitle?]\r\n const match = className?.match(/'confirm:(\\w+):(.+?)']/);\r\n if (match) {\r\n const validationFunction: TValidationField<T>['validationFunction'] = (\r\n value,\r\n formName,\r\n ) => {\r\n return value === validationsStore.getFieldStore(formName, match[1])?.value\r\n ? true\r\n : lang('confirm', match[2] ?? match[1]);\r\n };\r\n\r\n return validationFunction;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function classToValidate(\r\n className: string,\r\n): IFieldDefinition['validate'] {\r\n const validations: Record<string, unknown> = {};\r\n if (className) {\r\n const match = className.match(/validate\\[([^\\]]+)\\]/);\r\n if (match) {\r\n const definitions = match[1].replaceAll('~', '').split(',');\r\n definitions.forEach((definition) => {\r\n const definitionMatch = definition.match(/(\\w+)(?:=([\\w\\d]+))?/);\r\n if (definitionMatch) {\r\n const prop = definitionMatch[1] as keyof NonNullable<\r\n IFieldDefinition['validate']\r\n >;\r\n if (prop === 'pattern' && definitionMatch[2])\r\n validations[prop] = new RegExp(definitionMatch[2]);\r\n else if (definitionMatch[2]) {\r\n const value = definitionMatch[2].split(',');\r\n const actualValue = (\r\n value.length < 2 ? value.join() : value\r\n ) as NonNullable<IFieldDefinition['validate']>[typeof prop];\r\n validations[prop] =\r\n actualValue as (typeof validations)[typeof prop];\r\n } else validations[prop] = true;\r\n }\r\n });\r\n return validations as IFieldDefinition['validate'];\r\n }\r\n }\r\n return {};\r\n}\r\n\r\nexport const getValidationErrorMessagesByLang = async (\r\n langCode = window.LANG_CODE,\r\n): Promise<typeof formcheckLanguage> => {\r\n return (\r\n (await import(\r\n /* webpackChunkName: \"val-lang-[request]\" */ `./lang/${langCode}.ts`\r\n ).catch((error) => {\r\n throw error;\r\n })) as { default: typeof formcheckLanguage }\r\n ).default;\r\n};\r\n\r\n/**\r\n * Carga el archivo con mensajes de errores según el lenguaje\r\n * especificado.\r\n */\r\nexport const getErrorsMapByLang = async (\r\n langCode = window.LANG_CODE,\r\n): Promise<typeof formcheckLanguage> => {\r\n return (\r\n (await import(\r\n /* webpackChunkName: \"val-lang-[request]\" */ `./lang/${langCode}.ts`\r\n ).catch((error) => {\r\n throw error;\r\n })) as { default: typeof formcheckLanguage }\r\n ).default;\r\n};\r\n\r\n/**\r\n * Realiza la carga de los mensajes de errores para el lenguaje\r\n * especificado. Este método debe llamarse antes de utilizar\r\n * las validaciones.\r\n */\r\nexport async function initValidations() {\r\n if (langDefinition) return;\r\n const code = document.documentElement.lang ?? 'es';\r\n langDefinition = (\r\n (await import(\r\n /* webpackChunkName: \"val-lang-[request]\" */ `./lang/${code}.ts`\r\n ).catch((error) => {\r\n notify({\r\n type: 'danger',\r\n message: window.NO_LANGUAGE_EXCEPTION,\r\n });\r\n throw error;\r\n })) as { default: typeof formcheckLanguage }\r\n ).default;\r\n}\r\n\r\n/**\r\n * Devuelve una función validadora, que devolverá true\r\n * o una cadena con el mensaje de error correspondiente\r\n * según el lenguaje actual y las reglas de validación\r\n * establecidas.\r\n */\r\nexport function getValidations(outerValidation: IFieldDefinition['validate']): {\r\n validate: (v: unknown) => string | true;\r\n} {\r\n const validation = { ...outerValidation };\r\n if (!validation)\r\n return {\r\n validate: () => {\r\n return true;\r\n },\r\n } as { validate: () => true };\r\n\r\n return {\r\n validate: (outerV: unknown) => {\r\n const v = outerV ?? '';\r\n let returnValue: boolean | string = true;\r\n\r\n if (returnValue && validation.pattern) {\r\n let actualRegexp: RegExp;\r\n\r\n if (!(validation.pattern instanceof RegExp)) {\r\n const patternResult = validation.pattern.match(\r\n /(?:^\\/(.+)\\/(\\w+)?$)|(^.*$)/,\r\n ) as RegExpMatchArray;\r\n\r\n const regexp = patternResult[1];\r\n const flags = patternResult[2];\r\n const stringPattern = patternResult[3];\r\n\r\n actualRegexp = new RegExp(\r\n regexp || stringPattern,\r\n flags || undefined,\r\n );\r\n } else actualRegexp = validation.pattern;\r\n\r\n returnValue =\r\n !!String(v).match(actualRegexp) ||\r\n (validation.patternMessage ?? window.MSG_INVALID_REG_EXP);\r\n }\r\n if (returnValue === true && validation.maxLength)\r\n returnValue =\r\n String(v).length <= validation.maxLength ||\r\n lang('lengthmax', validation.maxLength);\r\n if (returnValue === true && validation.minLength)\r\n returnValue =\r\n String(v).length >= validation.minLength ||\r\n lang('lengthmin', validation.minLength);\r\n if (returnValue === true && validation.max && validation.min)\r\n returnValue =\r\n (Number(v) <= validation.max && Number(v) >= validation.min) ||\r\n lang('digitltd', validation.min, validation.max);\r\n if (returnValue === true && validation.min)\r\n returnValue =\r\n Number(v) >= validation.min || lang('digitmin', validation.min);\r\n if (returnValue === true && validation.max)\r\n returnValue =\r\n Number(v) <= validation.max || lang('digitltd', 0, validation.max);\r\n if (returnValue === true && validation.validName)\r\n returnValue =\r\n !!String(v).match(/^[a-zA-Z0-9_.]*$/) || window.GNR_INVALID_NAME;\r\n if (returnValue === true && (validation.alpha || validation.nodigit))\r\n returnValue = !!String(v).match(/^[a-zA-Z]*$/) || lang('alpha');\r\n if (returnValue === true && validation.alphanum)\r\n returnValue = !!String(v).match(/^[a-zA-Z0-9]*$/) || lang('alphanum');\r\n if (returnValue === true && (validation.digit || validation.number))\r\n returnValue = !!String(v).match(/^[0-9]*$/) || lang('digit');\r\n if (returnValue === true && validation.email)\r\n returnValue =\r\n !!String(v).match(\r\n // eslint-disable-next-line no-control-regex\r\n /(?:^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i,\r\n ) || lang('email');\r\n if (returnValue === true && validation.differs)\r\n returnValue =\r\n v !== validation.differs || lang('differs', validation.differs);\r\n if (returnValue === true && validation.length_str)\r\n returnValue =\r\n (String(v).length >= validation.length_str[0] &&\r\n String(v).length <= validation.length_str[1]) ||\r\n lang('length_str', ...validation.length_str);\r\n if (returnValue === true && validation.length_fix)\r\n returnValue =\r\n String(v).length === validation.length_fix ||\r\n lang('length_fix', validation.length_fix);\r\n if (returnValue === true && validation.words_min) {\r\n const words = String(v).split(' ').length;\r\n return (\r\n words >= validation.words_min ||\r\n lang('words_min', validation.words_min)\r\n );\r\n }\r\n if (returnValue === true && validation.words_max) {\r\n const words = String(v).split(' ').length;\r\n return (\r\n words <= validation.words_max ||\r\n lang('words_max', validation.words_max)\r\n );\r\n }\r\n if (returnValue === true && validation.words_range) {\r\n const words = String(v).split(' ').length;\r\n return (\r\n (words <= validation.words_range[0] &&\r\n words >= validation.words_range[1]) ||\r\n lang('words_range', ...validation.words_range)\r\n );\r\n }\r\n if (returnValue === true && validation.required)\r\n returnValue =\r\n (Array.isArray(outerV) && outerV.length > 0) ||\r\n typeof outerV === 'number' ||\r\n (!Array.isArray(v) && !!v) ||\r\n lang('required');\r\n\r\n return returnValue;\r\n },\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-dynamic-delete */\r\nimport { notify } from '@apia/notifications';\r\nimport {\r\n TPropsComparator,\r\n TPropsSelector,\r\n TPropsConfiguration,\r\n propsStore,\r\n usePropsSelector,\r\n} from '@apia/util';\r\nimport {\r\n TValidationField,\r\n TFieldValidationResult,\r\n TSuccessfulValidation,\r\n TValidationResult,\r\n TWrongValidation,\r\n TRegisterFormOptions,\r\n TUpdateFieldOptions,\r\n TFormState,\r\n TRegisterField,\r\n TRegisterFieldOptions,\r\n} from './types';\r\nimport { focusOnField, hasSucceedFieldValidation, validateField } from './util';\r\n\r\ndeclare global {\r\n interface Window {\r\n MSG_WRONG_VALIDATION_NO_FOCUSED_FILE: string;\r\n }\r\n}\r\n\r\nexport const validationsStore = new (class {\r\n activeForms: string[] = [];\r\n\r\n timeouts: Record<string, ReturnType<typeof setTimeout> | true> = {};\r\n\r\n loadFromSessionStorage(formName: string) {\r\n const storageValue = sessionStorage.getItem(this.makeFormName(formName));\r\n\r\n if (storageValue) {\r\n try {\r\n const parsedValue = JSON.parse(storageValue) as {\r\n formProps: Partial<TFormState>;\r\n fields: Record<string, Partial<TValidationField>>;\r\n };\r\n this.activeForms.push(formName);\r\n this.updateFormStore(formName, parsedValue.formProps, true);\r\n Object.entries(parsedValue.fields).forEach(([name, field]) => {\r\n propsStore.updateField(\r\n this.makeFieldName(formName, name),\r\n {\r\n ...this.getFieldStore(formName, name),\r\n ...field,\r\n },\r\n { noEmit: true },\r\n );\r\n });\r\n\r\n return true;\r\n } catch (e) {\r\n e;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n persistFormToSessionStorage(formName: string) {\r\n const { isTouched, isValid, validationResult, ...formProps } =\r\n this.getFormStore(formName);\r\n const shouldPersist = formProps.persistToSessionStorage;\r\n\r\n if (shouldPersist) {\r\n const fields = formProps.fields\r\n .map((current) => {\r\n const {\r\n validationFunction,\r\n isTouched,\r\n error,\r\n validationValueParser,\r\n ...field\r\n } = this.getFieldStore(formName, current);\r\n return field;\r\n })\r\n .reduce(\r\n (o, c) => ({ ...o, [c.name]: c }),\r\n {} as Record<string, Partial<TValidationField>>,\r\n );\r\n\r\n sessionStorage.setItem(\r\n this.makeFormName(formName),\r\n JSON.stringify({\r\n formProps,\r\n fields,\r\n }),\r\n );\r\n }\r\n }\r\n\r\n getFieldStore(formName: string, fieldName: string) {\r\n return propsStore.getFieldProps<TValidationField>(\r\n this.makeFieldName(formName, fieldName),\r\n );\r\n }\r\n\r\n getFormStore(formName: string) {\r\n return propsStore.getFieldProps<TFormState>(this.makeFormName(formName));\r\n }\r\n\r\n updateFieldStore(\r\n formName: string,\r\n fieldName: string,\r\n props: Partial<TValidationField>,\r\n noEmit?: boolean,\r\n ) {\r\n propsStore.updateField(\r\n this.makeFieldName(formName, fieldName),\r\n {\r\n ...this.getFieldStore(formName, fieldName),\r\n ...props,\r\n },\r\n { noEmit },\r\n );\r\n this.persistFormToSessionStorage(formName);\r\n }\r\n\r\n updateFormStore(\r\n formName: string,\r\n newState: Partial<TFormState>,\r\n avoidPersist = false,\r\n ) {\r\n propsStore.updateField(this.makeFormName(formName), newState);\r\n if (!avoidPersist) this.persistFormToSessionStorage(formName);\r\n }\r\n\r\n enableFormTouch(formName: string) {\r\n this.timeouts[formName] = true;\r\n }\r\n\r\n existsField = (formName: string, fieldName: string) => {\r\n return !!this.getFormStore(formName)?.fields?.includes(fieldName);\r\n };\r\n\r\n makeFieldName(formName: string, fieldName: string) {\r\n return `validation_${formName}_${fieldName}`;\r\n }\r\n\r\n makeFormName(formName: string) {\r\n return `validation_${formName}`;\r\n }\r\n\r\n registerField = (\r\n formName: string,\r\n registerData: TRegisterField,\r\n options: TRegisterFieldOptions = { registerIfExists: true },\r\n ) => {\r\n const formProps = this.getFormStore(formName);\r\n if (formProps === undefined) this.registerForm(formName);\r\n\r\n if (!this.getFormStore(formName)?.fields.includes(registerData.name))\r\n this.updateFormStore(formName, {\r\n fields: [\r\n ...(this.getFormStore(formName)?.fields ?? []),\r\n registerData.name,\r\n ],\r\n });\r\n\r\n const existsInStore = this.getFieldStore(formName, registerData.name);\r\n\r\n if (\r\n (formProps?.avoidFieldsOverride || !options.registerIfExists) &&\r\n existsInStore\r\n ) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unused-vars\r\n const { value, ...updateData } = registerData;\r\n this.updateField(formName, updateData, {\r\n markFormAsTouched: false,\r\n avoidPropagation: options.avoidPropagation,\r\n });\r\n return;\r\n }\r\n\r\n this.updateFieldStore(\r\n formName,\r\n registerData.name,\r\n registerData,\r\n options.avoidPropagation,\r\n );\r\n };\r\n\r\n /**\r\n * Inicializa el estado de un nuevo formulario\r\n */\r\n registerForm = (\r\n formName: string,\r\n props: TRegisterFormOptions = { avoidFieldsOverride: false },\r\n ) => {\r\n props.persistToSessionStorage && this.loadFromSessionStorage(formName);\r\n\r\n if (this.activeForms.includes(formName)) {\r\n this.updateFormStore(\r\n formName,\r\n {\r\n avoidFieldsOverride: props.avoidFieldsOverride,\r\n },\r\n true,\r\n );\r\n if (props.initialValues)\r\n Object.entries(props.initialValues).forEach(([fieldId, fieldProps]) => {\r\n if (fieldProps instanceof Object)\r\n this.updateField(\r\n formName,\r\n { name: fieldId, ...fieldProps },\r\n { avoidFieldsOverride: props.avoidFieldsOverride },\r\n );\r\n });\r\n return;\r\n }\r\n this.activeForms.push(formName);\r\n this.updateFormStore(formName, {\r\n avoidFieldsOverride: props.avoidFieldsOverride,\r\n fields: [],\r\n isTouched: false,\r\n isValid: false,\r\n name: formName,\r\n validationResult: null,\r\n persistToSessionStorage: props.persistToSessionStorage,\r\n });\r\n\r\n // Set initial values\r\n Object.entries(props.initialValues ?? {}).forEach(([name, value]) => {\r\n this.updateField(\r\n formName,\r\n { name, value },\r\n {\r\n markFormAsTouched: false,\r\n avoidFieldsOverride: props.avoidFieldsOverride,\r\n },\r\n );\r\n });\r\n };\r\n\r\n /**\r\n * Setea el valor del campo con el nombre provisto. Si el campo no existe\r\n * en el formulario lo crea.\r\n */\r\n setFieldValue = (\r\n formName: string,\r\n fieldName: string,\r\n newValue: unknown,\r\n options?: TUpdateFieldOptions,\r\n ) => {\r\n if (!this.getFieldStore(formName, fieldName))\r\n this.registerField(formName, { name: fieldName, value: newValue });\r\n else\r\n this.updateField(\r\n formName,\r\n {\r\n name: fieldName,\r\n value: newValue,\r\n error: null,\r\n },\r\n options,\r\n );\r\n\r\n if (this.getFormStore(formName).isValid)\r\n this.updateFormStore(formName, { isValid: false });\r\n };\r\n\r\n setFormIsTouched = (formName: string, isTouched = true) => {\r\n this.updateFormStore(formName, { isTouched }, true);\r\n };\r\n\r\n /**\r\n * Elimina un campo del registro de validación de un formulario. De esta\r\n * forma cualquier validación que pudiera aplicarse sobre el mismo, ya no se\r\n * aplicará.\r\n */\r\n unregisterField = (formName: string, fieldName: string) => {\r\n if (this.getFormStore(formName))\r\n this.updateFormStore(formName, {\r\n fields: this.getFormStore(formName).fields.filter((current) => {\r\n return current !== fieldName;\r\n }),\r\n });\r\n propsStore.removeField(this.makeFieldName(formName, fieldName));\r\n };\r\n\r\n /**\r\n * Elimina un formulario del store de validación junto con todos los campos\r\n * asociados al mismo.\r\n */\r\n unregisterForm = (formName: string) => {\r\n this.getFormStore(formName)?.fields?.forEach((current) => {\r\n return propsStore.removeField(this.makeFieldName(formName, current));\r\n });\r\n this.activeForms = this.activeForms.filter((current) => {\r\n return current !== formName;\r\n });\r\n propsStore.removeField(this.makeFormName(formName));\r\n delete this.timeouts[formName];\r\n };\r\n\r\n /**\r\n * Actualiza las propiedades de un campo, si no existe, lo registra en el\r\n * formulario.\r\n */\r\n updateField = (\r\n formName: string,\r\n field: Partial<TValidationField> & Pick<TValidationField, 'name'>,\r\n options?: TUpdateFieldOptions,\r\n ) => {\r\n const previousValue = this.getFieldStore(formName, field.name)\r\n ?.value as unknown;\r\n\r\n if (this.getFormStore(formName))\r\n this.updateFormStore(formName, { isValid: false }, true);\r\n else this.registerForm(formName);\r\n\r\n if (previousValue !== undefined && options?.avoidFieldsOverride) return;\r\n\r\n const isTouched =\r\n field.value !== undefined &&\r\n field.value !== previousValue &&\r\n options?.markFormAsTouched !== false;\r\n\r\n if (!this.existsField(formName, field.name))\r\n this.registerField(formName, field, {\r\n avoidPropagation: options?.avoidPropagation,\r\n });\r\n this.updateFieldStore(\r\n formName,\r\n field.name,\r\n {\r\n ...field,\r\n isTouched:\r\n isTouched || this.getFieldStore(formName, field.name)?.isTouched,\r\n },\r\n options?.avoidPropagation,\r\n );\r\n if (isTouched) this.setFormIsTouched(formName);\r\n };\r\n\r\n /**\r\n * Actualiza múltiples campos al mismo tiempo.\r\n */\r\n updateMultipleFields = (\r\n formName: string,\r\n fields: (Partial<TValidationField> & Pick<TValidationField, 'name'>)[],\r\n options?: TUpdateFieldOptions,\r\n ) => {\r\n fields.forEach((current) => {\r\n return this.updateField(formName, current, options);\r\n });\r\n };\r\n\r\n /**\r\n * Ejecuta la validación sobre un formulario. En caso de que la validación\r\n * falle, se intenta hacer foco sobre el campo que no pudo validar.\r\n * Es importante notar que en caso de que un campo requiera validación,\r\n * debería estar presente en el DOM.\r\n *\r\n * No es necesario que el campo esté visible, ya que en caso de estar oculto\r\n * (por ejemplo por ser hijo de un acordeón), se emitirá un evento para\r\n * expandir al elemento padre que lo estuviera ocultando.\r\n *\r\n * @returns Devuelve una promesa que al ser resuelta otorga un objeto de tipo\r\n * TValidationResult. Este tipo está pensado para ser usado en conjunto con\r\n * el método hasSucceedFormValidation, que determinará si la validación fue\r\n * exitosa o hubo errores.\r\n *\r\n * @example\r\n *\r\n * const result = await validationStore.validateForm('myForm');\r\n * if(hasSucceedValidation(result)) {\r\n * console.log('Success!', result);\r\n * } else {\r\n * console.error('Validation error', result);\r\n * }\r\n */\r\n validateForm = async <\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n >(\r\n formName: string,\r\n ) => {\r\n const state = this.getFormStore(formName);\r\n\r\n if (!state) return { errors: { form: 'No form with name ' + formName } };\r\n\r\n const fields = state.fields.map((current) => {\r\n return this.getFieldStore(formName, current);\r\n });\r\n\r\n const validationErrors: TWrongValidation = { errors: {} };\r\n const validationValues: TSuccessfulValidation<Record<string, unknown>> = {\r\n submitValues: {},\r\n values: {},\r\n };\r\n let hasFiredFocus = false;\r\n let existsErrors = false;\r\n const fieldsWithError: Record<string, TFieldValidationResult> = {};\r\n\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const field of fields.filter((current) => {\r\n return current !== undefined;\r\n })) {\r\n // eslint-disable-next-line no-await-in-loop\r\n const validationResult = await validateField(field, formName);\r\n fieldsWithError[field.name] = validationResult;\r\n\r\n if (hasSucceedFieldValidation(validationResult)) {\r\n validationValues.submitValues[field.submitName ?? field.name] =\r\n field.submitValueParser\r\n ? await field.submitValueParser(field.value)\r\n : field.value;\r\n validationValues.values[field.name] = field.value;\r\n } else {\r\n this.updateField(formName, {\r\n name: field.name,\r\n error: validationResult,\r\n });\r\n if (!hasFiredFocus) {\r\n // eslint-disable-next-line no-await-in-loop\r\n if (await focusOnField(formName, field)) hasFiredFocus = true;\r\n }\r\n existsErrors = true;\r\n validationErrors.errors[field.name] = validationResult;\r\n }\r\n }\r\n\r\n if (existsErrors) {\r\n if (!hasFiredFocus) {\r\n notify({\r\n message: window.MSG_WRONG_VALIDATION_NO_FOCUSED_FILE,\r\n type: 'danger',\r\n });\r\n console.error('Campos que fallaron la validación', fieldsWithError);\r\n }\r\n this.updateFormStore(\r\n formName,\r\n {\r\n isValid: false,\r\n validationResult: validationErrors,\r\n },\r\n true,\r\n );\r\n return validationErrors as TValidationResult<ValueType, SubmitValueType>;\r\n }\r\n this.updateFormStore(\r\n formName,\r\n {\r\n isValid: true,\r\n validationResult: validationValues,\r\n },\r\n true,\r\n );\r\n return validationValues as TValidationResult<ValueType, SubmitValueType>;\r\n };\r\n})();\r\n\r\n/**\r\n * Este hook permite suscribirse a los cambios realizados en el\r\n * store de validación de un formulario. Funciona igual a un\r\n * useAppSelector en cuanto a la función selectora y comparadora.\r\n *\r\n * @param selector\r\n * @param comparator\r\n * @returns\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function useFormSelector<Selected = any>(\r\n formName: string,\r\n selector: TPropsSelector<Selected, TFormState>,\r\n comparator?: TPropsComparator<Selected>,\r\n) {\r\n return usePropsSelector(\r\n validationsStore.makeFormName(formName),\r\n selector,\r\n comparator,\r\n );\r\n}\r\n\r\n/**\r\n * Este hook permite suscribirse a los cambios realizados en el\r\n * store de validación de un campo de formulario. Funciona igual a un\r\n * useAppSelector en cuanto a la función selectora y comparadora.\r\n *\r\n * @param selector\r\n * @param comparator\r\n * @returns\r\n */\r\n\r\nexport function useFieldSelector<\r\n ValueType = unknown,\r\n SubmitValueType = unknown,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Selected = any,\r\n>(\r\n formName: string,\r\n fieldName: string,\r\n selector?: TPropsSelector<\r\n Selected,\r\n TValidationField<ValueType, SubmitValueType>\r\n >,\r\n comparator?: TPropsComparator<Selected>,\r\n): Selected;\r\nexport function useFieldSelector<\r\n ValueType = unknown,\r\n SubmitValueType = unknown,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Selected = any,\r\n>(\r\n formName: string,\r\n fieldName: string,\r\n configurator?: TPropsConfiguration<\r\n Selected,\r\n TValidationField<ValueType, SubmitValueType>\r\n >,\r\n): Selected;\r\nexport function useFieldSelector<\r\n ValueType = unknown,\r\n SubmitValueType = unknown,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Selected = any,\r\n>(\r\n formName: string,\r\n fieldName: string,\r\n confOrSelector?:\r\n | TPropsSelector<Selected, TValidationField<ValueType, SubmitValueType>>\r\n | TPropsConfiguration<\r\n Selected,\r\n TValidationField<ValueType, SubmitValueType>\r\n >,\r\n comparator?: TPropsComparator<Selected>,\r\n): Selected {\r\n const fieldId = validationsStore.makeFieldName(formName, fieldName);\r\n return usePropsSelector(fieldId, confOrSelector, comparator);\r\n}\r\n","import { useUnmount, useMount } from '@apia/util';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\nimport React from 'react';\r\nimport { getVariant, Box, BoxProps } from '@apia/theme';\r\nimport { FormContext, IFormContext } from './FormContext';\r\nimport { TValidationResult } from '../types';\r\nimport { validationsStore } from '../validationStore';\r\n\r\nexport type TOnValidate<\r\n ValueType extends Record<string, unknown> = Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n> = (\r\n validationResult: TValidationResult<ValueType, SubmitValueType>,\r\n) => unknown;\r\n\r\nexport interface IForm<\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n> {\r\n /**\r\n * Si se pasa en true, los campos que se registren en este form no\r\n * sobreescribirán valores previos si es que existen, sin importar el valor de\r\n * avoidRegisterIfExists pasado al useField.\r\n */\r\n avoidFieldsOverride?: boolean;\r\n /**\r\n * Impide que se apliquen los estilos que indican que un campo fue alterado.\r\n */\r\n avoidFieldsTouch?: boolean;\r\n children: React.ReactNode;\r\n className?: string;\r\n initialValues?: Partial<ValueType>;\r\n name?: string;\r\n onUnmount?: () => unknown;\r\n /**\r\n * Cuando se ejecuta una acción de validación desde\r\n * algún lugar de la aplicación se llama a este método\r\n * con el resultado de dicha ejecución.\r\n */\r\n onValidate?: TOnValidate<ValueType, SubmitValueType>;\r\n persistToSessionStorage?: boolean;\r\n /**\r\n * Permite definir si el formulario va a ser borrado de la validación al ser\r\n * desmontado\r\n */\r\n unregisterOnUnmount?: boolean;\r\n}\r\n\r\n/**\r\n * Cuando se desea usar el sistema de validación,\r\n * se debe utilizar este componente como form contenedor\r\n * de todos los campos que quieran validarse.\r\n *\r\n * Es importante que no se coloquen formularios dentro\r\n * de formularios ya que esto podría afectar negativamente\r\n * el proceso de validación.\r\n *\r\n * @props\r\n * *name:* Se puede pasar un nombre para identificar\r\n * el form. Este nombre será utilizado para almacenar\r\n * la información en Redux, por lo que si se desea\r\n * acceder a la información recolectada por la librería,\r\n * es conveniente pasar un nombre conocido y único. En\r\n * caso de no se pase ningún nombre, la aplicación\r\n * generará un nombre único automaticamente.\r\n *\r\n * *onValidate:* Un callback que será llamado cuando\r\n * se invoque el método validateForm del store o cuando\r\n * se lance el evento de submit del elemento form (por\r\n * ejemplo mediante un click en un botón que no tenga\r\n * type=\"button\"), con el resultado de la validación.\r\n *\r\n * avoidFieldsOverride\r\n * avoidFieldsTouch\r\n *\r\n * @see useField\r\n * @see useForm\r\n *\r\n * @important Debido a que este hook renderiza un elemento\r\n * form en el DOM, es importante agregar el atributo\r\n * type=\"button\" a todos los botones dentro del formulario\r\n * que no se desea que disparen la validación.\r\n *\r\n * @example\r\n * Para ver un ejemplo funcional, mira el componente\r\n * Invitations.tsx\r\n *\r\n * // IMPORTANTE: El tipado del componente Form es genérico\r\n * // por lo que es posible instanciarlo como se muestra a\r\n * // continuación, lo que nos da el tipado correcto en el\r\n * // callback onValidate.\r\n * <Form<FormDataType> onValidate={(res) => {\r\n * if(hasSucceedValidation(res)) {\r\n * // Do something with submitValues\r\n * } else {\r\n * // Do something with errors\r\n * }\r\n * }}>\r\n * ...{children}\r\n * </Form>\r\n */\r\nconst Form = <\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n>({\r\n avoidFieldsOverride,\r\n avoidFieldsTouch,\r\n children,\r\n className,\r\n name,\r\n initialValues,\r\n onUnmount,\r\n onValidate,\r\n persistToSessionStorage,\r\n unregisterOnUnmount,\r\n}: IForm<ValueType, SubmitValueType>) => {\r\n const actualName = React.useMemo(\r\n () => name ?? `ValidationForm${uniqueId()}`,\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n );\r\n\r\n const handleSubmit = React.useCallback<React.FormEventHandler>(\r\n async (ev) => {\r\n ev.preventDefault();\r\n const validationRes = (await validationsStore.validateForm(\r\n actualName,\r\n )) as TValidationResult<ValueType, SubmitValueType>;\r\n if (validationRes && onValidate) onValidate(validationRes);\r\n },\r\n [actualName, onValidate],\r\n );\r\n const contextValue = React.useMemo<IFormContext>(\r\n () => ({\r\n avoidFieldsTouch,\r\n name: actualName,\r\n validate: async () => validationsStore.validateForm(actualName),\r\n }),\r\n [actualName, avoidFieldsTouch],\r\n );\r\n\r\n useUnmount(() => {\r\n onUnmount?.();\r\n if (unregisterOnUnmount !== false)\r\n validationsStore.unregisterForm(actualName);\r\n });\r\n\r\n const [hasRegistered, setHasRegistered] = React.useState(false);\r\n\r\n useMount(() => {\r\n validationsStore.registerForm(actualName, {\r\n avoidFieldsOverride: avoidFieldsOverride ?? initialValues !== undefined,\r\n initialValues,\r\n persistToSessionStorage,\r\n });\r\n setHasRegistered(true);\r\n });\r\n if (!hasRegistered) return null;\r\n\r\n return (\r\n <FormContext.Provider value={contextValue}>\r\n <Box\r\n as=\"form\"\r\n {...getVariant('layout.validations.form')}\r\n className={`validationsForm ${className}`}\r\n id={`ValidationForm-${actualName}`}\r\n {...({ name: actualName } as unknown as BoxProps)}\r\n onSubmit={handleSubmit}\r\n >\r\n {children}\r\n </Box>\r\n </FormContext.Provider>\r\n );\r\n};\r\n\r\nexport { Form };\r\n","import { useMount, useUnmount } from '@apia/util';\r\nimport React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { PropsSelectorUndefinedObject } from '@apia/util';\r\nimport { TValidationField } from '../types';\r\nimport { useFieldSelector, validationsStore } from '../validationStore';\r\n\r\nexport type TUseField<ValueType = unknown, SubmitValueType = ValueType> = Omit<\r\n TValidationField<ValueType, SubmitValueType>,\r\n 'error' | 'value' | 'isTouched'\r\n> & {\r\n /**\r\n * Con esta propiedad es posible evitar que el campo\r\n * se registre cuando ya fue registrado previamente en\r\n * el store. De esta forma, se evitaría escribir sobre\r\n * un valor que ya estaba seteado anteriormente.\r\n */\r\n avoidRegisterIfExists?: boolean;\r\n /**\r\n * Si se está fuera de contexto de validación, se puede pasar un formName\r\n * para evitar que el hook lo intente tomar de contexto.\r\n */\r\n formName?: string;\r\n initialValue?: ValueType;\r\n removeOnUnmount?: boolean;\r\n};\r\n\r\n/**\r\n * Este hook permite registrar un field para ser validado,\r\n * o simplemente para recolectar su valor, e incluso aplicar\r\n * una función de transformación de dicho valor antes de\r\n * hacer submit.\r\n *\r\n * @returns\r\n * *error:* Es null mientras que no haya errores de\r\n * validación, y un string en caso de que si lo haya.\r\n *\r\n * *value:* Es el valor actual del campo.\r\n *\r\n * *name:* Debería utilizarse para dar * valor al atributo\r\n * name o id del contenedor que debe recibir el foco en caso\r\n * de que la validación fallara. (Esto es, cuando se deba\r\n * realizar foco porque la validación falló, la librería\r\n * intentará encontrar un campo con el selector\r\n * [name=${name}, #${name}] dentro del formulario).\r\n *\r\n * *onChange:* Se utiliza para setear el valor del campo,\r\n * puede utilizarse directamente como callback para la\r\n * propiedad onChange que aceptan la mayoría de los campos,\r\n * ya que intentará setear el valor con ev.target.value\r\n * y si esa propiedad no está definida, lo hará directamente\r\n * con ev.\r\n *\r\n * @example\r\n * // Si se desea un ejemplo más complejo, vea el componente\r\n * // Invitations.tsx que se encuentra dentro del directorio\r\n * // de la librería.\r\n *\r\n * const inputProps = useField<string>({\r\n name: 'name',\r\n validationRules: {\r\n required: true,\r\n minLength: 5,\r\n maxLength: 10\r\n },\r\n initialValue: metadata.value,\r\n * });\r\n\r\n return <Box>\r\n <Input {...inputProps} />\r\n <ValidationError name=\"name\" />\r\n </Box>\r\n */\r\nexport function useField<ValueType = unknown, SubmitValueType = ValueType>(\r\n fieldDefinition: TUseField<ValueType, SubmitValueType>,\r\n) {\r\n const formContext = React.useContext(FormContext);\r\n const formName = fieldDefinition.formName ?? formContext.name;\r\n\r\n if (!formName) {\r\n console.error(fieldDefinition);\r\n throw new Error(\r\n `useField: It was not possible to determine the formName in field with name ${fieldDefinition.name}`,\r\n );\r\n }\r\n\r\n React.useMemo(() => {\r\n validationsStore.registerField(\r\n formName,\r\n {\r\n ...fieldDefinition,\r\n ...(fieldDefinition.initialValue !== undefined\r\n ? { value: fieldDefinition.initialValue }\r\n : null),\r\n },\r\n {\r\n avoidPropagation: true,\r\n registerIfExists: !fieldDefinition.avoidRegisterIfExists,\r\n },\r\n );\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useMount(() => {\r\n if (\r\n fieldDefinition.initialValue !== undefined &&\r\n ((!validationsStore.getFormStore(formName)?.avoidFieldsOverride &&\r\n !fieldDefinition.avoidRegisterIfExists) ||\r\n validationsStore.getFieldStore(formName, fieldDefinition.name) ===\r\n undefined)\r\n )\r\n validationsStore.setFieldValue(\r\n formName,\r\n fieldDefinition.name,\r\n fieldDefinition.initialValue,\r\n );\r\n });\r\n\r\n useUnmount(() => {\r\n if (fieldDefinition.removeOnUnmount)\r\n validationsStore.unregisterField(formName, fieldDefinition.name);\r\n });\r\n\r\n const {\r\n name,\r\n value: storeValue,\r\n error,\r\n isTouched,\r\n } = useFieldSelector<\r\n ValueType,\r\n SubmitValueType,\r\n TValidationField<ValueType, SubmitValueType>\r\n >(\r\n formName,\r\n fieldDefinition.name,\r\n (props) => {\r\n return props;\r\n },\r\n (a, b) => {\r\n if (\r\n a === PropsSelectorUndefinedObject &&\r\n fieldDefinition.initialValue !== undefined\r\n )\r\n return true;\r\n return shallowEqual(a, b);\r\n },\r\n );\r\n\r\n const [localValue, setLocalValue] = React.useState<ValueType | undefined>(\r\n fieldDefinition.initialValue,\r\n );\r\n\r\n React.useEffect(() => {\r\n setLocalValue(storeValue);\r\n }, [storeValue]);\r\n\r\n const onChange = React.useCallback(\r\n (ev: React.ChangeEvent | ValueType) => {\r\n const reactChangeEvent = ev as React.ChangeEvent<HTMLInputElement>;\r\n let newValue: ValueType;\r\n if (\r\n typeof reactChangeEvent === 'object' &&\r\n reactChangeEvent &&\r\n reactChangeEvent.target !== undefined &&\r\n reactChangeEvent.target.value !== undefined\r\n ) {\r\n newValue = reactChangeEvent.target.value as unknown as ValueType;\r\n } else newValue = ev as ValueType;\r\n\r\n setLocalValue(newValue);\r\n validationsStore.setFieldValue(formName, fieldDefinition.name, newValue);\r\n },\r\n [fieldDefinition.name, formName],\r\n );\r\n\r\n return {\r\n error,\r\n isTouched,\r\n name,\r\n onChange,\r\n updateValidations: React.useCallback(\r\n ({\r\n validationFunction,\r\n validationRules,\r\n }: Pick<TValidationField, 'validationRules' | 'validationFunction'>) => {\r\n validationsStore.updateField(formName, {\r\n name: fieldDefinition.name,\r\n validationFunction,\r\n validationRules,\r\n });\r\n },\r\n [formName, fieldDefinition.name],\r\n ),\r\n value: localValue ?? (fieldDefinition.initialValue as ValueType),\r\n };\r\n}\r\n","import { useFormContext } from '../form/FormContext';\r\nimport { useField } from './useField';\r\n\r\nexport function useFieldStatesClassNames<T = unknown>(\r\n name: string,\r\n formName?: string,\r\n): string {\r\n const { error, isTouched } = useField<T>({\r\n name,\r\n formName,\r\n avoidRegisterIfExists: true,\r\n removeOnUnmount: false,\r\n });\r\n const { avoidFieldsTouch } = useFormContext();\r\n if (error) return 'error';\r\n if (!avoidFieldsTouch && isTouched) return 'touched';\r\n return '';\r\n}\r\n","import { shallowEqual } from 'react-redux';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { PropsSelectorUndefinedObject } from '@apia/util';\r\nimport { useFieldSelector } from '../validationStore';\r\n\r\ninterface IUseFieldValue {\r\n formName?: string;\r\n name: string;\r\n}\r\n\r\nexport function useFieldValue<T = unknown>({ formName, name }: IUseFieldValue) {\r\n const { name: hookFormName } = useFormContext();\r\n\r\n if (!formName && !hookFormName) {\r\n throw new Error(\r\n `useFieldValue: It was not possible to determine the formName in field with name ${name}`,\r\n );\r\n }\r\n\r\n const { value } = useFieldSelector(\r\n formName ?? hookFormName,\r\n name,\r\n (props) => {\r\n return props;\r\n },\r\n (a, b) => {\r\n if (a === PropsSelectorUndefinedObject && b?.value === undefined)\r\n return true;\r\n return shallowEqual(a?.value, b?.value);\r\n },\r\n );\r\n\r\n return value as T;\r\n}\r\n","import React from 'react';\r\nimport { TDefaultFieldType } from '../components/types';\r\nimport { TValidationFunction } from '../types';\r\nimport { classToValidate, classToValidationFunction } from '../util';\r\nimport { validationsStore } from '../validationStore';\r\nimport { FormContext } from '../form/FormContext';\r\n\r\nexport function useValidationClass<T>({\r\n customValidation,\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n}: Pick<\r\n TDefaultFieldType<T>,\r\n 'validationClass' | 'validationFunction' | 'validationRules' | 'name'\r\n> & {\r\n customValidation?: TValidationFunction<T>;\r\n formName?: string;\r\n}) {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n\r\n const classesValidationFunction = React.useMemo(\r\n () =>\r\n validationClass !== undefined\r\n ? classToValidationFunction<T>(validationClass)\r\n : undefined,\r\n [validationClass],\r\n );\r\n const initialValidationFunction = React.useMemo(\r\n () =>\r\n validationsStore.getFieldStore(formName ?? contextFormName, name)\r\n ?.validationFunction,\r\n [contextFormName, formName, name],\r\n );\r\n const actualValidationFunction: TValidationFunction<T> = React.useCallback(\r\n (currentValue, parameterFormName) => {\r\n let result =\r\n initialValidationFunction?.(currentValue, parameterFormName) ??\r\n validationFunction?.(currentValue, parameterFormName) ??\r\n true;\r\n if (typeof result === 'string') return result;\r\n\r\n if (customValidation) {\r\n result = customValidation(currentValue, parameterFormName);\r\n }\r\n if (typeof result === 'string') return result;\r\n\r\n if (classesValidationFunction)\r\n return classesValidationFunction(currentValue, parameterFormName);\r\n\r\n return true;\r\n },\r\n [\r\n classesValidationFunction,\r\n customValidation,\r\n initialValidationFunction,\r\n validationFunction,\r\n ],\r\n );\r\n const actualValidationRules = React.useMemo(() => {\r\n return {\r\n ...validationRules,\r\n ...(validationClass !== undefined\r\n ? classToValidate(validationClass)\r\n : {}),\r\n };\r\n }, [validationClass, validationRules]);\r\n\r\n return {\r\n actualValidationFunction,\r\n actualValidationRules,\r\n };\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { useFieldSelector } from '../validationStore';\r\n\r\n/**\r\n * Renderiza los errores del campo con el nombre pasado\r\n * como prop. En caso de que no exista error, no renderiza\r\n * nada.\r\n *\r\n * @props\r\n * *name:* El nombre del campo cuyos errores se quieren\r\n * renderizar.\r\n */\r\nexport const ValidationError = ({ name }: { name: string }) => {\r\n const formContext = useFormContext();\r\n const error = useFieldSelector(formContext.name, name, (state) => {\r\n return state?.error;\r\n });\r\n\r\n return error ? (\r\n <Box\r\n as=\"strong\"\r\n role=\"alert\"\r\n sx={{\r\n color: 'danger',\r\n }}\r\n dangerouslySetInnerHTML={{ __html: error }}\r\n />\r\n ) : null;\r\n};\r\n","import { RequiredMark } from '@apia/components';\r\nimport React from 'react';\r\nimport { Box, BoxProps } from '@apia/theme';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { useFieldSelector } from '../validationStore';\r\nimport { ValidationError } from './ValidationError';\r\n\r\ndeclare global {\r\n interface Window {\r\n SHOW_REQUIRED_POSITION: string;\r\n }\r\n}\r\n\r\nexport interface IWrapper extends BoxProps {\r\n avoidSemicolon?: boolean;\r\n children: React.ReactNode;\r\n label?: string;\r\n name: string;\r\n required?: boolean;\r\n type?: 'checkbox';\r\n}\r\n\r\nexport const FieldWrapper = ({\r\n name,\r\n label,\r\n avoidSemicolon,\r\n children,\r\n className,\r\n as = 'label',\r\n type,\r\n ...props\r\n}: IWrapper) => {\r\n const { name: formName } = useFormContext();\r\n const isRequired = useFieldSelector(\r\n formName,\r\n name,\r\n (global) => global?.validationRules?.required,\r\n );\r\n\r\n if (type === 'checkbox') {\r\n return (\r\n <Box\r\n className={`fieldWrapper checkboxWrapper ${className ?? ''}`}\r\n {...props}\r\n as={as}\r\n >\r\n {window.SHOW_REQUIRED_POSITION !== '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n {children}\r\n <span>\r\n {label}\r\n {window.SHOW_REQUIRED_POSITION === '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n </span>\r\n <ValidationError name={name} />\r\n </Box>\r\n );\r\n }\r\n\r\n /**\r\n * Cuando el campo no tiene etiqueta, no tiene ningún sentido mostrar marca\r\n * de requerido ni tag label.\r\n */\r\n if (!label) {\r\n return (\r\n <Box className=\"fieldWrapper\" as=\"span\">\r\n {children}\r\n <ValidationError name={name} />\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box className={`fieldWrapper ${className ?? ''}`} {...props} as={as}>\r\n <Box as=\"span\" className=\"fieldWrapper__label\">\r\n {window.SHOW_REQUIRED_POSITION !== '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n {label}\r\n {!avoidSemicolon && label && <abbr className=\"semicolon\">: </abbr>}\r\n {window.SHOW_REQUIRED_POSITION === '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n </Box>\r\n {children}\r\n <ValidationError name={name} />\r\n </Box>\r\n );\r\n};\r\n","import { Captcha } from '@apia/components';\r\nimport { useField, useFieldStatesClassNames } from '../hooks';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\nimport React from 'react';\r\n\r\ntype TCaptchaProps = {\r\n name: string;\r\n imageUrl: string;\r\n className?: string;\r\n};\r\n\r\ntype TCaptcha = TCaptchaProps &\r\n Omit<\r\n TDefaultFieldType,\r\n 'validationFunction' | 'validationRules' | 'validationClass'\r\n >;\r\n\r\nconst InnerCaptcha = ({\r\n className,\r\n name,\r\n imageUrl,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n avoidSemicolon,\r\n formName,\r\n label,\r\n removeOnUnmount,\r\n submitName,\r\n submitValueParser,\r\n validationValueParser,\r\n}: TCaptcha) => {\r\n const { error, updateValidations, onChange, isTouched, ...validationProps } =\r\n useField({\r\n name,\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue: '',\r\n removeOnUnmount,\r\n submitName,\r\n submitValueParser,\r\n validationValueParser,\r\n validationRules: { required: true },\r\n });\r\n const handleOnChange = React.useCallback(\r\n (ev: string | React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n },\r\n [onChange],\r\n );\r\n\r\n const stateClassName = useFieldStatesClassNames(name);\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <Captcha\r\n name={name}\r\n imageUrl={imageUrl}\r\n onChange={handleOnChange}\r\n value={validationProps.value}\r\n className={stateClassName}\r\n />\r\n </FieldWrapper>\r\n );\r\n};\r\n\r\nexport { InnerCaptcha as Captcha };\r\n","import React from 'react';\r\nimport { ButtonProps, InputProps } from '@apia/theme';\r\nimport { Checkbox as AppCheckbox } from '@apia/components';\r\nimport { useField } from '../hooks/useField';\r\nimport { TDefaultFieldType } from './types';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\n\r\nexport type TCheckboxProps = Omit<\r\n ButtonProps,\r\n 'onChange' | 'defaultChecked' | 'defaultValue'\r\n> &\r\n Pick<InputProps, 'onChange'>;\r\n\r\nexport type TCheckbox = TCheckboxProps &\r\n TDefaultFieldType<boolean | string> & { native?: boolean };\r\n\r\nexport const Checkbox = React.forwardRef<HTMLButtonElement, TCheckbox>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n native,\r\n onChange: outerOnChange,\r\n type,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const {\r\n value: innerValue,\r\n onChange,\r\n updateValidations,\r\n isTouched,\r\n ...inputProps\r\n } = useField<boolean | string>({\r\n avoidRegisterIfExists,\r\n formName,\r\n name,\r\n initialValue:\r\n ((initialValue as unknown) === true || initialValue === 'on') ?? false,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`checkbox ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <AppCheckbox\r\n {...props}\r\n {...inputProps}\r\n native={native}\r\n aria-label={props['aria-label'] ?? label}\r\n onChange={(ev) => {\r\n onChange(ev.target.checked);\r\n if (outerOnChange) outerOnChange(ev);\r\n }}\r\n checked={innerValue === true || innerValue === 'on'}\r\n ref={ref}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nCheckbox.displayName = 'Checkbox';\r\n","import { IconButton } from '@apia/components';\r\nimport React from 'react';\r\nimport { InputProps, Input as TUIInput, ThemeUICSSObject } from '@apia/theme';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { useFieldStatesClassNames } from '../hooks';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { validationsStore } from '../validationStore';\r\nimport { TDefaultFieldType } from './types';\r\nimport { FieldWrapper } from './FieldWrapper';\r\n\r\ntype TDeletableInput = InputProps & TDefaultFieldType;\r\n\r\nexport const DeletableInput = React.forwardRef<\r\n HTMLInputElement,\r\n TDeletableInput\r\n>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n type,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n const formName = propsFormName ?? contextFormName;\r\n\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const {\r\n error,\r\n updateValidations,\r\n onChange,\r\n isTouched,\r\n ...validationProps\r\n } = useField<string>({\r\n formName,\r\n name,\r\n initialValue:\r\n initialValue ??\r\n (value as string) ??\r\n validationsStore.getFieldStore(formName, name)?.value ??\r\n '',\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n const handleOnChange = React.useCallback(\r\n (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n outerOnChange?.(ev);\r\n },\r\n [onChange, outerOnChange],\r\n );\r\n\r\n const stateClassName = useFieldStatesClassNames(name);\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n sx={React.useCallback(\r\n () =>\r\n ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'start',\r\n } as ThemeUICSSObject),\r\n [],\r\n )}\r\n className={`deletableInput ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <TUIInput\r\n type={type}\r\n {...props}\r\n {...validationProps}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n onChange={handleOnChange}\r\n value={validationProps.value ?? ''}\r\n className={`deletableInput__input ${stateClassName ?? ''}`}\r\n />\r\n <IconButton\r\n icon=\"Close\"\r\n className=\"deletableInput__deleteButton\"\r\n onClick={() => onChange('')}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nDeletableInput.displayName = 'DeletableInput';\r\n","import { getFieldErrorStyles } from '@apia/components';\r\nimport React from 'react';\r\nimport { Input, InputProps } from '@apia/theme';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { useValidationClass } from '../hooks';\r\nimport { useField, TUseField } from '../hooks/useField';\r\nimport { lang } from '../util';\r\nimport { FieldWrapper, IWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\ntype TFileInput = Omit<InputProps, 'onChange' | 'type' | 'value' | 'multiple'> &\r\n TDefaultFieldType<File | null> &\r\n Pick<TUseField, 'removeOnUnmount'> &\r\n Pick<IWrapper, 'avoidSemicolon'>;\r\n\r\nexport const FileInput = React.memo(\r\n React.forwardRef<HTMLInputElement, TFileInput>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: formName } = useFormContext();\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n customValidation(fileValue) {\r\n return fileValue !== null && fileValue !== undefined\r\n ? true\r\n : lang('required');\r\n },\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const {\r\n error,\r\n onChange,\r\n value,\r\n updateValidations,\r\n isTouched,\r\n ...validationProps\r\n } = useField<File | null>({\r\n formName,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <Input\r\n {...props}\r\n {...validationProps}\r\n type=\"file\"\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n sx={getFieldErrorStyles(!error)}\r\n onChange={React.useCallback(\r\n (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev.target?.files?.[0] ?? null);\r\n },\r\n [onChange],\r\n )}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nFileInput.displayName = 'FileInput';\r\n","import { DateInput } from '@apia/components';\r\nimport React from 'react';\r\nimport { InputProps, Input as TUIInput } from '@apia/theme';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { useFieldStatesClassNames } from '../hooks';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { validationsStore } from '../validationStore';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\nexport type TInput = InputProps & TDefaultFieldType;\r\n\r\nexport const Input = React.memo(\r\n React.forwardRef<HTMLInputElement, TInput>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n type,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n const formName = propsFormName ?? contextFormName;\r\n\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const {\r\n error,\r\n updateValidations,\r\n onChange,\r\n isTouched,\r\n ...validationProps\r\n } = useField<string>({\r\n formName,\r\n name,\r\n initialValue:\r\n initialValue ??\r\n (value as string) ??\r\n validationsStore.getFieldStore(formName, name)?.value ??\r\n '',\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n const handleOnChange = React.useCallback(\r\n (ev: string | React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n if (typeof ev === 'string') {\r\n // Es date\r\n outerOnChange?.({\r\n target: ref,\r\n } as unknown as React.ChangeEvent<HTMLInputElement>);\r\n } else {\r\n // Es comun\r\n outerOnChange?.(ev);\r\n }\r\n },\r\n [onChange, outerOnChange, ref],\r\n );\r\n\r\n const stateClassName = useFieldStatesClassNames(name);\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n {type === 'date' ? (\r\n <DateInput\r\n {...props}\r\n {...validationProps}\r\n aria-label={props['aria-label'] ?? label}\r\n onError={undefined}\r\n ref={ref}\r\n onChange={handleOnChange}\r\n value={validationProps.value ?? ''}\r\n className={stateClassName}\r\n />\r\n ) : (\r\n <TUIInput\r\n type={type}\r\n {...props}\r\n {...validationProps}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n onChange={handleOnChange}\r\n value={validationProps.value ?? ''}\r\n className={stateClassName}\r\n />\r\n )}\r\n </FieldWrapper>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nInput.displayName = 'Input';\r\n","import {\r\n TNumberInput,\r\n NumberInput as AppNumberInput,\r\n TNumberInputChangeEvent,\r\n ApiaUtil,\r\n} from '@apia/components';\r\nimport { formatMessage } from '@apia/util';\r\nimport React from 'react';\r\nimport { ThemeUICSSObject } from '@apia/theme';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { useFieldStatesClassNames } from '../hooks';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { validationsStore } from '../validationStore';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\ndeclare global {\r\n interface Window {\r\n GNR_NUMERIC: string;\r\n }\r\n}\r\n\r\ntype TInput = TNumberInput & TDefaultFieldType;\r\n\r\nexport const NumberInputf = React.memo(\r\n React.forwardRef<HTMLInputElement, TInput>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n const formName = propsFormName ?? contextFormName;\r\n\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const { onChange, value: innerValue } = useField<string, number>({\r\n formName,\r\n name,\r\n initialValue:\r\n initialValue ??\r\n (value as string) ??\r\n validationsStore.getFieldStore(formName, name)?.value ??\r\n '',\r\n removeOnUnmount,\r\n submitValueParser: React.useCallback(\r\n (current: string) =>\r\n ApiaUtil.instance.parsers.jsNumber(current ?? ''),\r\n [],\r\n ),\r\n validationValueParser: React.useCallback(\r\n (current: string) =>\r\n ApiaUtil.instance.parsers.jsNumber(current ?? ''),\r\n [],\r\n ),\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n const handleOnChange = React.useCallback(\r\n (ev: TNumberInputChangeEvent) => {\r\n if (ev.error) {\r\n outerOnChange?.({ ...ev, value: '' });\r\n onChange('');\r\n validationsStore.updateField(formName, {\r\n name,\r\n error: formatMessage(window.GNR_NUMERIC, { TOK: '' }),\r\n });\r\n } else {\r\n onChange(ev.value);\r\n outerOnChange?.(ev);\r\n validationsStore.updateField(formName, { name, error: null });\r\n }\r\n },\r\n [formName, name, onChange, outerOnChange],\r\n );\r\n const stateClassName = useFieldStatesClassNames(name);\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n sx={React.useMemo(\r\n () =>\r\n ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'start',\r\n }) as ThemeUICSSObject,\r\n [],\r\n )}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <AppNumberInput\r\n ref={ref}\r\n {...props}\r\n name={name}\r\n value={innerValue}\r\n onChange={handleOnChange}\r\n className={stateClassName}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nNumberInputf.displayName = 'NumberInputf';\r\n","import React from 'react';\r\nimport { RadioProps, Radio as TUIRadio, Label, Box } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\nexport type TRadio = RadioProps &\r\n TDefaultFieldType & {\r\n options: { value: string; label: string }[];\r\n };\r\n\r\nexport const Radio = React.forwardRef<HTMLInputElement, TRadio>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n formName,\r\n label,\r\n onChange: outerOnChange,\r\n options,\r\n value: outerValue,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const { value, updateValidations, onChange, isTouched, ...inputProps } =\r\n useField<string>({\r\n formName,\r\n name,\r\n initialValue: initialValue ?? (outerValue as string),\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n const handleOnChange = React.useCallback(\r\n (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n },\r\n [onChange, outerOnChange],\r\n );\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`radio ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n as=\"ul\"\r\n >\r\n {options?.map((option) => (\r\n <li key={option.value}>\r\n <Label title={option.label} className=\"radio-label\">\r\n <TUIRadio\r\n {...props}\r\n {...inputProps}\r\n role=\"radio\"\r\n className=\"radio-button\"\r\n aria-label={option.label}\r\n ref={ref}\r\n value={option.value}\r\n checked={value === option.value}\r\n onChange={handleOnChange}\r\n />\r\n <Box as=\"span\" className=\"radio-text\">\r\n {option.label}\r\n </Box>\r\n </Label>\r\n </li>\r\n ))}\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nRadio.displayName = 'Radio';\r\n","import React from 'react';\r\nimport { SelectProps, Select as TUISelect } from '@apia/theme';\r\nimport { getVariant } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { TDefaultFieldType } from './types';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TId } from '@apia/util';\r\n\r\nexport type TOption = { value: TId; label: string };\r\n\r\nexport type TSelectProps = Omit<SelectProps, 'defaultValue'>;\r\n\r\nexport type TSelect = TSelectProps &\r\n TDefaultFieldType & {\r\n options: TOption[];\r\n };\r\n\r\nexport const Select = React.forwardRef<HTMLSelectElement, TSelect>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n formName,\r\n label,\r\n onChange: outerOnChange,\r\n options,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const { updateValidations, onChange, isTouched, ...inputProps } =\r\n useField<string>({\r\n avoidRegisterIfExists,\r\n initialValue: initialValue ?? (value as string) ?? options[0]?.value,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`select ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <TUISelect\r\n {...getVariant('forms.select')}\r\n {...props}\r\n {...inputProps}\r\n onChange={React.useCallback(\r\n (ev: React.ChangeEvent<HTMLSelectElement>) => {\r\n if (props.multiple) {\r\n onChange(\r\n [...ev.target.options]\r\n .filter((c) => c.selected)\r\n .map((c) => c.value) as any,\r\n );\r\n } else {\r\n onChange(ev);\r\n }\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n },\r\n [onChange, outerOnChange, props.multiple],\r\n )}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n value={inputProps.value ?? ''}\r\n >\r\n {options?.map((option) => (\r\n <option key={option.value} value={option.value}>\r\n {option.label}\r\n </option>\r\n ))}\r\n {props.children}\r\n </TUISelect>\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nSelect.displayName = 'Select';\r\n","import { toBoolean } from '@apia/util';\r\nimport React from 'react';\r\nimport { InputProps, Switch, SwitchProps } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\nexport type TSwitchbox = Omit<SwitchProps, 'onChange'> &\r\n Pick<InputProps, 'onChange'> &\r\n TDefaultFieldType & { reverse?: boolean };\r\n\r\nexport const Switchbox = React.forwardRef<HTMLInputElement, TSwitchbox>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n type,\r\n reverse = false,\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const { onChange, updateValidations, isTouched, ...inputProps } =\r\n useField<string>({\r\n avoidRegisterIfExists,\r\n formName,\r\n name,\r\n initialValue:\r\n (initialValue ?? 'off') === 'on' || toBoolean(initialValue)\r\n ? 'on'\r\n : 'off',\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`switchbox ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <Switch\r\n {...props}\r\n {...inputProps}\r\n aria-label={props['aria-label'] ?? label}\r\n onChange={(ev) => {\r\n onChange(ev.target.checked !== reverse ? 'on' : 'off');\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n }}\r\n checked={((inputProps.value ?? 'off') === 'on') !== reverse}\r\n ref={ref}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nSwitchbox.displayName = 'Switchbox';\r\n","import React from 'react';\r\nimport { Textarea as TUITextarea, TextareaProps } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\ntype TTextarea = TextareaProps & TDefaultFieldType;\r\n\r\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TTextarea>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n formName,\r\n label,\r\n onChange: outerOnChange,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const { updateValidations, onChange, isTouched, ...inputProps } =\r\n useField<string>({\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue: initialValue ?? (value as string),\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationRules: actualValidationRules,\r\n validationFunction: actualValidationFunction,\r\n });\r\n const handleOnChange = React.useCallback(\r\n (ev: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n onChange(ev);\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n },\r\n [onChange, outerOnChange],\r\n );\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`textarea ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <TUITextarea\r\n {...props}\r\n {...inputProps}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n value={inputProps.value ?? ''}\r\n onChange={handleOnChange}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nTextarea.displayName = 'Textarea';\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { EventEmitter, useSubscription, StatefulEmitter } from '@apia/util';\r\nimport { FC, ReactNode } from 'react';\r\nimport { TOption } from '../components';\r\nimport {\r\n TFocusRetriever,\r\n TValidationFunction,\r\n TValidationRules,\r\n} from '../types';\r\nimport { Box } from '@apia/theme';\r\nimport { Collector } from './Collector';\r\n\r\nexport abstract class CollectorField<\r\n ValueType = any,\r\n FieldProps = any,\r\n> extends EventEmitter<{\r\n focusFunctionUpdate: TFocusRetriever;\r\n functionUpdate: TValidationFunction<ValueType>;\r\n optionsUpdate: TOption[];\r\n propsUpdate: Partial<FieldProps>;\r\n rulesUpdate: TValidationRules;\r\n}> {\r\n /**\r\n * Este es el componente de implementación de cada campo particular\r\n */\r\n abstract Component: FC;\r\n abstract type: string;\r\n\r\n #emitter = new StatefulEmitter<{\r\n isHidden: boolean;\r\n }>({\r\n isHidden: false,\r\n });\r\n\r\n constructor(\r\n public readonly name: string,\r\n protected label: ReactNode,\r\n properties?: Partial<FieldProps>,\r\n ) {\r\n super();\r\n\r\n if (properties) {\r\n this.properties = properties;\r\n }\r\n }\r\n\r\n public collector: Collector = {} as Collector;\r\n\r\n isHidden = () => this.#emitter.getState('isHidden');\r\n setIsHidden = (isHidden: boolean) => {\r\n this.#emitter.emit('isHidden', isHidden);\r\n };\r\n\r\n protected properties: Partial<FieldProps> = {};\r\n setProperties = (newProps: Partial<FieldProps>) => {\r\n this.properties = newProps;\r\n this.emit('propsUpdate', { ...this.properties });\r\n };\r\n\r\n protected useProperties = () => {\r\n return useSubscription<Partial<FieldProps>>({\r\n getInitialState: () => this.properties,\r\n makeSubscription: (setProps) => this.on('propsUpdate', setProps),\r\n });\r\n };\r\n\r\n /**\r\n * Este componente se utiliza para controlar propiedades comunes a todos los\r\n * campos.\r\n */\r\n SuperComponent = () => {\r\n if (this.#emitter.useState('isHidden')) return null;\r\n\r\n return (\r\n <Box className={`collector__field ${this.type}`}>\r\n <this.Component />\r\n </Box>\r\n );\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useSubscription } from '@apia/util';\r\nimport { CollectorField } from './CollectorField';\r\nimport { TValidationRules, TValidationFunction } from '../types';\r\nimport { validationsStore } from '../validationStore';\r\n\r\nexport abstract class ValidatedCollectorField<\r\n ValueType = any,\r\n FieldProps = any,\r\n> extends CollectorField<ValueType, FieldProps> {\r\n constructor(\r\n public readonly name: string,\r\n protected label: string,\r\n protected config: Partial<{\r\n initialValue: ValueType;\r\n properties: Partial<FieldProps>;\r\n validationFunction: TValidationFunction<ValueType>;\r\n validationRules: TValidationRules;\r\n }> = {},\r\n ) {\r\n super(name, label, config?.properties);\r\n }\r\n\r\n get initialValue() {\r\n return this.config.initialValue;\r\n }\r\n\r\n get value() {\r\n return validationsStore.getFieldStore(this.collector.id, this.name).value;\r\n }\r\n\r\n setInitialValue = (newValue: ValueType) => {\r\n this.config.initialValue = newValue;\r\n };\r\n\r\n setValidationFunction = (newFunction: TValidationFunction<ValueType>) => {\r\n this.config.validationFunction = newFunction;\r\n this.emit('functionUpdate', this.config.validationFunction);\r\n };\r\n\r\n setValidationRules = (newRules: TValidationRules) => {\r\n this.config.validationRules = newRules;\r\n this.emit('rulesUpdate', { ...this.config.validationRules });\r\n };\r\n\r\n setValue = (newValue: ValueType) => {\r\n validationsStore.setFieldValue(this.collector.id, this.name, newValue);\r\n };\r\n\r\n protected useValidationFunction = () => {\r\n return useSubscription<TValidationFunction<ValueType> | undefined>({\r\n getInitialState: () => () => this.config.validationFunction,\r\n makeSubscription: (setValidationFunction) => {\r\n return this.on('functionUpdate', setValidationFunction);\r\n },\r\n });\r\n };\r\n\r\n protected useValidationRules = () => {\r\n return useSubscription({\r\n getInitialState: () => this.config.validationRules,\r\n makeSubscription: (setValidationRules) => {\r\n return this.on('rulesUpdate', setValidationRules);\r\n },\r\n });\r\n };\r\n}\r\n","import { Checkbox, TCheckboxProps } from '../../components';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\n\r\nexport class CollectorCheckbox extends ValidatedCollectorField<\r\n string | boolean,\r\n Omit<TCheckboxProps, 'name'>\r\n> {\r\n type = 'checkbox';\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Checkbox\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n validationFunction={validationFunction}\r\n name={this.name}\r\n label={this.label}\r\n validationRules={rules}\r\n avoidSemicolon\r\n />\r\n );\r\n };\r\n}\r\n","import { InputProps } from '@apia/theme';\r\nimport { Input } from '../../components';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\n\r\nexport class CollectorInput extends ValidatedCollectorField<\r\n string,\r\n Omit<InputProps, 'name'>\r\n> {\r\n type = 'input';\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Input\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n validationFunction={validationFunction}\r\n name={this.name}\r\n label={this.label}\r\n validationRules={rules}\r\n />\r\n );\r\n };\r\n}\r\n","import { useMount } from '@apia/util';\r\nimport { useState } from 'react';\r\nimport { TSelectProps, TOption } from '../../components';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\nimport { Select } from '../../components';\r\nimport { TValidationFunction, TValidationRules } from '../../types';\r\n\r\nexport class CollectorSelect extends ValidatedCollectorField<\r\n string,\r\n Omit<TSelectProps, 'name'>\r\n> {\r\n type = 'select';\r\n\r\n constructor(\r\n protected _name: string,\r\n protected label: string,\r\n config?: Partial<{\r\n initialValue: string;\r\n options: TOption[];\r\n properties: Partial<Omit<TSelectProps, 'name'>>;\r\n validationFunction: TValidationFunction<string>;\r\n validationRules: TValidationRules;\r\n }>,\r\n ) {\r\n super(_name, label, config);\r\n if (config?.options) {\r\n this.#options = config.options;\r\n }\r\n }\r\n #options: TOption[] = [];\r\n\r\n addOption = (newOption: TOption) => {\r\n this.#options = [...this.#options, newOption];\r\n this.emit('optionsUpdate', this.#options);\r\n };\r\n\r\n setOptions = (newOptions: TOption[]) => {\r\n this.#options = [...newOptions];\r\n this.emit('optionsUpdate', this.#options);\r\n };\r\n\r\n #useOptions = () => {\r\n const [options, setOptions] = useState(this.#options);\r\n\r\n useMount(() => {\r\n return this.on('optionsUpdate', setOptions);\r\n });\r\n\r\n return options;\r\n };\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const options = this.#useOptions();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Select\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n validationFunction={validationFunction}\r\n name={this.name}\r\n label={this.label}\r\n validationRules={rules}\r\n options={options}\r\n />\r\n );\r\n };\r\n}\r\n","import { TextareaProps } from '@apia/theme';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\nimport { Textarea } from '../../components';\r\n\r\nexport class CollectorTextarea extends ValidatedCollectorField<\r\n string,\r\n Omit<TextareaProps, 'name'>\r\n> {\r\n type = 'textarea';\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Textarea\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n name={this.name}\r\n validationFunction={validationFunction}\r\n validationRules={rules}\r\n label={this.label}\r\n />\r\n );\r\n };\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { CollectorField } from '../CollectorField';\r\nimport { ReactNode } from 'react';\r\n\r\nexport class CollectorLabel extends CollectorField {\r\n private static maxId = 0;\r\n\r\n type = 'label';\r\n\r\n constructor(\r\n label: ReactNode,\r\n private kind:\r\n | 'h1'\r\n | 'h2'\r\n | 'h3'\r\n | 'h4'\r\n | 'h5'\r\n | 'h6'\r\n | 'p'\r\n | 'label' = 'label',\r\n ) {\r\n super(`label${CollectorLabel.maxId++}`, label);\r\n }\r\n\r\n Component = () => {\r\n if (this.kind === 'label') return <Box as={this.kind}>{this.label}</Box>;\r\n\r\n return <Box as={this.kind}>{this.label}</Box>;\r\n };\r\n}\r\n","import { SimpleButton } from '@apia/components';\r\nimport { CollectorField } from '../CollectorField';\r\nimport { ButtonProps } from '@apia/theme';\r\n\r\nlet i = 0;\r\n\r\nexport class CollectorButton extends CollectorField<\r\n null,\r\n Omit<ButtonProps, 'children'>\r\n> {\r\n type = 'button';\r\n\r\n constructor(\r\n protected label: string,\r\n properties?: Omit<ButtonProps, 'children'>,\r\n ) {\r\n super(`Button${i++}`, label, properties);\r\n }\r\n\r\n Component = () => {\r\n const props = this.useProperties();\r\n\r\n return <SimpleButton {...props}>{this.label}</SimpleButton>;\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport {\r\n ApiaUtil,\r\n ApiaUtilModalHandler,\r\n TOpenModal,\r\n useModalContext,\r\n} from '@apia/components';\r\nimport { getLabel } from '@apia/util';\r\nimport { Box, Button, getVariant } from '@apia/theme';\r\nimport { hasSucceedFormValidation, initValidations } from '../util';\r\nimport { Form } from '../form/Form';\r\nimport { CollectorField } from './CollectorField';\r\nimport { CollectorCheckbox } from './fields/Checkbox';\r\nimport { CollectorInput } from './fields/Input';\r\nimport { CollectorSelect } from './fields/Select';\r\nimport { CollectorTextarea } from './fields/Textarea';\r\nimport { CollectorLabel } from './fields/Label';\r\nimport { CollectorButton } from './fields/Button';\r\nimport { ValidatedCollectorField } from './ValidatedCollectorField';\r\nimport { TModalContext } from '@apia/components/src/components/modals/ModalContext';\r\n\r\ntry {\r\n void initValidations().catch(() => {});\r\n} catch (e) {\r\n console.error(e);\r\n}\r\n\r\nlet maxId = 0;\r\n\r\nexport class Collector {\r\n fields = {\r\n button: CollectorButton,\r\n checkbox: CollectorCheckbox,\r\n input: CollectorInput,\r\n /**\r\n * Muestra una etiqueta con tag personalizable: h1...h6, p, label. (Por\r\n * defecto: label)\r\n */\r\n label: CollectorLabel,\r\n select: CollectorSelect,\r\n textarea: CollectorTextarea,\r\n };\r\n\r\n private private__id = `Collector${maxId++}`;\r\n public get id() {\r\n return this.private__id;\r\n }\r\n modal: ApiaUtilModalHandler | null = null;\r\n\r\n #fields: Record<string, CollectorField> = {};\r\n\r\n add = (...fields: CollectorField[]) => {\r\n fields.forEach((field) => {\r\n this.#fields[field.name] = field;\r\n // eslint-disable-next-line no-param-reassign\r\n field.collector = this;\r\n });\r\n return this;\r\n };\r\n\r\n forEach = (cb: (field: CollectorField, i: number) => void) => {\r\n Object.values(this.#fields).forEach(cb);\r\n };\r\n\r\n #Component = ({\r\n hideConfirm,\r\n resolve,\r\n }: {\r\n hideConfirm?: boolean;\r\n resolve: (v: Record<string, unknown>) => boolean;\r\n }) => {\r\n const modal = useModalContext();\r\n\r\n return (\r\n <this.Render resolve={resolve} hideConfirm={hideConfirm} modal={modal} />\r\n );\r\n };\r\n\r\n public readonly Render = ({\r\n hideConfirm,\r\n modal,\r\n resolve,\r\n className,\r\n }: {\r\n className?: string;\r\n hideConfirm?: boolean;\r\n modal?: TModalContext;\r\n resolve: (v: Record<string, unknown>) => boolean;\r\n }) => {\r\n let hasValidated = false;\r\n\r\n return (\r\n <Box\r\n className={`formContainer ${className || ''}`}\r\n {...getVariant('layout.util.collector.formContainer')}\r\n >\r\n <Form\r\n name={this.private__id}\r\n onValidate={(result) => {\r\n if (hasSucceedFormValidation(result)) {\r\n const res = resolve(result.submitValues);\r\n if (res) {\r\n modal?.close();\r\n }\r\n }\r\n }}\r\n >\r\n <Box className=\"collector__fields\">\r\n {Object.values(this.#fields).map((current) => {\r\n if (current instanceof ValidatedCollectorField)\r\n hasValidated = true;\r\n\r\n return <current.SuperComponent key={current.name} />;\r\n })}\r\n </Box>\r\n {hasValidated && !hideConfirm && (\r\n <Box className=\"collector__buttons\">\r\n <Button variant=\"outline\">{getLabel('btnCon').text}</Button>\r\n </Box>\r\n )}\r\n </Form>\r\n </Box>\r\n );\r\n };\r\n\r\n show = <FormValues extends Record<string, unknown>>(\r\n modalProps?: Partial<\r\n Omit<TOpenModal, 'children' | 'onConfirm' | 'onCancel' | 'confirmProps'>\r\n > &\r\n Partial<{\r\n hideConfirm: boolean;\r\n /**\r\n * Si este método devuelve false, el modal no se cerrará\r\n */\r\n onConfirm?: (res: FormValues | null) => boolean;\r\n }>,\r\n ): Promise<FormValues | null> => {\r\n const { onConfirm, ...actualModalProps } = modalProps ?? {};\r\n const hasResolved = false;\r\n return new Promise<FormValues | null>((resolve) => {\r\n const C = this.#Component;\r\n const modal = ApiaUtil.instance.modals.open({\r\n onExited: () => {\r\n if (!hasResolved) {\r\n this.modal = null;\r\n resolve(null);\r\n }\r\n },\r\n children: (\r\n <C\r\n hideConfirm={modalProps?.hideConfirm}\r\n resolve={(values) => {\r\n if (onConfirm) {\r\n const confirmResult = onConfirm(values as FormValues);\r\n if (!confirmResult) {\r\n return false;\r\n }\r\n }\r\n\r\n resolve(values as FormValues);\r\n return true;\r\n }}\r\n />\r\n ),\r\n variant: 'layout.util.collector.modal',\r\n initialFocusGetter(modalInnerRef) {\r\n return modalInnerRef.querySelector<HTMLElement>(\r\n 'input,textarea,select,button:not(.modal__closeButton)',\r\n );\r\n },\r\n ...actualModalProps,\r\n });\r\n this.modal = modal;\r\n });\r\n };\r\n}\r\n","import { createContext, useContext } from 'react';\r\nimport { Validable } from '.';\r\n\r\nexport const ValidableContext = createContext<Validable<any> | undefined>(\r\n undefined,\r\n);\r\n\r\nexport function useValidableContext<T extends object>() {\r\n const context = useContext<Validable<T> | undefined>(ValidableContext);\r\n return context;\r\n}\r\n","export function setValueByPath<T extends object>(\r\n obj: T,\r\n path: string,\r\n value: unknown,\r\n) {\r\n if (path !== '') {\r\n const steps = path.split('.');\r\n if (steps.length === 0) {\r\n console.warn(`An empty path was provoided ${path}`);\r\n return null;\r\n }\r\n if (steps.length === 1) {\r\n (obj as any)[steps[0]] = value;\r\n } else {\r\n const step = steps.shift()!;\r\n if (!(obj as any)[step]) (obj as any)[step] = {};\r\n setValueByPath((obj as any)[step], steps.join('.'), value);\r\n }\r\n }\r\n}\r\n","import { observer } from 'mobx-react-lite';\r\nimport { ReactNode } from 'react';\r\nimport { FieldLabel, TFieldLabel } from '@apia/components';\r\nimport { TObjectInspection, useValidableContext, Validable } from '..';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport const ValidableField = observer(\r\n <T extends object>({\r\n children,\r\n context,\r\n label,\r\n path,\r\n ...props\r\n }: {\r\n children: ReactNode;\r\n context?: Validable<T>;\r\n label?: string;\r\n path: typeof context extends undefined ? string : TObjectInspection<T>;\r\n } & Omit<TFieldLabel, 'label' | 'error' | 'required'>) => {\r\n const reactContext = useValidableContext<T>();\r\n const actualContext = context ?? reactContext;\r\n\r\n if (!actualContext) throw new Error('ValidableContext not found');\r\n\r\n const validations = actualContext.getValidations(path);\r\n const error = actualContext.getError(path);\r\n label = label ?? validations?.fieldLabel;\r\n return (\r\n <FieldLabel\r\n {...props}\r\n error={error}\r\n label={\r\n label?.startsWith('lbl')\r\n ? getLabel(label).text\r\n : (label ?? `Label not provided: ${path}`)\r\n }\r\n required={validations?.required}\r\n >\r\n {children}\r\n </FieldLabel>\r\n );\r\n },\r\n);\r\n","import { observer } from 'mobx-react-lite';\r\nimport { TObjectInspection, useValidableContext, Validable } from '..';\r\nimport { ChangeEvent, ReactNode } from 'react';\r\n\r\nexport type ValidableFieldProps<T extends object> = {\r\n className?: string;\r\n context: Validable<T>;\r\n label?: string;\r\n onChange?: (\r\n value: ChangeEvent<\r\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\r\n >,\r\n ) => void;\r\n path: TObjectInspection<T>;\r\n title?: string;\r\n};\r\n\r\nexport function makeValidableField<\r\n AdditionalProps extends Record<string, any> = Record<string, any>,\r\n>(\r\n Component: (\r\n props: ValidableFieldProps<{ name: string }> & AdditionalProps,\r\n ) => ReactNode,\r\n) {\r\n const ActualComponent = observer(Component);\r\n\r\n const NewValidableField = <T extends object>(\r\n props: ValidableFieldProps<T> & AdditionalProps,\r\n ) => {\r\n const reactContext = useValidableContext<T>();\r\n const actualContext = props.context ?? reactContext;\r\n\r\n if (!actualContext) throw new Error('ValidableContext not found');\r\n\r\n return <ActualComponent {...(props as any)} context={actualContext} />;\r\n };\r\n\r\n return NewValidableField;\r\n}\r\n","import { ValidableField } from './ValidableField';\r\nimport { ChangeEvent } from 'react';\r\nimport { Input } from '@apia/theme';\r\nimport { makeValidableField } from './makeValidableField';\r\n\r\nexport const ValidableInput = makeValidableField(\r\n ({ type, context, label, path, onChange, ...props }) => {\r\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\r\n context.setValue(path, event.target.value);\r\n onChange?.(event);\r\n };\r\n\r\n return (\r\n <ValidableField\r\n context={context}\r\n path={path as never}\r\n label={label}\r\n {...props}\r\n className={`input ${props.className}`}\r\n >\r\n <Input\r\n name={path}\r\n type={type}\r\n value={context.getValue(path)}\r\n onChange={handleChange}\r\n />\r\n </ValidableField>\r\n );\r\n },\r\n);\r\n","import { ValidableField } from './ValidableField';\r\nimport { ChangeEvent } from 'react';\r\nimport { Select } from '@apia/theme';\r\nimport { makeValidableField } from './makeValidableField';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport const ValidableSelect = makeValidableField<{\r\n options: {\r\n value: string;\r\n label: string;\r\n selected?: boolean;\r\n disabled?: boolean;\r\n }[];\r\n}>(({ context, label, path, onChange, options, ...props }) => {\r\n const handleChange = (event: ChangeEvent<HTMLSelectElement>) => {\r\n context.setValue(path, event.target.value);\r\n onChange?.(event);\r\n };\r\n\r\n return (\r\n <ValidableField\r\n context={context}\r\n path={path as never}\r\n label={label}\r\n {...props}\r\n className={`select ${props.className}`}\r\n >\r\n <Select\r\n name={path}\r\n value={context.getValue(path)}\r\n onChange={handleChange}\r\n >\r\n {options.map((option) => (\r\n <option\r\n selected={option.selected}\r\n key={option.value}\r\n value={option.value}\r\n disabled={option.disabled}\r\n >\r\n {option.label.startsWith('lbl')\r\n ? getLabel(option.label).text\r\n : option.label}\r\n </option>\r\n ))}\r\n </Select>\r\n </ValidableField>\r\n );\r\n});\r\n","import { ValidableField } from './ValidableField';\r\nimport { ChangeEvent } from 'react';\r\nimport { Textarea } from '@apia/theme';\r\nimport { makeValidableField } from './makeValidableField';\r\n\r\nexport const ValidableTextarea = makeValidableField(\r\n ({ context, label, path, onChange, ...props }) => {\r\n const handleChange = (event: ChangeEvent<HTMLTextAreaElement>) => {\r\n context.setValue(path, event.target.value);\r\n onChange?.(event);\r\n };\r\n\r\n return (\r\n <ValidableField\r\n context={context}\r\n path={path}\r\n label={label}\r\n {...props}\r\n className={`textarea ${props.className}`}\r\n >\r\n <Textarea\r\n name={path}\r\n value={context.getValue(path)}\r\n onChange={handleChange}\r\n />\r\n </ValidableField>\r\n );\r\n },\r\n);\r\n","import { ValidableField } from './ValidableField';\r\nimport { ChangeEvent } from 'react';\r\nimport { Checkbox } from '@apia/components';\r\nimport { makeValidableField } from './makeValidableField';\r\n\r\nexport const ValidableCheck = makeValidableField(\r\n ({ context, label, path, onChange, ...props }) => {\r\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\r\n context.setValue(path, event.target.value);\r\n onChange?.(event);\r\n };\r\n\r\n return (\r\n <ValidableField\r\n context={context}\r\n path={path as never}\r\n avoidSemicolon\r\n label={label}\r\n {...props}\r\n className={`checkbox ${props.className}`}\r\n >\r\n <Checkbox\r\n name={path}\r\n checked={context.getValue(path)}\r\n onChange={handleChange}\r\n />\r\n </ValidableField>\r\n );\r\n },\r\n);\r\n","import { getLabel, getValueByPath } from '@apia/util';\r\nimport { TObjectInspection, ValidationRules, ValidationsMap } from './types';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { ReactNode } from 'react';\r\nimport { ValidableContext } from './context';\r\nimport { setValueByPath } from './util';\r\n\r\nexport async function validate<T extends object>(\r\n target: T,\r\n validations: ValidationsMap<T>,\r\n): Promise<true | Record<string, string>> {\r\n const errors: Record<string, string> = {};\r\n let focus: undefined | (() => void) = undefined;\r\n\r\n for (const key in validations) {\r\n const validation = validations[key as keyof ValidationsMap<T>]!;\r\n\r\n const value = getValueByPath(target as Record<string, unknown>, key);\r\n\r\n if (validation.validationFunction) {\r\n const validationResult = await validation.validationFunction(value);\r\n if (validationResult !== true) {\r\n errors[key] = validationResult;\r\n }\r\n } else if (validation.required && !value) {\r\n errors[key] =\r\n validation.errorsLabels?.required ??\r\n getLabel('msgReqField', { text: { TOK1: key } }).text;\r\n } else if (\r\n validation.minLength !== undefined &&\r\n value &&\r\n String(value).length < validation.minLength\r\n ) {\r\n errors[key] =\r\n validation.errorsLabels?.minLength ??\r\n getLabel('msgMinLength', { text: { TOK1: key } }).text;\r\n } else if (\r\n validation.maxLength !== undefined &&\r\n value &&\r\n String(value).length > validation.maxLength\r\n ) {\r\n errors[key] =\r\n validation.errorsLabels?.maxLength ??\r\n getLabel('msgMaxLength', { text: { TOK1: key } }).text;\r\n } else if (\r\n validation.min !== undefined &&\r\n value &&\r\n Number(value) < validation.min\r\n ) {\r\n errors[key] =\r\n validation.errorsLabels?.min ??\r\n getLabel('msgMinValue', { text: { TOK1: key } }).text;\r\n } else if (\r\n validation.max !== undefined &&\r\n value &&\r\n Number(value) > validation.max\r\n ) {\r\n errors[key] =\r\n validation.errorsLabels?.max ??\r\n getLabel('msgMaxValue', { text: { TOK1: key } }).text;\r\n } else if (\r\n validation.pattern &&\r\n value &&\r\n !new RegExp(validation.pattern).test(String(value))\r\n ) {\r\n errors[key] =\r\n validation.errorsLabels?.pattern ??\r\n getLabel('msgExpRegFal', { text: { TOK1: key } }).text;\r\n }\r\n\r\n if (errors[key] && !focus) {\r\n focus =\r\n validation.focus ||\r\n (() =>\r\n document\r\n .querySelector<HTMLElement>(`[name=${key.replace(/\\./g, '\\\\.')}]`)\r\n ?.focus());\r\n }\r\n }\r\n\r\n const hasErrors = Object.keys(errors).length > 0;\r\n hasErrors && focus?.();\r\n\r\n return hasErrors ? errors : true;\r\n}\r\n\r\nexport abstract class Validable<T extends object> {\r\n errors: Record<string, string> = {};\r\n\r\n public abstract state: T;\r\n\r\n public abstract validations: ValidationsMap<T>;\r\n\r\n constructor() {\r\n makeObservable(this, {\r\n errors: observable,\r\n });\r\n }\r\n\r\n public Context = ({ children }: { children: ReactNode }) => {\r\n return (\r\n <ValidableContext.Provider value={this}>\r\n {children}\r\n </ValidableContext.Provider>\r\n );\r\n };\r\n\r\n public getError(path: TObjectInspection<T>) {\r\n return this.errors[path];\r\n }\r\n\r\n public getValidations(path: TObjectInspection<T>) {\r\n return getValueByPath<ValidationRules>(this.validations, path)!;\r\n }\r\n\r\n public getValue<V>(path: TObjectInspection<T>) {\r\n return getValueByPath<V>(this.state, path)!;\r\n }\r\n\r\n public setValue<V>(path: TObjectInspection<T>, value: V) {\r\n setValueByPath(this.state, path, value);\r\n }\r\n\r\n async validate(): Promise<true | Record<string, string>> {\r\n const result = await validate<T>(this.state, this.validations);\r\n\r\n if (result !== true) {\r\n Object.assign(this.errors, result);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport * from './types';\r\nexport * from './context';\r\nexport * from './fields';\r\n"],"names":["__publicField","isTouched","AppCheckbox","TUIInput","Input","AppNumberInput","TUIRadio","TUISelect","TUITextarea","__privateAdd","__privateGet","Select","Textarea","Checkbox"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apia/validations",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.29",
|
|
4
4
|
"sideEffects": [
|
|
5
5
|
"./dist/lang/*.ts"
|
|
6
6
|
],
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
"libWatchForDashboards": "rollup --watch --config ./rollup.validations.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true,DEV_SERVER_MODULE:dashboards"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@apia/components": "^4.0.
|
|
22
|
-
"@apia/notifications": "^4.0.
|
|
23
|
-
"@apia/theme": "^4.0.
|
|
24
|
-
"@apia/util": "^4.0.
|
|
21
|
+
"@apia/components": "^4.0.29",
|
|
22
|
+
"@apia/notifications": "^4.0.29",
|
|
23
|
+
"@apia/theme": "^4.0.29",
|
|
24
|
+
"@apia/util": "^4.0.29",
|
|
25
25
|
"mobx": "^6.12.3",
|
|
26
26
|
"mobx-react-lite": "^4.0.7"
|
|
27
27
|
},
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"access": "public",
|
|
40
40
|
"registry": "https://registry.npmjs.org/"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "101366de9e55ee6561309595f0b6949c3c9b123d"
|
|
43
43
|
}
|