Enum.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <!--
  2. Liste déroulante dédiée à l'affichage d'objets Enum
  3. @see https://vuetifyjs.com/en/components/selects/
  4. -->
  5. <template>
  6. <main>
  7. <v-skeleton-loader
  8. v-if="$fetchState.pending"
  9. type="list-item"
  10. loading
  11. />
  12. <v-select
  13. v-else
  14. :label="$t(label_field)"
  15. :value="data"
  16. :items="items"
  17. item-text="label"
  18. item-value="value"
  19. :rules="rules"
  20. :disabled="readonly"
  21. :error="error || !!violation"
  22. :error-messages="errorMessage || violation ? $t(violation) : ''"
  23. @change="onChange($event)"
  24. />
  25. </main>
  26. </template>
  27. <script lang="ts">
  28. import {defineComponent, ref, useContext, useFetch, Ref} from '@nuxtjs/composition-api'
  29. import { EnumChoices } from '~/types/interfaces'
  30. import { QUERY_TYPE } from '~/types/enums'
  31. import {useError} from "~/composables/form/useError";
  32. export default defineComponent({
  33. props: {
  34. enumType: {
  35. type: String,
  36. required: true
  37. },
  38. label: {
  39. type: String,
  40. required: false,
  41. default: null
  42. },
  43. field: {
  44. type: String,
  45. required: false,
  46. default: null
  47. },
  48. data: {
  49. type: String,
  50. required: false,
  51. default: null
  52. },
  53. readonly: {
  54. type: Boolean,
  55. required: false
  56. },
  57. rules: {
  58. type: Array,
  59. required: false,
  60. default: () => []
  61. },
  62. error: {
  63. type: Boolean,
  64. required: false
  65. },
  66. errorMessage: {
  67. type: String,
  68. required: false,
  69. default: null
  70. }
  71. },
  72. setup (props, {emit}) {
  73. const labelField = props.label ?? props.field
  74. const { enumType } = props
  75. const { $dataProvider, store } = useContext()
  76. const {violation, onChange} = useError(props.field, emit, store)
  77. const items: Ref<Array<EnumChoices>> = ref([])
  78. useFetch(async () => {
  79. items.value = await $dataProvider.invoke({
  80. type: QUERY_TYPE.ENUM,
  81. enumType
  82. })
  83. })
  84. return {
  85. items,
  86. label_field: labelField,
  87. violation,
  88. onChange
  89. }
  90. }
  91. })
  92. </script>
  93. <style scoped>
  94. </style>