{"version":3,"sources":["webpack:///./src/components/Form/AppInputStatus.vue?2c37","webpack:///./src/components/Form/AppInputsValidationProvider.vue?148f","webpack:///./src/validator/errorMessages.ts","webpack:///./src/validator/combineValidators.ts","webpack:///./src/validator/ValidatorResponse.ts","webpack:///./src/validator/validators/email.ts","webpack:///./src/validator/validators/equalTo.ts","webpack:///./src/validator/utilles/isNotEmptyString.ts","webpack:///./src/validator/validators/password.ts","webpack:///./src/validator/validators/name.ts","webpack:///./src/validator/validators/phone.ts","webpack:///./src/validator/validators/required.ts","webpack:///./src/validator/validators/notEmptyString.ts","webpack:///./src/validator/validators/number.ts","webpack:///./src/validator/validators/price.ts","webpack:///./src/validator/Validator.ts","webpack:///./src/components/Form/AppInputsValidationProvider.vue","webpack:///./src/components/Form/AppInputsValidationProvider.vue?cdec","webpack:///./src/components/Form/AppInput.vue?f702","webpack:///./src/components/Form/AppInput.vue","webpack:///./src/components/Form/AppInputStatus.vue","webpack:///./src/components/Form/AppInputStatus.vue?c6b6","webpack:///./src/components/Form/AppInput.vue?597c","webpack:///./src/components/Form/AppInput.vue?abed","webpack:///./src/components/Form/AppInputStatus.vue?328e"],"names":["_hoisted_1","ref","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_renderSlot","$slots","validationTypesEnum","inputTypesEnum","combineValidators","validators","reduce","acc","name","validator","email","password","unknown","phone","price","required","minLength","equal","base","number","inputError","empty","nameIsEmpty","nameIsTooShort","validationErrors","getValidationError","inputType","errorType","type","ValidatorResponse","constructor","status","message","this","emailType","reg","RegExp","value","length","isValid","test","equalTo","toEqualValue","valid","isNotEmptyString","str","trim","regexp","passwordType","nameType","errorMessage","phoneRegex","phoneType","notEmptyString","parseInt","isNumber","startsWith","includes","ValidationResult","touched","error","Field","inputNode","onChange","equalToId","dataset","node","rule","id","equalToNode","document","getElementById","equalValue","bindedOnChange","changeHandler","bind","addEventListener","focusoutHandler","evt","target","validate","event","touch","emptyResult","destroy","removeEventListener","Validator","fields","shakeTree","forEach","field","input","attachInput","push","removeInput","find","filter","defineComponent","provide","inputErrors","computed","destroyed","destroyedHandler","props","Boolean","default","emits","changeErrorState","data","slots","inputs","hasError","some","watch","handler","err","$emit","immediate","needShake","Array","from","map","validationResult","prevInputs","destroyValidators","exist","mounted","setSlots","beforeUnmount","methods","$refs","_slot","$slot","querySelectorAll","$nextTick","removeAll","currentInputs","currentInputsIds","destroyedInputs","__exports__","class","_createElementVNode","for","_hoisted_2","_mergeProps","autosize","autocomplete","readonly","data-rule","data-required","onInput","$event","onFocus","onFocusout","onBlur","_hoisted_6","_hoisted_7","_createVNode","_component_SortButton","sort","onClick","_hoisted_8","_createBlock","_component_app_input_status","label","_component_svg_icon","icon","components","SvgIcon","String","SortButton","AppInputStatus","inject","inheritAttrs","t","indexOf","isTextarea","Object","staticText","staticFocused","hidden","showControls","maxValue","Number","minValue","validationType","preventBrowserAutocomplete","textareaRequired","isAutoSize","modelValue","focused","needShowControls","isActive","toString","prevValue","createEvent","initEvent","dispatchEvent","unmounted","focusHandler","incr","intValue","decr","module","exports"],"mappings":"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","file":"js/Accounts~User~about~admin~admins~brands~categories~devices~esim-Carriers~esim-bundles~esim-directory~4df3bd4e.e7723103.js","sourcesContent":["export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./AppInputStatus.vue?vue&type=style&index=0&id=02b4e27c&lang=scss\"","import { renderSlot as _renderSlot, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { ref: \"_slot\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 512))\n}","export enum validationTypesEnum {\r\n required = \"required\",\r\n minLength = \"minLength\",\r\n equal = \"equal\",\r\n base = \"base\",\r\n price = \"price\",\r\n number = \"number\"\r\n}\r\n\r\nexport enum inputTypesEnum {\r\n email = \"email\",\r\n password = \"password\",\r\n name = \"name\",\r\n unknown = \"unknown\",\r\n phone = \"phone\",\r\n price = \"price\",\r\n number = \"number\"\r\n}\r\n\r\nconst { email, password, name, unknown, phone, price } = inputTypesEnum;\r\nconst { required, minLength, equal, base, number } = validationTypesEnum;\r\n\r\ntype IValidationError = {\r\n [key: string]: string | undefined;\r\n};\r\n\r\nexport interface ValidatorInputType {\r\n [key: string]: IValidationError | undefined;\r\n}\r\n\r\nexport const inputError: IValidationError = {\r\n empty: \"This field cannot be empty\",\r\n base: \"The field is filled incorrectly\",\r\n nameIsEmpty: \"Name cannot be empty\",\r\n nameIsTooShort: \"Field must have at least 3 symbols\",\r\n price: \"Price must be greater than 0\",\r\n number: \"Only numbers are supported\"\r\n};\r\n\r\nexport const validationErrors: ValidatorInputType = {\r\n [email]: {\r\n [required]: \"Email cannot be empty\",\r\n [base]: \"Email is not valid\"\r\n },\r\n\r\n [price]: {\r\n [base]: inputError.price,\r\n [number]: \"Amount must be a number\"\r\n },\r\n\r\n [password]: {\r\n [required]: \"Password cannot be empty\",\r\n [minLength]: \"Password must be at least 8 symbols\",\r\n [equal]: \"Passwords do not match\",\r\n [base]: \"Password must have at least 1 uppercase symbol and 1 number\"\r\n },\r\n\r\n [name]: {\r\n [required]: \"Name cannot be empty\",\r\n [minLength]: \"Field must have at least 3 symbols\",\r\n [base]: \"Name is incorrect\"\r\n },\r\n\r\n [unknown]: {\r\n [required]: \"Field cannot be empty\",\r\n [minLength]: \"Field is too short\",\r\n [base]: \"The field is filled incorrectly\"\r\n },\r\n\r\n [phone]: {\r\n [required]: \"Phone cannot be empty\",\r\n [base]: \"Incorrect phone\"\r\n }\r\n};\r\n\r\nexport function getValidationError(\r\n inputType: string,\r\n errorType: string\r\n): string {\r\n const type: IValidationError | undefined =\r\n validationErrors[inputType] ?? validationErrors[unknown];\r\n\r\n if (type) {\r\n return type[errorType] || type[base] || \"\";\r\n }\r\n\r\n return \"\";\r\n}\r\n\r\nexport function getInputError(type: string) {\r\n if (inputError[type]) {\r\n return inputError[type];\r\n }\r\n\r\n return inputError.base;\r\n}\r\n","import { IValidatorResponse } from \"@/validator/interfaces/IValidatorResponse\";\r\n\r\nexport type IValidator = {\r\n name: string;\r\n validator: (value: string, toEqualValue?: string) => IValidatorResponse;\r\n};\r\n\r\nexport interface IAppValidators {\r\n email: (value: string) => IValidatorResponse;\r\n equal: (value: string, toEqualValue?: string) => IValidatorResponse;\r\n password: (value: string) => IValidatorResponse;\r\n name: (value: string) => IValidatorResponse;\r\n phone: (value: string) => IValidatorResponse;\r\n required: (value: string) => IValidatorResponse;\r\n}\r\n\r\nexport function combineValidators(validators: IValidator[]): IAppValidators {\r\n return validators.reduce(\r\n (acc, { name, validator }: IValidator): object => {\r\n return { ...acc, [name]: validator };\r\n },\r\n {}\r\n );\r\n}\r\n","import { IValidatorResponse } from \"@/validator/interfaces/IValidatorResponse\";\r\n\r\nexport class ValidatorResponse implements IValidatorResponse {\r\n public status: boolean;\r\n public message: string;\r\n\r\n constructor(status: boolean, message: string) {\r\n this.status = status;\r\n this.message = message;\r\n }\r\n}\r\n","import { IValidatorResponse } from \"@/validator/interfaces/IValidatorResponse\";\r\nimport {\r\n getValidationError,\r\n inputTypesEnum,\r\n validationTypesEnum\r\n} from \"@/validator/errorMessages\";\r\nimport { ValidatorResponse } from \"@/validator/ValidatorResponse\";\r\n\r\nconst { email: emailType } = inputTypesEnum;\r\nconst { required, base } = validationTypesEnum;\r\n\r\nconst reg = new RegExp(\r\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\r\n);\r\n\r\nexport function email(value: string): IValidatorResponse {\r\n if (!value.length) {\r\n return new ValidatorResponse(\r\n false,\r\n getValidationError(emailType, required)\r\n );\r\n }\r\n\r\n const isValid = reg.test(value);\r\n\r\n return new ValidatorResponse(\r\n isValid,\r\n isValid ? \"\" : getValidationError(emailType, base)\r\n );\r\n}\r\n","import {\r\n getValidationError,\r\n inputTypesEnum,\r\n validationTypesEnum\r\n} from \"@/validator/errorMessages\";\r\nimport { IValidatorResponse } from \"@/validator/interfaces/IValidatorResponse\";\r\nimport { ValidatorResponse } from \"@/validator/ValidatorResponse\";\r\nconst { password } = inputTypesEnum;\r\nconst { equal } = validationTypesEnum;\r\n\r\nexport function equalTo(\r\n value: string,\r\n toEqualValue?: string\r\n): IValidatorResponse {\r\n const valid: boolean = value === toEqualValue;\r\n return new ValidatorResponse(\r\n valid,\r\n valid ? \"\" : getValidationError(password, equal)\r\n );\r\n}\r\n","export function isNotEmptyString(str: string): boolean {\r\n return str.trim().length > 0;\r\n}\r\n","import {\r\n getValidationError,\r\n inputTypesEnum,\r\n validationTypesEnum\r\n} from \"@/validator/errorMessages\";\r\nimport { isNotEmptyString } from \"@/validator/utilles/isNotEmptyString\";\r\nimport { ValidatorResponse } from \"@/validator/ValidatorResponse\";\r\n\r\nconst regexp = new RegExp(/^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z\\W]{8,}$/);\r\nconst { password: passwordType } = inputTypesEnum;\r\nconst { required, minLength, base } = validationTypesEnum;\r\n\r\nexport function password(value: string) {\r\n let status = false;\r\n let message = \"\";\r\n\r\n if (!isNotEmptyString(value)) {\r\n message = getValidationError(passwordType, required);\r\n } else if (value.trim().length < 8) {\r\n message = getValidationError(passwordType, minLength);\r\n } else if (!regexp.test(value)) {\r\n message = getValidationError(passwordType, base);\r\n } else {\r\n status = true;\r\n }\r\n\r\n return new ValidatorResponse(status, message);\r\n}\r\n","import {\r\n getValidationError,\r\n inputTypesEnum,\r\n validationTypesEnum\r\n} from \"@/validator/errorMessages\";\r\nimport { isNotEmptyString } from \"@/validator/utilles/isNotEmptyString\";\r\nimport { ValidatorResponse } from \"@/validator/ValidatorResponse\";\r\nimport { IValidatorResponse } from \"@/validator/interfaces/IValidatorResponse\";\r\n\r\nconst { name: nameType } = inputTypesEnum;\r\nconst { required, minLength, base } = validationTypesEnum;\r\n\r\nexport function name(value: string): IValidatorResponse {\r\n let errorMessage = \"\";\r\n let status = false;\r\n\r\n if (!isNotEmptyString(value)) {\r\n errorMessage = getValidationError(nameType, required);\r\n } else if (value.trim().length < 2) {\r\n errorMessage = getValidationError(nameType, minLength);\r\n } else {\r\n status = true;\r\n }\r\n\r\n return new ValidatorResponse(status, errorMessage);\r\n}\r\n","import {\r\n getValidationError,\r\n inputTypesEnum,\r\n validationTypesEnum\r\n} from \"@/validator/errorMessages\";\r\nimport { IValidatorResponse } from \"@/validator/interfaces/IValidatorResponse\";\r\nimport { ValidatorResponse } from \"@/validator/ValidatorResponse\";\r\n\r\n// const phoneRegex = new RegExp(\r\n// /^(?:(?:\\(?(?:00|\\+)([1-4]\\d\\d|[1-9]\\d?)\\)?)?[-. \\\\/]?)?((?:\\(?\\d{1,}\\)?[-. \\\\/]?){0,})(?:[-. \\\\/]?(?:#|ext\\.?|extension|x)[-. \\\\/]?(\\d+))?$/gim\r\n// );\r\n\r\nconst phoneRegex = /^\\+[0-9\\-().\\s]{7,15}$/;\r\nconst { phone: phoneType } = inputTypesEnum;\r\nconst { base } = validationTypesEnum;\r\n\r\nexport function phone(value: string): IValidatorResponse {\r\n const isValid = phoneRegex.test(value) && value.trim().length > 6;\r\n\r\n return new ValidatorResponse(\r\n isValid,\r\n isValid ? \"\" : getValidationError(phoneType, base)\r\n );\r\n}\r\n","import { getValidationError, validationTypesEnum } from \"../errorMessages\";\r\nimport { IValidatorResponse } from \"../interfaces/IValidatorResponse\";\r\nimport { ValidatorResponse } from \"../ValidatorResponse\";\r\n\r\nexport function required(value: string): IValidatorResponse {\r\n const status = !!value.trim().length;\r\n\r\n return new ValidatorResponse(\r\n status,\r\n getValidationError(\"**\", validationTypesEnum.required)\r\n );\r\n}\r\n","import { ValidatorResponse } from \"@/validator/ValidatorResponse\";\r\nimport { IValidatorResponse } from \"@/validator/interfaces/IValidatorResponse\";\r\nimport {\r\n getValidationError,\r\n validationTypesEnum\r\n} from \"@/validator/errorMessages\";\r\n\r\nexport function notEmptyString(value: string): IValidatorResponse {\r\n return new ValidatorResponse(\r\n value.length > 0,\r\n getValidationError(\"**\", validationTypesEnum.required)\r\n );\r\n}\r\n","import { IValidatorResponse } from \"@/validator/interfaces/IValidatorResponse\";\r\nimport { ValidatorResponse } from \"@/validator/ValidatorResponse\";\r\nimport {\r\n getValidationError,\r\n validationTypesEnum\r\n} from \"@/validator/errorMessages\";\r\n\r\nexport function number(value: string): IValidatorResponse {\r\n let status = parseInt(value) >= 0;\r\n\r\n if (status) {\r\n status = /[0-9]/.test(value);\r\n }\r\n\r\n return new ValidatorResponse(\r\n status,\r\n getValidationError(\"**\", validationTypesEnum.number)\r\n );\r\n}\r\n","import { IValidatorResponse } from \"@/validator/interfaces/IValidatorResponse\";\r\nimport { ValidatorResponse } from \"@/validator/ValidatorResponse\";\r\nimport {\r\n getValidationError,\r\n validationTypesEnum\r\n} from \"@/validator/errorMessages\";\r\nimport { number } from \"@/validator/validators/number\";\r\n\r\nexport function price(value: string): IValidatorResponse {\r\n const { status: isNumber } = number(value);\r\n\r\n let status = isNumber ? parseInt(value) > 0 : false;\r\n const message = !isNumber\r\n ? getValidationError(\"price\", validationTypesEnum.number)\r\n : null;\r\n\r\n if (status) {\r\n if (value.startsWith(\"0\") && !value.includes(\".\")) {\r\n status = false;\r\n }\r\n }\r\n\r\n return new ValidatorResponse(\r\n status,\r\n message || getValidationError(\"price\", validationTypesEnum.price)\r\n );\r\n}\r\n","import {\r\n combineValidators,\r\n IAppValidators\r\n} from \"@/validator/combineValidators\";\r\nimport {\r\n IField,\r\n IValidationResult,\r\n FormValidator,\r\n ValidatorInput\r\n} from \"@/validator/interfaces/common\";\r\nimport { email } from \"@/validator/validators/email\";\r\nimport { equalTo } from \"@/validator/validators/equalTo\";\r\nimport { password } from \"@/validator/validators/password\";\r\nimport { name } from \"@/validator/validators/name\";\r\nimport { phone } from \"@/validator/validators/phone\";\r\nimport { required } from \"@/validator/validators/required\";\r\nimport { IValidatorResponse } from \"./interfaces/IValidatorResponse\";\r\nimport { notEmptyString } from \"@/validator/validators/notEmptyString\";\r\nimport { number } from \"@/validator/validators/number\";\r\nimport { price } from \"@/validator/validators/price\";\r\n\r\nconst validators: IAppValidators = combineValidators([\r\n { name: \"email\", validator: email },\r\n { name: \"equal\", validator: equalTo },\r\n { name: \"password\", validator: password },\r\n { name: \"name\", validator: name },\r\n { name: \"phone\", validator: phone },\r\n { name: \"required\", validator: required },\r\n { name: \"notEmptyString\", validator: notEmptyString },\r\n { name: \"number\", validator: number },\r\n { name: \"price\", validator: price }\r\n]);\r\n\r\nclass ValidationResult implements IValidationResult {\r\n public error: boolean;\r\n public touched: boolean;\r\n public errorMessage: string;\r\n\r\n constructor(valid: boolean, touched: boolean, errorMessage: string) {\r\n this.error = valid;\r\n this.touched = touched;\r\n this.errorMessage = errorMessage;\r\n }\r\n}\r\n\r\nclass Field implements IField {\r\n public node: HTMLInputElement;\r\n public rule: string;\r\n public value: string;\r\n public errorMessage: string;\r\n public id: string;\r\n public touched: boolean;\r\n public error: boolean;\r\n public equalToNode: HTMLElement | null;\r\n public required: boolean;\r\n public onChange: (valid?: IValidationResult) => void;\r\n public bindedOnChange: (evt: any) => any;\r\n public equalValue: string;\r\n\r\n constructor(\r\n inputNode: HTMLInputElement,\r\n onChange: (valid?: IValidationResult) => void = () => {}\r\n ) {\r\n const equalToId = inputNode.dataset.equalTo || \"\";\r\n this.node = inputNode;\r\n this.rule = inputNode.dataset.rule || \"\";\r\n this.value = inputNode.value;\r\n this.errorMessage = \"\";\r\n this.id = inputNode.id;\r\n this.touched = !!inputNode.value.length;\r\n this.error = false;\r\n this.required = inputNode.dataset.required === \"true\";\r\n\r\n this.equalToNode = document.getElementById(equalToId);\r\n this.equalValue = \"\";\r\n this.bindedOnChange = this.changeHandler.bind(this);\r\n this.node.addEventListener(\"input\", this.bindedOnChange);\r\n this.node.addEventListener(\"focusout\", () => {\r\n this.focusoutHandler();\r\n });\r\n\r\n if (this.equalToNode) {\r\n this.equalToNode.addEventListener(\"input\", evt => {\r\n this.equalValue = (evt.target as HTMLInputElement).value;\r\n this.validate();\r\n });\r\n }\r\n\r\n this.onChange = onChange;\r\n\r\n this.onChange(this.validate());\r\n }\r\n\r\n changeHandler(event: InputEvent) {\r\n const target: EventTarget | null = event.target;\r\n\r\n if (target === null) {\r\n return;\r\n }\r\n\r\n this.value = (target).value || \"\";\r\n const valid = this.validate();\r\n this.onChange(valid);\r\n }\r\n\r\n private focusoutHandler(): void {\r\n this.touch();\r\n const valid = this.validate();\r\n this.onChange(valid);\r\n }\r\n\r\n get valid(): IValidationResult {\r\n return new ValidationResult(this.error, this.touched, this.errorMessage);\r\n }\r\n\r\n touch() {\r\n this.touched = true;\r\n this.onChange(this.validate());\r\n }\r\n\r\n private validate(): IValidationResult {\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n const validator = validators[this.rule];\r\n const emptyResult: IValidatorResponse = validators.required(this.value);\r\n\r\n if (!emptyResult.status) {\r\n if (!this.required) {\r\n this.error = false;\r\n this.errorMessage = \"\";\r\n return this.valid;\r\n }\r\n\r\n this.error = !emptyResult.status;\r\n this.errorMessage = emptyResult.message;\r\n\r\n return this.valid;\r\n }\r\n\r\n if (this.equalToNode) {\r\n if (this.equalValue === this.value) {\r\n this.error = false;\r\n this.errorMessage = \"\";\r\n return this.valid;\r\n } else {\r\n const { status, message } = validators.equal(\r\n this.value,\r\n this.equalValue\r\n );\r\n this.error = !status;\r\n this.errorMessage = message;\r\n if (!status) {\r\n return this.valid;\r\n }\r\n }\r\n }\r\n\r\n if (validator) {\r\n const { status, message } = validator(this.value);\r\n\r\n this.error = !status;\r\n this.errorMessage = message;\r\n }\r\n\r\n return this.valid;\r\n }\r\n\r\n public destroy() {\r\n this.node.removeEventListener(\"focusout\", this.focusoutHandler);\r\n this.node.removeEventListener(\"input\", this.bindedOnChange);\r\n }\r\n}\r\n\r\ntype attachInputsType = (\r\n input: HTMLInputElement,\r\n onChange: (valid?: IValidationResult) => void\r\n) => void;\r\n\r\nexport class Validator implements FormValidator {\r\n protected fields: ValidatorInput[];\r\n\r\n constructor() {\r\n this.fields = [];\r\n }\r\n\r\n shakeTree() {\r\n this.fields.forEach(field => {\r\n field.input.touch();\r\n });\r\n }\r\n\r\n attachInput(\r\n input: HTMLInputElement,\r\n onChange: (valid?: IValidationResult) => void\r\n ): void {\r\n const id = input.id;\r\n\r\n this.fields.push({\r\n id,\r\n input: new Field(input, onChange)\r\n });\r\n }\r\n\r\n removeInput(id: string): void {\r\n const { input: field } = this.fields.find(field => field.id === id) || {};\r\n this.fields = this.fields.filter(field => field.id !== id);\r\n\r\n if (field) {\r\n field.destroy();\r\n }\r\n }\r\n}\r\n\r\nexport const validator = new Validator();\r\n","\r\nimport { defineComponent, computed } from \"vue\";\r\nimport { validator } from \"@/validator/Validator\";\r\nimport { IValidationResult } from \"@/validator/interfaces/common\";\r\nimport { IInputError } from \"@/components/Form/interfaces/validation/IInputError\";\r\n\r\ntype providerInput = {\r\n id: string;\r\n input: HTMLInputElement;\r\n validationResult: IInputError | undefined;\r\n};\r\n\r\ntype ProviderData = {\r\n validator: any;\r\n inputErrors: IInputError[];\r\n // eslint-disable-next-line no-undef\r\n slots: NodeListOf | [];\r\n inputs: providerInput[];\r\n};\r\n\r\ntype providerRefs = {\r\n _slot: HTMLElement;\r\n};\r\n\r\nexport default defineComponent({\r\n name: \"AppInputsValidationProvider\",\r\n\r\n provide() {\r\n return {\r\n inputErrors: computed(() => this.inputErrors),\r\n destroyed: this.destroyedHandler\r\n };\r\n },\r\n\r\n props: { shakeTree: { type: Boolean, default: false } },\r\n emits: {\r\n changeErrorState: null\r\n },\r\n\r\n data() {\r\n return {\r\n validator: null,\r\n inputErrors: [],\r\n slots: [],\r\n inputs: []\r\n } as ProviderData;\r\n },\r\n\r\n computed: {\r\n hasError(): boolean {\r\n return this.inputErrors.some(({ error }) => error);\r\n }\r\n },\r\n\r\n watch: {\r\n hasError: {\r\n handler(err: boolean): void {\r\n this.$emit(\"changeErrorState\", err);\r\n },\r\n\r\n immediate: true\r\n },\r\n\r\n shakeTree(needShake) {\r\n if (needShake) {\r\n validator.shakeTree();\r\n }\r\n },\r\n\r\n slots: {\r\n handler(slots) {\r\n if (!slots.length) {\r\n return [];\r\n }\r\n\r\n const inputs: HTMLInputElement[] = Array.from(slots);\r\n\r\n this.inputs = inputs.map(\r\n (input: HTMLInputElement): providerInput => {\r\n const id: string = input.id;\r\n\r\n return {\r\n id,\r\n input,\r\n validationResult: this.inputErrors.find(field => field.id === id)\r\n };\r\n }\r\n );\r\n },\r\n immediate: true\r\n },\r\n inputs: {\r\n handler(\r\n inputs: providerInput[],\r\n prevInputs: providerInput[] | undefined\r\n ) {\r\n if (prevInputs) {\r\n this.destroyValidators(prevInputs);\r\n }\r\n\r\n // update current inputs\r\n\r\n if (inputs.length) {\r\n inputs.forEach(({ input, id }) => {\r\n validator.attachInput(input, (valid?: IValidationResult): void => {\r\n if (valid) {\r\n const { error, touched, errorMessage } = valid;\r\n\r\n const exist: IInputError | undefined = this.inputErrors.find(\r\n (input: IInputError) => {\r\n return input.id === id;\r\n }\r\n );\r\n\r\n if (exist) {\r\n exist.error = error;\r\n exist.touched = touched;\r\n exist.errorMessage = errorMessage;\r\n } else {\r\n this.inputErrors.push({ id, error, touched, errorMessage });\r\n }\r\n }\r\n });\r\n });\r\n }\r\n },\r\n immediate: true\r\n }\r\n },\r\n\r\n mounted() {\r\n this.setSlots();\r\n },\r\n\r\n beforeUnmount() {\r\n this.slots = [];\r\n this.inputErrors = [];\r\n this.destroyedHandler();\r\n },\r\n\r\n methods: {\r\n setSlots(): void {\r\n if (!this.$refs._slot) {\r\n this.slots = [];\r\n\r\n return;\r\n }\r\n\r\n const $slot = (this.$refs as providerRefs)._slot;\r\n this.slots = $slot.querySelectorAll(\"input, textarea\") || [];\r\n },\r\n\r\n destroyedHandler(): void {\r\n this.setSlots();\r\n\r\n this.$nextTick(() => {\r\n this.destroyValidators(this.inputs, true);\r\n });\r\n },\r\n\r\n destroyValidators(inputs: providerInput[], removeAll = false) {\r\n const currentInputs = removeAll ? [] : this.inputs;\r\n const currentInputsIds: string[] = currentInputs.map(\r\n ({ id }: providerInput) => id\r\n );\r\n\r\n const destroyedInputs: providerInput[] = inputs.filter(\r\n ({ id }: providerInput) => {\r\n return !currentInputsIds.includes(id);\r\n }\r\n );\r\n\r\n destroyedInputs.forEach(({ id }: providerInput) => {\r\n validator.removeInput(id);\r\n\r\n this.inputErrors = this.inputErrors.filter(\r\n (input: IInputError) => input.id !== id\r\n );\r\n });\r\n }\r\n }\r\n});\r\n","import { render } from \"./AppInputsValidationProvider.vue?vue&type=template&id=5f9b2fcc&ts=true\"\nimport script from \"./AppInputsValidationProvider.vue?vue&type=script&lang=ts\"\nexport * from \"./AppInputsValidationProvider.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"C:\\\\Bohdan\\\\telesim_test\\\\telesim-admin-panel\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./AppInput.vue?vue&type=style&index=0&id=de9b3e74&lang=scss\"","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./AppInputStatus.vue?vue&type=template&id=02b4e27c\"\nimport script from \"./AppInputStatus.vue?vue&type=script&lang=js\"\nexport * from \"./AppInputStatus.vue?vue&type=script&lang=js\"\n\nimport \"./AppInputStatus.vue?vue&type=style&index=0&id=02b4e27c&lang=scss\"\n\nimport exportComponent from \"C:\\\\Bohdan\\\\telesim_test\\\\telesim-admin-panel\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./AppInput.vue?vue&type=template&id=de9b3e74\"\nimport script from \"./AppInput.vue?vue&type=script&lang=js\"\nexport * from \"./AppInput.vue?vue&type=script&lang=js\"\n\nimport \"./AppInput.vue?vue&type=style&index=0&id=de9b3e74&lang=scss\"\n\nimport exportComponent from \"C:\\\\Bohdan\\\\telesim_test\\\\telesim-admin-panel\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","// extracted by mini-css-extract-plugin\nmodule.exports = {\"bgColor\":\"#f5f6fa\",\"fontColor\":\"#333\",\"lightColor\":\"#fff\",\"primaryColor\":\"#2f80ed\",\"successColor\":\"#27ae60\",\"warningColor\":\"#f2994a\",\"warningLightColor\":\"#fef5ed\",\"dangerColor\":\"#eb5757\",\"dangerLightColor\":\"#fdefef\",\"darkBackgroundColor\":\"rgba(0,0,0,.1)\",\"activeMenuItemGradient\":\"linear-gradient(0deg, #F3F4F8, #F3F4F8)\",\"gradientPrimaryLight\":\"linear-gradient(90.25deg, #DFE9F7 1.96%, #F5F6FA 99.73%)\",\"gradientPrimaryLightTransparent\":\"linear-gradient(90.25deg, #DFE9F7 1.96%, #F5F6FA 99.73%)\",\"colIndent\":\"1rem\",\"tableColXxs\":\"4rem\",\"tableColXs\":\"5.2rem\",\"tableColSm\":\"7rem\",\"tableColSmL\":\"9.5rem\",\"tableColMd\":\"11.5rem\",\"tableColLg\":\"18rem\",\"tableColXg\":\"25rem\",\"buttonSizesArray\":\"icon,xs,sm,smL,md-fluid,md,lg,xl,fluid\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"bgColor\":\"#f5f6fa\",\"fontColor\":\"#333\",\"lightColor\":\"#fff\",\"primaryColor\":\"#2f80ed\",\"successColor\":\"#27ae60\",\"warningColor\":\"#f2994a\",\"warningLightColor\":\"#fef5ed\",\"dangerColor\":\"#eb5757\",\"dangerLightColor\":\"#fdefef\",\"darkBackgroundColor\":\"rgba(0,0,0,.1)\",\"activeMenuItemGradient\":\"linear-gradient(0deg, #F3F4F8, #F3F4F8)\",\"gradientPrimaryLight\":\"linear-gradient(90.25deg, #DFE9F7 1.96%, #F5F6FA 99.73%)\",\"gradientPrimaryLightTransparent\":\"linear-gradient(90.25deg, #DFE9F7 1.96%, #F5F6FA 99.73%)\",\"colIndent\":\"1rem\",\"tableColXxs\":\"4rem\",\"tableColXs\":\"5.2rem\",\"tableColSm\":\"7rem\",\"tableColSmL\":\"9.5rem\",\"tableColMd\":\"11.5rem\",\"tableColLg\":\"18rem\",\"tableColXg\":\"25rem\",\"buttonSizesArray\":\"icon,xs,sm,smL,md-fluid,md,lg,xl,fluid\"};"],"sourceRoot":""}