CommonTicketStateList.vue 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <!-- Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/ -->
  2. <script setup lang="ts">
  3. import { TicketState } from '@shared/entities/ticket/types'
  4. import { replaceTags } from '@shared/utils/formatter'
  5. import CommonSectionMenu from '../CommonSectionMenu/CommonSectionMenu.vue'
  6. import CommonSectionMenuLink from '../CommonSectionMenu/CommonSectionMenuLink.vue'
  7. interface Props {
  8. createLink?: string
  9. createLabel?: string
  10. counts: Record<TicketState.Closed | TicketState.Open, number>
  11. ticketsLinkQuery: string
  12. }
  13. const props = defineProps<Props>()
  14. const getTicketsLink = (stateIds: number[]) => {
  15. const states = stateIds
  16. .map((stateId) => `state.state_type_id: ${stateId}`)
  17. .join(' OR ')
  18. return replaceTags(`/search/ticket?search=(${states}) AND #{query}`, {
  19. query: props.ticketsLinkQuery,
  20. })
  21. }
  22. </script>
  23. <template>
  24. <CommonSectionMenu header-label="Tickets">
  25. <slot name="before-fields" />
  26. <CommonSectionMenuLink
  27. :icon="{
  28. name: 'mobile-check-circle-no',
  29. size: 'base',
  30. class: 'text-yellow',
  31. decorative: true,
  32. }"
  33. :information="counts[TicketState.Open]"
  34. :link="getTicketsLink([1, 2, 3, 4])"
  35. >
  36. {{ $t('open') }}
  37. </CommonSectionMenuLink>
  38. <CommonSectionMenuLink
  39. :icon="{
  40. name: 'mobile-check-circle-outline',
  41. size: 'base',
  42. class: 'text-green',
  43. decorative: true,
  44. }"
  45. :information="counts[TicketState.Closed]"
  46. :link="getTicketsLink([5])"
  47. >
  48. {{ $t('closed') }}
  49. </CommonSectionMenuLink>
  50. <CommonLink
  51. v-if="createLink && createLabel"
  52. class="flex min-h-[54px] items-center justify-center gap-2 text-blue"
  53. :link="createLink"
  54. >
  55. <CommonIcon name="mobile-add" size="tiny" decorative />
  56. {{ $t(createLabel) }}
  57. </CommonLink>
  58. </CommonSectionMenu>
  59. </template>