@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":"ALogFilter.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","AFilterWrapper","_withCtx","_createVNode","_component_VRow","_component_VCol","_component_VSelect","_unref","_component_VDivider","AFilterString","AFilterTimeInterval","AFilterValueObjectOptionsSelect","AFilterString_default","AFilterValueObjectOptionsSelect_default","AFilterTimeInterval_default","AFilterWrapper_default","ALogFilter_vue_vue_type_script_setup_true_lang_default","__emit","emit","useI18n","useLogLevel","useLogType","openBlock","createBlock","_cache","withCtx","createVNode","VRow","VCol","VSelect","__props","unref","logTypeOptions","t","$event","VDivider","logLevelOptions"],"sources":["../../../../src/domains/log/components/ALogFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport AFilterString from '@/domains/filters/components/AFilterString.vue'\nimport AFilterTimeInterval from '@/domains/filters/components/AFilterTimeInterval.vue'\nimport AFilterValueObjectOptionsSelect from '@/domains/filters/components/AFilterValueObjectOptionsSelect.vue'\nimport AFilterWrapper from '@/domains/filters/components/AFilterWrapper.vue'\nimport type { TimeIntervalToolsValue } from '@/domains/filters/composables/filterTimeIntervalTools'\nimport { type LogTypeType, useLogType } from '@/domains/log/composables/logType'\nimport { useLogLevel } from '@/domains/log/valueObject/LogLevel'\n\ndefineProps<{\n type: LogTypeType\n allowedTimeIntervals?: TimeIntervalToolsValue[] | undefined\n}>()\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'reset'): void\n (e: 'changeType', type: LogTypeType): void\n}>()\n\nconst { t } = useI18n()\nconst { logLevelOptions } = useLogLevel()\nconst { logTypeOptions } = useLogType()\n</script>\n\n<template>\n <AFilterWrapper\n enable-top\n @submit=\"emit('submit')\"\n @reset=\"emit('reset')\"\n >\n <template #top>\n <VRow class=\"align-start\">\n <VCol\n class=\"pb-0\"\n cols=\"12\"\n sm=\"4\"\n >\n <!--\n A plain select, not `AFilterValueObjectOptionsSelect
|
|
1
|
+
{"version":3,"file":"ALogFilter.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","AFilterWrapper","_withCtx","_createVNode","_component_VRow","_component_VCol","_component_VSelect","_unref","_component_VDivider","AFilterString","AFilterTimeInterval","AFilterValueObjectOptionsSelect","AFilterString_default","AFilterValueObjectOptionsSelect_default","AFilterTimeInterval_default","AFilterWrapper_default","ALogFilter_vue_vue_type_script_setup_true_lang_default","__emit","emit","useI18n","useLogLevel","useLogType","openBlock","createBlock","_cache","withCtx","createVNode","VRow","VCol","VSelect","__props","unref","logTypeOptions","t","$event","VDivider","logLevelOptions"],"sources":["../../../../src/domains/log/components/ALogFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport AFilterString from '@/domains/filters/components/AFilterString.vue'\nimport AFilterTimeInterval from '@/domains/filters/components/AFilterTimeInterval.vue'\nimport AFilterValueObjectOptionsSelect from '@/domains/filters/components/AFilterValueObjectOptionsSelect.vue'\nimport AFilterWrapper from '@/domains/filters/components/AFilterWrapper.vue'\nimport type { TimeIntervalToolsValue } from '@/domains/filters/composables/filterTimeIntervalTools'\nimport { type LogTypeType, useLogType } from '@/domains/log/composables/logType'\nimport { useLogLevel } from '@/domains/log/valueObject/LogLevel'\n\ndefineProps<{\n type: LogTypeType\n allowedTimeIntervals?: TimeIntervalToolsValue[] | undefined\n}>()\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'reset'): void\n (e: 'changeType', type: LogTypeType): void\n}>()\n\nconst { t } = useI18n()\nconst { logLevelOptions } = useLogLevel()\nconst { logTypeOptions } = useLogType()\n</script>\n\n<template>\n <AFilterWrapper\n enable-top\n @submit=\"emit('submit')\"\n @reset=\"emit('reset')\"\n >\n <template #top>\n <VRow class=\"align-start\">\n <VCol\n class=\"pb-0\"\n cols=\"12\"\n sm=\"4\"\n >\n <!--\n A plain select, not `AFilterValueObjectOptionsSelect`. That one throws\n unless the name is a live filter field, and the type is not one.\n The type picks the endpoint and lives in the route, so it survives a filter reset.\n -->\n <VSelect\n :model-value=\"type\"\n :items=\"logTypeOptions\"\n :label=\"t('common.log.filter.type')\"\n item-title=\"title\"\n item-value=\"value\"\n density=\"compact\"\n variant=\"outlined\"\n hide-details\n data-cy=\"filter-log-type\"\n @update:model-value=\"emit('changeType', $event)\"\n />\n </VCol>\n </VRow>\n <VDivider class=\"mb-4 mt-4\" />\n </template>\n <template #search>\n <AFilterString\n name=\"contextId\"\n class=\"mr-2\"\n />\n <AFilterString\n name=\"message\"\n class=\"mr-2\"\n />\n <AFilterTimeInterval\n name-from=\"datetimeFrom\"\n name-until=\"datetimeTo\"\n :allowed=\"allowedTimeIntervals\"\n />\n </template>\n <template #item.levelName>\n <AFilterValueObjectOptionsSelect\n name=\"levelName\"\n :items=\"logLevelOptions\"\n />\n </template>\n </AFilterWrapper>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EAeA,IAAMmB,IAAOD,GAMP,EAAE,SAAME,EAAQ,GAChB,EAAE,uBAAoBC,EAAY,GAClC,EAAE,sBAAmBC,EAAW;E,kBAIpCtB,EAAA,GAAAC,EAsDiBC,GAAA;GArDf,cAAA;GACC,UAAM,AAAAuB,EAAA,QAAA,MAAEN,EAAI,QAAA;GACZ,SAAK,AAAAM,EAAA,QAAA,MAAEN,EAAI,OAAA;;GAED,KAAGhB,QAyBL,CAxBPC,EAwBOC,GAAA,EAxBD,OAAM,cAAa,GAAA;IACvB,SAAAF,QAsBO,CAtBPC,EAsBOE,GAAA;KArBL,OAAM;KACN,MAAK;KACL,IAAG;;KAOH,SAAAH,QAWE,CAXFC,EAWEG,GAAA;MAVC,eAAawB,EAAA;MACb,OAAOvB,EAAAyB,CAAA;MACP,OAAOzB,EAAA0B,CAAA,CAAC,CAAA,wBAAA;MACT,cAAW;MACX,cAAW;MACX,SAAQ;MACR,SAAQ;MACR,gBAAA;MACA,WAAQ;MACP,uBAAkB,AAAAT,EAAA,QAAA,MAAEN,EAAI,cAAegB,CAAM;;;;;;;;;G,IAIpD/B,EAA8BK,GAAA,EAApB,OAAM,YAAW,CAAA,C;GAElB,QAAMN,QAIb;IAHFC,EAGEM,GAAA;KAFA,MAAK;KACL,OAAM;;IAERN,EAGEM,GAAA;KAFA,MAAK;KACL,OAAM;;IAERN,EAIEO,GAAA;KAHA,aAAU;KACV,cAAW;KACV,SAASoB,EAAA;;;GAGH,kBAAc5B,QAIrB,CAHFC,EAGEQ,GAAA;IAFA,MAAK;IACJ,OAAOJ,EAAA6B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ALogListView.js","names":["_sfc_main","ALogListView_vue_vue_type_script_setup_true_lang_default","ALogListView_default"],"sources":["../../../../src/domains/log/components/ALogListView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { provide, ref, useTemplateRef } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport { useRouter } from 'vue-router'\nimport ACard from '@/domains/ui/components/ACard.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport type { TimeIntervalToolsValue } from '@/domains/filters/composables/filterTimeIntervalTools'\nimport ALogDatatable from '@/domains/log/components/ALogDatatable.vue'\nimport ALogFilter from '@/domains/log/components/ALogFilter.vue'\nimport { applyLogTypeVisibility, type LogTimeWindow, useLogFilter } from '@/domains/log/filter/logFilter'\nimport type { LogPaths, LogTypeType } from '@/domains/log/composables/logType'\nimport type { Log } from '@/domains/log/types/Log'\n\nconst props = defineProps<{\n /** Which backend to ask. */\n client: AxiosClientFn\n /** Identity
|
|
1
|
+
{"version":3,"file":"ALogListView.js","names":["_sfc_main","ALogListView_vue_vue_type_script_setup_true_lang_default","ALogListView_default"],"sources":["../../../../src/domains/log/components/ALogListView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { provide, ref, useTemplateRef } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport { useRouter } from 'vue-router'\nimport ACard from '@/domains/ui/components/ACard.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport type { TimeIntervalToolsValue } from '@/domains/filters/composables/filterTimeIntervalTools'\nimport ALogDatatable from '@/domains/log/components/ALogDatatable.vue'\nimport ALogFilter from '@/domains/log/components/ALogFilter.vue'\nimport { applyLogTypeVisibility, type LogTimeWindow, useLogFilter } from '@/domains/log/filter/logFilter'\nimport type { LogPaths, LogTypeType } from '@/domains/log/composables/logType'\nimport type { Log } from '@/domains/log/types/Log'\n\nconst props = defineProps<{\n /** Which backend to ask. */\n client: AxiosClientFn\n /** Identity for api naming and error reporting. `coreDam`, not `dam`, where they differ. */\n system: string\n /** From the route, never component state: it picks the endpoint and has to survive a filter reset. */\n type: LogTypeType\n /** Whole paths per type. Comes from the route-side descriptor, which the guard reads too. */\n logPaths: LogPaths\n /** Where a row goes. The library cannot know an app's typed route names, so the app maps it. */\n detailRoute: (log: Log) => RouteLocationRaw\n /** Where the app/audit dropdown goes. Same reason. */\n typeRoute: (type: LogTypeType) => RouteLocationRaw\n /** Mandatory time bound, as admin-dam has today. Omitted means no bound at all. */\n defaultTimeWindow?: LogTimeWindow | undefined\n /** `allowed` for the interval filter. Omitted means the library's full preset list. */\n allowedTimeIntervals?: TimeIntervalToolsValue[] | undefined\n}>()\n\nconst router = useRouter()\n\n// Read once: keyed remount, as in the datatable below.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst filter = useLogFilter(props.system, props.defaultTimeWindow)\n// Every mount, not only on a type change: the registry returns the config the last visit left,\n// so the flags still describe that visit's type. See `applyLogTypeVisibility`.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\napplyLogTypeVisibility(filter, props.type)\n\nprovide(FilterConfigKey, filter.filterConfig)\nprovide(FilterDataKey, filter.filterData)\n\nconst datatable = useTemplateRef<InstanceType<typeof ALogDatatable>>('datatable')\nconst listLoading = ref(false)\n\nconst onRowClick = (log: Log) => {\n router.push(props.detailRoute(log))\n}\n\nconst onChangeType = (type: LogTypeType) => {\n if (type === props.type) return\n router.replace(props.typeRoute(type))\n}\n</script>\n\n<template>\n <ACard :loading=\"listLoading\">\n <VCardText>\n <ALogFilter\n :type=\"type\"\n :allowed-time-intervals=\"allowedTimeIntervals\"\n @submit=\"datatable?.submitFilter()\"\n @reset=\"datatable?.resetFilter()\"\n @change-type=\"onChangeType\"\n />\n <ALogDatatable\n ref=\"datatable\"\n v-model:loading=\"listLoading\"\n :client=\"client\"\n :system=\"system\"\n :type=\"type\"\n :log-paths=\"logPaths\"\n :detail-route=\"detailRoute\"\n @row-click=\"onRowClick\"\n />\n </VCardText>\n </ACard>\n</template>\n"],"mappings":""}
|
|
@@ -7,7 +7,7 @@ import { Log } from '../types/Log';
|
|
|
7
7
|
type __VLS_Props = {
|
|
8
8
|
/** Which backend to ask. */
|
|
9
9
|
client: AxiosClientFn;
|
|
10
|
-
/** Identity
|
|
10
|
+
/** Identity for api naming and error reporting. `coreDam`, not `dam`, where they differ. */
|
|
11
11
|
system: string;
|
|
12
12
|
/** From the route, never component state: it picks the endpoint and has to survive a filter reset. */
|
|
13
13
|
type: LogTypeType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ALogListView.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","ACard","_withCtx","_createVNode","_component_VCardText","ALogFilter","ALogDatatable","ACard_default","ALogDatatable_default","ALogFilter_default","ALogListView_vue_vue_type_script_setup_true_lang_default","props","__props","router","useRouter","filter","useLogFilter","applyLogTypeVisibility","provide","FilterConfigKey","FilterDataKey","datatable","useTemplateRef","listLoading","ref","onRowClick","log","onChangeType","type","openBlock","createBlock","withCtx","createVNode","VCardText","_cache","$event"],"sources":["../../../../src/domains/log/components/ALogListView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { provide, ref, useTemplateRef } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport { useRouter } from 'vue-router'\nimport ACard from '@/domains/ui/components/ACard.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport type { TimeIntervalToolsValue } from '@/domains/filters/composables/filterTimeIntervalTools'\nimport ALogDatatable from '@/domains/log/components/ALogDatatable.vue'\nimport ALogFilter from '@/domains/log/components/ALogFilter.vue'\nimport { applyLogTypeVisibility, type LogTimeWindow, useLogFilter } from '@/domains/log/filter/logFilter'\nimport type { LogPaths, LogTypeType } from '@/domains/log/composables/logType'\nimport type { Log } from '@/domains/log/types/Log'\n\nconst props = defineProps<{\n /** Which backend to ask. */\n client: AxiosClientFn\n /** Identity
|
|
1
|
+
{"version":3,"file":"ALogListView.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","ACard","_withCtx","_createVNode","_component_VCardText","ALogFilter","ALogDatatable","ACard_default","ALogDatatable_default","ALogFilter_default","ALogListView_vue_vue_type_script_setup_true_lang_default","props","__props","router","useRouter","filter","useLogFilter","applyLogTypeVisibility","provide","FilterConfigKey","FilterDataKey","datatable","useTemplateRef","listLoading","ref","onRowClick","log","onChangeType","type","openBlock","createBlock","withCtx","createVNode","VCardText","_cache","$event"],"sources":["../../../../src/domains/log/components/ALogListView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { provide, ref, useTemplateRef } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport { useRouter } from 'vue-router'\nimport ACard from '@/domains/ui/components/ACard.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport type { TimeIntervalToolsValue } from '@/domains/filters/composables/filterTimeIntervalTools'\nimport ALogDatatable from '@/domains/log/components/ALogDatatable.vue'\nimport ALogFilter from '@/domains/log/components/ALogFilter.vue'\nimport { applyLogTypeVisibility, type LogTimeWindow, useLogFilter } from '@/domains/log/filter/logFilter'\nimport type { LogPaths, LogTypeType } from '@/domains/log/composables/logType'\nimport type { Log } from '@/domains/log/types/Log'\n\nconst props = defineProps<{\n /** Which backend to ask. */\n client: AxiosClientFn\n /** Identity for api naming and error reporting. `coreDam`, not `dam`, where they differ. */\n system: string\n /** From the route, never component state: it picks the endpoint and has to survive a filter reset. */\n type: LogTypeType\n /** Whole paths per type. Comes from the route-side descriptor, which the guard reads too. */\n logPaths: LogPaths\n /** Where a row goes. The library cannot know an app's typed route names, so the app maps it. */\n detailRoute: (log: Log) => RouteLocationRaw\n /** Where the app/audit dropdown goes. Same reason. */\n typeRoute: (type: LogTypeType) => RouteLocationRaw\n /** Mandatory time bound, as admin-dam has today. Omitted means no bound at all. */\n defaultTimeWindow?: LogTimeWindow | undefined\n /** `allowed` for the interval filter. Omitted means the library's full preset list. */\n allowedTimeIntervals?: TimeIntervalToolsValue[] | undefined\n}>()\n\nconst router = useRouter()\n\n// Read once: keyed remount, as in the datatable below.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst filter = useLogFilter(props.system, props.defaultTimeWindow)\n// Every mount, not only on a type change: the registry returns the config the last visit left,\n// so the flags still describe that visit's type. See `applyLogTypeVisibility`.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\napplyLogTypeVisibility(filter, props.type)\n\nprovide(FilterConfigKey, filter.filterConfig)\nprovide(FilterDataKey, filter.filterData)\n\nconst datatable = useTemplateRef<InstanceType<typeof ALogDatatable>>('datatable')\nconst listLoading = ref(false)\n\nconst onRowClick = (log: Log) => {\n router.push(props.detailRoute(log))\n}\n\nconst onChangeType = (type: LogTypeType) => {\n if (type === props.type) return\n router.replace(props.typeRoute(type))\n}\n</script>\n\n<template>\n <ACard :loading=\"listLoading\">\n <VCardText>\n <ALogFilter\n :type=\"type\"\n :allowed-time-intervals=\"allowedTimeIntervals\"\n @submit=\"datatable?.submitFilter()\"\n @reset=\"datatable?.resetFilter()\"\n @change-type=\"onChangeType\"\n />\n <ALogDatatable\n ref=\"datatable\"\n v-model:loading=\"listLoading\"\n :client=\"client\"\n :system=\"system\"\n :type=\"type\"\n :log-paths=\"logPaths\"\n :detail-route=\"detailRoute\"\n @row-click=\"onRowClick\"\n />\n </VCardText>\n </ACard>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EAcA,IAAMY,IAAQC,GAmBRC,IAASC,EAAU,GAInBC,IAASC,EAAaL,EAAM,QAAQA,EAAM,iBAAiB;EAOjE,AAHAM,EAAuBF,GAAQJ,EAAM,IAAI,GAEzCO,EAAQC,GAAiBJ,EAAO,YAAY,GAC5CG,EAAQE,GAAeL,EAAO,UAAU;EAExC,IAAMM,IAAYC,EAAmD,WAAW,GAC1EC,IAAcC,EAAI,EAAK,GAEvBC,KAAc,MAAa;GAC/B,EAAO,KAAKd,EAAM,YAAYe,CAAG,CAAC;EACpC,GAEMC,KAAgB,MAAsB;GAC1C,AAAIC,MAASjB,EAAM,QACnBE,EAAO,QAAQF,EAAM,UAAUiB,CAAI,CAAC;EACtC;E,kBAIE7B,EAAA,GAAAC,EAoBQC,GAAA,EApBA,SAASsB,EAAA,MAAW,GAAA;GAC1B,SAAArB,QAkBY,CAlBZC,EAkBYC,GAAA,MAAA;IAjBV,SAAAF,QAME,CANFC,EAMEE,GAAA;KALC,MAAMO,EAAA;KACN,0BAAwBA,EAAA;KACxB,UAAM,AAAAsB,EAAA,QAAA,MAAEb,EAAA,OAAW,aAAY;KAC/B,SAAK,AAAAa,EAAA,QAAA,MAAEb,EAAA,OAAW,YAAW;KAChB;I,iDAEhBlB,EASEG,GAAA;KARI,SAAA;KAAJ,KAAIe;KACI,SAASE,EAAA;KAAA,oBAAA,AAAAW,EAAA,QAAA,MAAA,EAAW,QAAAC;KAC3B,QAAQvB,EAAA;KACR,QAAQA,EAAA;KACR,MAAMA,EAAA;KACN,aAAWA,EAAA;KACX,gBAAcA,EAAA;KACH"}
|
|
@@ -10,15 +10,14 @@ interface LogActionsParams {
|
|
|
10
10
|
logPaths: LogPaths;
|
|
11
11
|
type: LogTypeType;
|
|
12
12
|
/**
|
|
13
|
-
* Lets an ancestor own the flag,
|
|
14
|
-
*
|
|
13
|
+
* Lets an ancestor own the flag, like `usePagination` takes an external pagination ref.
|
|
14
|
+
* The card that shows the spinner sits above the table that fetches.
|
|
15
15
|
*/
|
|
16
16
|
loading?: Ref<boolean>;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
* Everything here is per instance
|
|
20
|
-
*
|
|
21
|
-
* that just went away would otherwise clear the new one's loading flag.
|
|
19
|
+
* Everything here is per instance. The views remount on every system or type change.
|
|
20
|
+
* With module-level refs, a `finally` of the unmounted instance would clear the new instance's loading flag.
|
|
22
21
|
*/
|
|
23
22
|
export declare function useLogListActions(params: LogActionsParams): {
|
|
24
23
|
listItems: Ref<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logActions.js","names":["useLogListActions","useAlerts","useFetchLogList","params","listItems","ref","listLoading","datatableHiddenColumns","generation","isCurrent","token","scratch","pagination","items","execute","filterData","filterConfig","error","showErrorsDefault","abort","useLogDetailActions","useFetchLog","log","detailLoading","res"],"sources":["../../../../src/domains/log/composables/logActions.ts"],"sourcesContent":["import { ref, type Ref } from 'vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { handleRecordLoadError } from '@/domains/system/composables/recordPage'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport type { FilterConfig, FilterData } from '@/domains/filters/composables/filterFactory'\nimport type { Pagination } from '@/domains/api/composables/pagination'\nimport { useFetchLog, useFetchLogList } from '@/domains/log/api/logApi'\nimport type { LogPaths, LogTypeType } from '@/domains/log/composables/logType'\nimport type { Log } from '@/domains/log/types/Log'\n\ninterface LogActionsParams {\n client: AxiosClientFn\n system: string\n logPaths: LogPaths\n type: LogTypeType\n /**\n * Lets an ancestor own the flag,
|
|
1
|
+
{"version":3,"file":"logActions.js","names":["useLogListActions","useAlerts","useFetchLogList","params","listItems","ref","listLoading","datatableHiddenColumns","generation","isCurrent","token","scratch","pagination","items","execute","filterData","filterConfig","error","showErrorsDefault","abort","useLogDetailActions","useFetchLog","log","detailLoading","res"],"sources":["../../../../src/domains/log/composables/logActions.ts"],"sourcesContent":["import { ref, type Ref } from 'vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { handleRecordLoadError } from '@/domains/system/composables/recordPage'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport type { FilterConfig, FilterData } from '@/domains/filters/composables/filterFactory'\nimport type { Pagination } from '@/domains/api/composables/pagination'\nimport { useFetchLog, useFetchLogList } from '@/domains/log/api/logApi'\nimport type { LogPaths, LogTypeType } from '@/domains/log/composables/logType'\nimport type { Log } from '@/domains/log/types/Log'\n\ninterface LogActionsParams {\n client: AxiosClientFn\n system: string\n logPaths: LogPaths\n type: LogTypeType\n /**\n * Lets an ancestor own the flag, like `usePagination` takes an external pagination ref.\n * The card that shows the spinner sits above the table that fetches.\n */\n loading?: Ref<boolean>\n}\n\n/**\n * Everything here is per instance. The views remount on every system or type change.\n * With module-level refs, a `finally` of the unmounted instance would clear the new instance's loading flag.\n */\nexport function useLogListActions(params: LogActionsParams) {\n const { showErrorsDefault } = useAlerts()\n const { execute, abort } = useFetchLogList(params)\n\n const listItems = ref<Log[]>([])\n const listLoading = params.loading ?? ref(false)\n const datatableHiddenColumns = ref<Array<string>>([])\n\n // Aborting is not enough. axios rejects a cancelled request with\n // `CanceledError`, not a `DOMException` named `AbortError`.\n // So it slips past the helper's swallow and arrives as a normal failure.\n // Without this token the user would get an error alert for their own action.\n let generation = 0\n const isCurrent = (token: number) => token === generation\n\n const fetchList = async (\n pagination: Ref<Pagination>,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>\n ) => {\n const token = ++generation\n listLoading.value = true\n // `execute` writes the counts into the ref it gets during the call, before we can discard them.\n // So it gets a copy. The counts go to the real ref only if this call is still current.\n const scratch = ref<Pagination>({ ...pagination.value })\n try {\n const items = await execute(scratch, filterData, filterConfig)\n if (!isCurrent(token)) return\n listItems.value = items\n // Read the scratch ref here. Only now are its counts known to belong to the current request.\n /* eslint-disable vue/no-ref-object-reactivity-loss */\n pagination.value = {\n ...pagination.value,\n hasNextPage: scratch.value.hasNextPage,\n currentViewCount: scratch.value.currentViewCount,\n totalCount: scratch.value.totalCount,\n }\n /* eslint-enable vue/no-ref-object-reactivity-loss */\n } catch (error) {\n if (!isCurrent(token)) return\n // A failed fetch must not leave the previous type's rows on screen under the new url.\n listItems.value = []\n showErrorsDefault(error)\n } finally {\n if (isCurrent(token)) listLoading.value = false\n }\n }\n\n /** Invalidates whatever is in flight, then cancels it. Order matters: the token first. */\n const cancel = () => {\n generation++\n abort()\n }\n\n return {\n listItems,\n listLoading,\n datatableHiddenColumns,\n fetchList,\n cancel,\n }\n}\n\nexport function useLogDetailActions(params: LogActionsParams) {\n const { execute, abort } = useFetchLog(params)\n\n const log = ref<Log | null>(null)\n const detailLoading = params.loading ?? ref(false)\n\n let generation = 0\n const isCurrent = (token: number) => token === generation\n\n /** `true` once loaded, `false` when the page should leave, `undefined` when superseded or stopped. */\n const fetchData = async (id: string): Promise<boolean | undefined> => {\n const token = ++generation\n detailLoading.value = true\n try {\n const res = await execute({ urlParams: { id } })\n if (!isCurrent(token)) return undefined\n log.value = res\n return true\n } catch (error) {\n if (!isCurrent(token)) return undefined\n log.value = null\n return handleRecordLoadError(error) ? false : undefined\n } finally {\n if (isCurrent(token)) detailLoading.value = false\n }\n }\n\n const cancel = () => {\n generation++\n abort()\n }\n\n return {\n log,\n detailLoading,\n fetchData,\n cancel,\n }\n}\n"],"mappings":";;;;;AA0BA,SAAgBA,EAAkB,GAA0B;CAC1D,IAAM,EAAE,yBAAsBC,EAAU,GAClC,EAAE,YAAS,aAAUC,EAAgBC,CAAM,GAE3CC,IAAYC,EAAW,CAAC,CAAC,GACzBC,IAAcH,EAAO,WAAWE,EAAI,EAAK,GACzCE,IAAyBF,EAAmB,CAAC,CAAC,GAMhDG,IAAa,GACXC,KAAa,MAAkBC,MAAUF;CAyC/C,OAAO;EACL;EACA;EACA;EACA,kBA1CA,GACA,GACA,MACG;GACH,IAAME,IAAQ,EAAEF;GAChB,EAAY,QAAQ;GAGpB,IAAMG,IAAUN,EAAgB,EAAE,GAAGO,EAAW,MAAM,CAAC;GACvD,IAAI;IACF,IAAMC,IAAQ,MAAMC,EAAQH,GAASI,GAAYC,CAAY;IAC7D,IAAI,CAACP,EAAUC,CAAK,GAAG;IAIvB,AAHA,EAAU,QAAQG,GAGlB,EAAW,QAAQ;KACjB,GAAGD,EAAW;KACd,aAAaD,EAAQ,MAAM;KAC3B,kBAAkBA,EAAQ,MAAM;KAChC,YAAYA,EAAQ,MAAM;IAC5B;GAEF,SAASM,GAAO;IACd,IAAI,CAACR,EAAUC,CAAK,GAAG;IAGvB,AADA,EAAU,QAAQ,CAAC,GACnBQ,EAAkBD,CAAK;GACzB,UAAU;IACR,AAAIR,EAAUC,CAAK,MAAG,EAAY,QAAQ;GAC5C;EACF;EAaE,cAVmB;GAEnB,AADA,KACAS,EAAM;EACR;CAQA;AACF;AAEA,SAAgBC,EAAoB,GAA0B;CAC5D,IAAM,EAAE,YAAS,aAAUC,EAAYlB,CAAM,GAEvCmB,IAAMjB,EAAgB,IAAI,GAC1BkB,IAAgBpB,EAAO,WAAWE,EAAI,EAAK,GAE7CG,IAAa,GACXC,KAAa,MAAkBC,MAAUF;CAyB/C,OAAO;EACL;EACA;EACA,kBAzBuB,MAA6C;GACpE,IAAME,IAAQ,EAAEF;GAChB,EAAc,QAAQ;GACtB,IAAI;IACF,IAAMgB,IAAM,MAAMV,EAAQ,EAAE,WAAW,EAAE,MAAG,EAAE,CAAC;IAG/C,OAFKL,EAAUC,CAAK,KACpB,EAAI,QAAQc,GACL,MAFgB;GAGzB,SAASP,GAAO;IAGd,OAFKR,EAAUC,CAAK,KACpB,EAAI,QAAQ,MACL,GAAsBO,CAAK,KAAY,KAAA,KAFvB;GAGzB,UAAU;IACR,AAAIR,EAAUC,CAAK,MAAG,EAAc,QAAQ;GAC9C;EACF;EAWE,cATmB;GAEnB,AADA,KACAS,EAAM;EACR;CAOA;AACF"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ValueObjectOption } from '../../../shared/types/ValueObject';
|
|
2
2
|
/**
|
|
3
|
-
* The two log stores every anzu backend exposes.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* same object the guard checks
|
|
3
|
+
* The two log stores every anzu backend exposes.
|
|
4
|
+
* A runtime value on purpose: the router guard validates the `:type`
|
|
5
|
+
* segment before any component mounts, and a TypeScript type is erased.
|
|
6
|
+
* The dropdown iterates the same object the guard checks, so they cannot drift apart.
|
|
7
7
|
*/
|
|
8
8
|
export declare const LogType: {
|
|
9
9
|
readonly App: "app";
|
|
@@ -13,9 +13,8 @@ export type LogTypeType = (typeof LogType)[keyof typeof LogType];
|
|
|
13
13
|
export declare const LogTypeDefault: "app";
|
|
14
14
|
export declare const isLogType: (value: unknown) => value is LogTypeType;
|
|
15
15
|
/**
|
|
16
|
-
* Full paths per type, not a segment
|
|
17
|
-
* `/adm/v1/log/journal
|
|
18
|
-
* differ in the same place.
|
|
16
|
+
* Full paths per type, not a segment on a shared prefix.
|
|
17
|
+
* brick exposes its app log at `/adm/v1/log/journal`, not `/adm/v1/log/app`, and other backends may differ elsewhere.
|
|
19
18
|
*/
|
|
20
19
|
export type LogPaths = Record<LogTypeType, string>;
|
|
21
20
|
export declare const DEFAULT_LOG_PATHS: LogPaths;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logType.js","names":["LogType","LogTypeDefault","isLogType","value","DEFAULT_LOG_PATHS","useLogType","logTypeOptions","ref","item"],"sources":["../../../../src/domains/log/composables/logType.ts"],"sourcesContent":["import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/shared/types/ValueObject'\n\n/**\n * The two log stores every anzu backend exposes
|
|
1
|
+
{"version":3,"file":"logType.js","names":["LogType","LogTypeDefault","isLogType","value","DEFAULT_LOG_PATHS","useLogType","logTypeOptions","ref","item"],"sources":["../../../../src/domains/log/composables/logType.ts"],"sourcesContent":["import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/shared/types/ValueObject'\n\n/**\n * The two log stores every anzu backend exposes.\n * A runtime value on purpose: the router guard validates the `:type`\n * segment before any component mounts, and a TypeScript type is erased.\n * The dropdown iterates the same object the guard checks, so they cannot drift apart.\n */\nexport const LogType = {\n App: 'app',\n Audit: 'audit',\n} as const\nexport type LogTypeType = (typeof LogType)[keyof typeof LogType]\nexport const LogTypeDefault = LogType.App\n\nexport const isLogType = (value: unknown): value is LogTypeType => Object.values(LogType).includes(value as LogTypeType)\n\n/**\n * Full paths per type, not a segment on a shared prefix.\n * brick exposes its app log at `/adm/v1/log/journal`, not `/adm/v1/log/app`, and other backends may differ elsewhere.\n */\nexport type LogPaths = Record<LogTypeType, string>\n\nexport const DEFAULT_LOG_PATHS: LogPaths = {\n app: '/adm/v1/log/app',\n audit: '/adm/v1/log/audit',\n}\n\nexport function useLogType() {\n // Raw `app` / `audit` titles, as every admin shows them.\n // `common.log.filter.type` is the select's label. One translation cannot title two options.\n const logTypeOptions = ref<ValueObjectOption<LogTypeType>[]>(\n Object.values(LogType).map((value) => ({ value, title: value }))\n )\n\n const getLogTypeOption = (value: LogTypeType) => {\n return logTypeOptions.value.find((item) => item.value === value)\n }\n\n return {\n logTypeOptions,\n getLogTypeOption,\n }\n}\n"],"mappings":";;AASA,IAAaA,IAAU;CACrB,KAAK;CACL,OAAO;AACT,GAEaC,IAAiBD,EAAQ,KAEzBE,KAAa,MAAyC,OAAO,OAAOF,CAAO,CAAC,CAAC,SAASG,CAAoB,GAQ1GC,IAA8B;CACzC,KAAK;CACL,OAAO;AACT;AAEA,SAAgBC,IAAa;CAG3B,IAAMC,IAAiBC,EACrB,OAAO,OAAOP,CAAO,CAAC,CAAC,KAAK,OAAW;EAAE;EAAO,OAAOG;CAAM,EAAE,CACjE;CAMA,OAAO;EACL;EACA,mBANwB,MACjBG,EAAe,MAAM,MAAM,MAASE,EAAK,UAAUL,CAAK;CAMjE;AACF"}
|
|
@@ -6,9 +6,9 @@ export interface LogTimeWindow {
|
|
|
6
6
|
to: DatetimeUTC;
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
|
-
* A factory
|
|
10
|
-
*
|
|
11
|
-
* interval fields, and
|
|
9
|
+
* A factory, not a constant: `defaultTimeWindow` cannot be a seeded value.
|
|
10
|
+
* The window reaches the query via `mandatory` plus `default` on the
|
|
11
|
+
* two interval fields, and `createFilter` reads both from this array.
|
|
12
12
|
*/
|
|
13
13
|
declare const logFilterFields: (window: LogTimeWindow | undefined) => ({
|
|
14
14
|
name: "levelName";
|
|
@@ -126,14 +126,11 @@ export interface LogFilter {
|
|
|
126
126
|
}
|
|
127
127
|
export declare function useLogFilter(system: string, window: LogTimeWindow | undefined): LogFilter;
|
|
128
128
|
/**
|
|
129
|
-
* Called on every mount, not only
|
|
130
|
-
* `filterConfig` the
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
* Three flags, not two -- `FiltersSelected` hides a chip on `render.selected`, so without the
|
|
135
|
-
* third one the bar would advertise a filter that is not being applied, and its close button
|
|
136
|
-
* would destroy the very value this approach exists to keep.
|
|
129
|
+
* Called on every mount, not only on a type change. The registry returns the
|
|
130
|
+
* `filterConfig` the last visit left, so the flags describe that visit's type.
|
|
131
|
+
* Otherwise landing on an `app` url after an audit visit would send `resourceName` to the app endpoint.
|
|
132
|
+
* Three flags: `FiltersSelected` hides a chip on `render.selected`. Without it the
|
|
133
|
+
* bar shows an unapplied filter, and its close button would destroy the kept value.
|
|
137
134
|
*/
|
|
138
135
|
export declare const applyLogTypeVisibility: (filter: LogFilter, type: LogTypeType) => void;
|
|
139
136
|
/** For tests and for anything that needs a clean slate; nothing in the views calls it. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logFilter.js","names":["AUDIT_ONLY_FIELDS","logFilterFields","window","isDefined","registry","useLogFilter","existing","system","fields","created","createFilter","createFilterStore","applyLogTypeVisibility","hide","type","LogType","field","filter","name"],"sources":["../../../../src/domains/log/filter/logFilter.ts"],"sourcesContent":["import {\n createFilter,\n createFilterStore,\n type FilterConfig,\n type FilterData,\n type MakeFilterOption,\n} from '@/domains/filters/composables/filterFactory'\nimport { LOG_ENTITY } from '@/domains/log/api/logApi'\nimport { LogType, type LogTypeType } from '@/domains/log/composables/logType'\nimport type { DatetimeUTC } from '@/shared/types/common'\nimport { isDefined } from '@/shared/utils/common'\n\nexport interface LogTimeWindow {\n from: DatetimeUTC\n to: DatetimeUTC\n}\n\n/**\n * Fields that only
|
|
1
|
+
{"version":3,"file":"logFilter.js","names":["AUDIT_ONLY_FIELDS","logFilterFields","window","isDefined","registry","useLogFilter","existing","system","fields","created","createFilter","createFilterStore","applyLogTypeVisibility","hide","type","LogType","field","filter","name"],"sources":["../../../../src/domains/log/filter/logFilter.ts"],"sourcesContent":["import {\n createFilter,\n createFilterStore,\n type FilterConfig,\n type FilterData,\n type MakeFilterOption,\n} from '@/domains/filters/composables/filterFactory'\nimport { LOG_ENTITY } from '@/domains/log/api/logApi'\nimport { LogType, type LogTypeType } from '@/domains/log/composables/logType'\nimport type { DatetimeUTC } from '@/shared/types/common'\nimport { isDefined } from '@/shared/utils/common'\n\nexport interface LogTimeWindow {\n from: DatetimeUTC\n to: DatetimeUTC\n}\n\n/**\n * Fields that only apply to the audit store. Switching to `app` hides them and keeps them out of the query.\n * It never clears them, so a value survives a round trip through `app`.\n */\nconst AUDIT_ONLY_FIELDS = ['resourceName', 'resourceIds'] as const\n\n/**\n * A factory, not a constant: `defaultTimeWindow` cannot be a seeded value.\n * The window reaches the query via `mandatory` plus `default` on the\n * two interval fields, and `createFilter` reads both from this array.\n */\nconst logFilterFields = (window: LogTimeWindow | undefined) =>\n [\n { name: 'levelName' as const, variant: 'in', default: [] },\n { name: 'id' as const, default: null, type: 'string' },\n // Both are drawn by hand in the `#search` slot of `ALogFilter`.\n // Without `skip` they would appear again in the \"more\" panel.\n {\n name: 'contextId' as const,\n apiName: 'context.contextId',\n default: null,\n type: 'string',\n render: { skip: true },\n },\n { name: 'message' as const, variant: 'startsWith', default: null, type: 'string', render: { skip: true } },\n {\n name: 'appVersion' as const,\n variant: 'startsWith',\n apiName: 'context.appVersion',\n default: null,\n type: 'string',\n },\n { name: 'userId' as const, apiName: 'context.userId', default: null, type: 'integer' },\n { name: 'resourceName' as const, apiName: 'context.resourceName', default: null, type: 'string' },\n {\n name: 'resourceIds' as const,\n apiName: 'context.resourceIds',\n variant: 'in',\n default: [],\n type: 'string',\n },\n // Both are drawn by hand in the `#search` slot of `ALogFilter`.\n // Without `skip` they would appear again in the \"more\" panel.\n // There `FilterDetailItem` has no `timeInterval` case and falls\n // through to `AFilterEmpty`, which prints the bare field name.\n {\n name: 'datetimeFrom' as const,\n apiName: 'datetime',\n type: 'timeInterval',\n related: 'datetimeTo',\n default: window?.from ?? null,\n mandatory: isDefined(window),\n render: { skip: true },\n },\n {\n name: 'datetimeTo' as const,\n apiName: 'datetime',\n type: 'timeInterval',\n exclude: true,\n default: window?.to ?? null,\n mandatory: isDefined(window),\n render: { skip: true },\n },\n ] satisfies readonly MakeFilterOption[]\n\ntype LogFilterFields = ReturnType<typeof logFilterFields>\n\nexport interface LogFilter {\n filterConfig: FilterConfig<LogFilterFields>\n filterData: FilterData<LogFilterFields>\n}\n\n/**\n * Keyed by system, so `/weather/logs` and `/brick/logs` do not overwrite each other.\n * Not keyed by type, so shared fields (context id, level, time\n * range, user, message) survive a switch between app and audit.\n * Module level, so values outlive the component. `createFilterStore` is\n * only a factory, and one created in `setup()` would die with the instance.\n */\nconst registry = new Map<string, LogFilter>()\n\nexport function useLogFilter(system: string, window: LogTimeWindow | undefined): LogFilter {\n const existing = registry.get(system)\n if (existing) {\n if (window) {\n const { fields } = existing.filterConfig\n // A value still at the old default was never chosen by the user, so it moves with the window.\n if (existing.filterData.datetimeFrom === fields.datetimeFrom.default)\n existing.filterData.datetimeFrom = window.from\n if (existing.filterData.datetimeTo === fields.datetimeTo.default) existing.filterData.datetimeTo = window.to\n fields.datetimeFrom.default = window.from\n fields.datetimeTo.default = window.to\n }\n return existing\n }\n\n const fields = logFilterFields(window)\n const created = createFilter(fields, createFilterStore(fields), {\n system: 'common',\n subject: LOG_ENTITY,\n })\n registry.set(system, created)\n\n return created\n}\n\n/**\n * Called on every mount, not only on a type change. The registry returns the\n * `filterConfig` the last visit left, so the flags describe that visit's type.\n * Otherwise landing on an `app` url after an audit visit would send `resourceName` to the app endpoint.\n * Three flags: `FiltersSelected` hides a chip on `render.selected`. Without it the\n * bar shows an unapplied filter, and its close button would destroy the kept value.\n */\nexport const applyLogTypeVisibility = (filter: LogFilter, type: LogTypeType): void => {\n const hide = type !== LogType.Audit\n\n AUDIT_ONLY_FIELDS.forEach((name) => {\n const field = filter.filterConfig.fields[name]\n field.exclude = hide\n field.render.skip = hide\n field.render.selected = !hide\n })\n}\n\n/** For tests and for anything that needs a clean slate; nothing in the views calls it. */\nexport const resetLogFilterRegistry = (): void => {\n registry.clear()\n}\n"],"mappings":";;;;AAqBA,IAAMA,IAAoB,CAAC,gBAAgB,aAAa,GAOlDC,KAAmB,MACvB;CACE;EAAE,MAAM;EAAsB,SAAS;EAAM,SAAS,CAAC;CAAE;CACzD;EAAE,MAAM;EAAe,SAAS;EAAM,MAAM;CAAS;CAGrD;EACE,MAAM;EACN,SAAS;EACT,SAAS;EACT,MAAM;EACN,QAAQ,EAAE,MAAM,GAAK;CACvB;CACA;EAAE,MAAM;EAAoB,SAAS;EAAc,SAAS;EAAM,MAAM;EAAU,QAAQ,EAAE,MAAM,GAAK;CAAE;CACzG;EACE,MAAM;EACN,SAAS;EACT,SAAS;EACT,SAAS;EACT,MAAM;CACR;CACA;EAAE,MAAM;EAAmB,SAAS;EAAkB,SAAS;EAAM,MAAM;CAAU;CACrF;EAAE,MAAM;EAAyB,SAAS;EAAwB,SAAS;EAAM,MAAM;CAAS;CAChG;EACE,MAAM;EACN,SAAS;EACT,SAAS;EACT,SAAS,CAAC;EACV,MAAM;CACR;CAKA;EACE,MAAM;EACN,SAAS;EACT,MAAM;EACN,SAAS;EACT,SAASC,GAAQ,QAAQ;EACzB,WAAWC,EAAUD,CAAM;EAC3B,QAAQ,EAAE,MAAM,GAAK;CACvB;CACA;EACE,MAAM;EACN,SAAS;EACT,MAAM;EACN,SAAS;EACT,SAASA,GAAQ,MAAM;EACvB,WAAWC,EAAUD,CAAM;EAC3B,QAAQ,EAAE,MAAM,GAAK;CACvB;AACF,GAgBIE,oBAAW,IAAI,IAAuB;AAE5C,SAAgBC,EAAa,GAAgB,GAA8C;CACzF,IAAMC,IAAWF,EAAS,IAAIG,CAAM;CACpC,IAAID,GAAU;EACZ,IAAIJ,GAAQ;GACV,IAAM,EAAE,cAAWI,EAAS;GAM5B,AAJIA,EAAS,WAAW,iBAAiBE,EAAO,aAAa,YAC3D,EAAS,WAAW,eAAeN,EAAO,OACxCI,EAAS,WAAW,eAAeE,EAAO,WAAW,YAAS,EAAS,WAAW,aAAaN,EAAO,KAC1G,EAAO,aAAa,UAAUA,EAAO,MACrC,EAAO,WAAW,UAAUA,EAAO;EACrC;EACA,OAAOI;CACT;CAEA,IAAME,IAASP,EAAgBC,CAAM,GAC/BO,IAAUC,EAAaF,GAAQG,EAAkBH,CAAM,GAAG;EAC9D,QAAQ;EACR,SAAA;CACF,CAAC;CAGD,OAFAJ,EAAS,IAAIG,GAAQE,CAAO,GAErBA;AACT;AASA,IAAaG,KAA0B,GAAmB,MAA4B;CACpF,IAAMC,IAAOC,MAASC,EAAQ;CAE9B,EAAkB,SAAS,MAAS;EAClC,IAAMC,IAAQC,EAAO,aAAa,OAAOC;EAGzC,AAFA,EAAM,UAAUL,GAChB,EAAM,OAAO,OAAOA,GACpB,EAAM,OAAO,WAAW,CAACA;CAC3B,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"APermissionEditor.js","names":["_sfc_main","APermissionEditor_vue_vue_type_script_setup_true_lang_default","APermissionEditor_default"],"sources":["../../../../src/domains/permission/components/APermissionEditor.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { ROLE_SUPER_ADMIN } from '@/domains/auth/composables/defineAuth'\nimport APermissionGrantEditor from '@/domains/permission/components/APermissionGrantEditor.vue'\nimport APermissionValueChip from '@/domains/permission/components/APermissionValueChip.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\nimport { Grant, type GrantType } from '@/domains/auth/valueObject/Grant'\nimport { GrantOrigin, GrantOriginDefault } from '@/domains/permission/valueObject/GrantOrigin'\nimport type { Permissions } from '@/domains/auth/types/Permission'\nimport { cloneDeep, isUndefined } from '@/shared/utils/common'\nimport { objectDeletePropertyByPath, objectGetValueByPath, objectSetValueByPath } from '@/shared/utils/object'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Which backend's permission vocabulary to draw. Never a global
|
|
1
|
+
{"version":3,"file":"APermissionEditor.js","names":["_sfc_main","APermissionEditor_vue_vue_type_script_setup_true_lang_default","APermissionEditor_default"],"sources":["../../../../src/domains/permission/components/APermissionEditor.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { ROLE_SUPER_ADMIN } from '@/domains/auth/composables/defineAuth'\nimport APermissionGrantEditor from '@/domains/permission/components/APermissionGrantEditor.vue'\nimport APermissionValueChip from '@/domains/permission/components/APermissionValueChip.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\nimport { Grant, type GrantType } from '@/domains/auth/valueObject/Grant'\nimport { GrantOrigin, GrantOriginDefault } from '@/domains/permission/valueObject/GrantOrigin'\nimport type { Permissions } from '@/domains/auth/types/Permission'\nimport { cloneDeep, isUndefined } from '@/shared/utils/common'\nimport { objectDeletePropertyByPath, objectGetValueByPath, objectSetValueByPath } from '@/shared/utils/object'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Which backend's permission vocabulary to draw. Never a global, see `permissionConfigActions`. */\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n /**\n * Grants the subject already has from roles and groups.\n * Undefined means the model is a group, not a user. The origin\n * column then attributes every explicit grant to the group itself.\n */\n resolvedPermissions?: Permissions | undefined\n roles?: string[]\n /** One component for detail and edit (decision 27). Readonly drops the grant column. */\n readonly?: boolean\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n resolvedPermissions: undefined,\n roles: () => [],\n readonly: false,\n }\n)\n\nconst modelValue = defineModel<Permissions>({ required: true })\n\nconst { t } = useI18n()\nconst { showWarning } = useAlerts()\n\n// A clone, because every mutation writes a whole object back through `modelValue`.\n// Editing in place would not trigger the parent's unsaved-changes watchers.\nconst permissions = computed(() => cloneDeep(modelValue.value))\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { permissionConfig, loadingPermissionConfig, isPermissionConfigInitialized, translatePermission } =\n usePermissionConfigActions({\n client: props.client,\n system: props.system,\n entity: props.entity,\n endPoint: props.endPoint,\n })\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst changeGrant = (subject: string, action: string, grant?: GrantType) => {\n const permissionName = subject + '_' + action\n if (isUndefined(grant) && Object.hasOwn(permissions.value, permissionName)) {\n objectDeletePropertyByPath(permissions.value, permissionName)\n modelValue.value = permissions.value\n return\n }\n objectSetValueByPath(permissions.value, permissionName, grant)\n modelValue.value = permissions.value\n}\n\nconst getSelectedGrant = (subject: string, action: string) => {\n return objectGetValueByPath(permissions.value, subject + '_' + action)\n}\n\nconst getAvailableGrants = (subject: string, action: string): GrantType[] => {\n const grants = objectGetValueByPath(permissionConfig.value.config, subject + '.' + action + '.grants')\n if (isUndefined(grants)) {\n return permissionConfig.value.defaultGrants\n }\n return grants\n}\n\nconst RESTRICTIVE_GRANTS: GrantType[] = [Grant.Deny, Grant.AllowOwner]\n\nconst isExplicitRestrictiveGrant = (subject: string, action: string) => {\n const permissionName = subject + '_' + action\n if (!Object.hasOwn(permissions.value, permissionName)) return false\n return RESTRICTIVE_GRANTS.includes(getSelectedGrant(subject, action))\n}\n\n/**\n * Allows every action in the subject, except actions explicitly set to deny or owner-only.\n * Those are left alone and their count is reported, so the button never widens a deliberate restriction.\n */\nconst allowAllActions = (subject: string) => {\n let keptRestrictiveGrantCount = 0\n for (const action of Object.keys(permissionConfig.value.config[subject]!)) {\n if (!getAvailableGrants(subject, action).includes(Grant.Allow)) continue\n if (isExplicitRestrictiveGrant(subject, action)) {\n keptRestrictiveGrantCount++\n continue\n }\n objectSetValueByPath(permissions.value, subject + '_' + action, Grant.Allow)\n }\n modelValue.value = permissions.value\n if (keptRestrictiveGrantCount > 0) {\n showWarning(\n t('common.permissionEditor.restrictiveGrantKept', { count: keptRestrictiveGrantCount }, keptRestrictiveGrantCount)\n )\n }\n}\n\nconst hasSuperAdminRole = computed(() => props.roles.includes(ROLE_SUPER_ADMIN))\n\nconst getResolvedGrant = (subject: string, action: string) => {\n if (hasSuperAdminRole.value) return Grant.Allow\n const permissionName = subject + '_' + action\n if (props.resolvedPermissions && Object.hasOwn(props.resolvedPermissions, permissionName)) {\n return objectGetValueByPath(props.resolvedPermissions, permissionName)\n }\n if (Object.hasOwn(permissions.value, permissionName)) {\n return objectGetValueByPath(permissions.value, permissionName)\n }\n return Grant.Deny\n}\n\nconst getGrantOrigin = (subject: string, action: string) => {\n if (hasSuperAdminRole.value) return GrantOrigin.Role\n const permissionName = subject + '_' + action\n if (isUndefined(props.resolvedPermissions)) {\n if (Object.hasOwn(permissions.value, permissionName)) return GrantOrigin.Group\n return GrantOriginDefault\n }\n if (Object.hasOwn(permissions.value, permissionName)) return GrantOrigin.User\n if (Object.hasOwn(props.resolvedPermissions, permissionName)) return GrantOrigin.Group\n return GrantOriginDefault\n}\n</script>\n\n<template>\n <VCard :loading=\"loadingPermissionConfig\">\n <VCardText>\n <VTable v-if=\"isPermissionConfigInitialized\">\n <thead>\n <tr>\n <th>{{ t('common.anzuUser.table.grants') }}</th>\n <th v-if=\"!readonly\">\n {{ t('common.anzuUser.table.permissions') }}\n </th>\n <th>{{ t('common.anzuUser.table.resolvedPermissions') }}</th>\n </tr>\n </thead>\n <tbody>\n <template\n v-for=\"permissionSubject in Object.keys(permissionConfig.config)\"\n :key=\"permissionSubject\"\n >\n <tr>\n <td\n :colspan=\"readonly ? 2 : 3\"\n class=\"text-headline-small font-weight-bold\"\n >\n {{ translatePermission('subjects', permissionSubject) }}\n <VBtn\n v-if=\"!readonly\"\n size=\"x-small\"\n variant=\"text\"\n class=\"ml-2\"\n :data-cy=\"`permission-allow-all-${permissionSubject}`\"\n @click=\"allowAllActions(permissionSubject)\"\n >\n {{ t('common.permissionEditor.allowAll') }}\n </VBtn>\n </td>\n </tr>\n <tr\n v-for=\"permissionAction in Object.keys(permissionConfig.config[permissionSubject]!)\"\n :key=\"permissionAction\"\n >\n <td>\n {{ translatePermission('actions', permissionAction) }}\n <div class=\"text-body-small text-disabled\">{{ permissionSubject }}_{{ permissionAction }}</div>\n </td>\n <td v-if=\"!readonly\">\n <APermissionGrantEditor\n :available-grants=\"getAvailableGrants(permissionSubject, permissionAction)\"\n :selected-grant=\"getSelectedGrant(permissionSubject, permissionAction)\"\n @change=\"changeGrant(permissionSubject, permissionAction, $event)\"\n />\n </td>\n <td>\n <APermissionValueChip\n :grant=\"getResolvedGrant(permissionSubject, permissionAction)\"\n :grant-origin=\"getGrantOrigin(permissionSubject, permissionAction)\"\n />\n </td>\n </tr>\n </template>\n </tbody>\n </VTable>\n </VCardText>\n </VCard>\n</template>\n"],"mappings":""}
|
|
@@ -2,14 +2,14 @@ import { AxiosClientFn } from '../../api/utils/client';
|
|
|
2
2
|
import { Permissions } from '../../auth/types/Permission';
|
|
3
3
|
type __VLS_Props = {
|
|
4
4
|
client: AxiosClientFn;
|
|
5
|
-
/** Which backend's permission vocabulary to draw. Never a global
|
|
5
|
+
/** Which backend's permission vocabulary to draw. Never a global, see `permissionConfigActions`. */
|
|
6
6
|
system: string;
|
|
7
7
|
entity?: string | undefined;
|
|
8
8
|
endPoint?: string | undefined;
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* Grants the subject already has from roles and groups.
|
|
11
|
+
* Undefined means the model is a group, not a user. The origin
|
|
12
|
+
* column then attributes every explicit grant to the group itself.
|
|
13
13
|
*/
|
|
14
14
|
resolvedPermissions?: Permissions | undefined;
|
|
15
15
|
roles?: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"APermissionEditor.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","_component_VCard","_unref","_withCtx","_createVNode","_component_VCardText","_component_VTable","_createElementVNode","_toDisplayString","_createElementBlock","_createCommentVNode","_Fragment","_renderList","_createTextVNode","_component_VBtn","APermissionGrantEditor","APermissionValueChip","APermissionGrantEditor_default","APermissionValueChip_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","APermissionEditor_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","props","__props","modelValue","useModel","useI18n","useAlerts","permissions","computed","cloneDeep","usePermissionConfigActions","changeGrant","permissionName","subject","action","isUndefined","grant","objectDeletePropertyByPath","objectSetValueByPath","getSelectedGrant","objectGetValueByPath","getAvailableGrants","grants","permissionConfig","RESTRICTIVE_GRANTS","Grant","isExplicitRestrictiveGrant","allowAllActions","keptRestrictiveGrantCount","showWarning","t","hasSuperAdminRole","ROLE_SUPER_ADMIN","getResolvedGrant","getGrantOrigin","GrantOrigin","GrantOriginDefault","openBlock","createBlock","VCard","unref","loadingPermissionConfig","withCtx","createVNode","VCardText","isPermissionConfigInitialized","VTable","createElementVNode","toDisplayString","createCommentVNode","createElementBlock","Fragment","renderList","permissionSubject","createTextVNode","translatePermission","VBtn","permissionAction","$event"],"sources":["../../../../src/domains/permission/components/APermissionEditor.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { ROLE_SUPER_ADMIN } from '@/domains/auth/composables/defineAuth'\nimport APermissionGrantEditor from '@/domains/permission/components/APermissionGrantEditor.vue'\nimport APermissionValueChip from '@/domains/permission/components/APermissionValueChip.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\nimport { Grant, type GrantType } from '@/domains/auth/valueObject/Grant'\nimport { GrantOrigin, GrantOriginDefault } from '@/domains/permission/valueObject/GrantOrigin'\nimport type { Permissions } from '@/domains/auth/types/Permission'\nimport { cloneDeep, isUndefined } from '@/shared/utils/common'\nimport { objectDeletePropertyByPath, objectGetValueByPath, objectSetValueByPath } from '@/shared/utils/object'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Which backend's permission vocabulary to draw. Never a global -- see `permissionConfigActions`. */\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n /**\n * The grants the subject already has from roles and groups. Undefined means \"this model is a\n * group, not a user\": the origin column then reads every explicit grant as coming from the\n * group itself rather than from the user.\n */\n resolvedPermissions?: Permissions | undefined\n roles?: string[]\n /** One component for detail and edit (decision 27). Readonly drops the grant column. */\n readonly?: boolean\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n resolvedPermissions: undefined,\n roles: () => [],\n readonly: false,\n }\n)\n\nconst modelValue = defineModel<Permissions>({ required: true })\n\nconst { t } = useI18n()\nconst { showWarning } = useAlerts()\n\n// A clone, because every mutation below writes a whole object back through `modelValue`: editing\n// the model in place would not re-trigger the parent's watchers that guard unsaved changes.\nconst permissions = computed(() => cloneDeep(modelValue.value))\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { permissionConfig, loadingPermissionConfig, isPermissionConfigInitialized, translatePermission } =\n usePermissionConfigActions({\n client: props.client,\n system: props.system,\n entity: props.entity,\n endPoint: props.endPoint,\n })\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst changeGrant = (subject: string, action: string, grant?: GrantType) => {\n const permissionName = subject + '_' + action\n if (isUndefined(grant) && Object.hasOwn(permissions.value, permissionName)) {\n objectDeletePropertyByPath(permissions.value, permissionName)\n modelValue.value = permissions.value\n return\n }\n objectSetValueByPath(permissions.value, permissionName, grant)\n modelValue.value = permissions.value\n}\n\nconst getSelectedGrant = (subject: string, action: string) => {\n return objectGetValueByPath(permissions.value, subject + '_' + action)\n}\n\nconst getAvailableGrants = (subject: string, action: string): GrantType[] => {\n const grants = objectGetValueByPath(permissionConfig.value.config, subject + '.' + action + '.grants')\n if (isUndefined(grants)) {\n return permissionConfig.value.defaultGrants\n }\n return grants\n}\n\nconst RESTRICTIVE_GRANTS: GrantType[] = [Grant.Deny, Grant.AllowOwner]\n\nconst isExplicitRestrictiveGrant = (subject: string, action: string) => {\n const permissionName = subject + '_' + action\n if (!Object.hasOwn(permissions.value, permissionName)) return false\n return RESTRICTIVE_GRANTS.includes(getSelectedGrant(subject, action))\n}\n\n/**\n * \"Allow everything in this subject\", but it refuses to undo a deliberate restriction: an action\n * someone explicitly set to deny or owner-only is left alone and counted, and the count is\n * reported. Silently widening those is the one way this button could grant access nobody asked\n * for.\n */\n// Called with a subject from the template's own loop over `permissionConfig.config`.\nconst allowAllActions = (subject: string) => {\n let keptRestrictiveGrantCount = 0\n for (const action of Object.keys(permissionConfig.value.config[subject]!)) {\n if (!getAvailableGrants(subject, action).includes(Grant.Allow)) continue\n if (isExplicitRestrictiveGrant(subject, action)) {\n keptRestrictiveGrantCount++\n continue\n }\n objectSetValueByPath(permissions.value, subject + '_' + action, Grant.Allow)\n }\n modelValue.value = permissions.value\n if (keptRestrictiveGrantCount > 0) {\n showWarning(\n t('common.permissionEditor.restrictiveGrantKept', { count: keptRestrictiveGrantCount }, keptRestrictiveGrantCount)\n )\n }\n}\n\nconst hasSuperAdminRole = computed(() => props.roles.includes(ROLE_SUPER_ADMIN))\n\nconst getResolvedGrant = (subject: string, action: string) => {\n if (hasSuperAdminRole.value) return Grant.Allow\n const permissionName = subject + '_' + action\n if (props.resolvedPermissions && Object.hasOwn(props.resolvedPermissions, permissionName)) {\n return objectGetValueByPath(props.resolvedPermissions, permissionName)\n }\n if (Object.hasOwn(permissions.value, permissionName)) {\n return objectGetValueByPath(permissions.value, permissionName)\n }\n return Grant.Deny\n}\n\nconst getGrantOrigin = (subject: string, action: string) => {\n if (hasSuperAdminRole.value) return GrantOrigin.Role\n const permissionName = subject + '_' + action\n if (isUndefined(props.resolvedPermissions)) {\n if (Object.hasOwn(permissions.value, permissionName)) return GrantOrigin.Group\n return GrantOriginDefault\n }\n if (Object.hasOwn(permissions.value, permissionName)) return GrantOrigin.User\n if (Object.hasOwn(props.resolvedPermissions, permissionName)) return GrantOrigin.Group\n return GrantOriginDefault\n}\n</script>\n\n<template>\n <VCard :loading=\"loadingPermissionConfig\">\n <VCardText>\n <VTable v-if=\"isPermissionConfigInitialized\">\n <thead>\n <tr>\n <th>{{ t('common.anzuUser.table.grants') }}</th>\n <th v-if=\"!readonly\">\n {{ t('common.anzuUser.table.permissions') }}\n </th>\n <th>{{ t('common.anzuUser.table.resolvedPermissions') }}</th>\n </tr>\n </thead>\n <tbody>\n <template\n v-for=\"permissionSubject in Object.keys(permissionConfig.config)\"\n :key=\"permissionSubject\"\n >\n <tr>\n <td\n :colspan=\"readonly ? 2 : 3\"\n class=\"text-headline-small font-weight-bold\"\n >\n {{ translatePermission('subjects', permissionSubject) }}\n <VBtn\n v-if=\"!readonly\"\n size=\"x-small\"\n variant=\"text\"\n class=\"ml-2\"\n :data-cy=\"`permission-allow-all-${permissionSubject}`\"\n @click=\"allowAllActions(permissionSubject)\"\n >\n {{ t('common.permissionEditor.allowAll') }}\n </VBtn>\n </td>\n </tr>\n <tr\n v-for=\"permissionAction in Object.keys(permissionConfig.config[permissionSubject]!)\"\n :key=\"permissionAction\"\n >\n <td>\n {{ translatePermission('actions', permissionAction) }}\n <div class=\"text-body-small text-disabled\">{{ permissionSubject }}_{{ permissionAction }}</div>\n </td>\n <td v-if=\"!readonly\">\n <APermissionGrantEditor\n :available-grants=\"getAvailableGrants(permissionSubject, permissionAction)\"\n :selected-grant=\"getSelectedGrant(permissionSubject, permissionAction)\"\n @change=\"changeGrant(permissionSubject, permissionAction, $event)\"\n />\n </td>\n <td>\n <APermissionValueChip\n :grant=\"getResolvedGrant(permissionSubject, permissionAction)\"\n :grant-origin=\"getGrantOrigin(permissionSubject, permissionAction)\"\n />\n </td>\n </tr>\n </template>\n </tbody>\n </VTable>\n </VCardText>\n </VCard>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"APermissionEditor.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","_component_VCard","_unref","_withCtx","_createVNode","_component_VCardText","_component_VTable","_createElementVNode","_toDisplayString","_createElementBlock","_createCommentVNode","_Fragment","_renderList","_createTextVNode","_component_VBtn","APermissionGrantEditor","APermissionValueChip","APermissionGrantEditor_default","APermissionValueChip_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","APermissionEditor_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","props","__props","modelValue","useModel","useI18n","useAlerts","permissions","computed","cloneDeep","usePermissionConfigActions","changeGrant","permissionName","subject","action","isUndefined","grant","objectDeletePropertyByPath","objectSetValueByPath","getSelectedGrant","objectGetValueByPath","getAvailableGrants","grants","permissionConfig","RESTRICTIVE_GRANTS","Grant","isExplicitRestrictiveGrant","allowAllActions","keptRestrictiveGrantCount","showWarning","t","hasSuperAdminRole","ROLE_SUPER_ADMIN","getResolvedGrant","getGrantOrigin","GrantOrigin","GrantOriginDefault","openBlock","createBlock","VCard","unref","loadingPermissionConfig","withCtx","createVNode","VCardText","isPermissionConfigInitialized","VTable","createElementVNode","toDisplayString","createCommentVNode","createElementBlock","Fragment","renderList","permissionSubject","createTextVNode","translatePermission","VBtn","permissionAction","$event"],"sources":["../../../../src/domains/permission/components/APermissionEditor.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { ROLE_SUPER_ADMIN } from '@/domains/auth/composables/defineAuth'\nimport APermissionGrantEditor from '@/domains/permission/components/APermissionGrantEditor.vue'\nimport APermissionValueChip from '@/domains/permission/components/APermissionValueChip.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\nimport { Grant, type GrantType } from '@/domains/auth/valueObject/Grant'\nimport { GrantOrigin, GrantOriginDefault } from '@/domains/permission/valueObject/GrantOrigin'\nimport type { Permissions } from '@/domains/auth/types/Permission'\nimport { cloneDeep, isUndefined } from '@/shared/utils/common'\nimport { objectDeletePropertyByPath, objectGetValueByPath, objectSetValueByPath } from '@/shared/utils/object'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Which backend's permission vocabulary to draw. Never a global, see `permissionConfigActions`. */\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n /**\n * Grants the subject already has from roles and groups.\n * Undefined means the model is a group, not a user. The origin\n * column then attributes every explicit grant to the group itself.\n */\n resolvedPermissions?: Permissions | undefined\n roles?: string[]\n /** One component for detail and edit (decision 27). Readonly drops the grant column. */\n readonly?: boolean\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n resolvedPermissions: undefined,\n roles: () => [],\n readonly: false,\n }\n)\n\nconst modelValue = defineModel<Permissions>({ required: true })\n\nconst { t } = useI18n()\nconst { showWarning } = useAlerts()\n\n// A clone, because every mutation writes a whole object back through `modelValue`.\n// Editing in place would not trigger the parent's unsaved-changes watchers.\nconst permissions = computed(() => cloneDeep(modelValue.value))\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { permissionConfig, loadingPermissionConfig, isPermissionConfigInitialized, translatePermission } =\n usePermissionConfigActions({\n client: props.client,\n system: props.system,\n entity: props.entity,\n endPoint: props.endPoint,\n })\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst changeGrant = (subject: string, action: string, grant?: GrantType) => {\n const permissionName = subject + '_' + action\n if (isUndefined(grant) && Object.hasOwn(permissions.value, permissionName)) {\n objectDeletePropertyByPath(permissions.value, permissionName)\n modelValue.value = permissions.value\n return\n }\n objectSetValueByPath(permissions.value, permissionName, grant)\n modelValue.value = permissions.value\n}\n\nconst getSelectedGrant = (subject: string, action: string) => {\n return objectGetValueByPath(permissions.value, subject + '_' + action)\n}\n\nconst getAvailableGrants = (subject: string, action: string): GrantType[] => {\n const grants = objectGetValueByPath(permissionConfig.value.config, subject + '.' + action + '.grants')\n if (isUndefined(grants)) {\n return permissionConfig.value.defaultGrants\n }\n return grants\n}\n\nconst RESTRICTIVE_GRANTS: GrantType[] = [Grant.Deny, Grant.AllowOwner]\n\nconst isExplicitRestrictiveGrant = (subject: string, action: string) => {\n const permissionName = subject + '_' + action\n if (!Object.hasOwn(permissions.value, permissionName)) return false\n return RESTRICTIVE_GRANTS.includes(getSelectedGrant(subject, action))\n}\n\n/**\n * Allows every action in the subject, except actions explicitly set to deny or owner-only.\n * Those are left alone and their count is reported, so the button never widens a deliberate restriction.\n */\nconst allowAllActions = (subject: string) => {\n let keptRestrictiveGrantCount = 0\n for (const action of Object.keys(permissionConfig.value.config[subject]!)) {\n if (!getAvailableGrants(subject, action).includes(Grant.Allow)) continue\n if (isExplicitRestrictiveGrant(subject, action)) {\n keptRestrictiveGrantCount++\n continue\n }\n objectSetValueByPath(permissions.value, subject + '_' + action, Grant.Allow)\n }\n modelValue.value = permissions.value\n if (keptRestrictiveGrantCount > 0) {\n showWarning(\n t('common.permissionEditor.restrictiveGrantKept', { count: keptRestrictiveGrantCount }, keptRestrictiveGrantCount)\n )\n }\n}\n\nconst hasSuperAdminRole = computed(() => props.roles.includes(ROLE_SUPER_ADMIN))\n\nconst getResolvedGrant = (subject: string, action: string) => {\n if (hasSuperAdminRole.value) return Grant.Allow\n const permissionName = subject + '_' + action\n if (props.resolvedPermissions && Object.hasOwn(props.resolvedPermissions, permissionName)) {\n return objectGetValueByPath(props.resolvedPermissions, permissionName)\n }\n if (Object.hasOwn(permissions.value, permissionName)) {\n return objectGetValueByPath(permissions.value, permissionName)\n }\n return Grant.Deny\n}\n\nconst getGrantOrigin = (subject: string, action: string) => {\n if (hasSuperAdminRole.value) return GrantOrigin.Role\n const permissionName = subject + '_' + action\n if (isUndefined(props.resolvedPermissions)) {\n if (Object.hasOwn(permissions.value, permissionName)) return GrantOrigin.Group\n return GrantOriginDefault\n }\n if (Object.hasOwn(permissions.value, permissionName)) return GrantOrigin.User\n if (Object.hasOwn(props.resolvedPermissions, permissionName)) return GrantOrigin.Group\n return GrantOriginDefault\n}\n</script>\n\n<template>\n <VCard :loading=\"loadingPermissionConfig\">\n <VCardText>\n <VTable v-if=\"isPermissionConfigInitialized\">\n <thead>\n <tr>\n <th>{{ t('common.anzuUser.table.grants') }}</th>\n <th v-if=\"!readonly\">\n {{ t('common.anzuUser.table.permissions') }}\n </th>\n <th>{{ t('common.anzuUser.table.resolvedPermissions') }}</th>\n </tr>\n </thead>\n <tbody>\n <template\n v-for=\"permissionSubject in Object.keys(permissionConfig.config)\"\n :key=\"permissionSubject\"\n >\n <tr>\n <td\n :colspan=\"readonly ? 2 : 3\"\n class=\"text-headline-small font-weight-bold\"\n >\n {{ translatePermission('subjects', permissionSubject) }}\n <VBtn\n v-if=\"!readonly\"\n size=\"x-small\"\n variant=\"text\"\n class=\"ml-2\"\n :data-cy=\"`permission-allow-all-${permissionSubject}`\"\n @click=\"allowAllActions(permissionSubject)\"\n >\n {{ t('common.permissionEditor.allowAll') }}\n </VBtn>\n </td>\n </tr>\n <tr\n v-for=\"permissionAction in Object.keys(permissionConfig.config[permissionSubject]!)\"\n :key=\"permissionAction\"\n >\n <td>\n {{ translatePermission('actions', permissionAction) }}\n <div class=\"text-body-small text-disabled\">{{ permissionSubject }}_{{ permissionAction }}</div>\n </td>\n <td v-if=\"!readonly\">\n <APermissionGrantEditor\n :available-grants=\"getAvailableGrants(permissionSubject, permissionAction)\"\n :selected-grant=\"getSelectedGrant(permissionSubject, permissionAction)\"\n @change=\"changeGrant(permissionSubject, permissionAction, $event)\"\n />\n </td>\n <td>\n <APermissionValueChip\n :grant=\"getResolvedGrant(permissionSubject, permissionAction)\"\n :grant-origin=\"getGrantOrigin(permissionSubject, permissionAction)\"\n />\n </td>\n </tr>\n </template>\n </tbody>\n </VTable>\n </VCardText>\n </VCard>\n</template>\n"],"mappings":"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"}
|
|
@@ -9,12 +9,9 @@ export interface PermissionActionsParams {
|
|
|
9
9
|
endPoint?: string;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* Builds the
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* It is not the backend's `resolvedPermissions`. That one arrives with the record and includes
|
|
16
|
-
* roles; this one is what the screen would send if saved now, so the editor can show the effect of
|
|
17
|
-
* a group the operator has just ticked without a round trip.
|
|
12
|
+
* Builds the user's resulting grant map for the editor's "resolved" column, from the user's groups plus direct grants.
|
|
13
|
+
* This is not the backend's `resolvedPermissions`, which includes roles. It reflects what
|
|
14
|
+
* a save would send now, so a just-ticked group shows its effect without a round trip.
|
|
18
15
|
*/
|
|
19
16
|
export declare const usePermissionActions: (params: PermissionActionsParams) => {
|
|
20
17
|
resolvePermissions: (user: AnzuUser) => Permissions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissionActions.js","names":["usePermissionActions","useCachedPermissionGroups","params","resolveGroupPermissions","permissions","permissionGroups","permissionGroupIds","getCachedPermissionGroup","id","permissionGroup","permissionName","grant","objectGetValueByPath","objectSetValueByPath","user"],"sources":["../../../../src/domains/permission/composables/permissionActions.ts"],"sourcesContent":["import type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { useCachedPermissionGroups } from '@/domains/permission/group/composables/cachedPermissionGroups'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\nimport type { IntegerId } from '@/shared/types/common'\nimport type { Permissions } from '@/domains/auth/types/Permission'\nimport { isUndefined } from '@/shared/utils/common'\nimport { objectGetValueByPath, objectSetValueByPath } from '@/shared/utils/object'\n\nexport interface PermissionActionsParams {\n client: AxiosClientFn\n system: string\n entity?: string\n endPoint?: string\n}\n\n/**\n * Builds the
|
|
1
|
+
{"version":3,"file":"permissionActions.js","names":["usePermissionActions","useCachedPermissionGroups","params","resolveGroupPermissions","permissions","permissionGroups","permissionGroupIds","getCachedPermissionGroup","id","permissionGroup","permissionName","grant","objectGetValueByPath","objectSetValueByPath","user"],"sources":["../../../../src/domains/permission/composables/permissionActions.ts"],"sourcesContent":["import type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { useCachedPermissionGroups } from '@/domains/permission/group/composables/cachedPermissionGroups'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\nimport type { IntegerId } from '@/shared/types/common'\nimport type { Permissions } from '@/domains/auth/types/Permission'\nimport { isUndefined } from '@/shared/utils/common'\nimport { objectGetValueByPath, objectSetValueByPath } from '@/shared/utils/object'\n\nexport interface PermissionActionsParams {\n client: AxiosClientFn\n system: string\n entity?: string\n endPoint?: string\n}\n\n/**\n * Builds the user's resulting grant map for the editor's \"resolved\" column, from the user's groups plus direct grants.\n * This is not the backend's `resolvedPermissions`, which includes roles. It reflects what\n * a save would send now, so a just-ticked group shows its effect without a round trip.\n */\nexport const usePermissionActions = (params: PermissionActionsParams) => {\n const { getCachedPermissionGroup } = useCachedPermissionGroups(params)\n\n const resolveGroupPermissions = (permissionGroupIds: IntegerId[]): Permissions => {\n const permissions: Permissions = {}\n const permissionGroups = permissionGroupIds.map((id) => getCachedPermissionGroup(id))\n\n for (const permissionGroup of permissionGroups) {\n if (isUndefined(permissionGroup)) continue\n for (const permissionName in permissionGroup.permissions) {\n const grant = objectGetValueByPath(permissionGroup.permissions, permissionName)\n if (!Object.hasOwn(permissions, permissionName)) {\n objectSetValueByPath(permissions, permissionName, grant)\n continue\n }\n // Grants are ordered deny < allowOwner < allow, so the widest group wins. Two groups that\n // disagree do not cancel out.\n if (objectGetValueByPath(permissions, permissionName) < grant) {\n objectSetValueByPath(permissions, permissionName, grant)\n }\n }\n }\n return permissions\n }\n\n /** A grant set on the user directly always beats whatever the groups say. */\n const resolvePermissions = (user: AnzuUser): Permissions => ({\n ...resolveGroupPermissions(user.permissionGroups),\n ...user.permissions,\n })\n\n return {\n resolvePermissions,\n resolveGroupPermissions,\n }\n}\n"],"mappings":";;;;AAoBA,IAAaA,KAAwB,MAAoC;CACvE,IAAM,EAAE,gCAA6BC,EAA0BC,CAAM,GAE/DC,KAA2B,MAAiD;EAChF,IAAMC,IAA2B,CAAC,GAC5BC,IAAmBC,EAAmB,KAAK,MAAOC,EAAyBC,CAAE,CAAC;EAEpF,KAAK,IAAMC,KAAmBJ,GAC5B,IAAI,GAAYI,CAAe,GAC/B,KAAK,IAAMC,KAAkBD,EAAgB,aAAa;GACxD,IAAME,IAAQC,EAAqBH,EAAgB,aAAaC,CAAc;GAC9E,AAAK,OAAO,OAAON,GAAaM,CAAc,IAM1CE,EAAqBR,GAAaM,CAAc,IAAIC,KACtDE,EAAqBT,GAAaM,GAAgBC,CAAK,IANvDE,EAAqBT,GAAaM,GAAgBC,CAAK;EAQ3D;EAEF,OAAOP;CACT;CAQA,OAAO;EACL,qBAN0B,OAAiC;GAC3D,GAAGD,EAAwBW,EAAK,gBAAgB;GAChD,GAAGA,EAAK;EACV;EAIE;CACF;AACF"}
|
|
@@ -5,8 +5,8 @@ export declare const PERMISSION_CONFIG_ENDPOINT = "/adm/v1/permissions/config";
|
|
|
5
5
|
export interface PermissionConfigApiParams {
|
|
6
6
|
client: AxiosClientFn;
|
|
7
7
|
/**
|
|
8
|
-
* Which backend this instance talks to. It reaches `useApiRequest` for error context
|
|
9
|
-
*
|
|
8
|
+
* Which backend this instance talks to. It reaches `useApiRequest` for error context.
|
|
9
|
+
* It is also the storage key downstream, so two systems can be loaded side by side.
|
|
10
10
|
*/
|
|
11
11
|
system: string;
|
|
12
12
|
/** Goes into every `useApiRequest` call; see the per-system entity note in `permissionGroupApi`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissionConfigApi.js","names":["PERMISSION_CONFIG_ENTITY","PERMISSION_CONFIG_ENDPOINT","usePermissionConfigApi","useApiRequest","entity","endPoint"],"sources":["../../../../../src/domains/permission/config/api/permissionConfigApi.ts"],"sourcesContent":["import type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { useApiRequest } from '@/domains/api/composables/useApiRequest'\nimport type { PermissionConfig } from '@/domains/permission/config/types/PermissionConfig'\n\nexport const PERMISSION_CONFIG_ENTITY = 'permissionConfig'\nexport const PERMISSION_CONFIG_ENDPOINT = '/adm/v1/permissions/config'\n\nexport interface PermissionConfigApiParams {\n client: AxiosClientFn\n /**\n * Which backend this instance talks to. It reaches `useApiRequest` for error context
|
|
1
|
+
{"version":3,"file":"permissionConfigApi.js","names":["PERMISSION_CONFIG_ENTITY","PERMISSION_CONFIG_ENDPOINT","usePermissionConfigApi","useApiRequest","entity","endPoint"],"sources":["../../../../../src/domains/permission/config/api/permissionConfigApi.ts"],"sourcesContent":["import type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { useApiRequest } from '@/domains/api/composables/useApiRequest'\nimport type { PermissionConfig } from '@/domains/permission/config/types/PermissionConfig'\n\nexport const PERMISSION_CONFIG_ENTITY = 'permissionConfig'\nexport const PERMISSION_CONFIG_ENDPOINT = '/adm/v1/permissions/config'\n\nexport interface PermissionConfigApiParams {\n client: AxiosClientFn\n /**\n * Which backend this instance talks to. It reaches `useApiRequest` for error context.\n * It is also the storage key downstream, so two systems can be loaded side by side.\n */\n system: string\n /** Goes into every `useApiRequest` call; see the per-system entity note in `permissionGroupApi`. */\n entity?: string\n endPoint?: string\n}\n\nexport const usePermissionConfigApi = ({\n client,\n system,\n entity = PERMISSION_CONFIG_ENTITY,\n endPoint = PERMISSION_CONFIG_ENDPOINT,\n}: PermissionConfigApiParams) => {\n const useFetchPermissionConfig = () =>\n useApiRequest<PermissionConfig, null>({\n client,\n method: 'GET',\n system,\n entity,\n // The config endpoint never returns field-level validation failures.\n // The pair stays consistent with the rest of the shared api so a future one gets real labels.\n validationSystem: 'common',\n validationEntity: entity,\n urlTemplate: endPoint,\n })\n\n return {\n useFetchPermissionConfig,\n }\n}\n"],"mappings":";;AAIA,IAAaA,IAA2B,oBAC3BC,IAA6B,8BAc7BC,KAA0B,EACrC,WACA,WACA,YAASF,GACT,cAAWC,SAeJ,EACL,gCAbAE,EAAsC;CACpC;CACA,QAAQ;CACR;CACA;CAGA,kBAAkB;CAClB,kBAAkBC;CAClB,aAAaC;AACf,CAAC,EAIH"}
|
|
@@ -2,17 +2,13 @@ import { AxiosClientFn } from '../../../api/utils/client';
|
|
|
2
2
|
import { PermissionTranslationGroup } from '../types/PermissionConfig';
|
|
3
3
|
export interface PermissionConfigActionsParams {
|
|
4
4
|
client: AxiosClientFn;
|
|
5
|
-
/**
|
|
6
|
-
* The system this config belongs to. It is a parameter and not a global -- admin-inhouse used to
|
|
7
|
-
* read it from a `curSystem` ref, which made the whole module impossible to use from a page that
|
|
8
|
-
* shows two systems at once and impossible to move here at all.
|
|
9
|
-
*/
|
|
5
|
+
/** The system this config belongs to. A parameter, not a global, so a page can show two systems at once. */
|
|
10
6
|
system: string;
|
|
11
7
|
entity?: string;
|
|
12
8
|
endPoint?: string;
|
|
13
9
|
/**
|
|
14
|
-
* Fetch as soon as the composable is built,
|
|
15
|
-
* the caller
|
|
10
|
+
* Fetch as soon as the composable is built, as every admin does.
|
|
11
|
+
* Turn off where the caller decides when, e.g. a dialog that may never open or a test.
|
|
16
12
|
*/
|
|
17
13
|
autoFetch?: boolean;
|
|
18
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissionConfigActions.js","names":["inFlight","usePermissionConfigActions","PERMISSION_CONFIG_ENTITY","PERMISSION_CONFIG_ENDPOINT","params","useAlerts","usePermissionConfigApi","store","usePermissionConfigStore","entry","computed","system","permissionConfig","loadingPermissionConfig","isPermissionConfigInitialized","runFetch","useFetchPermissionConfig","execute","error","fetchPermissionConfig","force","running","started","useLanguageSettings","autoFetch","objectGetValueByPath","group","key","currentLanguageCode"],"sources":["../../../../../src/domains/permission/config/composables/permissionConfigActions.ts"],"sourcesContent":["import { computed } from 'vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { useLanguageSettings } from '@/domains/system/composables/languageSettings'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport {\n PERMISSION_CONFIG_ENDPOINT,\n PERMISSION_CONFIG_ENTITY,\n usePermissionConfigApi,\n} from '@/domains/permission/config/api/permissionConfigApi'\nimport { usePermissionConfigStore } from '@/domains/permission/config/store/permissionConfigStore'\nimport type { PermissionTranslationGroup } from '@/domains/permission/config/types/PermissionConfig'\nimport { objectGetValueByPath } from '@/shared/utils/object'\n\nexport interface PermissionConfigActionsParams {\n client: AxiosClientFn\n
|
|
1
|
+
{"version":3,"file":"permissionConfigActions.js","names":["inFlight","usePermissionConfigActions","PERMISSION_CONFIG_ENTITY","PERMISSION_CONFIG_ENDPOINT","params","useAlerts","usePermissionConfigApi","store","usePermissionConfigStore","entry","computed","system","permissionConfig","loadingPermissionConfig","isPermissionConfigInitialized","runFetch","useFetchPermissionConfig","execute","error","fetchPermissionConfig","force","running","started","useLanguageSettings","autoFetch","objectGetValueByPath","group","key","currentLanguageCode"],"sources":["../../../../../src/domains/permission/config/composables/permissionConfigActions.ts"],"sourcesContent":["import { computed } from 'vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { useLanguageSettings } from '@/domains/system/composables/languageSettings'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport {\n PERMISSION_CONFIG_ENDPOINT,\n PERMISSION_CONFIG_ENTITY,\n usePermissionConfigApi,\n} from '@/domains/permission/config/api/permissionConfigApi'\nimport { usePermissionConfigStore } from '@/domains/permission/config/store/permissionConfigStore'\nimport type { PermissionTranslationGroup } from '@/domains/permission/config/types/PermissionConfig'\nimport { objectGetValueByPath } from '@/shared/utils/object'\n\nexport interface PermissionConfigActionsParams {\n client: AxiosClientFn\n /** The system this config belongs to. A parameter, not a global, so a page can show two systems at once. */\n system: string\n entity?: string\n endPoint?: string\n /**\n * Fetch as soon as the composable is built, as every admin does.\n * Turn off where the caller decides when, e.g. a dialog that may never open or a test.\n */\n autoFetch?: boolean\n}\n\n/**\n * One request per system, however many components ask.\n * Module scope, because de-duplication must span composable\n * instances. Two open editors would otherwise fire the same GET.\n */\nconst inFlight = new Map<string, Promise<void>>()\n\nexport const usePermissionConfigActions = (params: PermissionConfigActionsParams) => {\n const {\n client,\n system,\n entity = PERMISSION_CONFIG_ENTITY,\n endPoint = PERMISSION_CONFIG_ENDPOINT,\n autoFetch = true,\n } = params\n\n const { showErrorsDefault } = useAlerts()\n const { useFetchPermissionConfig } = usePermissionConfigApi({ client, system, entity, endPoint })\n const store = usePermissionConfigStore()\n\n const entry = computed(() => store.getEntry(system))\n const permissionConfig = computed(() => entry.value.config)\n const loadingPermissionConfig = computed(() => entry.value.loading)\n const isPermissionConfigInitialized = computed(() => entry.value.initialized)\n\n const runFetch = async () => {\n store.setLoading(system, true)\n try {\n const { execute } = useFetchPermissionConfig()\n store.setConfig(system, await execute())\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n // Always, including on failure. Otherwise a down backend leaves the editor's card spinning for the session.\n store.setLoading(system, false)\n inFlight.delete(system)\n }\n }\n\n const fetchPermissionConfig = async (force = false) => {\n if (!force && isPermissionConfigInitialized.value) return\n const running = inFlight.get(system)\n if (running) return running\n const started = runFetch()\n inFlight.set(system, started)\n return started\n }\n\n const { currentLanguageCode } = useLanguageSettings()\n\n /**\n * Falls back to the raw key, which the admins rely on.\n * The ACL vocabulary lives in the backend yaml, not in front-end i18n, so\n * an untranslated action shows as `weather_location_ui`, not a blank cell.\n */\n const translatePermission = (group: PermissionTranslationGroup, key: string): string => {\n const translated = objectGetValueByPath(\n permissionConfig.value.translation,\n group + '.' + key + '.' + currentLanguageCode.value\n )\n\n return translated ?? key\n }\n\n if (autoFetch) void fetchPermissionConfig()\n\n return {\n permissionConfig,\n loadingPermissionConfig,\n isPermissionConfigInitialized,\n fetchPermissionConfig,\n translatePermission,\n resetPermissionConfig: () => store.resetSystem(system),\n }\n}\n"],"mappings":";;;;;;;AA+BA,IAAMA,oBAAW,IAAI,IAA2B,GAEnCC,KAA8B,MAA0C;CACnF,IAAM,EACJ,WACA,WACA,YAASC,GACT,cAAWC,GACX,eAAY,OACVC,GAEE,EAAE,yBAAsBC,EAAU,GAClC,EAAE,gCAA6BC,EAAuB;EAAE;EAAQ;EAAQ;EAAQ;CAAS,CAAC,GAC1FC,IAAQC,EAAyB,GAEjCC,IAAQC,QAAeH,EAAM,SAASI,CAAM,CAAC,GAC7CC,IAAmBF,QAAeD,EAAM,MAAM,MAAM,GACpDI,IAA0BH,QAAeD,EAAM,MAAM,OAAO,GAC5DK,IAAgCJ,QAAeD,EAAM,MAAM,WAAW,GAEtEM,IAAW,YAAY;EAC3B,EAAM,WAAWJ,GAAQ,EAAI;EAC7B,IAAI;GACF,IAAM,EAAE,eAAYK,EAAyB;GAC7C,EAAM,UAAUL,GAAQ,MAAMM,EAAQ,CAAC;EACzC,SAASC,GAAO;GACd,EAAkBA,CAAK;EACzB,UAAU;GAGR,AADAX,EAAM,WAAWI,GAAQ,EAAK,GAC9BX,EAAS,OAAOW,CAAM;EACxB;CACF,GAEMQ,IAAwB,OAAO,IAAQ,OAAU;EACrD,IAAI,CAACC,KAASN,EAA8B,OAAO;EACnD,IAAMO,IAAUrB,EAAS,IAAIW,CAAM;EACnC,IAAIU,GAAS,OAAOA;EACpB,IAAMC,IAAUP,EAAS;EAEzB,OADAf,EAAS,IAAIW,GAAQW,CAAO,GACrBA;CACT,GAEM,EAAE,2BAAwBC,EAAoB;CAkBpD,OAFIC,KAAWL,EAA2B,GAEnC;EACL;EACA;EACA;EACA;EACA,sBAhB2B,GAAmC,MAC3CM,EACjBb,EAAiB,MAAM,aACvBc,IAAQ,MAAMC,IAAM,MAAMC,EAAoB,KAGzC,KAAcD;EAWrB,6BAA6BpB,EAAM,YAAYI,CAAM;CACvD;AACF"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { PermissionConfig } from '../types/PermissionConfig';
|
|
2
2
|
/**
|
|
3
|
-
* One entry per system.
|
|
4
|
-
*
|
|
5
|
-
* parallel: the first one to finish cleared the flag for all of them, and the first one to fail
|
|
6
|
-
* left it set forever because there was no `finally`.
|
|
3
|
+
* One entry per system. Shared `loading` and `initialized` flags break with parallel fetches.
|
|
4
|
+
* The first fetch to finish would clear the flag for all, and a failure without `finally` would leave it set forever.
|
|
7
5
|
*/
|
|
8
6
|
export interface PermissionConfigEntry {
|
|
9
7
|
config: PermissionConfig;
|