{"version":3,"sources":["../../src/mixins/validatable.ts"],"names":[],"mappings":"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","sourcesContent":["// Mixins\nimport Colorable from './colorable'\nimport { inject as RegistrableInject } from './registrable'\n\n// Utilities\nimport { deepEqual } from '../util/helpers'\nimport { consoleError } from '../util/console'\nimport mixins from '../util/mixins'\n\n// Types\nimport { PropValidator } from 'vue/types/options'\nexport type VuetifyRuleValidator = (value: any) => string | false\nexport type VuetifyMessage = string | string[]\nexport type VuetifyRuleValidations = (VuetifyRuleValidator | string)[]\n\n/* @vue/component */\nexport default mixins(\n Colorable,\n RegistrableInject('form')\n).extend({\n name: 'validatable',\n\n props: {\n disabled: Boolean,\n error: Boolean,\n errorCount: {\n type: [Number, String],\n default: 1\n },\n errorMessages: {\n type: [String, Array],\n default: () => []\n } as PropValidator,\n messages: {\n type: [String, Array],\n default: () => []\n } as PropValidator,\n readonly: Boolean,\n rules: {\n type: Array,\n default: () => []\n } as PropValidator,\n success: Boolean,\n successMessages: {\n type: [String, Array],\n default: () => []\n } as PropValidator,\n validateOnBlur: Boolean,\n value: { required: false }\n },\n\n data () {\n return {\n errorBucket: [] as string[],\n hasColor: false,\n hasFocused: false,\n hasInput: false,\n isFocused: false,\n isResetting: false,\n lazyValue: this.value,\n valid: false\n }\n },\n\n computed: {\n hasError (): boolean {\n return (\n this.internalErrorMessages.length > 0 ||\n this.errorBucket.length > 0 ||\n this.error\n )\n },\n // TODO: Add logic that allows the user to enable based\n // upon a good validation\n hasSuccess (): boolean {\n return (\n this.internalSuccessMessages.length > 0 ||\n this.success\n )\n },\n externalError (): boolean {\n return this.internalErrorMessages.length > 0 || this.error\n },\n hasMessages (): boolean {\n return this.validationTarget.length > 0\n },\n hasState (): boolean {\n return (\n this.hasSuccess ||\n (this.shouldValidate && this.hasError)\n )\n },\n internalErrorMessages (): VuetifyRuleValidations {\n return this.genInternalMessages(this.errorMessages)\n },\n internalMessages (): VuetifyRuleValidations {\n return this.genInternalMessages(this.messages)\n },\n internalSuccessMessages (): VuetifyRuleValidations {\n return this.genInternalMessages(this.successMessages)\n },\n internalValue: {\n get (): unknown {\n return this.lazyValue\n },\n set (val: any) {\n this.lazyValue = val\n\n this.$emit('input', val)\n }\n },\n shouldValidate (): boolean {\n if (this.externalError) return true\n if (this.isResetting) return false\n\n return this.validateOnBlur\n ? this.hasFocused && !this.isFocused\n : (this.hasInput || this.hasFocused)\n },\n validations (): VuetifyRuleValidations {\n return this.validationTarget.slice(0, Number(this.errorCount))\n },\n validationState (): string | undefined {\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor) return this.color\n return undefined\n },\n validationTarget (): VuetifyRuleValidations {\n if (this.internalErrorMessages.length > 0) {\n return this.internalErrorMessages\n } else if (this.successMessages.length > 0) {\n return this.internalSuccessMessages\n } else if (this.messages.length > 0) {\n return this.internalMessages\n } else if (this.shouldValidate) {\n return this.errorBucket\n } else return []\n }\n },\n\n watch: {\n rules: {\n handler (newVal, oldVal) {\n if (deepEqual(newVal, oldVal)) return\n this.validate()\n },\n deep: true\n },\n internalValue () {\n // If it's the first time we're setting input,\n // mark it with hasInput\n this.hasInput = true\n this.validateOnBlur || this.$nextTick(this.validate)\n },\n isFocused (val) {\n // Should not check validation\n // if disabled or readonly\n if (\n !val &&\n !this.disabled &&\n !this.readonly\n ) {\n this.hasFocused = true\n this.validateOnBlur && this.validate()\n }\n },\n isResetting () {\n setTimeout(() => {\n this.hasInput = false\n this.hasFocused = false\n this.isResetting = false\n this.validate()\n }, 0)\n },\n hasError (val) {\n if (this.shouldValidate) {\n this.$emit('update:error', val)\n }\n },\n value (val) {\n this.lazyValue = val\n }\n },\n\n beforeMount () {\n this.validate()\n },\n\n created () {\n this.form && this.form.register(this)\n },\n\n beforeDestroy () {\n this.form && this.form.unregister(this)\n },\n\n methods: {\n genInternalMessages (messages: VuetifyMessage): VuetifyRuleValidations {\n if (!messages) return []\n else if (Array.isArray(messages)) return messages\n else return [messages]\n },\n /** @public */\n reset () {\n this.isResetting = true\n this.internalValue = Array.isArray(this.internalValue)\n ? []\n : undefined\n },\n /** @public */\n resetValidation () {\n this.isResetting = true\n },\n /** @public */\n validate (force = false, value?: any): boolean {\n const errorBucket = []\n value = value || this.internalValue\n\n if (force) this.hasInput = this.hasFocused = true\n\n for (let index = 0; index < this.rules.length; index++) {\n const rule = this.rules[index]\n const valid = typeof rule === 'function' ? rule(value) : rule\n\n if (typeof valid === 'string') {\n errorBucket.push(valid)\n } else if (typeof valid !== 'boolean') {\n consoleError(`Rules should return a string or boolean, received '${typeof valid}' instead`, this)\n }\n }\n\n this.errorBucket = errorBucket\n this.valid = errorBucket.length === 0\n\n return this.valid\n }\n }\n})\n"],"sourceRoot":""}