@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.
- package/README.md +1 -1
- package/dist/AnzuSystemsCommonAdmin.d.ts +42 -32
- package/dist/AnzuSystemsCommonAdmin.js.map +1 -1
- package/dist/common-admin.css +1 -1
- package/dist/common-admin.js +282 -282
- package/dist/domains/anzuUser/api/anzuUserApi.d.ts +9 -12
- package/dist/domains/anzuUser/api/anzuUserApi.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserDatatable.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue.d.ts +38 -44
- package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserFilter.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserFilter.vue.d.ts +12 -13
- package/dist/domains/anzuUser/components/AAnzuUserFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserForm.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserForm.vue.d.ts +18 -20
- package/dist/domains/anzuUser/components/AAnzuUserForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserBulkActionDialog.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue.d.ts +2 -3
- package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserCreateInSystemButton.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue.d.ts +9 -15
- package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserEnabledSwitch.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue.d.ts +8 -7
- package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserManageButton.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserManageButton.vue.d.ts +0 -1
- package/dist/domains/anzuUser/components/AUserManageButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserMetadataForm.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserMetadataForm.vue.d.ts +8 -9
- package/dist/domains/anzuUser/components/AUserMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserOtherSystemsTable.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserOtherSystemsTable.vue.d.ts +1 -2
- package/dist/domains/anzuUser/components/AUserOtherSystemsTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemOverview.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemOverview.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemPanel.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemPanel.vue.d.ts +2 -2
- package/dist/domains/anzuUser/components/AUserSystemPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemStatusChip.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemStatusChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserTabsShell.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserTabsShell.vue.d.ts +17 -22
- package/dist/domains/anzuUser/components/AUserTabsShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/composables/anzuUserActions.d.ts +5 -9
- package/dist/domains/anzuUser/composables/anzuUserActions.js.map +1 -1
- package/dist/domains/anzuUser/composables/anzuUserValidations.d.ts +4 -6
- package/dist/domains/anzuUser/composables/anzuUserValidations.js.map +1 -1
- package/dist/domains/anzuUser/composables/cachedAnzuUsers.d.ts +3 -3
- package/dist/domains/anzuUser/composables/cachedAnzuUsers.js.map +1 -1
- package/dist/domains/anzuUser/composables/userCrossSystemSearch.d.ts +2 -4
- package/dist/domains/anzuUser/composables/userCrossSystemSearch.js.map +1 -1
- package/dist/domains/anzuUser/composables/userCrossSystemWrites.d.ts +5 -11
- package/dist/domains/anzuUser/composables/userCrossSystemWrites.js.map +1 -1
- package/dist/domains/anzuUser/composables/userSystemDescriptor.d.ts +33 -57
- package/dist/domains/anzuUser/composables/userSystemDescriptor.js.map +1 -1
- package/dist/domains/anzuUser/composables/userSystemProbe.d.ts +7 -27
- package/dist/domains/anzuUser/composables/userSystemProbe.js.map +1 -1
- package/dist/domains/anzuUser/filter/anzuUserFilter.d.ts +6 -16
- package/dist/domains/anzuUser/filter/anzuUserFilter.js.map +1 -1
- package/dist/domains/anzuUser/store/anzuUserStore.d.ts +1 -5
- package/dist/domains/anzuUser/store/anzuUserStore.js.map +1 -1
- package/dist/domains/anzuUser/store/userCrossSystemStore.d.ts +3 -14
- package/dist/domains/anzuUser/store/userCrossSystemStore.js.map +1 -1
- package/dist/domains/anzuUser/utils/userMetadataDiff.d.ts +7 -19
- package/dist/domains/anzuUser/utils/userMetadataDiff.js.map +1 -1
- package/dist/domains/anzuUser/utils/userSystemState.d.ts +12 -30
- package/dist/domains/anzuUser/utils/userSystemState.js.map +1 -1
- package/dist/domains/anzuUser/utils/userTabs.d.ts +1 -3
- package/dist/domains/anzuUser/utils/userTabs.js.map +1 -1
- package/dist/domains/api/composables/defineApiClient.d.ts +4 -8
- package/dist/domains/api/composables/defineApiClient.js.map +1 -1
- package/dist/domains/api/composables/request.d.ts +18 -48
- package/dist/domains/api/composables/request.js.map +1 -1
- package/dist/domains/api/composables/useApiFetchByIds.d.ts +7 -21
- package/dist/domains/api/composables/useApiFetchByIds.js.map +1 -1
- package/dist/domains/api/composables/useApiFetchItems.d.ts +18 -57
- package/dist/domains/api/composables/useApiFetchItems.js.map +1 -1
- package/dist/domains/api/composables/useApiFetchList.d.ts +7 -23
- package/dist/domains/api/composables/useApiFetchList.js.map +1 -1
- package/dist/domains/api/composables/useApiFetchListBatch.d.ts +5 -22
- package/dist/domains/api/composables/useApiFetchListBatch.js.map +1 -1
- package/dist/domains/api/composables/useApiQueryBuilder.js.map +1 -1
- package/dist/domains/api/composables/useApiRequest.d.ts +16 -39
- package/dist/domains/api/composables/useApiRequest.js.map +1 -1
- package/dist/domains/api/utils/apiErrors.d.ts +28 -55
- package/dist/domains/api/utils/apiErrors.js.map +1 -1
- package/dist/domains/api/utils/listBody.d.ts +22 -43
- package/dist/domains/api/utils/listBody.js.map +1 -1
- package/dist/domains/auth/components/Acl.js.map +1 -1
- package/dist/domains/auth/components/Acl.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/auth/composables/aclAllowed.d.ts +2 -3
- package/dist/domains/auth/composables/aclAllowed.js.map +1 -1
- package/dist/domains/auth/composables/defineAuth.js.map +1 -1
- package/dist/domains/auth/composables/refreshSession.d.ts +10 -13
- package/dist/domains/auth/composables/refreshSession.js.map +1 -1
- package/dist/domains/cached/components/ACachedChip.js.map +1 -1
- package/dist/domains/cached/components/ACachedChip.vue.d.ts +13 -11
- package/dist/domains/cached/components/ACachedChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/cached/components/ACachedUserChip.js +1 -1
- package/dist/domains/cached/components/ACachedUserChip.js.map +1 -1
- package/dist/domains/cached/components/ACachedUserChip.vue.d.ts +3 -3
- package/dist/domains/cached/components/ACachedUserChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/cached/composables/createUserAndTimeTrackingFields.d.ts +9 -9
- package/dist/domains/cached/composables/createUserAndTimeTrackingFields.js.map +1 -1
- package/dist/domains/cached/composables/defineCached.d.ts +13 -11
- package/dist/domains/cached/composables/defineCached.js.map +1 -1
- package/dist/domains/cached/composables/useCachedItem.d.ts +7 -8
- package/dist/domains/cached/composables/useCachedItem.js.map +1 -1
- package/dist/domains/collab/components/ACollabLockedByUser.js.map +1 -1
- package/dist/domains/collab/components/ACollabLockedByUser.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/collab/composables/collabAnyDataChange.js.map +1 -1
- package/dist/domains/collab/composables/collabField.d.ts +5 -3
- package/dist/domains/collab/composables/collabField.js.map +1 -1
- package/dist/domains/collab/composables/collabInit.js +58 -54
- package/dist/domains/collab/composables/collabInit.js.map +1 -1
- package/dist/domains/collab/composables/collabRecovery.d.ts +49 -0
- package/dist/domains/collab/composables/collabRecovery.js +99 -0
- package/dist/domains/collab/composables/collabRecovery.js.map +1 -0
- package/dist/domains/collab/composables/collabRoom.js +106 -106
- package/dist/domains/collab/composables/collabRoom.js.map +1 -1
- package/dist/domains/collab/composables/collabState.d.ts +11 -4
- package/dist/domains/collab/composables/collabState.js +34 -25
- package/dist/domains/collab/composables/collabState.js.map +1 -1
- package/dist/domains/collab/composables/commonAdminCollabOptions.d.ts +4 -2
- package/dist/domains/collab/types/Collab.d.ts +31 -5
- package/dist/domains/collab/types/Collab.js +23 -11
- package/dist/domains/collab/types/Collab.js.map +1 -1
- package/dist/domains/customDataForm/components/ACustomDataForm.js.map +1 -1
- package/dist/domains/customDataForm/components/ACustomDataForm.vue.d.ts +7 -5
- package/dist/domains/customDataForm/components/ACustomDataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/customDataForm/components/ACustomDataFormElement.js.map +1 -1
- package/dist/domains/customDataForm/components/ACustomDataFormElement.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.js.map +1 -1
- package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.vue.d.ts +5 -3
- package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/customDataForm/composables/useCustomDataForm.js.map +1 -1
- package/dist/domains/customDataForm/types/CustomDataForm.d.ts +4 -1
- package/dist/domains/dam/api/damAssetApi.d.ts +7 -7
- package/dist/domains/dam/api/damAssetApi.js.map +1 -1
- package/dist/domains/dam/api/damAssetLicenceApi.d.ts +1 -1
- package/dist/domains/dam/api/damAssetLicenceApi.js.map +1 -1
- package/dist/domains/dam/api/damConstants.js.map +1 -1
- package/dist/domains/dam/api/damEndPoints.js.map +1 -1
- package/dist/domains/dam/api/damImageApi.js.map +1 -1
- package/dist/domains/dam/api/uploadApi.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue.d.ts +7 -5
- package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailDialog.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue.d.ts +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.vue.d.ts +5 -3
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue.d.ts +1 -1
- package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetImage.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetImage.vue.d.ts +1 -1
- package/dist/domains/dam/assetDetail/components/AssetImage.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue.d.ts +2 -2
- package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetInfobox.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetInfobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetMetadata.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/composables/assetDetailExtSystem.d.ts +5 -6
- package/dist/domains/dam/assetDetail/composables/assetDetailExtSystem.js.map +1 -1
- package/dist/domains/dam/assetDetail/composables/assetDetailView.d.ts +10 -10
- package/dist/domains/dam/assetDetail/composables/assetDetailView.js.map +1 -1
- package/dist/domains/dam/assetDetail/store/assetDetailStore.js.map +1 -1
- package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.d.ts +4 -3
- package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.js.map +1 -1
- package/dist/domains/dam/assetSelect/api/damPodcastApi.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetListInner.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetListInner.vue.d.ts +789 -787
- package/dist/domains/dam/assetSelect/components/AAssetListInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetSelect.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetSelect.vue.d.ts +395 -393
- package/dist/domains/dam/assetSelect/components/AAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue.d.ts +14 -12
- package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetSelectListBar.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue.d.ts +9 -7
- package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetSelect/composables/assetSelectListActions.js.map +1 -1
- package/dist/domains/dam/assetSelect/store/assetSelectStore.js.map +1 -1
- package/dist/domains/dam/author/api/authorApi.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorCreateButton.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorCreateButton.vue.d.ts +1 -1
- package/dist/domains/dam/author/components/AuthorCreateButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue.d.ts +9 -6
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js +1 -1
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue.d.ts +2 -2
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.js.map +1 -1
- package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue.d.ts +1 -1
- package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/author/composables/cachedAuthors.d.ts +5 -4
- package/dist/domains/dam/author/composables/cachedAuthors.js.map +1 -1
- package/dist/domains/dam/author/composables/cachedUsers.d.ts +5 -4
- package/dist/domains/dam/author/composables/cachedUsers.js.map +1 -1
- package/dist/domains/dam/author/composables/damAuthorConfig.d.ts +2 -2
- package/dist/domains/dam/author/composables/damAuthorConfig.js.map +1 -1
- package/dist/domains/dam/components/DamAdminAssetLink.js.map +1 -1
- package/dist/domains/dam/components/DamAdminAssetLink.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/composables/commonAdminCoreDamOptions.d.ts +10 -8
- package/dist/domains/dam/composables/commonAdminCoreDamOptions.js.map +1 -1
- package/dist/domains/dam/composables/damConfigName.d.ts +8 -9
- package/dist/domains/dam/composables/damConfigName.js.map +1 -1
- package/dist/domains/dam/composables/damNotifications.d.ts +9 -9
- package/dist/domains/dam/composables/damNotifications.js.map +1 -1
- package/dist/domains/dam/composables/damNotificationsConnection.d.ts +4 -4
- package/dist/domains/dam/composables/damNotificationsConnection.js.map +1 -1
- package/dist/domains/dam/composables/damNotificationsEventBus.d.ts +2 -2
- package/dist/domains/dam/composables/damNotificationsEventBus.js.map +1 -1
- package/dist/domains/dam/composables/extSystemIdForCached.d.ts +5 -4
- package/dist/domains/dam/composables/extSystemIdForCached.js.map +1 -1
- package/dist/domains/dam/config/api/damAssetCustomFormApi.js.map +1 -1
- package/dist/domains/dam/config/api/damConfigApi.js.map +1 -1
- package/dist/domains/dam/config/composables/damConfigState.d.ts +5 -5
- package/dist/domains/dam/config/composables/damConfigState.js.map +1 -1
- package/dist/domains/dam/config/store/damConfigStore.d.ts +5 -4
- package/dist/domains/dam/config/store/damConfigStore.js.map +1 -1
- package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.d.ts +3 -1
- package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.js.map +1 -1
- package/dist/domains/dam/cropper/components/ACropper.js.map +1 -1
- package/dist/domains/dam/cropper/components/ACropper.vue.d.ts +8 -16
- package/dist/domains/dam/cropper/components/ACropper.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.js.map +1 -1
- package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/cropper/store/imageRoiStore.d.ts +9 -12
- package/dist/domains/dam/cropper/store/imageRoiStore.js.map +1 -1
- package/dist/domains/dam/cropper/utils/cropperGeometry.d.ts +24 -38
- package/dist/domains/dam/cropper/utils/cropperGeometry.js.map +1 -1
- package/dist/domains/dam/cropper/utils/cropperJsService.d.ts +3 -7
- package/dist/domains/dam/cropper/utils/cropperJsService.js +10 -3
- package/dist/domains/dam/cropper/utils/cropperJsService.js.map +1 -1
- package/dist/domains/dam/cropper/utils/cropperTypes.d.ts +3 -6
- package/dist/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.d.ts +5 -5
- package/dist/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageMediaWidget.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageMediaWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImagePublicInput.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImagePublicInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageWidget.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.vue.d.ts +43 -41
- package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.vue.d.ts +31 -29
- package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue.d.ts +29 -27
- package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageMassOperations.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue.d.ts +1 -1
- package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue.d.ts +68 -66
- package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetInner.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue.d.ts +402 -400
- package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue.d.ts +384 -382
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/MediaWidgetSimpleDialog.vue.d.ts +7 -5
- package/dist/domains/dam/imageWidget/composables/commonAdminImageOptions.js.map +1 -1
- package/dist/domains/dam/imageWidget/composables/imageApiCms.js.map +1 -1
- package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.d.ts +11 -13
- package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.js.map +1 -1
- package/dist/domains/dam/imageWidget/composables/useImageMassOperations.js.map +1 -1
- package/dist/domains/dam/imageWidget/store/imageMediaWidgetStore.js.map +1 -1
- package/dist/domains/dam/imageWidget/store/imageStore.js.map +1 -1
- package/dist/domains/dam/imageWidget/utils/damImage.d.ts +5 -6
- package/dist/domains/dam/imageWidget/utils/damImage.js.map +1 -1
- package/dist/domains/dam/imageWidget/utils/fieldLockTurns.d.ts +1 -2
- package/dist/domains/dam/imageWidget/utils/fieldLockTurns.js.map +1 -1
- package/dist/domains/dam/imageWidget/utils/imageSaves.d.ts +10 -14
- package/dist/domains/dam/imageWidget/utils/imageSaves.js.map +1 -1
- package/dist/domains/dam/imageWidget/utils/metadataToImageMap.js.map +1 -1
- package/dist/domains/dam/imageWidget/utils/waitLimit.d.ts +4 -6
- package/dist/domains/dam/imageWidget/utils/waitLimit.js.map +1 -1
- package/dist/domains/dam/keyword/api/keywordApi.js.map +1 -1
- package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.js.map +1 -1
- package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.vue.d.ts +1 -1
- package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.js.map +1 -1
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue.d.ts +8 -5
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js +1 -1
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js.map +1 -1
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue.d.ts +2 -2
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/keyword/composables/cachedKeywords.d.ts +5 -4
- package/dist/domains/dam/keyword/composables/cachedKeywords.js.map +1 -1
- package/dist/domains/dam/keyword/composables/damKeywordConfig.d.ts +2 -2
- package/dist/domains/dam/keyword/composables/damKeywordConfig.js.map +1 -1
- package/dist/domains/dam/types/Asset.d.ts +1 -1
- package/dist/domains/dam/types/Asset.js.map +1 -1
- package/dist/domains/dam/types/UploadQueue.d.ts +5 -4
- package/dist/domains/dam/types/UploadQueue.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue.d.ts +2 -2
- package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue.d.ts +6 -4
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue.d.ts +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue.d.ts +6 -6
- package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue.d.ts +13 -13
- package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.d.ts +13 -13
- package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.js.map +1 -1
- package/dist/domains/dam/uploadQueue/composables/damUploadChunkSize.d.ts +2 -2
- package/dist/domains/dam/uploadQueue/composables/damUploadChunkSize.js.map +1 -1
- package/dist/domains/dam/uploadQueue/composables/uploadMeter.d.ts +12 -12
- package/dist/domains/dam/uploadQueue/composables/uploadMeter.js.map +1 -1
- package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.d.ts +5 -5
- package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.js.map +1 -1
- package/dist/domains/dam/uploadQueue/composables/uploadService.d.ts +2 -3
- package/dist/domains/dam/uploadQueue/composables/uploadService.js.map +1 -1
- package/dist/domains/dam/uploadQueue/composables/useUploadQueueDialog.d.ts +5 -4
- package/dist/domains/dam/uploadQueue/composables/useUploadQueueDialog.js.map +1 -1
- package/dist/domains/dam/uploadQueue/core/uploadQueueCore.d.ts +3 -2
- package/dist/domains/dam/uploadQueue/core/uploadQueueCore.js.map +1 -1
- package/dist/domains/dam/uploadQueue/core/uploadQueueCoreTypes.d.ts +8 -5
- package/dist/domains/dam/uploadQueue/core/uploadQueueCoreTypes.js.map +1 -1
- package/dist/domains/dam/uploadQueue/core/uploadQueueFill.d.ts +3 -3
- package/dist/domains/dam/uploadQueue/core/uploadQueueFill.js.map +1 -1
- package/dist/domains/dam/uploadQueue/presets/queuePresets.d.ts +8 -5
- package/dist/domains/dam/uploadQueue/presets/queuePresets.js.map +1 -1
- package/dist/domains/dam/uploadQueue/presets/uploadPresets.d.ts +15 -13
- package/dist/domains/dam/uploadQueue/presets/uploadPresets.js.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadPollSchedule.d.ts +7 -7
- package/dist/domains/dam/uploadQueue/settlement/uploadPollSchedule.js.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadPoller.d.ts +4 -4
- package/dist/domains/dam/uploadQueue/settlement/uploadPoller.js.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadSettle.d.ts +28 -30
- package/dist/domains/dam/uploadQueue/settlement/uploadSettle.js.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlement.d.ts +2 -2
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlement.js.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlementRuntime.d.ts +2 -2
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlementRuntime.js.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlementTypes.d.ts +63 -73
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlementTypes.js.map +1 -1
- package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.d.ts +8 -9
- package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.js.map +1 -1
- package/dist/domains/dam/user/api/userApi.d.ts +2 -2
- package/dist/domains/dam/user/api/userApi.js.map +1 -1
- package/dist/domains/dam/user/components/DamDistributionServiceSelect.js.map +1 -1
- package/dist/domains/dam/user/components/DamDistributionServiceSelect.vue.d.ts +1 -1
- package/dist/domains/dam/user/components/DamDistributionServiceSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.js.map +1 -1
- package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.vue.d.ts +1 -1
- package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.js.map +1 -1
- package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.vue.d.ts +1 -1
- package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/user/composables/damUserSelectActions.d.ts +1 -1
- package/dist/domains/dam/user/composables/damUserSelectActions.js.map +1 -1
- package/dist/domains/dam/user/types/DamDistributionServiceType.d.ts +2 -2
- package/dist/domains/dam/user/types/DamDistributionServiceType.js.map +1 -1
- package/dist/domains/dam/user/types/DamExternalProviderAssetType.d.ts +1 -1
- package/dist/domains/dam/user/types/DamExternalProviderAssetType.js.map +1 -1
- package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.js.map +1 -1
- package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/bookmarks/store/bookmarksStore.d.ts +3 -3
- package/dist/domains/filters/bookmarks/store/bookmarksStore.js.map +1 -1
- package/dist/domains/filters/components/AFilterDatetimePicker.js.map +1 -1
- package/dist/domains/filters/components/AFilterDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterInteger.js.map +1 -1
- package/dist/domains/filters/components/AFilterInteger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterString.js.map +1 -1
- package/dist/domains/filters/components/AFilterString.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterTimeInterval.js +1 -1
- package/dist/domains/filters/components/AFilterTimeInterval.js.map +1 -1
- package/dist/domains/filters/components/AFilterTimeInterval.vue.d.ts +5 -3
- package/dist/domains/filters/components/AFilterTimeInterval.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.js.map +1 -1
- package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterWrapper.vue.d.ts +17 -15
- package/dist/domains/filters/components/AFilterWrapperSidebar.vue.d.ts +5 -3
- package/dist/domains/filters/components/FiltersSelected.js.map +1 -1
- package/dist/domains/filters/components/FiltersSelected.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/composables/filterFactory.d.ts +16 -26
- package/dist/domains/filters/composables/filterFactory.js +38 -31
- package/dist/domains/filters/composables/filterFactory.js.map +1 -1
- package/dist/domains/filters/datatable/components/ADatatableOrdering.js.map +1 -1
- package/dist/domains/filters/datatable/components/ADatatableOrdering.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/domains/filters/datatable/components/ADatatableOrdering.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/datatable/components/ADatatablePagination.js.map +1 -1
- package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js +2 -4
- package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/utils/filterInjectionKeys.js.map +1 -1
- package/dist/domains/form/components/AFormDatetimePicker.js.map +1 -1
- package/dist/domains/form/components/AFormDatetimePicker.vue.d.ts +7 -5
- package/dist/domains/form/components/AFormDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/form/components/AFormFlagDatetimePicker.js.map +1 -1
- package/dist/domains/form/components/AFormFlagDatetimePicker.vue.d.ts +7 -5
- package/dist/domains/form/components/AFormFlagDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/form/components/AFormSwitch.vue.d.ts +7 -5
- package/dist/domains/form/components/AFormTextField.js.map +1 -1
- package/dist/domains/form/components/AFormTextField.vue.d.ts +9 -7
- package/dist/domains/form/components/AFormTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/form/components/AFormTextarea.vue.d.ts +13 -11
- package/dist/domains/form/components/AFormValueObjectOptionsSelect.vue.d.ts +7 -5
- package/dist/domains/form/components/ASystemEntityScope.vue.d.ts +5 -3
- package/dist/domains/job/api/jobApi.js.map +1 -1
- package/dist/domains/job/components/AJobDetailCommon.vue.d.ts +5 -3
- package/dist/domains/listEditor/components/AListEditor.js.map +1 -1
- package/dist/domains/listEditor/components/AListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/listEditor/components/ANestedSortableListEditor.js.map +1 -1
- package/dist/domains/listEditor/components/ANestedSortableListEditor.vue.d.ts +2 -3
- package/dist/domains/listEditor/components/ANestedSortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/listEditor/components/ASortableListEditor.js.map +1 -1
- package/dist/domains/listEditor/components/ASortableListEditor.vue.d.ts +2 -3
- package/dist/domains/listEditor/components/ASortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/listEditor/composables/useListEditorController.d.ts +4 -5
- package/dist/domains/listEditor/composables/useListEditorController.js.map +1 -1
- package/dist/domains/listEditor/composables/useNestedListEditor.d.ts +3 -4
- package/dist/domains/listEditor/composables/useNestedListEditor.js.map +1 -1
- package/dist/domains/listEditor/composables/useNestedListEditorController.d.ts +5 -4
- package/dist/domains/listEditor/composables/useNestedListEditorController.js.map +1 -1
- package/dist/domains/listEditor/composables/useReorderMode.js.map +1 -1
- package/dist/domains/listEditor/types/listEditorTypes.d.ts +2 -2
- package/dist/domains/listEditor/utils/listEditorLoader.d.ts +5 -5
- package/dist/domains/listEditor/utils/listEditorLoader.js.map +1 -1
- package/dist/domains/listEditor/utils/resolveCompactText.js.map +1 -1
- package/dist/domains/log/api/logApi.d.ts +2 -3
- package/dist/domains/log/api/logApi.js.map +1 -1
- package/dist/domains/log/components/ALogDatatable.js.map +1 -1
- package/dist/domains/log/components/ALogDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/log/components/ALogDetailView.js.map +1 -1
- package/dist/domains/log/components/ALogDetailView.vue.d.ts +1 -1
- package/dist/domains/log/components/ALogDetailView.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/log/components/ALogFilter.js.map +1 -1
- package/dist/domains/log/components/ALogFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/log/components/ALogListView.js.map +1 -1
- package/dist/domains/log/components/ALogListView.vue.d.ts +1 -1
- package/dist/domains/log/components/ALogListView.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/log/composables/logActions.d.ts +4 -5
- package/dist/domains/log/composables/logActions.js.map +1 -1
- package/dist/domains/log/composables/logType.d.ts +6 -7
- package/dist/domains/log/composables/logType.js.map +1 -1
- package/dist/domains/log/filter/logFilter.d.ts +8 -11
- package/dist/domains/log/filter/logFilter.js.map +1 -1
- package/dist/domains/permission/components/APermissionEditor.js.map +1 -1
- package/dist/domains/permission/components/APermissionEditor.vue.d.ts +4 -4
- package/dist/domains/permission/components/APermissionEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/permission/composables/permissionActions.d.ts +3 -6
- package/dist/domains/permission/composables/permissionActions.js.map +1 -1
- package/dist/domains/permission/config/api/permissionConfigApi.d.ts +2 -2
- package/dist/domains/permission/config/api/permissionConfigApi.js.map +1 -1
- package/dist/domains/permission/config/composables/permissionConfigActions.d.ts +3 -7
- package/dist/domains/permission/config/composables/permissionConfigActions.js.map +1 -1
- package/dist/domains/permission/config/store/permissionConfigStore.d.ts +2 -4
- package/dist/domains/permission/config/store/permissionConfigStore.js.map +1 -1
- package/dist/domains/permission/group/api/permissionGroupApi.d.ts +8 -10
- package/dist/domains/permission/group/api/permissionGroupApi.js.map +1 -1
- package/dist/domains/permission/group/components/APermissionGroupDatatable.js.map +1 -1
- package/dist/domains/permission/group/components/APermissionGroupDatatable.vue.d.ts +12 -10
- package/dist/domains/permission/group/components/APermissionGroupDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/permission/group/components/APermissionGroupDetail.js.map +1 -1
- package/dist/domains/permission/group/components/APermissionGroupDetail.vue.d.ts +21 -22
- package/dist/domains/permission/group/components/APermissionGroupDetail.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/permission/group/components/APermissionGroupManage.js.map +1 -1
- package/dist/domains/permission/group/components/APermissionGroupManage.vue.d.ts +21 -22
- package/dist/domains/permission/group/components/APermissionGroupManage.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/permission/group/composables/cachedPermissionGroups.js.map +1 -1
- package/dist/domains/permission/group/composables/permissionGroupActions.d.ts +6 -8
- package/dist/domains/permission/group/composables/permissionGroupActions.js.map +1 -1
- package/dist/domains/permission/group/composables/permissionGroupValidations.d.ts +2 -3
- package/dist/domains/permission/group/composables/permissionGroupValidations.js.map +1 -1
- package/dist/domains/permission/group/filter/permissionGroupFilter.d.ts +2 -3
- package/dist/domains/permission/group/filter/permissionGroupFilter.js.map +1 -1
- package/dist/domains/permission/group/store/permissionGroupStore.d.ts +3 -6
- package/dist/domains/permission/group/store/permissionGroupStore.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.vue.d.ts +5 -3
- package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.d.ts +11 -13
- package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.js.map +1 -1
- package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.vue.d.ts +13 -11
- package/dist/domains/subjectSelect/components/ASubjectSelect.js.map +1 -1
- package/dist/domains/subjectSelect/components/ASubjectSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/subjectSelect/composables/useSubjectSelect.js +53 -51
- package/dist/domains/subjectSelect/composables/useSubjectSelect.js.map +1 -1
- package/dist/domains/system/appShell/components/AActionbar.vue.d.ts +7 -5
- package/dist/domains/system/appShell/components/ALayoutSwitch.js.map +1 -1
- package/dist/domains/system/appShell/components/ALayoutSwitch.vue.d.ts +7 -5
- package/dist/domains/system/appShell/components/ALayoutSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/system/appShell/composables/teleportSlot.d.ts +0 -1
- package/dist/domains/system/appShell/composables/teleportSlot.js.map +1 -1
- package/dist/domains/system/components/AAlerts.js.map +1 -1
- package/dist/domains/system/components/AAlerts.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/system/composables/alerts.js.map +1 -1
- package/dist/domains/system/composables/breadcrumbs.d.ts +3 -3
- package/dist/domains/system/composables/breadcrumbs.js.map +1 -1
- package/dist/domains/system/composables/languageSettings.js.map +1 -1
- package/dist/domains/system/composables/loginStatus.js.map +1 -1
- package/dist/domains/system/composables/navigationError.d.ts +6 -8
- package/dist/domains/system/composables/navigationError.js.map +1 -1
- package/dist/domains/system/composables/pageNavigation.d.ts +9 -10
- package/dist/domains/system/composables/pageNavigation.js.map +1 -1
- package/dist/domains/system/composables/recordActions.d.ts +14 -22
- package/dist/domains/system/composables/recordActions.js.map +1 -1
- package/dist/domains/system/composables/recordPage.d.ts +23 -38
- package/dist/domains/system/composables/recordPage.js.map +1 -1
- package/dist/domains/system/composables/routeHistory.d.ts +4 -5
- package/dist/domains/system/composables/routeHistory.js.map +1 -1
- package/dist/domains/system/composables/sentry.js.map +1 -1
- package/dist/domains/system/composables/useDebugFeatures.d.ts +3 -6
- package/dist/domains/system/composables/useDebugFeatures.js.map +1 -1
- package/dist/domains/system/store/datatablePageStore.d.ts +8 -1
- package/dist/domains/system/store/datatablePageStore.js +10 -3
- package/dist/domains/system/store/datatablePageStore.js.map +1 -1
- package/dist/domains/system/systemBar/components/ASystemBar.js.map +1 -1
- package/dist/domains/system/systemBar/components/ASystemBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/system/systemBar/utils/appReload.d.ts +5 -5
- package/dist/domains/system/systemBar/utils/appReload.js.map +1 -1
- package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.js.map +1 -1
- package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.vue.d.ts +2 -3
- package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/buttons/action/components/AActionDeleteButton.js.map +1 -1
- package/dist/domains/ui/buttons/action/components/AActionDeleteButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/buttons/components/ABtnSplit.vue.d.ts +9 -7
- package/dist/domains/ui/components/AAvatarColorPicker.js.map +1 -1
- package/dist/domains/ui/components/AAvatarColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/components/ACard.js.map +1 -1
- package/dist/domains/ui/components/ACard.vue.d.ts +7 -3
- package/dist/domains/ui/components/ACard.vue_vue_type_script_setup_true_lang.js +6 -2
- package/dist/domains/ui/components/ACard.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/components/ACardLoader.js.map +1 -1
- package/dist/domains/ui/components/ACardLoader.vue.d.ts +1 -0
- package/dist/domains/ui/components/ACardLoader.vue_vue_type_script_setup_true_lang.js +13 -7
- package/dist/domains/ui/components/ACardLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/components/AChipNoLink.vue.d.ts +5 -3
- package/dist/domains/ui/components/ACopyText.vue.d.ts +9 -7
- package/dist/domains/ui/components/ACreateDialog.js.map +1 -1
- package/dist/domains/ui/components/ACreateDialog.vue.d.ts +11 -9
- package/dist/domains/ui/components/ACreateDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/components/ADialogToolbar.vue.d.ts +5 -3
- package/dist/domains/ui/components/ARow.vue.d.ts +5 -3
- package/dist/domains/ui/components/ATimeTrackingFields.js.map +1 -1
- package/dist/domains/ui/components/ATimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/components/AUserAndTimeTrackingFields.js.map +1 -1
- package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue.d.ts +3 -5
- package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/datetime/components/ADatetimePicker.js +1 -1
- package/dist/domains/ui/datetime/components/ADatetimePicker.js.map +1 -1
- package/dist/domains/ui/datetime/components/ADatetimePicker.vue.d.ts +5 -3
- package/dist/domains/ui/datetime/components/ADatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/file/components/AFileDropzone.js.map +1 -1
- package/dist/domains/ui/file/components/AFileDropzone.vue.d.ts +1 -1
- package/dist/domains/ui/file/components/AFileDropzone.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/file/components/AFileInput.js.map +1 -1
- package/dist/domains/ui/file/components/AFileInput.vue.d.ts +9 -7
- package/dist/domains/ui/file/components/AFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/file/components/AFileInputDialog.js.map +1 -1
- package/dist/domains/ui/file/components/AFileInputDialog.vue.d.ts +9 -7
- package/dist/domains/ui/file/components/AFileInputDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/file/composables/dropzone.js.map +1 -1
- package/dist/domains/ui/file/composables/formatAndSizeCheck.js.map +1 -1
- package/dist/domains/ui/view/components/AGenericView.vue.d.ts +7 -5
- package/dist/domains/ui/view/components/ALoginView.js +1 -1
- package/dist/domains/ui/view/components/ALoginView.js.map +1 -1
- package/dist/domains/ui/view/components/ALoginView.vue.d.ts +5 -3
- package/dist/domains/ui/view/components/ALoginView.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/view/components/ALogoutView.js.map +1 -1
- package/dist/domains/ui/view/components/ALogoutView.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/view/components/ANotFoundView.js.map +1 -1
- package/dist/domains/ui/view/components/ANotFoundView.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.d.ts +6 -7
- package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.js.map +1 -1
- package/dist/lib.d.ts +2 -2
- package/dist/plugins/commonVuetifyConfig.d.ts +3 -3
- package/dist/plugins/commonVuetifyConfig.js.map +1 -1
- package/dist/plugins/i18n.d.ts +4 -5
- package/dist/plugins/i18n.js.map +1 -1
- package/dist/plugins/pluginOptions.d.ts +4 -2
- package/dist/plugins/pluginOptions.js.map +1 -1
- package/dist/plugins/webfontloader.js.map +1 -1
- package/dist/shared/error/AnzuApiCancelledError.d.ts +5 -8
- package/dist/shared/error/AnzuApiCancelledError.js.map +1 -1
- package/dist/shared/error/AnzuError.d.ts +3 -5
- package/dist/shared/error/AnzuError.js.map +1 -1
- package/dist/shared/error/AuthUnavailableError.d.ts +3 -3
- package/dist/shared/error/AuthUnavailableError.js.map +1 -1
- package/dist/shared/error/isInCauseChain.d.ts +2 -2
- package/dist/shared/error/isInCauseChain.js.map +1 -1
- package/dist/shared/types/UserAndTimeTracking.d.ts +5 -5
- package/dist/shared/types/Validation.d.ts +4 -5
- package/dist/shared/types/common.d.ts +1 -3
- package/dist/shared/types/globalComponents.d.ts +5 -6
- package/dist/shared/utils/common.js.map +1 -1
- package/dist/shared/utils/datetime.d.ts +0 -1
- package/dist/shared/utils/datetime.js.map +1 -1
- package/dist/shared/utils/datetimePickerValue.d.ts +4 -7
- package/dist/shared/utils/datetimePickerValue.js.map +1 -1
- package/dist/shared/utils/development.d.ts +3 -3
- package/dist/shared/utils/development.js.map +1 -1
- package/dist/shared/utils/envConfig.d.ts +4 -4
- package/dist/shared/utils/envConfig.js.map +1 -1
- package/dist/shared/utils/json.d.ts +1 -1
- package/dist/shared/utils/json.js.map +1 -1
- package/dist/shared/utils/userAndTimeTracking.d.ts +5 -7
- package/dist/shared/utils/userAndTimeTracking.js.map +1 -1
- package/dist/shared/validators/vuelidate/common/useValidateHexColor.d.ts +3 -5
- package/dist/shared/validators/vuelidate/common/useValidateHexColor.js.map +1 -1
- package/dist/testing/appShell.d.ts +11 -11
- package/dist/testing/appShell.js.map +1 -1
- package/dist/testing/closeButtons.d.ts +9 -11
- package/dist/testing/closeButtons.js.map +1 -1
- package/dist/testing/declaredDependencies.d.ts +7 -7
- package/dist/testing/declaredDependencies.js.map +1 -1
- package/dist/testing/generatedRoutes.d.ts +6 -11
- package/dist/testing/generatedRoutes.js.map +1 -1
- package/dist/testing/routeHistory.d.ts +5 -12
- package/dist/testing/routeHistory.js.map +1 -1
- package/dist/testing/sortableLists.d.ts +16 -21
- package/dist/testing/sortableLists.js.map +1 -1
- package/dist/testing/typedRouter.d.ts +0 -1
- package/dist/testing/typedRouter.js.map +1 -1
- package/package.json +26 -26
- package/src/eslint/adminConfig.mjs +19 -27
- package/src/eslint/globalComponentNames.mjs +3 -4
- package/src/eslint/oxlint.mjs +7 -20
- package/src/eslint/plugin.d.mts +2 -4
- package/src/eslint/plugin.mjs +18 -34
- package/src/eslint/validRouteName.mjs +6 -7
- package/src/vite/devWatch.mjs +30 -43
- package/src/vite/index.d.mts +5 -5
- package/src/vite/sentry.mjs +7 -12
- package/src/vite/sourcemaps.mjs +4 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploadQueueItemEditable.js","names":["_sfc_main","UploadQueueItemEditable_vue_vue_type_script_setup_true_lang_default","UploadQueueItemEditable_default"],"sources":["../../../../../src/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onUnmounted, ref, type Ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetCustomData, DamAssetStatusDefault } from '@/domains/dam/types/Asset'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport {\n type UploadQueueItem,\n UploadQueueItemStatus,\n type UploadQueueItemStatusType,\n type UploadQueueKey,\n} from '@/domains/dam/types/UploadQueue'\nimport type { ValidationScope } from '@/shared/types/Validation'\nimport ATableCopyIdButton from '@/domains/ui/buttons/table/components/ATableCopyIdButton.vue'\nimport { prettyBytes } from '@/shared/utils/file'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport AssetCustomMetadataForm from '@/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue'\nimport AssetImage from '@/domains/dam/assetDetail/components/AssetImage.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/domains/dam/composables/uploadValidations'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport { isNull } from '@/shared/utils/common'\nimport { useDamKeywordAssetTypeConfig } from '@/domains/dam/keyword/composables/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/domains/dam/author/composables/damAuthorConfig'\nimport AActionDeleteButton from '@/domains/ui/buttons/action/components/AActionDeleteButton.vue'\nimport { SHOW_REFRESH_AFTER_SECONDS } from '@/domains/dam/uploadQueue/composables/uploadQueueItemRefresh'\nimport UploadQueueItemErrorOverlay from '@/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.vue'\nimport type { DamFieldsDisabledAs } from '@/domains/dam/uploadQueue/components/uploadQueueBindings'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n queueKey: UploadQueueKey\n extSystem: IntegerId\n customData: AssetCustomData\n keywords: DocId[]\n authors: DocId[]\n item: UploadQueueItem\n refreshDisabled: boolean\n mainFileSingleUse: boolean | null\n mainFileSingleUseEnabled?: boolean\n disableDoneAnimation?: boolean\n /**\n * A failed row a refresh may still change: its finish request went out and the server has said nothing final\n * about it, or the original of its duplicate could not be read. The queue knows which rows those are; a row\n * shown outside a queue has no such state.\n */\n refreshMayHelp?: boolean\n /** Where \"cancel\" is offered. */\n cancelStatuses?: readonly UploadQueueItemStatusType[]\n /** The line \"The main file is a duplicate.\" under the title. */\n duplicateNotice?: boolean\n /** The form stays off on a duplicate whatever its metadata. */\n disableFormOnDuplicate?: boolean\n /** The scope the fields of an editable row report to; a row that cannot be edited reports to none. */\n validationScope?: ValidationScope\n /** How keywords and authors look while the row cannot be edited; handed to both inputs as `disabledAs`. */\n disabledFieldsAs?: DamFieldsDisabledAs\n /** A duplicate gets no edit button at all: neither the `edit` slot nor its default is drawn. */\n hideEditOnDuplicate?: boolean\n /** Whether the row offers refresh, worked out by its host. Without it the row works it out itself. */\n refreshOffered?: boolean | undefined\n /** The DAM configuration whose rules and forms the row follows; inherited when not given. */\n configName?: string\n }>(),\n {\n mainFileSingleUseEnabled: true,\n disableDoneAnimation: false,\n refreshMayHelp: false,\n cancelStatuses: () => [\n UploadQueueItemStatus.Loading,\n UploadQueueItemStatus.Waiting,\n UploadQueueItemStatus.Uploading,\n ],\n duplicateNotice: true,\n disableFormOnDuplicate: false,\n validationScope: ADamAssetMetadataValidationScopeSymbol,\n disabledFieldsAs: 'chips',\n hideEditOnDuplicate: false,\n // Declared, or Vue would make an absent boolean `false` and the row would never offer refresh by itself.\n refreshOffered: undefined,\n configName: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:customData', data: AssetCustomData): void\n (e: 'update:keywords', data: DocId[]): void\n (e: 'update:authors', data: DocId[]): void\n (e: 'update:mainFileSingleUse', data: boolean | null): void\n (e: 'cancelItem', data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }): void\n (e: 'removeItem', index: number): void\n (e: 'showDetail', data: DocId): void\n (e: 'refreshItem', data: { index: number; assetId: DocId }): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\ndefineSlots<{\n /** Over the picture, under the error overlay. */\n 'image-overlay'?(props: { item: UploadQueueItem }): unknown\n /** Left of the action line. Default: \"Edit in Media Library\", disabled without metadata, emits `showDetail`. */\n edit?(props: { item: UploadQueueItem }): unknown\n /** Last of the action line. Default: \"Remove from queue\" while it is offered, emits `removeItem`. */\n remove?(props: { item: UploadQueueItem; index: number; offered: boolean }): unknown\n}>()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst customData = computed({\n get() {\n return props.customData\n },\n set(newValue) {\n emit('update:customData', { ...props.customData, ...newValue })\n },\n})\n\nconst keywords = computed({\n get() {\n return props.keywords\n },\n set(newValue) {\n emit('update:keywords', [...newValue])\n },\n})\n\nconst authors = computed({\n get() {\n return props.authors\n },\n set(newValue) {\n emit('update:authors', [...newValue])\n },\n})\n\nconst mainFileSingleUse = computed({\n get() {\n return props.mainFileSingleUse\n },\n set(newValue) {\n emit('update:mainFileSingleUse', newValue)\n },\n})\n\nconst { t } = useI18n()\n\n// The save skips an item whose metadata cannot be edited, so nothing in its row is validated: it could not be\n// put right. A scope is read once, when a field is set up - hence the key on the form.\nconst metadataValidationScope = computed(() => {\n return props.item.canEditMetadata ? props.validationScope : false\n})\n\nconst processingStatuses: readonly UploadQueueItemStatusType[] = [\n UploadQueueItemStatus.Processing,\n UploadQueueItemStatus.Loading,\n]\nconst processing = computed(() => {\n return processingStatuses.includes(props.item.status)\n})\nconst waiting = computed(() => {\n return props.item.status === UploadQueueItemStatus.Waiting\n})\nconst done = computed(() => {\n return !props.disableDoneAnimation && props.item.status === UploadQueueItemStatus.Uploaded\n})\nconst uploading = computed(() => {\n return props.item.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return props.item.progress.progressPercent\n})\n\nconst imageSrc = computed(() => {\n return props.item.imagePreview ? props.item.imagePreview.url : undefined\n})\nconst assetType = computed(() => {\n return props.item.assetType\n})\nconst status = computed(() => {\n if (!props.item) return DamAssetStatusDefault\n return props.item.assetStatus\n})\n\nconst cancelItem = () => {\n emit('cancelItem', { index: props.index, item: props.item, queueKey: props.queueKey })\n}\n\nconst showCancel = computed(() => {\n return props.cancelStatuses.includes(props.item.status)\n})\n\n// Of a row that has not failed: offered once it has waited, for its file or for its metadata.\nconst refreshDue = ref(false)\nconst refreshTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n// A failed row offers refresh only while one may still change it. One whose chunk the server never took, or\n// whose file the server has failed, has nothing a refresh could find.\nconst offeredByRow = computed(() => {\n if (props.item.status === UploadQueueItemStatus.Failed) return props.refreshMayHelp && !isNull(props.item.assetId)\n return refreshDue.value\n})\nconst showRefresh = computed(() => {\n return props.refreshOffered ?? offeredByRow.value\n})\n// Remove comes with refresh, and a failed row has it at once: nothing else takes such a row out of the queue.\nconst showRemove = computed(() => {\n return showRefresh.value || props.item.status === UploadQueueItemStatus.Failed\n})\n\nconst showDetail = async () => {\n if (isNull(props.item.assetId)) return\n emit('showDetail', props.item.assetId)\n}\n\nconst refresh = () => {\n if (props.item.assetId) {\n emit('refreshItem', { index: props.index, assetId: props.item.assetId })\n }\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nwatch(\n () => props.item.status,\n async (newValue) => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = setTimeout(() => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n refreshDue.value = true\n }\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Uploaded) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n // An uploaded row whose metadata has not come by then has a disabled form, and the save skips it. Refresh\n // loads the metadata.\n refreshTimer.value = setTimeout(() => {\n if (props.item.status !== UploadQueueItemStatus.Uploaded || props.item.canEditMetadata) return\n refreshDue.value = true\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Failed) {\n // Its wait is over: what a failed row offers follows `refreshMayHelp`, at once.\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.item.canEditMetadata,\n (canEdit) => {\n // The metadata of an uploaded row came after all, by its notification or by that refresh.\n if (canEdit && props.item.status === UploadQueueItemStatus.Uploaded) refreshDue.value = false\n }\n)\n\nonUnmounted(() => {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n})\n</script>\n\n<template>\n <VCol\n xxl=\"2\"\n xl=\"3\"\n md=\"4\"\n sm=\"6\"\n cols=\"12\"\n >\n <div class=\"dam-upload-queue__item\">\n <div class=\"dam-upload-queue__item-card\">\n <div class=\"position-relative\">\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"status\"\n :src=\"imageSrc\"\n background-color=\"#ccc\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"done\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n />\n <slot\n name=\"image-overlay\"\n :item=\"item\"\n />\n <UploadQueueItemErrorOverlay\n v-if=\"item.error.hasError\"\n :error=\"item.error\"\n />\n </div>\n <VRow\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <div class=\"w-100 d-flex justify-space-between align-center\">\n <div>\n <template v-if=\"!(hideEditOnDuplicate && item.isDuplicate)\">\n <slot\n name=\"edit\"\n :item=\"item\"\n >\n <VBtn\n size=\"small\"\n variant=\"text\"\n :disabled=\"!item.canEditMetadata\"\n @click.stop=\"showDetail\"\n >\n {{ t('common.damImage.image.button.editAsset') }}\n </VBtn>\n </slot>\n </template>\n </div>\n <div>\n <ATableCopyIdButton\n v-if=\"item.assetId\"\n :id=\"item.assetId\"\n button-t=\"common.damImage.queueItem.copyAssetId\"\n size=\"small\"\n />\n <VBtn\n v-if=\"showRefresh\"\n :aria-label=\"t('common.button.refresh')\"\n icon\n size=\"small\"\n variant=\"text\"\n :disabled=\"refreshDisabled\"\n @click.stop=\"refresh\"\n >\n <VIcon icon=\"mdi-refresh\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.refresh') }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-if=\"showCancel\"\n :aria-label=\"t('common.button.cancel')\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"cancelItem\"\n >\n <VIcon icon=\"mdi-close-circle-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.cancel') }}\n </VTooltip>\n </VBtn>\n <slot\n name=\"remove\"\n :item=\"item\"\n :index=\"index\"\n :offered=\"showRemove\"\n >\n <AActionDeleteButton\n v-if=\"showRemove\"\n variant=\"icon\"\n button-class=\"\"\n dialog-message-t=\"common.damImage.queueItem.removeFromQueue\"\n @delete-record=\"emit('removeItem', index)\"\n />\n </slot>\n </div>\n </div>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.displayTitle\"\n density=\"compact\"\n class=\"my-2 mb-3 mt-0 text-body-small\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.queueItem.displayTitle') }}: {{ item.displayTitle }}\n <span v-if=\"item.file?.size\"> ({{ prettyBytes(item.file.size) }})</span>\n </VCol>\n </VRow>\n <VRow\n v-if=\"duplicateNotice && item.isDuplicate\"\n class=\"text-body-small text-warning\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VCol>\n </VRow>\n <VForm :disabled=\"!item.canEditMetadata || (disableFormOnDuplicate && item.isDuplicate)\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n :key=\"item.canEditMetadata ? 'validated' : 'skipped'\"\n v-model=\"customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n :validation-scope=\"metadataValidationScope\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"keywords\"\n :queue-id=\"queueKey\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n multiple\n :required=\"keywordRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"authors\"\n :queue-id=\"queueKey\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"item.authorConflicts\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :required=\"authorRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"mainFileSingleUseEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <VSwitch\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </div>\n </div>\n </VCol>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"UploadQueueItemEditable.js","names":["_sfc_main","UploadQueueItemEditable_vue_vue_type_script_setup_true_lang_default","UploadQueueItemEditable_default"],"sources":["../../../../../src/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onUnmounted, ref, type Ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetCustomData, DamAssetStatusDefault } from '@/domains/dam/types/Asset'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport {\n type UploadQueueItem,\n UploadQueueItemStatus,\n type UploadQueueItemStatusType,\n type UploadQueueKey,\n} from '@/domains/dam/types/UploadQueue'\nimport type { ValidationScope } from '@/shared/types/Validation'\nimport ATableCopyIdButton from '@/domains/ui/buttons/table/components/ATableCopyIdButton.vue'\nimport { prettyBytes } from '@/shared/utils/file'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport AssetCustomMetadataForm from '@/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue'\nimport AssetImage from '@/domains/dam/assetDetail/components/AssetImage.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/domains/dam/composables/uploadValidations'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport { isNull } from '@/shared/utils/common'\nimport { useDamKeywordAssetTypeConfig } from '@/domains/dam/keyword/composables/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/domains/dam/author/composables/damAuthorConfig'\nimport AActionDeleteButton from '@/domains/ui/buttons/action/components/AActionDeleteButton.vue'\nimport { SHOW_REFRESH_AFTER_SECONDS } from '@/domains/dam/uploadQueue/composables/uploadQueueItemRefresh'\nimport UploadQueueItemErrorOverlay from '@/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.vue'\nimport type { DamFieldsDisabledAs } from '@/domains/dam/uploadQueue/components/uploadQueueBindings'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n queueKey: UploadQueueKey\n extSystem: IntegerId\n customData: AssetCustomData\n keywords: DocId[]\n authors: DocId[]\n item: UploadQueueItem\n refreshDisabled: boolean\n mainFileSingleUse: boolean | null\n mainFileSingleUseEnabled?: boolean\n disableDoneAnimation?: boolean\n /**\n * A failed row that a refresh may still change: its finish request went out and the\n * server gave no final answer, or the original of its duplicate could not be read.\n * The queue knows these rows. A row shown outside a queue has no such state.\n */\n refreshMayHelp?: boolean\n /** Statuses in which \"cancel\" is offered. */\n cancelStatuses?: readonly UploadQueueItemStatusType[]\n /** Shows the line \"The main file is a duplicate.\" under the title. */\n duplicateNotice?: boolean\n /** Keeps the form disabled on a duplicate regardless of its metadata. */\n disableFormOnDuplicate?: boolean\n /** The scope the fields of an editable row report to. A non-editable row reports to none. */\n validationScope?: ValidationScope\n /** How keywords and authors look while the row is not editable. Passed to both inputs as `disabledAs`. */\n disabledFieldsAs?: DamFieldsDisabledAs\n /** A duplicate gets no edit button: neither the `edit` slot nor its default is rendered. */\n hideEditOnDuplicate?: boolean\n /** Whether the row offers refresh, decided by the host. Without it the row decides itself. */\n refreshOffered?: boolean | undefined\n /** The DAM configuration whose rules and forms the row follows. Inherited when not given. */\n configName?: string\n }>(),\n {\n mainFileSingleUseEnabled: true,\n disableDoneAnimation: false,\n refreshMayHelp: false,\n cancelStatuses: () => [\n UploadQueueItemStatus.Loading,\n UploadQueueItemStatus.Waiting,\n UploadQueueItemStatus.Uploading,\n ],\n duplicateNotice: true,\n disableFormOnDuplicate: false,\n validationScope: ADamAssetMetadataValidationScopeSymbol,\n disabledFieldsAs: 'chips',\n hideEditOnDuplicate: false,\n // Declared explicitly, otherwise Vue casts an absent boolean to `false` and the row never offers refresh by itself.\n refreshOffered: undefined,\n configName: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:customData', data: AssetCustomData): void\n (e: 'update:keywords', data: DocId[]): void\n (e: 'update:authors', data: DocId[]): void\n (e: 'update:mainFileSingleUse', data: boolean | null): void\n (e: 'cancelItem', data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }): void\n (e: 'removeItem', index: number): void\n (e: 'showDetail', data: DocId): void\n (e: 'refreshItem', data: { index: number; assetId: DocId }): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\ndefineSlots<{\n /** Rendered over the picture, under the error overlay. */\n 'image-overlay'?(props: { item: UploadQueueItem }): unknown\n /** Left of the action line. Default: \"Edit in Media Library\", disabled without metadata, emits `showDetail`. */\n edit?(props: { item: UploadQueueItem }): unknown\n /** Last in the action line. Default: \"Remove from queue\" while offered, emits `removeItem`. */\n remove?(props: { item: UploadQueueItem; index: number; offered: boolean }): unknown\n}>()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst customData = computed({\n get() {\n return props.customData\n },\n set(newValue) {\n emit('update:customData', { ...props.customData, ...newValue })\n },\n})\n\nconst keywords = computed({\n get() {\n return props.keywords\n },\n set(newValue) {\n emit('update:keywords', [...newValue])\n },\n})\n\nconst authors = computed({\n get() {\n return props.authors\n },\n set(newValue) {\n emit('update:authors', [...newValue])\n },\n})\n\nconst mainFileSingleUse = computed({\n get() {\n return props.mainFileSingleUse\n },\n set(newValue) {\n emit('update:mainFileSingleUse', newValue)\n },\n})\n\nconst { t } = useI18n()\n\n// The save skips an item whose metadata cannot be edited, so its row is not validated: the user could not fix it.\n// A field reads its scope only once at setup, hence the key on the form.\nconst metadataValidationScope = computed(() => {\n return props.item.canEditMetadata ? props.validationScope : false\n})\n\nconst processingStatuses: readonly UploadQueueItemStatusType[] = [\n UploadQueueItemStatus.Processing,\n UploadQueueItemStatus.Loading,\n]\nconst processing = computed(() => {\n return processingStatuses.includes(props.item.status)\n})\nconst waiting = computed(() => {\n return props.item.status === UploadQueueItemStatus.Waiting\n})\nconst done = computed(() => {\n return !props.disableDoneAnimation && props.item.status === UploadQueueItemStatus.Uploaded\n})\nconst uploading = computed(() => {\n return props.item.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return props.item.progress.progressPercent\n})\n\nconst imageSrc = computed(() => {\n return props.item.imagePreview ? props.item.imagePreview.url : undefined\n})\nconst assetType = computed(() => {\n return props.item.assetType\n})\nconst status = computed(() => {\n if (!props.item) return DamAssetStatusDefault\n return props.item.assetStatus\n})\n\nconst cancelItem = () => {\n emit('cancelItem', { index: props.index, item: props.item, queueKey: props.queueKey })\n}\n\nconst showCancel = computed(() => {\n return props.cancelStatuses.includes(props.item.status)\n})\n\n// For a row that has not failed: refresh is offered after it has waited for its file or its metadata.\nconst refreshDue = ref(false)\nconst refreshTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n// A failed row offers refresh only while a refresh can still change it.\n// A row whose chunk the server never took, or whose file the server failed, has nothing a refresh could find.\nconst offeredByRow = computed(() => {\n if (props.item.status === UploadQueueItemStatus.Failed) return props.refreshMayHelp && !isNull(props.item.assetId)\n return refreshDue.value\n})\nconst showRefresh = computed(() => {\n return props.refreshOffered ?? offeredByRow.value\n})\n// Remove comes with refresh, and a failed row gets it at once: nothing else takes such a row out of the queue.\nconst showRemove = computed(() => {\n return showRefresh.value || props.item.status === UploadQueueItemStatus.Failed\n})\n\nconst showDetail = async () => {\n if (isNull(props.item.assetId)) return\n emit('showDetail', props.item.assetId)\n}\n\nconst refresh = () => {\n if (props.item.assetId) {\n emit('refreshItem', { index: props.index, assetId: props.item.assetId })\n }\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nwatch(\n () => props.item.status,\n async (newValue) => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = setTimeout(() => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n refreshDue.value = true\n }\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Uploaded) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n // An uploaded row whose metadata has not arrived by then has a\n // disabled form and the save skips it. Refresh loads the metadata.\n refreshTimer.value = setTimeout(() => {\n if (props.item.status !== UploadQueueItemStatus.Uploaded || props.item.canEditMetadata) return\n refreshDue.value = true\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Failed) {\n // The wait is over. For a failed row, the offer follows `refreshMayHelp` immediately.\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.item.canEditMetadata,\n (canEdit) => {\n // The metadata arrived after all, by notification or by refresh.\n if (canEdit && props.item.status === UploadQueueItemStatus.Uploaded) refreshDue.value = false\n }\n)\n\nonUnmounted(() => {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n})\n</script>\n\n<template>\n <VCol\n xxl=\"2\"\n xl=\"3\"\n md=\"4\"\n sm=\"6\"\n cols=\"12\"\n >\n <div class=\"dam-upload-queue__item\">\n <div class=\"dam-upload-queue__item-card\">\n <div class=\"position-relative\">\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"status\"\n :src=\"imageSrc\"\n background-color=\"#ccc\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"done\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n />\n <slot\n name=\"image-overlay\"\n :item=\"item\"\n />\n <UploadQueueItemErrorOverlay\n v-if=\"item.error.hasError\"\n :error=\"item.error\"\n />\n </div>\n <VRow\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <div class=\"w-100 d-flex justify-space-between align-center\">\n <div>\n <template v-if=\"!(hideEditOnDuplicate && item.isDuplicate)\">\n <slot\n name=\"edit\"\n :item=\"item\"\n >\n <VBtn\n size=\"small\"\n variant=\"text\"\n :disabled=\"!item.canEditMetadata\"\n @click.stop=\"showDetail\"\n >\n {{ t('common.damImage.image.button.editAsset') }}\n </VBtn>\n </slot>\n </template>\n </div>\n <div>\n <ATableCopyIdButton\n v-if=\"item.assetId\"\n :id=\"item.assetId\"\n button-t=\"common.damImage.queueItem.copyAssetId\"\n size=\"small\"\n />\n <VBtn\n v-if=\"showRefresh\"\n :aria-label=\"t('common.button.refresh')\"\n icon\n size=\"small\"\n variant=\"text\"\n :disabled=\"refreshDisabled\"\n @click.stop=\"refresh\"\n >\n <VIcon icon=\"mdi-refresh\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.refresh') }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-if=\"showCancel\"\n :aria-label=\"t('common.button.cancel')\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"cancelItem\"\n >\n <VIcon icon=\"mdi-close-circle-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.cancel') }}\n </VTooltip>\n </VBtn>\n <slot\n name=\"remove\"\n :item=\"item\"\n :index=\"index\"\n :offered=\"showRemove\"\n >\n <AActionDeleteButton\n v-if=\"showRemove\"\n variant=\"icon\"\n button-class=\"\"\n dialog-message-t=\"common.damImage.queueItem.removeFromQueue\"\n @delete-record=\"emit('removeItem', index)\"\n />\n </slot>\n </div>\n </div>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.displayTitle\"\n density=\"compact\"\n class=\"my-2 mb-3 mt-0 text-body-small\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.queueItem.displayTitle') }}: {{ item.displayTitle }}\n <span v-if=\"item.file?.size\"> ({{ prettyBytes(item.file.size) }})</span>\n </VCol>\n </VRow>\n <VRow\n v-if=\"duplicateNotice && item.isDuplicate\"\n class=\"text-body-small text-warning\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VCol>\n </VRow>\n <VForm :disabled=\"!item.canEditMetadata || (disableFormOnDuplicate && item.isDuplicate)\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n :key=\"item.canEditMetadata ? 'validated' : 'skipped'\"\n v-model=\"customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n :validation-scope=\"metadataValidationScope\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"keywords\"\n :queue-id=\"queueKey\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n multiple\n :required=\"keywordRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"authors\"\n :queue-id=\"queueKey\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"item.authorConflicts\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :required=\"authorRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"mainFileSingleUseEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <VSwitch\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </div>\n </div>\n </VCol>\n</template>\n"],"mappings":""}
|
|
@@ -16,30 +16,30 @@ type __VLS_Props = {
|
|
|
16
16
|
mainFileSingleUseEnabled?: boolean;
|
|
17
17
|
disableDoneAnimation?: boolean;
|
|
18
18
|
/**
|
|
19
|
-
* A failed row a refresh may still change: its finish request went out and the
|
|
20
|
-
*
|
|
21
|
-
* shown outside a queue has no such state.
|
|
19
|
+
* A failed row that a refresh may still change: its finish request went out and the
|
|
20
|
+
* server gave no final answer, or the original of its duplicate could not be read.
|
|
21
|
+
* The queue knows these rows. A row shown outside a queue has no such state.
|
|
22
22
|
*/
|
|
23
23
|
refreshMayHelp?: boolean;
|
|
24
|
-
/**
|
|
24
|
+
/** Statuses in which "cancel" is offered. */
|
|
25
25
|
cancelStatuses?: readonly UploadQueueItemStatusType[];
|
|
26
|
-
/**
|
|
26
|
+
/** Shows the line "The main file is a duplicate." under the title. */
|
|
27
27
|
duplicateNotice?: boolean;
|
|
28
|
-
/**
|
|
28
|
+
/** Keeps the form disabled on a duplicate regardless of its metadata. */
|
|
29
29
|
disableFormOnDuplicate?: boolean;
|
|
30
|
-
/** The scope the fields of an editable row report to
|
|
30
|
+
/** The scope the fields of an editable row report to. A non-editable row reports to none. */
|
|
31
31
|
validationScope?: ValidationScope;
|
|
32
|
-
/** How keywords and authors look while the row
|
|
32
|
+
/** How keywords and authors look while the row is not editable. Passed to both inputs as `disabledAs`. */
|
|
33
33
|
disabledFieldsAs?: DamFieldsDisabledAs;
|
|
34
|
-
/** A duplicate gets no edit button
|
|
34
|
+
/** A duplicate gets no edit button: neither the `edit` slot nor its default is rendered. */
|
|
35
35
|
hideEditOnDuplicate?: boolean;
|
|
36
|
-
/** Whether the row offers refresh,
|
|
36
|
+
/** Whether the row offers refresh, decided by the host. Without it the row decides itself. */
|
|
37
37
|
refreshOffered?: boolean | undefined;
|
|
38
|
-
/** The DAM configuration whose rules and forms the row follows
|
|
38
|
+
/** The DAM configuration whose rules and forms the row follows. Inherited when not given. */
|
|
39
39
|
configName?: string;
|
|
40
40
|
};
|
|
41
41
|
type __VLS_Slots = {
|
|
42
|
-
/**
|
|
42
|
+
/** Rendered over the picture, under the error overlay. */
|
|
43
43
|
'image-overlay'?(props: {
|
|
44
44
|
item: UploadQueueItem;
|
|
45
45
|
}): unknown;
|
|
@@ -47,7 +47,7 @@ type __VLS_Slots = {
|
|
|
47
47
|
edit?(props: {
|
|
48
48
|
item: UploadQueueItem;
|
|
49
49
|
}): unknown;
|
|
50
|
-
/** Last
|
|
50
|
+
/** Last in the action line. Default: "Remove from queue" while offered, emits `removeItem`. */
|
|
51
51
|
remove?(props: {
|
|
52
52
|
item: UploadQueueItem;
|
|
53
53
|
index: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploadQueueItemEditable.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_component_VCol","_withCtx","_createElementVNode","_createVNode","AssetImage","_renderSlot","UploadQueueItemErrorOverlay","_createCommentVNode","_component_VRow","_component_VBtn","_withModifiers","_createTextVNode","_toDisplayString","_unref","ATableCopyIdButton","_component_VIcon","_component_VTooltip","AActionDeleteButton","_createElementBlock","_component_VForm","AssetCustomMetadataForm","ASystemEntityScope","KeywordRemoteAutocompleteWithCached","AuthorRemoteAutocompleteWithCached","_component_VSwitch","ASystemEntityScope_default","AActionDeleteButton_default","ATableCopyIdButton_default","AssetCustomMetadataForm_default","AuthorRemoteAutocompleteWithCached_default","KeywordRemoteAutocompleteWithCached_default","AssetImage_default","UploadQueueItemErrorOverlay_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","IMAGE_ASPECT_RATIO","UploadQueueItemEditable_vue_vue_type_script_setup_true_lang_default","UploadQueueItemStatus","ADamAssetMetadataValidationScopeSymbol","__emit","props","__props","emit","damConfigName","useDamConfigName","customData","computed","newValue","keywords","authors","mainFileSingleUse","useI18n","metadataValidationScope","processingStatuses","processing","waiting","done","uploading","uploadProgress","imageSrc","assetType","status","DamAssetStatusDefault","cancelItem","showCancel","refreshDue","ref","refreshTimer","offeredByRow","isNull","showRefresh","showRemove","showDetail","refresh","useDamKeywordAssetTypeConfig","useDamAuthorAssetTypeConfig","watch","canEdit","onUnmounted","openBlock","createBlock","VCol","withCtx","createElementVNode","createVNode","renderSlot","_ctx","createCommentVNode","VRow","VBtn","withModifiers","createTextVNode","toDisplayString","unref","t","VIcon","VTooltip","_cache","createElementBlock","prettyBytes","VForm","$event","keywordEnabled","keywordRequired","authorEnabled","authorRequired","VSwitch"],"sources":["../../../../../src/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onUnmounted, ref, type Ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetCustomData, DamAssetStatusDefault } from '@/domains/dam/types/Asset'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport {\n type UploadQueueItem,\n UploadQueueItemStatus,\n type UploadQueueItemStatusType,\n type UploadQueueKey,\n} from '@/domains/dam/types/UploadQueue'\nimport type { ValidationScope } from '@/shared/types/Validation'\nimport ATableCopyIdButton from '@/domains/ui/buttons/table/components/ATableCopyIdButton.vue'\nimport { prettyBytes } from '@/shared/utils/file'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport AssetCustomMetadataForm from '@/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue'\nimport AssetImage from '@/domains/dam/assetDetail/components/AssetImage.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/domains/dam/composables/uploadValidations'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport { isNull } from '@/shared/utils/common'\nimport { useDamKeywordAssetTypeConfig } from '@/domains/dam/keyword/composables/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/domains/dam/author/composables/damAuthorConfig'\nimport AActionDeleteButton from '@/domains/ui/buttons/action/components/AActionDeleteButton.vue'\nimport { SHOW_REFRESH_AFTER_SECONDS } from '@/domains/dam/uploadQueue/composables/uploadQueueItemRefresh'\nimport UploadQueueItemErrorOverlay from '@/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.vue'\nimport type { DamFieldsDisabledAs } from '@/domains/dam/uploadQueue/components/uploadQueueBindings'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n queueKey: UploadQueueKey\n extSystem: IntegerId\n customData: AssetCustomData\n keywords: DocId[]\n authors: DocId[]\n item: UploadQueueItem\n refreshDisabled: boolean\n mainFileSingleUse: boolean | null\n mainFileSingleUseEnabled?: boolean\n disableDoneAnimation?: boolean\n /**\n * A failed row a refresh may still change: its finish request went out and the server has said nothing final\n * about it, or the original of its duplicate could not be read. The queue knows which rows those are; a row\n * shown outside a queue has no such state.\n */\n refreshMayHelp?: boolean\n /** Where \"cancel\" is offered. */\n cancelStatuses?: readonly UploadQueueItemStatusType[]\n /** The line \"The main file is a duplicate.\" under the title. */\n duplicateNotice?: boolean\n /** The form stays off on a duplicate whatever its metadata. */\n disableFormOnDuplicate?: boolean\n /** The scope the fields of an editable row report to; a row that cannot be edited reports to none. */\n validationScope?: ValidationScope\n /** How keywords and authors look while the row cannot be edited; handed to both inputs as `disabledAs`. */\n disabledFieldsAs?: DamFieldsDisabledAs\n /** A duplicate gets no edit button at all: neither the `edit` slot nor its default is drawn. */\n hideEditOnDuplicate?: boolean\n /** Whether the row offers refresh, worked out by its host. Without it the row works it out itself. */\n refreshOffered?: boolean | undefined\n /** The DAM configuration whose rules and forms the row follows; inherited when not given. */\n configName?: string\n }>(),\n {\n mainFileSingleUseEnabled: true,\n disableDoneAnimation: false,\n refreshMayHelp: false,\n cancelStatuses: () => [\n UploadQueueItemStatus.Loading,\n UploadQueueItemStatus.Waiting,\n UploadQueueItemStatus.Uploading,\n ],\n duplicateNotice: true,\n disableFormOnDuplicate: false,\n validationScope: ADamAssetMetadataValidationScopeSymbol,\n disabledFieldsAs: 'chips',\n hideEditOnDuplicate: false,\n // Declared, or Vue would make an absent boolean `false` and the row would never offer refresh by itself.\n refreshOffered: undefined,\n configName: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:customData', data: AssetCustomData): void\n (e: 'update:keywords', data: DocId[]): void\n (e: 'update:authors', data: DocId[]): void\n (e: 'update:mainFileSingleUse', data: boolean | null): void\n (e: 'cancelItem', data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }): void\n (e: 'removeItem', index: number): void\n (e: 'showDetail', data: DocId): void\n (e: 'refreshItem', data: { index: number; assetId: DocId }): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\ndefineSlots<{\n /** Over the picture, under the error overlay. */\n 'image-overlay'?(props: { item: UploadQueueItem }): unknown\n /** Left of the action line. Default: \"Edit in Media Library\", disabled without metadata, emits `showDetail`. */\n edit?(props: { item: UploadQueueItem }): unknown\n /** Last of the action line. Default: \"Remove from queue\" while it is offered, emits `removeItem`. */\n remove?(props: { item: UploadQueueItem; index: number; offered: boolean }): unknown\n}>()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst customData = computed({\n get() {\n return props.customData\n },\n set(newValue) {\n emit('update:customData', { ...props.customData, ...newValue })\n },\n})\n\nconst keywords = computed({\n get() {\n return props.keywords\n },\n set(newValue) {\n emit('update:keywords', [...newValue])\n },\n})\n\nconst authors = computed({\n get() {\n return props.authors\n },\n set(newValue) {\n emit('update:authors', [...newValue])\n },\n})\n\nconst mainFileSingleUse = computed({\n get() {\n return props.mainFileSingleUse\n },\n set(newValue) {\n emit('update:mainFileSingleUse', newValue)\n },\n})\n\nconst { t } = useI18n()\n\n// The save skips an item whose metadata cannot be edited, so nothing in its row is validated: it could not be\n// put right. A scope is read once, when a field is set up - hence the key on the form.\nconst metadataValidationScope = computed(() => {\n return props.item.canEditMetadata ? props.validationScope : false\n})\n\nconst processingStatuses: readonly UploadQueueItemStatusType[] = [\n UploadQueueItemStatus.Processing,\n UploadQueueItemStatus.Loading,\n]\nconst processing = computed(() => {\n return processingStatuses.includes(props.item.status)\n})\nconst waiting = computed(() => {\n return props.item.status === UploadQueueItemStatus.Waiting\n})\nconst done = computed(() => {\n return !props.disableDoneAnimation && props.item.status === UploadQueueItemStatus.Uploaded\n})\nconst uploading = computed(() => {\n return props.item.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return props.item.progress.progressPercent\n})\n\nconst imageSrc = computed(() => {\n return props.item.imagePreview ? props.item.imagePreview.url : undefined\n})\nconst assetType = computed(() => {\n return props.item.assetType\n})\nconst status = computed(() => {\n if (!props.item) return DamAssetStatusDefault\n return props.item.assetStatus\n})\n\nconst cancelItem = () => {\n emit('cancelItem', { index: props.index, item: props.item, queueKey: props.queueKey })\n}\n\nconst showCancel = computed(() => {\n return props.cancelStatuses.includes(props.item.status)\n})\n\n// Of a row that has not failed: offered once it has waited, for its file or for its metadata.\nconst refreshDue = ref(false)\nconst refreshTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n// A failed row offers refresh only while one may still change it. One whose chunk the server never took, or\n// whose file the server has failed, has nothing a refresh could find.\nconst offeredByRow = computed(() => {\n if (props.item.status === UploadQueueItemStatus.Failed) return props.refreshMayHelp && !isNull(props.item.assetId)\n return refreshDue.value\n})\nconst showRefresh = computed(() => {\n return props.refreshOffered ?? offeredByRow.value\n})\n// Remove comes with refresh, and a failed row has it at once: nothing else takes such a row out of the queue.\nconst showRemove = computed(() => {\n return showRefresh.value || props.item.status === UploadQueueItemStatus.Failed\n})\n\nconst showDetail = async () => {\n if (isNull(props.item.assetId)) return\n emit('showDetail', props.item.assetId)\n}\n\nconst refresh = () => {\n if (props.item.assetId) {\n emit('refreshItem', { index: props.index, assetId: props.item.assetId })\n }\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nwatch(\n () => props.item.status,\n async (newValue) => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = setTimeout(() => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n refreshDue.value = true\n }\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Uploaded) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n // An uploaded row whose metadata has not come by then has a disabled form, and the save skips it. Refresh\n // loads the metadata.\n refreshTimer.value = setTimeout(() => {\n if (props.item.status !== UploadQueueItemStatus.Uploaded || props.item.canEditMetadata) return\n refreshDue.value = true\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Failed) {\n // Its wait is over: what a failed row offers follows `refreshMayHelp`, at once.\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.item.canEditMetadata,\n (canEdit) => {\n // The metadata of an uploaded row came after all, by its notification or by that refresh.\n if (canEdit && props.item.status === UploadQueueItemStatus.Uploaded) refreshDue.value = false\n }\n)\n\nonUnmounted(() => {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n})\n</script>\n\n<template>\n <VCol\n xxl=\"2\"\n xl=\"3\"\n md=\"4\"\n sm=\"6\"\n cols=\"12\"\n >\n <div class=\"dam-upload-queue__item\">\n <div class=\"dam-upload-queue__item-card\">\n <div class=\"position-relative\">\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"status\"\n :src=\"imageSrc\"\n background-color=\"#ccc\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"done\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n />\n <slot\n name=\"image-overlay\"\n :item=\"item\"\n />\n <UploadQueueItemErrorOverlay\n v-if=\"item.error.hasError\"\n :error=\"item.error\"\n />\n </div>\n <VRow\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <div class=\"w-100 d-flex justify-space-between align-center\">\n <div>\n <template v-if=\"!(hideEditOnDuplicate && item.isDuplicate)\">\n <slot\n name=\"edit\"\n :item=\"item\"\n >\n <VBtn\n size=\"small\"\n variant=\"text\"\n :disabled=\"!item.canEditMetadata\"\n @click.stop=\"showDetail\"\n >\n {{ t('common.damImage.image.button.editAsset') }}\n </VBtn>\n </slot>\n </template>\n </div>\n <div>\n <ATableCopyIdButton\n v-if=\"item.assetId\"\n :id=\"item.assetId\"\n button-t=\"common.damImage.queueItem.copyAssetId\"\n size=\"small\"\n />\n <VBtn\n v-if=\"showRefresh\"\n :aria-label=\"t('common.button.refresh')\"\n icon\n size=\"small\"\n variant=\"text\"\n :disabled=\"refreshDisabled\"\n @click.stop=\"refresh\"\n >\n <VIcon icon=\"mdi-refresh\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.refresh') }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-if=\"showCancel\"\n :aria-label=\"t('common.button.cancel')\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"cancelItem\"\n >\n <VIcon icon=\"mdi-close-circle-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.cancel') }}\n </VTooltip>\n </VBtn>\n <slot\n name=\"remove\"\n :item=\"item\"\n :index=\"index\"\n :offered=\"showRemove\"\n >\n <AActionDeleteButton\n v-if=\"showRemove\"\n variant=\"icon\"\n button-class=\"\"\n dialog-message-t=\"common.damImage.queueItem.removeFromQueue\"\n @delete-record=\"emit('removeItem', index)\"\n />\n </slot>\n </div>\n </div>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.displayTitle\"\n density=\"compact\"\n class=\"my-2 mb-3 mt-0 text-body-small\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.queueItem.displayTitle') }}: {{ item.displayTitle }}\n <span v-if=\"item.file?.size\"> ({{ prettyBytes(item.file.size) }})</span>\n </VCol>\n </VRow>\n <VRow\n v-if=\"duplicateNotice && item.isDuplicate\"\n class=\"text-body-small text-warning\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VCol>\n </VRow>\n <VForm :disabled=\"!item.canEditMetadata || (disableFormOnDuplicate && item.isDuplicate)\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n :key=\"item.canEditMetadata ? 'validated' : 'skipped'\"\n v-model=\"customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n :validation-scope=\"metadataValidationScope\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"keywords\"\n :queue-id=\"queueKey\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n multiple\n :required=\"keywordRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"authors\"\n :queue-id=\"queueKey\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"item.authorConflicts\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :required=\"authorRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"mainFileSingleUseEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <VSwitch\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </div>\n </div>\n </VCol>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UploadQueueItemEditable.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_component_VCol","_withCtx","_createElementVNode","_createVNode","AssetImage","_renderSlot","UploadQueueItemErrorOverlay","_createCommentVNode","_component_VRow","_component_VBtn","_withModifiers","_createTextVNode","_toDisplayString","_unref","ATableCopyIdButton","_component_VIcon","_component_VTooltip","AActionDeleteButton","_createElementBlock","_component_VForm","AssetCustomMetadataForm","ASystemEntityScope","KeywordRemoteAutocompleteWithCached","AuthorRemoteAutocompleteWithCached","_component_VSwitch","ASystemEntityScope_default","AActionDeleteButton_default","ATableCopyIdButton_default","AssetCustomMetadataForm_default","AuthorRemoteAutocompleteWithCached_default","KeywordRemoteAutocompleteWithCached_default","AssetImage_default","UploadQueueItemErrorOverlay_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","IMAGE_ASPECT_RATIO","UploadQueueItemEditable_vue_vue_type_script_setup_true_lang_default","UploadQueueItemStatus","ADamAssetMetadataValidationScopeSymbol","__emit","props","__props","emit","damConfigName","useDamConfigName","customData","computed","newValue","keywords","authors","mainFileSingleUse","useI18n","metadataValidationScope","processingStatuses","processing","waiting","done","uploading","uploadProgress","imageSrc","assetType","status","DamAssetStatusDefault","cancelItem","showCancel","refreshDue","ref","refreshTimer","offeredByRow","isNull","showRefresh","showRemove","showDetail","refresh","useDamKeywordAssetTypeConfig","useDamAuthorAssetTypeConfig","watch","canEdit","onUnmounted","openBlock","createBlock","VCol","withCtx","createElementVNode","createVNode","renderSlot","_ctx","createCommentVNode","VRow","VBtn","withModifiers","createTextVNode","toDisplayString","unref","t","VIcon","VTooltip","_cache","createElementBlock","prettyBytes","VForm","$event","keywordEnabled","keywordRequired","authorEnabled","authorRequired","VSwitch"],"sources":["../../../../../src/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onUnmounted, ref, type Ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetCustomData, DamAssetStatusDefault } from '@/domains/dam/types/Asset'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport {\n type UploadQueueItem,\n UploadQueueItemStatus,\n type UploadQueueItemStatusType,\n type UploadQueueKey,\n} from '@/domains/dam/types/UploadQueue'\nimport type { ValidationScope } from '@/shared/types/Validation'\nimport ATableCopyIdButton from '@/domains/ui/buttons/table/components/ATableCopyIdButton.vue'\nimport { prettyBytes } from '@/shared/utils/file'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport AssetCustomMetadataForm from '@/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue'\nimport AssetImage from '@/domains/dam/assetDetail/components/AssetImage.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/domains/dam/composables/uploadValidations'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport { isNull } from '@/shared/utils/common'\nimport { useDamKeywordAssetTypeConfig } from '@/domains/dam/keyword/composables/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/domains/dam/author/composables/damAuthorConfig'\nimport AActionDeleteButton from '@/domains/ui/buttons/action/components/AActionDeleteButton.vue'\nimport { SHOW_REFRESH_AFTER_SECONDS } from '@/domains/dam/uploadQueue/composables/uploadQueueItemRefresh'\nimport UploadQueueItemErrorOverlay from '@/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.vue'\nimport type { DamFieldsDisabledAs } from '@/domains/dam/uploadQueue/components/uploadQueueBindings'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n queueKey: UploadQueueKey\n extSystem: IntegerId\n customData: AssetCustomData\n keywords: DocId[]\n authors: DocId[]\n item: UploadQueueItem\n refreshDisabled: boolean\n mainFileSingleUse: boolean | null\n mainFileSingleUseEnabled?: boolean\n disableDoneAnimation?: boolean\n /**\n * A failed row that a refresh may still change: its finish request went out and the\n * server gave no final answer, or the original of its duplicate could not be read.\n * The queue knows these rows. A row shown outside a queue has no such state.\n */\n refreshMayHelp?: boolean\n /** Statuses in which \"cancel\" is offered. */\n cancelStatuses?: readonly UploadQueueItemStatusType[]\n /** Shows the line \"The main file is a duplicate.\" under the title. */\n duplicateNotice?: boolean\n /** Keeps the form disabled on a duplicate regardless of its metadata. */\n disableFormOnDuplicate?: boolean\n /** The scope the fields of an editable row report to. A non-editable row reports to none. */\n validationScope?: ValidationScope\n /** How keywords and authors look while the row is not editable. Passed to both inputs as `disabledAs`. */\n disabledFieldsAs?: DamFieldsDisabledAs\n /** A duplicate gets no edit button: neither the `edit` slot nor its default is rendered. */\n hideEditOnDuplicate?: boolean\n /** Whether the row offers refresh, decided by the host. Without it the row decides itself. */\n refreshOffered?: boolean | undefined\n /** The DAM configuration whose rules and forms the row follows. Inherited when not given. */\n configName?: string\n }>(),\n {\n mainFileSingleUseEnabled: true,\n disableDoneAnimation: false,\n refreshMayHelp: false,\n cancelStatuses: () => [\n UploadQueueItemStatus.Loading,\n UploadQueueItemStatus.Waiting,\n UploadQueueItemStatus.Uploading,\n ],\n duplicateNotice: true,\n disableFormOnDuplicate: false,\n validationScope: ADamAssetMetadataValidationScopeSymbol,\n disabledFieldsAs: 'chips',\n hideEditOnDuplicate: false,\n // Declared explicitly, otherwise Vue casts an absent boolean to `false` and the row never offers refresh by itself.\n refreshOffered: undefined,\n configName: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:customData', data: AssetCustomData): void\n (e: 'update:keywords', data: DocId[]): void\n (e: 'update:authors', data: DocId[]): void\n (e: 'update:mainFileSingleUse', data: boolean | null): void\n (e: 'cancelItem', data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }): void\n (e: 'removeItem', index: number): void\n (e: 'showDetail', data: DocId): void\n (e: 'refreshItem', data: { index: number; assetId: DocId }): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\ndefineSlots<{\n /** Rendered over the picture, under the error overlay. */\n 'image-overlay'?(props: { item: UploadQueueItem }): unknown\n /** Left of the action line. Default: \"Edit in Media Library\", disabled without metadata, emits `showDetail`. */\n edit?(props: { item: UploadQueueItem }): unknown\n /** Last in the action line. Default: \"Remove from queue\" while offered, emits `removeItem`. */\n remove?(props: { item: UploadQueueItem; index: number; offered: boolean }): unknown\n}>()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst customData = computed({\n get() {\n return props.customData\n },\n set(newValue) {\n emit('update:customData', { ...props.customData, ...newValue })\n },\n})\n\nconst keywords = computed({\n get() {\n return props.keywords\n },\n set(newValue) {\n emit('update:keywords', [...newValue])\n },\n})\n\nconst authors = computed({\n get() {\n return props.authors\n },\n set(newValue) {\n emit('update:authors', [...newValue])\n },\n})\n\nconst mainFileSingleUse = computed({\n get() {\n return props.mainFileSingleUse\n },\n set(newValue) {\n emit('update:mainFileSingleUse', newValue)\n },\n})\n\nconst { t } = useI18n()\n\n// The save skips an item whose metadata cannot be edited, so its row is not validated: the user could not fix it.\n// A field reads its scope only once at setup, hence the key on the form.\nconst metadataValidationScope = computed(() => {\n return props.item.canEditMetadata ? props.validationScope : false\n})\n\nconst processingStatuses: readonly UploadQueueItemStatusType[] = [\n UploadQueueItemStatus.Processing,\n UploadQueueItemStatus.Loading,\n]\nconst processing = computed(() => {\n return processingStatuses.includes(props.item.status)\n})\nconst waiting = computed(() => {\n return props.item.status === UploadQueueItemStatus.Waiting\n})\nconst done = computed(() => {\n return !props.disableDoneAnimation && props.item.status === UploadQueueItemStatus.Uploaded\n})\nconst uploading = computed(() => {\n return props.item.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return props.item.progress.progressPercent\n})\n\nconst imageSrc = computed(() => {\n return props.item.imagePreview ? props.item.imagePreview.url : undefined\n})\nconst assetType = computed(() => {\n return props.item.assetType\n})\nconst status = computed(() => {\n if (!props.item) return DamAssetStatusDefault\n return props.item.assetStatus\n})\n\nconst cancelItem = () => {\n emit('cancelItem', { index: props.index, item: props.item, queueKey: props.queueKey })\n}\n\nconst showCancel = computed(() => {\n return props.cancelStatuses.includes(props.item.status)\n})\n\n// For a row that has not failed: refresh is offered after it has waited for its file or its metadata.\nconst refreshDue = ref(false)\nconst refreshTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n// A failed row offers refresh only while a refresh can still change it.\n// A row whose chunk the server never took, or whose file the server failed, has nothing a refresh could find.\nconst offeredByRow = computed(() => {\n if (props.item.status === UploadQueueItemStatus.Failed) return props.refreshMayHelp && !isNull(props.item.assetId)\n return refreshDue.value\n})\nconst showRefresh = computed(() => {\n return props.refreshOffered ?? offeredByRow.value\n})\n// Remove comes with refresh, and a failed row gets it at once: nothing else takes such a row out of the queue.\nconst showRemove = computed(() => {\n return showRefresh.value || props.item.status === UploadQueueItemStatus.Failed\n})\n\nconst showDetail = async () => {\n if (isNull(props.item.assetId)) return\n emit('showDetail', props.item.assetId)\n}\n\nconst refresh = () => {\n if (props.item.assetId) {\n emit('refreshItem', { index: props.index, assetId: props.item.assetId })\n }\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nwatch(\n () => props.item.status,\n async (newValue) => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = setTimeout(() => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n refreshDue.value = true\n }\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Uploaded) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n // An uploaded row whose metadata has not arrived by then has a\n // disabled form and the save skips it. Refresh loads the metadata.\n refreshTimer.value = setTimeout(() => {\n if (props.item.status !== UploadQueueItemStatus.Uploaded || props.item.canEditMetadata) return\n refreshDue.value = true\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Failed) {\n // The wait is over. For a failed row, the offer follows `refreshMayHelp` immediately.\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.item.canEditMetadata,\n (canEdit) => {\n // The metadata arrived after all, by notification or by refresh.\n if (canEdit && props.item.status === UploadQueueItemStatus.Uploaded) refreshDue.value = false\n }\n)\n\nonUnmounted(() => {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n})\n</script>\n\n<template>\n <VCol\n xxl=\"2\"\n xl=\"3\"\n md=\"4\"\n sm=\"6\"\n cols=\"12\"\n >\n <div class=\"dam-upload-queue__item\">\n <div class=\"dam-upload-queue__item-card\">\n <div class=\"position-relative\">\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"status\"\n :src=\"imageSrc\"\n background-color=\"#ccc\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"done\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n />\n <slot\n name=\"image-overlay\"\n :item=\"item\"\n />\n <UploadQueueItemErrorOverlay\n v-if=\"item.error.hasError\"\n :error=\"item.error\"\n />\n </div>\n <VRow\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <div class=\"w-100 d-flex justify-space-between align-center\">\n <div>\n <template v-if=\"!(hideEditOnDuplicate && item.isDuplicate)\">\n <slot\n name=\"edit\"\n :item=\"item\"\n >\n <VBtn\n size=\"small\"\n variant=\"text\"\n :disabled=\"!item.canEditMetadata\"\n @click.stop=\"showDetail\"\n >\n {{ t('common.damImage.image.button.editAsset') }}\n </VBtn>\n </slot>\n </template>\n </div>\n <div>\n <ATableCopyIdButton\n v-if=\"item.assetId\"\n :id=\"item.assetId\"\n button-t=\"common.damImage.queueItem.copyAssetId\"\n size=\"small\"\n />\n <VBtn\n v-if=\"showRefresh\"\n :aria-label=\"t('common.button.refresh')\"\n icon\n size=\"small\"\n variant=\"text\"\n :disabled=\"refreshDisabled\"\n @click.stop=\"refresh\"\n >\n <VIcon icon=\"mdi-refresh\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.refresh') }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-if=\"showCancel\"\n :aria-label=\"t('common.button.cancel')\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"cancelItem\"\n >\n <VIcon icon=\"mdi-close-circle-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.cancel') }}\n </VTooltip>\n </VBtn>\n <slot\n name=\"remove\"\n :item=\"item\"\n :index=\"index\"\n :offered=\"showRemove\"\n >\n <AActionDeleteButton\n v-if=\"showRemove\"\n variant=\"icon\"\n button-class=\"\"\n dialog-message-t=\"common.damImage.queueItem.removeFromQueue\"\n @delete-record=\"emit('removeItem', index)\"\n />\n </slot>\n </div>\n </div>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.displayTitle\"\n density=\"compact\"\n class=\"my-2 mb-3 mt-0 text-body-small\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.queueItem.displayTitle') }}: {{ item.displayTitle }}\n <span v-if=\"item.file?.size\"> ({{ prettyBytes(item.file.size) }})</span>\n </VCol>\n </VRow>\n <VRow\n v-if=\"duplicateNotice && item.isDuplicate\"\n class=\"text-body-small text-warning\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VCol>\n </VRow>\n <VForm :disabled=\"!item.canEditMetadata || (disableFormOnDuplicate && item.isDuplicate)\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n :key=\"item.canEditMetadata ? 'validated' : 'skipped'\"\n v-model=\"customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n :validation-scope=\"metadataValidationScope\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"keywords\"\n :queue-id=\"queueKey\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n multiple\n :required=\"keywordRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"authors\"\n :queue-id=\"queueKey\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"item.authorConflicts\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :required=\"authorRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"mainFileSingleUseEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <VSwitch\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </div>\n </div>\n </VCol>\n</template>\n"],"mappings":"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"}
|
|
@@ -5,32 +5,32 @@ import { CustomDataValue } from '../../../customDataForm/types/CustomDataForm';
|
|
|
5
5
|
import { UploadQueue, UploadQueueItem, UploadQueueKey } from '../../types/UploadQueue';
|
|
6
6
|
import { UploadRefreshOutcome } from '../settlement/uploadSettlementTypes';
|
|
7
7
|
import { UploadRefreshWarningKey } from '../composables/uploadQueueItemRefresh';
|
|
8
|
-
/** How
|
|
8
|
+
/** How a row's keywords and authors look while not editable: as chips, or as a disabled input. */
|
|
9
9
|
export type DamFieldsDisabledAs = 'chips' | 'input';
|
|
10
|
-
/** The suggestions of a queue
|
|
10
|
+
/** The suggestions of a queue. Name chips of its rows mark them as "new". */
|
|
11
11
|
export type UploadQueueSuggestionsLookup = (queueKey: UploadQueueKey) => UploadQueue['suggestions'] | undefined;
|
|
12
|
-
/** Provided by an application whose queues are not the library
|
|
12
|
+
/** Provided by an application whose queues are not in the library store. Without it the chips read that store. */
|
|
13
13
|
export declare const UploadQueueSuggestionsKey: InjectionKey<UploadQueueSuggestionsLookup>;
|
|
14
|
-
/**
|
|
14
|
+
/** Default: the suggestions in the library store. The store is resolved only when a chip needs them. */
|
|
15
15
|
export declare const libraryUploadQueueSuggestions: UploadQueueSuggestionsLookup;
|
|
16
|
-
/** What
|
|
16
|
+
/** What a queue list needs from its host. Without it the list uses the library store. */
|
|
17
17
|
export interface UploadQueueListBinding {
|
|
18
18
|
items(): UploadQueueItem[];
|
|
19
|
-
/** `queueKey` is the one
|
|
19
|
+
/** `queueKey` is the one from the row's event. */
|
|
20
20
|
cancel(item: UploadQueueItem, index: number, queueKey: UploadQueueKey): void;
|
|
21
|
-
/**
|
|
21
|
+
/** Used by the library's default "remove from queue". */
|
|
22
22
|
remove(index: number): void;
|
|
23
23
|
refresh(item: UploadQueueItem): Promise<UploadRefreshOutcome>;
|
|
24
24
|
refreshMayHelp(item: UploadQueueItem): boolean;
|
|
25
|
-
/**
|
|
25
|
+
/** Shows a refresh warning through the host's own alerts. */
|
|
26
26
|
warn(key: UploadRefreshWarningKey): void;
|
|
27
|
-
/**
|
|
27
|
+
/** Passes the rows' keywords and authors to the name caches and fetches them, once when the list mounts. */
|
|
28
28
|
prime(items: UploadQueueItem[]): void;
|
|
29
29
|
mainFileSingleUseEnabled: boolean;
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
31
|
+
/** Default list binding: the library store, caches, alerts and options. It follows the key as it changes. */
|
|
32
32
|
export declare function useLibraryUploadQueueListBinding(queueKey: MaybeRefOrGetter<UploadQueueKey>, configName: string): UploadQueueListBinding;
|
|
33
|
-
/** What
|
|
33
|
+
/** What a queue's mass operations need from their host. Without it they use the library store. */
|
|
34
34
|
export interface UploadQueueMassOperationsBinding {
|
|
35
35
|
assetTypes(): DamAssetTypeType[];
|
|
36
36
|
fillCustomDataValue(data: {
|
|
@@ -38,9 +38,9 @@ export interface UploadQueueMassOperationsBinding {
|
|
|
38
38
|
elementProperty: string;
|
|
39
39
|
value: CustomDataValue;
|
|
40
40
|
}, forceReplace?: boolean): void;
|
|
41
|
-
/**
|
|
41
|
+
/** The host decides which rows are filled. The library fills every row. */
|
|
42
42
|
fillKeywords(value: DocId[], forceReplace?: boolean): void;
|
|
43
43
|
fillAuthors(value: DocId[], forceReplace?: boolean): void;
|
|
44
44
|
}
|
|
45
|
-
/**
|
|
45
|
+
/** Default binding: the asset types of the library store and `useUploadQueueMassOperations`. */
|
|
46
46
|
export declare function useLibraryUploadQueueMassOperationsBinding(queueKey: MaybeRefOrGetter<UploadQueueKey>): UploadQueueMassOperationsBinding;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadQueueBindings.js","names":["UploadQueueSuggestionsKey","libraryUploadQueueSuggestions","useUploadQueuesStore","queueKey","useLibraryUploadQueueListBinding","uploadQueuesStore","useAlerts","useDamCachedKeywords","configName","useDamCachedAuthors","useCommonAdminCoreDamOptions","toValue","itemQueueKey","item","index","showWarningT","key","items","addToCachedKeywords","addToCachedAuthors","fetchCachedKeywords","fetchCachedAuthors","useLibraryUploadQueueMassOperationsBinding","useUploadQueueMassOperations","replaceEmptyCustomDataValue","replaceEmptyKeywords","replaceEmptyAuthors"],"sources":["../../../../../src/domains/dam/uploadQueue/components/uploadQueueBindings.ts"],"sourcesContent":["import { type InjectionKey, type MaybeRefOrGetter, toValue } from 'vue'\nimport type { DocId } from '@/shared/types/common'\nimport type { DamAssetTypeType } from '@/domains/dam/types/Asset'\nimport type { CustomDataValue } from '@/domains/customDataForm/types/CustomDataForm'\nimport type { UploadQueue, UploadQueueItem, UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport type { UploadRefreshOutcome } from '@/domains/dam/uploadQueue/settlement/uploadSettlementTypes'\nimport type { UploadRefreshWarningKey } from '@/domains/dam/uploadQueue/composables/uploadQueueItemRefresh'\nimport { useUploadQueuesStore } from '@/domains/dam/uploadQueue/store/uploadQueuesStore'\nimport { useUploadQueueMassOperations } from '@/domains/dam/uploadQueue/composables/uploadQueueMassOperations'\nimport { useDamCachedKeywords } from '@/domains/dam/keyword/composables/cachedKeywords'\nimport { useDamCachedAuthors } from '@/domains/dam/author/composables/cachedAuthors'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport { useAlerts } from '@/domains/system/composables/alerts'\n\n/** How
|
|
1
|
+
{"version":3,"file":"uploadQueueBindings.js","names":["UploadQueueSuggestionsKey","libraryUploadQueueSuggestions","useUploadQueuesStore","queueKey","useLibraryUploadQueueListBinding","uploadQueuesStore","useAlerts","useDamCachedKeywords","configName","useDamCachedAuthors","useCommonAdminCoreDamOptions","toValue","itemQueueKey","item","index","showWarningT","key","items","addToCachedKeywords","addToCachedAuthors","fetchCachedKeywords","fetchCachedAuthors","useLibraryUploadQueueMassOperationsBinding","useUploadQueueMassOperations","replaceEmptyCustomDataValue","replaceEmptyKeywords","replaceEmptyAuthors"],"sources":["../../../../../src/domains/dam/uploadQueue/components/uploadQueueBindings.ts"],"sourcesContent":["import { type InjectionKey, type MaybeRefOrGetter, toValue } from 'vue'\nimport type { DocId } from '@/shared/types/common'\nimport type { DamAssetTypeType } from '@/domains/dam/types/Asset'\nimport type { CustomDataValue } from '@/domains/customDataForm/types/CustomDataForm'\nimport type { UploadQueue, UploadQueueItem, UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport type { UploadRefreshOutcome } from '@/domains/dam/uploadQueue/settlement/uploadSettlementTypes'\nimport type { UploadRefreshWarningKey } from '@/domains/dam/uploadQueue/composables/uploadQueueItemRefresh'\nimport { useUploadQueuesStore } from '@/domains/dam/uploadQueue/store/uploadQueuesStore'\nimport { useUploadQueueMassOperations } from '@/domains/dam/uploadQueue/composables/uploadQueueMassOperations'\nimport { useDamCachedKeywords } from '@/domains/dam/keyword/composables/cachedKeywords'\nimport { useDamCachedAuthors } from '@/domains/dam/author/composables/cachedAuthors'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport { useAlerts } from '@/domains/system/composables/alerts'\n\n/** How a row's keywords and authors look while not editable: as chips, or as a disabled input. */\nexport type DamFieldsDisabledAs = 'chips' | 'input'\n\n/** The suggestions of a queue. Name chips of its rows mark them as \"new\". */\nexport type UploadQueueSuggestionsLookup = (queueKey: UploadQueueKey) => UploadQueue['suggestions'] | undefined\n\n/** Provided by an application whose queues are not in the library store. Without it the chips read that store. */\nexport const UploadQueueSuggestionsKey: InjectionKey<UploadQueueSuggestionsLookup> =\n Symbol.for('anzu:UploadQueueSuggestions')\n\n/** Default: the suggestions in the library store. The store is resolved only when a chip needs them. */\nexport const libraryUploadQueueSuggestions: UploadQueueSuggestionsLookup = (queueKey) =>\n useUploadQueuesStore().getQueue(queueKey)?.suggestions\n\n/** What a queue list needs from its host. Without it the list uses the library store. */\nexport interface UploadQueueListBinding {\n items(): UploadQueueItem[]\n /** `queueKey` is the one from the row's event. */\n cancel(item: UploadQueueItem, index: number, queueKey: UploadQueueKey): void\n /** Used by the library's default \"remove from queue\". */\n remove(index: number): void\n refresh(item: UploadQueueItem): Promise<UploadRefreshOutcome>\n refreshMayHelp(item: UploadQueueItem): boolean\n /** Shows a refresh warning through the host's own alerts. */\n warn(key: UploadRefreshWarningKey): void\n /** Passes the rows' keywords and authors to the name caches and fetches them, once when the list mounts. */\n prime(items: UploadQueueItem[]): void\n mainFileSingleUseEnabled: boolean\n}\n\n/** Default list binding: the library store, caches, alerts and options. It follows the key as it changes. */\nexport function useLibraryUploadQueueListBinding(\n queueKey: MaybeRefOrGetter<UploadQueueKey>,\n configName: string\n): UploadQueueListBinding {\n const uploadQueuesStore = useUploadQueuesStore()\n const { showWarningT } = useAlerts()\n const { addToCachedKeywords, fetchCachedKeywords } = useDamCachedKeywords(configName)\n const { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors(configName)\n const { mainFileSingleUseEnabled } = useCommonAdminCoreDamOptions(configName)\n\n return {\n items: () => uploadQueuesStore.getQueueItems(toValue(queueKey)),\n cancel: (item, index, itemQueueKey) => uploadQueuesStore.stopItemUpload(itemQueueKey, item, index),\n remove: (index) => uploadQueuesStore.removeByIndex(toValue(queueKey), index),\n // A row offers refresh only with its asset. Rows of its queue's configuration are settled by the refresh.\n refresh: (item) => uploadQueuesStore.refreshAsset(item.assetId!, { queueKey: toValue(queueKey) }),\n refreshMayHelp: (item) => uploadQueuesStore.refreshMayHelp(item),\n warn: (key) => showWarningT(key),\n prime: (items) => {\n items.forEach((item) => {\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n })\n fetchCachedKeywords()\n fetchCachedAuthors()\n },\n mainFileSingleUseEnabled,\n }\n}\n\n/** What a queue's mass operations need from their host. Without it they use the library store. */\nexport interface UploadQueueMassOperationsBinding {\n assetTypes(): DamAssetTypeType[]\n fillCustomDataValue(\n data: { assetType: DamAssetTypeType; elementProperty: string; value: CustomDataValue },\n forceReplace?: boolean\n ): void\n /** The host decides which rows are filled. The library fills every row. */\n fillKeywords(value: DocId[], forceReplace?: boolean): void\n fillAuthors(value: DocId[], forceReplace?: boolean): void\n}\n\n/** Default binding: the asset types of the library store and `useUploadQueueMassOperations`. */\nexport function useLibraryUploadQueueMassOperationsBinding(\n queueKey: MaybeRefOrGetter<UploadQueueKey>\n): UploadQueueMassOperationsBinding {\n const uploadQueuesStore = useUploadQueuesStore()\n const { replaceEmptyCustomDataValue, replaceEmptyKeywords, replaceEmptyAuthors } =\n useUploadQueueMassOperations(queueKey)\n\n return {\n assetTypes: () => uploadQueuesStore.getQueueItemsTypes(toValue(queueKey)),\n fillCustomDataValue: replaceEmptyCustomDataValue,\n fillKeywords: replaceEmptyKeywords,\n fillAuthors: replaceEmptyAuthors,\n }\n}\n"],"mappings":";;;;;;;;AAqBA,IAAaA,IACX,OAAO,IAAI,6BAA6B,GAG7BC,KAA+D,MAC1EC,EAAqB,CAAC,CAAC,SAASC,CAAQ,CAAC,EAAE;AAmB7C,SAAgBC,EACd,GACA,GACwB;CACxB,IAAMC,IAAoBH,EAAqB,GACzC,EAAE,oBAAiBI,EAAU,GAC7B,EAAE,wBAAqB,2BAAwBC,EAAqBC,CAAU,GAC9E,EAAE,uBAAoB,0BAAuBC,EAAoBD,CAAU,GAC3E,EAAE,gCAA6BE,EAA6BF,CAAU;CAE5E,OAAO;EACL,aAAaH,EAAkB,cAAcM,EAAQR,CAAQ,CAAC;EAC9D,SAAS,GAAM,GAAO,MAAiBE,EAAkB,eAAeO,GAAcC,GAAMC,CAAK;EACjG,SAAS,MAAUT,EAAkB,cAAcM,EAAQR,CAAQ,GAAGW,CAAK;EAE3E,UAAU,MAAST,EAAkB,aAAaQ,EAAK,SAAU,EAAE,UAAUF,EAAQR,CAAQ,EAAE,CAAC;EAChG,iBAAiB,MAASE,EAAkB,eAAeQ,CAAI;EAC/D,OAAO,MAAQE,EAAaC,CAAG;EAC/B,QAAQ,MAAU;GAMhB,AALAC,EAAM,SAAS,MAAS;IAEtB,AADAC,EAAoBL,EAAK,QAAQ,GACjCM,EAAmBN,EAAK,OAAO;GACjC,CAAC,GACDO,EAAoB,GACpBC,EAAmB;EACrB;EACA;CACF;AACF;AAeA,SAAgBC,EACd,GACkC;CAClC,IAAMjB,IAAoBH,EAAqB,GACzC,EAAE,gCAA6B,yBAAsB,2BACzDqB,EAA6BpB,CAAQ;CAEvC,OAAO;EACL,kBAAkBE,EAAkB,mBAAmBM,EAAQR,CAAQ,CAAC;EACxE,qBAAqBqB;EACrB,cAAcC;EACd,aAAaC;CACf;AACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
*
|
|
2
|
+
* The next chunk size of an upload under the DAM configuration `configName`, bounded by its prv configuration.
|
|
3
|
+
* Without a name, the inherited one in a component's setup is used, else `default`.
|
|
4
4
|
*/
|
|
5
5
|
export declare function useDamUploadChunkSize(apiTimeout?: number, configName?: string): {
|
|
6
6
|
lastChunkSize: import('vue').Ref<number, number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"damUploadChunkSize.js","names":["chunkSizes","useDamUploadChunkSize","name","inheritedDamConfigName","configName","damConfigStore","useDamConfigStoreOf","lastChunkSize","ref","minUploadTimeThreshold","apiTimeout","idealUploadTimeThreshold","maxUploadTimeThreshold","updateChunkSize","isNull","speed","expectedChunkUploadSpeed","resize","next","returnFromRange","size","changed","value"],"sources":["../../../../../src/domains/dam/uploadQueue/composables/damUploadChunkSize.ts"],"sourcesContent":["import { ref } from 'vue'\nimport { isNull } from '@/shared/utils/common'\nimport { useDamConfigStoreOf } from '@/domains/dam/config/store/damConfigStore'\nimport { inheritedDamConfigName } from '@/domains/dam/composables/damConfigName'\n\n//
|
|
1
|
+
{"version":3,"file":"damUploadChunkSize.js","names":["chunkSizes","useDamUploadChunkSize","name","inheritedDamConfigName","configName","damConfigStore","useDamConfigStoreOf","lastChunkSize","ref","minUploadTimeThreshold","apiTimeout","idealUploadTimeThreshold","maxUploadTimeThreshold","updateChunkSize","isNull","speed","expectedChunkUploadSpeed","resize","next","returnFromRange","size","changed","value"],"sources":["../../../../../src/domains/dam/uploadQueue/composables/damUploadChunkSize.ts"],"sourcesContent":["import { ref } from 'vue'\nimport { isNull } from '@/shared/utils/common'\nimport { useDamConfigStoreOf } from '@/domains/dam/config/store/damConfigStore'\nimport { inheritedDamConfigName } from '@/domains/dam/composables/damConfigName'\n\n// Last chunk size per DAM configuration. One upload passes it to the next upload of the same configuration.\nconst chunkSizes = new Map<string, number>()\n\n/**\n * The next chunk size of an upload under the DAM configuration `configName`, bounded by its prv configuration.\n * Without a name, the inherited one in a component's setup is used, else `default`.\n */\nexport function useDamUploadChunkSize(apiTimeout: number = 30, configName?: string) {\n const name = inheritedDamConfigName(configName)\n const damConfigStore = useDamConfigStoreOf(name)\n const lastChunkSize = ref(chunkSizes.get(name) || damConfigStore.damPrvConfig.settings.imageChunkConfig.minSize)\n\n const minUploadTimeThreshold = apiTimeout / 5\n const idealUploadTimeThreshold = apiTimeout / 4\n const maxUploadTimeThreshold = apiTimeout / 2\n\n const updateChunkSize = (speed: number | null) => {\n if (isNull(speed)) {\n return false\n }\n\n const expectedChunkUploadSpeed = lastChunkSize.value / speed\n if (expectedChunkUploadSpeed > maxUploadTimeThreshold) {\n return resize(maxUploadTimeThreshold * speed)\n }\n if (expectedChunkUploadSpeed < minUploadTimeThreshold) {\n return resize(idealUploadTimeThreshold * speed)\n }\n\n return false\n }\n\n // Returns whether the size changed. At a configuration bound it\n // stays, so a retry does not re-read the chunk from the file.\n const resize = (size: number) => {\n const next = returnFromRange(size)\n const changed = next !== lastChunkSize.value\n lastChunkSize.value = next\n chunkSizes.set(name, next)\n\n return changed\n }\n\n const returnFromRange = (value: number) => {\n if (value > damConfigStore.damPrvConfig.settings.imageChunkConfig.maxSize) {\n return damConfigStore.damPrvConfig.settings.imageChunkConfig.maxSize\n }\n if (value < damConfigStore.damPrvConfig.settings.imageChunkConfig.minSize) {\n return damConfigStore.damPrvConfig.settings.imageChunkConfig.minSize\n }\n\n return value\n }\n\n return {\n lastChunkSize,\n updateChunkSize,\n }\n}\n"],"mappings":";;;;;AAMA,IAAMA,oBAAa,IAAI,IAAoB;AAM3C,SAAgBC,EAAsB,IAAqB,IAAI,GAAqB;CAClF,IAAMC,IAAOC,EAAuBC,CAAU,GACxCC,IAAiBC,EAAoBJ,CAAI,GACzCK,IAAgBC,EAAIR,EAAW,IAAIE,CAAI,KAAKG,EAAe,aAAa,SAAS,iBAAiB,OAAO,GAEzGI,IAAyBC,IAAa,GACtCC,IAA2BD,IAAa,GACxCE,IAAyBF,IAAa,GAEtCG,KAAmB,MAAyB;EAChD,IAAIC,EAAOC,CAAK,GACd,OAAO;EAGT,IAAMC,IAA2BT,EAAc,QAAQQ;EAQvD,OAPIC,IAA2BJ,IACtBK,EAAOL,IAAyBG,CAAK,IAE1CC,IAA2BP,KACtBQ,EAAON,IAA2BI,CAAK;CAIlD,GAIME,KAAU,MAAiB;EAC/B,IAAMC,IAAOC,EAAgBC,CAAI,GAC3BC,IAAUH,MAASX,EAAc;EAIvC,OAHA,EAAc,QAAQW,GACtBlB,EAAW,IAAIE,GAAMgB,CAAI,GAElBG;CACT,GAEMF,KAAmB,MACnBG,IAAQjB,EAAe,aAAa,SAAS,iBAAiB,UACzDA,EAAe,aAAa,SAAS,iBAAiB,UAE3DiB,IAAQjB,EAAe,aAAa,SAAS,iBAAiB,UACzDA,EAAe,aAAa,SAAS,iBAAiB,UAGxDiB;CAGT,OAAO;EACL;EACA;CACF;AACF"}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import { AxiosProgressEvent } from 'axios';
|
|
2
2
|
import { UploadProgressCallback } from '../presets/uploadPresets';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* over time, from the
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Progress, speed and remaining time of one upload, from one curve: file
|
|
5
|
+
* bytes sent over time, from the first chunk request to the last answer.
|
|
6
|
+
* Reports once a second, the first immediately. It reports only with a known speed and
|
|
7
|
+
* when bytes moved since the last report or an answer to a fully sent chunk is awaited.
|
|
8
|
+
* Once the file is out it reports the whole file, also without a
|
|
9
|
+
* speed. Without `report` it reports nothing and starts no timer.
|
|
9
10
|
*/
|
|
10
11
|
export declare function useUploadMeter(report: UploadProgressCallback | undefined): {
|
|
11
|
-
/**
|
|
12
|
+
/** Starts reporting for a file of the given size. */
|
|
12
13
|
start(size: number): void;
|
|
13
|
-
/**
|
|
14
|
+
/** Call before each chunk request. The curve continues from what the server has, and the try reports into it. */
|
|
14
15
|
attempt(chunkSize: number): (event: Pick<AxiosProgressEvent, "loaded" | "total">) => void;
|
|
15
|
-
/** The server answered the chunk
|
|
16
|
+
/** The server answered the try's chunk. */
|
|
16
17
|
chunkDone(chunkSize: number): void;
|
|
17
18
|
/**
|
|
18
|
-
* A try failed
|
|
19
|
-
* next try has a speed
|
|
19
|
+
* A try failed. The server kept none of its bytes, and neither its time nor the pause after it counts.
|
|
20
|
+
* Nothing is reported until the next try has a speed, so the row keeps its last values.
|
|
20
21
|
*/
|
|
21
22
|
attemptFailed(): void;
|
|
22
|
-
/**
|
|
23
|
+
/** The running second reports the whole file, and no further second is scheduled. */
|
|
23
24
|
lastChunkSent(): void;
|
|
24
|
-
/** Z10: no further report. */
|
|
25
25
|
stop(): void;
|
|
26
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadMeter.js","names":["TICK_MS","WINDOW_MS","MIN_SPAN_MS","useUploadMeter","points","fileSize","received","sent","shown","moved","sendingOver","reportedSpeed","timer","current","now","at","mark","bytes","sentAt","next","point","before","after","speed","end","from","span","answered","answerAwaited","tick","bytesPerSecond","report","isNull","size","thisTry","chunkSize","onItsWay","event"],"sources":["../../../../../src/domains/dam/uploadQueue/composables/uploadMeter.ts"],"sourcesContent":["import type { AxiosProgressEvent } from 'axios'\nimport type { UploadProgressCallback } from '@/domains/dam/uploadQueue/presets/uploadPresets'\nimport { isNull } from '@/shared/utils/common'\n\nconst TICK_MS = 1_000\n//
|
|
1
|
+
{"version":3,"file":"uploadMeter.js","names":["TICK_MS","WINDOW_MS","MIN_SPAN_MS","useUploadMeter","points","fileSize","received","sent","shown","moved","sendingOver","reportedSpeed","timer","current","now","at","mark","bytes","sentAt","next","point","before","after","speed","end","from","span","answered","answerAwaited","tick","bytesPerSecond","report","isNull","size","thisTry","chunkSize","onItsWay","event"],"sources":["../../../../../src/domains/dam/uploadQueue/composables/uploadMeter.ts"],"sourcesContent":["import type { AxiosProgressEvent } from 'axios'\nimport type { UploadProgressCallback } from '@/domains/dam/uploadQueue/presets/uploadPresets'\nimport { isNull } from '@/shared/utils/common'\n\nconst TICK_MS = 1_000\n// Covers the response to at least one target-size chunk (a quarter of\n// the timeout, 7.5 s at 30 s), and still tracks speed changes within it.\nconst WINDOW_MS = 10_000\n// A shorter span without a server response mostly measures browser buffering.\n// Chromium reports body progress at most every 100 ms, and axios forwards it at most every 333 ms.\nconst MIN_SPAN_MS = 500\n\ninterface MeterPoint {\n at: number\n /** File bytes sent by then: the answered chunks plus the sent share of the chunk in flight. */\n sent: number\n /** The server answered a chunk at this point. */\n answered: boolean\n}\n\n/**\n * Progress, speed and remaining time of one upload, from one curve: file\n * bytes sent over time, from the first chunk request to the last answer.\n * Reports once a second, the first immediately. It reports only with a known speed and\n * when bytes moved since the last report or an answer to a fully sent chunk is awaited.\n * Once the file is out it reports the whole file, also without a\n * speed. Without `report` it reports nothing and starts no timer.\n */\nexport function useUploadMeter(report: UploadProgressCallback | undefined) {\n let points: MeterPoint[] = []\n let fileSize = 0\n let received = 0\n // Bytes sent at the last point. After a failed try, what the server has.\n let sent = 0\n // The share last reported. It never decreases.\n let shown = 0\n // Bytes moved since the last report. A stalled chunk reports nothing.\n // Otherwise the speed would fall each silent second, the time left would\n // grow to hours and the next chunk, sized by speed, would be small.\n let moved = false\n let sendingOver = false\n // The speed last reported. The whole file is reported at it when no speed\n // can be read, e.g. when the clock went back before the last chunk's answer.\n let reportedSpeed = 0\n let timer: ReturnType<typeof setTimeout> | undefined\n // The try whose progress counts, and the curve position once its chunk is\n // fully sent. Progress from an ended try arrives too late for the curve.\n let current: { end: number } | undefined\n\n const now = () => {\n const at = Date.now()\n // The clock went back: earlier measurements cannot be compared with it.\n if (points.length && at < points.at(-1)!.at) points = []\n return at\n }\n const mark = (bytes: number, answered = false) => {\n const at = now()\n if (bytes > sent) moved = true\n sent = bytes\n points.push({ at, sent: bytes, answered })\n // Keep one point before the window, so its edge can be interpolated between two points.\n while (points.length > 2 && points[1]!.at <= at - WINDOW_MS) points.shift()\n }\n // The curve value at the start of millisecond `at`: of points sharing it, the first.\n const sentAt = (at: number) => {\n const next = points.findIndex((point) => point.at >= at)\n if (next === -1) return points.at(-1)!.sent\n if (next === 0) return points[0]!.sent\n const before = points[next - 1]!\n const after = points[next]!\n return before.sent + ((after.sent - before.sent) * (at - before.at)) / (after.at - before.at)\n }\n /** Bytes per second over the window up to now, or up to the last answer once the file is out. */\n const speed = () => {\n const end = sendingOver ? points.at(-1)?.at : now()\n if (points.length < 2 || end === undefined) return null\n const from = Math.max(points[0]!.at, end - WINDOW_MS)\n const span = end - from\n // No point is later than the end, so the last one is the\n // current curve value, also when several share one millisecond.\n const bytes = points.at(-1)!.sent - sentAt(from)\n const answered = points.some((point) => point.answered && point.at > from)\n return span > 0 && bytes > 0 && (span >= MIN_SPAN_MS || answered) ? (bytes * 1000) / span : null\n }\n\n // Waiting for the answer to a fully sent chunk is server time. The speed keeps counting\n // it, so the next chunk is sized after the answer and not by browser buffering alone.\n const answerAwaited = () => !!current && sent >= current.end\n\n const tick = () => {\n const bytesPerSecond = speed() ?? (sendingOver ? reportedSpeed : null)\n if (report && !isNull(bytesPerSecond) && (moved || answerAwaited() || sendingOver)) {\n moved = false\n shown = sendingOver ? 100 : Math.max(shown, Math.min((sent * 100) / fileSize, 100))\n reportedSpeed = Math.ceil(bytesPerSecond)\n report(shown, reportedSpeed, sendingOver ? 0 : Math.ceil((fileSize - sent) / bytesPerSecond))\n }\n if (!sendingOver) timer = setTimeout(tick, TICK_MS)\n }\n\n return {\n /** Starts reporting for a file of the given size. */\n start(size: number) {\n fileSize = size\n if (report) tick()\n },\n /** Call before each chunk request. The curve continues from what the server has, and the try reports into it. */\n attempt(chunkSize: number) {\n const thisTry = { end: received + chunkSize }\n current = thisTry\n mark(received)\n return (event: Pick<AxiosProgressEvent, 'loaded' | 'total'>) => {\n if (current !== thisTry) return\n let onItsWay = event.loaded\n // `total` is the whole multipart body. The curve gets its share of the chunk, and the whole\n // chunk once the body is out, since the division gives slightly less for numbers past 2^53.\n if (event.total) onItsWay = event.loaded >= event.total ? chunkSize : (event.loaded * chunkSize) / event.total\n mark(received + Math.min(Math.max(onItsWay, 0), chunkSize))\n }\n },\n /** The server answered the try's chunk. */\n chunkDone(chunkSize: number) {\n current = undefined\n received += chunkSize\n mark(received, true)\n },\n /**\n * A try failed. The server kept none of its bytes, and neither its time nor the pause after it counts.\n * Nothing is reported until the next try has a speed, so the row keeps its last values.\n */\n attemptFailed() {\n current = undefined\n points = []\n sent = received\n },\n /** The running second reports the whole file, and no further second is scheduled. */\n lastChunkSent() {\n sendingOver = true\n },\n stop() {\n clearTimeout(timer)\n timer = undefined\n sendingOver = true\n },\n }\n}\n"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { UploadQueueItem, UploadQueueKey } from '../../types/UploadQueue';
|
|
|
3
3
|
import { UploadQueueListBinding } from '../components/uploadQueueBindings';
|
|
4
4
|
import { DocId } from '../../../../shared/types/common';
|
|
5
5
|
export declare const SHOW_REFRESH_AFTER_SECONDS = 20;
|
|
6
|
-
/**
|
|
6
|
+
/** Message keys passed to the host's `warn` after a refresh. */
|
|
7
7
|
export declare const REFRESH_WARNING_KEYS: {
|
|
8
8
|
readonly pendingT: "common.damImage.queueItem.stillUploadingOrProcessing";
|
|
9
9
|
readonly failedT: "common.damImage.queueItem.refreshFailed";
|
|
@@ -11,15 +11,15 @@ export declare const REFRESH_WARNING_KEYS: {
|
|
|
11
11
|
readonly originalUnreadT: "common.damImage.queueItem.duplicateOriginalUnread";
|
|
12
12
|
};
|
|
13
13
|
export type UploadRefreshWarningKey = (typeof REFRESH_WARNING_KEYS)[keyof typeof REFRESH_WARNING_KEYS];
|
|
14
|
-
/**
|
|
14
|
+
/** Refresh for the rows of a list. The host binding does the request and shows the warnings. */
|
|
15
15
|
export declare function createUploadQueueItemRefresh(queue: Pick<UploadQueueListBinding, 'items' | 'refresh' | 'refreshMayHelp' | 'warn'>): {
|
|
16
16
|
refreshing: Ref<boolean, boolean>;
|
|
17
17
|
refreshItem: (item: UploadQueueItem) => Promise<void>;
|
|
18
18
|
};
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
20
|
+
* Refresh of an upload queue item: asks the server what became of its file and updates the item.
|
|
21
|
+
* Uses the client of the queue's configuration. Updates rows of queue
|
|
22
|
+
* `queueKey`, or of configuration `configName` when no key is given.
|
|
23
23
|
*/
|
|
24
24
|
export declare function useUploadQueueItemRefresh(configName: string): {
|
|
25
25
|
refreshing: Ref<boolean, boolean>;
|