Enum.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. @change="$emit('update', $event, field)"
  22. />
  23. </main>
  24. </template>
  25. <script lang="ts">
  26. import { defineComponent, ref, useContext, useFetch, Ref } from '@nuxtjs/composition-api'
  27. import { EnumChoices } from '~/types/interfaces'
  28. import { QUERY_TYPE } from '~/types/enums'
  29. export default defineComponent({
  30. props: {
  31. enumType: {
  32. type: String,
  33. required: true
  34. },
  35. label: {
  36. type: String,
  37. required: false
  38. },
  39. field: {
  40. type: String,
  41. required: false
  42. },
  43. data: {
  44. type: String,
  45. required: false
  46. },
  47. readOnly: {
  48. type: Boolean,
  49. required: false
  50. },
  51. rules: {
  52. type: Array,
  53. required: false
  54. }
  55. },
  56. setup (props) {
  57. const label_field = props.label ?? props.field
  58. const { enumType } = props
  59. const { $dataProvider } = useContext()
  60. const items: Ref<Array<EnumChoices>> = ref([])
  61. useFetch(async () => {
  62. items.value = await $dataProvider.invoke({
  63. type: QUERY_TYPE.ENUM,
  64. enumType
  65. })
  66. })
  67. return {
  68. items,
  69. label_field
  70. }
  71. }
  72. })
  73. </script>
  74. <style scoped>
  75. </style>