Email.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <!--
  2. Champs de saisie de type Text dédié à la saisie d'emails
  3. -->
  4. <template>
  5. <UiInputText
  6. :data="data"
  7. :label="$t(fieldLabel)"
  8. :readonly="readonly"
  9. :error="error || !!violation"
  10. :error-messages="errorMessage || violation ? $t(violation) : ''"
  11. :rules="rules"
  12. @update="onChange"
  13. />
  14. </template>
  15. <script setup lang="ts">
  16. import { useNuxtApp } from '#app'
  17. import { useFieldViolation } from '~/composables/form/useFieldViolation'
  18. import { useValidationUtils } from '~/composables/utils/useValidationUtils'
  19. import type { PropType } from '@vue/runtime-core'
  20. const props = defineProps({
  21. label: {
  22. type: String,
  23. required: false,
  24. default: null,
  25. },
  26. field: {
  27. type: String,
  28. required: false,
  29. default: null,
  30. },
  31. data: {
  32. type: [String, Number],
  33. required: false,
  34. default: null,
  35. },
  36. readonly: {
  37. type: Boolean,
  38. required: false,
  39. default: false,
  40. },
  41. required: {
  42. type: Boolean,
  43. required: false,
  44. default: false,
  45. },
  46. error: {
  47. type: Boolean,
  48. required: false,
  49. },
  50. errorMessage: {
  51. type: String,
  52. required: false,
  53. default: null,
  54. },
  55. /**
  56. * @see https://vuetifyjs.com/en/api/v-autocomplete/#props-variant
  57. */
  58. variant: {
  59. type: String as PropType<
  60. | 'filled'
  61. | 'outlined'
  62. | 'plain'
  63. | 'underlined'
  64. | 'solo'
  65. | 'solo-inverted'
  66. | 'solo-filled'
  67. | undefined
  68. >,
  69. required: false,
  70. default: 'outlined',
  71. },
  72. })
  73. const { emit, i18n } = useNuxtApp()
  74. const fieldLabel = props.label ?? props.field
  75. const { violation, onChange } = useFieldViolation(props.field, emit)
  76. const validationUtils = useValidationUtils()
  77. const rules = [
  78. (email: string) => validationUtils.validEmail(email) || i18n.t('email_error'),
  79. ]
  80. if (props.required) {
  81. rules.push((email: string) => !!email || i18n.t('required'))
  82. }
  83. </script>