Email.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. const props = defineProps({
  20. label: {
  21. type: String,
  22. required: false,
  23. default: null,
  24. },
  25. field: {
  26. type: String,
  27. required: false,
  28. default: null,
  29. },
  30. data: {
  31. type: [String, Number],
  32. required: false,
  33. default: null,
  34. },
  35. readonly: {
  36. type: Boolean,
  37. required: false,
  38. default: false,
  39. },
  40. required: {
  41. type: Boolean,
  42. required: false,
  43. default: false,
  44. },
  45. error: {
  46. type: Boolean,
  47. required: false,
  48. },
  49. errorMessage: {
  50. type: String,
  51. required: false,
  52. default: null,
  53. },
  54. })
  55. const { emit, i18n } = useNuxtApp()
  56. const fieldLabel = props.label ?? props.field
  57. const { violation, onChange } = useFieldViolation(props.field, emit)
  58. const validationUtils = useValidationUtils()
  59. const rules = [
  60. (email: string) => validationUtils.validEmail(email) || i18n.t('email_error'),
  61. ]
  62. if (props.required) {
  63. rules.push((email: string) => !!email || i18n.t('required'))
  64. }
  65. </script>