import { type ValidationRule } from '@/composables/validation/useValidation' import { computed, ref, type Ref } from 'vue' import { useValidation } from '@/composables/unifyValidation/useValidation' import type { locales } from './locales' import type { VuetifyValidationRule } from '@/composables/unifyValidation/useValidation' import type { Indicatif } from './types' export function usePhoneFieldValidation(params: { modelValue: Ref readonly: Ref disabled: Ref required: Ref counter: Ref phoneFieldIdentifier: Ref shouldDisableErrorHandling: Ref hasError: Ref hasWarning: Ref hasSuccess: Ref showSuccessMessages: Ref disableErrorHandling: Ref isValidateOnBlur: Ref focused: Ref customRules: Ref warningRules?: Ref successRules?: Ref rules?: Ref errorMessages?: Ref warningMessages?: Ref successMessages?: Ref locales: Ref useVuetifyValidation?: Ref dialCode?: Ref withCountryCode?: Ref }) { const validationRules = computed(() => { const rules = [] as ValidationRule[] rules.push({ type: 'exactLength', options: { length: params.counter.value, ignoreSpace: true, message: params.locales.value.errorLength(params.counter.value), successMessage: params.locales.value.success(params.phoneFieldIdentifier.value), fieldIdentifier: params.phoneFieldIdentifier.value, }, }) if (params.required.value) { rules.unshift({ type: 'required', options: { length: params.counter.value, ignoreSpace: true, message: params.locales.value.errorRequired(params.phoneFieldIdentifier.value), fieldIdentifier: params.phoneFieldIdentifier.value, }, }) } return rules }) const { hasError, hasWarning, hasSuccess, errors, warnings, successes, state, validate, clearValidation } = useValidation({ modelValue: params.modelValue, readonly: params.readonly, disabled: params.disabled, required: params.required, isValidateOnBlur: params.isValidateOnBlur, showSuccessMessages: params.showSuccessMessages, disableErrorHandling: params.disableErrorHandling, label: params.phoneFieldIdentifier, focused: params.focused, customRules: computed(() => [ ...validationRules.value, ...params.customRules.value, ]), customWarningRules: params.warningRules ?? ref([]), customSuccessRules: params.successRules ?? ref([]), useVuetifyValidation: params.useVuetifyValidation ?? ref(false), rules: params.rules ?? ref(undefined), hasErrorProp: params.hasError, hasWarningProp: params.hasWarning, hasSuccessProp: params.hasSuccess, errorMessages: params.errorMessages, warningMessages: params.warningMessages, successMessages: params.successMessages, }) const iconColor = computed(() => { if (params.shouldDisableErrorHandling.value) return '#222324' if (hasError.value) return 'error' if (hasWarning.value) return 'warning' if (hasSuccess.value) return 'success' return '#222324' }) const clearButtonColorClass = computed(() => { if (hasError.value) return 'error-field' if (hasWarning.value) return 'warning-field' if (hasSuccess.value) return 'success-field' return 'text-iconBase' }) return { errors, warnings, successes, hasError, hasWarning, hasSuccess, iconColor, clearButtonColorClass, validationRules, state, validate, clearValidation, } }