ApplyTemplate.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <!-- Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/ -->
  2. <script setup lang="ts">
  3. import { computed } from 'vue'
  4. import CommonPopover from '#shared/components/CommonPopover/CommonPopover.vue'
  5. import { usePopover } from '#shared/components/CommonPopover/usePopover.ts'
  6. import { EnumTextDirection } from '#shared/graphql/types.ts'
  7. import { useLocaleStore } from '#shared/stores/locale.ts'
  8. import { useSessionStore } from '#shared/stores/session.ts'
  9. import CommonButton from '#desktop/components/CommonButton/CommonButton.vue'
  10. import CommonPopoverMenu from '#desktop/components/CommonPopoverMenu/CommonPopoverMenu.vue'
  11. import type { MenuItem } from '#desktop/components/CommonPopoverMenu/types'
  12. import { useApplyTemplate } from '../composables/useApplyTemplate.ts'
  13. const emit = defineEmits<{
  14. 'select-template': [string]
  15. }>()
  16. const { hasPermission } = useSessionStore()
  17. const { popover, popoverTarget, toggle } = usePopover()
  18. const locale = useLocaleStore()
  19. const { templateList } = useApplyTemplate()
  20. const templateAccess = computed(() => {
  21. if (
  22. templateList &&
  23. templateList.value.length > 0 &&
  24. hasPermission('ticket.agent')
  25. ) {
  26. return true
  27. }
  28. return false
  29. })
  30. const items = computed(() => {
  31. const menuItems: MenuItem[] = []
  32. templateList.value.forEach((template) => {
  33. menuItems.push({
  34. key: template.id,
  35. label: template.name,
  36. onClick: () => {
  37. emit('select-template', template.id)
  38. },
  39. })
  40. })
  41. return menuItems
  42. })
  43. const currentPopoverPlacement = computed(() => {
  44. if (locale.localeData?.dir === EnumTextDirection.Rtl) return 'start'
  45. return 'end'
  46. })
  47. </script>
  48. <template>
  49. <template v-if="templateAccess">
  50. <CommonPopover
  51. ref="popover"
  52. :owner="popoverTarget"
  53. :placement="currentPopoverPlacement"
  54. orientation="top"
  55. >
  56. <CommonPopoverMenu :popover="popover" :items="items" />
  57. </CommonPopover>
  58. <CommonButton
  59. ref="popoverTarget"
  60. size="large"
  61. suffix-icon="chevron-up"
  62. variant="secondary"
  63. @click="toggle(true)"
  64. >
  65. {{ $t('Apply Template') }}
  66. </CommonButton>
  67. </template>
  68. </template>