NotificationItem.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <!-- Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/ -->
  2. <script setup lang="ts">
  3. import ActivityMessage from '@shared/components/ActivityMessage/ActivityMessage.vue'
  4. import type { ActivityMessageMetaObject, Scalars } from '@shared/graphql/types'
  5. import type { AvatarUser } from '@shared/components/CommonUserAvatar'
  6. export interface Props {
  7. itemId: Scalars['ID']
  8. objectName: string
  9. typeName: string
  10. seen: boolean
  11. metaObject?: Maybe<ActivityMessageMetaObject>
  12. createdAt: string
  13. createdBy?: Maybe<AvatarUser>
  14. }
  15. defineProps<Props>()
  16. defineEmits<{
  17. (e: 'remove', id: Scalars['ID']): void
  18. (e: 'seen', id: Scalars['ID']): void
  19. }>()
  20. </script>
  21. <template>
  22. <div class="flex">
  23. <div class="flex items-center ltr:pr-2 rtl:pl-2">
  24. <CommonIcon
  25. name="mobile-delete"
  26. class="cursor-pointer text-red"
  27. size="tiny"
  28. @click="$emit('remove', itemId)"
  29. />
  30. </div>
  31. <div class="flex items-center ltr:pr-2 rtl:pl-2">
  32. <div
  33. role="status"
  34. class="h-3 w-3 rounded-full"
  35. :class="{ 'bg-blue': !seen }"
  36. :aria-label="seen ? $t('Notification read') : $t('Unread notification')"
  37. ></div>
  38. </div>
  39. <ActivityMessage
  40. :type-name="typeName"
  41. :object-name="objectName"
  42. :created-at="createdAt"
  43. :created-by="createdBy"
  44. :meta-object="metaObject"
  45. @seen="$emit('seen', itemId)"
  46. />
  47. </div>
  48. </template>