ObjectAttribute.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <!-- Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/ -->
  2. <script setup lang="ts">
  3. import { useSharedVisualConfig } from '#shared/composables/useSharedVisualConfig.ts'
  4. import type { ObjectAttribute } from '#shared/entities/object-attributes/types/store.ts'
  5. import type { ObjectLike } from '#shared/types/utils.ts'
  6. import { useDisplayObjectAttribute } from './useDisplayObjectAttributes.ts'
  7. import { isEmpty } from './utils.ts'
  8. import type { OutputMode } from './types.ts'
  9. interface Props {
  10. mode?: OutputMode
  11. object: ObjectLike
  12. attribute: ObjectAttribute
  13. }
  14. const props = withDefaults(defineProps<Props>(), {
  15. mode: 'view',
  16. })
  17. const { objectAttributes: objectAttributesConfig } = useSharedVisualConfig()
  18. const { field } = useDisplayObjectAttribute(props)
  19. </script>
  20. <template>
  21. <template v-if="field && !isEmpty(field.value)">
  22. <CommonLink
  23. v-if="field.link"
  24. :link="field.link"
  25. :class="objectAttributesConfig.classes.link"
  26. >
  27. <Component
  28. :is="field.component"
  29. :attribute="field.attribute"
  30. :value="field.value"
  31. :config="objectAttributesConfig"
  32. :mode="mode"
  33. />
  34. </CommonLink>
  35. <Component
  36. :is="field.component"
  37. v-else
  38. :attribute="field.attribute"
  39. :value="field.value"
  40. :config="objectAttributesConfig"
  41. :mode="mode"
  42. />
  43. </template>
  44. <template v-else>-</template>
  45. </template>