import { computed, type Ref } from 'vue' import { locales as defaultLocales } from './locales' import type { ValidationRule as SyValidationRule } from '@/composables/validation/useValidation' export type TextareaRule = (value: string) => boolean | string export function useDefaultValidationRules(params: { required: Ref label: Ref maxLines: Ref hasInteracted: Ref locales: Ref }) { const vuetifyRules = computed(() => { const rules: TextareaRule[] = [] if (params.maxLines.value !== undefined) { rules.push((value: string) => { const lines = value.split('\n').length if (lines > params.maxLines.value!) { return params.locales.value.maxLines(params.maxLines.value!) } return true }) } return rules }) const customRules = computed(() => { const rules: SyValidationRule[] = [] if (params.required.value) { rules.push({ type: 'required', options: { message: params.locales.value.required ?? params.locales.value.requiredField(params.label.value), }, }) } if (params.maxLines.value !== undefined) { rules.push({ type: 'custom', options: { validate: (value: string) => { const lines = value.split('\n').length return lines <= params.maxLines.value! || params.locales.value.maxLines(params.maxLines.value!) }, }, }) } return rules }) return { vuetifyRules, customRules, } }