EventList.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <template>
  2. <div>
  3. <v-list height="420">
  4. <v-list-item
  5. v-for="event in events"
  6. :key="event.id"
  7. class="event-item"
  8. >
  9. <template #prepend>
  10. <v-avatar color="grey-lighten-1">
  11. <UiImage :image-id="event.image" :width="50" />
  12. </v-avatar>
  13. </template>
  14. <template #default>
  15. <div
  16. class="flex-grow-1"
  17. @click="$emit('edit', event.id)"
  18. >
  19. <span class="text-subtitle-1">{{event.name}}</span>
  20. <br>
  21. <span class="text-subtitle-2">{{date.format(event.datetimeStart, 'fullDateWithWeekday')}}</span>
  22. </div>
  23. </template>
  24. <template #append>
  25. <v-avatar class="edit-btn" @click="$emit('edit', event.id)">
  26. <v-icon>fas fa-pencil</v-icon>
  27. </v-avatar>
  28. <UiButtonDelete :entity="event" class="delete-btn">
  29. <v-avatar>
  30. <v-icon>fas fa-trash</v-icon>
  31. </v-avatar>
  32. </UiButtonDelete>
  33. </template>
  34. </v-list-item>
  35. </v-list>
  36. <div v-if="events.length > 0" class="d-flex justify-space-between px-4 py-2 pagination mb-5">
  37. <v-btn variant="flat" class="pagination-btn" :disabled="!pagination.first || !pagination.previous" @click="$emit('load', pagination.first)">
  38. <v-avatar>
  39. <v-icon>fas fa-angles-left</v-icon>
  40. </v-avatar>
  41. </v-btn>
  42. <v-btn variant="flat" class="pagination-btn" :disabled="!pagination.previous" @click="$emit('load', pagination.previous)">
  43. <v-avatar>
  44. <v-icon>fas fa-angle-left</v-icon>
  45. </v-avatar>
  46. </v-btn>
  47. <v-btn variant="flat" class="pagination-btn" :disabled="!pagination.next" @click="$emit('load', pagination.next)">
  48. <v-avatar>
  49. <v-icon>fas fa-angle-right</v-icon>
  50. </v-avatar>
  51. </v-btn>
  52. <v-btn variant="flat" class="pagination-btn" :disabled="pagination.last == 1" @click="$emit('load', pagination.last)">
  53. <v-avatar>
  54. <v-icon>fas fa-angles-right</v-icon>
  55. </v-avatar>
  56. </v-btn>
  57. </div>
  58. </div>
  59. </template>
  60. <script lang="ts" setup>
  61. import { defineProps, defineEmits } from 'vue'
  62. import type {Collection} from "pinia-orm";
  63. import type Event from "~/models/Freemium/Event";
  64. import type {Pagination} from "~/types/data";
  65. import { useDate } from 'vuetify'
  66. const props = defineProps<{
  67. events: Collection<Event>,
  68. pagination: Pagination
  69. }>()
  70. const emits = defineEmits(['edit', 'load'])
  71. const date = useDate()
  72. </script>
  73. <style scoped lang="scss">
  74. .event-item {
  75. margin-top: 20px;
  76. color: rgb(var(--v-theme-on-neutral));
  77. .text-subtitle-2{
  78. text-transform: capitalize !important;
  79. color: rgb(var(--v-theme-on-neutral--sub));
  80. }
  81. }
  82. .pagination-btn[disabled] {
  83. opacity: 0.3;
  84. }
  85. .edit-btn{
  86. cursor: pointer;
  87. }
  88. :deep(.v-list-item):hover{
  89. cursor: pointer;
  90. background-color: rgb(var(--v-theme-neutral));
  91. }
  92. </style>