@anzusystems/common-admin 2.0.0-rc.4 → 2.0.0-rc.6

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 (680) hide show
  1. package/README.md +1 -1
  2. package/dist/AnzuSystemsCommonAdmin.d.ts +42 -32
  3. package/dist/AnzuSystemsCommonAdmin.js.map +1 -1
  4. package/dist/common-admin.css +1 -1
  5. package/dist/common-admin.js +282 -282
  6. package/dist/domains/anzuUser/api/anzuUserApi.d.ts +9 -12
  7. package/dist/domains/anzuUser/api/anzuUserApi.js.map +1 -1
  8. package/dist/domains/anzuUser/components/AAnzuUserDatatable.js.map +1 -1
  9. package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue.d.ts +38 -44
  10. package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  11. package/dist/domains/anzuUser/components/AAnzuUserFilter.js.map +1 -1
  12. package/dist/domains/anzuUser/components/AAnzuUserFilter.vue.d.ts +12 -13
  13. package/dist/domains/anzuUser/components/AAnzuUserFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  14. package/dist/domains/anzuUser/components/AAnzuUserForm.js.map +1 -1
  15. package/dist/domains/anzuUser/components/AAnzuUserForm.vue.d.ts +18 -20
  16. package/dist/domains/anzuUser/components/AAnzuUserForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  17. package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.js.map +1 -1
  18. package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  19. package/dist/domains/anzuUser/components/AUserBulkActionDialog.js.map +1 -1
  20. package/dist/domains/anzuUser/components/AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  21. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.js.map +1 -1
  22. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue.d.ts +2 -3
  23. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  24. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.js.map +1 -1
  25. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue.d.ts +9 -15
  26. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  27. package/dist/domains/anzuUser/components/AUserEnabledSwitch.js.map +1 -1
  28. package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue.d.ts +8 -7
  29. package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  30. package/dist/domains/anzuUser/components/AUserManageButton.js.map +1 -1
  31. package/dist/domains/anzuUser/components/AUserManageButton.vue.d.ts +0 -1
  32. package/dist/domains/anzuUser/components/AUserManageButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/domains/anzuUser/components/AUserMetadataForm.js.map +1 -1
  34. package/dist/domains/anzuUser/components/AUserMetadataForm.vue.d.ts +8 -9
  35. package/dist/domains/anzuUser/components/AUserMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  36. package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.js.map +1 -1
  37. package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  38. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.js.map +1 -1
  39. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.vue.d.ts +1 -2
  40. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  41. package/dist/domains/anzuUser/components/AUserSystemOverview.js.map +1 -1
  42. package/dist/domains/anzuUser/components/AUserSystemOverview.vue_vue_type_script_setup_true_lang.js.map +1 -1
  43. package/dist/domains/anzuUser/components/AUserSystemPanel.js.map +1 -1
  44. package/dist/domains/anzuUser/components/AUserSystemPanel.vue.d.ts +2 -2
  45. package/dist/domains/anzuUser/components/AUserSystemPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  46. package/dist/domains/anzuUser/components/AUserSystemStatusChip.js.map +1 -1
  47. package/dist/domains/anzuUser/components/AUserSystemStatusChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/domains/anzuUser/components/AUserTabsShell.js.map +1 -1
  49. package/dist/domains/anzuUser/components/AUserTabsShell.vue.d.ts +17 -22
  50. package/dist/domains/anzuUser/components/AUserTabsShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  51. package/dist/domains/anzuUser/composables/anzuUserActions.d.ts +5 -9
  52. package/dist/domains/anzuUser/composables/anzuUserActions.js.map +1 -1
  53. package/dist/domains/anzuUser/composables/anzuUserValidations.d.ts +4 -6
  54. package/dist/domains/anzuUser/composables/anzuUserValidations.js.map +1 -1
  55. package/dist/domains/anzuUser/composables/cachedAnzuUsers.d.ts +3 -3
  56. package/dist/domains/anzuUser/composables/cachedAnzuUsers.js.map +1 -1
  57. package/dist/domains/anzuUser/composables/userCrossSystemSearch.d.ts +2 -4
  58. package/dist/domains/anzuUser/composables/userCrossSystemSearch.js.map +1 -1
  59. package/dist/domains/anzuUser/composables/userCrossSystemWrites.d.ts +5 -11
  60. package/dist/domains/anzuUser/composables/userCrossSystemWrites.js.map +1 -1
  61. package/dist/domains/anzuUser/composables/userSystemDescriptor.d.ts +33 -57
  62. package/dist/domains/anzuUser/composables/userSystemDescriptor.js.map +1 -1
  63. package/dist/domains/anzuUser/composables/userSystemProbe.d.ts +7 -27
  64. package/dist/domains/anzuUser/composables/userSystemProbe.js.map +1 -1
  65. package/dist/domains/anzuUser/filter/anzuUserFilter.d.ts +6 -16
  66. package/dist/domains/anzuUser/filter/anzuUserFilter.js.map +1 -1
  67. package/dist/domains/anzuUser/store/anzuUserStore.d.ts +1 -5
  68. package/dist/domains/anzuUser/store/anzuUserStore.js.map +1 -1
  69. package/dist/domains/anzuUser/store/userCrossSystemStore.d.ts +3 -14
  70. package/dist/domains/anzuUser/store/userCrossSystemStore.js.map +1 -1
  71. package/dist/domains/anzuUser/utils/userMetadataDiff.d.ts +7 -19
  72. package/dist/domains/anzuUser/utils/userMetadataDiff.js.map +1 -1
  73. package/dist/domains/anzuUser/utils/userSystemState.d.ts +12 -30
  74. package/dist/domains/anzuUser/utils/userSystemState.js.map +1 -1
  75. package/dist/domains/anzuUser/utils/userTabs.d.ts +1 -3
  76. package/dist/domains/anzuUser/utils/userTabs.js.map +1 -1
  77. package/dist/domains/api/composables/defineApiClient.d.ts +4 -8
  78. package/dist/domains/api/composables/defineApiClient.js.map +1 -1
  79. package/dist/domains/api/composables/request.d.ts +18 -48
  80. package/dist/domains/api/composables/request.js.map +1 -1
  81. package/dist/domains/api/composables/useApiFetchByIds.d.ts +7 -21
  82. package/dist/domains/api/composables/useApiFetchByIds.js.map +1 -1
  83. package/dist/domains/api/composables/useApiFetchItems.d.ts +18 -57
  84. package/dist/domains/api/composables/useApiFetchItems.js.map +1 -1
  85. package/dist/domains/api/composables/useApiFetchList.d.ts +7 -23
  86. package/dist/domains/api/composables/useApiFetchList.js.map +1 -1
  87. package/dist/domains/api/composables/useApiFetchListBatch.d.ts +5 -22
  88. package/dist/domains/api/composables/useApiFetchListBatch.js.map +1 -1
  89. package/dist/domains/api/composables/useApiQueryBuilder.js.map +1 -1
  90. package/dist/domains/api/composables/useApiRequest.d.ts +16 -39
  91. package/dist/domains/api/composables/useApiRequest.js.map +1 -1
  92. package/dist/domains/api/utils/apiErrors.d.ts +28 -55
  93. package/dist/domains/api/utils/apiErrors.js.map +1 -1
  94. package/dist/domains/api/utils/listBody.d.ts +22 -43
  95. package/dist/domains/api/utils/listBody.js.map +1 -1
  96. package/dist/domains/auth/components/Acl.js.map +1 -1
  97. package/dist/domains/auth/components/Acl.vue_vue_type_script_setup_true_lang.js.map +1 -1
  98. package/dist/domains/auth/composables/aclAllowed.d.ts +2 -3
  99. package/dist/domains/auth/composables/aclAllowed.js.map +1 -1
  100. package/dist/domains/auth/composables/defineAuth.js.map +1 -1
  101. package/dist/domains/auth/composables/refreshSession.d.ts +10 -13
  102. package/dist/domains/auth/composables/refreshSession.js.map +1 -1
  103. package/dist/domains/cached/components/ACachedChip.js.map +1 -1
  104. package/dist/domains/cached/components/ACachedChip.vue.d.ts +13 -11
  105. package/dist/domains/cached/components/ACachedChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  106. package/dist/domains/cached/components/ACachedUserChip.js +1 -1
  107. package/dist/domains/cached/components/ACachedUserChip.js.map +1 -1
  108. package/dist/domains/cached/components/ACachedUserChip.vue.d.ts +3 -3
  109. package/dist/domains/cached/components/ACachedUserChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  110. package/dist/domains/cached/composables/createUserAndTimeTrackingFields.d.ts +9 -9
  111. package/dist/domains/cached/composables/createUserAndTimeTrackingFields.js.map +1 -1
  112. package/dist/domains/cached/composables/defineCached.d.ts +13 -11
  113. package/dist/domains/cached/composables/defineCached.js.map +1 -1
  114. package/dist/domains/cached/composables/useCachedItem.d.ts +7 -8
  115. package/dist/domains/cached/composables/useCachedItem.js.map +1 -1
  116. package/dist/domains/collab/components/ACollabLockedByUser.js.map +1 -1
  117. package/dist/domains/collab/components/ACollabLockedByUser.vue_vue_type_script_setup_true_lang.js.map +1 -1
  118. package/dist/domains/collab/composables/collabAnyDataChange.js.map +1 -1
  119. package/dist/domains/collab/composables/collabField.d.ts +5 -3
  120. package/dist/domains/collab/composables/collabField.js.map +1 -1
  121. package/dist/domains/collab/composables/collabInit.js +58 -54
  122. package/dist/domains/collab/composables/collabInit.js.map +1 -1
  123. package/dist/domains/collab/composables/collabRecovery.d.ts +49 -0
  124. package/dist/domains/collab/composables/collabRecovery.js +99 -0
  125. package/dist/domains/collab/composables/collabRecovery.js.map +1 -0
  126. package/dist/domains/collab/composables/collabRoom.js +106 -106
  127. package/dist/domains/collab/composables/collabRoom.js.map +1 -1
  128. package/dist/domains/collab/composables/collabState.d.ts +11 -4
  129. package/dist/domains/collab/composables/collabState.js +34 -25
  130. package/dist/domains/collab/composables/collabState.js.map +1 -1
  131. package/dist/domains/collab/composables/commonAdminCollabOptions.d.ts +4 -2
  132. package/dist/domains/collab/types/Collab.d.ts +31 -5
  133. package/dist/domains/collab/types/Collab.js +23 -11
  134. package/dist/domains/collab/types/Collab.js.map +1 -1
  135. package/dist/domains/customDataForm/components/ACustomDataForm.js.map +1 -1
  136. package/dist/domains/customDataForm/components/ACustomDataForm.vue.d.ts +7 -5
  137. package/dist/domains/customDataForm/components/ACustomDataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  138. package/dist/domains/customDataForm/components/ACustomDataFormElement.js.map +1 -1
  139. package/dist/domains/customDataForm/components/ACustomDataFormElement.vue_vue_type_script_setup_true_lang.js.map +1 -1
  140. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.js.map +1 -1
  141. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.vue.d.ts +5 -3
  142. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  143. package/dist/domains/customDataForm/composables/useCustomDataForm.js.map +1 -1
  144. package/dist/domains/customDataForm/types/CustomDataForm.d.ts +4 -1
  145. package/dist/domains/dam/api/damAssetApi.d.ts +7 -7
  146. package/dist/domains/dam/api/damAssetApi.js.map +1 -1
  147. package/dist/domains/dam/api/damAssetLicenceApi.d.ts +1 -1
  148. package/dist/domains/dam/api/damAssetLicenceApi.js.map +1 -1
  149. package/dist/domains/dam/api/damConstants.js.map +1 -1
  150. package/dist/domains/dam/api/damEndPoints.js.map +1 -1
  151. package/dist/domains/dam/api/damImageApi.js.map +1 -1
  152. package/dist/domains/dam/api/uploadApi.js.map +1 -1
  153. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.js.map +1 -1
  154. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue.d.ts +7 -5
  155. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  156. package/dist/domains/dam/assetDetail/components/AssetDetailDialog.js.map +1 -1
  157. package/dist/domains/dam/assetDetail/components/AssetDetailDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  158. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.js.map +1 -1
  159. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue.d.ts +1 -1
  160. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  161. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.vue.d.ts +5 -3
  162. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.js.map +1 -1
  163. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  164. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.js.map +1 -1
  165. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  166. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.js.map +1 -1
  167. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.vue_vue_type_script_setup_true_lang.js.map +1 -1
  168. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.js.map +1 -1
  169. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue.d.ts +1 -1
  170. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  171. package/dist/domains/dam/assetDetail/components/AssetImage.js.map +1 -1
  172. package/dist/domains/dam/assetDetail/components/AssetImage.vue.d.ts +1 -1
  173. package/dist/domains/dam/assetDetail/components/AssetImage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  174. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.js.map +1 -1
  175. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue.d.ts +2 -2
  176. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js.map +1 -1
  177. package/dist/domains/dam/assetDetail/components/AssetInfobox.js.map +1 -1
  178. package/dist/domains/dam/assetDetail/components/AssetInfobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  179. package/dist/domains/dam/assetDetail/components/AssetMetadata.js.map +1 -1
  180. package/dist/domains/dam/assetDetail/components/AssetMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  181. package/dist/domains/dam/assetDetail/composables/assetDetailExtSystem.d.ts +5 -6
  182. package/dist/domains/dam/assetDetail/composables/assetDetailExtSystem.js.map +1 -1
  183. package/dist/domains/dam/assetDetail/composables/assetDetailView.d.ts +10 -10
  184. package/dist/domains/dam/assetDetail/composables/assetDetailView.js.map +1 -1
  185. package/dist/domains/dam/assetDetail/store/assetDetailStore.js.map +1 -1
  186. package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.d.ts +4 -3
  187. package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.js.map +1 -1
  188. package/dist/domains/dam/assetSelect/api/damPodcastApi.js.map +1 -1
  189. package/dist/domains/dam/assetSelect/components/AAssetListInner.js.map +1 -1
  190. package/dist/domains/dam/assetSelect/components/AAssetListInner.vue.d.ts +789 -787
  191. package/dist/domains/dam/assetSelect/components/AAssetListInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  192. package/dist/domains/dam/assetSelect/components/AAssetSelect.js.map +1 -1
  193. package/dist/domains/dam/assetSelect/components/AAssetSelect.vue.d.ts +395 -393
  194. package/dist/domains/dam/assetSelect/components/AAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  195. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.js.map +1 -1
  196. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue.d.ts +14 -12
  197. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue_vue_type_script_setup_true_lang.js.map +1 -1
  198. package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.js.map +1 -1
  199. package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  200. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.js.map +1 -1
  201. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue.d.ts +9 -7
  202. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  203. package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.js.map +1 -1
  204. package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  205. package/dist/domains/dam/assetSelect/composables/assetSelectListActions.js.map +1 -1
  206. package/dist/domains/dam/assetSelect/store/assetSelectStore.js.map +1 -1
  207. package/dist/domains/dam/author/api/authorApi.js.map +1 -1
  208. package/dist/domains/dam/author/components/AuthorCreateButton.js.map +1 -1
  209. package/dist/domains/dam/author/components/AuthorCreateButton.vue.d.ts +1 -1
  210. package/dist/domains/dam/author/components/AuthorCreateButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  211. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.js.map +1 -1
  212. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue.d.ts +9 -6
  213. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  214. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.js.map +1 -1
  215. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue_vue_type_script_setup_true_lang.js.map +1 -1
  216. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js +1 -1
  217. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js.map +1 -1
  218. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue.d.ts +2 -2
  219. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  220. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.js.map +1 -1
  221. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue.d.ts +1 -1
  222. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  223. package/dist/domains/dam/author/composables/cachedAuthors.d.ts +5 -4
  224. package/dist/domains/dam/author/composables/cachedAuthors.js.map +1 -1
  225. package/dist/domains/dam/author/composables/cachedUsers.d.ts +5 -4
  226. package/dist/domains/dam/author/composables/cachedUsers.js.map +1 -1
  227. package/dist/domains/dam/author/composables/damAuthorConfig.d.ts +2 -2
  228. package/dist/domains/dam/author/composables/damAuthorConfig.js.map +1 -1
  229. package/dist/domains/dam/components/DamAdminAssetLink.js.map +1 -1
  230. package/dist/domains/dam/components/DamAdminAssetLink.vue_vue_type_script_setup_true_lang.js.map +1 -1
  231. package/dist/domains/dam/composables/commonAdminCoreDamOptions.d.ts +10 -8
  232. package/dist/domains/dam/composables/commonAdminCoreDamOptions.js.map +1 -1
  233. package/dist/domains/dam/composables/damConfigName.d.ts +8 -9
  234. package/dist/domains/dam/composables/damConfigName.js.map +1 -1
  235. package/dist/domains/dam/composables/damNotifications.d.ts +9 -9
  236. package/dist/domains/dam/composables/damNotifications.js.map +1 -1
  237. package/dist/domains/dam/composables/damNotificationsConnection.d.ts +4 -4
  238. package/dist/domains/dam/composables/damNotificationsConnection.js.map +1 -1
  239. package/dist/domains/dam/composables/damNotificationsEventBus.d.ts +2 -2
  240. package/dist/domains/dam/composables/damNotificationsEventBus.js.map +1 -1
  241. package/dist/domains/dam/composables/extSystemIdForCached.d.ts +5 -4
  242. package/dist/domains/dam/composables/extSystemIdForCached.js.map +1 -1
  243. package/dist/domains/dam/config/api/damAssetCustomFormApi.js.map +1 -1
  244. package/dist/domains/dam/config/api/damConfigApi.js.map +1 -1
  245. package/dist/domains/dam/config/composables/damConfigState.d.ts +5 -5
  246. package/dist/domains/dam/config/composables/damConfigState.js.map +1 -1
  247. package/dist/domains/dam/config/store/damConfigStore.d.ts +5 -4
  248. package/dist/domains/dam/config/store/damConfigStore.js.map +1 -1
  249. package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.d.ts +3 -1
  250. package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.js.map +1 -1
  251. package/dist/domains/dam/cropper/components/ACropper.js.map +1 -1
  252. package/dist/domains/dam/cropper/components/ACropper.vue.d.ts +8 -16
  253. package/dist/domains/dam/cropper/components/ACropper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  254. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.js.map +1 -1
  255. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  256. package/dist/domains/dam/cropper/store/imageRoiStore.d.ts +9 -12
  257. package/dist/domains/dam/cropper/store/imageRoiStore.js.map +1 -1
  258. package/dist/domains/dam/cropper/utils/cropperGeometry.d.ts +24 -38
  259. package/dist/domains/dam/cropper/utils/cropperGeometry.js.map +1 -1
  260. package/dist/domains/dam/cropper/utils/cropperJsService.d.ts +3 -7
  261. package/dist/domains/dam/cropper/utils/cropperJsService.js +10 -3
  262. package/dist/domains/dam/cropper/utils/cropperJsService.js.map +1 -1
  263. package/dist/domains/dam/cropper/utils/cropperTypes.d.ts +3 -6
  264. package/dist/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.d.ts +5 -5
  265. package/dist/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.js.map +1 -1
  266. package/dist/domains/dam/imageWidget/components/AImageMediaWidget.js.map +1 -1
  267. package/dist/domains/dam/imageWidget/components/AImageMediaWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
  268. package/dist/domains/dam/imageWidget/components/AImagePublicInput.js.map +1 -1
  269. package/dist/domains/dam/imageWidget/components/AImagePublicInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  270. package/dist/domains/dam/imageWidget/components/AImageWidget.js.map +1 -1
  271. package/dist/domains/dam/imageWidget/components/AImageWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
  272. package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.js.map +1 -1
  273. package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.vue_vue_type_script_setup_true_lang.js.map +1 -1
  274. package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.vue.d.ts +43 -41
  275. package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.vue.d.ts +31 -29
  276. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.js.map +1 -1
  277. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue.d.ts +29 -27
  278. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  279. package/dist/domains/dam/imageWidget/components/ImageMassOperations.js.map +1 -1
  280. package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue.d.ts +1 -1
  281. package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
  282. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.js.map +1 -1
  283. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue.d.ts +68 -66
  284. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  285. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.js.map +1 -1
  286. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue.d.ts +402 -400
  287. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  288. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.js.map +1 -1
  289. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue.d.ts +384 -382
  290. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  291. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.js.map +1 -1
  292. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  293. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.js.map +1 -1
  294. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  295. package/dist/domains/dam/imageWidget/components/MediaWidgetSimpleDialog.vue.d.ts +7 -5
  296. package/dist/domains/dam/imageWidget/composables/commonAdminImageOptions.js.map +1 -1
  297. package/dist/domains/dam/imageWidget/composables/imageApiCms.js.map +1 -1
  298. package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.d.ts +11 -13
  299. package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.js.map +1 -1
  300. package/dist/domains/dam/imageWidget/composables/useImageMassOperations.js.map +1 -1
  301. package/dist/domains/dam/imageWidget/store/imageMediaWidgetStore.js.map +1 -1
  302. package/dist/domains/dam/imageWidget/store/imageStore.js.map +1 -1
  303. package/dist/domains/dam/imageWidget/utils/damImage.d.ts +5 -6
  304. package/dist/domains/dam/imageWidget/utils/damImage.js.map +1 -1
  305. package/dist/domains/dam/imageWidget/utils/fieldLockTurns.d.ts +1 -2
  306. package/dist/domains/dam/imageWidget/utils/fieldLockTurns.js.map +1 -1
  307. package/dist/domains/dam/imageWidget/utils/imageSaves.d.ts +10 -14
  308. package/dist/domains/dam/imageWidget/utils/imageSaves.js.map +1 -1
  309. package/dist/domains/dam/imageWidget/utils/metadataToImageMap.js.map +1 -1
  310. package/dist/domains/dam/imageWidget/utils/waitLimit.d.ts +4 -6
  311. package/dist/domains/dam/imageWidget/utils/waitLimit.js.map +1 -1
  312. package/dist/domains/dam/keyword/api/keywordApi.js.map +1 -1
  313. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.js.map +1 -1
  314. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.vue.d.ts +1 -1
  315. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  316. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.js.map +1 -1
  317. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue.d.ts +8 -5
  318. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  319. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js +1 -1
  320. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js.map +1 -1
  321. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue.d.ts +2 -2
  322. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  323. package/dist/domains/dam/keyword/composables/cachedKeywords.d.ts +5 -4
  324. package/dist/domains/dam/keyword/composables/cachedKeywords.js.map +1 -1
  325. package/dist/domains/dam/keyword/composables/damKeywordConfig.d.ts +2 -2
  326. package/dist/domains/dam/keyword/composables/damKeywordConfig.js.map +1 -1
  327. package/dist/domains/dam/types/Asset.d.ts +1 -1
  328. package/dist/domains/dam/types/Asset.js.map +1 -1
  329. package/dist/domains/dam/types/UploadQueue.d.ts +5 -4
  330. package/dist/domains/dam/types/UploadQueue.js.map +1 -1
  331. package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.js.map +1 -1
  332. package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
  333. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.js.map +1 -1
  334. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue.d.ts +2 -2
  335. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  336. package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.js.map +1 -1
  337. package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  338. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.js.map +1 -1
  339. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  340. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.js.map +1 -1
  341. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue.d.ts +6 -4
  342. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  343. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.js.map +1 -1
  344. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue.d.ts +1 -1
  345. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  346. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.js.map +1 -1
  347. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  348. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.js.map +1 -1
  349. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue.d.ts +6 -6
  350. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  351. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.js.map +1 -1
  352. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue.d.ts +13 -13
  353. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  354. package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.d.ts +13 -13
  355. package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.js.map +1 -1
  356. package/dist/domains/dam/uploadQueue/composables/damUploadChunkSize.d.ts +2 -2
  357. package/dist/domains/dam/uploadQueue/composables/damUploadChunkSize.js.map +1 -1
  358. package/dist/domains/dam/uploadQueue/composables/uploadMeter.d.ts +12 -12
  359. package/dist/domains/dam/uploadQueue/composables/uploadMeter.js.map +1 -1
  360. package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.d.ts +5 -5
  361. package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.js.map +1 -1
  362. package/dist/domains/dam/uploadQueue/composables/uploadService.d.ts +2 -3
  363. package/dist/domains/dam/uploadQueue/composables/uploadService.js.map +1 -1
  364. package/dist/domains/dam/uploadQueue/composables/useUploadQueueDialog.d.ts +5 -4
  365. package/dist/domains/dam/uploadQueue/composables/useUploadQueueDialog.js.map +1 -1
  366. package/dist/domains/dam/uploadQueue/core/uploadQueueCore.d.ts +3 -2
  367. package/dist/domains/dam/uploadQueue/core/uploadQueueCore.js.map +1 -1
  368. package/dist/domains/dam/uploadQueue/core/uploadQueueCoreTypes.d.ts +8 -5
  369. package/dist/domains/dam/uploadQueue/core/uploadQueueCoreTypes.js.map +1 -1
  370. package/dist/domains/dam/uploadQueue/core/uploadQueueFill.d.ts +3 -3
  371. package/dist/domains/dam/uploadQueue/core/uploadQueueFill.js.map +1 -1
  372. package/dist/domains/dam/uploadQueue/presets/queuePresets.d.ts +8 -5
  373. package/dist/domains/dam/uploadQueue/presets/queuePresets.js.map +1 -1
  374. package/dist/domains/dam/uploadQueue/presets/uploadPresets.d.ts +15 -13
  375. package/dist/domains/dam/uploadQueue/presets/uploadPresets.js.map +1 -1
  376. package/dist/domains/dam/uploadQueue/settlement/uploadPollSchedule.d.ts +7 -7
  377. package/dist/domains/dam/uploadQueue/settlement/uploadPollSchedule.js.map +1 -1
  378. package/dist/domains/dam/uploadQueue/settlement/uploadPoller.d.ts +4 -4
  379. package/dist/domains/dam/uploadQueue/settlement/uploadPoller.js.map +1 -1
  380. package/dist/domains/dam/uploadQueue/settlement/uploadSettle.d.ts +28 -30
  381. package/dist/domains/dam/uploadQueue/settlement/uploadSettle.js.map +1 -1
  382. package/dist/domains/dam/uploadQueue/settlement/uploadSettlement.d.ts +2 -2
  383. package/dist/domains/dam/uploadQueue/settlement/uploadSettlement.js.map +1 -1
  384. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementRuntime.d.ts +2 -2
  385. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementRuntime.js.map +1 -1
  386. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementTypes.d.ts +63 -73
  387. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementTypes.js.map +1 -1
  388. package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.d.ts +8 -9
  389. package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.js.map +1 -1
  390. package/dist/domains/dam/user/api/userApi.d.ts +2 -2
  391. package/dist/domains/dam/user/api/userApi.js.map +1 -1
  392. package/dist/domains/dam/user/components/DamDistributionServiceSelect.js.map +1 -1
  393. package/dist/domains/dam/user/components/DamDistributionServiceSelect.vue.d.ts +1 -1
  394. package/dist/domains/dam/user/components/DamDistributionServiceSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  395. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.js.map +1 -1
  396. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.vue.d.ts +1 -1
  397. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  398. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.js.map +1 -1
  399. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.vue.d.ts +1 -1
  400. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  401. package/dist/domains/dam/user/composables/damUserSelectActions.d.ts +1 -1
  402. package/dist/domains/dam/user/composables/damUserSelectActions.js.map +1 -1
  403. package/dist/domains/dam/user/types/DamDistributionServiceType.d.ts +2 -2
  404. package/dist/domains/dam/user/types/DamDistributionServiceType.js.map +1 -1
  405. package/dist/domains/dam/user/types/DamExternalProviderAssetType.d.ts +1 -1
  406. package/dist/domains/dam/user/types/DamExternalProviderAssetType.js.map +1 -1
  407. package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.js.map +1 -1
  408. package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  409. package/dist/domains/filters/bookmarks/store/bookmarksStore.d.ts +3 -3
  410. package/dist/domains/filters/bookmarks/store/bookmarksStore.js.map +1 -1
  411. package/dist/domains/filters/components/AFilterDatetimePicker.js.map +1 -1
  412. package/dist/domains/filters/components/AFilterDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  413. package/dist/domains/filters/components/AFilterInteger.js.map +1 -1
  414. package/dist/domains/filters/components/AFilterInteger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  415. package/dist/domains/filters/components/AFilterString.js.map +1 -1
  416. package/dist/domains/filters/components/AFilterString.vue_vue_type_script_setup_true_lang.js.map +1 -1
  417. package/dist/domains/filters/components/AFilterTimeInterval.js +1 -1
  418. package/dist/domains/filters/components/AFilterTimeInterval.js.map +1 -1
  419. package/dist/domains/filters/components/AFilterTimeInterval.vue.d.ts +5 -3
  420. package/dist/domains/filters/components/AFilterTimeInterval.vue_vue_type_script_setup_true_lang.js.map +1 -1
  421. package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.js.map +1 -1
  422. package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  423. package/dist/domains/filters/components/AFilterWrapper.vue.d.ts +17 -15
  424. package/dist/domains/filters/components/AFilterWrapperSidebar.vue.d.ts +5 -3
  425. package/dist/domains/filters/components/FiltersSelected.js.map +1 -1
  426. package/dist/domains/filters/components/FiltersSelected.vue_vue_type_script_setup_true_lang.js.map +1 -1
  427. package/dist/domains/filters/composables/filterFactory.d.ts +16 -26
  428. package/dist/domains/filters/composables/filterFactory.js +38 -31
  429. package/dist/domains/filters/composables/filterFactory.js.map +1 -1
  430. package/dist/domains/filters/datatable/components/ADatatableOrdering.js.map +1 -1
  431. package/dist/domains/filters/datatable/components/ADatatableOrdering.vue_vue_type_script_setup_true_lang.js +3 -1
  432. package/dist/domains/filters/datatable/components/ADatatableOrdering.vue_vue_type_script_setup_true_lang.js.map +1 -1
  433. package/dist/domains/filters/datatable/components/ADatatablePagination.js.map +1 -1
  434. package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js +2 -4
  435. package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  436. package/dist/domains/filters/utils/filterInjectionKeys.js.map +1 -1
  437. package/dist/domains/form/components/AFormDatetimePicker.js.map +1 -1
  438. package/dist/domains/form/components/AFormDatetimePicker.vue.d.ts +7 -5
  439. package/dist/domains/form/components/AFormDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  440. package/dist/domains/form/components/AFormFlagDatetimePicker.js.map +1 -1
  441. package/dist/domains/form/components/AFormFlagDatetimePicker.vue.d.ts +7 -5
  442. package/dist/domains/form/components/AFormFlagDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  443. package/dist/domains/form/components/AFormSwitch.vue.d.ts +7 -5
  444. package/dist/domains/form/components/AFormTextField.js.map +1 -1
  445. package/dist/domains/form/components/AFormTextField.vue.d.ts +9 -7
  446. package/dist/domains/form/components/AFormTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  447. package/dist/domains/form/components/AFormTextarea.vue.d.ts +13 -11
  448. package/dist/domains/form/components/AFormValueObjectOptionsSelect.vue.d.ts +7 -5
  449. package/dist/domains/form/components/ASystemEntityScope.vue.d.ts +5 -3
  450. package/dist/domains/job/api/jobApi.js.map +1 -1
  451. package/dist/domains/job/components/AJobDetailCommon.vue.d.ts +5 -3
  452. package/dist/domains/listEditor/components/AListEditor.js.map +1 -1
  453. package/dist/domains/listEditor/components/AListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  454. package/dist/domains/listEditor/components/ANestedSortableListEditor.js.map +1 -1
  455. package/dist/domains/listEditor/components/ANestedSortableListEditor.vue.d.ts +2 -3
  456. package/dist/domains/listEditor/components/ANestedSortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  457. package/dist/domains/listEditor/components/ASortableListEditor.js.map +1 -1
  458. package/dist/domains/listEditor/components/ASortableListEditor.vue.d.ts +2 -3
  459. package/dist/domains/listEditor/components/ASortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  460. package/dist/domains/listEditor/composables/useListEditorController.d.ts +4 -5
  461. package/dist/domains/listEditor/composables/useListEditorController.js.map +1 -1
  462. package/dist/domains/listEditor/composables/useNestedListEditor.d.ts +3 -4
  463. package/dist/domains/listEditor/composables/useNestedListEditor.js.map +1 -1
  464. package/dist/domains/listEditor/composables/useNestedListEditorController.d.ts +5 -4
  465. package/dist/domains/listEditor/composables/useNestedListEditorController.js.map +1 -1
  466. package/dist/domains/listEditor/composables/useReorderMode.js.map +1 -1
  467. package/dist/domains/listEditor/types/listEditorTypes.d.ts +2 -2
  468. package/dist/domains/listEditor/utils/listEditorLoader.d.ts +5 -5
  469. package/dist/domains/listEditor/utils/listEditorLoader.js.map +1 -1
  470. package/dist/domains/listEditor/utils/resolveCompactText.js.map +1 -1
  471. package/dist/domains/log/api/logApi.d.ts +2 -3
  472. package/dist/domains/log/api/logApi.js.map +1 -1
  473. package/dist/domains/log/components/ALogDatatable.js.map +1 -1
  474. package/dist/domains/log/components/ALogDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  475. package/dist/domains/log/components/ALogDetailView.js.map +1 -1
  476. package/dist/domains/log/components/ALogDetailView.vue.d.ts +1 -1
  477. package/dist/domains/log/components/ALogDetailView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  478. package/dist/domains/log/components/ALogFilter.js.map +1 -1
  479. package/dist/domains/log/components/ALogFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  480. package/dist/domains/log/components/ALogListView.js.map +1 -1
  481. package/dist/domains/log/components/ALogListView.vue.d.ts +1 -1
  482. package/dist/domains/log/components/ALogListView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  483. package/dist/domains/log/composables/logActions.d.ts +4 -5
  484. package/dist/domains/log/composables/logActions.js.map +1 -1
  485. package/dist/domains/log/composables/logType.d.ts +6 -7
  486. package/dist/domains/log/composables/logType.js.map +1 -1
  487. package/dist/domains/log/filter/logFilter.d.ts +8 -11
  488. package/dist/domains/log/filter/logFilter.js.map +1 -1
  489. package/dist/domains/permission/components/APermissionEditor.js.map +1 -1
  490. package/dist/domains/permission/components/APermissionEditor.vue.d.ts +4 -4
  491. package/dist/domains/permission/components/APermissionEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  492. package/dist/domains/permission/composables/permissionActions.d.ts +3 -6
  493. package/dist/domains/permission/composables/permissionActions.js.map +1 -1
  494. package/dist/domains/permission/config/api/permissionConfigApi.d.ts +2 -2
  495. package/dist/domains/permission/config/api/permissionConfigApi.js.map +1 -1
  496. package/dist/domains/permission/config/composables/permissionConfigActions.d.ts +3 -7
  497. package/dist/domains/permission/config/composables/permissionConfigActions.js.map +1 -1
  498. package/dist/domains/permission/config/store/permissionConfigStore.d.ts +2 -4
  499. package/dist/domains/permission/config/store/permissionConfigStore.js.map +1 -1
  500. package/dist/domains/permission/group/api/permissionGroupApi.d.ts +8 -10
  501. package/dist/domains/permission/group/api/permissionGroupApi.js.map +1 -1
  502. package/dist/domains/permission/group/components/APermissionGroupDatatable.js.map +1 -1
  503. package/dist/domains/permission/group/components/APermissionGroupDatatable.vue.d.ts +12 -10
  504. package/dist/domains/permission/group/components/APermissionGroupDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  505. package/dist/domains/permission/group/components/APermissionGroupDetail.js.map +1 -1
  506. package/dist/domains/permission/group/components/APermissionGroupDetail.vue.d.ts +21 -22
  507. package/dist/domains/permission/group/components/APermissionGroupDetail.vue_vue_type_script_setup_true_lang.js.map +1 -1
  508. package/dist/domains/permission/group/components/APermissionGroupManage.js.map +1 -1
  509. package/dist/domains/permission/group/components/APermissionGroupManage.vue.d.ts +21 -22
  510. package/dist/domains/permission/group/components/APermissionGroupManage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  511. package/dist/domains/permission/group/composables/cachedPermissionGroups.js.map +1 -1
  512. package/dist/domains/permission/group/composables/permissionGroupActions.d.ts +6 -8
  513. package/dist/domains/permission/group/composables/permissionGroupActions.js.map +1 -1
  514. package/dist/domains/permission/group/composables/permissionGroupValidations.d.ts +2 -3
  515. package/dist/domains/permission/group/composables/permissionGroupValidations.js.map +1 -1
  516. package/dist/domains/permission/group/filter/permissionGroupFilter.d.ts +2 -3
  517. package/dist/domains/permission/group/filter/permissionGroupFilter.js.map +1 -1
  518. package/dist/domains/permission/group/store/permissionGroupStore.d.ts +3 -6
  519. package/dist/domains/permission/group/store/permissionGroupStore.js.map +1 -1
  520. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.js.map +1 -1
  521. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  522. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.js.map +1 -1
  523. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.vue_vue_type_script_setup_true_lang.js.map +1 -1
  524. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.js.map +1 -1
  525. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  526. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.vue.d.ts +5 -3
  527. package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.d.ts +11 -13
  528. package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.js.map +1 -1
  529. package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.vue.d.ts +13 -11
  530. package/dist/domains/subjectSelect/components/ASubjectSelect.js.map +1 -1
  531. package/dist/domains/subjectSelect/components/ASubjectSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  532. package/dist/domains/subjectSelect/composables/useSubjectSelect.js +53 -51
  533. package/dist/domains/subjectSelect/composables/useSubjectSelect.js.map +1 -1
  534. package/dist/domains/system/appShell/components/AActionbar.vue.d.ts +7 -5
  535. package/dist/domains/system/appShell/components/ALayoutSwitch.js.map +1 -1
  536. package/dist/domains/system/appShell/components/ALayoutSwitch.vue.d.ts +7 -5
  537. package/dist/domains/system/appShell/components/ALayoutSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  538. package/dist/domains/system/appShell/composables/teleportSlot.d.ts +0 -1
  539. package/dist/domains/system/appShell/composables/teleportSlot.js.map +1 -1
  540. package/dist/domains/system/components/AAlerts.js.map +1 -1
  541. package/dist/domains/system/components/AAlerts.vue_vue_type_script_setup_true_lang.js.map +1 -1
  542. package/dist/domains/system/composables/alerts.js.map +1 -1
  543. package/dist/domains/system/composables/breadcrumbs.d.ts +3 -3
  544. package/dist/domains/system/composables/breadcrumbs.js.map +1 -1
  545. package/dist/domains/system/composables/languageSettings.js.map +1 -1
  546. package/dist/domains/system/composables/loginStatus.js.map +1 -1
  547. package/dist/domains/system/composables/navigationError.d.ts +6 -8
  548. package/dist/domains/system/composables/navigationError.js.map +1 -1
  549. package/dist/domains/system/composables/pageNavigation.d.ts +9 -10
  550. package/dist/domains/system/composables/pageNavigation.js.map +1 -1
  551. package/dist/domains/system/composables/recordActions.d.ts +14 -22
  552. package/dist/domains/system/composables/recordActions.js.map +1 -1
  553. package/dist/domains/system/composables/recordPage.d.ts +23 -38
  554. package/dist/domains/system/composables/recordPage.js.map +1 -1
  555. package/dist/domains/system/composables/routeHistory.d.ts +4 -5
  556. package/dist/domains/system/composables/routeHistory.js.map +1 -1
  557. package/dist/domains/system/composables/sentry.js.map +1 -1
  558. package/dist/domains/system/composables/useDebugFeatures.d.ts +3 -6
  559. package/dist/domains/system/composables/useDebugFeatures.js.map +1 -1
  560. package/dist/domains/system/store/datatablePageStore.d.ts +8 -1
  561. package/dist/domains/system/store/datatablePageStore.js +10 -3
  562. package/dist/domains/system/store/datatablePageStore.js.map +1 -1
  563. package/dist/domains/system/systemBar/components/ASystemBar.js.map +1 -1
  564. package/dist/domains/system/systemBar/components/ASystemBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  565. package/dist/domains/system/systemBar/utils/appReload.d.ts +5 -5
  566. package/dist/domains/system/systemBar/utils/appReload.js.map +1 -1
  567. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.js.map +1 -1
  568. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.vue.d.ts +2 -3
  569. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.vue_vue_type_script_setup_true_lang.js.map +1 -1
  570. package/dist/domains/ui/buttons/action/components/AActionDeleteButton.js.map +1 -1
  571. package/dist/domains/ui/buttons/action/components/AActionDeleteButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  572. package/dist/domains/ui/buttons/components/ABtnSplit.vue.d.ts +9 -7
  573. package/dist/domains/ui/components/AAvatarColorPicker.js.map +1 -1
  574. package/dist/domains/ui/components/AAvatarColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  575. package/dist/domains/ui/components/ACard.js.map +1 -1
  576. package/dist/domains/ui/components/ACard.vue.d.ts +7 -3
  577. package/dist/domains/ui/components/ACard.vue_vue_type_script_setup_true_lang.js +6 -2
  578. package/dist/domains/ui/components/ACard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  579. package/dist/domains/ui/components/ACardLoader.js.map +1 -1
  580. package/dist/domains/ui/components/ACardLoader.vue.d.ts +1 -0
  581. package/dist/domains/ui/components/ACardLoader.vue_vue_type_script_setup_true_lang.js +13 -7
  582. package/dist/domains/ui/components/ACardLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  583. package/dist/domains/ui/components/AChipNoLink.vue.d.ts +5 -3
  584. package/dist/domains/ui/components/ACopyText.vue.d.ts +9 -7
  585. package/dist/domains/ui/components/ACreateDialog.js.map +1 -1
  586. package/dist/domains/ui/components/ACreateDialog.vue.d.ts +11 -9
  587. package/dist/domains/ui/components/ACreateDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  588. package/dist/domains/ui/components/ADialogToolbar.vue.d.ts +5 -3
  589. package/dist/domains/ui/components/ARow.vue.d.ts +5 -3
  590. package/dist/domains/ui/components/ATimeTrackingFields.js.map +1 -1
  591. package/dist/domains/ui/components/ATimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
  592. package/dist/domains/ui/components/AUserAndTimeTrackingFields.js.map +1 -1
  593. package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue.d.ts +3 -5
  594. package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
  595. package/dist/domains/ui/datetime/components/ADatetimePicker.js +1 -1
  596. package/dist/domains/ui/datetime/components/ADatetimePicker.js.map +1 -1
  597. package/dist/domains/ui/datetime/components/ADatetimePicker.vue.d.ts +5 -3
  598. package/dist/domains/ui/datetime/components/ADatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  599. package/dist/domains/ui/file/components/AFileDropzone.js.map +1 -1
  600. package/dist/domains/ui/file/components/AFileDropzone.vue.d.ts +1 -1
  601. package/dist/domains/ui/file/components/AFileDropzone.vue_vue_type_script_setup_true_lang.js.map +1 -1
  602. package/dist/domains/ui/file/components/AFileInput.js.map +1 -1
  603. package/dist/domains/ui/file/components/AFileInput.vue.d.ts +9 -7
  604. package/dist/domains/ui/file/components/AFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  605. package/dist/domains/ui/file/components/AFileInputDialog.js.map +1 -1
  606. package/dist/domains/ui/file/components/AFileInputDialog.vue.d.ts +9 -7
  607. package/dist/domains/ui/file/components/AFileInputDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  608. package/dist/domains/ui/file/composables/dropzone.js.map +1 -1
  609. package/dist/domains/ui/file/composables/formatAndSizeCheck.js.map +1 -1
  610. package/dist/domains/ui/view/components/AGenericView.vue.d.ts +7 -5
  611. package/dist/domains/ui/view/components/ALoginView.js +1 -1
  612. package/dist/domains/ui/view/components/ALoginView.js.map +1 -1
  613. package/dist/domains/ui/view/components/ALoginView.vue.d.ts +5 -3
  614. package/dist/domains/ui/view/components/ALoginView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  615. package/dist/domains/ui/view/components/ALogoutView.js.map +1 -1
  616. package/dist/domains/ui/view/components/ALogoutView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  617. package/dist/domains/ui/view/components/ANotFoundView.js.map +1 -1
  618. package/dist/domains/ui/view/components/ANotFoundView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  619. package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.d.ts +6 -7
  620. package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.js.map +1 -1
  621. package/dist/lib.d.ts +2 -2
  622. package/dist/plugins/commonVuetifyConfig.d.ts +3 -3
  623. package/dist/plugins/commonVuetifyConfig.js.map +1 -1
  624. package/dist/plugins/i18n.d.ts +4 -5
  625. package/dist/plugins/i18n.js.map +1 -1
  626. package/dist/plugins/pluginOptions.d.ts +4 -2
  627. package/dist/plugins/pluginOptions.js.map +1 -1
  628. package/dist/plugins/webfontloader.js.map +1 -1
  629. package/dist/shared/error/AnzuApiCancelledError.d.ts +5 -8
  630. package/dist/shared/error/AnzuApiCancelledError.js.map +1 -1
  631. package/dist/shared/error/AnzuError.d.ts +3 -5
  632. package/dist/shared/error/AnzuError.js.map +1 -1
  633. package/dist/shared/error/AuthUnavailableError.d.ts +3 -3
  634. package/dist/shared/error/AuthUnavailableError.js.map +1 -1
  635. package/dist/shared/error/isInCauseChain.d.ts +2 -2
  636. package/dist/shared/error/isInCauseChain.js.map +1 -1
  637. package/dist/shared/types/UserAndTimeTracking.d.ts +5 -5
  638. package/dist/shared/types/Validation.d.ts +4 -5
  639. package/dist/shared/types/common.d.ts +1 -3
  640. package/dist/shared/types/globalComponents.d.ts +5 -6
  641. package/dist/shared/utils/common.js.map +1 -1
  642. package/dist/shared/utils/datetime.d.ts +0 -1
  643. package/dist/shared/utils/datetime.js.map +1 -1
  644. package/dist/shared/utils/datetimePickerValue.d.ts +4 -7
  645. package/dist/shared/utils/datetimePickerValue.js.map +1 -1
  646. package/dist/shared/utils/development.d.ts +3 -3
  647. package/dist/shared/utils/development.js.map +1 -1
  648. package/dist/shared/utils/envConfig.d.ts +4 -4
  649. package/dist/shared/utils/envConfig.js.map +1 -1
  650. package/dist/shared/utils/json.d.ts +1 -1
  651. package/dist/shared/utils/json.js.map +1 -1
  652. package/dist/shared/utils/userAndTimeTracking.d.ts +5 -7
  653. package/dist/shared/utils/userAndTimeTracking.js.map +1 -1
  654. package/dist/shared/validators/vuelidate/common/useValidateHexColor.d.ts +3 -5
  655. package/dist/shared/validators/vuelidate/common/useValidateHexColor.js.map +1 -1
  656. package/dist/testing/appShell.d.ts +11 -11
  657. package/dist/testing/appShell.js.map +1 -1
  658. package/dist/testing/closeButtons.d.ts +9 -11
  659. package/dist/testing/closeButtons.js.map +1 -1
  660. package/dist/testing/declaredDependencies.d.ts +7 -7
  661. package/dist/testing/declaredDependencies.js.map +1 -1
  662. package/dist/testing/generatedRoutes.d.ts +6 -11
  663. package/dist/testing/generatedRoutes.js.map +1 -1
  664. package/dist/testing/routeHistory.d.ts +5 -12
  665. package/dist/testing/routeHistory.js.map +1 -1
  666. package/dist/testing/sortableLists.d.ts +16 -21
  667. package/dist/testing/sortableLists.js.map +1 -1
  668. package/dist/testing/typedRouter.d.ts +0 -1
  669. package/dist/testing/typedRouter.js.map +1 -1
  670. package/package.json +26 -26
  671. package/src/eslint/adminConfig.mjs +19 -27
  672. package/src/eslint/globalComponentNames.mjs +3 -4
  673. package/src/eslint/oxlint.mjs +7 -20
  674. package/src/eslint/plugin.d.mts +2 -4
  675. package/src/eslint/plugin.mjs +18 -34
  676. package/src/eslint/validRouteName.mjs +6 -7
  677. package/src/vite/devWatch.mjs +30 -43
  678. package/src/vite/index.d.mts +5 -5
  679. package/src/vite/sentry.mjs +7 -12
  680. package/src/vite/sourcemaps.mjs +4 -8
@@ -1 +1 @@
1
- {"version":3,"file":"AssetQueueSelectedSidebar.js","names":["_sfc_main","AssetQueueSelectedSidebar_vue_vue_type_script_setup_true_lang_default","AssetQueueSelectedSidebar_default"],"sources":["../../../../../src/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { DamAssetType, type DamAssetTypeType } from '@/domains/dam/types/Asset'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport AssetCustomMetadataFormMassOperations from '@/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport type { IntegerId } from '@/shared/types/common'\nimport type { CustomDataValue } from '@/domains/customDataForm/types/CustomDataForm'\nimport { useDamConfigState } from '@/domains/dam/config/composables/damConfigState'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport type { UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport {\n type UploadQueueMassOperationsBinding,\n useLibraryUploadQueueMassOperationsBinding,\n} from '@/domains/dam/uploadQueue/components/uploadQueueBindings'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n extSystem: IntegerId\n /** What the mass operations ask of their host; without it the library's store. */\n operations?: UploadQueueMassOperationsBinding\n /** The DAM configuration whose rules the operations follow; inherited when not given. */\n configName?: string\n }>(),\n {\n operations: undefined,\n configName: undefined,\n }\n)\n\nconst massOperationsData = ref<Record<'image' | 'video' | 'audio' | 'document', Record<string, CustomDataValue>>>({\n image: {},\n video: {},\n audio: {},\n document: {},\n})\nconst massOperationsKeywords = ref([])\nconst massOperationsAuthors = ref([])\n\nconst { t } = useI18n()\n\n// The two icon buttons beside a field, named for who cannot see them: what each does, and to which field.\nconst fillEmptyName = (field: string) => t('common.damImage.asset.massOperations.fillOneEmptyField', { field })\nconst replaceName = (field: string) => t('common.damImage.asset.massOperations.replaceOneField', { field })\n\nconst panels = ref<Array<string>>(['general'])\n\n// Created only when the host binds none.\nconst operations = props.operations ?? useLibraryUploadQueueMassOperationsBinding(() => props.queueKey)\n\nconst fillEmptyField = (data: { assetType: DamAssetTypeType; elementProperty: string; value: any }) => {\n operations.fillCustomDataValue(data)\n}\nconst replaceField = (data: { assetType: DamAssetTypeType; elementProperty: string; value: any }) => {\n operations.fillCustomDataValue(data, true)\n}\nconst fillEmptyKeywords = () => {\n operations.fillKeywords(massOperationsKeywords.value)\n}\nconst replaceKeywords = () => {\n operations.fillKeywords(massOperationsKeywords.value, true)\n}\nconst fillEmptyAuthors = () => {\n operations.fillAuthors(massOperationsAuthors.value)\n}\nconst replaceAuthors = () => {\n operations.fillAuthors(massOperationsAuthors.value, true)\n}\nconst fillAll = (forceReplace = false) => {\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.image)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Image,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.video)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Video,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.audio)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Audio,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.document)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Document,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n if (authorEnabled.value) {\n forceReplace ? replaceAuthors() : fillEmptyAuthors()\n }\n if (keywordEnabled.value) {\n forceReplace ? replaceKeywords() : fillEmptyKeywords()\n }\n}\nconst clearForm = () => {\n massOperationsData.value = { image: {}, video: {}, audio: {}, document: {} }\n massOperationsAuthors.value = []\n massOperationsKeywords.value = []\n}\n\nconst assetTypes = computed(() => {\n return operations.assetTypes()\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { getDamConfigExtSystem } = useDamConfigState(undefined, useDamConfigName(props.configName))\n\nconst keywordEnabled = computed(() => {\n const config = getDamConfigExtSystem(props.extSystem)\n if (!config) return false\n return assetTypes.value.some((type) => !!config[type]?.keywords?.enabled)\n})\n\nconst authorEnabled = computed(() => {\n const config = getDamConfigExtSystem(props.extSystem)\n if (!config) return false\n return assetTypes.value.some((type) => !!config[type]?.authors?.enabled)\n})\n\nonMounted(() => {\n if (assetTypes.value[0]) {\n panels.value.push(assetTypes.value[0])\n }\n})\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs class=\"sidebar-info__tabs\">\n <VTab>{{ t('common.damImage.asset.massOperations.title') }}</VTab>\n </VTabs>\n <div class=\"sidebar-info__content\">\n <div class=\"text-body-small pa-3\">\n {{ t('common.damImage.asset.massOperations.description') }}\n </div>\n <VExpansionPanels\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n v-if=\"keywordEnabled || authorEnabled\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.massOperations.general')\"\n value=\"general\"\n >\n <VExpansionPanelText>\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 <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <KeywordRemoteAutocompleteWithCached\n v-model=\"massOperationsKeywords\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n :ext-system=\"extSystem\"\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n :aria-label=\"fillEmptyName(t('common.damImage.asset.model.keywords'))\"\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyKeywords\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n :aria-label=\"replaceName(t('common.damImage.asset.model.keywords'))\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceKeywords\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\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 <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <AuthorRemoteAutocompleteWithCached\n v-model=\"massOperationsAuthors\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n :aria-label=\"fillEmptyName(t('common.damImage.asset.model.authors'))\"\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyAuthors\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n :aria-label=\"replaceName(t('common.damImage.asset.model.authors'))\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceAuthors\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Image)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.image')\"\n :value=\"DamAssetType.Image\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.image\"\n :asset-type=\"DamAssetType.Image\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Video)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.video')\"\n :value=\"DamAssetType.Video\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.video\"\n :asset-type=\"DamAssetType.Video\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Audio)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.audio')\"\n :value=\"DamAssetType.Audio\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.audio\"\n :asset-type=\"DamAssetType.Audio\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Document)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.document')\"\n :value=\"DamAssetType.Document\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.document\"\n :asset-type=\"DamAssetType.Document\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n </div>\n <div class=\"sidebar-info__actions pa-2 d-flex align-center justify-center\">\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(false)\"\n >\n {{ t('common.damImage.asset.massOperations.fillAllEmpty') }}\n </VBtn>\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(true)\"\n >\n {{ t('common.damImage.asset.massOperations.replaceAll') }}\n </VBtn>\n <VBtn\n variant=\"text\"\n size=\"small\"\n @click.stop=\"clearForm\"\n >\n {{ t('common.damImage.asset.massOperations.clearForm') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AssetQueueSelectedSidebar.js","names":["_sfc_main","AssetQueueSelectedSidebar_vue_vue_type_script_setup_true_lang_default","AssetQueueSelectedSidebar_default"],"sources":["../../../../../src/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { DamAssetType, type DamAssetTypeType } from '@/domains/dam/types/Asset'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport AssetCustomMetadataFormMassOperations from '@/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport type { IntegerId } from '@/shared/types/common'\nimport type { CustomDataValue } from '@/domains/customDataForm/types/CustomDataForm'\nimport { useDamConfigState } from '@/domains/dam/config/composables/damConfigState'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport type { UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport {\n type UploadQueueMassOperationsBinding,\n useLibraryUploadQueueMassOperationsBinding,\n} from '@/domains/dam/uploadQueue/components/uploadQueueBindings'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n extSystem: IntegerId\n /** What the mass operations need from their host. Without it they use the library store. */\n operations?: UploadQueueMassOperationsBinding\n /** The DAM configuration whose rules the operations follow. Inherited when not given. */\n configName?: string\n }>(),\n {\n operations: undefined,\n configName: undefined,\n }\n)\n\nconst massOperationsData = ref<Record<'image' | 'video' | 'audio' | 'document', Record<string, CustomDataValue>>>({\n image: {},\n video: {},\n audio: {},\n document: {},\n})\nconst massOperationsKeywords = ref([])\nconst massOperationsAuthors = ref([])\n\nconst { t } = useI18n()\n\n// Accessible names for the two icon buttons beside a field: the action and the field.\nconst fillEmptyName = (field: string) => t('common.damImage.asset.massOperations.fillOneEmptyField', { field })\nconst replaceName = (field: string) => t('common.damImage.asset.massOperations.replaceOneField', { field })\n\nconst panels = ref<Array<string>>(['general'])\n\n// Created only when the host binds none.\nconst operations = props.operations ?? useLibraryUploadQueueMassOperationsBinding(() => props.queueKey)\n\nconst fillEmptyField = (data: { assetType: DamAssetTypeType; elementProperty: string; value: any }) => {\n operations.fillCustomDataValue(data)\n}\nconst replaceField = (data: { assetType: DamAssetTypeType; elementProperty: string; value: any }) => {\n operations.fillCustomDataValue(data, true)\n}\nconst fillEmptyKeywords = () => {\n operations.fillKeywords(massOperationsKeywords.value)\n}\nconst replaceKeywords = () => {\n operations.fillKeywords(massOperationsKeywords.value, true)\n}\nconst fillEmptyAuthors = () => {\n operations.fillAuthors(massOperationsAuthors.value)\n}\nconst replaceAuthors = () => {\n operations.fillAuthors(massOperationsAuthors.value, true)\n}\nconst fillAll = (forceReplace = false) => {\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.image)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Image,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.video)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Video,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.audio)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Audio,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.document)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Document,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n if (authorEnabled.value) {\n forceReplace ? replaceAuthors() : fillEmptyAuthors()\n }\n if (keywordEnabled.value) {\n forceReplace ? replaceKeywords() : fillEmptyKeywords()\n }\n}\nconst clearForm = () => {\n massOperationsData.value = { image: {}, video: {}, audio: {}, document: {} }\n massOperationsAuthors.value = []\n massOperationsKeywords.value = []\n}\n\nconst assetTypes = computed(() => {\n return operations.assetTypes()\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { getDamConfigExtSystem } = useDamConfigState(undefined, useDamConfigName(props.configName))\n\nconst keywordEnabled = computed(() => {\n const config = getDamConfigExtSystem(props.extSystem)\n if (!config) return false\n return assetTypes.value.some((type) => !!config[type]?.keywords?.enabled)\n})\n\nconst authorEnabled = computed(() => {\n const config = getDamConfigExtSystem(props.extSystem)\n if (!config) return false\n return assetTypes.value.some((type) => !!config[type]?.authors?.enabled)\n})\n\nonMounted(() => {\n if (assetTypes.value[0]) {\n panels.value.push(assetTypes.value[0])\n }\n})\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs class=\"sidebar-info__tabs\">\n <VTab>{{ t('common.damImage.asset.massOperations.title') }}</VTab>\n </VTabs>\n <div class=\"sidebar-info__content\">\n <div class=\"text-body-small pa-3\">\n {{ t('common.damImage.asset.massOperations.description') }}\n </div>\n <VExpansionPanels\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n v-if=\"keywordEnabled || authorEnabled\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.massOperations.general')\"\n value=\"general\"\n >\n <VExpansionPanelText>\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 <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <KeywordRemoteAutocompleteWithCached\n v-model=\"massOperationsKeywords\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n :ext-system=\"extSystem\"\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n :aria-label=\"fillEmptyName(t('common.damImage.asset.model.keywords'))\"\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyKeywords\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n :aria-label=\"replaceName(t('common.damImage.asset.model.keywords'))\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceKeywords\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\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 <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <AuthorRemoteAutocompleteWithCached\n v-model=\"massOperationsAuthors\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n :aria-label=\"fillEmptyName(t('common.damImage.asset.model.authors'))\"\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyAuthors\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n :aria-label=\"replaceName(t('common.damImage.asset.model.authors'))\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceAuthors\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Image)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.image')\"\n :value=\"DamAssetType.Image\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.image\"\n :asset-type=\"DamAssetType.Image\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Video)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.video')\"\n :value=\"DamAssetType.Video\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.video\"\n :asset-type=\"DamAssetType.Video\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Audio)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.audio')\"\n :value=\"DamAssetType.Audio\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.audio\"\n :asset-type=\"DamAssetType.Audio\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Document)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.document')\"\n :value=\"DamAssetType.Document\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.document\"\n :asset-type=\"DamAssetType.Document\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n </div>\n <div class=\"sidebar-info__actions pa-2 d-flex align-center justify-center\">\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(false)\"\n >\n {{ t('common.damImage.asset.massOperations.fillAllEmpty') }}\n </VBtn>\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(true)\"\n >\n {{ t('common.damImage.asset.massOperations.replaceAll') }}\n </VBtn>\n <VBtn\n variant=\"text\"\n size=\"small\"\n @click.stop=\"clearForm\"\n >\n {{ t('common.damImage.asset.massOperations.clearForm') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -4,9 +4,9 @@ import { UploadQueueMassOperationsBinding } from './uploadQueueBindings';
4
4
  type __VLS_Props = {
5
5
  queueKey: UploadQueueKey;
6
6
  extSystem: IntegerId;
7
- /** What the mass operations ask of their host; without it the library's store. */
7
+ /** What the mass operations need from their host. Without it they use the library store. */
8
8
  operations?: UploadQueueMassOperationsBinding;
9
- /** The DAM configuration whose rules the operations follow; inherited when not given. */
9
+ /** The DAM configuration whose rules the operations follow. Inherited when not given. */
10
10
  configName?: string;
11
11
  };
12
12
  declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
@@ -1 +1 @@
1
- {"version":3,"file":"AssetQueueSelectedSidebar.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createElementVNode","_createVNode","_component_VTabs","_withCtx","_component_VTab","_createTextVNode","_toDisplayString","_unref","_component_VExpansionPanels","_createBlock","_component_VExpansionPanel","_component_VExpansionPanelText","_component_VRow","_component_VCol","ASystemEntityScope","KeywordRemoteAutocompleteWithCached","_component_VBtn","_withModifiers","_component_VIcon","_component_VTooltip","_createCommentVNode","AuthorRemoteAutocompleteWithCached","AssetCustomMetadataFormMassOperations","ASystemEntityScope_default","AuthorRemoteAutocompleteWithCached_default","KeywordRemoteAutocompleteWithCached_default","AssetCustomMetadataFormMassOperations_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","AssetQueueSelectedSidebar_vue_vue_type_script_setup_true_lang_default","props","__props","massOperationsData","ref","massOperationsKeywords","massOperationsAuthors","useI18n","fillEmptyName","t","replaceName","panels","operations","useLibraryUploadQueueMassOperationsBinding","fillEmptyField","data","replaceField","fillEmptyKeywords","replaceKeywords","fillEmptyAuthors","replaceAuthors","fillAll","elementProperty","value","DamAssetType","forceReplace","authorEnabled","keywordEnabled","clearForm","assetTypes","computed","useDamConfigState","useDamConfigName","config","getDamConfigExtSystem","type","onMounted","openBlock","createElementBlock","createElementVNode","createVNode","VTabs","withCtx","VTab","createTextVNode","toDisplayString","unref","VExpansionPanels","_cache","$event","createBlock","VExpansionPanel","VExpansionPanelText","VRow","VCol","VBtn","withModifiers","VIcon","VTooltip","createCommentVNode"],"sources":["../../../../../src/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { DamAssetType, type DamAssetTypeType } from '@/domains/dam/types/Asset'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport AssetCustomMetadataFormMassOperations from '@/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport type { IntegerId } from '@/shared/types/common'\nimport type { CustomDataValue } from '@/domains/customDataForm/types/CustomDataForm'\nimport { useDamConfigState } from '@/domains/dam/config/composables/damConfigState'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport type { UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport {\n type UploadQueueMassOperationsBinding,\n useLibraryUploadQueueMassOperationsBinding,\n} from '@/domains/dam/uploadQueue/components/uploadQueueBindings'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n extSystem: IntegerId\n /** What the mass operations ask of their host; without it the library's store. */\n operations?: UploadQueueMassOperationsBinding\n /** The DAM configuration whose rules the operations follow; inherited when not given. */\n configName?: string\n }>(),\n {\n operations: undefined,\n configName: undefined,\n }\n)\n\nconst massOperationsData = ref<Record<'image' | 'video' | 'audio' | 'document', Record<string, CustomDataValue>>>({\n image: {},\n video: {},\n audio: {},\n document: {},\n})\nconst massOperationsKeywords = ref([])\nconst massOperationsAuthors = ref([])\n\nconst { t } = useI18n()\n\n// The two icon buttons beside a field, named for who cannot see them: what each does, and to which field.\nconst fillEmptyName = (field: string) => t('common.damImage.asset.massOperations.fillOneEmptyField', { field })\nconst replaceName = (field: string) => t('common.damImage.asset.massOperations.replaceOneField', { field })\n\nconst panels = ref<Array<string>>(['general'])\n\n// Created only when the host binds none.\nconst operations = props.operations ?? useLibraryUploadQueueMassOperationsBinding(() => props.queueKey)\n\nconst fillEmptyField = (data: { assetType: DamAssetTypeType; elementProperty: string; value: any }) => {\n operations.fillCustomDataValue(data)\n}\nconst replaceField = (data: { assetType: DamAssetTypeType; elementProperty: string; value: any }) => {\n operations.fillCustomDataValue(data, true)\n}\nconst fillEmptyKeywords = () => {\n operations.fillKeywords(massOperationsKeywords.value)\n}\nconst replaceKeywords = () => {\n operations.fillKeywords(massOperationsKeywords.value, true)\n}\nconst fillEmptyAuthors = () => {\n operations.fillAuthors(massOperationsAuthors.value)\n}\nconst replaceAuthors = () => {\n operations.fillAuthors(massOperationsAuthors.value, true)\n}\nconst fillAll = (forceReplace = false) => {\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.image)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Image,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.video)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Video,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.audio)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Audio,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.document)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Document,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n if (authorEnabled.value) {\n forceReplace ? replaceAuthors() : fillEmptyAuthors()\n }\n if (keywordEnabled.value) {\n forceReplace ? replaceKeywords() : fillEmptyKeywords()\n }\n}\nconst clearForm = () => {\n massOperationsData.value = { image: {}, video: {}, audio: {}, document: {} }\n massOperationsAuthors.value = []\n massOperationsKeywords.value = []\n}\n\nconst assetTypes = computed(() => {\n return operations.assetTypes()\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { getDamConfigExtSystem } = useDamConfigState(undefined, useDamConfigName(props.configName))\n\nconst keywordEnabled = computed(() => {\n const config = getDamConfigExtSystem(props.extSystem)\n if (!config) return false\n return assetTypes.value.some((type) => !!config[type]?.keywords?.enabled)\n})\n\nconst authorEnabled = computed(() => {\n const config = getDamConfigExtSystem(props.extSystem)\n if (!config) return false\n return assetTypes.value.some((type) => !!config[type]?.authors?.enabled)\n})\n\nonMounted(() => {\n if (assetTypes.value[0]) {\n panels.value.push(assetTypes.value[0])\n }\n})\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs class=\"sidebar-info__tabs\">\n <VTab>{{ t('common.damImage.asset.massOperations.title') }}</VTab>\n </VTabs>\n <div class=\"sidebar-info__content\">\n <div class=\"text-body-small pa-3\">\n {{ t('common.damImage.asset.massOperations.description') }}\n </div>\n <VExpansionPanels\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n v-if=\"keywordEnabled || authorEnabled\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.massOperations.general')\"\n value=\"general\"\n >\n <VExpansionPanelText>\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 <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <KeywordRemoteAutocompleteWithCached\n v-model=\"massOperationsKeywords\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n :ext-system=\"extSystem\"\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n :aria-label=\"fillEmptyName(t('common.damImage.asset.model.keywords'))\"\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyKeywords\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n :aria-label=\"replaceName(t('common.damImage.asset.model.keywords'))\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceKeywords\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\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 <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <AuthorRemoteAutocompleteWithCached\n v-model=\"massOperationsAuthors\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n :aria-label=\"fillEmptyName(t('common.damImage.asset.model.authors'))\"\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyAuthors\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n :aria-label=\"replaceName(t('common.damImage.asset.model.authors'))\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceAuthors\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Image)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.image')\"\n :value=\"DamAssetType.Image\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.image\"\n :asset-type=\"DamAssetType.Image\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Video)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.video')\"\n :value=\"DamAssetType.Video\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.video\"\n :asset-type=\"DamAssetType.Video\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Audio)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.audio')\"\n :value=\"DamAssetType.Audio\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.audio\"\n :asset-type=\"DamAssetType.Audio\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Document)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.document')\"\n :value=\"DamAssetType.Document\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.document\"\n :asset-type=\"DamAssetType.Document\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n </div>\n <div class=\"sidebar-info__actions pa-2 d-flex align-center justify-center\">\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(false)\"\n >\n {{ t('common.damImage.asset.massOperations.fillAllEmpty') }}\n </VBtn>\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(true)\"\n >\n {{ t('common.damImage.asset.massOperations.replaceAll') }}\n </VBtn>\n <VBtn\n variant=\"text\"\n size=\"small\"\n @click.stop=\"clearForm\"\n >\n {{ t('common.damImage.asset.massOperations.clearForm') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"AssetQueueSelectedSidebar.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createElementVNode","_createVNode","_component_VTabs","_withCtx","_component_VTab","_createTextVNode","_toDisplayString","_unref","_component_VExpansionPanels","_createBlock","_component_VExpansionPanel","_component_VExpansionPanelText","_component_VRow","_component_VCol","ASystemEntityScope","KeywordRemoteAutocompleteWithCached","_component_VBtn","_withModifiers","_component_VIcon","_component_VTooltip","_createCommentVNode","AuthorRemoteAutocompleteWithCached","AssetCustomMetadataFormMassOperations","ASystemEntityScope_default","AuthorRemoteAutocompleteWithCached_default","KeywordRemoteAutocompleteWithCached_default","AssetCustomMetadataFormMassOperations_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","AssetQueueSelectedSidebar_vue_vue_type_script_setup_true_lang_default","props","__props","massOperationsData","ref","massOperationsKeywords","massOperationsAuthors","useI18n","fillEmptyName","t","replaceName","panels","operations","useLibraryUploadQueueMassOperationsBinding","fillEmptyField","data","replaceField","fillEmptyKeywords","replaceKeywords","fillEmptyAuthors","replaceAuthors","fillAll","elementProperty","value","DamAssetType","forceReplace","authorEnabled","keywordEnabled","clearForm","assetTypes","computed","useDamConfigState","useDamConfigName","config","getDamConfigExtSystem","type","onMounted","openBlock","createElementBlock","createElementVNode","createVNode","VTabs","withCtx","VTab","createTextVNode","toDisplayString","unref","VExpansionPanels","_cache","$event","createBlock","VExpansionPanel","VExpansionPanelText","VRow","VCol","VBtn","withModifiers","VIcon","VTooltip","createCommentVNode"],"sources":["../../../../../src/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { DamAssetType, type DamAssetTypeType } from '@/domains/dam/types/Asset'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport AssetCustomMetadataFormMassOperations from '@/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport type { IntegerId } from '@/shared/types/common'\nimport type { CustomDataValue } from '@/domains/customDataForm/types/CustomDataForm'\nimport { useDamConfigState } from '@/domains/dam/config/composables/damConfigState'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport type { UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport {\n type UploadQueueMassOperationsBinding,\n useLibraryUploadQueueMassOperationsBinding,\n} from '@/domains/dam/uploadQueue/components/uploadQueueBindings'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n extSystem: IntegerId\n /** What the mass operations need from their host. Without it they use the library store. */\n operations?: UploadQueueMassOperationsBinding\n /** The DAM configuration whose rules the operations follow. Inherited when not given. */\n configName?: string\n }>(),\n {\n operations: undefined,\n configName: undefined,\n }\n)\n\nconst massOperationsData = ref<Record<'image' | 'video' | 'audio' | 'document', Record<string, CustomDataValue>>>({\n image: {},\n video: {},\n audio: {},\n document: {},\n})\nconst massOperationsKeywords = ref([])\nconst massOperationsAuthors = ref([])\n\nconst { t } = useI18n()\n\n// Accessible names for the two icon buttons beside a field: the action and the field.\nconst fillEmptyName = (field: string) => t('common.damImage.asset.massOperations.fillOneEmptyField', { field })\nconst replaceName = (field: string) => t('common.damImage.asset.massOperations.replaceOneField', { field })\n\nconst panels = ref<Array<string>>(['general'])\n\n// Created only when the host binds none.\nconst operations = props.operations ?? useLibraryUploadQueueMassOperationsBinding(() => props.queueKey)\n\nconst fillEmptyField = (data: { assetType: DamAssetTypeType; elementProperty: string; value: any }) => {\n operations.fillCustomDataValue(data)\n}\nconst replaceField = (data: { assetType: DamAssetTypeType; elementProperty: string; value: any }) => {\n operations.fillCustomDataValue(data, true)\n}\nconst fillEmptyKeywords = () => {\n operations.fillKeywords(massOperationsKeywords.value)\n}\nconst replaceKeywords = () => {\n operations.fillKeywords(massOperationsKeywords.value, true)\n}\nconst fillEmptyAuthors = () => {\n operations.fillAuthors(massOperationsAuthors.value)\n}\nconst replaceAuthors = () => {\n operations.fillAuthors(massOperationsAuthors.value, true)\n}\nconst fillAll = (forceReplace = false) => {\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.image)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Image,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.video)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Video,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.audio)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Audio,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.document)) {\n operations.fillCustomDataValue(\n {\n assetType: DamAssetType.Document,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n if (authorEnabled.value) {\n forceReplace ? replaceAuthors() : fillEmptyAuthors()\n }\n if (keywordEnabled.value) {\n forceReplace ? replaceKeywords() : fillEmptyKeywords()\n }\n}\nconst clearForm = () => {\n massOperationsData.value = { image: {}, video: {}, audio: {}, document: {} }\n massOperationsAuthors.value = []\n massOperationsKeywords.value = []\n}\n\nconst assetTypes = computed(() => {\n return operations.assetTypes()\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { getDamConfigExtSystem } = useDamConfigState(undefined, useDamConfigName(props.configName))\n\nconst keywordEnabled = computed(() => {\n const config = getDamConfigExtSystem(props.extSystem)\n if (!config) return false\n return assetTypes.value.some((type) => !!config[type]?.keywords?.enabled)\n})\n\nconst authorEnabled = computed(() => {\n const config = getDamConfigExtSystem(props.extSystem)\n if (!config) return false\n return assetTypes.value.some((type) => !!config[type]?.authors?.enabled)\n})\n\nonMounted(() => {\n if (assetTypes.value[0]) {\n panels.value.push(assetTypes.value[0])\n }\n})\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs class=\"sidebar-info__tabs\">\n <VTab>{{ t('common.damImage.asset.massOperations.title') }}</VTab>\n </VTabs>\n <div class=\"sidebar-info__content\">\n <div class=\"text-body-small pa-3\">\n {{ t('common.damImage.asset.massOperations.description') }}\n </div>\n <VExpansionPanels\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n v-if=\"keywordEnabled || authorEnabled\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.massOperations.general')\"\n value=\"general\"\n >\n <VExpansionPanelText>\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 <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <KeywordRemoteAutocompleteWithCached\n v-model=\"massOperationsKeywords\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n :ext-system=\"extSystem\"\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n :aria-label=\"fillEmptyName(t('common.damImage.asset.model.keywords'))\"\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyKeywords\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n :aria-label=\"replaceName(t('common.damImage.asset.model.keywords'))\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceKeywords\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\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 <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <AuthorRemoteAutocompleteWithCached\n v-model=\"massOperationsAuthors\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n :aria-label=\"fillEmptyName(t('common.damImage.asset.model.authors'))\"\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyAuthors\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n :aria-label=\"replaceName(t('common.damImage.asset.model.authors'))\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceAuthors\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Image)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.image')\"\n :value=\"DamAssetType.Image\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.image\"\n :asset-type=\"DamAssetType.Image\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Video)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.video')\"\n :value=\"DamAssetType.Video\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.video\"\n :asset-type=\"DamAssetType.Video\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Audio)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.audio')\"\n :value=\"DamAssetType.Audio\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.audio\"\n :asset-type=\"DamAssetType.Audio\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Document)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.document')\"\n :value=\"DamAssetType.Document\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.document\"\n :asset-type=\"DamAssetType.Document\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n </div>\n <div class=\"sidebar-info__actions pa-2 d-flex align-center justify-center\">\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(false)\"\n >\n {{ t('common.damImage.asset.massOperations.fillAllEmpty') }}\n </VBtn>\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(true)\"\n >\n {{ t('common.damImage.asset.massOperations.replaceAll') }}\n </VBtn>\n <VBtn\n variant=\"text\"\n size=\"small\"\n @click.stop=\"clearForm\"\n >\n {{ t('common.damImage.asset.massOperations.clearForm') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"UploadQueueDialog.js","names":["_sfc_main","UploadQueueDialog_vue_vue_type_script_setup_true_lang_default","UploadQueueDialog_default"],"sources":["../../../../../src/domains/dam/uploadQueue/components/UploadQueueDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n useUploadQueueDialog,\n useUploadQueueDialogDrawn,\n} from '@/domains/dam/uploadQueue/composables/useUploadQueueDialog'\nimport { useI18n } from 'vue-i18n'\nimport UploadQueueEditable from '@/domains/dam/uploadQueue/components/UploadQueueEditable.vue'\nimport { useUploadQueuesStore } from '@/domains/dam/uploadQueue/store/uploadQueuesStore'\nimport { computed, onBeforeUnmount, ref, toRaw, watch } from 'vue'\nimport { useDisplay } from 'vuetify'\nimport { useTheme } from '@/domains/system/composables/themeSettings'\nimport UploadQueueButtonStop from '@/domains/dam/uploadQueue/components/UploadQueueButtonStop.vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport {\n type AssetMetadataBulkItem,\n bulkUpdateAssetsMetadata,\n fetchAsset,\n hasMetadataToSave,\n showMetadataSaveError,\n} from '@/domains/dam/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport AFileInput from '@/domains/ui/file/components/AFileInput.vue'\nimport AImageDropzone from '@/domains/ui/file/components/AFileDropzone.vue'\nimport type { ImageStoreItem } from '@/domains/dam/types/ImageAware'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport { type UploadQueueItem, UploadQueueItemStatus } from '@/domains/dam/types/UploadQueue'\nimport { generateUUIDv1 } from '@/shared/utils/generator'\nimport { mapUploadMetadataToImages } from '@/domains/dam/imageWidget/utils/metadataToImageMap'\nimport { storeToRefs } from 'pinia'\nimport { useAssetDetailStore } from '@/domains/dam/assetDetail/store/assetDetailStore'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { isNull } from '@/shared/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n licenceId: IntegerId\n fileInputKey: number\n extSystem: IntegerId\n accept: string | undefined\n maxSizes: Record<string, number> | undefined\n configName?: string\n }>(),\n {\n configName: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'drop', files: File[]): void\n (e: 'filesInput', files: File[]): void\n (e: 'apply', items: ImageStoreItem[]): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\nconst { uploadQueueDialog, uploadQueueDialogSaving, uploadQueueSidebar, toggleUploadQueueSidebar } =\n useUploadQueueDialog()\n\nconst uploadQueuesStore = useUploadQueuesStore()\nconst queueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst queueProcessedCount = computed(() => {\n return uploadQueuesStore.getQueueProcessedCount(props.queueKey)\n})\n\nconst isUploading = computed(() => {\n return queueTotalCount.value > queueProcessedCount.value\n})\n\nconst isFinished = computed(() => {\n return queueTotalCount.value === queueProcessedCount.value\n})\n\n// Failed uploads, items still waiting for their metadata: \"save\" would send nothing and report it saved.\nconst nothingToSave = computed(() => !items.value.some(hasMetadataToSave))\n// \"Save and apply\" hands the widget the items settled as uploaded (a duplicate and a copy are), saved or not: a\n// failed one has its asset and file ids too, and is no image to hand over.\nconst isUploaded = (item: UploadQueueItem) => item.status === UploadQueueItemStatus.Uploaded\nconst nothingToApply = computed(() => !items.value.some(isUploaded))\n// An uploaded row whose metadata did not come with its file, by a notification that is late or lost: its form is off.\nconst isUploadedWithoutForm = (item: UploadQueueItem): item is UploadQueueItem & { assetId: DocId } =>\n isUploaded(item) && !item.canEditMetadata && !isNull(item.assetId)\n\nconst { t } = useI18n()\nconst { toolbarColor } = useTheme()\nconst { mdAndDown } = useDisplay()\nconst v$ = useVuelidate({ $stopPropagation: true })\nconst { showRecordWas, showValidationError, showErrorsDefault, showWarningT } = useAlerts()\nconst { damClient, endPointAsset, endPointAuthor, customUploadMetadataToImageMap } =\n useCommonAdminCoreDamOptions(damConfigName)\n\nconst saveButtonLoading = ref(false)\nconst saveAndCloseButtonLoading = ref(false)\n\n// Known outside the dialog for as long as either save runs, from the moment it begins: its host takes no file for\n// this queue through an entry of its own meanwhile, as the \"+\" and the dropzone here take none. Taken back with the\n// dialog, also when it goes in the middle of a save: that save may end after another dialog has begun its own.\nwatch(\n () => saveButtonLoading.value || saveAndCloseButtonLoading.value,\n (saving) => {\n uploadQueueDialogSaving.value = saving ? props.queueKey : null\n },\n { flush: 'sync' }\n)\n// A save and apply that waits for the rows it reads ends there once the dialog has gone.\nlet disposed = false\nonBeforeUnmount(() => {\n disposed = true\n if (uploadQueueDialogSaving.value === props.queueKey) uploadQueueDialogSaving.value = null\n})\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nuseUploadQueueDialogDrawn(props.queueKey)\n\nconst onStopConfirm = async () => {\n uploadQueuesStore.stopUpload(props.queueKey)\n uploadQueueDialog.value = null\n}\n\nconst onSave = async () => {\n // The spinning button still takes Enter and Space: a save that runs is not sent again.\n if (saveButtonLoading.value || saveAndCloseButtonLoading.value) return\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveButtonLoading.value = false\n return\n }\n try {\n await bulkUpdateAssetsMetadata(damClient, endPointAsset, itemsRaw)\n showRecordWas('updated')\n } catch (error) {\n showMetadataSaveError(error, props.extSystem, damConfigName)\n } finally {\n saveButtonLoading.value = false\n }\n}\n\nconst onSaveAndApply = async () => {\n if (saveButtonLoading.value || saveAndCloseButtonLoading.value) return\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveAndCloseButtonLoading.value = true\n // The save skips a row without its form: its image is handed over without texts, and its asset stays unsaved. Such\n // a row is asked about once more, as its own refresh asks. A form that comes of it is one the user has not seen:\n // nothing is saved or handed over until the button is pressed again. Where none comes, all goes on as it did.\n const withoutForm = itemsRaw.filter(isUploadedWithoutForm)\n if (withoutForm.length > 0) {\n const shownFor = uploadQueueDialog.value\n await Promise.all(\n withoutForm.map((item) => uploadQueuesStore.refreshAsset(item.assetId, { queueKey: props.queueKey }))\n )\n // Closed while the rows were read (its queue stopped and emptied with it): nothing is saved or handed over. The\n // save went out once the read had answered, for a queue the user had left.\n if (disposed || uploadQueueDialog.value !== shownFor) {\n saveAndCloseButtonLoading.value = false\n return\n }\n // A row given up meanwhile for its asset gone (\"Asset už neexistuje.\"), by this read as the one too many to miss\n // it or by another, is not handed over: the user is told why, as by its refresh. Uploaded before the read, the row\n // was given up by nothing earlier.\n if (withoutForm.some((item) => uploadQueuesStore.isGivenUpMissing(item))) {\n showWarningT('common.damImage.queueItem.assetGone')\n }\n if (withoutForm.some((item) => item.canEditMetadata)) {\n showWarningT('common.damImage.upload.metadataJustLoaded')\n saveAndCloseButtonLoading.value = false\n return\n }\n }\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveAndCloseButtonLoading.value = false\n return\n }\n try {\n let res: AssetMetadataBulkItem[]\n try {\n res = await bulkUpdateAssetsMetadata(damClient, endPointAsset, itemsRaw)\n } catch (error) {\n showMetadataSaveError(error, props.extSystem, damConfigName)\n return\n }\n const uploaded = itemsRaw.filter(isUploaded)\n const mappedItems = customUploadMetadataToImageMap\n ? await customUploadMetadataToImageMap(uploaded, res, damClient, props.extSystem, props.licenceId)\n : await mapUploadMetadataToImages(uploaded, res, damClient, props.extSystem, props.licenceId, endPointAuthor)\n // The save skips a row whose metadata never came, and its image is handed over all the same, without authors.\n // Whether its asset has any is not known: the authors of the DAM are offered only for an asset the save answered\n // for, or those picked in the widget would replace the ones the asset has.\n const savedAssetIds = new Set(res.map((saved) => saved.id))\n // No position is given here: the widget that takes the images gives each its own, after the last it has, also\n // over one a mapping of the application may have put into the image.\n const storeItems: ImageStoreItem[] = mappedItems.map((item) => ({\n key: generateUUIDv1(),\n ...item,\n damAuthors: item.authorIds ?? [],\n showDamAuthors: !!item.assetId && savedAssetIds.has(item.assetId) && (item.authorIds ?? []).length === 0,\n assetId: item.assetId ?? undefined,\n }))\n emit('apply', storeItems)\n } catch (error) {\n // The save is said above. What follows it, the images made of its answer, is said as it was before.\n showErrorsDefault(error)\n } finally {\n saveAndCloseButtonLoading.value = false\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { updateUploadStore } = storeToRefs(assetDetailStore)\n\nconst showDetail = async (id: DocId) => {\n updateUploadStore.value = true\n try {\n await assetDetailStore.open(props.queueKey, () => fetchAsset(damClient, endPointAsset, id))\n } catch (e) {\n showErrorsDefault(e)\n }\n}\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n fullscreen\n scrollable\n class=\"overlay--sidebar\"\n >\n <VCard>\n <div class=\"asset-footer__upload asset-footer--full asset-footer__upload--full pa-0\">\n <div class=\"d-flex w-100 h-100 flex-column\">\n <VToolbar\n class=\"w-100 border-b pr-1\"\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n style=\"overflow-x: auto\"\n >\n <div class=\"d-flex align-center px-2\">\n <div>\n <div\n v-if=\"isUploading\"\n class=\"text-label-large d-flex align-center\"\n >\n {{ t('common.damImage.upload.title') }}\n </div>\n <div\n v-else\n class=\"text-label-large d-flex align-center text-green-darken-3 font-weight-bold\"\n >\n {{ t('common.damImage.upload.titleDone') }}\n </div>\n </div>\n </div>\n <VSpacer />\n <div\n v-if=\"isUploading\"\n class=\"text-body-small d-flex align-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n size=\"16\"\n width=\"2\"\n class=\"mr-1\"\n />\n <div>{{ t('common.damImage.upload.uploading') }} {{ queueProcessedCount + 1 }}/{{ queueTotalCount }}</div>\n </div>\n <div class=\"d-flex align-center pr-3\">\n <VDivider\n v-show=\"isUploading\"\n vertical\n class=\"mx-4 my-2\"\n />\n <ABtnPrimary\n v-if=\"isFinished\"\n :height=\"36\"\n class=\"mr-2\"\n rounded=\"pill\"\n :loading=\"saveAndCloseButtonLoading\"\n :disabled=\"saveButtonLoading || nothingToApply\"\n @click.stop=\"onSaveAndApply\"\n >\n {{ mdAndDown ? t('common.damImage.upload.apply') : t('common.damImage.upload.saveAndApply') }}\n </ABtnPrimary>\n <VBtn\n :aria-label=\"t('common.damImage.upload.save')\"\n variant=\"text\"\n :height=\"36\"\n :width=\"36\"\n class=\"mr-2 text-medium-emphasis\"\n icon\n :loading=\"saveButtonLoading\"\n :disabled=\"saveAndCloseButtonLoading || nothingToSave\"\n @click.stop=\"onSave\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.save') }}\n </VTooltip>\n </VBtn>\n <!-- No file is added while a save runs: \"save and apply\" ends with the host closing the dialog and\n emptying its queue, and a file added meanwhile went with it, half uploaded and without a word. -->\n <AFileInput\n :file-input-key=\"fileInputKey\"\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n multiple\n @files-input=\"emit('filesInput', $event)\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn\n :aria-label=\"t('common.damImage.upload.add')\"\n icon\n variant=\"text\"\n :height=\"34\"\n :width=\"34\"\n class=\"text-medium-emphasis\"\n :disabled=\"saveButtonLoading || saveAndCloseButtonLoading\"\n v-bind=\"fileInputProps\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.add') }}\n </VTooltip>\n </VBtn>\n </template>\n </AFileInput>\n <VDivider\n vertical\n class=\"mx-4 my-2\"\n />\n <VBtn\n :aria-label=\"t('common.damImage.asset.massOperations.title')\"\n :height=\"36\"\n :width=\"36\"\n :active=\"uploadQueueSidebar\"\n :variant=\"uploadQueueSidebar ? 'flat' : 'text'\"\n :color=\"uploadQueueSidebar ? 'secondary' : ''\"\n class=\"mr-2 text-medium-emphasis\"\n icon\n @click.stop=\"toggleUploadQueueSidebar\"\n >\n <VIcon icon=\"mdi-tag-text-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.title') }}\n </VTooltip>\n </VBtn>\n <UploadQueueButtonStop\n data-cy=\"button-close\"\n :button-size=\"36\"\n :is-uploading=\"isUploading\"\n @confirm=\"onStopConfirm\"\n />\n </div>\n </VToolbar>\n <UploadQueueEditable\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :config-name=\"damConfigName\"\n :mass-operations=\"uploadQueueSidebar\"\n @show-detail=\"showDetail\"\n />\n </div>\n <AImageDropzone\n variant=\"fill\"\n transparent\n hover-only\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n :disabled=\"saveButtonLoading || saveAndCloseButtonLoading\"\n @drop=\"emit('drop', $event)\"\n />\n </div>\n </VCard>\n </VDialog>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"UploadQueueDialog.js","names":["_sfc_main","UploadQueueDialog_vue_vue_type_script_setup_true_lang_default","UploadQueueDialog_default"],"sources":["../../../../../src/domains/dam/uploadQueue/components/UploadQueueDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n useUploadQueueDialog,\n useUploadQueueDialogDrawn,\n} from '@/domains/dam/uploadQueue/composables/useUploadQueueDialog'\nimport { useI18n } from 'vue-i18n'\nimport UploadQueueEditable from '@/domains/dam/uploadQueue/components/UploadQueueEditable.vue'\nimport { useUploadQueuesStore } from '@/domains/dam/uploadQueue/store/uploadQueuesStore'\nimport { computed, onBeforeUnmount, ref, toRaw, watch } from 'vue'\nimport { useDisplay } from 'vuetify'\nimport { useTheme } from '@/domains/system/composables/themeSettings'\nimport UploadQueueButtonStop from '@/domains/dam/uploadQueue/components/UploadQueueButtonStop.vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport {\n type AssetMetadataBulkItem,\n bulkUpdateAssetsMetadata,\n fetchAsset,\n hasMetadataToSave,\n showMetadataSaveError,\n} from '@/domains/dam/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport AFileInput from '@/domains/ui/file/components/AFileInput.vue'\nimport AImageDropzone from '@/domains/ui/file/components/AFileDropzone.vue'\nimport type { ImageStoreItem } from '@/domains/dam/types/ImageAware'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport { type UploadQueueItem, UploadQueueItemStatus } from '@/domains/dam/types/UploadQueue'\nimport { generateUUIDv1 } from '@/shared/utils/generator'\nimport { mapUploadMetadataToImages } from '@/domains/dam/imageWidget/utils/metadataToImageMap'\nimport { storeToRefs } from 'pinia'\nimport { useAssetDetailStore } from '@/domains/dam/assetDetail/store/assetDetailStore'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { isNull } from '@/shared/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n licenceId: IntegerId\n fileInputKey: number\n extSystem: IntegerId\n accept: string | undefined\n maxSizes: Record<string, number> | undefined\n configName?: string\n }>(),\n {\n configName: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'drop', files: File[]): void\n (e: 'filesInput', files: File[]): void\n (e: 'apply', items: ImageStoreItem[]): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\nconst { uploadQueueDialog, uploadQueueDialogSaving, uploadQueueSidebar, toggleUploadQueueSidebar } =\n useUploadQueueDialog()\n\nconst uploadQueuesStore = useUploadQueuesStore()\nconst queueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst queueProcessedCount = computed(() => {\n return uploadQueuesStore.getQueueProcessedCount(props.queueKey)\n})\n\nconst isUploading = computed(() => {\n return queueTotalCount.value > queueProcessedCount.value\n})\n\nconst isFinished = computed(() => {\n return queueTotalCount.value === queueProcessedCount.value\n})\n\n// Failed uploads and items still waiting for metadata have nothing to\n// save. Without this check \"save\" would send nothing and report success.\nconst nothingToSave = computed(() => !items.value.some(hasMetadataToSave))\n// \"Save and apply\" hands over the items with status uploaded, saved or not. Duplicates and copies count as uploaded.\n// A failed item also has asset and file ids, but it is not an image to hand over.\nconst isUploaded = (item: UploadQueueItem) => item.status === UploadQueueItemStatus.Uploaded\nconst nothingToApply = computed(() => !items.value.some(isUploaded))\n// An uploaded row whose metadata did not arrive because its notification is late or lost. Its form is disabled.\nconst isUploadedWithoutForm = (item: UploadQueueItem): item is UploadQueueItem & { assetId: DocId } =>\n isUploaded(item) && !item.canEditMetadata && !isNull(item.assetId)\n\nconst { t } = useI18n()\nconst { toolbarColor } = useTheme()\nconst { mdAndDown } = useDisplay()\nconst v$ = useVuelidate({ $stopPropagation: true })\nconst { showRecordWas, showValidationError, showErrorsDefault, showWarningT } = useAlerts()\nconst { damClient, endPointAsset, endPointAuthor, customUploadMetadataToImageMap } =\n useCommonAdminCoreDamOptions(damConfigName)\n\nconst saveButtonLoading = ref(false)\nconst saveAndCloseButtonLoading = ref(false)\n\n// Exposed outside the dialog while either save runs, so the host\n// accepts no file for this queue through its own entry points.\n// The \"+\" and the dropzone here are disabled for the same reason.\n// Reset when the dialog closes, also mid-save, because that save may end after another dialog has started its own.\nwatch(\n () => saveButtonLoading.value || saveAndCloseButtonLoading.value,\n (saving) => {\n uploadQueueDialogSaving.value = saving ? props.queueKey : null\n },\n { flush: 'sync' }\n)\n// A save and apply that waits for row reads stops there once the dialog has unmounted.\nlet disposed = false\nonBeforeUnmount(() => {\n disposed = true\n if (uploadQueueDialogSaving.value === props.queueKey) uploadQueueDialogSaving.value = null\n})\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nuseUploadQueueDialogDrawn(props.queueKey)\n\nconst onStopConfirm = async () => {\n uploadQueuesStore.stopUpload(props.queueKey)\n uploadQueueDialog.value = null\n}\n\nconst onSave = async () => {\n // The loading button still reacts to Enter and Space. This prevents sending a running save again.\n if (saveButtonLoading.value || saveAndCloseButtonLoading.value) return\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveButtonLoading.value = false\n return\n }\n try {\n await bulkUpdateAssetsMetadata(damClient, endPointAsset, itemsRaw)\n showRecordWas('updated')\n } catch (error) {\n showMetadataSaveError(error, props.extSystem, damConfigName)\n } finally {\n saveButtonLoading.value = false\n }\n}\n\nconst onSaveAndApply = async () => {\n if (saveButtonLoading.value || saveAndCloseButtonLoading.value) return\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveAndCloseButtonLoading.value = true\n // The save skips a row without its form. Its image would be handed over without texts and its asset left unsaved.\n // Such rows are read once more, as their refresh does.\n // A form that arrives this way has not been seen by the user, so\n // nothing is saved or handed over until the button is pressed again.\n // If no form arrives, the save continues as before.\n const withoutForm = itemsRaw.filter(isUploadedWithoutForm)\n if (withoutForm.length > 0) {\n const shownFor = uploadQueueDialog.value\n await Promise.all(\n withoutForm.map((item) => uploadQueuesStore.refreshAsset(item.assetId, { queueKey: props.queueKey }))\n )\n // The dialog closed during the read and its queue was stopped and emptied. Nothing is saved or handed over.\n // Otherwise the save would go out for a queue the user has left.\n if (disposed || uploadQueueDialog.value !== shownFor) {\n saveAndCloseButtonLoading.value = false\n return\n }\n // A row given up meanwhile because its asset is gone (\"Asset už\n // neexistuje.\") is not handed over. The user is warned, as on refresh.\n // It may be given up by this read or by another one. A row\n // uploaded before the read could not have been given up earlier.\n if (withoutForm.some((item) => uploadQueuesStore.isGivenUpMissing(item))) {\n showWarningT('common.damImage.queueItem.assetGone')\n }\n if (withoutForm.some((item) => item.canEditMetadata)) {\n showWarningT('common.damImage.upload.metadataJustLoaded')\n saveAndCloseButtonLoading.value = false\n return\n }\n }\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveAndCloseButtonLoading.value = false\n return\n }\n try {\n let res: AssetMetadataBulkItem[]\n try {\n res = await bulkUpdateAssetsMetadata(damClient, endPointAsset, itemsRaw)\n } catch (error) {\n showMetadataSaveError(error, props.extSystem, damConfigName)\n return\n }\n const uploaded = itemsRaw.filter(isUploaded)\n const mappedItems = customUploadMetadataToImageMap\n ? await customUploadMetadataToImageMap(uploaded, res, damClient, props.extSystem, props.licenceId)\n : await mapUploadMetadataToImages(uploaded, res, damClient, props.extSystem, props.licenceId, endPointAuthor)\n // The save skips a row whose metadata never came, but its image is still handed over, without authors.\n // Its DAM authors are unknown. They are offered only for assets the save answered\n // for, otherwise the widget's picked authors would replace the asset's own.\n const savedAssetIds = new Set(res.map((saved) => saved.id))\n // No position is set here. The receiving widget assigns each image a position\n // after its last one, overriding any position an application mapping set.\n const storeItems: ImageStoreItem[] = mappedItems.map((item) => ({\n key: generateUUIDv1(),\n ...item,\n damAuthors: item.authorIds ?? [],\n showDamAuthors: !!item.assetId && savedAssetIds.has(item.assetId) && (item.authorIds ?? []).length === 0,\n assetId: item.assetId ?? undefined,\n }))\n emit('apply', storeItems)\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n saveAndCloseButtonLoading.value = false\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { updateUploadStore } = storeToRefs(assetDetailStore)\n\nconst showDetail = async (id: DocId) => {\n updateUploadStore.value = true\n try {\n await assetDetailStore.open(props.queueKey, () => fetchAsset(damClient, endPointAsset, id))\n } catch (e) {\n showErrorsDefault(e)\n }\n}\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n fullscreen\n scrollable\n class=\"overlay--sidebar\"\n >\n <VCard>\n <div class=\"asset-footer__upload asset-footer--full asset-footer__upload--full pa-0\">\n <div class=\"d-flex w-100 h-100 flex-column\">\n <VToolbar\n class=\"w-100 border-b pr-1\"\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n style=\"overflow-x: auto\"\n >\n <div class=\"d-flex align-center px-2\">\n <div>\n <div\n v-if=\"isUploading\"\n class=\"text-label-large d-flex align-center\"\n >\n {{ t('common.damImage.upload.title') }}\n </div>\n <div\n v-else\n class=\"text-label-large d-flex align-center text-green-darken-3 font-weight-bold\"\n >\n {{ t('common.damImage.upload.titleDone') }}\n </div>\n </div>\n </div>\n <VSpacer />\n <div\n v-if=\"isUploading\"\n class=\"text-body-small d-flex align-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n size=\"16\"\n width=\"2\"\n class=\"mr-1\"\n />\n <div>{{ t('common.damImage.upload.uploading') }} {{ queueProcessedCount + 1 }}/{{ queueTotalCount }}</div>\n </div>\n <div class=\"d-flex align-center pr-3\">\n <VDivider\n v-show=\"isUploading\"\n vertical\n class=\"mx-4 my-2\"\n />\n <ABtnPrimary\n v-if=\"isFinished\"\n :height=\"36\"\n class=\"mr-2\"\n rounded=\"pill\"\n :loading=\"saveAndCloseButtonLoading\"\n :disabled=\"saveButtonLoading || nothingToApply\"\n @click.stop=\"onSaveAndApply\"\n >\n {{ mdAndDown ? t('common.damImage.upload.apply') : t('common.damImage.upload.saveAndApply') }}\n </ABtnPrimary>\n <VBtn\n :aria-label=\"t('common.damImage.upload.save')\"\n variant=\"text\"\n :height=\"36\"\n :width=\"36\"\n class=\"mr-2 text-medium-emphasis\"\n icon\n :loading=\"saveButtonLoading\"\n :disabled=\"saveAndCloseButtonLoading || nothingToSave\"\n @click.stop=\"onSave\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.save') }}\n </VTooltip>\n </VBtn>\n <!--\n No file can be added while a save runs. \"Save and apply\" ends\n with the host closing the dialog and emptying its queue.\n A file added meanwhile would be dropped half uploaded, without notice.\n -->\n <AFileInput\n :file-input-key=\"fileInputKey\"\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n multiple\n @files-input=\"emit('filesInput', $event)\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn\n :aria-label=\"t('common.damImage.upload.add')\"\n icon\n variant=\"text\"\n :height=\"34\"\n :width=\"34\"\n class=\"text-medium-emphasis\"\n :disabled=\"saveButtonLoading || saveAndCloseButtonLoading\"\n v-bind=\"fileInputProps\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.add') }}\n </VTooltip>\n </VBtn>\n </template>\n </AFileInput>\n <VDivider\n vertical\n class=\"mx-4 my-2\"\n />\n <VBtn\n :aria-label=\"t('common.damImage.asset.massOperations.title')\"\n :height=\"36\"\n :width=\"36\"\n :active=\"uploadQueueSidebar\"\n :variant=\"uploadQueueSidebar ? 'flat' : 'text'\"\n :color=\"uploadQueueSidebar ? 'secondary' : ''\"\n class=\"mr-2 text-medium-emphasis\"\n icon\n @click.stop=\"toggleUploadQueueSidebar\"\n >\n <VIcon icon=\"mdi-tag-text-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.title') }}\n </VTooltip>\n </VBtn>\n <UploadQueueButtonStop\n data-cy=\"button-close\"\n :button-size=\"36\"\n :is-uploading=\"isUploading\"\n @confirm=\"onStopConfirm\"\n />\n </div>\n </VToolbar>\n <UploadQueueEditable\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :config-name=\"damConfigName\"\n :mass-operations=\"uploadQueueSidebar\"\n @show-detail=\"showDetail\"\n />\n </div>\n <AImageDropzone\n variant=\"fill\"\n transparent\n hover-only\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n :disabled=\"saveButtonLoading || saveAndCloseButtonLoading\"\n @drop=\"emit('drop', $event)\"\n />\n </div>\n </VCard>\n </VDialog>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"UploadQueueDialog.vue_vue_type_script_setup_true_lang.js","names":["_resolveComponent","_openBlock","_createBlock","_component_VDialog","_withCtx","_createVNode","_component_VCard","_createElementVNode","_component_VToolbar","_unref","_createElementBlock","_toDisplayString","_component_VSpacer","_component_VProgressCircular","_createCommentVNode","_withDirectives","_component_VDivider","_vShow","_withModifiers","_createTextVNode","_component_VBtn","_component_VIcon","_component_VTooltip","AFileInput","_mergeProps","UploadQueueButtonStop","UploadQueueEditable","AImageDropzone","AFileDropzone_default","AFileInput_default","UploadQueueEditable_default","UploadQueueButtonStop_default","useVuelidate","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","UploadQueueDialog_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","damConfigName","useDamConfigName","useUploadQueueDialog","uploadQueuesStore","useUploadQueuesStore","queueTotalCount","computed","items","queueProcessedCount","isUploading","isFinished","nothingToSave","hasMetadataToSave","isUploaded","item","UploadQueueItemStatus","nothingToApply","isUploadedWithoutForm","isNull","useI18n","useTheme","useDisplay","v$","useAlerts","useCommonAdminCoreDamOptions","saveButtonLoading","ref","saveAndCloseButtonLoading","saving","disposed","onBeforeUnmount","uploadQueueDialogSaving","useUploadQueueDialogDrawn","onStopConfirm","onSave","itemsRaw","toRaw","showValidationError","bulkUpdateAssetsMetadata","damClient","endPointAsset","showRecordWas","error","onSaveAndApply","withoutForm","shownFor","uploadQueueDialog","showWarningT","res","uploaded","mappedItems","customUploadMetadataToImageMap","mapUploadMetadataToImages","endPointAuthor","savedAssetIds","saved","storeItems","generateUUIDv1","assetDetailStore","useAssetDetailStore","storeToRefs","showDetail","fetchAsset","id","_component_ABtnPrimary","resolveComponent","openBlock","createBlock","VDialog","withCtx","createVNode","VCard","createElementVNode","VToolbar","unref","toolbarColor","createElementBlock","toDisplayString","t","VSpacer","VProgressCircular","createCommentVNode","withDirectives","VDivider","vShow","withModifiers","createTextVNode","mdAndDown","VBtn","VIcon","VTooltip","_cache","$event","fileInputProps","mergeProps","uploadQueueSidebar","toggleUploadQueueSidebar"],"sources":["../../../../../src/domains/dam/uploadQueue/components/UploadQueueDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n useUploadQueueDialog,\n useUploadQueueDialogDrawn,\n} from '@/domains/dam/uploadQueue/composables/useUploadQueueDialog'\nimport { useI18n } from 'vue-i18n'\nimport UploadQueueEditable from '@/domains/dam/uploadQueue/components/UploadQueueEditable.vue'\nimport { useUploadQueuesStore } from '@/domains/dam/uploadQueue/store/uploadQueuesStore'\nimport { computed, onBeforeUnmount, ref, toRaw, watch } from 'vue'\nimport { useDisplay } from 'vuetify'\nimport { useTheme } from '@/domains/system/composables/themeSettings'\nimport UploadQueueButtonStop from '@/domains/dam/uploadQueue/components/UploadQueueButtonStop.vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport {\n type AssetMetadataBulkItem,\n bulkUpdateAssetsMetadata,\n fetchAsset,\n hasMetadataToSave,\n showMetadataSaveError,\n} from '@/domains/dam/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport AFileInput from '@/domains/ui/file/components/AFileInput.vue'\nimport AImageDropzone from '@/domains/ui/file/components/AFileDropzone.vue'\nimport type { ImageStoreItem } from '@/domains/dam/types/ImageAware'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport { type UploadQueueItem, UploadQueueItemStatus } from '@/domains/dam/types/UploadQueue'\nimport { generateUUIDv1 } from '@/shared/utils/generator'\nimport { mapUploadMetadataToImages } from '@/domains/dam/imageWidget/utils/metadataToImageMap'\nimport { storeToRefs } from 'pinia'\nimport { useAssetDetailStore } from '@/domains/dam/assetDetail/store/assetDetailStore'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { isNull } from '@/shared/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n licenceId: IntegerId\n fileInputKey: number\n extSystem: IntegerId\n accept: string | undefined\n maxSizes: Record<string, number> | undefined\n configName?: string\n }>(),\n {\n configName: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'drop', files: File[]): void\n (e: 'filesInput', files: File[]): void\n (e: 'apply', items: ImageStoreItem[]): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\nconst { uploadQueueDialog, uploadQueueDialogSaving, uploadQueueSidebar, toggleUploadQueueSidebar } =\n useUploadQueueDialog()\n\nconst uploadQueuesStore = useUploadQueuesStore()\nconst queueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst queueProcessedCount = computed(() => {\n return uploadQueuesStore.getQueueProcessedCount(props.queueKey)\n})\n\nconst isUploading = computed(() => {\n return queueTotalCount.value > queueProcessedCount.value\n})\n\nconst isFinished = computed(() => {\n return queueTotalCount.value === queueProcessedCount.value\n})\n\n// Failed uploads, items still waiting for their metadata: \"save\" would send nothing and report it saved.\nconst nothingToSave = computed(() => !items.value.some(hasMetadataToSave))\n// \"Save and apply\" hands the widget the items settled as uploaded (a duplicate and a copy are), saved or not: a\n// failed one has its asset and file ids too, and is no image to hand over.\nconst isUploaded = (item: UploadQueueItem) => item.status === UploadQueueItemStatus.Uploaded\nconst nothingToApply = computed(() => !items.value.some(isUploaded))\n// An uploaded row whose metadata did not come with its file, by a notification that is late or lost: its form is off.\nconst isUploadedWithoutForm = (item: UploadQueueItem): item is UploadQueueItem & { assetId: DocId } =>\n isUploaded(item) && !item.canEditMetadata && !isNull(item.assetId)\n\nconst { t } = useI18n()\nconst { toolbarColor } = useTheme()\nconst { mdAndDown } = useDisplay()\nconst v$ = useVuelidate({ $stopPropagation: true })\nconst { showRecordWas, showValidationError, showErrorsDefault, showWarningT } = useAlerts()\nconst { damClient, endPointAsset, endPointAuthor, customUploadMetadataToImageMap } =\n useCommonAdminCoreDamOptions(damConfigName)\n\nconst saveButtonLoading = ref(false)\nconst saveAndCloseButtonLoading = ref(false)\n\n// Known outside the dialog for as long as either save runs, from the moment it begins: its host takes no file for\n// this queue through an entry of its own meanwhile, as the \"+\" and the dropzone here take none. Taken back with the\n// dialog, also when it goes in the middle of a save: that save may end after another dialog has begun its own.\nwatch(\n () => saveButtonLoading.value || saveAndCloseButtonLoading.value,\n (saving) => {\n uploadQueueDialogSaving.value = saving ? props.queueKey : null\n },\n { flush: 'sync' }\n)\n// A save and apply that waits for the rows it reads ends there once the dialog has gone.\nlet disposed = false\nonBeforeUnmount(() => {\n disposed = true\n if (uploadQueueDialogSaving.value === props.queueKey) uploadQueueDialogSaving.value = null\n})\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nuseUploadQueueDialogDrawn(props.queueKey)\n\nconst onStopConfirm = async () => {\n uploadQueuesStore.stopUpload(props.queueKey)\n uploadQueueDialog.value = null\n}\n\nconst onSave = async () => {\n // The spinning button still takes Enter and Space: a save that runs is not sent again.\n if (saveButtonLoading.value || saveAndCloseButtonLoading.value) return\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveButtonLoading.value = false\n return\n }\n try {\n await bulkUpdateAssetsMetadata(damClient, endPointAsset, itemsRaw)\n showRecordWas('updated')\n } catch (error) {\n showMetadataSaveError(error, props.extSystem, damConfigName)\n } finally {\n saveButtonLoading.value = false\n }\n}\n\nconst onSaveAndApply = async () => {\n if (saveButtonLoading.value || saveAndCloseButtonLoading.value) return\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveAndCloseButtonLoading.value = true\n // The save skips a row without its form: its image is handed over without texts, and its asset stays unsaved. Such\n // a row is asked about once more, as its own refresh asks. A form that comes of it is one the user has not seen:\n // nothing is saved or handed over until the button is pressed again. Where none comes, all goes on as it did.\n const withoutForm = itemsRaw.filter(isUploadedWithoutForm)\n if (withoutForm.length > 0) {\n const shownFor = uploadQueueDialog.value\n await Promise.all(\n withoutForm.map((item) => uploadQueuesStore.refreshAsset(item.assetId, { queueKey: props.queueKey }))\n )\n // Closed while the rows were read (its queue stopped and emptied with it): nothing is saved or handed over. The\n // save went out once the read had answered, for a queue the user had left.\n if (disposed || uploadQueueDialog.value !== shownFor) {\n saveAndCloseButtonLoading.value = false\n return\n }\n // A row given up meanwhile for its asset gone (\"Asset už neexistuje.\"), by this read as the one too many to miss\n // it or by another, is not handed over: the user is told why, as by its refresh. Uploaded before the read, the row\n // was given up by nothing earlier.\n if (withoutForm.some((item) => uploadQueuesStore.isGivenUpMissing(item))) {\n showWarningT('common.damImage.queueItem.assetGone')\n }\n if (withoutForm.some((item) => item.canEditMetadata)) {\n showWarningT('common.damImage.upload.metadataJustLoaded')\n saveAndCloseButtonLoading.value = false\n return\n }\n }\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveAndCloseButtonLoading.value = false\n return\n }\n try {\n let res: AssetMetadataBulkItem[]\n try {\n res = await bulkUpdateAssetsMetadata(damClient, endPointAsset, itemsRaw)\n } catch (error) {\n showMetadataSaveError(error, props.extSystem, damConfigName)\n return\n }\n const uploaded = itemsRaw.filter(isUploaded)\n const mappedItems = customUploadMetadataToImageMap\n ? await customUploadMetadataToImageMap(uploaded, res, damClient, props.extSystem, props.licenceId)\n : await mapUploadMetadataToImages(uploaded, res, damClient, props.extSystem, props.licenceId, endPointAuthor)\n // The save skips a row whose metadata never came, and its image is handed over all the same, without authors.\n // Whether its asset has any is not known: the authors of the DAM are offered only for an asset the save answered\n // for, or those picked in the widget would replace the ones the asset has.\n const savedAssetIds = new Set(res.map((saved) => saved.id))\n // No position is given here: the widget that takes the images gives each its own, after the last it has, also\n // over one a mapping of the application may have put into the image.\n const storeItems: ImageStoreItem[] = mappedItems.map((item) => ({\n key: generateUUIDv1(),\n ...item,\n damAuthors: item.authorIds ?? [],\n showDamAuthors: !!item.assetId && savedAssetIds.has(item.assetId) && (item.authorIds ?? []).length === 0,\n assetId: item.assetId ?? undefined,\n }))\n emit('apply', storeItems)\n } catch (error) {\n // The save is said above. What follows it, the images made of its answer, is said as it was before.\n showErrorsDefault(error)\n } finally {\n saveAndCloseButtonLoading.value = false\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { updateUploadStore } = storeToRefs(assetDetailStore)\n\nconst showDetail = async (id: DocId) => {\n updateUploadStore.value = true\n try {\n await assetDetailStore.open(props.queueKey, () => fetchAsset(damClient, endPointAsset, id))\n } catch (e) {\n showErrorsDefault(e)\n }\n}\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n fullscreen\n scrollable\n class=\"overlay--sidebar\"\n >\n <VCard>\n <div class=\"asset-footer__upload asset-footer--full asset-footer__upload--full pa-0\">\n <div class=\"d-flex w-100 h-100 flex-column\">\n <VToolbar\n class=\"w-100 border-b pr-1\"\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n style=\"overflow-x: auto\"\n >\n <div class=\"d-flex align-center px-2\">\n <div>\n <div\n v-if=\"isUploading\"\n class=\"text-label-large d-flex align-center\"\n >\n {{ t('common.damImage.upload.title') }}\n </div>\n <div\n v-else\n class=\"text-label-large d-flex align-center text-green-darken-3 font-weight-bold\"\n >\n {{ t('common.damImage.upload.titleDone') }}\n </div>\n </div>\n </div>\n <VSpacer />\n <div\n v-if=\"isUploading\"\n class=\"text-body-small d-flex align-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n size=\"16\"\n width=\"2\"\n class=\"mr-1\"\n />\n <div>{{ t('common.damImage.upload.uploading') }} {{ queueProcessedCount + 1 }}/{{ queueTotalCount }}</div>\n </div>\n <div class=\"d-flex align-center pr-3\">\n <VDivider\n v-show=\"isUploading\"\n vertical\n class=\"mx-4 my-2\"\n />\n <ABtnPrimary\n v-if=\"isFinished\"\n :height=\"36\"\n class=\"mr-2\"\n rounded=\"pill\"\n :loading=\"saveAndCloseButtonLoading\"\n :disabled=\"saveButtonLoading || nothingToApply\"\n @click.stop=\"onSaveAndApply\"\n >\n {{ mdAndDown ? t('common.damImage.upload.apply') : t('common.damImage.upload.saveAndApply') }}\n </ABtnPrimary>\n <VBtn\n :aria-label=\"t('common.damImage.upload.save')\"\n variant=\"text\"\n :height=\"36\"\n :width=\"36\"\n class=\"mr-2 text-medium-emphasis\"\n icon\n :loading=\"saveButtonLoading\"\n :disabled=\"saveAndCloseButtonLoading || nothingToSave\"\n @click.stop=\"onSave\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.save') }}\n </VTooltip>\n </VBtn>\n <!-- No file is added while a save runs: \"save and apply\" ends with the host closing the dialog and\n emptying its queue, and a file added meanwhile went with it, half uploaded and without a word. -->\n <AFileInput\n :file-input-key=\"fileInputKey\"\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n multiple\n @files-input=\"emit('filesInput', $event)\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn\n :aria-label=\"t('common.damImage.upload.add')\"\n icon\n variant=\"text\"\n :height=\"34\"\n :width=\"34\"\n class=\"text-medium-emphasis\"\n :disabled=\"saveButtonLoading || saveAndCloseButtonLoading\"\n v-bind=\"fileInputProps\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.add') }}\n </VTooltip>\n </VBtn>\n </template>\n </AFileInput>\n <VDivider\n vertical\n class=\"mx-4 my-2\"\n />\n <VBtn\n :aria-label=\"t('common.damImage.asset.massOperations.title')\"\n :height=\"36\"\n :width=\"36\"\n :active=\"uploadQueueSidebar\"\n :variant=\"uploadQueueSidebar ? 'flat' : 'text'\"\n :color=\"uploadQueueSidebar ? 'secondary' : ''\"\n class=\"mr-2 text-medium-emphasis\"\n icon\n @click.stop=\"toggleUploadQueueSidebar\"\n >\n <VIcon icon=\"mdi-tag-text-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.title') }}\n </VTooltip>\n </VBtn>\n <UploadQueueButtonStop\n data-cy=\"button-close\"\n :button-size=\"36\"\n :is-uploading=\"isUploading\"\n @confirm=\"onStopConfirm\"\n />\n </div>\n </VToolbar>\n <UploadQueueEditable\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :config-name=\"damConfigName\"\n :mass-operations=\"uploadQueueSidebar\"\n @show-detail=\"showDetail\"\n />\n </div>\n <AImageDropzone\n variant=\"fill\"\n transparent\n hover-only\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n :disabled=\"saveButtonLoading || saveAndCloseButtonLoading\"\n @drop=\"emit('drop', $event)\"\n />\n </div>\n </VCard>\n </VDialog>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"UploadQueueDialog.vue_vue_type_script_setup_true_lang.js","names":["_resolveComponent","_openBlock","_createBlock","_component_VDialog","_withCtx","_createVNode","_component_VCard","_createElementVNode","_component_VToolbar","_unref","_createElementBlock","_toDisplayString","_component_VSpacer","_component_VProgressCircular","_createCommentVNode","_withDirectives","_component_VDivider","_vShow","_withModifiers","_createTextVNode","_component_VBtn","_component_VIcon","_component_VTooltip","AFileInput","_mergeProps","UploadQueueButtonStop","UploadQueueEditable","AImageDropzone","AFileDropzone_default","AFileInput_default","UploadQueueEditable_default","UploadQueueButtonStop_default","useVuelidate","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","UploadQueueDialog_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","damConfigName","useDamConfigName","useUploadQueueDialog","uploadQueuesStore","useUploadQueuesStore","queueTotalCount","computed","items","queueProcessedCount","isUploading","isFinished","nothingToSave","hasMetadataToSave","isUploaded","item","UploadQueueItemStatus","nothingToApply","isUploadedWithoutForm","isNull","useI18n","useTheme","useDisplay","v$","useAlerts","useCommonAdminCoreDamOptions","saveButtonLoading","ref","saveAndCloseButtonLoading","saving","disposed","onBeforeUnmount","uploadQueueDialogSaving","useUploadQueueDialogDrawn","onStopConfirm","onSave","itemsRaw","toRaw","showValidationError","bulkUpdateAssetsMetadata","damClient","endPointAsset","showRecordWas","error","onSaveAndApply","withoutForm","shownFor","uploadQueueDialog","showWarningT","res","uploaded","mappedItems","customUploadMetadataToImageMap","mapUploadMetadataToImages","endPointAuthor","savedAssetIds","saved","storeItems","generateUUIDv1","assetDetailStore","useAssetDetailStore","storeToRefs","showDetail","fetchAsset","id","_component_ABtnPrimary","resolveComponent","openBlock","createBlock","VDialog","withCtx","createVNode","VCard","createElementVNode","VToolbar","unref","toolbarColor","createElementBlock","toDisplayString","t","VSpacer","VProgressCircular","createCommentVNode","withDirectives","VDivider","vShow","withModifiers","createTextVNode","mdAndDown","VBtn","VIcon","VTooltip","_cache","$event","fileInputProps","mergeProps","uploadQueueSidebar","toggleUploadQueueSidebar"],"sources":["../../../../../src/domains/dam/uploadQueue/components/UploadQueueDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n useUploadQueueDialog,\n useUploadQueueDialogDrawn,\n} from '@/domains/dam/uploadQueue/composables/useUploadQueueDialog'\nimport { useI18n } from 'vue-i18n'\nimport UploadQueueEditable from '@/domains/dam/uploadQueue/components/UploadQueueEditable.vue'\nimport { useUploadQueuesStore } from '@/domains/dam/uploadQueue/store/uploadQueuesStore'\nimport { computed, onBeforeUnmount, ref, toRaw, watch } from 'vue'\nimport { useDisplay } from 'vuetify'\nimport { useTheme } from '@/domains/system/composables/themeSettings'\nimport UploadQueueButtonStop from '@/domains/dam/uploadQueue/components/UploadQueueButtonStop.vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport {\n type AssetMetadataBulkItem,\n bulkUpdateAssetsMetadata,\n fetchAsset,\n hasMetadataToSave,\n showMetadataSaveError,\n} from '@/domains/dam/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport AFileInput from '@/domains/ui/file/components/AFileInput.vue'\nimport AImageDropzone from '@/domains/ui/file/components/AFileDropzone.vue'\nimport type { ImageStoreItem } from '@/domains/dam/types/ImageAware'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport { type UploadQueueItem, UploadQueueItemStatus } from '@/domains/dam/types/UploadQueue'\nimport { generateUUIDv1 } from '@/shared/utils/generator'\nimport { mapUploadMetadataToImages } from '@/domains/dam/imageWidget/utils/metadataToImageMap'\nimport { storeToRefs } from 'pinia'\nimport { useAssetDetailStore } from '@/domains/dam/assetDetail/store/assetDetailStore'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { isNull } from '@/shared/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n licenceId: IntegerId\n fileInputKey: number\n extSystem: IntegerId\n accept: string | undefined\n maxSizes: Record<string, number> | undefined\n configName?: string\n }>(),\n {\n configName: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'drop', files: File[]): void\n (e: 'filesInput', files: File[]): void\n (e: 'apply', items: ImageStoreItem[]): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\nconst { uploadQueueDialog, uploadQueueDialogSaving, uploadQueueSidebar, toggleUploadQueueSidebar } =\n useUploadQueueDialog()\n\nconst uploadQueuesStore = useUploadQueuesStore()\nconst queueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst queueProcessedCount = computed(() => {\n return uploadQueuesStore.getQueueProcessedCount(props.queueKey)\n})\n\nconst isUploading = computed(() => {\n return queueTotalCount.value > queueProcessedCount.value\n})\n\nconst isFinished = computed(() => {\n return queueTotalCount.value === queueProcessedCount.value\n})\n\n// Failed uploads and items still waiting for metadata have nothing to\n// save. Without this check \"save\" would send nothing and report success.\nconst nothingToSave = computed(() => !items.value.some(hasMetadataToSave))\n// \"Save and apply\" hands over the items with status uploaded, saved or not. Duplicates and copies count as uploaded.\n// A failed item also has asset and file ids, but it is not an image to hand over.\nconst isUploaded = (item: UploadQueueItem) => item.status === UploadQueueItemStatus.Uploaded\nconst nothingToApply = computed(() => !items.value.some(isUploaded))\n// An uploaded row whose metadata did not arrive because its notification is late or lost. Its form is disabled.\nconst isUploadedWithoutForm = (item: UploadQueueItem): item is UploadQueueItem & { assetId: DocId } =>\n isUploaded(item) && !item.canEditMetadata && !isNull(item.assetId)\n\nconst { t } = useI18n()\nconst { toolbarColor } = useTheme()\nconst { mdAndDown } = useDisplay()\nconst v$ = useVuelidate({ $stopPropagation: true })\nconst { showRecordWas, showValidationError, showErrorsDefault, showWarningT } = useAlerts()\nconst { damClient, endPointAsset, endPointAuthor, customUploadMetadataToImageMap } =\n useCommonAdminCoreDamOptions(damConfigName)\n\nconst saveButtonLoading = ref(false)\nconst saveAndCloseButtonLoading = ref(false)\n\n// Exposed outside the dialog while either save runs, so the host\n// accepts no file for this queue through its own entry points.\n// The \"+\" and the dropzone here are disabled for the same reason.\n// Reset when the dialog closes, also mid-save, because that save may end after another dialog has started its own.\nwatch(\n () => saveButtonLoading.value || saveAndCloseButtonLoading.value,\n (saving) => {\n uploadQueueDialogSaving.value = saving ? props.queueKey : null\n },\n { flush: 'sync' }\n)\n// A save and apply that waits for row reads stops there once the dialog has unmounted.\nlet disposed = false\nonBeforeUnmount(() => {\n disposed = true\n if (uploadQueueDialogSaving.value === props.queueKey) uploadQueueDialogSaving.value = null\n})\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nuseUploadQueueDialogDrawn(props.queueKey)\n\nconst onStopConfirm = async () => {\n uploadQueuesStore.stopUpload(props.queueKey)\n uploadQueueDialog.value = null\n}\n\nconst onSave = async () => {\n // The loading button still reacts to Enter and Space. This prevents sending a running save again.\n if (saveButtonLoading.value || saveAndCloseButtonLoading.value) return\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveButtonLoading.value = false\n return\n }\n try {\n await bulkUpdateAssetsMetadata(damClient, endPointAsset, itemsRaw)\n showRecordWas('updated')\n } catch (error) {\n showMetadataSaveError(error, props.extSystem, damConfigName)\n } finally {\n saveButtonLoading.value = false\n }\n}\n\nconst onSaveAndApply = async () => {\n if (saveButtonLoading.value || saveAndCloseButtonLoading.value) return\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveAndCloseButtonLoading.value = true\n // The save skips a row without its form. Its image would be handed over without texts and its asset left unsaved.\n // Such rows are read once more, as their refresh does.\n // A form that arrives this way has not been seen by the user, so\n // nothing is saved or handed over until the button is pressed again.\n // If no form arrives, the save continues as before.\n const withoutForm = itemsRaw.filter(isUploadedWithoutForm)\n if (withoutForm.length > 0) {\n const shownFor = uploadQueueDialog.value\n await Promise.all(\n withoutForm.map((item) => uploadQueuesStore.refreshAsset(item.assetId, { queueKey: props.queueKey }))\n )\n // The dialog closed during the read and its queue was stopped and emptied. Nothing is saved or handed over.\n // Otherwise the save would go out for a queue the user has left.\n if (disposed || uploadQueueDialog.value !== shownFor) {\n saveAndCloseButtonLoading.value = false\n return\n }\n // A row given up meanwhile because its asset is gone (\"Asset už\n // neexistuje.\") is not handed over. The user is warned, as on refresh.\n // It may be given up by this read or by another one. A row\n // uploaded before the read could not have been given up earlier.\n if (withoutForm.some((item) => uploadQueuesStore.isGivenUpMissing(item))) {\n showWarningT('common.damImage.queueItem.assetGone')\n }\n if (withoutForm.some((item) => item.canEditMetadata)) {\n showWarningT('common.damImage.upload.metadataJustLoaded')\n saveAndCloseButtonLoading.value = false\n return\n }\n }\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveAndCloseButtonLoading.value = false\n return\n }\n try {\n let res: AssetMetadataBulkItem[]\n try {\n res = await bulkUpdateAssetsMetadata(damClient, endPointAsset, itemsRaw)\n } catch (error) {\n showMetadataSaveError(error, props.extSystem, damConfigName)\n return\n }\n const uploaded = itemsRaw.filter(isUploaded)\n const mappedItems = customUploadMetadataToImageMap\n ? await customUploadMetadataToImageMap(uploaded, res, damClient, props.extSystem, props.licenceId)\n : await mapUploadMetadataToImages(uploaded, res, damClient, props.extSystem, props.licenceId, endPointAuthor)\n // The save skips a row whose metadata never came, but its image is still handed over, without authors.\n // Its DAM authors are unknown. They are offered only for assets the save answered\n // for, otherwise the widget's picked authors would replace the asset's own.\n const savedAssetIds = new Set(res.map((saved) => saved.id))\n // No position is set here. The receiving widget assigns each image a position\n // after its last one, overriding any position an application mapping set.\n const storeItems: ImageStoreItem[] = mappedItems.map((item) => ({\n key: generateUUIDv1(),\n ...item,\n damAuthors: item.authorIds ?? [],\n showDamAuthors: !!item.assetId && savedAssetIds.has(item.assetId) && (item.authorIds ?? []).length === 0,\n assetId: item.assetId ?? undefined,\n }))\n emit('apply', storeItems)\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n saveAndCloseButtonLoading.value = false\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { updateUploadStore } = storeToRefs(assetDetailStore)\n\nconst showDetail = async (id: DocId) => {\n updateUploadStore.value = true\n try {\n await assetDetailStore.open(props.queueKey, () => fetchAsset(damClient, endPointAsset, id))\n } catch (e) {\n showErrorsDefault(e)\n }\n}\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n fullscreen\n scrollable\n class=\"overlay--sidebar\"\n >\n <VCard>\n <div class=\"asset-footer__upload asset-footer--full asset-footer__upload--full pa-0\">\n <div class=\"d-flex w-100 h-100 flex-column\">\n <VToolbar\n class=\"w-100 border-b pr-1\"\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n style=\"overflow-x: auto\"\n >\n <div class=\"d-flex align-center px-2\">\n <div>\n <div\n v-if=\"isUploading\"\n class=\"text-label-large d-flex align-center\"\n >\n {{ t('common.damImage.upload.title') }}\n </div>\n <div\n v-else\n class=\"text-label-large d-flex align-center text-green-darken-3 font-weight-bold\"\n >\n {{ t('common.damImage.upload.titleDone') }}\n </div>\n </div>\n </div>\n <VSpacer />\n <div\n v-if=\"isUploading\"\n class=\"text-body-small d-flex align-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n size=\"16\"\n width=\"2\"\n class=\"mr-1\"\n />\n <div>{{ t('common.damImage.upload.uploading') }} {{ queueProcessedCount + 1 }}/{{ queueTotalCount }}</div>\n </div>\n <div class=\"d-flex align-center pr-3\">\n <VDivider\n v-show=\"isUploading\"\n vertical\n class=\"mx-4 my-2\"\n />\n <ABtnPrimary\n v-if=\"isFinished\"\n :height=\"36\"\n class=\"mr-2\"\n rounded=\"pill\"\n :loading=\"saveAndCloseButtonLoading\"\n :disabled=\"saveButtonLoading || nothingToApply\"\n @click.stop=\"onSaveAndApply\"\n >\n {{ mdAndDown ? t('common.damImage.upload.apply') : t('common.damImage.upload.saveAndApply') }}\n </ABtnPrimary>\n <VBtn\n :aria-label=\"t('common.damImage.upload.save')\"\n variant=\"text\"\n :height=\"36\"\n :width=\"36\"\n class=\"mr-2 text-medium-emphasis\"\n icon\n :loading=\"saveButtonLoading\"\n :disabled=\"saveAndCloseButtonLoading || nothingToSave\"\n @click.stop=\"onSave\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.save') }}\n </VTooltip>\n </VBtn>\n <!--\n No file can be added while a save runs. \"Save and apply\" ends\n with the host closing the dialog and emptying its queue.\n A file added meanwhile would be dropped half uploaded, without notice.\n -->\n <AFileInput\n :file-input-key=\"fileInputKey\"\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n multiple\n @files-input=\"emit('filesInput', $event)\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn\n :aria-label=\"t('common.damImage.upload.add')\"\n icon\n variant=\"text\"\n :height=\"34\"\n :width=\"34\"\n class=\"text-medium-emphasis\"\n :disabled=\"saveButtonLoading || saveAndCloseButtonLoading\"\n v-bind=\"fileInputProps\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.add') }}\n </VTooltip>\n </VBtn>\n </template>\n </AFileInput>\n <VDivider\n vertical\n class=\"mx-4 my-2\"\n />\n <VBtn\n :aria-label=\"t('common.damImage.asset.massOperations.title')\"\n :height=\"36\"\n :width=\"36\"\n :active=\"uploadQueueSidebar\"\n :variant=\"uploadQueueSidebar ? 'flat' : 'text'\"\n :color=\"uploadQueueSidebar ? 'secondary' : ''\"\n class=\"mr-2 text-medium-emphasis\"\n icon\n @click.stop=\"toggleUploadQueueSidebar\"\n >\n <VIcon icon=\"mdi-tag-text-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.title') }}\n </VTooltip>\n </VBtn>\n <UploadQueueButtonStop\n data-cy=\"button-close\"\n :button-size=\"36\"\n :is-uploading=\"isUploading\"\n @confirm=\"onStopConfirm\"\n />\n </div>\n </VToolbar>\n <UploadQueueEditable\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :config-name=\"damConfigName\"\n :mass-operations=\"uploadQueueSidebar\"\n @show-detail=\"showDetail\"\n />\n </div>\n <AImageDropzone\n variant=\"fill\"\n transparent\n hover-only\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n :disabled=\"saveButtonLoading || saveAndCloseButtonLoading\"\n @drop=\"emit('drop', $event)\"\n />\n </div>\n </VCard>\n </VDialog>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"UploadQueueDialogSingle.js","names":["_sfc_main","UploadQueueDialogSingle_vue_vue_type_script_setup_true_lang_default","UploadQueueDialogSingle_default"],"sources":["../../../../../src/domains/dam/uploadQueue/components/UploadQueueDialogSingle.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useI18n } from 'vue-i18n'\nimport { AssetDetailTabImageWithRoi, useAssetDetailStore } from '@/domains/dam/assetDetail/store/assetDetailStore'\nimport { DamAssetType } from '@/domains/dam/types/Asset'\nimport AssetDetailDialogFrame from '@/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue'\nimport { assetDetailViewOfUploadItem } from '@/domains/dam/assetDetail/composables/assetDetailView'\nimport type { ImageCreateUpdateAware } from '@/domains/dam/types/ImageAware'\nimport { useUploadQueuesStore } from '@/domains/dam/uploadQueue/store/uploadQueuesStore'\nimport {\n useUploadQueueDialog,\n useUploadQueueDialogDrawn,\n} from '@/domains/dam/uploadQueue/composables/useUploadQueueDialog'\nimport { type UploadQueueItem, UploadQueueItemStatus } from '@/domains/dam/types/UploadQueue'\nimport UploadQueueItemErrorOverlay from '@/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport {\n type AssetMetadataBulkItem,\n bulkUpdateAssetsMetadata,\n fetchAsset,\n showMetadataSaveError,\n} from '@/domains/dam/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport UploadQueueDialogSingleSidebar from '@/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue'\nimport UploadQueueButtonStop from '@/domains/dam/uploadQueue/components/UploadQueueButtonStop.vue'\nimport { isNull } from '@/shared/utils/common'\nimport { mapUploadMetadataToImages } from '@/domains/dam/imageWidget/utils/metadataToImageMap'\nimport type { IntegerId } from '@/shared/types/common'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n licenceId: IntegerId\n fileInputKey: number\n accept: string | undefined\n maxSizes: Record<string, number> | undefined\n configName?: string\n disableDoneAnimation?: boolean\n }>(),\n {\n configName: undefined,\n disableDoneAnimation: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'apply', items: ImageCreateUpdateAware[]): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\nconst { showErrorsDefault, showRecordWas } = useAlerts()\n\nconst { t } = useI18n()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { activeTab, loading, asset: assetDetail } = storeToRefs(assetDetailStore)\nconst enableRoiTab = ref(false)\n\nconst uploadQueuesStore = useUploadQueuesStore()\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst item = computed<UploadQueueItem | null>(() => {\n return items.value[0] ?? null\n})\n\nconst isDone = computed(() => {\n return !isNull(item.value) && item.value.status === UploadQueueItemStatus.Uploaded\n})\n\n// The title stays \"done\", in the colour of an error for a file refused or failed.\nconst isFailed = computed(() => item.value?.status === UploadQueueItemStatus.Failed)\n\nconst { damClient, endPointAsset, endPointAuthor, customUploadMetadataToImageMap, simpleAssetSidebarEnabled } =\n useCommonAdminCoreDamOptions(damConfigName)\n\nconst view = computed(() =>\n assetDetailViewOfUploadItem(item.value, assetDetail.value, {\n enableRoiTab: enableRoiTab.value,\n disableDoneAnimation: props.disableDoneAnimation,\n simpleAssetSidebarEnabled,\n })\n)\n\nconst onStopConfirm = async () => {\n uploadQueuesStore.stopUpload(props.queueKey)\n assetDetailStore.setAsset(null)\n uploadQueueDialog.value = null\n}\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nuseUploadQueueDialogDrawn(props.queueKey)\n\nconst queueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst queueProcessedCount = computed(() => {\n return uploadQueuesStore.getQueueProcessedCount(props.queueKey)\n})\n\nconst isUploading = computed(() => {\n return queueTotalCount.value > queueProcessedCount.value\n})\n\n// The item's own switch: the store loads it with the item's metadata and leaves it to the user after that (a\n// duplicate takes over the original's). Not the asset detail's, which is set anew from the server when the item\n// turns uploaded, over what the user had chosen while the file was still on its way.\nconst mainFileSingleUse = computed(() => item.value?.mainFileSingleUse ?? false)\n\n// What the original of a duplicate is, as it was found: the notice is about that asset, and does not follow the\n// switch, which is the item's value from then on.\nconst originalIsSingleUse = ref(false)\nwatch(\n () => item.value?.isDuplicate,\n (isDuplicate) => {\n originalIsSingleUse.value = !!isDuplicate && item.value?.mainFileSingleUse === true\n },\n { immediate: true }\n)\n\n// Which of the two buttons saves, while it does: the other one waits, and neither sends a second request.\nconst saving = ref<'save' | 'saveAndApply' | null>(null)\n\nconst onSave = async () => {\n if (items.value.length === 0 || !isNull(saving.value)) return\n saving.value = 'save'\n try {\n await bulkUpdateAssetsMetadata(damClient, endPointAsset, items.value, mainFileSingleUse.value)\n showRecordWas('updated')\n } catch (error) {\n showMetadataSaveError(error, props.extSystem, damConfigName)\n } finally {\n saving.value = null\n }\n}\n\nconst onSaveAndApply = async () => {\n if (items.value.length === 0 || !isNull(saving.value)) return\n saving.value = 'saveAndApply'\n try {\n let assetsMetadataRes: AssetMetadataBulkItem[]\n try {\n assetsMetadataRes = await bulkUpdateAssetsMetadata(damClient, endPointAsset, items.value, mainFileSingleUse.value)\n if (!assetsMetadataRes[0]) {\n throw new Error('Fatal error updating asset metadata')\n }\n } catch (error) {\n showMetadataSaveError(error, props.extSystem, damConfigName)\n return\n }\n showRecordWas('updated')\n const mappedItems = customUploadMetadataToImageMap\n ? await customUploadMetadataToImageMap(\n items.value,\n assetsMetadataRes,\n damClient,\n props.extSystem,\n props.licenceId\n )\n : await mapUploadMetadataToImages(\n items.value,\n assetsMetadataRes,\n damClient,\n props.extSystem,\n props.licenceId,\n endPointAuthor\n )\n emit(\n 'apply',\n mappedItems.map((item) => ({\n ...item,\n position: 1,\n }))\n )\n await onStopConfirm()\n } catch (error) {\n // The save is said above. What follows it, the images made of its answer, is said as it was before.\n showErrorsDefault(error)\n } finally {\n saving.value = null\n }\n}\n\n// Read once the file is done, and again once the row has another asset: a row that turns out to be a duplicate becomes\n// the original of that duplicate only after the original asset has been read, and showed no \"File info\" then.\nwatch(\n [isDone, () => item.value?.assetId],\n async ([done, assetId]) => {\n if (!done || !assetId) return\n // The row it is read for: the queue of a dialog closed meanwhile is emptied, and the next upload of the widget is\n // a new row of the same queue.\n const row = item.value\n try {\n const res = await fetchAsset(damClient, endPointAsset, assetId)\n // Closed meanwhile, the dialog has emptied its queue. The detail store is shared: written now, the asset of\n // this file would be what the next dialog shows. Nor the asset of a row that has another one by now.\n if (item.value?.assetId !== assetId) return\n assetDetailStore.setAsset(res)\n enableRoiTab.value = true\n } catch (e) {\n // Closed meanwhile as well: the error would be shown over whatever the user has gone on to, the next upload of\n // the widget among it. A row that has become the original of a duplicate meanwhile is the same row, and its\n // failed read is said as any.\n if (item.value !== row) return\n showErrorsDefault(e)\n }\n },\n { immediate: true }\n)\n\nonMounted(() => {\n activeTab.value = AssetDetailTabImageWithRoi.Info\n})\n</script>\n\n<template>\n <AssetDetailDialogFrame\n :loading=\"loading || !item\"\n :view=\"view\"\n :ext-system=\"extSystem\"\n :config-name=\"damConfigName\"\n @close=\"onStopConfirm\"\n >\n <template #title>\n <div\n v-if=\"isUploading\"\n class=\"text-label-large\"\n >\n {{ t('common.damImage.upload.title') }}\n </div>\n <div\n v-else\n class=\"text-label-large font-weight-bold\"\n :class=\"isFailed ? 'text-error' : 'text-green-darken-3'\"\n >\n {{ t('common.damImage.upload.titleDone') }}\n </div>\n </template>\n <template #toolbar-actions>\n <UploadQueueButtonStop\n data-cy=\"button-close\"\n :button-size=\"36\"\n :is-uploading=\"isUploading\"\n @confirm=\"onStopConfirm\"\n />\n </template>\n <template #image-overlay>\n <UploadQueueItemErrorOverlay\n v-if=\"item && item.error.hasError\"\n :error=\"item.error\"\n />\n </template>\n <template #sidebar=\"{ view: shown }\">\n <UploadQueueDialogSingleSidebar\n v-if=\"shown.id\"\n :key=\"shown.id\"\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :config-name=\"damConfigName\"\n :enable-roi-tab=\"enableRoiTab\"\n :show-file-info=\"enableRoiTab\"\n :asset-id=\"shown.id\"\n :is-video=\"shown.assetType === DamAssetType.Video\"\n :is-audio=\"shown.assetType === DamAssetType.Audio\"\n :is-image=\"shown.assetType === DamAssetType.Image\"\n :is-document=\"shown.assetType === DamAssetType.Document\"\n :asset-status=\"shown.assetStatus\"\n :asset-type=\"shown.assetType\"\n :asset-main-file-status=\"shown.mainFile ? shown.mainFile.fileAttributes.status : undefined\"\n :asset-main-file-fail-reason=\"shown.mainFile ? shown.mainFile.fileAttributes.failReason : undefined\"\n :saving=\"saving\"\n @save=\"onSave\"\n @save-and-apply=\"onSaveAndApply\"\n >\n <template #prepend-sidebar>\n <div\n v-if=\"item?.isDuplicate\"\n class=\"text-body-small text-warning px-3 py-2\"\n >\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </div>\n <div\n v-if=\"item?.isDuplicate && originalIsSingleUse\"\n class=\"text-body-small text-error px-3 py-2\"\n >\n {{ t('common.damImage.asset.model.mainFileSingleUse') }}\n </div>\n </template>\n </UploadQueueDialogSingleSidebar>\n </template>\n </AssetDetailDialogFrame>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"UploadQueueDialogSingle.js","names":["_sfc_main","UploadQueueDialogSingle_vue_vue_type_script_setup_true_lang_default","UploadQueueDialogSingle_default"],"sources":["../../../../../src/domains/dam/uploadQueue/components/UploadQueueDialogSingle.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useI18n } from 'vue-i18n'\nimport { AssetDetailTabImageWithRoi, useAssetDetailStore } from '@/domains/dam/assetDetail/store/assetDetailStore'\nimport { DamAssetType } from '@/domains/dam/types/Asset'\nimport AssetDetailDialogFrame from '@/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue'\nimport { assetDetailViewOfUploadItem } from '@/domains/dam/assetDetail/composables/assetDetailView'\nimport type { ImageCreateUpdateAware } from '@/domains/dam/types/ImageAware'\nimport { useUploadQueuesStore } from '@/domains/dam/uploadQueue/store/uploadQueuesStore'\nimport {\n useUploadQueueDialog,\n useUploadQueueDialogDrawn,\n} from '@/domains/dam/uploadQueue/composables/useUploadQueueDialog'\nimport { type UploadQueueItem, UploadQueueItemStatus } from '@/domains/dam/types/UploadQueue'\nimport UploadQueueItemErrorOverlay from '@/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport {\n type AssetMetadataBulkItem,\n bulkUpdateAssetsMetadata,\n fetchAsset,\n showMetadataSaveError,\n} from '@/domains/dam/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport UploadQueueDialogSingleSidebar from '@/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue'\nimport UploadQueueButtonStop from '@/domains/dam/uploadQueue/components/UploadQueueButtonStop.vue'\nimport { isNull } from '@/shared/utils/common'\nimport { mapUploadMetadataToImages } from '@/domains/dam/imageWidget/utils/metadataToImageMap'\nimport type { IntegerId } from '@/shared/types/common'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n licenceId: IntegerId\n fileInputKey: number\n accept: string | undefined\n maxSizes: Record<string, number> | undefined\n configName?: string\n disableDoneAnimation?: boolean\n }>(),\n {\n configName: undefined,\n disableDoneAnimation: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'apply', items: ImageCreateUpdateAware[]): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\nconst { showErrorsDefault, showRecordWas } = useAlerts()\n\nconst { t } = useI18n()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { activeTab, loading, asset: assetDetail } = storeToRefs(assetDetailStore)\nconst enableRoiTab = ref(false)\n\nconst uploadQueuesStore = useUploadQueuesStore()\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst item = computed<UploadQueueItem | null>(() => {\n return items.value[0] ?? null\n})\n\nconst isDone = computed(() => {\n return !isNull(item.value) && item.value.status === UploadQueueItemStatus.Uploaded\n})\n\n// The title stays \"done\", in the error colour for a refused or failed file.\nconst isFailed = computed(() => item.value?.status === UploadQueueItemStatus.Failed)\n\nconst { damClient, endPointAsset, endPointAuthor, customUploadMetadataToImageMap, simpleAssetSidebarEnabled } =\n useCommonAdminCoreDamOptions(damConfigName)\n\nconst view = computed(() =>\n assetDetailViewOfUploadItem(item.value, assetDetail.value, {\n enableRoiTab: enableRoiTab.value,\n disableDoneAnimation: props.disableDoneAnimation,\n simpleAssetSidebarEnabled,\n })\n)\n\nconst onStopConfirm = async () => {\n uploadQueuesStore.stopUpload(props.queueKey)\n assetDetailStore.setAsset(null)\n uploadQueueDialog.value = null\n}\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nuseUploadQueueDialogDrawn(props.queueKey)\n\nconst queueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst queueProcessedCount = computed(() => {\n return uploadQueuesStore.getQueueProcessedCount(props.queueKey)\n})\n\nconst isUploading = computed(() => {\n return queueTotalCount.value > queueProcessedCount.value\n})\n\n// The item's own switch. The store loads it with the item's metadata,\n// then the user owns it. A duplicate takes the original's value.\n// Not the asset detail's value: that is reset from the server when the\n// item turns uploaded, overwriting the user's choice made during upload.\nconst mainFileSingleUse = computed(() => item.value?.mainFileSingleUse ?? false)\n\n// Whether the duplicate's original is single use, as found. The notice is about that\n// asset and does not follow the switch, which is the item's value from then on.\nconst originalIsSingleUse = ref(false)\nwatch(\n () => item.value?.isDuplicate,\n (isDuplicate) => {\n originalIsSingleUse.value = !!isDuplicate && item.value?.mainFileSingleUse === true\n },\n { immediate: true }\n)\n\n// Which button is saving. The other one waits, so no second request is sent.\nconst saving = ref<'save' | 'saveAndApply' | null>(null)\n\nconst onSave = async () => {\n if (items.value.length === 0 || !isNull(saving.value)) return\n saving.value = 'save'\n try {\n await bulkUpdateAssetsMetadata(damClient, endPointAsset, items.value, mainFileSingleUse.value)\n showRecordWas('updated')\n } catch (error) {\n showMetadataSaveError(error, props.extSystem, damConfigName)\n } finally {\n saving.value = null\n }\n}\n\nconst onSaveAndApply = async () => {\n if (items.value.length === 0 || !isNull(saving.value)) return\n saving.value = 'saveAndApply'\n try {\n let assetsMetadataRes: AssetMetadataBulkItem[]\n try {\n assetsMetadataRes = await bulkUpdateAssetsMetadata(damClient, endPointAsset, items.value, mainFileSingleUse.value)\n if (!assetsMetadataRes[0]) {\n throw new Error('Fatal error updating asset metadata')\n }\n } catch (error) {\n showMetadataSaveError(error, props.extSystem, damConfigName)\n return\n }\n showRecordWas('updated')\n const mappedItems = customUploadMetadataToImageMap\n ? await customUploadMetadataToImageMap(\n items.value,\n assetsMetadataRes,\n damClient,\n props.extSystem,\n props.licenceId\n )\n : await mapUploadMetadataToImages(\n items.value,\n assetsMetadataRes,\n damClient,\n props.extSystem,\n props.licenceId,\n endPointAuthor\n )\n emit(\n 'apply',\n mappedItems.map((item) => ({\n ...item,\n position: 1,\n }))\n )\n await onStopConfirm()\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n saving.value = null\n }\n}\n\n// Read when the file is done and again when the row gets another asset.\n// A duplicate row becomes the original only after the original asset was read, so the first read showed no \"File info\".\nwatch(\n [isDone, () => item.value?.assetId],\n async ([done, assetId]) => {\n if (!done || !assetId) return\n // Capture the row being read. A dialog closed meanwhile empties its\n // queue, and the widget's next upload is a new row in the same queue.\n const row = item.value\n try {\n const res = await fetchAsset(damClient, endPointAsset, assetId)\n // If the dialog closed meanwhile, its queue is emptied. The detail store\n // is shared, so writing now would show this asset in the next dialog.\n // The same applies to a row that has another asset by now.\n if (item.value?.assetId !== assetId) return\n assetDetailStore.setAsset(res)\n enableRoiTab.value = true\n } catch (e) {\n // Skip the error if the dialog closed meanwhile. It would appear\n // over whatever the user moved on to, such as the next upload.\n // A row that became the original of a duplicate is the same row, so its failed read is reported normally.\n if (item.value !== row) return\n showErrorsDefault(e)\n }\n },\n { immediate: true }\n)\n\nonMounted(() => {\n activeTab.value = AssetDetailTabImageWithRoi.Info\n})\n</script>\n\n<template>\n <AssetDetailDialogFrame\n :loading=\"loading || !item\"\n :view=\"view\"\n :ext-system=\"extSystem\"\n :config-name=\"damConfigName\"\n @close=\"onStopConfirm\"\n >\n <template #title>\n <div\n v-if=\"isUploading\"\n class=\"text-label-large\"\n >\n {{ t('common.damImage.upload.title') }}\n </div>\n <div\n v-else\n class=\"text-label-large font-weight-bold\"\n :class=\"isFailed ? 'text-error' : 'text-green-darken-3'\"\n >\n {{ t('common.damImage.upload.titleDone') }}\n </div>\n </template>\n <template #toolbar-actions>\n <UploadQueueButtonStop\n data-cy=\"button-close\"\n :button-size=\"36\"\n :is-uploading=\"isUploading\"\n @confirm=\"onStopConfirm\"\n />\n </template>\n <template #image-overlay>\n <UploadQueueItemErrorOverlay\n v-if=\"item && item.error.hasError\"\n :error=\"item.error\"\n />\n </template>\n <template #sidebar=\"{ view: shown }\">\n <UploadQueueDialogSingleSidebar\n v-if=\"shown.id\"\n :key=\"shown.id\"\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :config-name=\"damConfigName\"\n :enable-roi-tab=\"enableRoiTab\"\n :show-file-info=\"enableRoiTab\"\n :asset-id=\"shown.id\"\n :is-video=\"shown.assetType === DamAssetType.Video\"\n :is-audio=\"shown.assetType === DamAssetType.Audio\"\n :is-image=\"shown.assetType === DamAssetType.Image\"\n :is-document=\"shown.assetType === DamAssetType.Document\"\n :asset-status=\"shown.assetStatus\"\n :asset-type=\"shown.assetType\"\n :asset-main-file-status=\"shown.mainFile ? shown.mainFile.fileAttributes.status : undefined\"\n :asset-main-file-fail-reason=\"shown.mainFile ? shown.mainFile.fileAttributes.failReason : undefined\"\n :saving=\"saving\"\n @save=\"onSave\"\n @save-and-apply=\"onSaveAndApply\"\n >\n <template #prepend-sidebar>\n <div\n v-if=\"item?.isDuplicate\"\n class=\"text-body-small text-warning px-3 py-2\"\n >\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </div>\n <div\n v-if=\"item?.isDuplicate && originalIsSingleUse\"\n class=\"text-body-small text-error px-3 py-2\"\n >\n {{ t('common.damImage.asset.model.mainFileSingleUse') }}\n </div>\n </template>\n </UploadQueueDialogSingleSidebar>\n </template>\n </AssetDetailDialogFrame>\n</template>\n"],"mappings":""}