AutocompleteWithEnum.vue 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <template>
  2. <UiInputAutocomplete
  3. :model-value="modelValue"
  4. :field="field"
  5. :items="items"
  6. :is-loading="pending"
  7. :return-object="false"
  8. item-title="label"
  9. item-value="value"
  10. @update:model-value="$emit('update:model-value', $event)"
  11. />
  12. </template>
  13. <script setup lang="ts">
  14. import {useEnumFetch} from "~/composables/data/useEnumFetch";
  15. import ArrayUtils from "~/services/utils/arrayUtils";
  16. import {ComputedRef} from "@vue/reactivity";
  17. import {Enum} from "~/types/data";
  18. const props = defineProps({
  19. modelValue: {
  20. type: String,
  21. required: false,
  22. default: null
  23. },
  24. enumName: {
  25. type: String,
  26. required: true
  27. },
  28. field: {
  29. type: String,
  30. required: false,
  31. default: null
  32. },
  33. label: {
  34. type: String,
  35. required: false,
  36. default: null
  37. }
  38. })
  39. const { fetch } = useEnumFetch()
  40. const { data: enumItems, pending } = fetch(props.enumName)
  41. const items: ComputedRef<Array<Enum>> = computed(() => {
  42. if (!enumItems.value) {
  43. return []
  44. }
  45. return ArrayUtils.sortObjectsByProp(enumItems.value, 'label') as Array<Enum>
  46. })
  47. </script>
  48. <style scoped lang="scss">
  49. </style>