PersonnalizedList.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <template>
  2. <main>
  3. <v-menu
  4. bottom
  5. left
  6. transition="slide-y-transition"
  7. :close-on-content-click="false"
  8. min-width="500"
  9. >
  10. <template #activator="{ on, attrs }">
  11. <span
  12. v-bind="attrs"
  13. class="ot-green--text"
  14. v-on="on"
  15. >
  16. {{ $t('my_list') }}
  17. </span>
  18. </template>
  19. <v-card scrollable>
  20. <v-card-title class="text-body-2 header-personnalized">
  21. <v-text-field
  22. dense
  23. clear-icon="header-personnalized"
  24. :loading="fetchState.pending"
  25. v-model="search"
  26. :label="$t('searchList')"
  27. />
  28. </v-card-title>
  29. <v-card-text class="ma-0 pa-0 mt-n3 header_menu">
  30. <v-list dense :subheader="true">
  31. <template v-for="(item, index) in filteredItems">
  32. <v-list-item
  33. :id="item.id"
  34. :key="index"
  35. :href="goOn(item)"
  36. router
  37. exact
  38. >
  39. <v-list-item-title>
  40. {{item.label}} - <strong>{{item.menuKey}}</strong>
  41. </v-list-item-title>
  42. </v-list-item>
  43. </template>
  44. </v-list>
  45. </v-card-text>
  46. </v-card>
  47. </v-menu>
  48. </main>
  49. </template>
  50. <script lang="ts">
  51. import {
  52. computed, defineComponent, useContext, useFetch, ref, Ref, ComputedRef
  53. } from '@nuxtjs/composition-api'
  54. import { Collection } from '@vuex-orm/core'
  55. import { QUERY_TYPE } from '~/types/enum/enums'
  56. import { PersonalizedList } from '~/models/Access/PersonalizedList'
  57. import { repositoryHelper } from '~/services/store/repository'
  58. import { AnyJson } from '~/types/interfaces'
  59. import {queryHelper} from "~/services/store/query";
  60. export default defineComponent({
  61. fetchOnServer: false,
  62. setup () {
  63. const { $dataProvider, $config, app:{i18n} } = useContext()
  64. const homeUrl:string = $config.baseURL_adminLegacy
  65. const {fetchState} = useFetch(async () => {
  66. await $dataProvider.invoke({
  67. type: QUERY_TYPE.MODEL,
  68. model: PersonalizedList
  69. })
  70. })
  71. const items:ComputedRef<Array<AnyJson>> = computed(() => {
  72. const query = repositoryHelper.getRepository(PersonalizedList).query()
  73. const lists = queryHelper.getCollection(query, {'label':'asc'}) as Collection<PersonalizedList>
  74. lists.map(item => {
  75. const menu: string = i18n.t(item.menuKey) as string
  76. item.menuKey = menu
  77. })
  78. return lists
  79. })
  80. const search = ref('');
  81. const filteredItems = computed(() => {
  82. return items.value.filter( item => {
  83. return item.label.toLowerCase().indexOf(search.value.toLowerCase()) >= 0
  84. ||item.menuKey.toLowerCase().indexOf(search.value.toLowerCase()) >= 0
  85. }
  86. )
  87. })
  88. const goOn = (list:PersonalizedList) => {
  89. return `${homeUrl}/${list.entity}/list/${list.id}`
  90. }
  91. return {
  92. items,
  93. fetchState,
  94. goOn,
  95. filteredItems,
  96. search,
  97. homeUrl
  98. }
  99. }
  100. })
  101. </script>
  102. <style type="text/css" lang="scss">
  103. .header-personnalized{
  104. margin-bottom: 0px;
  105. padding-bottom: 0px;
  106. }
  107. </style>