@anzusystems/common-admin 2.0.0-rc.8 → 2.0.0-rc.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/AnzuSystemsCommonAdmin.d.ts +9 -0
  2. package/dist/AnzuSystemsCommonAdmin.js.map +1 -1
  3. package/dist/common-admin.css +1 -1
  4. package/dist/common-admin.js +170 -169
  5. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.js.map +1 -1
  6. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue.d.ts +5 -1
  7. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue_vue_type_script_setup_true_lang.js +94 -67
  8. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  9. package/dist/domains/dam/assetDetail/components/AssetImage.js.map +1 -1
  10. package/dist/domains/dam/assetDetail/components/AssetImage.vue.d.ts +7 -0
  11. package/dist/domains/dam/assetDetail/components/AssetImage.vue_vue_type_script_setup_true_lang.js +27 -13
  12. package/dist/domains/dam/assetDetail/components/AssetImage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  13. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.js.map +1 -1
  14. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue.d.ts +7 -0
  15. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js +56 -28
  16. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js.map +1 -1
  17. package/dist/domains/dam/assetDetail/components/AssetMetadata.js.map +1 -1
  18. package/dist/domains/dam/assetDetail/components/AssetMetadata.vue_vue_type_script_setup_true_lang.js +107 -89
  19. package/dist/domains/dam/assetDetail/components/AssetMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  20. package/dist/domains/dam/assetDetail/composables/autoDeleteTimeLeft.d.ts +9 -0
  21. package/dist/domains/dam/assetDetail/composables/autoDeleteTimeLeft.js +18 -0
  22. package/dist/domains/dam/assetDetail/composables/autoDeleteTimeLeft.js.map +1 -0
  23. package/dist/domains/dam/assetDetail/store/assetDetailStore.d.ts +4 -2
  24. package/dist/domains/dam/assetSelect/components/AAssetListInner.vue.d.ts +4 -2
  25. package/dist/domains/dam/assetSelect/components/AAssetSelect.vue.d.ts +2 -1
  26. package/dist/domains/dam/assetSelect/components/AssetImagePreview.js.map +1 -1
  27. package/dist/domains/dam/assetSelect/components/AssetImagePreview.vue.d.ts +3 -0
  28. package/dist/domains/dam/assetSelect/components/AssetImagePreview.vue_vue_type_script_setup_true_lang.js +16 -5
  29. package/dist/domains/dam/assetSelect/components/AssetImagePreview.vue_vue_type_script_setup_true_lang.js.map +1 -1
  30. package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.js.map +1 -1
  31. package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.vue_vue_type_script_setup_true_lang.js +8 -3
  32. package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/domains/dam/assetSelect/components/AssetSelectTilesItem.js.map +1 -1
  34. package/dist/domains/dam/assetSelect/components/AssetSelectTilesItem.vue_vue_type_script_setup_true_lang.js +5 -3
  35. package/dist/domains/dam/assetSelect/components/AssetSelectTilesItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  36. package/dist/domains/dam/assetSelect/composables/assetSelectItemActions.d.ts +2 -0
  37. package/dist/domains/dam/assetSelect/composables/assetSelectItemActions.js +37 -31
  38. package/dist/domains/dam/assetSelect/composables/assetSelectItemActions.js.map +1 -1
  39. package/dist/domains/dam/assetSelect/composables/assetSelectListActions.d.ts +4 -2
  40. package/dist/domains/dam/assetSelect/store/assetSelectStore.d.ts +8 -4
  41. package/dist/domains/dam/composables/commonAdminCoreDamOptions.d.ts +3 -0
  42. package/dist/domains/dam/composables/commonAdminCoreDamOptions.js +3 -0
  43. package/dist/domains/dam/composables/commonAdminCoreDamOptions.js.map +1 -1
  44. package/dist/domains/dam/cropper/store/imageRoiStore.d.ts +2 -2
  45. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue.d.ts +2 -1
  46. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue.d.ts +2 -1
  47. package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.d.ts +2 -1
  48. package/dist/domains/dam/types/Asset.d.ts +3 -1
  49. package/dist/domains/dam/types/Asset.js.map +1 -1
  50. package/dist/domains/dam/types/AssetFile.d.ts +1 -1
  51. package/dist/domains/dam/types/AssetFile.js.map +1 -1
  52. package/dist/domains/dam/types/AssetLicence.d.ts +7 -0
  53. package/dist/domains/dam/user/api/assetLicenceApi.d.ts +2 -1
  54. package/dist/domains/dam/user/api/assetLicenceApi.js +4 -4
  55. package/dist/domains/dam/user/api/assetLicenceApi.js.map +1 -1
  56. package/dist/domains/dam/user/composables/cachedAssetLicences.d.ts +17 -0
  57. package/dist/domains/dam/user/composables/cachedAssetLicences.js +35 -0
  58. package/dist/domains/dam/user/composables/cachedAssetLicences.js.map +1 -0
  59. package/dist/lib.d.ts +3 -2
  60. package/dist/locales/cs/common/damImage.js +29 -0
  61. package/dist/locales/cs/common/damImage.js.map +1 -1
  62. package/dist/locales/cs.d.ts +3 -0
  63. package/dist/locales/en/common/damImage.js +29 -0
  64. package/dist/locales/en/common/damImage.js.map +1 -1
  65. package/dist/locales/en.d.ts +3 -0
  66. package/dist/locales/sk/common/damImage.js +29 -0
  67. package/dist/locales/sk/common/damImage.js.map +1 -1
  68. package/dist/locales/sk.d.ts +3 -0
  69. package/dist/plugins/i18n.d.ts +3 -0
  70. package/package.json +2 -2
@@ -1,11 +1,19 @@
1
- import { DamAssetType as e } from "../../types/Asset.js";
2
- import { useDamConfigStoreOf as t } from "../../config/store/damConfigStore.js";
3
- import { useDamConfigName as n } from "../../composables/damConfigName.js";
4
- import { DIMENSIONS_CONFIG as r, ICON_LOW as i, ICON_RSS as a, ICON_SLOTS as o, ICON_TTS as s } from "../utils/assetImageIconsConfig.js";
5
- import { Fragment as c, computed as l, createElementBlock as u, defineComponent as d, normalizeClass as f, openBlock as p, renderList as m, vShow as h, withDirectives as g } from "vue";
6
- import { useI18n as _ } from "vue-i18n";
1
+ import { dateTimeFriendly as e } from "../../../../shared/utils/datetime.js";
2
+ import { DamAssetType as t } from "../../types/Asset.js";
3
+ import { useDamConfigStoreOf as n } from "../../config/store/damConfigStore.js";
4
+ import { useDamConfigName as r } from "../../composables/damConfigName.js";
5
+ import { DIMENSIONS_CONFIG as i, ICON_LOW as a, ICON_RSS as o, ICON_SLOTS as s, ICON_TTS as c } from "../utils/assetImageIconsConfig.js";
6
+ import { useRemainingTime as l } from "../../../ui/datetime/composables/remainingTime.js";
7
+ import { useAutoDeleteTimeLeft as u } from "../composables/autoDeleteTimeLeft.js";
8
+ import { Fragment as d, computed as f, createBlock as p, createCommentVNode as m, createElementBlock as h, createTextVNode as g, defineComponent as _, normalizeClass as v, openBlock as y, renderList as b, toDisplayString as x, vShow as S, withCtx as C, withDirectives as w } from "vue";
9
+ import { useI18n as T } from "vue-i18n";
10
+ import { VChip as E } from "vuetify/components/VChip";
7
11
  // src/domains/dam/assetDetail/components/AssetImageMetaIcons.vue?vue&type=script&setup=true&lang.ts
8
- var v = ["src", "title"], y = /*@__PURE__*/ d({
12
+ var D = {
13
+ key: 0,
14
+ class: "asset-image__licence-badge",
15
+ "data-cy": "asset-licence-badge"
16
+ }, O = ["src", "title"], k = /*@__PURE__*/ _({
9
17
  __name: "AssetImageMetaIcons",
10
18
  props: {
11
19
  assetType: {},
@@ -18,40 +26,60 @@ var v = ["src", "title"], y = /*@__PURE__*/ d({
18
26
  type: Boolean,
19
27
  default: !1
20
28
  },
21
- configName: { default: void 0 }
29
+ configName: { default: void 0 },
30
+ autoDeleteAt: { default: null },
31
+ licenceBadge: { default: "" }
22
32
  },
23
- setup(d) {
24
- let y = d, b = t(n(y.configName)), { t: x } = _(), S = (t, n) => {
25
- if (y.assetFileProperties.width !== 0 && y.assetFileProperties.height !== 0) {
26
- if (y.assetFileProperties.width < 600 || y.assetFileProperties.height < 600) t.push(i), n.push(x("common.damImage.asset.metaIcons.low"));
27
- else if (y.assetType === e.Video) {
28
- for (let e of r) if (y.assetFileProperties.width === e.width && y.assetFileProperties.height === e.height) {
29
- t.push(e.svgSrc), n.push(x(e.titleT));
33
+ setup(_) {
34
+ let k = _, A = n(r(k.configName)), { t: j } = T(), { remainingTimeShort: M } = l(), { secondsLeft: N } = u(() => k.autoDeleteAt), P = f(() => !k.autoDeleteAt || N.value === null ? null : {
35
+ text: M(N.value),
36
+ title: j("common.damImage.asset.metaIcons.autoDeleteAt", { date: e(k.autoDeleteAt) })
37
+ }), F = (e, n) => {
38
+ if (k.assetFileProperties.width !== 0 && k.assetFileProperties.height !== 0) {
39
+ if (k.assetFileProperties.width < 600 || k.assetFileProperties.height < 600) e.push(a), n.push(j("common.damImage.asset.metaIcons.low"));
40
+ else if (k.assetType === t.Video) {
41
+ for (let t of i) if (k.assetFileProperties.width === t.width && k.assetFileProperties.height === t.height) {
42
+ e.push(t.svgSrc), n.push(j(t.titleT));
30
43
  break;
31
44
  }
32
45
  }
33
46
  }
34
- }, C = (e, t) => {
35
- for (let n of y.assetFileProperties.distributesInServices) {
36
- let r = b.damPrvConfig.distributionServices[n], i = r?.iconPath;
47
+ }, I = (e, t) => {
48
+ for (let n of k.assetFileProperties.distributesInServices) {
49
+ let r = A.damPrvConfig.distributionServices[n], i = r?.iconPath;
37
50
  r && i && i.length > 0 && !e.includes(i) && (e.push(i), t.push(r.title));
38
51
  }
39
- }, w = l(() => {
52
+ }, L = f(() => {
40
53
  let e = [], t = [];
41
- return y.assetFileProperties.slotNames.length > 1 && (e.push(o), t.push(x("common.damImage.asset.metaIcons.slots"))), y.assetFileProperties.fromRss && (e.push(a), t.push(x("common.damImage.asset.metaIcons.rss"))), y.showTts && y.assetFileProperties.ttsAudio && (e.push(s), t.push(x("common.damImage.asset.metaIcons.tts"))), S(e, t), C(e, t), {
54
+ return k.assetFileProperties.slotNames.length > 1 && (e.push(s), t.push(j("common.damImage.asset.metaIcons.slots"))), k.assetFileProperties.fromRss && (e.push(o), t.push(j("common.damImage.asset.metaIcons.rss"))), k.showTts && k.assetFileProperties.ttsAudio && (e.push(c), t.push(j("common.damImage.asset.metaIcons.tts"))), F(e, t), I(e, t), {
42
55
  icons: e,
43
56
  titles: t
44
57
  };
45
58
  });
46
- return (e, t) => g((p(), u("div", { class: f(["asset-image__meta-icons", { "asset-image__meta-icons-absolute": !d.disableAbsolute }]) }, [(p(!0), u(c, null, m(w.value.icons, (e, t) => (p(), u("img", {
47
- key: e,
48
- class: "img-svg",
49
- src: e,
50
- alt: "",
51
- title: w.value.titles[t] || ""
52
- }, null, 8, v))), 128))], 2)), [[h, w.value.icons.length > 0]]);
59
+ return (e, t) => w((y(), h("div", { class: v(["asset-image__meta-icons", { "asset-image__meta-icons-absolute": !_.disableAbsolute }]) }, [
60
+ _.licenceBadge ? (y(), h("span", D, x(_.licenceBadge), 1)) : m("", !0),
61
+ P.value ? (y(), p(E, {
62
+ key: 1,
63
+ size: "x-small",
64
+ variant: "flat",
65
+ color: "warning",
66
+ class: "ma-1 align-self-center",
67
+ title: P.value.title,
68
+ "data-cy": "asset-auto-delete-badge"
69
+ }, {
70
+ default: C(() => [g(x(P.value.text), 1)]),
71
+ _: 1
72
+ }, 8, ["title"])) : m("", !0),
73
+ (y(!0), h(d, null, b(L.value.icons, (e, t) => (y(), h("img", {
74
+ key: e,
75
+ class: "img-svg",
76
+ src: e,
77
+ alt: "",
78
+ title: L.value.titles[t] || ""
79
+ }, null, 8, O))), 128))
80
+ ], 2)), [[S, L.value.icons.length > 0 || P.value || _.licenceBadge]]);
53
81
  }
54
82
  });
55
- export { y as default };
83
+ export { k as default };
56
84
 
57
85
  //# sourceMappingURL=AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js","names":["_withDirectives","_openBlock","_createElementBlock","_normalizeClass","_Fragment","_renderList","_vShow","_hoisted_1","AssetImageMetaIcons_vue_vue_type_script_setup_true_lang_default","props","__props","damConfigStore","useDamConfigStoreOf","useDamConfigName","useI18n","checkDimensions","icons","ICON_LOW","titles","t","DamAssetType","dimension","DIMENSIONS_CONFIG","checkDistributions","serviceName","service","iconPath","data","computed","ICON_SLOTS","ICON_RSS","ICON_TTS","withDirectives","openBlock","createElementBlock","normalizeClass","Fragment","renderList","item","index","vShow"],"sources":["../../../../../src/domains/dam/assetDetail/components/AssetImageMetaIcons.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetFileProperties, DamAssetType, type DamAssetTypeType } from '@/domains/dam/types/Asset'\nimport {\n DIMENSIONS_CONFIG,\n ICON_LOW,\n ICON_RSS,\n ICON_SLOTS,\n ICON_TTS,\n LOW_DIMENSION,\n} from '@/domains/dam/assetDetail/utils/assetImageIconsConfig'\nimport { useDamConfigStoreOf } from '@/domains/dam/config/store/damConfigStore'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetTypeType\n assetFileProperties: AssetFileProperties\n disableAbsolute?: boolean\n /** Shows the synthesized audio (TTS) icon. Off by default because the backend reports it to every admin. */\n showTts?: boolean\n /** DAM configuration whose distribution services name the icons. Inherited when not given. */\n configName?: string\n }>(),\n {\n disableAbsolute: false,\n showTts: false,\n configName: undefined,\n }\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigStore = useDamConfigStoreOf(useDamConfigName(props.configName))\n\nconst { t } = useI18n()\n\nconst checkDimensions = (icons: string[], titles: string[]) => {\n if (props.assetFileProperties.width === 0 || props.assetFileProperties.height === 0) {\n return\n }\n if (props.assetFileProperties.width < LOW_DIMENSION || props.assetFileProperties.height < LOW_DIMENSION) {\n icons.push(ICON_LOW)\n titles.push(t('common.damImage.asset.metaIcons.low'))\n return\n }\n if (props.assetType !== DamAssetType.Video) return\n for (const dimension of DIMENSIONS_CONFIG) {\n if (props.assetFileProperties.width === dimension.width && props.assetFileProperties.height === dimension.height) {\n icons.push(dimension.svgSrc)\n titles.push(t(dimension.titleT))\n break\n }\n }\n}\n\nconst checkDistributions = (icons: string[], titles: string[]) => {\n for (const serviceName of props.assetFileProperties.distributesInServices) {\n const service = damConfigStore.damPrvConfig.distributionServices[serviceName]\n const iconPath = service?.iconPath\n if (service && iconPath && iconPath.length > 0 && !icons.includes(iconPath)) {\n icons.push(iconPath)\n titles.push(service.title)\n }\n }\n}\n\nconst data = computed(() => {\n const icons: string[] = []\n const titles: string[] = []\n\n if (props.assetFileProperties.slotNames.length > 1) {\n icons.push(ICON_SLOTS)\n titles.push(t('common.damImage.asset.metaIcons.slots'))\n }\n if (props.assetFileProperties.fromRss) {\n icons.push(ICON_RSS)\n titles.push(t('common.damImage.asset.metaIcons.rss'))\n }\n if (props.showTts && props.assetFileProperties.ttsAudio) {\n icons.push(ICON_TTS)\n titles.push(t('common.damImage.asset.metaIcons.tts'))\n }\n checkDimensions(icons, titles)\n checkDistributions(icons, titles)\n\n return { icons, titles }\n})\n</script>\n\n<template>\n <div\n v-show=\"data.icons.length > 0\"\n class=\"asset-image__meta-icons\"\n :class=\"{ 'asset-image__meta-icons-absolute': !disableAbsolute }\"\n >\n <img\n v-for=\"(item, index) in data.icons\"\n :key=\"item\"\n class=\"img-svg\"\n :src=\"item\"\n alt=\"\"\n :title=\"data.titles[index] || ''\"\n />\n </div>\n</template>\n\n<style lang=\"scss\">\n.asset-image__meta-icons-absolute {\n position: absolute;\n left: 6px;\n top: 163px;\n}\n\n.asset-image__meta-icons {\n display: flex;\n\n img.img-svg {\n height: 30px;\n padding: 2px;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAeA,IAAMS,IAAQC,GAiBRC,IAAiBC,EAAoBC,EAAiBJ,EAAM,UAAU,CAAC,GAEvE,EAAE,SAAMK,EAAQ,GAEhBC,KAAmB,GAAiB,MAAqB;GAC7D,IAAIN,EAAM,oBAAoB,UAAU,KAAKA,EAAM,oBAAoB,WAAW,GAGlF;QAAIA,EAAM,oBAAoB,QAAA,OAAyBA,EAAM,oBAAoB,SAAA,KAE/E,AADAO,EAAM,KAAKC,CAAQ,GACnBC,EAAO,KAAKC,EAAE,qCAAqC,CAAC;SAGtD,IAAIV,EAAM,cAAcW,EAAa,OACrC;UAAK,IAAMC,KAAaC,GACtB,IAAIb,EAAM,oBAAoB,UAAUY,EAAU,SAASZ,EAAM,oBAAoB,WAAWY,EAAU,QAAQ;MAEhH,AADAL,EAAM,KAAKK,EAAU,MAAM,GAC3BH,EAAO,KAAKC,EAAEE,EAAU,MAAM,CAAC;MAC/B;KACF;;GAPF;EASF,GAEME,KAAsB,GAAiB,MAAqB;GAChE,KAAK,IAAMC,KAAef,EAAM,oBAAoB,uBAAuB;IACzE,IAAMgB,IAAUd,EAAe,aAAa,qBAAqBa,IAC3DE,IAAWD,GAAS;IAC1B,AAAIA,KAAWC,KAAYA,EAAS,SAAS,KAAK,CAACV,EAAM,SAASU,CAAQ,MACxEV,EAAM,KAAKU,CAAQ,GACnBR,EAAO,KAAKO,EAAQ,KAAK;GAE7B;EACF,GAEME,IAAOC,QAAe;GAC1B,IAAMZ,IAAkB,CAAC,GACnBE,IAAmB,CAAC;GAiB1B,OAfIT,EAAM,oBAAoB,UAAU,SAAS,MAC/CO,EAAM,KAAKa,CAAU,GACrBX,EAAO,KAAKC,EAAE,uCAAuC,CAAC,IAEpDV,EAAM,oBAAoB,YAC5BO,EAAM,KAAKc,CAAQ,GACnBZ,EAAO,KAAKC,EAAE,qCAAqC,CAAC,IAElDV,EAAM,WAAWA,EAAM,oBAAoB,aAC7CO,EAAM,KAAKe,CAAQ,GACnBb,EAAO,KAAKC,EAAE,qCAAqC,CAAC,IAEtDJ,EAAgBC,GAAOE,CAAM,GAC7BK,EAAmBP,GAAOE,CAAM,GAEzB;IAAE;IAAO;GAAO;EACzB,CAAC;E,iBAIClB,GAAAC,EAAA,GAAAC,EAaM,OAAA,EAXJ,OAAKC,EAAA,CAAC,2BAAyB,EAAA,oCAAA,CACgBO,EAAA,gBAAe,CAAA,CAAA,E,KAE9DT,EAAA,EAAA,GAAAC,EAOEE,GAAA,MAAAC,EANwBsB,EAAA,MAAK,QAArB,GAAM,OADhB1B,EAAA,GAAAC,EAOE,OAAA;GALC,KAAKoC;GACN,OAAM;GACL,KAAKA;GACN,KAAI;GACH,OAAOX,EAAA,MAAK,OAAOY,MAAK;E,gCAVnB,CAAAjC,GAAAqB,EAAA,MAAK,MAAM,SAAM,CAAA,C"}
1
+ {"version":3,"file":"AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js","names":["_withDirectives","_openBlock","_createElementBlock","_normalizeClass","_toDisplayString","_createCommentVNode","_createBlock","_component_VChip","_withCtx","_createTextVNode","_Fragment","_renderList","_vShow","_hoisted_1","_hoisted_2","AssetImageMetaIcons_vue_vue_type_script_setup_true_lang_default","props","__props","damConfigStore","useDamConfigStoreOf","useDamConfigName","useI18n","useRemainingTime","useAutoDeleteTimeLeft","autoDeleteBadge","computed","secondsLeft","remainingTimeShort","t","dateTimeFriendly","checkDimensions","icons","ICON_LOW","titles","DamAssetType","dimension","DIMENSIONS_CONFIG","checkDistributions","serviceName","service","iconPath","data","ICON_SLOTS","ICON_RSS","ICON_TTS","withDirectives","openBlock","createElementBlock","normalizeClass","toDisplayString","createCommentVNode","createBlock","VChip","withCtx","createTextVNode","Fragment","renderList","item","index","vShow"],"sources":["../../../../../src/domains/dam/assetDetail/components/AssetImageMetaIcons.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetFileProperties, DamAssetType, type DamAssetTypeType } from '@/domains/dam/types/Asset'\nimport {\n DIMENSIONS_CONFIG,\n ICON_LOW,\n ICON_RSS,\n ICON_SLOTS,\n ICON_TTS,\n LOW_DIMENSION,\n} from '@/domains/dam/assetDetail/utils/assetImageIconsConfig'\nimport { useDamConfigStoreOf } from '@/domains/dam/config/store/damConfigStore'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { useRemainingTime } from '@/domains/ui/datetime/composables/remainingTime'\nimport { useAutoDeleteTimeLeft } from '@/domains/dam/assetDetail/composables/autoDeleteTimeLeft'\nimport type { DatetimeUTCNullable } from '@/shared/types/common'\nimport { dateTimeFriendly } from '@/shared/utils/datetime'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetTypeType\n assetFileProperties: AssetFileProperties\n disableAbsolute?: boolean\n /** Shows the synthesized audio (TTS) icon. Off by default because the backend reports it to every admin. */\n showTts?: boolean\n /** DAM configuration whose distribution services name the icons. Inherited when not given. */\n configName?: string\n /** When DAM deletes the asset: a badge shows the time left. Only admin-dam passes it, the other admins show none. */\n autoDeleteAt?: DatetimeUTCNullable\n /** Badge of the asset's licence, shown as given. Empty shows none. */\n licenceBadge?: string\n }>(),\n {\n disableAbsolute: false,\n showTts: false,\n configName: undefined,\n autoDeleteAt: null,\n licenceBadge: '',\n }\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigStore = useDamConfigStoreOf(useDamConfigName(props.configName))\n\nconst { t } = useI18n()\nconst { remainingTimeShort } = useRemainingTime()\n\nconst { secondsLeft } = useAutoDeleteTimeLeft(() => props.autoDeleteAt)\n\nconst autoDeleteBadge = computed(() => {\n if (!props.autoDeleteAt || secondsLeft.value === null) return null\n return {\n text: remainingTimeShort(secondsLeft.value),\n title: t('common.damImage.asset.metaIcons.autoDeleteAt', { date: dateTimeFriendly(props.autoDeleteAt) }),\n }\n})\n\nconst checkDimensions = (icons: string[], titles: string[]) => {\n if (props.assetFileProperties.width === 0 || props.assetFileProperties.height === 0) {\n return\n }\n if (props.assetFileProperties.width < LOW_DIMENSION || props.assetFileProperties.height < LOW_DIMENSION) {\n icons.push(ICON_LOW)\n titles.push(t('common.damImage.asset.metaIcons.low'))\n return\n }\n if (props.assetType !== DamAssetType.Video) return\n for (const dimension of DIMENSIONS_CONFIG) {\n if (props.assetFileProperties.width === dimension.width && props.assetFileProperties.height === dimension.height) {\n icons.push(dimension.svgSrc)\n titles.push(t(dimension.titleT))\n break\n }\n }\n}\n\nconst checkDistributions = (icons: string[], titles: string[]) => {\n for (const serviceName of props.assetFileProperties.distributesInServices) {\n const service = damConfigStore.damPrvConfig.distributionServices[serviceName]\n const iconPath = service?.iconPath\n if (service && iconPath && iconPath.length > 0 && !icons.includes(iconPath)) {\n icons.push(iconPath)\n titles.push(service.title)\n }\n }\n}\n\nconst data = computed(() => {\n const icons: string[] = []\n const titles: string[] = []\n\n if (props.assetFileProperties.slotNames.length > 1) {\n icons.push(ICON_SLOTS)\n titles.push(t('common.damImage.asset.metaIcons.slots'))\n }\n if (props.assetFileProperties.fromRss) {\n icons.push(ICON_RSS)\n titles.push(t('common.damImage.asset.metaIcons.rss'))\n }\n if (props.showTts && props.assetFileProperties.ttsAudio) {\n icons.push(ICON_TTS)\n titles.push(t('common.damImage.asset.metaIcons.tts'))\n }\n checkDimensions(icons, titles)\n checkDistributions(icons, titles)\n\n return { icons, titles }\n})\n</script>\n\n<template>\n <div\n v-show=\"data.icons.length > 0 || autoDeleteBadge || licenceBadge\"\n class=\"asset-image__meta-icons\"\n :class=\"{ 'asset-image__meta-icons-absolute': !disableAbsolute }\"\n >\n <span\n v-if=\"licenceBadge\"\n class=\"asset-image__licence-badge\"\n data-cy=\"asset-licence-badge\"\n >\n {{ licenceBadge }}\n </span>\n <VChip\n v-if=\"autoDeleteBadge\"\n size=\"x-small\"\n variant=\"flat\"\n color=\"warning\"\n class=\"ma-1 align-self-center\"\n :title=\"autoDeleteBadge.title\"\n data-cy=\"asset-auto-delete-badge\"\n >\n {{ autoDeleteBadge.text }}\n </VChip>\n <img\n v-for=\"(item, index) in data.icons\"\n :key=\"item\"\n class=\"img-svg\"\n :src=\"item\"\n alt=\"\"\n :title=\"data.titles[index] || ''\"\n />\n </div>\n</template>\n\n<style lang=\"scss\">\n.asset-image__meta-icons-absolute {\n position: absolute;\n left: 6px;\n top: 163px;\n}\n\n.asset-image__meta-icons {\n display: flex;\n\n img.img-svg {\n height: 30px;\n padding: 2px;\n }\n\n // As the SVG meta icons: a half-transparent black circle with white bold letters.\n .asset-image__licence-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n margin: 2px;\n border-radius: 50%;\n background-color: rgb(0 0 0 / 50%);\n color: #fff;\n font-size: 10px;\n font-weight: 700;\n line-height: 1;\n }\n}\n</style>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AssetMetadata.js","names":["_sfc_main","AssetMetadata_vue_vue_type_script_setup_true_lang_default","AssetMetadata_default"],"sources":["../../../../../src/domains/dam/assetDetail/components/AssetMetadata.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed, ref, watch } from 'vue'\nimport { DamAssetTypeDefault } from '@/domains/dam/types/Asset'\nimport { useAssetDetailStore } from '@/domains/dam/assetDetail/store/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetCustomMetadataForm from '@/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue'\nimport AssetFileInfoPanel from '@/domains/dam/assetDetail/components/AssetFileInfoPanel.vue'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/domains/dam/composables/uploadValidations'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport { useDamKeywordAssetTypeConfig } from '@/domains/dam/keyword/composables/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/domains/dam/author/composables/damAuthorConfig'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport ABooleanValue from '@/domains/ui/components/ABooleanValue.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { useAssetSuggestions } from '@/domains/dam/uploadQueue/composables/assetSuggestions'\nimport { useDamCachedAuthors } from '@/domains/dam/author/composables/cachedAuthors'\nimport { useDamCachedUsers } from '@/domains/dam/author/composables/cachedUsers'\n\nconst props = withDefaults(\n defineProps<{\n extSystem: IntegerId\n readonly?: boolean\n configName?: string\n showEditButton?: boolean\n }>(),\n {\n readonly: false,\n configName: undefined,\n showEditButton: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'editInDam'): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\nconst { t } = useI18n()\n\nconst panels = ref(['metadata', 'file'])\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, metadataAreTouched, mainFileSingleUse } = storeToRefs(assetDetailStore)\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetTypeDefault\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nconst { getAuthorConflicts } = useAssetSuggestions()\nconst { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors(damConfigName)\n\n// DAM author suggestions for names read from the file, as the queue row card offers them.\n// Taken from the asset itself, because nothing writes the store field.\n// None in a read-only side panel, or when the authors field is disabled. Such an asset may still carry old suggestions.\nconst authorConflicts = computed<DocId[]>(() =>\n props.readonly || !authorEnabled.value || !asset.value\n ? []\n : getAuthorConflicts(asset.value.metadata.authorSuggestions ?? {})\n)\n// The chips show names from the configuration's cache, as the row's do. Without it a chip spins forever.\nwatch(\n authorConflicts,\n (conflicts) => {\n if (conflicts.length === 0) return\n addToCachedAuthors(conflicts)\n fetchCachedAuthors()\n },\n { immediate: true }\n)\n\nconst onAnyMetadataChange = () => {\n metadataAreTouched.value = true\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nconst { mainFileSingleUseEnabled, showFileInfoEnabled, editAssetLabel } = useCommonAdminCoreDamOptions(damConfigName)\n\nconst { addToCachedUsers, fetchCachedUsers } = useDamCachedUsers(damConfigName)\n// The \"file\" panel chips show creator and modifier from the configuration's user cache.\n// A picker click fills it only for the clicked asset.\n// The \"edit asset\" detail of a widget or a queue row showed two chips spinning forever.\nwatch(\n [() => asset.value?.createdBy, () => asset.value?.modifiedBy],\n ([createdBy, modifiedBy]) => {\n if (!showFileInfoEnabled || (!createdBy && !modifiedBy)) return\n addToCachedUsers(createdBy, modifiedBy)\n fetchCachedUsers()\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VBtn\n v-if=\"showEditButton && asset\"\n size=\"small\"\n class=\"ma-2\"\n @click=\"emit('editInDam')\"\n >\n {{ editAssetLabel }}\n </VBtn>\n <VExpansionPanels\n v-if=\"asset\"\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.metadata')\"\n value=\"metadata\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataForm\n v-if=\"asset\"\n v-model=\"asset.metadata.customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n :readonly=\"readonly\"\n @any-change=\"onAnyMetadataChange\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"asset.keywords\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n data-cy=\"custom-field-keywords\"\n clearable\n multiple\n :disabled=\"readonly\"\n :required=\"keywordRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"asset.authors\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n clearable\n multiple\n :disabled=\"readonly\"\n :required=\"authorRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"mainFileSingleUseEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ARow\n v-if=\"readonly\"\n :title=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n >\n <ABooleanValue :value=\"mainFileSingleUse\" />\n </ARow>\n <VSwitch\n v-else\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VExpansionPanelText>\n </VExpansionPanel>\n <!-- The detail wraps text only between words, unlike its card (design 1.10, JS29). -->\n <AssetFileInfoPanel\n v-if=\"showFileInfoEnabled\"\n :asset=\"asset\"\n show-users\n style=\"overflow-wrap: normal\"\n />\n </VExpansionPanels>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AssetMetadata.js","names":["_sfc_main","AssetMetadata_vue_vue_type_script_setup_true_lang_default","AssetMetadata_default"],"sources":["../../../../../src/domains/dam/assetDetail/components/AssetMetadata.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed, ref, watch } from 'vue'\nimport { DamAssetTypeDefault } from '@/domains/dam/types/Asset'\nimport { useAssetDetailStore } from '@/domains/dam/assetDetail/store/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetCustomMetadataForm from '@/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue'\nimport AssetFileInfoPanel from '@/domains/dam/assetDetail/components/AssetFileInfoPanel.vue'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/domains/dam/composables/uploadValidations'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport { useDamKeywordAssetTypeConfig } from '@/domains/dam/keyword/composables/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/domains/dam/author/composables/damAuthorConfig'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport ABooleanValue from '@/domains/ui/components/ABooleanValue.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { useAssetSuggestions } from '@/domains/dam/uploadQueue/composables/assetSuggestions'\nimport { useDamCachedAuthors } from '@/domains/dam/author/composables/cachedAuthors'\nimport { useDamCachedUsers } from '@/domains/dam/author/composables/cachedUsers'\nimport { useAutoDeleteTimeLeft } from '@/domains/dam/assetDetail/composables/autoDeleteTimeLeft'\nimport { useRemainingTime } from '@/domains/ui/datetime/composables/remainingTime'\n\nconst props = withDefaults(\n defineProps<{\n extSystem: IntegerId\n readonly?: boolean\n configName?: string\n showEditButton?: boolean\n }>(),\n {\n readonly: false,\n configName: undefined,\n showEditButton: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'editInDam'): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\nconst { t } = useI18n()\n\nconst panels = ref(['metadata', 'file'])\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, metadataAreTouched, mainFileSingleUse } = storeToRefs(assetDetailStore)\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetTypeDefault\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nconst { getAuthorConflicts } = useAssetSuggestions()\nconst { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors(damConfigName)\n\n// DAM author suggestions for names read from the file, as the queue row card offers them.\n// Taken from the asset itself, because nothing writes the store field.\n// None in a read-only side panel, or when the authors field is disabled. Such an asset may still carry old suggestions.\nconst authorConflicts = computed<DocId[]>(() =>\n props.readonly || !authorEnabled.value || !asset.value\n ? []\n : getAuthorConflicts(asset.value.metadata.authorSuggestions ?? {})\n)\n// The chips show names from the configuration's cache, as the row's do. Without it a chip spins forever.\nwatch(\n authorConflicts,\n (conflicts) => {\n if (conflicts.length === 0) return\n addToCachedAuthors(conflicts)\n fetchCachedAuthors()\n },\n { immediate: true }\n)\n\nconst onAnyMetadataChange = () => {\n metadataAreTouched.value = true\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nconst { mainFileSingleUseEnabled, showFileInfoEnabled, showAutoDeleteEnabled, showLicenceEnabled, editAssetLabel } =\n useCommonAdminCoreDamOptions(damConfigName)\n\n// Only where the configuration turns it on: without it no clock runs.\nconst { secondsLeft: autoDeleteSecondsLeft } = useAutoDeleteTimeLeft(() =>\n showAutoDeleteEnabled ? asset.value?.autoDeleteAt : null\n)\nconst { remainingTimeLong } = useRemainingTime()\nconst autoDeleteIn = computed(() =>\n autoDeleteSecondsLeft.value === null ? null : remainingTimeLong(autoDeleteSecondsLeft.value)\n)\n\nconst { addToCachedUsers, fetchCachedUsers } = useDamCachedUsers(damConfigName)\n// The \"file\" panel chips show creator and modifier from the configuration's user cache.\n// A picker click fills it only for the clicked asset.\n// The \"edit asset\" detail of a widget or a queue row showed two chips spinning forever.\nwatch(\n [() => asset.value?.createdBy, () => asset.value?.modifiedBy],\n ([createdBy, modifiedBy]) => {\n if (!showFileInfoEnabled || (!createdBy && !modifiedBy)) return\n addToCachedUsers(createdBy, modifiedBy)\n fetchCachedUsers()\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VBtn\n v-if=\"showEditButton && asset\"\n size=\"small\"\n class=\"ma-2\"\n @click=\"emit('editInDam')\"\n >\n {{ editAssetLabel }}\n </VBtn>\n <VExpansionPanels\n v-if=\"asset\"\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.metadata')\"\n value=\"metadata\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataForm\n v-if=\"asset\"\n v-model=\"asset.metadata.customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n :readonly=\"readonly\"\n @any-change=\"onAnyMetadataChange\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"asset.keywords\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n data-cy=\"custom-field-keywords\"\n clearable\n multiple\n :disabled=\"readonly\"\n :required=\"keywordRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"asset.authors\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n clearable\n multiple\n :disabled=\"readonly\"\n :required=\"authorRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"mainFileSingleUseEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ARow\n v-if=\"readonly\"\n :title=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n >\n <ABooleanValue :value=\"mainFileSingleUse\" />\n </ARow>\n <VSwitch\n v-else\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n <VRow\n v-if=\"autoDeleteIn !== null\"\n density=\"compact\"\n class=\"my-2\"\n data-cy=\"asset-auto-delete\"\n >\n <VCol>\n <ARow :title=\"t('common.damImage.asset.model.autoDelete')\">\n {{ autoDeleteIn }}\n </ARow>\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VExpansionPanelText>\n </VExpansionPanel>\n <!-- The detail wraps text only between words, unlike its card (design 1.10, JS29). -->\n <AssetFileInfoPanel\n v-if=\"showFileInfoEnabled\"\n :asset=\"asset\"\n show-users\n :show-licence=\"showLicenceEnabled\"\n style=\"overflow-wrap: normal\"\n />\n </VExpansionPanels>\n</template>\n"],"mappings":""}
@@ -1,29 +1,31 @@
1
1
  import e from "../../../ui/components/ABooleanValue.js";
2
2
  import t from "../../../ui/components/ARow.js";
3
3
  import n from "../../../form/components/ASystemEntityScope.js";
4
- import { DamAssetTypeDefault as r } from "../../types/Asset.js";
5
- import { useCommonAdminCoreDamOptions as i } from "../../composables/commonAdminCoreDamOptions.js";
6
- import { useDamConfigName as a } from "../../composables/damConfigName.js";
7
- import { useAssetDetailStore as ee } from "../store/assetDetailStore.js";
8
- import { useDamCachedAuthors as o } from "../../author/composables/cachedAuthors.js";
9
- import { useDamCachedUsers as s } from "../../author/composables/cachedUsers.js";
10
- import { ADamAssetMetadataValidationScopeSymbol as c } from "../../composables/uploadValidations.js";
11
- import te from "./AssetCustomMetadataForm.js";
12
- import l from "./AssetFileInfoPanel.js";
13
- import { useAssetSuggestions as u } from "../../uploadQueue/composables/assetSuggestions.js";
14
- import d from "../../author/components/AuthorRemoteAutocompleteWithCached.js";
15
- import f from "../../keyword/components/KeywordRemoteAutocompleteWithCached.js";
16
- import { useDamKeywordAssetTypeConfig as p } from "../../keyword/composables/damKeywordConfig.js";
17
- import { useDamAuthorAssetTypeConfig as m } from "../../author/composables/damAuthorConfig.js";
18
- import { Fragment as h, computed as g, createBlock as _, createCommentVNode as v, createElementBlock as y, createTextVNode as b, createVNode as x, defineComponent as S, isRef as ne, openBlock as C, ref as re, toDisplayString as ie, unref as w, watch as T, withCtx as E } from "vue";
19
- import { useI18n as D } from "vue-i18n";
20
- import { VCol as O, VRow as k } from "vuetify/components/VGrid";
21
- import { VBtn as A } from "vuetify/components/VBtn";
22
- import { VSwitch as j } from "vuetify/components/VSwitch";
23
- import { storeToRefs as M } from "pinia";
24
- import { VExpansionPanel as N, VExpansionPanelText as P, VExpansionPanels as F } from "vuetify/components/VExpansionPanel";
4
+ import { DamAssetTypeDefault as ee } from "../../types/Asset.js";
5
+ import { useCommonAdminCoreDamOptions as r } from "../../composables/commonAdminCoreDamOptions.js";
6
+ import { useDamConfigName as i } from "../../composables/damConfigName.js";
7
+ import { useAssetDetailStore as te } from "../store/assetDetailStore.js";
8
+ import { useDamCachedAuthors as a } from "../../author/composables/cachedAuthors.js";
9
+ import { useDamCachedUsers as ne } from "../../author/composables/cachedUsers.js";
10
+ import { useRemainingTime as re } from "../../../ui/datetime/composables/remainingTime.js";
11
+ import { useAutoDeleteTimeLeft as ie } from "../composables/autoDeleteTimeLeft.js";
12
+ import { ADamAssetMetadataValidationScopeSymbol as o } from "../../composables/uploadValidations.js";
13
+ import s from "./AssetCustomMetadataForm.js";
14
+ import c from "./AssetFileInfoPanel.js";
15
+ import { useAssetSuggestions as l } from "../../uploadQueue/composables/assetSuggestions.js";
16
+ import u from "../../author/components/AuthorRemoteAutocompleteWithCached.js";
17
+ import d from "../../keyword/components/KeywordRemoteAutocompleteWithCached.js";
18
+ import { useDamKeywordAssetTypeConfig as f } from "../../keyword/composables/damKeywordConfig.js";
19
+ import { useDamAuthorAssetTypeConfig as p } from "../../author/composables/damAuthorConfig.js";
20
+ import { Fragment as ae, computed as m, createBlock as h, createCommentVNode as g, createElementBlock as oe, createTextVNode as _, createVNode as v, defineComponent as y, isRef as b, openBlock as x, ref as se, toDisplayString as S, unref as C, watch as w, withCtx as T } from "vue";
21
+ import { useI18n as E } from "vue-i18n";
22
+ import { VCol as D, VRow as O } from "vuetify/components/VGrid";
23
+ import { VBtn as k } from "vuetify/components/VBtn";
24
+ import { VSwitch as A } from "vuetify/components/VSwitch";
25
+ import { storeToRefs as j } from "pinia";
26
+ import { VExpansionPanel as M, VExpansionPanelText as N, VExpansionPanels as P } from "vuetify/components/VExpansionPanel";
25
27
  // src/domains/dam/assetDetail/components/AssetMetadata.vue?vue&type=script&setup=true&lang.ts
26
- var I = /*@__PURE__*/ S({
28
+ var F = /*@__PURE__*/ y({
27
29
  __name: "AssetMetadata",
28
30
  props: {
29
31
  extSystem: {},
@@ -38,68 +40,68 @@ var I = /*@__PURE__*/ S({
38
40
  }
39
41
  },
40
42
  emits: ["editInDam"],
41
- setup(S, { emit: I }) {
42
- let L = S, R = I, z = a(L.configName), { t: B } = D(), V = re(["metadata", "file"]), H = ee(), { asset: U, metadataAreTouched: W, mainFileSingleUse: G } = M(H), K = g(() => U.value?.attributes.assetType || r), { authorRequired: q, authorEnabled: J } = m(K.value, L.extSystem, z), { getAuthorConflicts: Y } = u(), { addToCachedAuthors: ae, fetchCachedAuthors: oe } = o(z), X = g(() => L.readonly || !J.value || !U.value ? [] : Y(U.value.metadata.authorSuggestions ?? {}));
43
- T(X, (e) => {
44
- e.length !== 0 && (ae(e), oe());
43
+ setup(y, { emit: F }) {
44
+ let I = y, L = F, R = i(I.configName), { t: z } = E(), B = se(["metadata", "file"]), V = te(), { asset: H, metadataAreTouched: U, mainFileSingleUse: W } = j(V), G = m(() => H.value?.attributes.assetType || ee), { authorRequired: K, authorEnabled: q } = p(G.value, I.extSystem, R), { getAuthorConflicts: ce } = l(), { addToCachedAuthors: le, fetchCachedAuthors: ue } = a(R), J = m(() => I.readonly || !q.value || !H.value ? [] : ce(H.value.metadata.authorSuggestions ?? {}));
45
+ w(J, (e) => {
46
+ e.length !== 0 && (le(e), ue());
45
47
  }, { immediate: !0 });
46
- let Z = () => {
47
- W.value = !0;
48
- }, { keywordRequired: se, keywordEnabled: Q } = p(K.value, L.extSystem, z), { mainFileSingleUseEnabled: ce, showFileInfoEnabled: $, editAssetLabel: le } = i(z), { addToCachedUsers: ue, fetchCachedUsers: de } = s(z);
49
- return T([() => U.value?.createdBy, () => U.value?.modifiedBy], ([e, t]) => {
50
- $ && (e || t) && (ue(e, t), de());
51
- }, { immediate: !0 }), (r, i) => (C(), y(h, null, [S.showEditButton && w(U) ? (C(), _(A, {
48
+ let Y = () => {
49
+ U.value = !0;
50
+ }, { keywordRequired: de, keywordEnabled: fe } = f(G.value, I.extSystem, R), { mainFileSingleUseEnabled: X, showFileInfoEnabled: Z, showAutoDeleteEnabled: pe, showLicenceEnabled: me, editAssetLabel: he } = r(R), { secondsLeft: Q } = ie(() => pe ? H.value?.autoDeleteAt : null), { remainingTimeLong: ge } = re(), $ = m(() => Q.value === null ? null : ge(Q.value)), { addToCachedUsers: _e, fetchCachedUsers: ve } = ne(R);
51
+ return w([() => H.value?.createdBy, () => H.value?.modifiedBy], ([e, t]) => {
52
+ Z && (e || t) && (_e(e, t), ve());
53
+ }, { immediate: !0 }), (ee, r) => (x(), oe(ae, null, [y.showEditButton && C(H) ? (x(), h(k, {
52
54
  key: 0,
53
55
  size: "small",
54
56
  class: "ma-2",
55
- onClick: i[0] ||= (e) => R("editInDam")
57
+ onClick: r[0] ||= (e) => L("editInDam")
56
58
  }, {
57
- default: E(() => [b(ie(w(le)), 1)]),
59
+ default: T(() => [_(S(C(he)), 1)]),
58
60
  _: 1
59
- })) : v("", !0), w(U) ? (C(), _(F, {
61
+ })) : g("", !0), C(H) ? (x(), h(P, {
60
62
  key: 1,
61
- modelValue: V.value,
62
- "onUpdate:modelValue": i[5] ||= (e) => V.value = e,
63
+ modelValue: B.value,
64
+ "onUpdate:modelValue": r[5] ||= (e) => B.value = e,
63
65
  multiple: "",
64
66
  class: "v-expansion-panels--compact"
65
67
  }, {
66
- default: E(() => [x(N, {
68
+ default: T(() => [v(M, {
67
69
  elevation: "0",
68
- title: w(B)("common.damImage.asset.detail.info.metadata"),
70
+ title: C(z)("common.damImage.asset.detail.info.metadata"),
69
71
  value: "metadata"
70
72
  }, {
71
- default: E(() => [x(P, null, {
72
- default: E(() => [w(U) ? (C(), _(te, {
73
+ default: T(() => [v(N, null, {
74
+ default: T(() => [C(H) ? (x(), h(s, {
73
75
  key: 0,
74
- modelValue: w(U).metadata.customData,
75
- "onUpdate:modelValue": i[4] ||= (e) => w(U).metadata.customData = e,
76
- "ext-system": S.extSystem,
77
- "asset-type": K.value,
78
- readonly: S.readonly,
79
- onAnyChange: Z
76
+ modelValue: C(H).metadata.customData,
77
+ "onUpdate:modelValue": r[4] ||= (e) => C(H).metadata.customData = e,
78
+ "ext-system": y.extSystem,
79
+ "asset-type": G.value,
80
+ readonly: y.readonly,
81
+ onAnyChange: Y
80
82
  }, {
81
- "after-pinned": E(() => [
82
- w(Q) ? (C(), _(k, {
83
+ "after-pinned": T(() => [
84
+ C(fe) ? (x(), h(O, {
83
85
  key: 0,
84
86
  density: "compact",
85
87
  class: "my-2"
86
88
  }, {
87
- default: E(() => [x(O, null, {
88
- default: E(() => [x(n, {
89
+ default: T(() => [v(D, null, {
90
+ default: T(() => [v(n, {
89
91
  subject: "keyword",
90
92
  system: "dam"
91
93
  }, {
92
- default: E(() => [x(f, {
93
- modelValue: w(U).keywords,
94
- "onUpdate:modelValue": [i[1] ||= (e) => w(U).keywords = e, Z],
95
- "ext-system": S.extSystem,
96
- label: w(B)("common.damImage.asset.model.keywords"),
94
+ default: T(() => [v(d, {
95
+ modelValue: C(H).keywords,
96
+ "onUpdate:modelValue": [r[1] ||= (e) => C(H).keywords = e, Y],
97
+ "ext-system": y.extSystem,
98
+ label: C(z)("common.damImage.asset.model.keywords"),
97
99
  "data-cy": "custom-field-keywords",
98
100
  clearable: "",
99
101
  multiple: "",
100
- disabled: S.readonly,
101
- required: w(se),
102
- "validation-scope": w(c)
102
+ disabled: y.readonly,
103
+ required: C(de),
104
+ "validation-scope": C(o)
103
105
  }, null, 8, [
104
106
  "modelValue",
105
107
  "ext-system",
@@ -113,29 +115,29 @@ var I = /*@__PURE__*/ S({
113
115
  _: 1
114
116
  })]),
115
117
  _: 1
116
- })) : v("", !0),
117
- w(J) ? (C(), _(k, {
118
+ })) : g("", !0),
119
+ C(q) ? (x(), h(O, {
118
120
  key: 1,
119
121
  density: "compact",
120
122
  class: "my-2"
121
123
  }, {
122
- default: E(() => [x(O, null, {
123
- default: E(() => [x(n, {
124
+ default: T(() => [v(D, null, {
125
+ default: T(() => [v(n, {
124
126
  subject: "author",
125
127
  system: "dam"
126
128
  }, {
127
- default: E(() => [x(d, {
128
- modelValue: w(U).authors,
129
- "onUpdate:modelValue": [i[2] ||= (e) => w(U).authors = e, Z],
130
- "ext-system": S.extSystem,
131
- label: w(B)("common.damImage.asset.model.authors"),
132
- "author-conflicts": X.value,
129
+ default: T(() => [v(u, {
130
+ modelValue: C(H).authors,
131
+ "onUpdate:modelValue": [r[2] ||= (e) => C(H).authors = e, Y],
132
+ "ext-system": y.extSystem,
133
+ label: C(z)("common.damImage.asset.model.authors"),
134
+ "author-conflicts": J.value,
133
135
  "data-cy": "custom-field-authors",
134
136
  clearable: "",
135
137
  multiple: "",
136
- disabled: S.readonly,
137
- required: w(q),
138
- "validation-scope": w(c)
138
+ disabled: y.readonly,
139
+ required: C(K),
140
+ "validation-scope": C(o)
139
141
  }, null, 8, [
140
142
  "modelValue",
141
143
  "ext-system",
@@ -150,29 +152,44 @@ var I = /*@__PURE__*/ S({
150
152
  _: 1
151
153
  })]),
152
154
  _: 1
153
- })) : v("", !0),
154
- w(ce) ? (C(), _(k, {
155
+ })) : g("", !0),
156
+ C(X) ? (x(), h(O, {
155
157
  key: 2,
156
158
  density: "compact",
157
159
  class: "my-2"
158
160
  }, {
159
- default: E(() => [x(O, null, {
160
- default: E(() => [S.readonly ? (C(), _(t, {
161
+ default: T(() => [v(D, null, {
162
+ default: T(() => [y.readonly ? (x(), h(t, {
161
163
  key: 0,
162
- title: w(B)("common.damImage.asset.model.mainFileSingleUse")
164
+ title: C(z)("common.damImage.asset.model.mainFileSingleUse")
163
165
  }, {
164
- default: E(() => [x(e, { value: w(G) }, null, 8, ["value"])]),
166
+ default: T(() => [v(e, { value: C(W) }, null, 8, ["value"])]),
165
167
  _: 1
166
- }, 8, ["title"])) : (C(), _(j, {
168
+ }, 8, ["title"])) : (x(), h(A, {
167
169
  key: 1,
168
- modelValue: w(G),
169
- "onUpdate:modelValue": i[3] ||= (e) => ne(G) ? G.value = e : null,
170
- label: w(B)("common.damImage.asset.model.mainFileSingleUse")
170
+ modelValue: C(W),
171
+ "onUpdate:modelValue": r[3] ||= (e) => b(W) ? W.value = e : null,
172
+ label: C(z)("common.damImage.asset.model.mainFileSingleUse")
171
173
  }, null, 8, ["modelValue", "label"]))]),
172
174
  _: 1
173
175
  })]),
174
176
  _: 1
175
- })) : v("", !0)
177
+ })) : g("", !0),
178
+ $.value === null ? g("", !0) : (x(), h(O, {
179
+ key: 3,
180
+ density: "compact",
181
+ class: "my-2",
182
+ "data-cy": "asset-auto-delete"
183
+ }, {
184
+ default: T(() => [v(D, null, {
185
+ default: T(() => [v(t, { title: C(z)("common.damImage.asset.model.autoDelete") }, {
186
+ default: T(() => [_(S($.value), 1)]),
187
+ _: 1
188
+ }, 8, ["title"])]),
189
+ _: 1
190
+ })]),
191
+ _: 1
192
+ }))
176
193
  ]),
177
194
  _: 1
178
195
  }, 8, [
@@ -180,20 +197,21 @@ var I = /*@__PURE__*/ S({
180
197
  "ext-system",
181
198
  "asset-type",
182
199
  "readonly"
183
- ])) : v("", !0)]),
200
+ ])) : g("", !0)]),
184
201
  _: 1
185
202
  })]),
186
203
  _: 1
187
- }, 8, ["title"]), w($) ? (C(), _(l, {
204
+ }, 8, ["title"]), C(Z) ? (x(), h(c, {
188
205
  key: 0,
189
- asset: w(U),
206
+ asset: C(H),
190
207
  "show-users": "",
208
+ "show-licence": C(me),
191
209
  style: { "overflow-wrap": "normal" }
192
- }, null, 8, ["asset"])) : v("", !0)]),
210
+ }, null, 8, ["asset", "show-licence"])) : g("", !0)]),
193
211
  _: 1
194
- }, 8, ["modelValue"])) : v("", !0)], 64));
212
+ }, 8, ["modelValue"])) : g("", !0)], 64));
195
213
  }
196
214
  });
197
- export { I as default };
215
+ export { F as default };
198
216
 
199
217
  //# sourceMappingURL=AssetMetadata.vue_vue_type_script_setup_true_lang.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssetMetadata.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_Fragment","_unref","_createBlock","_component_VBtn","_withCtx","_createTextVNode","_toDisplayString","_createCommentVNode","_component_VExpansionPanels","_createVNode","_component_VExpansionPanel","_component_VExpansionPanelText","AssetCustomMetadataForm","_component_VRow","_component_VCol","ASystemEntityScope","KeywordRemoteAutocompleteWithCached","AuthorRemoteAutocompleteWithCached","ARow","ABooleanValue","_component_VSwitch","_isRef","AssetFileInfoPanel","ABooleanValue_default","ARow_default","ASystemEntityScope_default","AssetCustomMetadataForm_default","AssetFileInfoPanel_default","AuthorRemoteAutocompleteWithCached_default","KeywordRemoteAutocompleteWithCached_default","AssetMetadata_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","damConfigName","useDamConfigName","useI18n","panels","ref","assetDetailStore","useAssetDetailStore","storeToRefs","assetType","computed","asset","DamAssetTypeDefault","useDamAuthorAssetTypeConfig","useAssetSuggestions","useDamCachedAuthors","authorConflicts","authorEnabled","getAuthorConflicts","conflicts","addToCachedAuthors","fetchCachedAuthors","onAnyMetadataChange","useDamKeywordAssetTypeConfig","useCommonAdminCoreDamOptions","useDamCachedUsers","watch","createdBy","modifiedBy","showFileInfoEnabled","addToCachedUsers","fetchCachedUsers","openBlock","createElementBlock","Fragment","unref","createBlock","VBtn","_cache","withCtx","createTextVNode","toDisplayString","editAssetLabel","createCommentVNode","VExpansionPanels","$event","createVNode","VExpansionPanel","t","VExpansionPanelText","keywordEnabled","VRow","VCol","keywordRequired","ADamAssetMetadataValidationScopeSymbol","authorRequired","mainFileSingleUseEnabled","mainFileSingleUse","VSwitch","isRef"],"sources":["../../../../../src/domains/dam/assetDetail/components/AssetMetadata.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed, ref, watch } from 'vue'\nimport { DamAssetTypeDefault } from '@/domains/dam/types/Asset'\nimport { useAssetDetailStore } from '@/domains/dam/assetDetail/store/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetCustomMetadataForm from '@/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue'\nimport AssetFileInfoPanel from '@/domains/dam/assetDetail/components/AssetFileInfoPanel.vue'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/domains/dam/composables/uploadValidations'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport { useDamKeywordAssetTypeConfig } from '@/domains/dam/keyword/composables/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/domains/dam/author/composables/damAuthorConfig'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport ABooleanValue from '@/domains/ui/components/ABooleanValue.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { useAssetSuggestions } from '@/domains/dam/uploadQueue/composables/assetSuggestions'\nimport { useDamCachedAuthors } from '@/domains/dam/author/composables/cachedAuthors'\nimport { useDamCachedUsers } from '@/domains/dam/author/composables/cachedUsers'\n\nconst props = withDefaults(\n defineProps<{\n extSystem: IntegerId\n readonly?: boolean\n configName?: string\n showEditButton?: boolean\n }>(),\n {\n readonly: false,\n configName: undefined,\n showEditButton: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'editInDam'): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\nconst { t } = useI18n()\n\nconst panels = ref(['metadata', 'file'])\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, metadataAreTouched, mainFileSingleUse } = storeToRefs(assetDetailStore)\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetTypeDefault\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nconst { getAuthorConflicts } = useAssetSuggestions()\nconst { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors(damConfigName)\n\n// DAM author suggestions for names read from the file, as the queue row card offers them.\n// Taken from the asset itself, because nothing writes the store field.\n// None in a read-only side panel, or when the authors field is disabled. Such an asset may still carry old suggestions.\nconst authorConflicts = computed<DocId[]>(() =>\n props.readonly || !authorEnabled.value || !asset.value\n ? []\n : getAuthorConflicts(asset.value.metadata.authorSuggestions ?? {})\n)\n// The chips show names from the configuration's cache, as the row's do. Without it a chip spins forever.\nwatch(\n authorConflicts,\n (conflicts) => {\n if (conflicts.length === 0) return\n addToCachedAuthors(conflicts)\n fetchCachedAuthors()\n },\n { immediate: true }\n)\n\nconst onAnyMetadataChange = () => {\n metadataAreTouched.value = true\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nconst { mainFileSingleUseEnabled, showFileInfoEnabled, editAssetLabel } = useCommonAdminCoreDamOptions(damConfigName)\n\nconst { addToCachedUsers, fetchCachedUsers } = useDamCachedUsers(damConfigName)\n// The \"file\" panel chips show creator and modifier from the configuration's user cache.\n// A picker click fills it only for the clicked asset.\n// The \"edit asset\" detail of a widget or a queue row showed two chips spinning forever.\nwatch(\n [() => asset.value?.createdBy, () => asset.value?.modifiedBy],\n ([createdBy, modifiedBy]) => {\n if (!showFileInfoEnabled || (!createdBy && !modifiedBy)) return\n addToCachedUsers(createdBy, modifiedBy)\n fetchCachedUsers()\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VBtn\n v-if=\"showEditButton && asset\"\n size=\"small\"\n class=\"ma-2\"\n @click=\"emit('editInDam')\"\n >\n {{ editAssetLabel }}\n </VBtn>\n <VExpansionPanels\n v-if=\"asset\"\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.metadata')\"\n value=\"metadata\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataForm\n v-if=\"asset\"\n v-model=\"asset.metadata.customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n :readonly=\"readonly\"\n @any-change=\"onAnyMetadataChange\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"asset.keywords\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n data-cy=\"custom-field-keywords\"\n clearable\n multiple\n :disabled=\"readonly\"\n :required=\"keywordRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"asset.authors\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n clearable\n multiple\n :disabled=\"readonly\"\n :required=\"authorRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"mainFileSingleUseEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ARow\n v-if=\"readonly\"\n :title=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n >\n <ABooleanValue :value=\"mainFileSingleUse\" />\n </ARow>\n <VSwitch\n v-else\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VExpansionPanelText>\n </VExpansionPanel>\n <!-- The detail wraps text only between words, unlike its card (design 1.10, JS29). -->\n <AssetFileInfoPanel\n v-if=\"showFileInfoEnabled\"\n :asset=\"asset\"\n show-users\n style=\"overflow-wrap: normal\"\n />\n </VExpansionPanels>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"AssetMetadata.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_Fragment","_unref","_createBlock","_component_VBtn","_withCtx","_createTextVNode","_toDisplayString","_createCommentVNode","_component_VExpansionPanels","_createVNode","_component_VExpansionPanel","_component_VExpansionPanelText","AssetCustomMetadataForm","_component_VRow","_component_VCol","ASystemEntityScope","KeywordRemoteAutocompleteWithCached","AuthorRemoteAutocompleteWithCached","ARow","ABooleanValue","_component_VSwitch","_isRef","AssetFileInfoPanel","ABooleanValue_default","ARow_default","ASystemEntityScope_default","AssetCustomMetadataForm_default","AssetFileInfoPanel_default","AuthorRemoteAutocompleteWithCached_default","KeywordRemoteAutocompleteWithCached_default","AssetMetadata_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","damConfigName","useDamConfigName","useI18n","panels","ref","assetDetailStore","useAssetDetailStore","storeToRefs","assetType","computed","asset","DamAssetTypeDefault","useDamAuthorAssetTypeConfig","useAssetSuggestions","useDamCachedAuthors","authorConflicts","authorEnabled","getAuthorConflicts","conflicts","addToCachedAuthors","fetchCachedAuthors","onAnyMetadataChange","useDamKeywordAssetTypeConfig","useCommonAdminCoreDamOptions","autoDeleteSecondsLeft","useAutoDeleteTimeLeft","showAutoDeleteEnabled","useRemainingTime","autoDeleteIn","remainingTimeLong","useDamCachedUsers","watch","createdBy","modifiedBy","showFileInfoEnabled","addToCachedUsers","fetchCachedUsers","openBlock","createElementBlock","Fragment","unref","createBlock","VBtn","_cache","withCtx","createTextVNode","toDisplayString","editAssetLabel","createCommentVNode","VExpansionPanels","$event","createVNode","VExpansionPanel","t","VExpansionPanelText","keywordEnabled","VRow","VCol","keywordRequired","ADamAssetMetadataValidationScopeSymbol","authorRequired","mainFileSingleUseEnabled","mainFileSingleUse","VSwitch","isRef","showLicenceEnabled"],"sources":["../../../../../src/domains/dam/assetDetail/components/AssetMetadata.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed, ref, watch } from 'vue'\nimport { DamAssetTypeDefault } from '@/domains/dam/types/Asset'\nimport { useAssetDetailStore } from '@/domains/dam/assetDetail/store/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetCustomMetadataForm from '@/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue'\nimport AssetFileInfoPanel from '@/domains/dam/assetDetail/components/AssetFileInfoPanel.vue'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/domains/dam/composables/uploadValidations'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport { useDamKeywordAssetTypeConfig } from '@/domains/dam/keyword/composables/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/domains/dam/author/composables/damAuthorConfig'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport ABooleanValue from '@/domains/ui/components/ABooleanValue.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { useAssetSuggestions } from '@/domains/dam/uploadQueue/composables/assetSuggestions'\nimport { useDamCachedAuthors } from '@/domains/dam/author/composables/cachedAuthors'\nimport { useDamCachedUsers } from '@/domains/dam/author/composables/cachedUsers'\nimport { useAutoDeleteTimeLeft } from '@/domains/dam/assetDetail/composables/autoDeleteTimeLeft'\nimport { useRemainingTime } from '@/domains/ui/datetime/composables/remainingTime'\n\nconst props = withDefaults(\n defineProps<{\n extSystem: IntegerId\n readonly?: boolean\n configName?: string\n showEditButton?: boolean\n }>(),\n {\n readonly: false,\n configName: undefined,\n showEditButton: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'editInDam'): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\nconst { t } = useI18n()\n\nconst panels = ref(['metadata', 'file'])\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, metadataAreTouched, mainFileSingleUse } = storeToRefs(assetDetailStore)\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetTypeDefault\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nconst { getAuthorConflicts } = useAssetSuggestions()\nconst { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors(damConfigName)\n\n// DAM author suggestions for names read from the file, as the queue row card offers them.\n// Taken from the asset itself, because nothing writes the store field.\n// None in a read-only side panel, or when the authors field is disabled. Such an asset may still carry old suggestions.\nconst authorConflicts = computed<DocId[]>(() =>\n props.readonly || !authorEnabled.value || !asset.value\n ? []\n : getAuthorConflicts(asset.value.metadata.authorSuggestions ?? {})\n)\n// The chips show names from the configuration's cache, as the row's do. Without it a chip spins forever.\nwatch(\n authorConflicts,\n (conflicts) => {\n if (conflicts.length === 0) return\n addToCachedAuthors(conflicts)\n fetchCachedAuthors()\n },\n { immediate: true }\n)\n\nconst onAnyMetadataChange = () => {\n metadataAreTouched.value = true\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nconst { mainFileSingleUseEnabled, showFileInfoEnabled, showAutoDeleteEnabled, showLicenceEnabled, editAssetLabel } =\n useCommonAdminCoreDamOptions(damConfigName)\n\n// Only where the configuration turns it on: without it no clock runs.\nconst { secondsLeft: autoDeleteSecondsLeft } = useAutoDeleteTimeLeft(() =>\n showAutoDeleteEnabled ? asset.value?.autoDeleteAt : null\n)\nconst { remainingTimeLong } = useRemainingTime()\nconst autoDeleteIn = computed(() =>\n autoDeleteSecondsLeft.value === null ? null : remainingTimeLong(autoDeleteSecondsLeft.value)\n)\n\nconst { addToCachedUsers, fetchCachedUsers } = useDamCachedUsers(damConfigName)\n// The \"file\" panel chips show creator and modifier from the configuration's user cache.\n// A picker click fills it only for the clicked asset.\n// The \"edit asset\" detail of a widget or a queue row showed two chips spinning forever.\nwatch(\n [() => asset.value?.createdBy, () => asset.value?.modifiedBy],\n ([createdBy, modifiedBy]) => {\n if (!showFileInfoEnabled || (!createdBy && !modifiedBy)) return\n addToCachedUsers(createdBy, modifiedBy)\n fetchCachedUsers()\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VBtn\n v-if=\"showEditButton && asset\"\n size=\"small\"\n class=\"ma-2\"\n @click=\"emit('editInDam')\"\n >\n {{ editAssetLabel }}\n </VBtn>\n <VExpansionPanels\n v-if=\"asset\"\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.metadata')\"\n value=\"metadata\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataForm\n v-if=\"asset\"\n v-model=\"asset.metadata.customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n :readonly=\"readonly\"\n @any-change=\"onAnyMetadataChange\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"asset.keywords\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n data-cy=\"custom-field-keywords\"\n clearable\n multiple\n :disabled=\"readonly\"\n :required=\"keywordRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"asset.authors\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n clearable\n multiple\n :disabled=\"readonly\"\n :required=\"authorRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"mainFileSingleUseEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ARow\n v-if=\"readonly\"\n :title=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n >\n <ABooleanValue :value=\"mainFileSingleUse\" />\n </ARow>\n <VSwitch\n v-else\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n <VRow\n v-if=\"autoDeleteIn !== null\"\n density=\"compact\"\n class=\"my-2\"\n data-cy=\"asset-auto-delete\"\n >\n <VCol>\n <ARow :title=\"t('common.damImage.asset.model.autoDelete')\">\n {{ autoDeleteIn }}\n </ARow>\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VExpansionPanelText>\n </VExpansionPanel>\n <!-- The detail wraps text only between words, unlike its card (design 1.10, JS29). -->\n <AssetFileInfoPanel\n v-if=\"showFileInfoEnabled\"\n :asset=\"asset\"\n show-users\n :show-licence=\"showLicenceEnabled\"\n style=\"overflow-wrap: normal\"\n />\n </VExpansionPanels>\n</template>\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { DatetimeUTCNullable } from '../../../../shared/types/common';
2
+ /**
3
+ * Seconds left until DAM deletes the asset (`autoDeleteAt`), never below zero; `null` when it is not deleted.
4
+ * The time moves on while it is shown: a clock ticks every minute, and only while there is a date.
5
+ * Call it in component setup, the clock stops with the component.
6
+ */
7
+ export declare function useAutoDeleteTimeLeft(autoDeleteAt: () => DatetimeUTCNullable | undefined): {
8
+ secondsLeft: import('vue').ComputedRef<number | null>;
9
+ };