Checkbox.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <!--
  2. Case à cocher, à placer dans un composant `UiForm`
  3. @see https://vuetifyjs.com/en/components/checkboxes/
  4. -->
  5. <template>
  6. <v-checkbox
  7. :model-value="modelValue"
  8. :label="$t(fieldLabel)"
  9. :disabled="readonly"
  10. :error="error || !!fieldViolations"
  11. :error-messages="errorMessage || fieldViolations ? $t(fieldViolations) : ''"
  12. class="py-1"
  13. @update:model-value="onUpdate"
  14. />
  15. </template>
  16. <script setup lang="ts">
  17. import { useFieldViolation } from '~/composables/form/useFieldViolation'
  18. const props = defineProps({
  19. /**
  20. * v-model
  21. */
  22. modelValue: {
  23. type: Boolean,
  24. required: false,
  25. },
  26. /**
  27. * Nom de la propriété d'une entité lorsque l'input concerne cette propriété
  28. * - Utilisé par la validation
  29. * - Laisser null si le champ ne s'applique pas à une entité
  30. */
  31. field: {
  32. type: String,
  33. required: false,
  34. default: null,
  35. },
  36. /**
  37. * Label du champ
  38. * Si non défini, c'est le nom de propriété qui est utilisé
  39. */
  40. label: {
  41. type: String,
  42. required: false,
  43. default: null,
  44. },
  45. /**
  46. * Définit si le champ est en lecture seule
  47. */
  48. readonly: {
  49. type: Boolean,
  50. required: false,
  51. default: false,
  52. },
  53. /**
  54. * Règles de validation
  55. * @see https://vuetify.cn/en/components/forms/#validation-with-submit-clear
  56. */
  57. rules: {
  58. type: Array,
  59. required: false,
  60. default: () => [],
  61. },
  62. /**
  63. * Le champ est-il actuellement en état d'erreur
  64. */
  65. error: {
  66. type: Boolean,
  67. required: false,
  68. },
  69. /**
  70. * Si le champ est en état d'erreur, quel est le message d'erreur?
  71. */
  72. errorMessage: {
  73. type: String,
  74. required: false,
  75. default: null,
  76. },
  77. })
  78. const { fieldViolations, updateViolationState } = useFieldViolation(props.field)
  79. const fieldLabel: string = props.label ?? props.field
  80. const emit = defineEmits(['update:model-value'])
  81. const onUpdate = (event: boolean) => {
  82. updateViolationState(event)
  83. emit('update:model-value', event)
  84. }
  85. </script>
  86. <style scoped></style>