@anzusystems/common-admin 2.0.0-rc.11 → 2.0.0-rc.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (457) hide show
  1. package/dist/domains/anzuUser/components/AAnzuUserDatatable.js.map +1 -1
  2. package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  3. package/dist/domains/anzuUser/components/AAnzuUserFilter.js.map +1 -1
  4. package/dist/domains/anzuUser/components/AAnzuUserFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  5. package/dist/domains/anzuUser/components/AAnzuUserForm.js.map +1 -1
  6. package/dist/domains/anzuUser/components/AAnzuUserForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  7. package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.js.map +1 -1
  8. package/dist/domains/anzuUser/components/AUserBulkActionDialog.js.map +1 -1
  9. package/dist/domains/anzuUser/components/AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  10. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.js.map +1 -1
  11. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  12. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.js.map +1 -1
  13. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  14. package/dist/domains/anzuUser/components/AUserEnabledSwitch.js.map +1 -1
  15. package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  16. package/dist/domains/anzuUser/components/AUserManageButton.js.map +1 -1
  17. package/dist/domains/anzuUser/components/AUserMetadataForm.js.map +1 -1
  18. package/dist/domains/anzuUser/components/AUserMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  19. package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.js.map +1 -1
  20. package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  21. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.js.map +1 -1
  22. package/dist/domains/anzuUser/components/AUserSystemOverview.js.map +1 -1
  23. package/dist/domains/anzuUser/components/AUserSystemOverview.vue_vue_type_script_setup_true_lang.js.map +1 -1
  24. package/dist/domains/anzuUser/components/AUserSystemPanel.js.map +1 -1
  25. package/dist/domains/anzuUser/components/AUserSystemPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  26. package/dist/domains/anzuUser/components/AUserSystemStatusChip.js.map +1 -1
  27. package/dist/domains/anzuUser/components/AUserTabsShell.js.map +1 -1
  28. package/dist/domains/anzuUser/components/AUserTabsShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  29. package/dist/domains/auth/components/Acl.js.map +1 -1
  30. package/dist/domains/auth/components/Acl.vue_vue_type_script_setup_true_lang.js.map +1 -1
  31. package/dist/domains/cached/components/ACachedChip.js.map +1 -1
  32. package/dist/domains/cached/components/ACachedChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/domains/cached/components/ACachedUserChip.js.map +1 -1
  34. package/dist/domains/cached/components/ACachedUserChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  35. package/dist/domains/collab/components/ACollabCountdown.js.map +1 -1
  36. package/dist/domains/collab/components/ACollabCountdown.vue_vue_type_script_setup_true_lang.js.map +1 -1
  37. package/dist/domains/collab/components/ACollabLockedByUser.js.map +1 -1
  38. package/dist/domains/collab/components/ACollabManagement.js.map +1 -1
  39. package/dist/domains/collab/components/ACollabManagement.vue_vue_type_script_setup_true_lang.js.map +1 -1
  40. package/dist/domains/customDataForm/components/ACustomDataForm.js.map +1 -1
  41. package/dist/domains/customDataForm/components/ACustomDataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  42. package/dist/domains/customDataForm/components/ACustomDataFormElement.js.map +1 -1
  43. package/dist/domains/customDataForm/components/ACustomDataFormElement.vue_vue_type_script_setup_true_lang.js.map +1 -1
  44. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.js.map +1 -1
  45. package/dist/domains/dam/assetDetail/components/AColorBox.js.map +1 -1
  46. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.js.map +1 -1
  47. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/domains/dam/assetDetail/components/AssetDetailDialog.js.map +1 -1
  49. package/dist/domains/dam/assetDetail/components/AssetDetailDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  50. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.js.map +1 -1
  51. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  52. package/dist/domains/dam/assetDetail/components/AssetDetailDialogLoader.js.map +1 -1
  53. package/dist/domains/dam/assetDetail/components/AssetDetailDialogSidebar.js.map +1 -1
  54. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsTeleportTarget.js.map +1 -1
  55. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.js.map +1 -1
  56. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  57. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.js.map +1 -1
  58. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  59. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.js.map +1 -1
  60. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  61. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.js.map +1 -1
  62. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.vue_vue_type_script_setup_true_lang.js.map +1 -1
  63. package/dist/domains/dam/assetDetail/components/AssetFileFailReasonChip.js.map +1 -1
  64. package/dist/domains/dam/assetDetail/components/AssetFileFailReasonChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  65. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.js.map +1 -1
  66. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  67. package/dist/domains/dam/assetDetail/components/AssetFileRotate.js.map +1 -1
  68. package/dist/domains/dam/assetDetail/components/AssetFileRotate.vue_vue_type_script_setup_true_lang.js.map +1 -1
  69. package/dist/domains/dam/assetDetail/components/AssetImage.js.map +1 -1
  70. package/dist/domains/dam/assetDetail/components/AssetImage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  71. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.js.map +1 -1
  72. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js.map +1 -1
  73. package/dist/domains/dam/assetDetail/components/AssetInfobox.js.map +1 -1
  74. package/dist/domains/dam/assetDetail/components/AssetInfobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  75. package/dist/domains/dam/assetDetail/components/AssetMetadata.js.map +1 -1
  76. package/dist/domains/dam/assetDetail/components/AssetMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  77. package/dist/domains/dam/assetDetail/components/AssetMetadataImageAttributes.js.map +1 -1
  78. package/dist/domains/dam/assetDetail/components/AssetMetadataImageAttributes.vue_vue_type_script_setup_true_lang.js.map +1 -1
  79. package/dist/domains/dam/assetSelect/components/AAssetListInner.js.map +1 -1
  80. package/dist/domains/dam/assetSelect/components/AAssetListInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  81. package/dist/domains/dam/assetSelect/components/AAssetSelect.js.map +1 -1
  82. package/dist/domains/dam/assetSelect/components/AAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  83. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.js.map +1 -1
  84. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue_vue_type_script_setup_true_lang.js.map +1 -1
  85. package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.js.map +1 -1
  86. package/dist/domains/dam/assetSelect/components/AssetImagePreview.js.map +1 -1
  87. package/dist/domains/dam/assetSelect/components/AssetImagePreview.vue_vue_type_script_setup_true_lang.js.map +1 -1
  88. package/dist/domains/dam/assetSelect/components/AssetSelectFilter.js.map +1 -1
  89. package/dist/domains/dam/assetSelect/components/AssetSelectFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  90. package/dist/domains/dam/assetSelect/components/AssetSelectFilterForm.js.map +1 -1
  91. package/dist/domains/dam/assetSelect/components/AssetSelectFilterForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  92. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.js.map +1 -1
  93. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  94. package/dist/domains/dam/assetSelect/components/AssetSelectListTable.js.map +1 -1
  95. package/dist/domains/dam/assetSelect/components/AssetSelectListTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  96. package/dist/domains/dam/assetSelect/components/AssetSelectListTiles.js.map +1 -1
  97. package/dist/domains/dam/assetSelect/components/AssetSelectListTiles.vue_vue_type_script_setup_true_lang.js.map +1 -1
  98. package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.js.map +1 -1
  99. package/dist/domains/dam/assetSelect/components/AssetSelectTilesItem.js.map +1 -1
  100. package/dist/domains/dam/assetSelect/components/AssetSelectTilesItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  101. package/dist/domains/dam/assetSelect/components/FilterPodcastRemoteAutocomplete.js.map +1 -1
  102. package/dist/domains/dam/author/components/AuthorCreateButton.js.map +1 -1
  103. package/dist/domains/dam/author/components/AuthorCreateButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  104. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.js.map +1 -1
  105. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  106. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.js.map +1 -1
  107. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue_vue_type_script_setup_true_lang.js.map +1 -1
  108. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js.map +1 -1
  109. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  110. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.js.map +1 -1
  111. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  112. package/dist/domains/dam/components/DamAdminAssetLink.js.map +1 -1
  113. package/dist/domains/dam/cropper/components/ACropper.js.map +1 -1
  114. package/dist/domains/dam/cropper/components/ACropper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  115. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.js.map +1 -1
  116. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  117. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelectLazy.js.map +1 -1
  118. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelectLazy.vue_vue_type_script_setup_true_lang.js.map +1 -1
  119. package/dist/domains/dam/imageWidget/components/AImageMediaWidget.js.map +1 -1
  120. package/dist/domains/dam/imageWidget/components/AImageMediaWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
  121. package/dist/domains/dam/imageWidget/components/AImagePublicInput.js.map +1 -1
  122. package/dist/domains/dam/imageWidget/components/AImagePublicInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  123. package/dist/domains/dam/imageWidget/components/AImageWidget.js.map +1 -1
  124. package/dist/domains/dam/imageWidget/components/AImageWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
  125. package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.js.map +1 -1
  126. package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.vue_vue_type_script_setup_true_lang.js.map +1 -1
  127. package/dist/domains/dam/imageWidget/components/AImageWidgetMultipleSimple.js.map +1 -1
  128. package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.js.map +1 -1
  129. package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.vue_vue_type_script_setup_true_lang.js.map +1 -1
  130. package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.js.map +1 -1
  131. package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.vue_vue_type_script_setup_true_lang.js.map +1 -1
  132. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.js.map +1 -1
  133. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  134. package/dist/domains/dam/imageWidget/components/ImageMassOperations.js.map +1 -1
  135. package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
  136. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.js.map +1 -1
  137. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  138. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.js.map +1 -1
  139. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  140. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.js.map +1 -1
  141. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  142. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.js.map +1 -1
  143. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  144. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.js.map +1 -1
  145. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  146. package/dist/domains/dam/imageWidget/components/MediaWidgetSimpleDialog.js.map +1 -1
  147. package/dist/domains/dam/imageWidget/components/MediaWidgetSimpleDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  148. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.js.map +1 -1
  149. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.js.map +1 -1
  150. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  151. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js.map +1 -1
  152. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  153. package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.js.map +1 -1
  154. package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
  155. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.js.map +1 -1
  156. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  157. package/dist/domains/dam/uploadQueue/components/UploadQueueButtonStop.js.map +1 -1
  158. package/dist/domains/dam/uploadQueue/components/UploadQueueButtonStop.vue_vue_type_script_setup_true_lang.js.map +1 -1
  159. package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.js.map +1 -1
  160. package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  161. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.js.map +1 -1
  162. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  163. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.js.map +1 -1
  164. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.js.map +1 -1
  165. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  166. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.js.map +1 -1
  167. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  168. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.js.map +1 -1
  169. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  170. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.js.map +1 -1
  171. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  172. package/dist/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.js.map +1 -1
  173. package/dist/domains/dam/user/components/DamAssetLicenceGroupRemoteAutocomplete.js.map +1 -1
  174. package/dist/domains/dam/user/components/DamAssetLicenceRemoteAutocomplete.js.map +1 -1
  175. package/dist/domains/dam/user/components/DamDistributionServiceSelect.js.map +1 -1
  176. package/dist/domains/dam/user/components/DamExtSystemRemoteAutocomplete.js.map +1 -1
  177. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.js.map +1 -1
  178. package/dist/domains/dam/user/components/DamUserFilterRemoteAutocomplete.js.map +1 -1
  179. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.js.map +1 -1
  180. package/dist/domains/filters/bookmarks/components/AFilterBookmarkButton.js.map +1 -1
  181. package/dist/domains/filters/bookmarks/components/AFilterBookmarkButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  182. package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.js.map +1 -1
  183. package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  184. package/dist/domains/filters/bookmarks/components/FilterBookmarks.js.map +1 -1
  185. package/dist/domains/filters/bookmarks/components/FilterBookmarks.vue_vue_type_script_setup_true_lang.js.map +1 -1
  186. package/dist/domains/filters/components/AFilterAdvancedButton.js.map +1 -1
  187. package/dist/domains/filters/components/AFilterBooleanSelect.js.map +1 -1
  188. package/dist/domains/filters/components/AFilterDatetimePicker.js.map +1 -1
  189. package/dist/domains/filters/components/AFilterEmpty.js.map +1 -1
  190. package/dist/domains/filters/components/AFilterInteger.js.map +1 -1
  191. package/dist/domains/filters/components/AFilterResetButton.js.map +1 -1
  192. package/dist/domains/filters/components/AFilterString.js.map +1 -1
  193. package/dist/domains/filters/components/AFilterString.vue.d.ts +3 -0
  194. package/dist/domains/filters/components/AFilterString.vue_vue_type_script_setup_true_lang.js +8 -2
  195. package/dist/domains/filters/components/AFilterString.vue_vue_type_script_setup_true_lang.js.map +1 -1
  196. package/dist/domains/filters/components/AFilterSubmitButton.js.map +1 -1
  197. package/dist/domains/filters/components/AFilterTimeInterval.js.map +1 -1
  198. package/dist/domains/filters/components/AFilterTimeInterval.vue_vue_type_script_setup_true_lang.js.map +1 -1
  199. package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.js.map +1 -1
  200. package/dist/domains/filters/components/AFilterWrapper.js.map +1 -1
  201. package/dist/domains/filters/components/AFilterWrapper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  202. package/dist/domains/filters/components/AFilterWrapperSidebar.js.map +1 -1
  203. package/dist/domains/filters/components/FilterDetailItem.js.map +1 -1
  204. package/dist/domains/filters/components/FiltersSelected.js.map +1 -1
  205. package/dist/domains/filters/datatable/components/ADatatableConfigButton.js.map +1 -1
  206. package/dist/domains/filters/datatable/components/ADatatableOrdering.js.map +1 -1
  207. package/dist/domains/filters/datatable/components/ADatatablePagination.js.map +1 -1
  208. package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  209. package/dist/domains/form/components/AFormDatetimePicker.js.map +1 -1
  210. package/dist/domains/form/components/AFormDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  211. package/dist/domains/form/components/AFormFlagDatetimePicker.js.map +1 -1
  212. package/dist/domains/form/components/AFormFlagDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  213. package/dist/domains/form/components/AFormRemoteCheckbox.js.map +1 -1
  214. package/dist/domains/form/components/AFormRemoteCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  215. package/dist/domains/form/components/AFormRemoteSwitch.js.map +1 -1
  216. package/dist/domains/form/components/AFormRemoteSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  217. package/dist/domains/form/components/AFormSwitch.js.map +1 -1
  218. package/dist/domains/form/components/AFormSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  219. package/dist/domains/form/components/AFormTextField.js.map +1 -1
  220. package/dist/domains/form/components/AFormTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  221. package/dist/domains/form/components/AFormTextarea.js.map +1 -1
  222. package/dist/domains/form/components/AFormTextarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  223. package/dist/domains/form/components/AFormValueObjectOptionsSelect.js.map +1 -1
  224. package/dist/domains/form/components/AFormValueObjectOptionsSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  225. package/dist/domains/form/components/ASystemEntityScope.js.map +1 -1
  226. package/dist/domains/job/components/AJobBaseCreateForm.js.map +1 -1
  227. package/dist/domains/job/components/AJobBaseCreateForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  228. package/dist/domains/job/components/AJobDetailCommon.js.map +1 -1
  229. package/dist/domains/job/components/AJobPriorityChip.js.map +1 -1
  230. package/dist/domains/job/components/AJobStatusChip.js.map +1 -1
  231. package/dist/domains/listEditor/components/AListEditor.js.map +1 -1
  232. package/dist/domains/listEditor/components/AListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  233. package/dist/domains/listEditor/components/ANestedSortableListEditor.js.map +1 -1
  234. package/dist/domains/listEditor/components/ANestedSortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  235. package/dist/domains/listEditor/components/ASortableListEditor.js.map +1 -1
  236. package/dist/domains/listEditor/components/ASortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  237. package/dist/domains/listEditor/components/internal/LeChangeParentDialog.js.map +1 -1
  238. package/dist/domains/listEditor/components/internal/LeChangeParentDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  239. package/dist/domains/listEditor/components/internal/LeDeleteDialog.js.map +1 -1
  240. package/dist/domains/listEditor/components/internal/LeDeleteDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  241. package/dist/domains/listEditor/components/internal/LeDragHandle.js.map +1 -1
  242. package/dist/domains/listEditor/components/internal/LeEmptyState.js.map +1 -1
  243. package/dist/domains/listEditor/components/internal/LeEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  244. package/dist/domains/listEditor/components/internal/LeMoveToPositionDialog.js.map +1 -1
  245. package/dist/domains/listEditor/components/internal/LeMoveToPositionDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  246. package/dist/domains/listEditor/components/internal/LeNestedRow.js.map +1 -1
  247. package/dist/domains/listEditor/components/internal/LeNestedRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  248. package/dist/domains/listEditor/components/internal/LeStatus.js.map +1 -1
  249. package/dist/domains/listEditor/components/internal/LeStatus.vue_vue_type_script_setup_true_lang.js.map +1 -1
  250. package/dist/domains/listEditor/components/internal/LeUnsavedLabel.js.map +1 -1
  251. package/dist/domains/listEditor/components/internal/LeUnsavedLabel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  252. package/dist/domains/log/components/ALogDatatable.js.map +1 -1
  253. package/dist/domains/log/components/ALogDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  254. package/dist/domains/log/components/ALogDetail.js.map +1 -1
  255. package/dist/domains/log/components/ALogDetailView.js.map +1 -1
  256. package/dist/domains/log/components/ALogDetailView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  257. package/dist/domains/log/components/ALogFilter.js.map +1 -1
  258. package/dist/domains/log/components/ALogLevelChip.js.map +1 -1
  259. package/dist/domains/log/components/ALogLevelChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  260. package/dist/domains/log/components/ALogListView.js.map +1 -1
  261. package/dist/domains/permission/components/APermissionEditor.js.map +1 -1
  262. package/dist/domains/permission/components/APermissionEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  263. package/dist/domains/permission/components/APermissionGrantEditor.js.map +1 -1
  264. package/dist/domains/permission/components/APermissionValueChip.js.map +1 -1
  265. package/dist/domains/permission/components/APermissionValueChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  266. package/dist/domains/permission/group/components/APermissionGroupDatatable.js.map +1 -1
  267. package/dist/domains/permission/group/components/APermissionGroupDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  268. package/dist/domains/permission/group/components/APermissionGroupDetail.js.map +1 -1
  269. package/dist/domains/permission/group/components/APermissionGroupFilter.js.map +1 -1
  270. package/dist/domains/permission/group/components/APermissionGroupManage.js.map +1 -1
  271. package/dist/domains/permission/group/components/APermissionGroupManage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  272. package/dist/domains/permission/group/components/APermissionGroupRemoteAutocomplete.js.map +1 -1
  273. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.js.map +1 -1
  274. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  275. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.js.map +1 -1
  276. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.js.map +1 -1
  277. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  278. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.js.map +1 -1
  279. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  280. package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.js.map +1 -1
  281. package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  282. package/dist/domains/subjectSelect/components/ASubjectSelect.js.map +1 -1
  283. package/dist/domains/subjectSelect/components/ASubjectSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  284. package/dist/domains/system/appShell/components/AActionbar.js.map +1 -1
  285. package/dist/domains/system/appShell/components/AActionbar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  286. package/dist/domains/system/appShell/components/AActionbarTarget.js.map +1 -1
  287. package/dist/domains/system/appShell/components/ALayoutLoader.js.map +1 -1
  288. package/dist/domains/system/appShell/components/ALayoutSwitch.js.map +1 -1
  289. package/dist/domains/system/appShell/components/ALayoutSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  290. package/dist/domains/system/components/AAdminSwitcher.js.map +1 -1
  291. package/dist/domains/system/components/AAdminSwitcher.vue_vue_type_script_setup_true_lang.js.map +1 -1
  292. package/dist/domains/system/components/AAlerts.js.map +1 -1
  293. package/dist/domains/system/components/ALanguageSelect.js.map +1 -1
  294. package/dist/domains/system/components/AThemeSelect.js.map +1 -1
  295. package/dist/domains/system/components/AThemeSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  296. package/dist/domains/system/flags/components/FlagCountry.js.map +1 -1
  297. package/dist/domains/system/flags/components/FlagEn.js.map +1 -1
  298. package/dist/domains/system/flags/components/FlagSk.js.map +1 -1
  299. package/dist/domains/system/systemBar/components/ASystemBar.js.map +1 -1
  300. package/dist/domains/system/systemBar/components/ASystemBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  301. package/dist/domains/system/systemBar/components/ASystemBarNewVersion.js.map +1 -1
  302. package/dist/domains/system/systemBar/components/ASystemBarNewVersion.vue_vue_type_script_setup_true_lang.js.map +1 -1
  303. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.js.map +1 -1
  304. package/dist/domains/ui/buttons/action/components/AActionCreateButton.js.map +1 -1
  305. package/dist/domains/ui/buttons/action/components/AActionCreateButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  306. package/dist/domains/ui/buttons/action/components/AActionDeleteButton.js.map +1 -1
  307. package/dist/domains/ui/buttons/action/components/AActionDeleteButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  308. package/dist/domains/ui/buttons/action/components/AActionEditButton.js.map +1 -1
  309. package/dist/domains/ui/buttons/action/components/AActionEditButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  310. package/dist/domains/ui/buttons/action/components/AActionSaveAndCloseButton.js.map +1 -1
  311. package/dist/domains/ui/buttons/action/components/AActionSaveAndCloseButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  312. package/dist/domains/ui/buttons/action/components/AActionSaveButton.js.map +1 -1
  313. package/dist/domains/ui/buttons/action/components/AActionSaveButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  314. package/dist/domains/ui/buttons/components/ABtnSplit.js.map +1 -1
  315. package/dist/domains/ui/buttons/components/ABtnSplit.vue_vue_type_script_setup_true_lang.js.map +1 -1
  316. package/dist/domains/ui/buttons/table/components/ATableCopyIdButton.js.map +1 -1
  317. package/dist/domains/ui/buttons/table/components/ATableCopyIdButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  318. package/dist/domains/ui/buttons/table/components/ATableDetailButton.js.map +1 -1
  319. package/dist/domains/ui/buttons/table/components/ATableDetailButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  320. package/dist/domains/ui/buttons/table/components/ATableEditButton.js.map +1 -1
  321. package/dist/domains/ui/buttons/table/components/ATableEditButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  322. package/dist/domains/ui/components/AAnzuUserAvatar.js.map +1 -1
  323. package/dist/domains/ui/components/AAnzuUserAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  324. package/dist/domains/ui/components/AAvatarColorPicker.js.map +1 -1
  325. package/dist/domains/ui/components/AAvatarColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  326. package/dist/domains/ui/components/ABooleanSelect.js.map +1 -1
  327. package/dist/domains/ui/components/ABooleanValue.js.map +1 -1
  328. package/dist/domains/ui/components/ACard.js.map +1 -1
  329. package/dist/domains/ui/components/ACardLoader.js.map +1 -1
  330. package/dist/domains/ui/components/AChipNoLink.js.map +1 -1
  331. package/dist/domains/ui/components/ACopyText.js.map +1 -1
  332. package/dist/domains/ui/components/ACopyText.vue_vue_type_script_setup_true_lang.js.map +1 -1
  333. package/dist/domains/ui/components/ACreateDialog.js.map +1 -1
  334. package/dist/domains/ui/components/ACreateDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  335. package/dist/domains/ui/components/ACurrentUserDropdown.js.map +1 -1
  336. package/dist/domains/ui/components/ACurrentUserDropdown.vue_vue_type_script_setup_true_lang.js.map +1 -1
  337. package/dist/domains/ui/components/ADialogToolbar.js.map +1 -1
  338. package/dist/domains/ui/components/AIconGroup.js.map +1 -1
  339. package/dist/domains/ui/components/AProgress.js.map +1 -1
  340. package/dist/domains/ui/components/ARow.js.map +1 -1
  341. package/dist/domains/ui/components/ARow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  342. package/dist/domains/ui/components/ATimeTrackingFields.js.map +1 -1
  343. package/dist/domains/ui/components/ATimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
  344. package/dist/domains/ui/components/AUserAndTimeTrackingFields.js.map +1 -1
  345. package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
  346. package/dist/domains/ui/datetime/components/ADatetime.js.map +1 -1
  347. package/dist/domains/ui/datetime/components/ADatetimePicker.js.map +1 -1
  348. package/dist/domains/ui/datetime/components/ADatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  349. package/dist/domains/ui/datetime/components/TimePicker.js.map +1 -1
  350. package/dist/domains/ui/file/components/AFileDropzone.js.map +1 -1
  351. package/dist/domains/ui/file/components/AFileInput.js.map +1 -1
  352. package/dist/domains/ui/file/components/AFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  353. package/dist/domains/ui/file/components/AFileInputDialog.js.map +1 -1
  354. package/dist/domains/ui/file/components/AFileInputDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  355. package/dist/domains/ui/view/components/AGenericView.js.map +1 -1
  356. package/dist/domains/ui/view/components/AGenericView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  357. package/dist/domains/ui/view/components/ALoginView.js.map +1 -1
  358. package/dist/domains/ui/view/components/ALoginView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  359. package/dist/domains/ui/view/components/ALogoutView.js.map +1 -1
  360. package/dist/domains/ui/view/components/ANotFoundView.js.map +1 -1
  361. package/dist/domains/ui/view/components/AUnauthorizedView.js.map +1 -1
  362. package/dist/domains/ui/view/components/AUnauthorizedView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  363. package/dist/domains/unsavedGuard/components/AUnsavedConfirmDialog.js.map +1 -1
  364. package/dist/locales/cs/common/alert.js.map +1 -1
  365. package/dist/locales/cs/common/anzuUser.js.map +1 -1
  366. package/dist/locales/cs/common/assetSelect.js.map +1 -1
  367. package/dist/locales/cs/common/button.js.map +1 -1
  368. package/dist/locales/cs/common/collab.js.map +1 -1
  369. package/dist/locales/cs/common/confirmDialog.js.map +1 -1
  370. package/dist/locales/cs/common/customForm.js.map +1 -1
  371. package/dist/locales/cs/common/customFormElement.js.map +1 -1
  372. package/dist/locales/cs/common/damImage.js.map +1 -1
  373. package/dist/locales/cs/common/dayOfWeek.js.map +1 -1
  374. package/dist/locales/cs/common/filter.js.map +1 -1
  375. package/dist/locales/cs/common/job.js.map +1 -1
  376. package/dist/locales/cs/common/linkDto.js.map +1 -1
  377. package/dist/locales/cs/common/listItemDto.js.map +1 -1
  378. package/dist/locales/cs/common/log.js.map +1 -1
  379. package/dist/locales/cs/common/model.js.map +1 -1
  380. package/dist/locales/cs/common/permission.js.map +1 -1
  381. package/dist/locales/cs/common/permissionEditor.js.map +1 -1
  382. package/dist/locales/cs/common/permissionGroup.js.map +1 -1
  383. package/dist/locales/cs/common/routeSettings.js.map +1 -1
  384. package/dist/locales/cs/common/sortable.js.map +1 -1
  385. package/dist/locales/cs/common/subjectSelect.js.map +1 -1
  386. package/dist/locales/cs/common/system.js.map +1 -1
  387. package/dist/locales/cs/common/time.js.map +1 -1
  388. package/dist/locales/cs/common/userSystem.js.map +1 -1
  389. package/dist/locales/cs/error/apiDependencyExists.js.map +1 -1
  390. package/dist/locales/cs/error/apiForbiddenOperation.js.map +1 -1
  391. package/dist/locales/cs/error/apiTimedOut.js.map +1 -1
  392. package/dist/locales/cs/error/apiValidation.js.map +1 -1
  393. package/dist/locales/cs/error/jsValidation.js.map +1 -1
  394. package/dist/locales/cs/vuetify.js.map +1 -1
  395. package/dist/locales/en/common/alert.js.map +1 -1
  396. package/dist/locales/en/common/anzuUser.js.map +1 -1
  397. package/dist/locales/en/common/assetSelect.js.map +1 -1
  398. package/dist/locales/en/common/button.js.map +1 -1
  399. package/dist/locales/en/common/collab.js.map +1 -1
  400. package/dist/locales/en/common/confirmDialog.js.map +1 -1
  401. package/dist/locales/en/common/customForm.js.map +1 -1
  402. package/dist/locales/en/common/customFormElement.js.map +1 -1
  403. package/dist/locales/en/common/damImage.js.map +1 -1
  404. package/dist/locales/en/common/dayOfWeek.js.map +1 -1
  405. package/dist/locales/en/common/filter.js.map +1 -1
  406. package/dist/locales/en/common/job.js.map +1 -1
  407. package/dist/locales/en/common/linkDto.js.map +1 -1
  408. package/dist/locales/en/common/listItemDto.js.map +1 -1
  409. package/dist/locales/en/common/log.js.map +1 -1
  410. package/dist/locales/en/common/model.js.map +1 -1
  411. package/dist/locales/en/common/permission.js.map +1 -1
  412. package/dist/locales/en/common/permissionEditor.js.map +1 -1
  413. package/dist/locales/en/common/permissionGroup.js.map +1 -1
  414. package/dist/locales/en/common/routeSettings.js.map +1 -1
  415. package/dist/locales/en/common/sortable.js.map +1 -1
  416. package/dist/locales/en/common/subjectSelect.js.map +1 -1
  417. package/dist/locales/en/common/system.js.map +1 -1
  418. package/dist/locales/en/common/time.js.map +1 -1
  419. package/dist/locales/en/common/userSystem.js.map +1 -1
  420. package/dist/locales/en/error/apiDependencyExists.js.map +1 -1
  421. package/dist/locales/en/error/apiForbiddenOperation.js.map +1 -1
  422. package/dist/locales/en/error/apiTimedOut.js.map +1 -1
  423. package/dist/locales/en/error/apiValidation.js.map +1 -1
  424. package/dist/locales/en/error/jsValidation.js.map +1 -1
  425. package/dist/locales/en/vuetify.js.map +1 -1
  426. package/dist/locales/sk/common/alert.js.map +1 -1
  427. package/dist/locales/sk/common/anzuUser.js.map +1 -1
  428. package/dist/locales/sk/common/assetSelect.js.map +1 -1
  429. package/dist/locales/sk/common/button.js.map +1 -1
  430. package/dist/locales/sk/common/collab.js.map +1 -1
  431. package/dist/locales/sk/common/confirmDialog.js.map +1 -1
  432. package/dist/locales/sk/common/customForm.js.map +1 -1
  433. package/dist/locales/sk/common/customFormElement.js.map +1 -1
  434. package/dist/locales/sk/common/damImage.js.map +1 -1
  435. package/dist/locales/sk/common/dayOfWeek.js.map +1 -1
  436. package/dist/locales/sk/common/filter.js.map +1 -1
  437. package/dist/locales/sk/common/job.js.map +1 -1
  438. package/dist/locales/sk/common/linkDto.js.map +1 -1
  439. package/dist/locales/sk/common/listItemDto.js.map +1 -1
  440. package/dist/locales/sk/common/log.js.map +1 -1
  441. package/dist/locales/sk/common/model.js.map +1 -1
  442. package/dist/locales/sk/common/permission.js.map +1 -1
  443. package/dist/locales/sk/common/permissionEditor.js.map +1 -1
  444. package/dist/locales/sk/common/permissionGroup.js.map +1 -1
  445. package/dist/locales/sk/common/routeSettings.js.map +1 -1
  446. package/dist/locales/sk/common/sortable.js.map +1 -1
  447. package/dist/locales/sk/common/subjectSelect.js.map +1 -1
  448. package/dist/locales/sk/common/system.js.map +1 -1
  449. package/dist/locales/sk/common/time.js.map +1 -1
  450. package/dist/locales/sk/common/userSystem.js.map +1 -1
  451. package/dist/locales/sk/error/apiDependencyExists.js.map +1 -1
  452. package/dist/locales/sk/error/apiForbiddenOperation.js.map +1 -1
  453. package/dist/locales/sk/error/apiTimedOut.js.map +1 -1
  454. package/dist/locales/sk/error/apiValidation.js.map +1 -1
  455. package/dist/locales/sk/error/jsValidation.js.map +1 -1
  456. package/dist/locales/sk/vuetify.js.map +1 -1
  457. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"AAnzuUserDatatable.js","names":["_sfc_main","AAnzuUserDatatable_vue_vue_type_script_setup_true_lang_default","AAnzuUserDatatable_default"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserDatatable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, onMounted, provide, useSlots, watch } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport type { AxiosInstance } from 'axios'\nimport { useDebounceFn } from '@vueuse/core'\nimport ABooleanValue from '@/domains/ui/components/ABooleanValue.vue'\nimport ADatatableConfigButton from '@/domains/filters/datatable/components/ADatatableConfigButton.vue'\nimport ADatetime from '@/domains/ui/datetime/components/ADatetime.vue'\nimport ATableCopyIdButton from '@/domains/ui/buttons/table/components/ATableCopyIdButton.vue'\nimport { SORT_BY_ID } from '@/domains/filters/datatable/utils/datatableColumns'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport ADatatableOrdering from '@/domains/filters/datatable/components/ADatatableOrdering.vue'\nimport ADatatablePagination from '@/domains/filters/datatable/components/ADatatablePagination.vue'\nimport { createDatatableColumnsConfig } from '@/domains/filters/datatable/composables/createDatatableColumnsConfig'\nimport {\n useFilterHelpers,\n type FilterStoreIdentifier,\n type MakeFilterOption,\n} from '@/domains/filters/composables/filterFactory'\nimport { DatatablePaginationKey, FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport { usePagination } from '@/domains/api/composables/pagination'\nimport AAnzuUserFilter from '@/domains/anzuUser/components/AAnzuUserFilter.vue'\nimport { useAnzuUserActions } from '@/domains/anzuUser/composables/anzuUserActions'\nimport { ANZU_USER_ENTITY } from '@/domains/anzuUser/api/anzuUserApi'\nimport { anzuUserFilterStorageKey, useAnzuUserListFilter } from '@/domains/anzuUser/filter/anzuUserFilter'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\nimport { useCachedPermissionGroups } from '@/domains/permission/group/composables/cachedPermissionGroups'\nimport { PERMISSION_GROUP_ENDPOINT } from '@/domains/permission/group/api/permissionGroupApi'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\n\ntype DatatableItem = AnzuUser\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n detailRoute: (user: AnzuUser) => RouteLocationRaw\n editRoute: (user: AnzuUser) => RouteLocationRaw\n /** Already-evaluated ACL of the owning system. */\n canUpdate?: boolean\n /** The permission-group endpoint, which is not the user one. */\n permissionGroupEndPoint?: string\n /**\n * Extra columns the app draws through `#systemColumns`, appended after the shared ones.\n * A bare key takes its header from `common.anzuUser.model.*`, which has\n * no system keys. So a system column passes its title already translated.\n */\n systemColumns?: Array<string | { key: string; title: string }>\n /**\n * Optional impersonation. Left unset, nothing is drawn.\n * A callback rather than a path, because the mechanisms differ: cms posts to `/adm/users/{id}/impersonate` and\n * gets a JWT, blog opens the public site with `window.open`. Only the cms one reaches this shared component.\n */\n impersonate?: ((user: AnzuUser) => void) | undefined\n canImpersonate?: boolean\n /**\n * Filter fields this system adds to the shared three.\n * Not part of the shared list because the same filter is a different query per system:\n * cms uses `memberOf`, dam uses `custom`, and `allowedSites` exists only in cms.\n * A plain field is drawn by the generic renderer. A field that\n * needs a remote autocomplete comes in through `#filter.<name>`.\n */\n filterFields?: readonly MakeFilterOption[]\n /**\n * Saved filters are stored per user, so both props are needed for the button to appear. Only cms and dam use them.\n */\n filterClient?: (() => AxiosInstance) | undefined\n filterUserId?: IntegerIdNullable | undefined\n /** Where the filter files its saved bookmarks. */\n filterStore?: FilterStoreIdentifier | undefined\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n permissionGroupEndPoint: PERMISSION_GROUP_ENDPOINT,\n canUpdate: false,\n systemColumns: () => [],\n impersonate: undefined,\n canImpersonate: false,\n filterFields: () => [],\n filterClient: undefined,\n filterUserId: undefined,\n filterStore: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'rowClick', user: AnzuUser): void\n}>()\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { t } = useI18n()\nconst { filterConfig, filterData } = useAnzuUserListFilter(props.system, props.filterFields)\nprovide(FilterConfigKey, filterConfig)\nprovide(FilterDataKey, filterData)\n\nconst { fetchAnzuUserList, cancelAnzuUserList, anzuUserList, loadingAnzuUserList, datatableHiddenColumns } =\n useAnzuUserActions({\n client: props.client,\n system: props.system,\n entity: props.entity,\n endPoint: props.endPoint,\n })\n\n// No `entity` here on purpose: this one reads the permission config, which is its own resource.\n// `props.entity` names the user.\nconst { translatePermission } = usePermissionConfigActions({\n client: props.client,\n system: props.system,\n})\n\n/**\n * Group titles for the column, resolved against this system's own cache.\n * Drawn here rather than left to a slot, so the column is not left empty in every app.\n * The cache is keyed per system because the same id is a different group in each backend.\n * An app can still override the chip through the slot.\n */\nconst { addToCachedPermissionGroups, fetchCachedPermissionGroups, getCachedPermissionGroup } =\n useCachedPermissionGroups({\n client: props.client,\n system: props.system,\n endPoint: props.permissionGroupEndPoint,\n })\n\nconst { resetFilter, submitFilter, loadStoredFilters } = useFilterHelpers(filterData, filterConfig, {\n storeFiltersLocalStorage: anzuUserFilterStorageKey(props.system),\n})\n\nconst { pagination } = usePagination(SORT_BY_ID)\nprovide(DatatablePaginationKey, pagination)\n\nconst { columnsVisible, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n [\n { key: 'id' },\n { key: 'email' },\n { key: 'enabled' },\n { key: 'roles' },\n { key: 'permissionGroups' },\n { key: 'permissions' },\n ...props.systemColumns.map((column) => (typeof column === 'string' ? { key: column } : column)),\n { key: 'createdAt' },\n { key: 'modifiedAt' },\n ],\n datatableHiddenColumns,\n 'common',\n ANZU_USER_ENTITY,\n { storeColumnsLocalStorage: `table_common_anzuUser_${props.system}` }\n)\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst getList = useDebounceFn(async () => {\n await fetchAnzuUserList(pagination, filterData, filterConfig)\n})\n\nwatch(anzuUserList, (users) => {\n users.forEach((user) => addToCachedPermissionGroups(user.permissionGroups))\n void fetchCachedPermissionGroups()\n})\n\nconst systemColumnKeys = computed(() =>\n props.systemColumns.map((column) => (typeof column === 'string' ? column : column.key))\n)\n\n// `#filter.allowedSites` here becomes `#item.allowedSites` inside the\n// filter. That is the name `AFilterWrapper` renders a field's widget under.\n// The prefix keeps field slots apart from this table's own `item.*` columns.\nconst slots = useSlots()\nconst FILTER_SLOT_PREFIX = 'filter.'\nconst filterSlotNames = computed(() =>\n Object.keys(slots)\n .filter((name) => name.startsWith(FILTER_SLOT_PREFIX))\n .map((name) => name.slice(FILTER_SLOT_PREFIX.length))\n)\n\nconst submitFilterAction = () => submitFilter(pagination, getList)\nconst resetFilterAction = () => resetFilter(pagination, getList)\n\nconst onRowClick = (_event: unknown, { item }: { item: DatatableItem }) => {\n if (item.id) emit('rowClick', item)\n}\n\nonMounted(() => {\n loadStoredFilters(pagination, getList)\n})\n\nonBeforeUnmount(() => {\n getList.cancel()\n cancelAnzuUserList()\n})\n\ndefineExpose({\n refresh: getList,\n resetFilter: resetFilterAction,\n submitFilter: submitFilterAction,\n})\n</script>\n\n<template>\n <div>\n <AAnzuUserFilter\n v-model:datatable-hidden-columns=\"columnsHidden\"\n :client=\"filterClient\"\n :user-id=\"filterUserId\"\n :store=\"filterStore\"\n @submit=\"submitFilterAction\"\n @reset=\"resetFilterAction\"\n >\n <template\n v-for=\"name in filterSlotNames\"\n :key=\"name\"\n #[`item.${name}`]=\"slotProps\"\n >\n <slot\n :name=\"`${FILTER_SLOT_PREFIX}${name}`\"\n v-bind=\"slotProps ?? {}\"\n />\n </template>\n </AAnzuUserFilter>\n <div>\n <div class=\"d-flex align-center\">\n <VSpacer />\n <ADatatableOrdering\n variant=\"id\"\n @sort-by-change=\"submitFilterAction\"\n />\n <ADatatableConfigButton\n v-model:columns-hidden=\"columnsHidden\"\n :columns-all=\"columnsAll\"\n />\n </div>\n <VDataTableServer\n class=\"a-datatable\"\n :headers=\"columnsVisible\"\n :items=\"anzuUserList\"\n :items-length=\"anzuUserList.length\"\n :loading=\"loadingAnzuUserList\"\n item-value=\"id\"\n @click:row=\"onRowClick\"\n >\n <template #item.enabled=\"{ item }: { item: DatatableItem }\">\n <ABooleanValue\n chip\n :value=\"item.enabled\"\n />\n </template>\n <template #item.roles=\"{ item }: { item: DatatableItem }\">\n <VChip\n v-for=\"role in item.roles\"\n :key=\"role\"\n class=\"mr-1 mb-1\"\n >\n {{ translatePermission('roles', role) }}\n </VChip>\n </template>\n <template #item.permissionGroups=\"{ item }: { item: DatatableItem }\">\n <slot\n name=\"permissionGroups\"\n :ids=\"item.permissionGroups\"\n >\n <VChip\n v-for=\"permissionGroupId in item.permissionGroups\"\n :key=\"permissionGroupId\"\n class=\"mr-1 mb-1\"\n size=\"small\"\n label\n >\n {{ getCachedPermissionGroup(permissionGroupId)?.title || permissionGroupId }}\n </VChip>\n </slot>\n </template>\n <template #item.permissions=\"{ item }: { item: DatatableItem }\">\n <VChip>{{ Object.keys(item.permissions).length }}</VChip>\n </template>\n <template\n v-for=\"column in systemColumnKeys\"\n :key=\"column\"\n #[`item.${column}`]=\"{ item }: { item: DatatableItem }\"\n >\n <slot\n name=\"systemColumns\"\n :column=\"column\"\n :user=\"item\"\n />\n </template>\n <template #item.createdAt=\"{ item }: { item: DatatableItem }\">\n <ADatetime :date-time=\"item.createdAt\" />\n <template v-if=\"$slots.createdBy\">\n <br />\n <slot\n :id=\"item.createdBy\"\n name=\"createdBy\"\n />\n </template>\n </template>\n <template #item.modifiedAt=\"{ item }: { item: DatatableItem }\">\n <ADatetime :date-time=\"item.modifiedAt\" />\n <template v-if=\"$slots.modifiedBy\">\n <br />\n <slot\n :id=\"item.modifiedBy\"\n name=\"modifiedBy\"\n />\n </template>\n </template>\n <template #item.actions=\"{ item }: { item: DatatableItem }\">\n <div\n v-if=\"item.id\"\n class=\"d-flex justify-end\"\n >\n <ATableCopyIdButton :id=\"item.id\" />\n <VBtn\n :to=\"detailRoute(item)\"\n class=\"ml-1\"\n icon=\"mdi-information-outline\"\n :aria-label=\"t('common.button.detail')\"\n size=\"x-small\"\n variant=\"text\"\n />\n <VBtn\n v-if=\"canUpdate\"\n :to=\"editRoute(item)\"\n class=\"ml-1\"\n icon=\"mdi-pencil\"\n :aria-label=\"t('common.button.edit')\"\n size=\"x-small\"\n variant=\"text\"\n />\n <!-- A disabled account cannot sign in, so it cannot be signed in as either. -->\n <VBtn\n v-if=\"impersonate && canImpersonate\"\n :disabled=\"!item.enabled\"\n class=\"ml-1\"\n icon=\"mdi-account-switch\"\n :aria-label=\"t('common.anzuUser.table.impersonate')\"\n size=\"x-small\"\n variant=\"text\"\n data-cy=\"user-impersonate\"\n @click.stop=\"impersonate(item)\"\n />\n <slot\n name=\"rowActions\"\n :user=\"item\"\n />\n </div>\n </template>\n <template #bottom>\n <ADatatablePagination @change=\"getList\" />\n </template>\n </VDataTableServer>\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AAnzuUserDatatable.js","names":["AAnzuUserDatatable_vue_vue_type_script_setup_true_lang_default","AAnzuUserDatatable_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AAnzuUserDatatable.vue_vue_type_script_setup_true_lang.js","names":["$slots","_openBlock","_createElementBlock","_createVNode","AAnzuUserFilter","_unref","_isRef","_createSlots","_renderList","_withCtx","_renderSlot","_normalizeProps","_guardReactiveProps","_createElementVNode","_component_VSpacer","ADatatableOrdering","ADatatableConfigButton","_component_VDataTableServer","ABooleanValue","_Fragment","_createBlock","_component_VChip","_createTextVNode","_toDisplayString","ADatetime","_createCommentVNode","ATableCopyIdButton","_component_VBtn","_withModifiers","ADatatablePagination","ABooleanValue_default","ADatatableConfigButton_default","ADatetime_default","ATableCopyIdButton_default","ADatatableOrdering_default","ADatatablePagination_default","AAnzuUserFilter_default","_hoisted_1","_hoisted_2","FILTER_SLOT_PREFIX","AAnzuUserDatatable_vue_vue_type_script_setup_true_lang_default","PERMISSION_GROUP_ENDPOINT","__expose","__emit","props","__props","emit","useI18n","useAnzuUserListFilter","provide","FilterConfigKey","filterConfig","FilterDataKey","filterData","useAnzuUserActions","usePermissionConfigActions","useCachedPermissionGroups","useFilterHelpers","anzuUserFilterStorageKey","usePagination","DatatablePaginationKey","pagination","createDatatableColumnsConfig","column","datatableHiddenColumns","ANZU_USER_ENTITY","getList","useDebounceFn","fetchAnzuUserList","anzuUserList","users","addToCachedPermissionGroups","user","fetchCachedPermissionGroups","systemColumnKeys","computed","slots","useSlots","filterSlotNames","name","submitFilterAction","submitFilter","resetFilterAction","resetFilter","onRowClick","item","onMounted","onBeforeUnmount","cancelAnzuUserList","openBlock","createElementBlock","createVNode","unref","columnsHidden","_cache","isRef","$event","createSlots","renderList","withCtx","renderSlot","_ctx","normalizeProps","guardReactiveProps","slotProps","createElementVNode","VSpacer","columnsAll","VDataTableServer","columnsVisible","loadingAnzuUserList","Fragment","createBlock","VChip","role","createTextVNode","toDisplayString","translatePermission","permissionGroupId","getCachedPermissionGroup","createCommentVNode","VBtn","t","withModifiers"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserDatatable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, onMounted, provide, useSlots, watch } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport type { AxiosInstance } from 'axios'\nimport { useDebounceFn } from '@vueuse/core'\nimport ABooleanValue from '@/domains/ui/components/ABooleanValue.vue'\nimport ADatatableConfigButton from '@/domains/filters/datatable/components/ADatatableConfigButton.vue'\nimport ADatetime from '@/domains/ui/datetime/components/ADatetime.vue'\nimport ATableCopyIdButton from '@/domains/ui/buttons/table/components/ATableCopyIdButton.vue'\nimport { SORT_BY_ID } from '@/domains/filters/datatable/utils/datatableColumns'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport ADatatableOrdering from '@/domains/filters/datatable/components/ADatatableOrdering.vue'\nimport ADatatablePagination from '@/domains/filters/datatable/components/ADatatablePagination.vue'\nimport { createDatatableColumnsConfig } from '@/domains/filters/datatable/composables/createDatatableColumnsConfig'\nimport {\n useFilterHelpers,\n type FilterStoreIdentifier,\n type MakeFilterOption,\n} from '@/domains/filters/composables/filterFactory'\nimport { DatatablePaginationKey, FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport { usePagination } from '@/domains/api/composables/pagination'\nimport AAnzuUserFilter from '@/domains/anzuUser/components/AAnzuUserFilter.vue'\nimport { useAnzuUserActions } from '@/domains/anzuUser/composables/anzuUserActions'\nimport { ANZU_USER_ENTITY } from '@/domains/anzuUser/api/anzuUserApi'\nimport { anzuUserFilterStorageKey, useAnzuUserListFilter } from '@/domains/anzuUser/filter/anzuUserFilter'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\nimport { useCachedPermissionGroups } from '@/domains/permission/group/composables/cachedPermissionGroups'\nimport { PERMISSION_GROUP_ENDPOINT } from '@/domains/permission/group/api/permissionGroupApi'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\n\ntype DatatableItem = AnzuUser\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n detailRoute: (user: AnzuUser) => RouteLocationRaw\n editRoute: (user: AnzuUser) => RouteLocationRaw\n /** Already-evaluated ACL of the owning system. */\n canUpdate?: boolean\n /** The permission-group endpoint, which is not the user one. */\n permissionGroupEndPoint?: string\n /**\n * Extra columns the app draws through `#systemColumns`, appended after the shared ones.\n * A bare key takes its header from `common.anzuUser.model.*`, which has\n * no system keys. So a system column passes its title already translated.\n */\n systemColumns?: Array<string | { key: string; title: string }>\n /**\n * Optional impersonation. Left unset, nothing is drawn.\n * A callback rather than a path, because the mechanisms differ: cms posts to `/adm/users/{id}/impersonate` and\n * gets a JWT, blog opens the public site with `window.open`. Only the cms one reaches this shared component.\n */\n impersonate?: ((user: AnzuUser) => void) | undefined\n canImpersonate?: boolean\n /**\n * Filter fields this system adds to the shared three.\n * Not part of the shared list because the same filter is a different query per system:\n * cms uses `memberOf`, dam uses `custom`, and `allowedSites` exists only in cms.\n * A plain field is drawn by the generic renderer. A field that\n * needs a remote autocomplete comes in through `#filter.<name>`.\n */\n filterFields?: readonly MakeFilterOption[]\n /**\n * Saved filters are stored per user, so both props are needed for the button to appear. Only cms and dam use them.\n */\n filterClient?: (() => AxiosInstance) | undefined\n filterUserId?: IntegerIdNullable | undefined\n /** Where the filter files its saved bookmarks. */\n filterStore?: FilterStoreIdentifier | undefined\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n permissionGroupEndPoint: PERMISSION_GROUP_ENDPOINT,\n canUpdate: false,\n systemColumns: () => [],\n impersonate: undefined,\n canImpersonate: false,\n filterFields: () => [],\n filterClient: undefined,\n filterUserId: undefined,\n filterStore: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'rowClick', user: AnzuUser): void\n}>()\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { t } = useI18n()\nconst { filterConfig, filterData } = useAnzuUserListFilter(props.system, props.filterFields)\nprovide(FilterConfigKey, filterConfig)\nprovide(FilterDataKey, filterData)\n\nconst { fetchAnzuUserList, cancelAnzuUserList, anzuUserList, loadingAnzuUserList, datatableHiddenColumns } =\n useAnzuUserActions({\n client: props.client,\n system: props.system,\n entity: props.entity,\n endPoint: props.endPoint,\n })\n\n// No `entity` here on purpose: this one reads the permission config, which is its own resource.\n// `props.entity` names the user.\nconst { translatePermission } = usePermissionConfigActions({\n client: props.client,\n system: props.system,\n})\n\n/**\n * Group titles for the column, resolved against this system's own cache.\n * Drawn here rather than left to a slot, so the column is not left empty in every app.\n * The cache is keyed per system because the same id is a different group in each backend.\n * An app can still override the chip through the slot.\n */\nconst { addToCachedPermissionGroups, fetchCachedPermissionGroups, getCachedPermissionGroup } =\n useCachedPermissionGroups({\n client: props.client,\n system: props.system,\n endPoint: props.permissionGroupEndPoint,\n })\n\nconst { resetFilter, submitFilter, loadStoredFilters } = useFilterHelpers(filterData, filterConfig, {\n storeFiltersLocalStorage: anzuUserFilterStorageKey(props.system),\n})\n\nconst { pagination } = usePagination(SORT_BY_ID)\nprovide(DatatablePaginationKey, pagination)\n\nconst { columnsVisible, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n [\n { key: 'id' },\n { key: 'email' },\n { key: 'enabled' },\n { key: 'roles' },\n { key: 'permissionGroups' },\n { key: 'permissions' },\n ...props.systemColumns.map((column) => (typeof column === 'string' ? { key: column } : column)),\n { key: 'createdAt' },\n { key: 'modifiedAt' },\n ],\n datatableHiddenColumns,\n 'common',\n ANZU_USER_ENTITY,\n { storeColumnsLocalStorage: `table_common_anzuUser_${props.system}` }\n)\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst getList = useDebounceFn(async () => {\n await fetchAnzuUserList(pagination, filterData, filterConfig)\n})\n\nwatch(anzuUserList, (users) => {\n users.forEach((user) => addToCachedPermissionGroups(user.permissionGroups))\n void fetchCachedPermissionGroups()\n})\n\nconst systemColumnKeys = computed(() =>\n props.systemColumns.map((column) => (typeof column === 'string' ? column : column.key))\n)\n\n// `#filter.allowedSites` here becomes `#item.allowedSites` inside the\n// filter. That is the name `AFilterWrapper` renders a field's widget under.\n// The prefix keeps field slots apart from this table's own `item.*` columns.\nconst slots = useSlots()\nconst FILTER_SLOT_PREFIX = 'filter.'\nconst filterSlotNames = computed(() =>\n Object.keys(slots)\n .filter((name) => name.startsWith(FILTER_SLOT_PREFIX))\n .map((name) => name.slice(FILTER_SLOT_PREFIX.length))\n)\n\nconst submitFilterAction = () => submitFilter(pagination, getList)\nconst resetFilterAction = () => resetFilter(pagination, getList)\n\nconst onRowClick = (_event: unknown, { item }: { item: DatatableItem }) => {\n if (item.id) emit('rowClick', item)\n}\n\nonMounted(() => {\n loadStoredFilters(pagination, getList)\n})\n\nonBeforeUnmount(() => {\n getList.cancel()\n cancelAnzuUserList()\n})\n\ndefineExpose({\n refresh: getList,\n resetFilter: resetFilterAction,\n submitFilter: submitFilterAction,\n})\n</script>\n\n<template>\n <div>\n <AAnzuUserFilter\n v-model:datatable-hidden-columns=\"columnsHidden\"\n :client=\"filterClient\"\n :user-id=\"filterUserId\"\n :store=\"filterStore\"\n @submit=\"submitFilterAction\"\n @reset=\"resetFilterAction\"\n >\n <template\n v-for=\"name in filterSlotNames\"\n :key=\"name\"\n #[`item.${name}`]=\"slotProps\"\n >\n <slot\n :name=\"`${FILTER_SLOT_PREFIX}${name}`\"\n v-bind=\"slotProps ?? {}\"\n />\n </template>\n </AAnzuUserFilter>\n <div>\n <div class=\"d-flex align-center\">\n <VSpacer />\n <ADatatableOrdering\n variant=\"id\"\n @sort-by-change=\"submitFilterAction\"\n />\n <ADatatableConfigButton\n v-model:columns-hidden=\"columnsHidden\"\n :columns-all=\"columnsAll\"\n />\n </div>\n <VDataTableServer\n class=\"a-datatable\"\n :headers=\"columnsVisible\"\n :items=\"anzuUserList\"\n :items-length=\"anzuUserList.length\"\n :loading=\"loadingAnzuUserList\"\n item-value=\"id\"\n @click:row=\"onRowClick\"\n >\n <template #item.enabled=\"{ item }: { item: DatatableItem }\">\n <ABooleanValue\n chip\n :value=\"item.enabled\"\n />\n </template>\n <template #item.roles=\"{ item }: { item: DatatableItem }\">\n <VChip\n v-for=\"role in item.roles\"\n :key=\"role\"\n class=\"mr-1 mb-1\"\n >\n {{ translatePermission('roles', role) }}\n </VChip>\n </template>\n <template #item.permissionGroups=\"{ item }: { item: DatatableItem }\">\n <slot\n name=\"permissionGroups\"\n :ids=\"item.permissionGroups\"\n >\n <VChip\n v-for=\"permissionGroupId in item.permissionGroups\"\n :key=\"permissionGroupId\"\n class=\"mr-1 mb-1\"\n size=\"small\"\n label\n >\n {{ getCachedPermissionGroup(permissionGroupId)?.title || permissionGroupId }}\n </VChip>\n </slot>\n </template>\n <template #item.permissions=\"{ item }: { item: DatatableItem }\">\n <VChip>{{ Object.keys(item.permissions).length }}</VChip>\n </template>\n <template\n v-for=\"column in systemColumnKeys\"\n :key=\"column\"\n #[`item.${column}`]=\"{ item }: { item: DatatableItem }\"\n >\n <slot\n name=\"systemColumns\"\n :column=\"column\"\n :user=\"item\"\n />\n </template>\n <template #item.createdAt=\"{ item }: { item: DatatableItem }\">\n <ADatetime :date-time=\"item.createdAt\" />\n <template v-if=\"$slots.createdBy\">\n <br />\n <slot\n :id=\"item.createdBy\"\n name=\"createdBy\"\n />\n </template>\n </template>\n <template #item.modifiedAt=\"{ item }: { item: DatatableItem }\">\n <ADatetime :date-time=\"item.modifiedAt\" />\n <template v-if=\"$slots.modifiedBy\">\n <br />\n <slot\n :id=\"item.modifiedBy\"\n name=\"modifiedBy\"\n />\n </template>\n </template>\n <template #item.actions=\"{ item }: { item: DatatableItem }\">\n <div\n v-if=\"item.id\"\n class=\"d-flex justify-end\"\n >\n <ATableCopyIdButton :id=\"item.id\" />\n <VBtn\n :to=\"detailRoute(item)\"\n class=\"ml-1\"\n icon=\"mdi-information-outline\"\n :aria-label=\"t('common.button.detail')\"\n size=\"x-small\"\n variant=\"text\"\n />\n <VBtn\n v-if=\"canUpdate\"\n :to=\"editRoute(item)\"\n class=\"ml-1\"\n icon=\"mdi-pencil\"\n :aria-label=\"t('common.button.edit')\"\n size=\"x-small\"\n variant=\"text\"\n />\n <!-- A disabled account cannot sign in, so it cannot be signed in as either. -->\n <VBtn\n v-if=\"impersonate && canImpersonate\"\n :disabled=\"!item.enabled\"\n class=\"ml-1\"\n icon=\"mdi-account-switch\"\n :aria-label=\"t('common.anzuUser.table.impersonate')\"\n size=\"x-small\"\n variant=\"text\"\n data-cy=\"user-impersonate\"\n @click.stop=\"impersonate(item)\"\n />\n <slot\n name=\"rowActions\"\n :user=\"item\"\n />\n </div>\n </template>\n <template #bottom>\n <ADatatablePagination @change=\"getList\" />\n </template>\n </VDataTableServer>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"AAnzuUserDatatable.vue_vue_type_script_setup_true_lang.js","names":["$slots","_openBlock","_createElementBlock","_createVNode","AAnzuUserFilter","_unref","_isRef","_renderList","_withCtx","_renderSlot","_normalizeProps","_guardReactiveProps","_createElementVNode","_component_VSpacer","ADatatableOrdering","ADatatableConfigButton","_component_VDataTableServer","ABooleanValue","_Fragment","_createBlock","_component_VChip","_createTextVNode","_toDisplayString","ADatetime","ATableCopyIdButton","_component_VBtn","_withModifiers","ADatatablePagination","ABooleanValue_default","ADatatableConfigButton_default","ADatetime_default","ATableCopyIdButton_default","ADatatableOrdering_default","ADatatablePagination_default","AAnzuUserFilter_default","_hoisted_1","_hoisted_2","FILTER_SLOT_PREFIX","AAnzuUserDatatable_vue_vue_type_script_setup_true_lang_default","PERMISSION_GROUP_ENDPOINT","__expose","__emit","props","__props","emit","useI18n","useAnzuUserListFilter","provide","FilterConfigKey","filterConfig","FilterDataKey","filterData","useAnzuUserActions","usePermissionConfigActions","useCachedPermissionGroups","useFilterHelpers","anzuUserFilterStorageKey","usePagination","DatatablePaginationKey","pagination","createDatatableColumnsConfig","column","datatableHiddenColumns","ANZU_USER_ENTITY","getList","useDebounceFn","fetchAnzuUserList","anzuUserList","users","addToCachedPermissionGroups","user","fetchCachedPermissionGroups","systemColumnKeys","computed","slots","useSlots","filterSlotNames","name","submitFilterAction","submitFilter","resetFilterAction","resetFilter","onRowClick","item","onMounted","onBeforeUnmount","cancelAnzuUserList","openBlock","createElementBlock","createVNode","unref","columnsHidden","_cache","isRef","$event","createSlots","renderList","withCtx","renderSlot","_ctx","normalizeProps","guardReactiveProps","slotProps","createElementVNode","VSpacer","columnsAll","VDataTableServer","columnsVisible","loadingAnzuUserList","Fragment","createBlock","VChip","role","createTextVNode","toDisplayString","translatePermission","permissionGroupId","getCachedPermissionGroup","createCommentVNode","VBtn","t","withModifiers"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserDatatable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, onMounted, provide, useSlots, watch } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport type { AxiosInstance } from 'axios'\nimport { useDebounceFn } from '@vueuse/core'\nimport ABooleanValue from '@/domains/ui/components/ABooleanValue.vue'\nimport ADatatableConfigButton from '@/domains/filters/datatable/components/ADatatableConfigButton.vue'\nimport ADatetime from '@/domains/ui/datetime/components/ADatetime.vue'\nimport ATableCopyIdButton from '@/domains/ui/buttons/table/components/ATableCopyIdButton.vue'\nimport { SORT_BY_ID } from '@/domains/filters/datatable/utils/datatableColumns'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport ADatatableOrdering from '@/domains/filters/datatable/components/ADatatableOrdering.vue'\nimport ADatatablePagination from '@/domains/filters/datatable/components/ADatatablePagination.vue'\nimport { createDatatableColumnsConfig } from '@/domains/filters/datatable/composables/createDatatableColumnsConfig'\nimport {\n useFilterHelpers,\n type FilterStoreIdentifier,\n type MakeFilterOption,\n} from '@/domains/filters/composables/filterFactory'\nimport { DatatablePaginationKey, FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport { usePagination } from '@/domains/api/composables/pagination'\nimport AAnzuUserFilter from '@/domains/anzuUser/components/AAnzuUserFilter.vue'\nimport { useAnzuUserActions } from '@/domains/anzuUser/composables/anzuUserActions'\nimport { ANZU_USER_ENTITY } from '@/domains/anzuUser/api/anzuUserApi'\nimport { anzuUserFilterStorageKey, useAnzuUserListFilter } from '@/domains/anzuUser/filter/anzuUserFilter'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\nimport { useCachedPermissionGroups } from '@/domains/permission/group/composables/cachedPermissionGroups'\nimport { PERMISSION_GROUP_ENDPOINT } from '@/domains/permission/group/api/permissionGroupApi'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\n\ntype DatatableItem = AnzuUser\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n detailRoute: (user: AnzuUser) => RouteLocationRaw\n editRoute: (user: AnzuUser) => RouteLocationRaw\n /** Already-evaluated ACL of the owning system. */\n canUpdate?: boolean\n /** The permission-group endpoint, which is not the user one. */\n permissionGroupEndPoint?: string\n /**\n * Extra columns the app draws through `#systemColumns`, appended after the shared ones.\n * A bare key takes its header from `common.anzuUser.model.*`, which has\n * no system keys. So a system column passes its title already translated.\n */\n systemColumns?: Array<string | { key: string; title: string }>\n /**\n * Optional impersonation. Left unset, nothing is drawn.\n * A callback rather than a path, because the mechanisms differ: cms posts to `/adm/users/{id}/impersonate` and\n * gets a JWT, blog opens the public site with `window.open`. Only the cms one reaches this shared component.\n */\n impersonate?: ((user: AnzuUser) => void) | undefined\n canImpersonate?: boolean\n /**\n * Filter fields this system adds to the shared three.\n * Not part of the shared list because the same filter is a different query per system:\n * cms uses `memberOf`, dam uses `custom`, and `allowedSites` exists only in cms.\n * A plain field is drawn by the generic renderer. A field that\n * needs a remote autocomplete comes in through `#filter.<name>`.\n */\n filterFields?: readonly MakeFilterOption[]\n /**\n * Saved filters are stored per user, so both props are needed for the button to appear. Only cms and dam use them.\n */\n filterClient?: (() => AxiosInstance) | undefined\n filterUserId?: IntegerIdNullable | undefined\n /** Where the filter files its saved bookmarks. */\n filterStore?: FilterStoreIdentifier | undefined\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n permissionGroupEndPoint: PERMISSION_GROUP_ENDPOINT,\n canUpdate: false,\n systemColumns: () => [],\n impersonate: undefined,\n canImpersonate: false,\n filterFields: () => [],\n filterClient: undefined,\n filterUserId: undefined,\n filterStore: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'rowClick', user: AnzuUser): void\n}>()\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { t } = useI18n()\nconst { filterConfig, filterData } = useAnzuUserListFilter(props.system, props.filterFields)\nprovide(FilterConfigKey, filterConfig)\nprovide(FilterDataKey, filterData)\n\nconst { fetchAnzuUserList, cancelAnzuUserList, anzuUserList, loadingAnzuUserList, datatableHiddenColumns } =\n useAnzuUserActions({\n client: props.client,\n system: props.system,\n entity: props.entity,\n endPoint: props.endPoint,\n })\n\n// No `entity` here on purpose: this one reads the permission config, which is its own resource.\n// `props.entity` names the user.\nconst { translatePermission } = usePermissionConfigActions({\n client: props.client,\n system: props.system,\n})\n\n/**\n * Group titles for the column, resolved against this system's own cache.\n * Drawn here rather than left to a slot, so the column is not left empty in every app.\n * The cache is keyed per system because the same id is a different group in each backend.\n * An app can still override the chip through the slot.\n */\nconst { addToCachedPermissionGroups, fetchCachedPermissionGroups, getCachedPermissionGroup } =\n useCachedPermissionGroups({\n client: props.client,\n system: props.system,\n endPoint: props.permissionGroupEndPoint,\n })\n\nconst { resetFilter, submitFilter, loadStoredFilters } = useFilterHelpers(filterData, filterConfig, {\n storeFiltersLocalStorage: anzuUserFilterStorageKey(props.system),\n})\n\nconst { pagination } = usePagination(SORT_BY_ID)\nprovide(DatatablePaginationKey, pagination)\n\nconst { columnsVisible, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n [\n { key: 'id' },\n { key: 'email' },\n { key: 'enabled' },\n { key: 'roles' },\n { key: 'permissionGroups' },\n { key: 'permissions' },\n ...props.systemColumns.map((column) => (typeof column === 'string' ? { key: column } : column)),\n { key: 'createdAt' },\n { key: 'modifiedAt' },\n ],\n datatableHiddenColumns,\n 'common',\n ANZU_USER_ENTITY,\n { storeColumnsLocalStorage: `table_common_anzuUser_${props.system}` }\n)\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst getList = useDebounceFn(async () => {\n await fetchAnzuUserList(pagination, filterData, filterConfig)\n})\n\nwatch(anzuUserList, (users) => {\n users.forEach((user) => addToCachedPermissionGroups(user.permissionGroups))\n void fetchCachedPermissionGroups()\n})\n\nconst systemColumnKeys = computed(() =>\n props.systemColumns.map((column) => (typeof column === 'string' ? column : column.key))\n)\n\n// `#filter.allowedSites` here becomes `#item.allowedSites` inside the\n// filter. That is the name `AFilterWrapper` renders a field's widget under.\n// The prefix keeps field slots apart from this table's own `item.*` columns.\nconst slots = useSlots()\nconst FILTER_SLOT_PREFIX = 'filter.'\nconst filterSlotNames = computed(() =>\n Object.keys(slots)\n .filter((name) => name.startsWith(FILTER_SLOT_PREFIX))\n .map((name) => name.slice(FILTER_SLOT_PREFIX.length))\n)\n\nconst submitFilterAction = () => submitFilter(pagination, getList)\nconst resetFilterAction = () => resetFilter(pagination, getList)\n\nconst onRowClick = (_event: unknown, { item }: { item: DatatableItem }) => {\n if (item.id) emit('rowClick', item)\n}\n\nonMounted(() => {\n loadStoredFilters(pagination, getList)\n})\n\nonBeforeUnmount(() => {\n getList.cancel()\n cancelAnzuUserList()\n})\n\ndefineExpose({\n refresh: getList,\n resetFilter: resetFilterAction,\n submitFilter: submitFilterAction,\n})\n</script>\n\n<template>\n <div>\n <AAnzuUserFilter\n v-model:datatable-hidden-columns=\"columnsHidden\"\n :client=\"filterClient\"\n :user-id=\"filterUserId\"\n :store=\"filterStore\"\n @submit=\"submitFilterAction\"\n @reset=\"resetFilterAction\"\n >\n <template\n v-for=\"name in filterSlotNames\"\n :key=\"name\"\n #[`item.${name}`]=\"slotProps\"\n >\n <slot\n :name=\"`${FILTER_SLOT_PREFIX}${name}`\"\n v-bind=\"slotProps ?? {}\"\n />\n </template>\n </AAnzuUserFilter>\n <div>\n <div class=\"d-flex align-center\">\n <VSpacer />\n <ADatatableOrdering\n variant=\"id\"\n @sort-by-change=\"submitFilterAction\"\n />\n <ADatatableConfigButton\n v-model:columns-hidden=\"columnsHidden\"\n :columns-all=\"columnsAll\"\n />\n </div>\n <VDataTableServer\n class=\"a-datatable\"\n :headers=\"columnsVisible\"\n :items=\"anzuUserList\"\n :items-length=\"anzuUserList.length\"\n :loading=\"loadingAnzuUserList\"\n item-value=\"id\"\n @click:row=\"onRowClick\"\n >\n <template #item.enabled=\"{ item }: { item: DatatableItem }\">\n <ABooleanValue\n chip\n :value=\"item.enabled\"\n />\n </template>\n <template #item.roles=\"{ item }: { item: DatatableItem }\">\n <VChip\n v-for=\"role in item.roles\"\n :key=\"role\"\n class=\"mr-1 mb-1\"\n >\n {{ translatePermission('roles', role) }}\n </VChip>\n </template>\n <template #item.permissionGroups=\"{ item }: { item: DatatableItem }\">\n <slot\n name=\"permissionGroups\"\n :ids=\"item.permissionGroups\"\n >\n <VChip\n v-for=\"permissionGroupId in item.permissionGroups\"\n :key=\"permissionGroupId\"\n class=\"mr-1 mb-1\"\n size=\"small\"\n label\n >\n {{ getCachedPermissionGroup(permissionGroupId)?.title || permissionGroupId }}\n </VChip>\n </slot>\n </template>\n <template #item.permissions=\"{ item }: { item: DatatableItem }\">\n <VChip>{{ Object.keys(item.permissions).length }}</VChip>\n </template>\n <template\n v-for=\"column in systemColumnKeys\"\n :key=\"column\"\n #[`item.${column}`]=\"{ item }: { item: DatatableItem }\"\n >\n <slot\n name=\"systemColumns\"\n :column=\"column\"\n :user=\"item\"\n />\n </template>\n <template #item.createdAt=\"{ item }: { item: DatatableItem }\">\n <ADatetime :date-time=\"item.createdAt\" />\n <template v-if=\"$slots.createdBy\">\n <br />\n <slot\n :id=\"item.createdBy\"\n name=\"createdBy\"\n />\n </template>\n </template>\n <template #item.modifiedAt=\"{ item }: { item: DatatableItem }\">\n <ADatetime :date-time=\"item.modifiedAt\" />\n <template v-if=\"$slots.modifiedBy\">\n <br />\n <slot\n :id=\"item.modifiedBy\"\n name=\"modifiedBy\"\n />\n </template>\n </template>\n <template #item.actions=\"{ item }: { item: DatatableItem }\">\n <div\n v-if=\"item.id\"\n class=\"d-flex justify-end\"\n >\n <ATableCopyIdButton :id=\"item.id\" />\n <VBtn\n :to=\"detailRoute(item)\"\n class=\"ml-1\"\n icon=\"mdi-information-outline\"\n :aria-label=\"t('common.button.detail')\"\n size=\"x-small\"\n variant=\"text\"\n />\n <VBtn\n v-if=\"canUpdate\"\n :to=\"editRoute(item)\"\n class=\"ml-1\"\n icon=\"mdi-pencil\"\n :aria-label=\"t('common.button.edit')\"\n size=\"x-small\"\n variant=\"text\"\n />\n <!-- A disabled account cannot sign in, so it cannot be signed in as either. -->\n <VBtn\n v-if=\"impersonate && canImpersonate\"\n :disabled=\"!item.enabled\"\n class=\"ml-1\"\n icon=\"mdi-account-switch\"\n :aria-label=\"t('common.anzuUser.table.impersonate')\"\n size=\"x-small\"\n variant=\"text\"\n data-cy=\"user-impersonate\"\n @click.stop=\"impersonate(item)\"\n />\n <slot\n name=\"rowActions\"\n :user=\"item\"\n />\n </div>\n </template>\n <template #bottom>\n <ADatatablePagination @change=\"getList\" />\n </template>\n </VDataTableServer>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AAnzuUserFilter.js","names":["_sfc_main","AAnzuUserFilter_vue_vue_type_script_setup_true_lang_default","AAnzuUserFilter_default"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { inject } from 'vue'\nimport type { AxiosInstance } from 'axios'\nimport AFilterString from '@/domains/filters/components/AFilterString.vue'\nimport AFilterWrapper from '@/domains/filters/components/AFilterWrapper.vue'\nimport type { FilterStoreIdentifier } from '@/domains/filters/composables/filterFactory'\nimport { FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { isUndefined } from '@/shared/utils/common'\n\nwithDefaults(\n defineProps<{\n /**\n * Both are needed to switch on the bookmark UI in `AFilterWrapper`, because\n * bookmarks are stored per user. Left unset, the filter has no bookmarks.\n */\n client?: (() => AxiosInstance) | undefined\n userId?: IntegerIdNullable | undefined\n /**\n * What the saved bookmarks are filed under on the server. Defaults to `common` / `anzuUser`.\n * cms overrides it with the pair its old list used, so existing\n * bookmarks keep showing up. A new key would orphan them.\n */\n store?: FilterStoreIdentifier | undefined\n }>(),\n {\n client: undefined,\n userId: undefined,\n store: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'reset'): void\n}>()\n\n/** The column set a bookmark restores along with the filter values. */\nconst datatableHiddenColumns = defineModel<string[] | undefined>('datatableHiddenColumns', {\n default: undefined,\n required: false,\n})\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nif (isUndefined(filterConfig) || isUndefined(filterData)) {\n throw new Error('[AAnzuUserFilter] Incorrect provide/inject config.')\n}\n</script>\n\n<template>\n <AFilterWrapper\n v-model:datatable-hidden-columns=\"datatableHiddenColumns\"\n :client=\"client\"\n :user-id=\"userId\"\n :store=\"store ?? true\"\n @submit=\"emit('submit')\"\n @reset=\"emit('reset')\"\n @bookmark-load-after=\"emit('submit')\"\n >\n <template #search>\n <AFilterString name=\"email\" />\n </template>\n <!--\n Pass every other slot through, so a system field can bring its own widget.\n The generic renderer draws a plain input. A permission group or\n site needs a remote autocomplete that only the app can build.\n -->\n <template\n v-for=\"(_, name) in $slots\"\n :key=\"name\"\n #[name]=\"slotProps\"\n >\n <slot\n :name=\"name\"\n v-bind=\"slotProps ?? {}\"\n />\n </template>\n </AFilterWrapper>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AAnzuUserFilter.js","names":["AAnzuUserFilter_vue_vue_type_script_setup_true_lang_default","AAnzuUserFilter_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AAnzuUserFilter.vue_vue_type_script_setup_true_lang.js","names":["$slots","_useModel","_openBlock","_createBlock","AFilterWrapper","_createSlots","_withCtx","_createVNode","AFilterString","_renderList","_renderSlot","_normalizeProps","_guardReactiveProps","AFilterString_default","AFilterWrapper_default","AAnzuUserFilter_vue_vue_type_script_setup_true_lang_default","\"datatableHiddenColumns\"","\"datatableHiddenColumnsModifiers\"","__emit","emit","datatableHiddenColumns","useModel","__props","filterConfig","inject","FilterConfigKey","filterData","FilterDataKey","isUndefined","openBlock","createBlock","_cache","$event","createSlots","withCtx","createVNode","renderList","_ctx","renderSlot","name","normalizeProps","guardReactiveProps","slotProps"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { inject } from 'vue'\nimport type { AxiosInstance } from 'axios'\nimport AFilterString from '@/domains/filters/components/AFilterString.vue'\nimport AFilterWrapper from '@/domains/filters/components/AFilterWrapper.vue'\nimport type { FilterStoreIdentifier } from '@/domains/filters/composables/filterFactory'\nimport { FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { isUndefined } from '@/shared/utils/common'\n\nwithDefaults(\n defineProps<{\n /**\n * Both are needed to switch on the bookmark UI in `AFilterWrapper`, because\n * bookmarks are stored per user. Left unset, the filter has no bookmarks.\n */\n client?: (() => AxiosInstance) | undefined\n userId?: IntegerIdNullable | undefined\n /**\n * What the saved bookmarks are filed under on the server. Defaults to `common` / `anzuUser`.\n * cms overrides it with the pair its old list used, so existing\n * bookmarks keep showing up. A new key would orphan them.\n */\n store?: FilterStoreIdentifier | undefined\n }>(),\n {\n client: undefined,\n userId: undefined,\n store: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'reset'): void\n}>()\n\n/** The column set a bookmark restores along with the filter values. */\nconst datatableHiddenColumns = defineModel<string[] | undefined>('datatableHiddenColumns', {\n default: undefined,\n required: false,\n})\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nif (isUndefined(filterConfig) || isUndefined(filterData)) {\n throw new Error('[AAnzuUserFilter] Incorrect provide/inject config.')\n}\n</script>\n\n<template>\n <AFilterWrapper\n v-model:datatable-hidden-columns=\"datatableHiddenColumns\"\n :client=\"client\"\n :user-id=\"userId\"\n :store=\"store ?? true\"\n @submit=\"emit('submit')\"\n @reset=\"emit('reset')\"\n @bookmark-load-after=\"emit('submit')\"\n >\n <template #search>\n <AFilterString name=\"email\" />\n </template>\n <!--\n Pass every other slot through, so a system field can bring its own widget.\n The generic renderer draws a plain input. A permission group or\n site needs a remote autocomplete that only the app can build.\n -->\n <template\n v-for=\"(_, name) in $slots\"\n :key=\"name\"\n #[name]=\"slotProps\"\n >\n <slot\n :name=\"name\"\n v-bind=\"slotProps ?? {}\"\n />\n </template>\n </AFilterWrapper>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EAgCA,IAAMmB,IAAOD,GAMPE,IAAyBnB,EAAiCqB,GAAC,wBAGhE,GAEKC,IAAeC,EAAOC,CAAe,GACrCC,IAAaF,EAAOG,CAAa;EACvC,IAAIC,EAAYL,CAAY,KAAKK,EAAYF,CAAU,GACrD,MAAU,MAAM,oDAAoD;E,kBAKpExB,EAAA,GAAAC,EA2BiBC,GAAA;GA1BP,4BAA0BgB,EAAA;GAAA,mCAAA,AAAAW,EAAA,QAAA,MAAA,EAAsB,QAAAC;GACvD,QAAQV,EAAA;GACR,WAASA,EAAA;GACT,OAAOA,EAAA,SAAK;GACZ,UAAM,AAAAS,EAAA,QAAA,MAAEZ,EAAI,QAAA;GACZ,SAAK,AAAAY,EAAA,QAAA,MAAEZ,EAAI,OAAA;GACX,qBAAmB,AAAAY,EAAA,QAAA,MAAEZ,EAAI,QAAA;;GAEf,QAAMb,QACe,CAA9BC,EAA8BC,GAAA,EAAf,MAAK,QAAO,CAAA,C;;E,IAQPR,EAAAA,EAAAA,SAAZ,GAAG,O;GAEV;GAED,IAAAM,GAFS,MAAS,CAElBI,EAGE2B,EAAA,QAFOE,GAAI5B,EAAAC,EACH8B,KAAS,CAAA,CAAA,CAAA,CAAA,C"}
1
+ {"version":3,"file":"AAnzuUserFilter.vue_vue_type_script_setup_true_lang.js","names":["$slots","_useModel","_openBlock","_createBlock","AFilterWrapper","_withCtx","_createVNode","AFilterString","_renderSlot","_normalizeProps","_guardReactiveProps","AFilterString_default","AFilterWrapper_default","AAnzuUserFilter_vue_vue_type_script_setup_true_lang_default","\"datatableHiddenColumns\"","\"datatableHiddenColumnsModifiers\"","__emit","emit","datatableHiddenColumns","useModel","__props","filterConfig","inject","FilterConfigKey","filterData","FilterDataKey","isUndefined","openBlock","createBlock","_cache","$event","createSlots","withCtx","createVNode","renderList","_ctx","renderSlot","name","normalizeProps","guardReactiveProps","slotProps"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { inject } from 'vue'\nimport type { AxiosInstance } from 'axios'\nimport AFilterString from '@/domains/filters/components/AFilterString.vue'\nimport AFilterWrapper from '@/domains/filters/components/AFilterWrapper.vue'\nimport type { FilterStoreIdentifier } from '@/domains/filters/composables/filterFactory'\nimport { FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { isUndefined } from '@/shared/utils/common'\n\nwithDefaults(\n defineProps<{\n /**\n * Both are needed to switch on the bookmark UI in `AFilterWrapper`, because\n * bookmarks are stored per user. Left unset, the filter has no bookmarks.\n */\n client?: (() => AxiosInstance) | undefined\n userId?: IntegerIdNullable | undefined\n /**\n * What the saved bookmarks are filed under on the server. Defaults to `common` / `anzuUser`.\n * cms overrides it with the pair its old list used, so existing\n * bookmarks keep showing up. A new key would orphan them.\n */\n store?: FilterStoreIdentifier | undefined\n }>(),\n {\n client: undefined,\n userId: undefined,\n store: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'reset'): void\n}>()\n\n/** The column set a bookmark restores along with the filter values. */\nconst datatableHiddenColumns = defineModel<string[] | undefined>('datatableHiddenColumns', {\n default: undefined,\n required: false,\n})\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nif (isUndefined(filterConfig) || isUndefined(filterData)) {\n throw new Error('[AAnzuUserFilter] Incorrect provide/inject config.')\n}\n</script>\n\n<template>\n <AFilterWrapper\n v-model:datatable-hidden-columns=\"datatableHiddenColumns\"\n :client=\"client\"\n :user-id=\"userId\"\n :store=\"store ?? true\"\n @submit=\"emit('submit')\"\n @reset=\"emit('reset')\"\n @bookmark-load-after=\"emit('submit')\"\n >\n <template #search>\n <AFilterString name=\"email\" />\n </template>\n <!--\n Pass every other slot through, so a system field can bring its own widget.\n The generic renderer draws a plain input. A permission group or\n site needs a remote autocomplete that only the app can build.\n -->\n <template\n v-for=\"(_, name) in $slots\"\n :key=\"name\"\n #[name]=\"slotProps\"\n >\n <slot\n :name=\"name\"\n v-bind=\"slotProps ?? {}\"\n />\n </template>\n </AFilterWrapper>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EAgCA,IAAMiB,IAAOD,GAMPE,IAAyBjB,EAAiCmB,GAAC,wBAGhE,GAEKC,IAAeC,EAAOC,CAAe,GACrCC,IAAaF,EAAOG,CAAa;EACvC,IAAIC,EAAYL,CAAY,KAAKK,EAAYF,CAAU,GACrD,MAAU,MAAM,oDAAoD;E,kBAKpEtB,EAAA,GAAAC,EA2BiBC,GAAA;GA1BP,4BAA0Bc,EAAA;GAAA,mCAAA,AAAAW,EAAA,QAAA,MAAA,EAAsB,QAAAC;GACvD,QAAQV,EAAA;GACR,WAASA,EAAA;GACT,OAAOA,EAAA,SAAK;GACZ,UAAM,AAAAS,EAAA,QAAA,MAAEZ,EAAI,QAAA;GACZ,SAAK,AAAAY,EAAA,QAAA,MAAEZ,EAAI,OAAA;GACX,qBAAmB,AAAAY,EAAA,QAAA,MAAEZ,EAAI,QAAA;;GAEf,QAAMZ,QACe,CAA9BC,EAA8BC,GAAA,EAAf,MAAK,QAAO,CAAA,C;;E,IAQPP,EAAAA,EAAAA,SAAZ,GAAG,O;GAEV;GAED,IAAAK,GAFS,MAAS,CAElBG,EAGE2B,EAAA,QAFOE,GAAI5B,EAAAC,EACH8B,KAAS,CAAA,CAAA,CAAA,CAAA,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"AAnzuUserForm.js","names":["_sfc_main","AAnzuUserForm_vue_vue_type_script_setup_true_lang_default","AAnzuUserForm_default"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserForm.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport AUserEnabledSwitch from '@/domains/anzuUser/components/AUserEnabledSwitch.vue'\nimport AUserMetadataForm from '@/domains/anzuUser/components/AUserMetadataForm.vue'\nimport AAnzuUserRoleAutocomplete from '@/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue'\nimport { ANZU_USER_ENTITY } from '@/domains/anzuUser/api/anzuUserApi'\nimport APermissionEditor from '@/domains/permission/components/APermissionEditor.vue'\nimport { usePermissionActions } from '@/domains/permission/composables/permissionActions'\nimport APermissionGroupRemoteAutocomplete from '@/domains/permission/group/components/APermissionGroupRemoteAutocomplete.vue'\nimport { PERMISSION_GROUP_ENDPOINT } from '@/domains/permission/group/api/permissionGroupApi'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n system: string\n /**\n * The permission-group endpoint, which is not the user one.\n * There is deliberately no `entity` prop. `entity` names the resource that server validation\n * errors are filed under. Passing the user's down would file group errors under user labels.\n */\n permissionGroupEndPoint?: string\n /**\n * One component for detail and edit (decision 27). Two components drift:\n * a field added to one and forgotten in the other fails silently.\n */\n readonly?: boolean\n isEdit?: boolean\n /** From the system's descriptor. */\n requiredMetadata?: boolean\n idInput?: boolean\n randomColor?: boolean\n enabledNote?: string | undefined\n metadataNote?: string | undefined\n }>(),\n {\n permissionGroupEndPoint: PERMISSION_GROUP_ENDPOINT,\n readonly: false,\n isEdit: false,\n requiredMetadata: false,\n idInput: true,\n randomColor: false,\n enabledNote: undefined,\n metadataNote: undefined,\n }\n)\n\nconst user = defineModel<AnzuUser>('user', { required: true })\n\nconst { t } = useI18n()\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { resolvePermissions } = usePermissionActions({\n client: props.client,\n system: props.system,\n endPoint: props.permissionGroupEndPoint,\n})\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\n/**\n * Grants the account would have if saved now: those of the ticked groups plus the user's own.\n * Computed locally so ticking a group shows its effect without a round\n * trip. The server's `resolvedPermissions` reflects the record as loaded.\n */\nconst resolvedPermissions = computed(() => resolvePermissions(user.value))\n</script>\n\n<template>\n <ASystemEntityScope\n system=\"common\"\n :subject=\"ANZU_USER_ENTITY\"\n >\n <VRow>\n <VCol cols=\"12\">\n <AUserEnabledSwitch\n v-model=\"user.enabled\"\n :readonly=\"readonly\"\n :note=\"enabledNote\"\n />\n </VCol>\n <VCol cols=\"12\">\n <AUserMetadataForm\n v-model:user=\"user\"\n :required=\"requiredMetadata\"\n :id-input=\"idInput\"\n :is-edit=\"isEdit\"\n :readonly=\"readonly\"\n :random-color=\"randomColor\"\n :note=\"metadataNote\"\n />\n </VCol>\n <VCol\n v-if=\"isEdit && !readonly && $slots.copyPermissions\"\n cols=\"12\"\n >\n <!-- Copying roles and grants from another account. Only cms offers it today. -->\n <slot name=\"copyPermissions\" />\n </VCol>\n <VCol\n v-if=\"$slots.systemFields\"\n cols=\"12\"\n >\n <!--\n The system's own fields: autocompletes over that backend's entities, which the library\n cannot build. They get the same `readonly`, so the app can swap autocompletes for chips.\n -->\n <slot\n name=\"systemFields\"\n :readonly=\"readonly\"\n :is-edit=\"isEdit\"\n />\n </VCol>\n <VCol cols=\"12\">\n <AAnzuUserRoleAutocomplete\n v-model=\"user.roles\"\n :client=\"client\"\n :system=\"system\"\n :readonly=\"readonly\"\n />\n </VCol>\n <VCol cols=\"12\">\n <APermissionGroupRemoteAutocomplete\n v-model=\"user.permissionGroups\"\n :client=\"client\"\n :system=\"system\"\n :end-point=\"permissionGroupEndPoint\"\n :label=\"t('common.anzuUser.model.permissionGroups')\"\n :readonly=\"readonly\"\n multiple\n clearable\n />\n </VCol>\n <VCol\n v-if=\"$slots.actions\"\n cols=\"12\"\n >\n <slot\n name=\"actions\"\n :user=\"user\"\n />\n </VCol>\n <VCol cols=\"12\">\n <APermissionEditor\n v-model=\"user.permissions\"\n :resolved-permissions=\"resolvedPermissions\"\n :roles=\"user.roles\"\n :client=\"client\"\n :system=\"system\"\n :readonly=\"readonly\"\n />\n </VCol>\n </VRow>\n </ASystemEntityScope>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AAnzuUserForm.js","names":["AAnzuUserForm_vue_vue_type_script_setup_true_lang_default","AAnzuUserForm_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AAnzuUserForm.vue_vue_type_script_setup_true_lang.js","names":["$slots","_useModel","_openBlock","_createBlock","ASystemEntityScope","_unref","_withCtx","_createVNode","_component_VRow","_component_VCol","AUserEnabledSwitch","AUserMetadataForm","_renderSlot","_createCommentVNode","AAnzuUserRoleAutocomplete","APermissionGroupRemoteAutocomplete","APermissionEditor","ASystemEntityScope_default","AUserEnabledSwitch_default","AUserMetadataForm_default","AAnzuUserRoleAutocomplete_default","APermissionEditor_default","APermissionGroupRemoteAutocomplete_default","AAnzuUserForm_vue_vue_type_script_setup_true_lang_default","PERMISSION_GROUP_ENDPOINT","\"user\"","\"userModifiers\"","props","__props","user","useModel","useI18n","usePermissionActions","resolvedPermissions","computed","resolvePermissions","openBlock","createBlock","unref","ANZU_USER_ENTITY","withCtx","createVNode","VRow","VCol","_cache","$event","_ctx","renderSlot","createCommentVNode","t"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserForm.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport AUserEnabledSwitch from '@/domains/anzuUser/components/AUserEnabledSwitch.vue'\nimport AUserMetadataForm from '@/domains/anzuUser/components/AUserMetadataForm.vue'\nimport AAnzuUserRoleAutocomplete from '@/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue'\nimport { ANZU_USER_ENTITY } from '@/domains/anzuUser/api/anzuUserApi'\nimport APermissionEditor from '@/domains/permission/components/APermissionEditor.vue'\nimport { usePermissionActions } from '@/domains/permission/composables/permissionActions'\nimport APermissionGroupRemoteAutocomplete from '@/domains/permission/group/components/APermissionGroupRemoteAutocomplete.vue'\nimport { PERMISSION_GROUP_ENDPOINT } from '@/domains/permission/group/api/permissionGroupApi'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n system: string\n /**\n * The permission-group endpoint, which is not the user one.\n * There is deliberately no `entity` prop. `entity` names the resource that server validation\n * errors are filed under. Passing the user's down would file group errors under user labels.\n */\n permissionGroupEndPoint?: string\n /**\n * One component for detail and edit (decision 27). Two components drift:\n * a field added to one and forgotten in the other fails silently.\n */\n readonly?: boolean\n isEdit?: boolean\n /** From the system's descriptor. */\n requiredMetadata?: boolean\n idInput?: boolean\n randomColor?: boolean\n enabledNote?: string | undefined\n metadataNote?: string | undefined\n }>(),\n {\n permissionGroupEndPoint: PERMISSION_GROUP_ENDPOINT,\n readonly: false,\n isEdit: false,\n requiredMetadata: false,\n idInput: true,\n randomColor: false,\n enabledNote: undefined,\n metadataNote: undefined,\n }\n)\n\nconst user = defineModel<AnzuUser>('user', { required: true })\n\nconst { t } = useI18n()\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { resolvePermissions } = usePermissionActions({\n client: props.client,\n system: props.system,\n endPoint: props.permissionGroupEndPoint,\n})\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\n/**\n * Grants the account would have if saved now: those of the ticked groups plus the user's own.\n * Computed locally so ticking a group shows its effect without a round\n * trip. The server's `resolvedPermissions` reflects the record as loaded.\n */\nconst resolvedPermissions = computed(() => resolvePermissions(user.value))\n</script>\n\n<template>\n <ASystemEntityScope\n system=\"common\"\n :subject=\"ANZU_USER_ENTITY\"\n >\n <VRow>\n <VCol cols=\"12\">\n <AUserEnabledSwitch\n v-model=\"user.enabled\"\n :readonly=\"readonly\"\n :note=\"enabledNote\"\n />\n </VCol>\n <VCol cols=\"12\">\n <AUserMetadataForm\n v-model:user=\"user\"\n :required=\"requiredMetadata\"\n :id-input=\"idInput\"\n :is-edit=\"isEdit\"\n :readonly=\"readonly\"\n :random-color=\"randomColor\"\n :note=\"metadataNote\"\n />\n </VCol>\n <VCol\n v-if=\"isEdit && !readonly && $slots.copyPermissions\"\n cols=\"12\"\n >\n <!-- Copying roles and grants from another account. Only cms offers it today. -->\n <slot name=\"copyPermissions\" />\n </VCol>\n <VCol\n v-if=\"$slots.systemFields\"\n cols=\"12\"\n >\n <!--\n The system's own fields: autocompletes over that backend's entities, which the library\n cannot build. They get the same `readonly`, so the app can swap autocompletes for chips.\n -->\n <slot\n name=\"systemFields\"\n :readonly=\"readonly\"\n :is-edit=\"isEdit\"\n />\n </VCol>\n <VCol cols=\"12\">\n <AAnzuUserRoleAutocomplete\n v-model=\"user.roles\"\n :client=\"client\"\n :system=\"system\"\n :readonly=\"readonly\"\n />\n </VCol>\n <VCol cols=\"12\">\n <APermissionGroupRemoteAutocomplete\n v-model=\"user.permissionGroups\"\n :client=\"client\"\n :system=\"system\"\n :end-point=\"permissionGroupEndPoint\"\n :label=\"t('common.anzuUser.model.permissionGroups')\"\n :readonly=\"readonly\"\n multiple\n clearable\n />\n </VCol>\n <VCol\n v-if=\"$slots.actions\"\n cols=\"12\"\n >\n <slot\n name=\"actions\"\n :user=\"user\"\n />\n </VCol>\n <VCol cols=\"12\">\n <APermissionEditor\n v-model=\"user.permissions\"\n :resolved-permissions=\"resolvedPermissions\"\n :roles=\"user.roles\"\n :client=\"client\"\n :system=\"system\"\n :readonly=\"readonly\"\n />\n </VCol>\n </VRow>\n </ASystemEntityScope>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeA,IAAM2B,IAAQC,GAmCRC,IAAO5B,EAAqB2B,GAAC,MAA0B,GAEvD,EAAE,SAAMG,EAAQ,GAGhB,EAAE,0BAAuBC,EAAqB;GAClD,QAAQL,EAAM;GACd,QAAQA,EAAM;GACd,UAAUA,EAAM;EAClB,CAAC,GAQKM,IAAsBC,QAAeC,EAAmBN,EAAK,KAAK,CAAC;E,kBAIvE3B,EAAA,GAAAC,EAoFqBC,GAAA;GAnFnB,QAAO;GACN,SAASC,EAAAkC,CAAA;;GAEV,SAAAjC,QA+EO,CA/EPC,EA+EOC,GAAA,MAAA;IA9EL,SAAAF,QAMO;KANPC,EAMOE,GAAA,EAND,MAAK,KAAI,GAAA;MACb,SAAAH,QAIE,CAJFC,EAIEG,GAAA;OAHS,YAAAmB,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,UAAOC;OACpB,UAAUjB,EAAA;OACV,MAAMA,EAAA;;;;;;;;KAGXrB,EAUOE,GAAA,EAVD,MAAK,KAAI,GAAA;MACb,SAAAH,QAQE,CARFC,EAQEI,GAAA;OAPQ,MAAMkB,EAAA;OAAA,iBAAA,AAAAe,EAAA,QAAA,MAAA,EAAI,QAAAC;OACjB,UAAUjB,EAAA;OACV,YAAUA,EAAA;OACV,WAASA,EAAA;OACT,UAAUA,EAAA;OACV,gBAAcA,EAAA;OACd,MAAMA,EAAA;;;;;;;;;;;;KAIHA,EAAA,UAAM,CAAKA,EAAA,YAAY5B,EAAAA,OAAO,mBADtCE,EAAA,GAAAC,EAMOM,GAAA;;MAJL,MAAK;;MAGL,SAAAH,QAA+B,CAA/BM,EAA+BkC,EAAA,QAAA,iBAAA,C;;;KAGzB9C,EAAAA,OAAO,gBADfE,EAAA,GAAAC,EAaOM,GAAA;;MAXL,MAAK;;MAML,SAAAH,QAIE,CAJFM,EAIEkC,EAAA,QAAA,gBAAA;OAFC,UAAUlB,EAAA;OACV,QAASA,EAAA;;;;KAGdrB,EAOOE,GAAA,EAPD,MAAK,KAAI,GAAA;MACb,SAAAH,QAKE,CALFC,EAKEO,GAAA;OAJS,YAAAe,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,QAAKC;OAClB,QAAQjB,EAAA;OACR,QAAQA,EAAA;OACR,UAAUA,EAAA;;;;;;;;;KAGfrB,EAWOE,GAAA,EAXD,MAAK,KAAI,GAAA;MACb,SAAAH,QASE,CATFC,EASEQ,GAAA;OARS,YAAAc,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,mBAAgBC;OAC7B,QAAQjB,EAAA;OACR,QAAQA,EAAA;OACR,aAAWA,EAAA;OACX,OAAOvB,EAAA4C,CAAA,CAAC,CAAA,wCAAA;OACR,UAAUrB,EAAA;OACX,UAAA;OACA,WAAA;;;;;;;;;;;KAII5B,EAAAA,OAAO,WADfE,EAAA,GAAAC,EAQOM,GAAA;;MANL,MAAK;;MAEL,SAAAH,QAGE,CAHFM,EAGEkC,EAAA,QAAA,WAAA,EADC,MAAMjB,EAAA,MAAI,CAAA,C;;;KAGftB,EASOE,GAAA,EATD,MAAK,KAAI,GAAA;MACb,SAAAH,QAOE,CAPFC,EAOES,GAAA;OANS,YAAAa,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,cAAWC;OACxB,wBAAsBZ,EAAA;OACtB,OAAOJ,EAAA,MAAK;OACZ,QAAQD,EAAA;OACR,QAAQA,EAAA;OACR,UAAUA,EAAA"}
1
+ {"version":3,"file":"AAnzuUserForm.vue_vue_type_script_setup_true_lang.js","names":["$slots","_useModel","_openBlock","_createBlock","ASystemEntityScope","_unref","_withCtx","_createVNode","_component_VRow","_component_VCol","AUserEnabledSwitch","AUserMetadataForm","_renderSlot","AAnzuUserRoleAutocomplete","APermissionGroupRemoteAutocomplete","APermissionEditor","ASystemEntityScope_default","AUserEnabledSwitch_default","AUserMetadataForm_default","AAnzuUserRoleAutocomplete_default","APermissionEditor_default","APermissionGroupRemoteAutocomplete_default","AAnzuUserForm_vue_vue_type_script_setup_true_lang_default","PERMISSION_GROUP_ENDPOINT","\"user\"","\"userModifiers\"","props","__props","user","useModel","useI18n","usePermissionActions","resolvedPermissions","computed","resolvePermissions","openBlock","createBlock","unref","ANZU_USER_ENTITY","withCtx","createVNode","VRow","VCol","_cache","$event","_ctx","renderSlot","createCommentVNode","t"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserForm.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport AUserEnabledSwitch from '@/domains/anzuUser/components/AUserEnabledSwitch.vue'\nimport AUserMetadataForm from '@/domains/anzuUser/components/AUserMetadataForm.vue'\nimport AAnzuUserRoleAutocomplete from '@/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue'\nimport { ANZU_USER_ENTITY } from '@/domains/anzuUser/api/anzuUserApi'\nimport APermissionEditor from '@/domains/permission/components/APermissionEditor.vue'\nimport { usePermissionActions } from '@/domains/permission/composables/permissionActions'\nimport APermissionGroupRemoteAutocomplete from '@/domains/permission/group/components/APermissionGroupRemoteAutocomplete.vue'\nimport { PERMISSION_GROUP_ENDPOINT } from '@/domains/permission/group/api/permissionGroupApi'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n system: string\n /**\n * The permission-group endpoint, which is not the user one.\n * There is deliberately no `entity` prop. `entity` names the resource that server validation\n * errors are filed under. Passing the user's down would file group errors under user labels.\n */\n permissionGroupEndPoint?: string\n /**\n * One component for detail and edit (decision 27). Two components drift:\n * a field added to one and forgotten in the other fails silently.\n */\n readonly?: boolean\n isEdit?: boolean\n /** From the system's descriptor. */\n requiredMetadata?: boolean\n idInput?: boolean\n randomColor?: boolean\n enabledNote?: string | undefined\n metadataNote?: string | undefined\n }>(),\n {\n permissionGroupEndPoint: PERMISSION_GROUP_ENDPOINT,\n readonly: false,\n isEdit: false,\n requiredMetadata: false,\n idInput: true,\n randomColor: false,\n enabledNote: undefined,\n metadataNote: undefined,\n }\n)\n\nconst user = defineModel<AnzuUser>('user', { required: true })\n\nconst { t } = useI18n()\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { resolvePermissions } = usePermissionActions({\n client: props.client,\n system: props.system,\n endPoint: props.permissionGroupEndPoint,\n})\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\n/**\n * Grants the account would have if saved now: those of the ticked groups plus the user's own.\n * Computed locally so ticking a group shows its effect without a round\n * trip. The server's `resolvedPermissions` reflects the record as loaded.\n */\nconst resolvedPermissions = computed(() => resolvePermissions(user.value))\n</script>\n\n<template>\n <ASystemEntityScope\n system=\"common\"\n :subject=\"ANZU_USER_ENTITY\"\n >\n <VRow>\n <VCol cols=\"12\">\n <AUserEnabledSwitch\n v-model=\"user.enabled\"\n :readonly=\"readonly\"\n :note=\"enabledNote\"\n />\n </VCol>\n <VCol cols=\"12\">\n <AUserMetadataForm\n v-model:user=\"user\"\n :required=\"requiredMetadata\"\n :id-input=\"idInput\"\n :is-edit=\"isEdit\"\n :readonly=\"readonly\"\n :random-color=\"randomColor\"\n :note=\"metadataNote\"\n />\n </VCol>\n <VCol\n v-if=\"isEdit && !readonly && $slots.copyPermissions\"\n cols=\"12\"\n >\n <!-- Copying roles and grants from another account. Only cms offers it today. -->\n <slot name=\"copyPermissions\" />\n </VCol>\n <VCol\n v-if=\"$slots.systemFields\"\n cols=\"12\"\n >\n <!--\n The system's own fields: autocompletes over that backend's entities, which the library\n cannot build. They get the same `readonly`, so the app can swap autocompletes for chips.\n -->\n <slot\n name=\"systemFields\"\n :readonly=\"readonly\"\n :is-edit=\"isEdit\"\n />\n </VCol>\n <VCol cols=\"12\">\n <AAnzuUserRoleAutocomplete\n v-model=\"user.roles\"\n :client=\"client\"\n :system=\"system\"\n :readonly=\"readonly\"\n />\n </VCol>\n <VCol cols=\"12\">\n <APermissionGroupRemoteAutocomplete\n v-model=\"user.permissionGroups\"\n :client=\"client\"\n :system=\"system\"\n :end-point=\"permissionGroupEndPoint\"\n :label=\"t('common.anzuUser.model.permissionGroups')\"\n :readonly=\"readonly\"\n multiple\n clearable\n />\n </VCol>\n <VCol\n v-if=\"$slots.actions\"\n cols=\"12\"\n >\n <slot\n name=\"actions\"\n :user=\"user\"\n />\n </VCol>\n <VCol cols=\"12\">\n <APermissionEditor\n v-model=\"user.permissions\"\n :resolved-permissions=\"resolvedPermissions\"\n :roles=\"user.roles\"\n :client=\"client\"\n :system=\"system\"\n :readonly=\"readonly\"\n />\n </VCol>\n </VRow>\n </ASystemEntityScope>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeA,IAAM0B,IAAQC,GAmCRC,IAAO3B,EAAqB0B,GAAC,MAA0B,GAEvD,EAAE,SAAMG,EAAQ,GAGhB,EAAE,0BAAuBC,EAAqB;GAClD,QAAQL,EAAM;GACd,QAAQA,EAAM;GACd,UAAUA,EAAM;EAClB,CAAC,GAQKM,IAAsBC,QAAeC,EAAmBN,EAAK,KAAK,CAAC;E,kBAIvE1B,EAAA,GAAAC,EAoFqBC,GAAA;GAnFnB,QAAO;GACN,SAASC,EAAAiC,CAAA;;GAEV,SAAAhC,QA+EO,CA/EPC,EA+EOC,GAAA,MAAA;IA9EL,SAAAF,QAMO;KANPC,EAMOE,GAAA,EAND,MAAK,KAAI,GAAA;MACb,SAAAH,QAIE,CAJFC,EAIEG,GAAA;OAHS,YAAAkB,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,UAAOC;OACpB,UAAUjB,EAAA;OACV,MAAMA,EAAA;;;;;;;;KAGXpB,EAUOE,GAAA,EAVD,MAAK,KAAI,GAAA;MACb,SAAAH,QAQE,CARFC,EAQEI,GAAA;OAPQ,MAAMiB,EAAA;OAAA,iBAAA,AAAAe,EAAA,QAAA,MAAA,EAAI,QAAAC;OACjB,UAAUjB,EAAA;OACV,YAAUA,EAAA;OACV,WAASA,EAAA;OACT,UAAUA,EAAA;OACV,gBAAcA,EAAA;OACd,MAAMA,EAAA;;;;;;;;;;;;KAIHA,EAAA,UAAM,CAAKA,EAAA,YAAY3B,EAAAA,OAAO,mBADtCE,EAAA,GAAAC,EAMOM,GAAA;;MAJL,MAAK;;MAGL,SAAAH,QAA+B,CAA/BM,EAA+BiC,EAAA,QAAA,iBAAA,C;;;KAGzB7C,EAAAA,OAAO,gBADfE,EAAA,GAAAC,EAaOM,GAAA;;MAXL,MAAK;;MAML,SAAAH,QAIE,CAJFM,EAIEiC,EAAA,QAAA,gBAAA;OAFC,UAAUlB,EAAA;OACV,QAASA,EAAA;;;;KAGdpB,EAOOE,GAAA,EAPD,MAAK,KAAI,GAAA;MACb,SAAAH,QAKE,CALFC,EAKEM,GAAA;OAJS,YAAAe,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,QAAKC;OAClB,QAAQjB,EAAA;OACR,QAAQA,EAAA;OACR,UAAUA,EAAA;;;;;;;;;KAGfpB,EAWOE,GAAA,EAXD,MAAK,KAAI,GAAA;MACb,SAAAH,QASE,CATFC,EASEO,GAAA;OARS,YAAAc,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,mBAAgBC;OAC7B,QAAQjB,EAAA;OACR,QAAQA,EAAA;OACR,aAAWA,EAAA;OACX,OAAOtB,EAAA2C,CAAA,CAAC,CAAA,wCAAA;OACR,UAAUrB,EAAA;OACX,UAAA;OACA,WAAA;;;;;;;;;;;KAII3B,EAAAA,OAAO,WADfE,EAAA,GAAAC,EAQOM,GAAA;;MANL,MAAK;;MAEL,SAAAH,QAGE,CAHFM,EAGEiC,EAAA,QAAA,WAAA,EADC,MAAMjB,EAAA,MAAI,CAAA,C;;;KAGfrB,EASOE,GAAA,EATD,MAAK,KAAI,GAAA;MACb,SAAAH,QAOE,CAPFC,EAOEQ,GAAA;OANS,YAAAa,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,cAAWC;OACxB,wBAAsBZ,EAAA;OACtB,OAAOJ,EAAA,MAAK;OACZ,QAAQD,EAAA;OACR,QAAQA,EAAA;OACR,UAAUA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"AAnzuUserRoleAutocomplete.js","names":["_sfc_main","AAnzuUserRoleAutocomplete_vue_vue_type_script_setup_true_lang_default","AAnzuUserRoleAutocomplete_default"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Roles are per backend: they come from that system's `/adm/v1/permissions/config`. */\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n readonly?: boolean\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n readonly: false,\n }\n)\n\nconst modelValue = defineModel<string[]>({ required: true })\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { permissionConfig, translatePermission } = 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 items = computed(() =>\n permissionConfig.value.roles.map((role) => ({\n title: translatePermission('roles', role),\n value: role,\n }))\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :items=\"items\"\n item-value=\"value\"\n item-title=\"title\"\n :label=\"t('common.anzuUser.model.roles')\"\n :readonly=\"readonly\"\n :clearable=\"!readonly\"\n multiple\n chips\n closable-chips\n hide-details\n autocomplete=\"off\"\n data-cy=\"user-roles\"\n >\n <!-- Custom chip so its close button is labelled as removing the role. -->\n <template #chip=\"{ props: chipProps }\">\n <VChip\n v-bind=\"chipProps\"\n close-label=\"common.button.remove\"\n />\n </template>\n </VAutocomplete>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AAnzuUserRoleAutocomplete.js","names":["AAnzuUserRoleAutocomplete_vue_vue_type_script_setup_true_lang_default","AAnzuUserRoleAutocomplete_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserBulkActionDialog.js","names":["_sfc_main","AUserBulkActionDialog_vue_vue_type_script_setup_true_lang_default","AUserBulkActionDialog_default"],"sources":["../../../../src/domains/anzuUser/components/AUserBulkActionDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport AUserSystemStatusChip from '@/domains/anzuUser/components/AUserSystemStatusChip.vue'\nimport {\n BulkAction,\n BulkOutcome,\n useUserCrossSystemStore,\n type BulkActionType,\n} from '@/domains/anzuUser/store/userCrossSystemStore'\nimport { type AnyUserSystemDescriptor, descriptorMayWrite } from '@/domains/anzuUser/composables/userSystemDescriptor'\nimport { isActionable, UserSystemAccess } from '@/domains/anzuUser/utils/userSystemState'\nimport { isUndefined } from '@/shared/utils/common'\n\nconst props = defineProps<{\n action: BulkActionType\n descriptors: AnyUserSystemDescriptor[]\n}>()\n\nconst emit = defineEmits<{\n (e: 'run', systems: string[]): void\n}>()\n\nconst open = defineModel<boolean>('open', { required: true })\n\nconst { t } = useI18n()\nconst store = useUserCrossSystemStore()\n\nconst selected = ref<string[]>([])\nconst showingLog = ref(false)\n\ninterface Row {\n descriptor: AnyUserSystemDescriptor\n selectable: boolean\n reason: string | null\n}\n\n/**\n * Which systems can be ticked is decided by the probe, not by ACL.\n * No current user is loaded for the other backends, so `<Acl>` would return false everywhere.\n * Not selectable: systems the probe reports as 403, 404 or switched off, and systems that did not answer.\n * Read-but-not-write cannot be seen here and ends up as a 403 in the log.\n */\nconst rows = computed<Row[]>(() =>\n props.descriptors.map((descriptor) => {\n const result = store.results.get(descriptor.system)\n if (!descriptor.isEnabled()) {\n return { descriptor, selectable: false, reason: t('common.userSystem.state.configDisabled') }\n }\n if (!descriptorMayWrite(descriptor, 'update')) {\n return { descriptor, selectable: false, reason: t('common.userSystem.state.noWriteRight') }\n }\n if (isUndefined(result) || !isActionable(result.axes)) {\n const access = result?.axes.access\n const reason =\n access === UserSystemAccess.Forbidden\n ? t('common.userSystem.state.forbidden')\n : access === UserSystemAccess.Ok\n ? t('common.userSystem.state.absent')\n : t('common.userSystem.state.unavailable')\n return { descriptor, selectable: false, reason }\n }\n // Already in the target state. A no-op PUT would still run `updateRelations()` in cms over many fields, so skip it.\n if (props.action === BulkAction.Enable && result.axes.enabled === true) {\n return { descriptor, selectable: false, reason: t('common.userSystem.bulk.alreadyInState') }\n }\n if (props.action === BulkAction.Disable && result.axes.enabled === false) {\n return { descriptor, selectable: false, reason: t('common.userSystem.bulk.alreadyInState') }\n }\n return { descriptor, selectable: true, reason: null }\n })\n)\n\nconst selectableSystems = computed(() => rows.value.filter((row) => row.selectable).map((row) => row.descriptor.system))\n\n// Tick everything actionable, blog and forum included. A departing employee is almost always switched off there too.\n// Their row note stays as information, not as a reason to untick.\nwatch(\n open,\n (value) => {\n if (!value) return\n showingLog.value = false\n selected.value = [...selectableSystems.value]\n },\n { immediate: true }\n)\n\nconst titleKey = computed(() => `common.userSystem.bulk.${props.action}.title`)\nconst confirmKey = computed(() => `common.userSystem.bulk.${props.action}.confirm`)\n\n/**\n * Only this run's entries. The log outlives a run, so without the filter the dialog would offer\n * to retry other actions' failures, such as a metadata repair, against the account on screen.\n */\nconst currentLog = computed(() =>\n store.bulkLog.filter((entry) => entry.action === props.action && entry.subjectId === store.resolvedId)\n)\n\nconst failed = computed(() =>\n currentLog.value.filter((entry) => entry.outcome !== BulkOutcome.Done && entry.outcome !== BulkOutcome.Pending)\n)\n\n// Re-check selectability: a right may have been granted or revoked while the dialog was open.\nconst actionable = computed(() => selected.value.filter((system) => selectableSystems.value.includes(system)))\n\nconst run = () => {\n if (actionable.value.length === 0) return\n showingLog.value = true\n emit('run', actionable.value)\n}\n\n/** Retries everything that failed, 403 included: the operator may have been granted the right meanwhile. */\nconst retryFailed = () => {\n emit(\n 'run',\n failed.value.map((entry) => entry.system)\n )\n}\n\nconst labelFor = (descriptor: AnyUserSystemDescriptor) => descriptor.label ?? descriptor.system\n</script>\n\n<template>\n <VDialog\n v-model=\"open\"\n :max-width=\"720\"\n data-cy=\"user-bulk-dialog\"\n >\n <VCard>\n <!-- Closing while the calls are still going is allowed; the run lives in the store. -->\n <ADialogToolbar @cancel=\"open = false\">\n {{ t(titleKey) }}\n </ADialogToolbar>\n <VCardText v-if=\"!showingLog\">\n <VAlert\n v-if=\"store.identityConflict\"\n type=\"error\"\n variant=\"tonal\"\n density=\"compact\"\n class=\"mb-3\"\n >\n {{ t('common.userSystem.search.identityConflict') }}\n </VAlert>\n <div\n v-for=\"row in rows\"\n :key=\"row.descriptor.system\"\n class=\"d-flex align-center ga-2 py-1\"\n >\n <VCheckbox\n v-model=\"selected\"\n :value=\"row.descriptor.system\"\n :disabled=\"!row.selectable || !!store.identityConflict\"\n :data-cy=\"`bulk-system-${row.descriptor.system}`\"\n density=\"compact\"\n hide-details\n />\n <div class=\"font-weight-medium\">{{ labelFor(row.descriptor) }}</div>\n <AUserSystemStatusChip\n v-if=\"store.results.get(row.descriptor.system)\"\n :axes=\"store.results.get(row.descriptor.system)!.axes\"\n />\n <div\n v-if=\"row.reason\"\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ row.reason }}\n </div>\n <div\n v-if=\"row.descriptor.enabledNote && action !== BulkAction.Metadata\"\n class=\"text-body-small text-warning w-100\"\n >\n {{ row.descriptor.enabledNote }}\n </div>\n <div\n v-if=\"row.descriptor.metadataNote && action === BulkAction.Metadata\"\n class=\"text-body-small text-warning w-100\"\n >\n {{ row.descriptor.metadataNote }}\n </div>\n </div>\n </VCardText>\n <VCardText v-else>\n <div class=\"text-label-large mb-2\">{{ t('common.userSystem.bulk.log') }}</div>\n <!--\n `polite`, not `assertive`: nine systems finishing in sequence would flood a screen reader.\n Focus deliberately stays put when the dialog switches to this view.\n -->\n <div\n aria-live=\"polite\"\n data-cy=\"user-bulk-log\"\n >\n <div\n v-for=\"entry in currentLog\"\n :key=\"entry.system\"\n class=\"d-flex align-center ga-2 py-1\"\n >\n <div class=\"font-weight-medium\">{{ entry.system }}</div>\n <div class=\"text-body-small\">{{ t(`common.userSystem.bulk.outcome.${entry.outcome}`) }}</div>\n <div\n v-if=\"entry.detail\"\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ entry.detail }}\n </div>\n </div>\n </div>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"open = false\">\n {{ showingLog ? t('common.userSystem.bulk.close') : t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnTertiary\n v-if=\"showingLog && failed.length > 0 && !store.bulkRunning\"\n data-cy=\"user-bulk-retry\"\n @click.stop=\"retryFailed\"\n >\n {{ t('common.userSystem.bulk.retryFailed') }}\n </ABtnTertiary>\n <ABtnPrimary\n v-if=\"!showingLog\"\n :disabled=\"actionable.length === 0 || !!store.identityConflict\"\n data-cy=\"user-bulk-confirm\"\n @click.stop=\"run\"\n >\n {{ t(confirmKey, { count: actionable.length }, actionable.length) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AUserBulkActionDialog.js","names":["AUserBulkActionDialog_vue_vue_type_script_setup_true_lang_default","AUserBulkActionDialog_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_resolveComponent","_openBlock","_createBlock","_component_VDialog","_withCtx","_createVNode","_component_VCard","ADialogToolbar","_createTextVNode","_toDisplayString","_unref","_component_VCardText","_component_VAlert","_createCommentVNode","_createElementBlock","_Fragment","_renderList","_component_VCheckbox","_createElementVNode","AUserSystemStatusChip","_component_VCardActions","_withModifiers","_component_VSpacer","ADialogToolbar_default","AUserSystemStatusChip_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","AUserBulkActionDialog_vue_vue_type_script_setup_true_lang_default","\"open\"","\"openModifiers\"","__emit","props","__props","emit","open","useModel","useI18n","store","useUserCrossSystemStore","selected","ref","showingLog","rows","computed","result","descriptor","t","descriptorMayWrite","isUndefined","isActionable","access","UserSystemAccess","BulkAction","selectableSystems","row","value","titleKey","confirmKey","currentLog","entry","failed","BulkOutcome","actionable","system","run","retryFailed","labelFor","_component_ABtnTertiary","resolveComponent","_component_ABtnPrimary","openBlock","createBlock","VDialog","_cache","$event","withCtx","createVNode","VCard","createTextVNode","toDisplayString","unref","VCardText","createElementVNode","createElementBlock","Fragment","renderList","createCommentVNode","VAlert","VCheckbox","VCardActions","withModifiers","VSpacer"],"sources":["../../../../src/domains/anzuUser/components/AUserBulkActionDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport AUserSystemStatusChip from '@/domains/anzuUser/components/AUserSystemStatusChip.vue'\nimport {\n BulkAction,\n BulkOutcome,\n useUserCrossSystemStore,\n type BulkActionType,\n} from '@/domains/anzuUser/store/userCrossSystemStore'\nimport { type AnyUserSystemDescriptor, descriptorMayWrite } from '@/domains/anzuUser/composables/userSystemDescriptor'\nimport { isActionable, UserSystemAccess } from '@/domains/anzuUser/utils/userSystemState'\nimport { isUndefined } from '@/shared/utils/common'\n\nconst props = defineProps<{\n action: BulkActionType\n descriptors: AnyUserSystemDescriptor[]\n}>()\n\nconst emit = defineEmits<{\n (e: 'run', systems: string[]): void\n}>()\n\nconst open = defineModel<boolean>('open', { required: true })\n\nconst { t } = useI18n()\nconst store = useUserCrossSystemStore()\n\nconst selected = ref<string[]>([])\nconst showingLog = ref(false)\n\ninterface Row {\n descriptor: AnyUserSystemDescriptor\n selectable: boolean\n reason: string | null\n}\n\n/**\n * Which systems can be ticked is decided by the probe, not by ACL.\n * No current user is loaded for the other backends, so `<Acl>` would return false everywhere.\n * Not selectable: systems the probe reports as 403, 404 or switched off, and systems that did not answer.\n * Read-but-not-write cannot be seen here and ends up as a 403 in the log.\n */\nconst rows = computed<Row[]>(() =>\n props.descriptors.map((descriptor) => {\n const result = store.results.get(descriptor.system)\n if (!descriptor.isEnabled()) {\n return { descriptor, selectable: false, reason: t('common.userSystem.state.configDisabled') }\n }\n if (!descriptorMayWrite(descriptor, 'update')) {\n return { descriptor, selectable: false, reason: t('common.userSystem.state.noWriteRight') }\n }\n if (isUndefined(result) || !isActionable(result.axes)) {\n const access = result?.axes.access\n const reason =\n access === UserSystemAccess.Forbidden\n ? t('common.userSystem.state.forbidden')\n : access === UserSystemAccess.Ok\n ? t('common.userSystem.state.absent')\n : t('common.userSystem.state.unavailable')\n return { descriptor, selectable: false, reason }\n }\n // Already in the target state. A no-op PUT would still run `updateRelations()` in cms over many fields, so skip it.\n if (props.action === BulkAction.Enable && result.axes.enabled === true) {\n return { descriptor, selectable: false, reason: t('common.userSystem.bulk.alreadyInState') }\n }\n if (props.action === BulkAction.Disable && result.axes.enabled === false) {\n return { descriptor, selectable: false, reason: t('common.userSystem.bulk.alreadyInState') }\n }\n return { descriptor, selectable: true, reason: null }\n })\n)\n\nconst selectableSystems = computed(() => rows.value.filter((row) => row.selectable).map((row) => row.descriptor.system))\n\n// Tick everything actionable, blog and forum included. A departing employee is almost always switched off there too.\n// Their row note stays as information, not as a reason to untick.\nwatch(\n open,\n (value) => {\n if (!value) return\n showingLog.value = false\n selected.value = [...selectableSystems.value]\n },\n { immediate: true }\n)\n\nconst titleKey = computed(() => `common.userSystem.bulk.${props.action}.title`)\nconst confirmKey = computed(() => `common.userSystem.bulk.${props.action}.confirm`)\n\n/**\n * Only this run's entries. The log outlives a run, so without the filter the dialog would offer\n * to retry other actions' failures, such as a metadata repair, against the account on screen.\n */\nconst currentLog = computed(() =>\n store.bulkLog.filter((entry) => entry.action === props.action && entry.subjectId === store.resolvedId)\n)\n\nconst failed = computed(() =>\n currentLog.value.filter((entry) => entry.outcome !== BulkOutcome.Done && entry.outcome !== BulkOutcome.Pending)\n)\n\n// Re-check selectability: a right may have been granted or revoked while the dialog was open.\nconst actionable = computed(() => selected.value.filter((system) => selectableSystems.value.includes(system)))\n\nconst run = () => {\n if (actionable.value.length === 0) return\n showingLog.value = true\n emit('run', actionable.value)\n}\n\n/** Retries everything that failed, 403 included: the operator may have been granted the right meanwhile. */\nconst retryFailed = () => {\n emit(\n 'run',\n failed.value.map((entry) => entry.system)\n )\n}\n\nconst labelFor = (descriptor: AnyUserSystemDescriptor) => descriptor.label ?? descriptor.system\n</script>\n\n<template>\n <VDialog\n v-model=\"open\"\n :max-width=\"720\"\n data-cy=\"user-bulk-dialog\"\n >\n <VCard>\n <!-- Closing while the calls are still going is allowed; the run lives in the store. -->\n <ADialogToolbar @cancel=\"open = false\">\n {{ t(titleKey) }}\n </ADialogToolbar>\n <VCardText v-if=\"!showingLog\">\n <VAlert\n v-if=\"store.identityConflict\"\n type=\"error\"\n variant=\"tonal\"\n density=\"compact\"\n class=\"mb-3\"\n >\n {{ t('common.userSystem.search.identityConflict') }}\n </VAlert>\n <div\n v-for=\"row in rows\"\n :key=\"row.descriptor.system\"\n class=\"d-flex align-center ga-2 py-1\"\n >\n <VCheckbox\n v-model=\"selected\"\n :value=\"row.descriptor.system\"\n :disabled=\"!row.selectable || !!store.identityConflict\"\n :data-cy=\"`bulk-system-${row.descriptor.system}`\"\n density=\"compact\"\n hide-details\n />\n <div class=\"font-weight-medium\">{{ labelFor(row.descriptor) }}</div>\n <AUserSystemStatusChip\n v-if=\"store.results.get(row.descriptor.system)\"\n :axes=\"store.results.get(row.descriptor.system)!.axes\"\n />\n <div\n v-if=\"row.reason\"\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ row.reason }}\n </div>\n <div\n v-if=\"row.descriptor.enabledNote && action !== BulkAction.Metadata\"\n class=\"text-body-small text-warning w-100\"\n >\n {{ row.descriptor.enabledNote }}\n </div>\n <div\n v-if=\"row.descriptor.metadataNote && action === BulkAction.Metadata\"\n class=\"text-body-small text-warning w-100\"\n >\n {{ row.descriptor.metadataNote }}\n </div>\n </div>\n </VCardText>\n <VCardText v-else>\n <div class=\"text-label-large mb-2\">{{ t('common.userSystem.bulk.log') }}</div>\n <!--\n `polite`, not `assertive`: nine systems finishing in sequence would flood a screen reader.\n Focus deliberately stays put when the dialog switches to this view.\n -->\n <div\n aria-live=\"polite\"\n data-cy=\"user-bulk-log\"\n >\n <div\n v-for=\"entry in currentLog\"\n :key=\"entry.system\"\n class=\"d-flex align-center ga-2 py-1\"\n >\n <div class=\"font-weight-medium\">{{ entry.system }}</div>\n <div class=\"text-body-small\">{{ t(`common.userSystem.bulk.outcome.${entry.outcome}`) }}</div>\n <div\n v-if=\"entry.detail\"\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ entry.detail }}\n </div>\n </div>\n </div>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"open = false\">\n {{ showingLog ? t('common.userSystem.bulk.close') : t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnTertiary\n v-if=\"showingLog && failed.length > 0 && !store.bulkRunning\"\n data-cy=\"user-bulk-retry\"\n @click.stop=\"retryFailed\"\n >\n {{ t('common.userSystem.bulk.retryFailed') }}\n </ABtnTertiary>\n <ABtnPrimary\n v-if=\"!showingLog\"\n :disabled=\"actionable.length === 0 || !!store.identityConflict\"\n data-cy=\"user-bulk-confirm\"\n @click.stop=\"run\"\n >\n {{ t(confirmKey, { count: actionable.length }, actionable.length) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","_component_VDialog","_withCtx","_createVNode","_component_VCard","ADialogToolbar","_createTextVNode","_toDisplayString","_unref","_component_VCardText","_component_VAlert","_createElementBlock","_Fragment","_renderList","_component_VCheckbox","_createElementVNode","AUserSystemStatusChip","_component_VCardActions","_withModifiers","_component_VSpacer","ADialogToolbar_default","AUserSystemStatusChip_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","AUserBulkActionDialog_vue_vue_type_script_setup_true_lang_default","\"open\"","\"openModifiers\"","__emit","props","__props","emit","open","useModel","useI18n","store","useUserCrossSystemStore","selected","ref","showingLog","rows","computed","result","descriptor","t","descriptorMayWrite","isUndefined","isActionable","access","UserSystemAccess","BulkAction","selectableSystems","row","value","titleKey","confirmKey","currentLog","entry","failed","BulkOutcome","actionable","system","run","retryFailed","labelFor","_component_ABtnTertiary","resolveComponent","_component_ABtnPrimary","openBlock","createBlock","VDialog","_cache","$event","withCtx","createVNode","VCard","createTextVNode","toDisplayString","unref","VCardText","createElementVNode","createElementBlock","Fragment","renderList","createCommentVNode","VAlert","VCheckbox","VCardActions","withModifiers","VSpacer"],"sources":["../../../../src/domains/anzuUser/components/AUserBulkActionDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport AUserSystemStatusChip from '@/domains/anzuUser/components/AUserSystemStatusChip.vue'\nimport {\n BulkAction,\n BulkOutcome,\n useUserCrossSystemStore,\n type BulkActionType,\n} from '@/domains/anzuUser/store/userCrossSystemStore'\nimport { type AnyUserSystemDescriptor, descriptorMayWrite } from '@/domains/anzuUser/composables/userSystemDescriptor'\nimport { isActionable, UserSystemAccess } from '@/domains/anzuUser/utils/userSystemState'\nimport { isUndefined } from '@/shared/utils/common'\n\nconst props = defineProps<{\n action: BulkActionType\n descriptors: AnyUserSystemDescriptor[]\n}>()\n\nconst emit = defineEmits<{\n (e: 'run', systems: string[]): void\n}>()\n\nconst open = defineModel<boolean>('open', { required: true })\n\nconst { t } = useI18n()\nconst store = useUserCrossSystemStore()\n\nconst selected = ref<string[]>([])\nconst showingLog = ref(false)\n\ninterface Row {\n descriptor: AnyUserSystemDescriptor\n selectable: boolean\n reason: string | null\n}\n\n/**\n * Which systems can be ticked is decided by the probe, not by ACL.\n * No current user is loaded for the other backends, so `<Acl>` would return false everywhere.\n * Not selectable: systems the probe reports as 403, 404 or switched off, and systems that did not answer.\n * Read-but-not-write cannot be seen here and ends up as a 403 in the log.\n */\nconst rows = computed<Row[]>(() =>\n props.descriptors.map((descriptor) => {\n const result = store.results.get(descriptor.system)\n if (!descriptor.isEnabled()) {\n return { descriptor, selectable: false, reason: t('common.userSystem.state.configDisabled') }\n }\n if (!descriptorMayWrite(descriptor, 'update')) {\n return { descriptor, selectable: false, reason: t('common.userSystem.state.noWriteRight') }\n }\n if (isUndefined(result) || !isActionable(result.axes)) {\n const access = result?.axes.access\n const reason =\n access === UserSystemAccess.Forbidden\n ? t('common.userSystem.state.forbidden')\n : access === UserSystemAccess.Ok\n ? t('common.userSystem.state.absent')\n : t('common.userSystem.state.unavailable')\n return { descriptor, selectable: false, reason }\n }\n // Already in the target state. A no-op PUT would still run `updateRelations()` in cms over many fields, so skip it.\n if (props.action === BulkAction.Enable && result.axes.enabled === true) {\n return { descriptor, selectable: false, reason: t('common.userSystem.bulk.alreadyInState') }\n }\n if (props.action === BulkAction.Disable && result.axes.enabled === false) {\n return { descriptor, selectable: false, reason: t('common.userSystem.bulk.alreadyInState') }\n }\n return { descriptor, selectable: true, reason: null }\n })\n)\n\nconst selectableSystems = computed(() => rows.value.filter((row) => row.selectable).map((row) => row.descriptor.system))\n\n// Tick everything actionable, blog and forum included. A departing employee is almost always switched off there too.\n// Their row note stays as information, not as a reason to untick.\nwatch(\n open,\n (value) => {\n if (!value) return\n showingLog.value = false\n selected.value = [...selectableSystems.value]\n },\n { immediate: true }\n)\n\nconst titleKey = computed(() => `common.userSystem.bulk.${props.action}.title`)\nconst confirmKey = computed(() => `common.userSystem.bulk.${props.action}.confirm`)\n\n/**\n * Only this run's entries. The log outlives a run, so without the filter the dialog would offer\n * to retry other actions' failures, such as a metadata repair, against the account on screen.\n */\nconst currentLog = computed(() =>\n store.bulkLog.filter((entry) => entry.action === props.action && entry.subjectId === store.resolvedId)\n)\n\nconst failed = computed(() =>\n currentLog.value.filter((entry) => entry.outcome !== BulkOutcome.Done && entry.outcome !== BulkOutcome.Pending)\n)\n\n// Re-check selectability: a right may have been granted or revoked while the dialog was open.\nconst actionable = computed(() => selected.value.filter((system) => selectableSystems.value.includes(system)))\n\nconst run = () => {\n if (actionable.value.length === 0) return\n showingLog.value = true\n emit('run', actionable.value)\n}\n\n/** Retries everything that failed, 403 included: the operator may have been granted the right meanwhile. */\nconst retryFailed = () => {\n emit(\n 'run',\n failed.value.map((entry) => entry.system)\n )\n}\n\nconst labelFor = (descriptor: AnyUserSystemDescriptor) => descriptor.label ?? descriptor.system\n</script>\n\n<template>\n <VDialog\n v-model=\"open\"\n :max-width=\"720\"\n data-cy=\"user-bulk-dialog\"\n >\n <VCard>\n <!-- Closing while the calls are still going is allowed; the run lives in the store. -->\n <ADialogToolbar @cancel=\"open = false\">\n {{ t(titleKey) }}\n </ADialogToolbar>\n <VCardText v-if=\"!showingLog\">\n <VAlert\n v-if=\"store.identityConflict\"\n type=\"error\"\n variant=\"tonal\"\n density=\"compact\"\n class=\"mb-3\"\n >\n {{ t('common.userSystem.search.identityConflict') }}\n </VAlert>\n <div\n v-for=\"row in rows\"\n :key=\"row.descriptor.system\"\n class=\"d-flex align-center ga-2 py-1\"\n >\n <VCheckbox\n v-model=\"selected\"\n :value=\"row.descriptor.system\"\n :disabled=\"!row.selectable || !!store.identityConflict\"\n :data-cy=\"`bulk-system-${row.descriptor.system}`\"\n density=\"compact\"\n hide-details\n />\n <div class=\"font-weight-medium\">{{ labelFor(row.descriptor) }}</div>\n <AUserSystemStatusChip\n v-if=\"store.results.get(row.descriptor.system)\"\n :axes=\"store.results.get(row.descriptor.system)!.axes\"\n />\n <div\n v-if=\"row.reason\"\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ row.reason }}\n </div>\n <div\n v-if=\"row.descriptor.enabledNote && action !== BulkAction.Metadata\"\n class=\"text-body-small text-warning w-100\"\n >\n {{ row.descriptor.enabledNote }}\n </div>\n <div\n v-if=\"row.descriptor.metadataNote && action === BulkAction.Metadata\"\n class=\"text-body-small text-warning w-100\"\n >\n {{ row.descriptor.metadataNote }}\n </div>\n </div>\n </VCardText>\n <VCardText v-else>\n <div class=\"text-label-large mb-2\">{{ t('common.userSystem.bulk.log') }}</div>\n <!--\n `polite`, not `assertive`: nine systems finishing in sequence would flood a screen reader.\n Focus deliberately stays put when the dialog switches to this view.\n -->\n <div\n aria-live=\"polite\"\n data-cy=\"user-bulk-log\"\n >\n <div\n v-for=\"entry in currentLog\"\n :key=\"entry.system\"\n class=\"d-flex align-center ga-2 py-1\"\n >\n <div class=\"font-weight-medium\">{{ entry.system }}</div>\n <div class=\"text-body-small\">{{ t(`common.userSystem.bulk.outcome.${entry.outcome}`) }}</div>\n <div\n v-if=\"entry.detail\"\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ entry.detail }}\n </div>\n </div>\n </div>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"open = false\">\n {{ showingLog ? t('common.userSystem.bulk.close') : t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnTertiary\n v-if=\"showingLog && failed.length > 0 && !store.bulkRunning\"\n data-cy=\"user-bulk-retry\"\n @click.stop=\"retryFailed\"\n >\n {{ t('common.userSystem.bulk.retryFailed') }}\n </ABtnTertiary>\n <ABtnPrimary\n v-if=\"!showingLog\"\n :disabled=\"actionable.length === 0 || !!store.identityConflict\"\n data-cy=\"user-bulk-confirm\"\n @click.stop=\"run\"\n >\n {{ t(confirmKey, { count: actionable.length }, actionable.length) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserCopyPermissionsDialog.js","names":["_sfc_main","AUserCopyPermissionsDialog_vue_vue_type_script_setup_true_lang_default","AUserCopyPermissionsDialog_default"],"sources":["../../../../src/domains/anzuUser/components/AUserCopyPermissionsDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TUser extends Pick<AnzuUser, 'roles' | 'permissionGroups' | 'permissions'>\">\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\n// `ABtnPrimary` / `ABtnTertiary` are Vuetify aliases registered globally by\n// `commonVuetifyConfig`, so they are not imported.\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { cloneDeep, isNull } from '@/shared/utils/common'\n\nconst props = defineProps<{\n /**\n * Reads the source account from the server. A prop because the user shape differs per system (cms\n * `CmsUserDto`, dam `DamUserDto`), and the page already has an api instance for the right backend.\n */\n fetchSourceUser: (id: number) => Promise<AnzuUser>\n /**\n * Copies whatever the system keeps beyond roles, groups and grants. cms has nineteen such\n * fields; systems with none leave this out.\n */\n copySystemFields?: ((target: TUser, source: AnzuUser) => void) | undefined\n /** i18n keys listed in the dialog, so the operator sees exactly what will be overwritten. */\n copiedSettingKeys?: string[]\n}>()\n\n// Typed `TUser` with only the overwritten fields, because a wizard\n// holds a system's permissions without the rest of the account.\nconst user = defineModel<TUser>('user', { required: true })\n\nconst dialog = ref(false)\nconst loading = ref(false)\nconst srcUserId = ref<IntegerIdNullable>(null)\n\nconst { t } = useI18n()\nconst { showErrorsDefault } = useAlerts()\n\nconst showDialog = () => {\n srcUserId.value = null\n dialog.value = true\n}\n\nconst confirmDialog = async () => {\n if (isNull(srcUserId.value)) return\n loading.value = true\n try {\n const source = await props.fetchSourceUser(srcUserId.value)\n user.value.roles = cloneDeep(source.roles)\n user.value.permissionGroups = cloneDeep(source.permissionGroups)\n user.value.permissions = cloneDeep(source.permissions)\n props.copySystemFields?.(user.value, source)\n dialog.value = false\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n loading.value = false\n }\n}\n</script>\n\n<template>\n <div>\n <p class=\"text-body-small\">\n {{ t('common.anzuUser.copyPermissions.desc') }}\n </p>\n <div class=\"text-right\">\n <ABtnTertiary\n size=\"small\"\n data-cy=\"user-copy-permissions\"\n @click.stop=\"showDialog\"\n >\n {{ t('common.anzuUser.copyPermissions.title') }}\n </ABtnTertiary>\n </div>\n <VDialog\n v-if=\"dialog\"\n :model-value=\"dialog\"\n :max-width=\"900\"\n >\n <VCard>\n <ADialogToolbar @cancel=\"dialog = false\">\n {{ t('common.anzuUser.copyPermissions.title') }}\n </ADialogToolbar>\n <VCardText>\n <!-- Whose account to copy from. The app owns the picker: it knows its own user list. -->\n <slot\n name=\"sourcePicker\"\n :select=\"(id: IntegerIdNullable) => (srcUserId = id)\"\n :selected=\"srcUserId\"\n />\n <strong>{{ t('common.anzuUser.copyPermissions.copiedSettings') }}</strong>\n <ul class=\"ml-5 text-body-small\">\n <li>{{ t('common.anzuUser.model.roles') }}</li>\n <li>{{ t('common.anzuUser.model.permissionGroups') }}</li>\n <li>{{ t('common.anzuUser.model.permissions') }}</li>\n <li\n v-for=\"key in copiedSettingKeys\"\n :key=\"key\"\n >\n {{ t(key) }}\n </li>\n </ul>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"dialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"isNull(srcUserId)\"\n :loading=\"loading\"\n data-cy=\"user-copy-permissions-confirm\"\n @click.stop=\"confirmDialog\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AUserCopyPermissionsDialog.js","names":["AUserCopyPermissionsDialog_vue_vue_type_script_setup_true_lang_default","AUserCopyPermissionsDialog_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserCopyPermissionsDialog.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_resolveComponent","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_createVNode","_withModifiers","_withCtx","_createTextVNode","_createBlock","_component_VDialog","_component_VCard","ADialogToolbar","_component_VCardText","_renderSlot","_Fragment","_renderList","_component_VCardActions","_component_VSpacer","_createCommentVNode","ADialogToolbar_default","_hoisted_1","_hoisted_2","_hoisted_3","AUserCopyPermissionsDialog_vue_vue_type_script_setup_true_lang_default","\"user\"","\"userModifiers\"","props","__props","user","useModel","dialog","ref","loading","srcUserId","useI18n","useAlerts","showDialog","confirmDialog","source","cloneDeep","error","_component_ABtnTertiary","resolveComponent","_component_ABtnPrimary","openBlock","createElementBlock","createElementVNode","toDisplayString","unref","t","createVNode","withModifiers","withCtx","createTextVNode","createBlock","VDialog","VCard","_cache","VCardText","renderSlot","_ctx","id","Fragment","renderList","key","VCardActions","VSpacer","isNull","createCommentVNode"],"sources":["../../../../src/domains/anzuUser/components/AUserCopyPermissionsDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TUser extends Pick<AnzuUser, 'roles' | 'permissionGroups' | 'permissions'>\">\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\n// `ABtnPrimary` / `ABtnTertiary` are Vuetify aliases registered globally by\n// `commonVuetifyConfig`, so they are not imported.\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { cloneDeep, isNull } from '@/shared/utils/common'\n\nconst props = defineProps<{\n /**\n * Reads the source account from the server. A prop because the user shape differs per system (cms\n * `CmsUserDto`, dam `DamUserDto`), and the page already has an api instance for the right backend.\n */\n fetchSourceUser: (id: number) => Promise<AnzuUser>\n /**\n * Copies whatever the system keeps beyond roles, groups and grants. cms has nineteen such\n * fields; systems with none leave this out.\n */\n copySystemFields?: ((target: TUser, source: AnzuUser) => void) | undefined\n /** i18n keys listed in the dialog, so the operator sees exactly what will be overwritten. */\n copiedSettingKeys?: string[]\n}>()\n\n// Typed `TUser` with only the overwritten fields, because a wizard\n// holds a system's permissions without the rest of the account.\nconst user = defineModel<TUser>('user', { required: true })\n\nconst dialog = ref(false)\nconst loading = ref(false)\nconst srcUserId = ref<IntegerIdNullable>(null)\n\nconst { t } = useI18n()\nconst { showErrorsDefault } = useAlerts()\n\nconst showDialog = () => {\n srcUserId.value = null\n dialog.value = true\n}\n\nconst confirmDialog = async () => {\n if (isNull(srcUserId.value)) return\n loading.value = true\n try {\n const source = await props.fetchSourceUser(srcUserId.value)\n user.value.roles = cloneDeep(source.roles)\n user.value.permissionGroups = cloneDeep(source.permissionGroups)\n user.value.permissions = cloneDeep(source.permissions)\n props.copySystemFields?.(user.value, source)\n dialog.value = false\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n loading.value = false\n }\n}\n</script>\n\n<template>\n <div>\n <p class=\"text-body-small\">\n {{ t('common.anzuUser.copyPermissions.desc') }}\n </p>\n <div class=\"text-right\">\n <ABtnTertiary\n size=\"small\"\n data-cy=\"user-copy-permissions\"\n @click.stop=\"showDialog\"\n >\n {{ t('common.anzuUser.copyPermissions.title') }}\n </ABtnTertiary>\n </div>\n <VDialog\n v-if=\"dialog\"\n :model-value=\"dialog\"\n :max-width=\"900\"\n >\n <VCard>\n <ADialogToolbar @cancel=\"dialog = false\">\n {{ t('common.anzuUser.copyPermissions.title') }}\n </ADialogToolbar>\n <VCardText>\n <!-- Whose account to copy from. The app owns the picker: it knows its own user list. -->\n <slot\n name=\"sourcePicker\"\n :select=\"(id: IntegerIdNullable) => (srcUserId = id)\"\n :selected=\"srcUserId\"\n />\n <strong>{{ t('common.anzuUser.copyPermissions.copiedSettings') }}</strong>\n <ul class=\"ml-5 text-body-small\">\n <li>{{ t('common.anzuUser.model.roles') }}</li>\n <li>{{ t('common.anzuUser.model.permissionGroups') }}</li>\n <li>{{ t('common.anzuUser.model.permissions') }}</li>\n <li\n v-for=\"key in copiedSettingKeys\"\n :key=\"key\"\n >\n {{ t(key) }}\n </li>\n </ul>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"dialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"isNull(srcUserId)\"\n :loading=\"loading\"\n data-cy=\"user-copy-permissions-confirm\"\n @click.stop=\"confirmDialog\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"AUserCopyPermissionsDialog.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_createVNode","_withModifiers","_withCtx","_createTextVNode","_createBlock","_component_VDialog","_component_VCard","ADialogToolbar","_component_VCardText","_renderSlot","_Fragment","_renderList","_component_VCardActions","_component_VSpacer","ADialogToolbar_default","_hoisted_1","_hoisted_2","_hoisted_3","AUserCopyPermissionsDialog_vue_vue_type_script_setup_true_lang_default","\"user\"","\"userModifiers\"","props","__props","user","useModel","dialog","ref","loading","srcUserId","useI18n","useAlerts","showDialog","confirmDialog","source","cloneDeep","error","_component_ABtnTertiary","resolveComponent","_component_ABtnPrimary","openBlock","createElementBlock","createElementVNode","toDisplayString","unref","t","createVNode","withModifiers","withCtx","createTextVNode","createBlock","VDialog","VCard","_cache","VCardText","renderSlot","_ctx","id","Fragment","renderList","key","VCardActions","VSpacer","isNull","createCommentVNode"],"sources":["../../../../src/domains/anzuUser/components/AUserCopyPermissionsDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TUser extends Pick<AnzuUser, 'roles' | 'permissionGroups' | 'permissions'>\">\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\n// `ABtnPrimary` / `ABtnTertiary` are Vuetify aliases registered globally by\n// `commonVuetifyConfig`, so they are not imported.\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { cloneDeep, isNull } from '@/shared/utils/common'\n\nconst props = defineProps<{\n /**\n * Reads the source account from the server. A prop because the user shape differs per system (cms\n * `CmsUserDto`, dam `DamUserDto`), and the page already has an api instance for the right backend.\n */\n fetchSourceUser: (id: number) => Promise<AnzuUser>\n /**\n * Copies whatever the system keeps beyond roles, groups and grants. cms has nineteen such\n * fields; systems with none leave this out.\n */\n copySystemFields?: ((target: TUser, source: AnzuUser) => void) | undefined\n /** i18n keys listed in the dialog, so the operator sees exactly what will be overwritten. */\n copiedSettingKeys?: string[]\n}>()\n\n// Typed `TUser` with only the overwritten fields, because a wizard\n// holds a system's permissions without the rest of the account.\nconst user = defineModel<TUser>('user', { required: true })\n\nconst dialog = ref(false)\nconst loading = ref(false)\nconst srcUserId = ref<IntegerIdNullable>(null)\n\nconst { t } = useI18n()\nconst { showErrorsDefault } = useAlerts()\n\nconst showDialog = () => {\n srcUserId.value = null\n dialog.value = true\n}\n\nconst confirmDialog = async () => {\n if (isNull(srcUserId.value)) return\n loading.value = true\n try {\n const source = await props.fetchSourceUser(srcUserId.value)\n user.value.roles = cloneDeep(source.roles)\n user.value.permissionGroups = cloneDeep(source.permissionGroups)\n user.value.permissions = cloneDeep(source.permissions)\n props.copySystemFields?.(user.value, source)\n dialog.value = false\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n loading.value = false\n }\n}\n</script>\n\n<template>\n <div>\n <p class=\"text-body-small\">\n {{ t('common.anzuUser.copyPermissions.desc') }}\n </p>\n <div class=\"text-right\">\n <ABtnTertiary\n size=\"small\"\n data-cy=\"user-copy-permissions\"\n @click.stop=\"showDialog\"\n >\n {{ t('common.anzuUser.copyPermissions.title') }}\n </ABtnTertiary>\n </div>\n <VDialog\n v-if=\"dialog\"\n :model-value=\"dialog\"\n :max-width=\"900\"\n >\n <VCard>\n <ADialogToolbar @cancel=\"dialog = false\">\n {{ t('common.anzuUser.copyPermissions.title') }}\n </ADialogToolbar>\n <VCardText>\n <!-- Whose account to copy from. The app owns the picker: it knows its own user list. -->\n <slot\n name=\"sourcePicker\"\n :select=\"(id: IntegerIdNullable) => (srcUserId = id)\"\n :selected=\"srcUserId\"\n />\n <strong>{{ t('common.anzuUser.copyPermissions.copiedSettings') }}</strong>\n <ul class=\"ml-5 text-body-small\">\n <li>{{ t('common.anzuUser.model.roles') }}</li>\n <li>{{ t('common.anzuUser.model.permissionGroups') }}</li>\n <li>{{ t('common.anzuUser.model.permissions') }}</li>\n <li\n v-for=\"key in copiedSettingKeys\"\n :key=\"key\"\n >\n {{ t(key) }}\n </li>\n </ul>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"dialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"isNull(srcUserId)\"\n :loading=\"loading\"\n data-cy=\"user-copy-permissions-confirm\"\n @click.stop=\"confirmDialog\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserCreateInSystemButton.js","names":["_sfc_main","AUserCreateInSystemButton_vue_vue_type_script_setup_true_lang_default","AUserCreateInSystemButton_default"],"sources":["../../../../src/domains/anzuUser/components/AUserCreateInSystemButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, watch } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport AUserMetadataForm from '@/domains/anzuUser/components/AUserMetadataForm.vue'\nimport { useAnzuUserFactory } from '@/domains/anzuUser/factory/AnzuUserFactory'\nimport type { BaseUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { cloneDeep, isNull } from '@/shared/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n systemLabel: string\n /** The system's `createNote`: what is special about having an account there. */\n createNote?: string | undefined\n /**\n * Whether the created account will be switched on.\n * The sentence about a working public account is composed here, not in the descriptor, because it depends on\n * this value. Creating from a panel copies the source's `enabled`; creating after an empty search sends false.\n */\n willBeEnabled?: boolean\n loading?: boolean\n disabled?: boolean\n /** The target system's `requiredMetadata`: the profile the form validates against. */\n requiredMetadata?: boolean\n /** The person's id. Always shown and never editable here, because this path is for a person who already exists. */\n userId?: IntegerIdNullable\n /**\n * Known data used to prefill the form. It is not the posted\n * body: the caller re-reads the source right before the POST.\n * The operator must complete it. A person known only in blog usually has an empty `person`, which\n * the target may require, so a silent copy would create a record the target's form refuses to save.\n */\n source?: BaseUser | null\n }>(),\n {\n createNote: undefined,\n willBeEnabled: false,\n loading: false,\n disabled: false,\n requiredMetadata: false,\n userId: null,\n source: null,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'confirm', user: BaseUser): void\n}>()\n\nconst { t } = useI18n()\nconst { createAnzuUser } = useAnzuUserFactory()\nconst dialog = ref(false)\n\nconst user = ref<BaseUser>(createAnzuUser())\nconst v$ = useVuelidate()\n\n// Seeded on every open, not once. The row is re-probed after\n// each write, and a stale prefill would send outdated values.\nwatch(dialog, (open) => {\n if (!open) return\n const seed = isNull(props.source) ? createAnzuUser() : cloneDeep(props.source)\n if (!isNull(props.userId)) seed.id = props.userId\n user.value = seed\n v$.value.$reset()\n})\n\nconst confirm = async () => {\n if (!(await v$.value.$validate())) return\n dialog.value = false\n emit('confirm', cloneDeep(user.value))\n}\n</script>\n\n<template>\n <div class=\"d-inline-flex\">\n <VBtn\n :disabled=\"disabled\"\n :loading=\"loading\"\n size=\"small\"\n variant=\"flat\"\n color=\"primary\"\n data-cy=\"user-system-create\"\n @click.stop=\"dialog = true\"\n >\n {{ t('common.userSystem.button.create') }}\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n :max-width=\"640\"\n >\n <VCard>\n <ADialogToolbar @cancel=\"dialog = false\">\n {{ t('common.userSystem.create.title', { system: systemLabel }) }}\n </ADialogToolbar>\n <VCardText>\n <!-- The id is shown and locked: this gives the existing person's global id an account here. -->\n <AUserMetadataForm\n v-model:user=\"user\"\n :required=\"requiredMetadata\"\n id-input\n is-edit\n />\n <!--\n Stated explicitly because neither is obvious or reversible: the account\n is created with nothing granted, and no admin can delete an AnzuUser.\n -->\n <p class=\"mt-2\">{{ t('common.userSystem.create.note') }}</p>\n <p\n v-if=\"createNote\"\n class=\"mt-2\"\n >\n {{ createNote }}\n </p>\n <p class=\"mt-2\">\n {{\n props.willBeEnabled\n ? t('common.userSystem.create.willBeEnabled')\n : t('common.userSystem.create.willBeDisabled')\n }}\n </p>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"dialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnPrimary\n :loading=\"loading\"\n data-cy=\"user-system-create-confirm\"\n @click.stop=\"confirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AUserCreateInSystemButton.js","names":["AUserCreateInSystemButton_vue_vue_type_script_setup_true_lang_default","AUserCreateInSystemButton_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserCreateInSystemButton.vue_vue_type_script_setup_true_lang.js","names":["_resolveComponent","_openBlock","_createElementBlock","_createVNode","_component_VBtn","_withModifiers","_withCtx","_createTextVNode","_toDisplayString","_unref","_component_VDialog","_component_VCard","ADialogToolbar","_component_VCardText","AUserMetadataForm","_createElementVNode","_createCommentVNode","_component_VCardActions","_component_VSpacer","ADialogToolbar_default","AUserMetadataForm_default","useVuelidate","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","AUserCreateInSystemButton_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","useI18n","useAnzuUserFactory","dialog","ref","user","createAnzuUser","v$","open","seed","isNull","cloneDeep","confirm","_component_ABtnTertiary","resolveComponent","_component_ABtnPrimary","openBlock","createElementBlock","createVNode","VBtn","_cache","withModifiers","withCtx","createTextVNode","toDisplayString","unref","t","VDialog","$event","VCard","VCardText","createElementVNode","createCommentVNode","VCardActions","VSpacer"],"sources":["../../../../src/domains/anzuUser/components/AUserCreateInSystemButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, watch } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport AUserMetadataForm from '@/domains/anzuUser/components/AUserMetadataForm.vue'\nimport { useAnzuUserFactory } from '@/domains/anzuUser/factory/AnzuUserFactory'\nimport type { BaseUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { cloneDeep, isNull } from '@/shared/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n systemLabel: string\n /** The system's `createNote`: what is special about having an account there. */\n createNote?: string | undefined\n /**\n * Whether the created account will be switched on.\n * The sentence about a working public account is composed here, not in the descriptor, because it depends on\n * this value. Creating from a panel copies the source's `enabled`; creating after an empty search sends false.\n */\n willBeEnabled?: boolean\n loading?: boolean\n disabled?: boolean\n /** The target system's `requiredMetadata`: the profile the form validates against. */\n requiredMetadata?: boolean\n /** The person's id. Always shown and never editable here, because this path is for a person who already exists. */\n userId?: IntegerIdNullable\n /**\n * Known data used to prefill the form. It is not the posted\n * body: the caller re-reads the source right before the POST.\n * The operator must complete it. A person known only in blog usually has an empty `person`, which\n * the target may require, so a silent copy would create a record the target's form refuses to save.\n */\n source?: BaseUser | null\n }>(),\n {\n createNote: undefined,\n willBeEnabled: false,\n loading: false,\n disabled: false,\n requiredMetadata: false,\n userId: null,\n source: null,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'confirm', user: BaseUser): void\n}>()\n\nconst { t } = useI18n()\nconst { createAnzuUser } = useAnzuUserFactory()\nconst dialog = ref(false)\n\nconst user = ref<BaseUser>(createAnzuUser())\nconst v$ = useVuelidate()\n\n// Seeded on every open, not once. The row is re-probed after\n// each write, and a stale prefill would send outdated values.\nwatch(dialog, (open) => {\n if (!open) return\n const seed = isNull(props.source) ? createAnzuUser() : cloneDeep(props.source)\n if (!isNull(props.userId)) seed.id = props.userId\n user.value = seed\n v$.value.$reset()\n})\n\nconst confirm = async () => {\n if (!(await v$.value.$validate())) return\n dialog.value = false\n emit('confirm', cloneDeep(user.value))\n}\n</script>\n\n<template>\n <div class=\"d-inline-flex\">\n <VBtn\n :disabled=\"disabled\"\n :loading=\"loading\"\n size=\"small\"\n variant=\"flat\"\n color=\"primary\"\n data-cy=\"user-system-create\"\n @click.stop=\"dialog = true\"\n >\n {{ t('common.userSystem.button.create') }}\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n :max-width=\"640\"\n >\n <VCard>\n <ADialogToolbar @cancel=\"dialog = false\">\n {{ t('common.userSystem.create.title', { system: systemLabel }) }}\n </ADialogToolbar>\n <VCardText>\n <!-- The id is shown and locked: this gives the existing person's global id an account here. -->\n <AUserMetadataForm\n v-model:user=\"user\"\n :required=\"requiredMetadata\"\n id-input\n is-edit\n />\n <!--\n Stated explicitly because neither is obvious or reversible: the account\n is created with nothing granted, and no admin can delete an AnzuUser.\n -->\n <p class=\"mt-2\">{{ t('common.userSystem.create.note') }}</p>\n <p\n v-if=\"createNote\"\n class=\"mt-2\"\n >\n {{ createNote }}\n </p>\n <p class=\"mt-2\">\n {{\n props.willBeEnabled\n ? t('common.userSystem.create.willBeEnabled')\n : t('common.userSystem.create.willBeDisabled')\n }}\n </p>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"dialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnPrimary\n :loading=\"loading\"\n data-cy=\"user-system-create-confirm\"\n @click.stop=\"confirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWA,IAAM4B,IAAQC,GAoCRC,IAAOH,GAIP,EAAE,SAAMI,EAAQ,GAChB,EAAE,sBAAmBC,EAAmB,GACxCC,IAASC,EAAI,EAAK,GAElBC,IAAOD,EAAcE,EAAe,CAAC,GACrCC,IAAKhB,EAAa;EAIxB,EAAMY,IAAS,MAAS;GACtB,IAAI,CAACK,GAAM;GACX,IAAMC,IAAOC,EAAOZ,EAAM,MAAM,IAAIQ,EAAe,IAAIK,EAAUb,EAAM,MAAM;GAG7E,AAFKY,EAAOZ,EAAM,MAAM,MAAG,EAAK,KAAKA,EAAM,SAC3C,EAAK,QAAQW,GACbF,EAAG,MAAM,OAAO;EAClB,CAAC;EAED,IAAMK,IAAU,YAAY;GAC1B,AAAM,MAAML,EAAG,MAAM,UAAU,MAC/B,EAAO,QAAQ,IACfP,EAAK,WAAWW,EAAUN,EAAK,KAAK,CAAC;EACvC;;;GAIE,OAAAlC,EAAA,GAAAC,EA8DM,OA9DNoB,GA8DM,CA7DJnB,EAUOC,GAAA;IATJ,UAAUyB,EAAA;IACV,SAASA,EAAA;IACV,MAAK;IACL,SAAQ;IACR,OAAM;IACN,WAAQ;IACP,SAAK,AAAAqB,EAAA,OAAA7C,GAAA,MAAO,EAAA,QAAM,IAAA,CAAA,MAAA,CAAA;;IAEnB,SAAAC,QAA0C,CAAvCC,EAAAC,EAAAC,EAAA+C,CAAA,CAAC,CAAA,iCAAA,CAAA,GAAA,CAAA,C;;G,gCAENrD,EAiDUO,GAAA;IAhDC,YAAAuB,EAAA;IAAA,uBAAA,AAAAiB,EAAA,QAAA,MAAA,EAAM,QAAAQ;IACd,aAAW;;IAEZ,SAAApD,QA4CQ,CA5CRH,EA4CQQ,GAAA,MAAA;KA3CN,SAAAL,QAEiB;MAFjBH,EAEiBS,GAAA,EAFA,UAAM,AAAAsC,EAAA,QAAA,MAAE,EAAA,QAAM,G;OAC7B,SAAA5C,QAAkE,CAA/DC,EAAAC,EAAAC,EAAA+C,CAAA,CAAC,CAAA,kCAAA,EAAA,QAA6C3B,EAAA,YAAW,CAAA,CAAA,GAAA,CAAA,C;;;MAE9D1B,EA0BYU,GAAA,MAAA;OAxBV,SAAAP,QAKE;QALFH,EAKEW,GAAA;SAJQ,MAAMqB,EAAA;SAAA,iBAAA,AAAAe,EAAA,QAAA,MAAA,EAAI,QAAAQ;SACjB,UAAU7B,EAAA;SACX,YAAA;SACA,WAAA;;QAMFd,EAA4D,KAA5DQ,GAA4Df,EAAzCC,EAAA+C,CAAA,CAAC,CAAA,+BAAA,CAAA,GAAA,CAAA;QAEZ3B,EAAA,cADR5B,EAAA,GAAAC,EAKI,KALJsB,GAKIhB,EADCqB,EAAA,UAAU,GAAA,CAAA,K;QAEfd,EAMI,KANJU,GAMIjB,EAJAoB,EAAM,gBAAgCnB,EAAA+C,CAAA,CAAC,CAAA,wCAAA,IAA6D/C,EAAA+C,CAAA,CAAC,CAAA,yCAAA,CAAA,GAAA,CAAA;;;;MAM3GrD,EAYec,GAAA,MAAA;OAXb,SAAAX,QAEe;QAFfH,EAEewC,GAAA,EAFA,SAAK,AAAAO,EAAA,OAAA7C,GAAA,MAAO,EAAA,QAAM,IAAA,CAAA,MAAA,CAAA,E;SAC/B,SAAAC,QAA+B,CAA5BC,EAAAC,EAAAC,EAAA+C,CAAA,CAAC,CAAA,sBAAA,CAAA,GAAA,CAAA,C;;;QAENrD,EAAWe,CAAA;QACXf,EAMc0C,GAAA;SALX,SAAShB,EAAA;SACV,WAAQ;SACP,SAAKxB,EAAOqC,GAAO,CAAA,MAAA,CAAA;;SAEpB,SAAApC,QAAgC,CAA7BC,EAAAC,EAAAC,EAAA+C,CAAA,CAAC,CAAA,uBAAA,CAAA,GAAA,CAAA,C"}
1
+ {"version":3,"file":"AUserCreateInSystemButton.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createVNode","_component_VBtn","_withModifiers","_withCtx","_createTextVNode","_toDisplayString","_unref","_component_VDialog","_component_VCard","ADialogToolbar","_component_VCardText","AUserMetadataForm","_createElementVNode","_component_VCardActions","_component_VSpacer","ADialogToolbar_default","AUserMetadataForm_default","useVuelidate","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","AUserCreateInSystemButton_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","useI18n","useAnzuUserFactory","dialog","ref","user","createAnzuUser","v$","open","seed","isNull","cloneDeep","confirm","_component_ABtnTertiary","resolveComponent","_component_ABtnPrimary","openBlock","createElementBlock","createVNode","VBtn","_cache","withModifiers","withCtx","createTextVNode","toDisplayString","unref","t","VDialog","$event","VCard","VCardText","createElementVNode","createCommentVNode","VCardActions","VSpacer"],"sources":["../../../../src/domains/anzuUser/components/AUserCreateInSystemButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, watch } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport AUserMetadataForm from '@/domains/anzuUser/components/AUserMetadataForm.vue'\nimport { useAnzuUserFactory } from '@/domains/anzuUser/factory/AnzuUserFactory'\nimport type { BaseUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { cloneDeep, isNull } from '@/shared/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n systemLabel: string\n /** The system's `createNote`: what is special about having an account there. */\n createNote?: string | undefined\n /**\n * Whether the created account will be switched on.\n * The sentence about a working public account is composed here, not in the descriptor, because it depends on\n * this value. Creating from a panel copies the source's `enabled`; creating after an empty search sends false.\n */\n willBeEnabled?: boolean\n loading?: boolean\n disabled?: boolean\n /** The target system's `requiredMetadata`: the profile the form validates against. */\n requiredMetadata?: boolean\n /** The person's id. Always shown and never editable here, because this path is for a person who already exists. */\n userId?: IntegerIdNullable\n /**\n * Known data used to prefill the form. It is not the posted\n * body: the caller re-reads the source right before the POST.\n * The operator must complete it. A person known only in blog usually has an empty `person`, which\n * the target may require, so a silent copy would create a record the target's form refuses to save.\n */\n source?: BaseUser | null\n }>(),\n {\n createNote: undefined,\n willBeEnabled: false,\n loading: false,\n disabled: false,\n requiredMetadata: false,\n userId: null,\n source: null,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'confirm', user: BaseUser): void\n}>()\n\nconst { t } = useI18n()\nconst { createAnzuUser } = useAnzuUserFactory()\nconst dialog = ref(false)\n\nconst user = ref<BaseUser>(createAnzuUser())\nconst v$ = useVuelidate()\n\n// Seeded on every open, not once. The row is re-probed after\n// each write, and a stale prefill would send outdated values.\nwatch(dialog, (open) => {\n if (!open) return\n const seed = isNull(props.source) ? createAnzuUser() : cloneDeep(props.source)\n if (!isNull(props.userId)) seed.id = props.userId\n user.value = seed\n v$.value.$reset()\n})\n\nconst confirm = async () => {\n if (!(await v$.value.$validate())) return\n dialog.value = false\n emit('confirm', cloneDeep(user.value))\n}\n</script>\n\n<template>\n <div class=\"d-inline-flex\">\n <VBtn\n :disabled=\"disabled\"\n :loading=\"loading\"\n size=\"small\"\n variant=\"flat\"\n color=\"primary\"\n data-cy=\"user-system-create\"\n @click.stop=\"dialog = true\"\n >\n {{ t('common.userSystem.button.create') }}\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n :max-width=\"640\"\n >\n <VCard>\n <ADialogToolbar @cancel=\"dialog = false\">\n {{ t('common.userSystem.create.title', { system: systemLabel }) }}\n </ADialogToolbar>\n <VCardText>\n <!-- The id is shown and locked: this gives the existing person's global id an account here. -->\n <AUserMetadataForm\n v-model:user=\"user\"\n :required=\"requiredMetadata\"\n id-input\n is-edit\n />\n <!--\n Stated explicitly because neither is obvious or reversible: the account\n is created with nothing granted, and no admin can delete an AnzuUser.\n -->\n <p class=\"mt-2\">{{ t('common.userSystem.create.note') }}</p>\n <p\n v-if=\"createNote\"\n class=\"mt-2\"\n >\n {{ createNote }}\n </p>\n <p class=\"mt-2\">\n {{\n props.willBeEnabled\n ? t('common.userSystem.create.willBeEnabled')\n : t('common.userSystem.create.willBeDisabled')\n }}\n </p>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"dialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnPrimary\n :loading=\"loading\"\n data-cy=\"user-system-create-confirm\"\n @click.stop=\"confirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWA,IAAM0B,IAAQC,GAoCRC,IAAOH,GAIP,EAAE,SAAMI,EAAQ,GAChB,EAAE,sBAAmBC,EAAmB,GACxCC,IAASC,EAAI,EAAK,GAElBC,IAAOD,EAAcE,EAAe,CAAC,GACrCC,IAAKhB,EAAa;EAIxB,EAAMY,IAAS,MAAS;GACtB,IAAI,CAACK,GAAM;GACX,IAAMC,IAAOC,EAAOZ,EAAM,MAAM,IAAIQ,EAAe,IAAIK,EAAUb,EAAM,MAAM;GAG7E,AAFKY,EAAOZ,EAAM,MAAM,MAAG,EAAK,KAAKA,EAAM,SAC3C,EAAK,QAAQW,GACbF,EAAG,MAAM,OAAO;EAClB,CAAC;EAED,IAAMK,IAAU,YAAY;GAC1B,AAAM,MAAML,EAAG,MAAM,UAAU,MAC/B,EAAO,QAAQ,IACfP,EAAK,WAAWW,EAAUN,EAAK,KAAK,CAAC;EACvC;;;GAIE,OAAAjC,EAAA,GAAAC,EA8DM,OA9DNmB,GA8DM,CA7DJlB,EAUOC,GAAA;IATJ,UAAUwB,EAAA;IACV,SAASA,EAAA;IACV,MAAK;IACL,SAAQ;IACR,OAAM;IACN,WAAQ;IACP,SAAK,AAAAqB,EAAA,OAAA5C,GAAA,MAAO,EAAA,QAAM,IAAA,CAAA,MAAA,CAAA;;IAEnB,SAAAC,QAA0C,CAAvCC,EAAAC,EAAAC,EAAA8C,CAAA,CAAC,CAAA,iCAAA,CAAA,GAAA,CAAA,C;;G,gCAENpD,EAiDUO,GAAA;IAhDC,YAAAsB,EAAA;IAAA,uBAAA,AAAAiB,EAAA,QAAA,MAAA,EAAM,QAAAQ;IACd,aAAW;;IAEZ,SAAAnD,QA4CQ,CA5CRH,EA4CQQ,GAAA,MAAA;KA3CN,SAAAL,QAEiB;MAFjBH,EAEiBS,GAAA,EAFA,UAAM,AAAAqC,EAAA,QAAA,MAAE,EAAA,QAAM,G;OAC7B,SAAA3C,QAAkE,CAA/DC,EAAAC,EAAAC,EAAA8C,CAAA,CAAC,CAAA,kCAAA,EAAA,QAA6C3B,EAAA,YAAW,CAAA,CAAA,GAAA,CAAA,C;;;MAE9DzB,EA0BYU,GAAA,MAAA;OAxBV,SAAAP,QAKE;QALFH,EAKEW,GAAA;SAJQ,MAAMoB,EAAA;SAAA,iBAAA,AAAAe,EAAA,QAAA,MAAA,EAAI,QAAAQ;SACjB,UAAU7B,EAAA;SACX,YAAA;SACA,WAAA;;QAMFb,EAA4D,KAA5DO,GAA4Dd,EAAzCC,EAAA8C,CAAA,CAAC,CAAA,+BAAA,CAAA,GAAA,CAAA;QAEZ3B,EAAA,cADR3B,EAAA,GAAAC,EAKI,KALJqB,GAKIf,EADCoB,EAAA,UAAU,GAAA,CAAA,K;QAEfb,EAMI,KANJS,GAMIhB,EAJAmB,EAAM,gBAAgClB,EAAA8C,CAAA,CAAC,CAAA,wCAAA,IAA6D9C,EAAA8C,CAAA,CAAC,CAAA,yCAAA,CAAA,GAAA,CAAA;;;;MAM3GpD,EAYea,GAAA,MAAA;OAXb,SAAAV,QAEe;QAFfH,EAEeuC,GAAA,EAFA,SAAK,AAAAO,EAAA,OAAA5C,GAAA,MAAO,EAAA,QAAM,IAAA,CAAA,MAAA,CAAA,E;SAC/B,SAAAC,QAA+B,CAA5BC,EAAAC,EAAAC,EAAA8C,CAAA,CAAC,CAAA,sBAAA,CAAA,GAAA,CAAA,C;;;QAENpD,EAAWc,CAAA;QACXd,EAMcyC,GAAA;SALX,SAAShB,EAAA;SACV,WAAQ;SACP,SAAKvB,EAAOoC,GAAO,CAAA,MAAA,CAAA;;SAEpB,SAAAnC,QAAgC,CAA7BC,EAAAC,EAAAC,EAAA8C,CAAA,CAAC,CAAA,uBAAA,CAAA,GAAA,CAAA,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserEnabledSwitch.js","names":["_sfc_main","AUserEnabledSwitch_vue_vue_type_script_setup_true_lang_default","AUserEnabledSwitch_default"],"sources":["../../../../src/domains/anzuUser/components/AUserEnabledSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport ABooleanValue from '@/domains/ui/components/ABooleanValue.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\n\nwithDefaults(\n defineProps<{\n readonly?: boolean\n /**\n * The system's `enabledNote`. A descriptor string rather than a slot, so every admin shows the\n * same wording as the bulk dialog and admin-blog, where it matters most, cannot forget it.\n * The slot below remains for content longer than a line.\n */\n note?: string | undefined\n }>(),\n {\n readonly: false,\n note: undefined,\n }\n)\n\nconst modelValue = defineModel<boolean>({ required: true })\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <!--\n Outside `AUserMetadataForm` on purpose. That form mirrors `BaseUserDto`, which has no\n `enabled`, and the cross-system metadata repair uses it and must not write this field.\n -->\n <ARow\n v-if=\"readonly\"\n :title=\"t('common.anzuUser.model.enabled')\"\n >\n <ABooleanValue\n :value=\"modelValue\"\n chip\n />\n </ARow>\n <VSwitch\n v-else\n v-model=\"modelValue\"\n :label=\"t('common.anzuUser.model.enabled')\"\n color=\"success\"\n density=\"compact\"\n hide-details\n data-cy=\"user-enabled\"\n />\n <div class=\"text-body-small text-medium-emphasis\">\n <slot name=\"note\">\n <template v-if=\"note\">{{ note }}</template>\n </slot>\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AUserEnabledSwitch.js","names":["AUserEnabledSwitch_vue_vue_type_script_setup_true_lang_default","AUserEnabledSwitch_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserEnabledSwitch.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createElementBlock","_createBlock","ARow","_unref","_withCtx","_createVNode","ABooleanValue","_component_VSwitch","_createElementVNode","_renderSlot","_Fragment","_createTextVNode","_toDisplayString","_createCommentVNode","ABooleanValue_default","ARow_default","_hoisted_1","AUserEnabledSwitch_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","modelValue","useModel","__props","useI18n","openBlock","createElementBlock","createBlock","unref","t","withCtx","createVNode","VSwitch","_cache","$event","createElementVNode","renderSlot","_ctx","Fragment","createTextVNode","toDisplayString","createCommentVNode"],"sources":["../../../../src/domains/anzuUser/components/AUserEnabledSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport ABooleanValue from '@/domains/ui/components/ABooleanValue.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\n\nwithDefaults(\n defineProps<{\n readonly?: boolean\n /**\n * The system's `enabledNote`. A descriptor string rather than a slot, so every admin shows the\n * same wording as the bulk dialog and admin-blog, where it matters most, cannot forget it.\n * The slot below remains for content longer than a line.\n */\n note?: string | undefined\n }>(),\n {\n readonly: false,\n note: undefined,\n }\n)\n\nconst modelValue = defineModel<boolean>({ required: true })\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <!--\n Outside `AUserMetadataForm` on purpose. That form mirrors `BaseUserDto`, which has no\n `enabled`, and the cross-system metadata repair uses it and must not write this field.\n -->\n <ARow\n v-if=\"readonly\"\n :title=\"t('common.anzuUser.model.enabled')\"\n >\n <ABooleanValue\n :value=\"modelValue\"\n chip\n />\n </ARow>\n <VSwitch\n v-else\n v-model=\"modelValue\"\n :label=\"t('common.anzuUser.model.enabled')\"\n color=\"success\"\n density=\"compact\"\n hide-details\n data-cy=\"user-enabled\"\n />\n <div class=\"text-body-small text-medium-emphasis\">\n <slot name=\"note\">\n <template v-if=\"note\">{{ note }}</template>\n </slot>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAqBA,IAAMsB,IAAatB,EAAoBwB,GAAA,YAAmB,GAEpD,EAAE,SAAMC,EAAQ;E,kBAIpBxB,EAAA,GAAAC,EA4BM,OAAA,MAAA,CAtBIsB,EAAA,YADRvB,EAAA,GAAAE,EAQOC,GAAA;;GANJ,OAAOC,EAAAyB,CAAA,CAAC,CAAA,+BAAA;;GAET,SAAAxB,QAGE,CAHFC,EAGEC,GAAA;IAFC,OAAOc,EAAA;IACR,MAAA;;;E,qBAGJrB,EAAA,GAAAE,EAQEM,GAAA;;GANS,YAAAa,EAAA;GAAA,uBAAA,AAAAY,EAAA,QAAA,MAAA,EAAU,QAAAC;GAClB,OAAO9B,EAAAyB,CAAA,CAAC,CAAA,+BAAA;GACT,OAAM;GACN,SAAQ;GACR,gBAAA;GACA,WAAQ;E,uCAEVpB,EAIM,OAJNQ,GAIM,CAHJP,EAEO2B,EAAA,QAAA,QAAA,CAAA,SAAA,CADWd,EAAA,QAAhBvB,EAAA,GAAAC,EAA2CU,GAAA,EAAA,KAAA,EAAA,GAAA,CAAlBC,EAAAC,EAAAU,EAAA,IAAI,GAAA,CAAA,C"}
1
+ {"version":3,"file":"AUserEnabledSwitch.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createElementBlock","_createBlock","ARow","_unref","_withCtx","_createVNode","ABooleanValue","_component_VSwitch","_createElementVNode","_renderSlot","_Fragment","_createTextVNode","_toDisplayString","ABooleanValue_default","ARow_default","_hoisted_1","AUserEnabledSwitch_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","modelValue","useModel","__props","useI18n","openBlock","createElementBlock","createBlock","unref","t","withCtx","createVNode","VSwitch","_cache","$event","createElementVNode","renderSlot","_ctx","Fragment","createTextVNode","toDisplayString","createCommentVNode"],"sources":["../../../../src/domains/anzuUser/components/AUserEnabledSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport ABooleanValue from '@/domains/ui/components/ABooleanValue.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\n\nwithDefaults(\n defineProps<{\n readonly?: boolean\n /**\n * The system's `enabledNote`. A descriptor string rather than a slot, so every admin shows the\n * same wording as the bulk dialog and admin-blog, where it matters most, cannot forget it.\n * The slot below remains for content longer than a line.\n */\n note?: string | undefined\n }>(),\n {\n readonly: false,\n note: undefined,\n }\n)\n\nconst modelValue = defineModel<boolean>({ required: true })\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <!--\n Outside `AUserMetadataForm` on purpose. That form mirrors `BaseUserDto`, which has no\n `enabled`, and the cross-system metadata repair uses it and must not write this field.\n -->\n <ARow\n v-if=\"readonly\"\n :title=\"t('common.anzuUser.model.enabled')\"\n >\n <ABooleanValue\n :value=\"modelValue\"\n chip\n />\n </ARow>\n <VSwitch\n v-else\n v-model=\"modelValue\"\n :label=\"t('common.anzuUser.model.enabled')\"\n color=\"success\"\n density=\"compact\"\n hide-details\n data-cy=\"user-enabled\"\n />\n <div class=\"text-body-small text-medium-emphasis\">\n <slot name=\"note\">\n <template v-if=\"note\">{{ note }}</template>\n </slot>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAqBA,IAAMqB,IAAarB,EAAoBuB,GAAA,YAAmB,GAEpD,EAAE,SAAMC,EAAQ;E,kBAIpBvB,EAAA,GAAAC,EA4BM,OAAA,MAAA,CAtBIqB,EAAA,YADRtB,EAAA,GAAAE,EAQOC,GAAA;;GANJ,OAAOC,EAAAwB,CAAA,CAAC,CAAA,+BAAA;;GAET,SAAAvB,QAGE,CAHFC,EAGEC,GAAA;IAFC,OAAOa,EAAA;IACR,MAAA;;;E,qBAGJpB,EAAA,GAAAE,EAQEM,GAAA;;GANS,YAAAY,EAAA;GAAA,uBAAA,AAAAY,EAAA,QAAA,MAAA,EAAU,QAAAC;GAClB,OAAO7B,EAAAwB,CAAA,CAAC,CAAA,+BAAA;GACT,OAAM;GACN,SAAQ;GACR,gBAAA;GACA,WAAQ;E,uCAEVnB,EAIM,OAJNO,GAIM,CAHJN,EAEO0B,EAAA,QAAA,QAAA,CAAA,SAAA,CADWd,EAAA,QAAhBtB,EAAA,GAAAC,EAA2CU,GAAA,EAAA,KAAA,EAAA,GAAA,CAAlBC,EAAAC,EAAAS,EAAA,IAAI,GAAA,CAAA,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserManageButton.js","names":["_sfc_main","AUserManageButton_vue_vue_type_script_setup_true_lang_default","AUserManageButton_default"],"sources":["../../../../src/domains/anzuUser/components/AUserManageButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { UserSystemManageTarget } from '@/domains/anzuUser/composables/userSystemDescriptor'\n\nconst props = withDefaults(\n defineProps<{\n target: UserSystemManageTarget\n systemLabel: string\n /** \"Edit\" instead of \"Manage in X\" -- used where the operator is already in that admin. */\n internalLabel?: string | undefined\n }>(),\n {\n internalLabel: undefined,\n }\n)\n\nconst { t } = useI18n()\n\nconst isExternal = computed(() => props.target.kind === 'external')\n\n/** A missing url means the template is configured but absent. Show the reason instead of a silently disabled button. */\nconst missingUrl = computed(() => props.target.kind === 'external' && props.target.href === null)\n\nconst href = computed(() => (props.target.kind === 'external' ? (props.target.href ?? undefined) : undefined))\nconst to = computed(() => (props.target.kind === 'internal' ? props.target.to : undefined))\n\nconst label = computed(() =>\n isExternal.value\n ? t('common.userSystem.button.manageIn', { system: props.systemLabel })\n : (props.internalLabel ?? t('common.userSystem.button.edit'))\n)\n</script>\n\n<template>\n <VTooltip\n :disabled=\"!missingUrl\"\n location=\"top\"\n >\n <template #activator=\"{ props: tooltipProps }\">\n <!--\n An anchor, not a click handler, so middle-click, open in new tab and screen reader announcements work.\n This is also why the tab bar never navigates: `VTab` renders `role=\"tab\"` and cannot carry a link.\n -->\n <span v-bind=\"tooltipProps\">\n <VBtn\n :to=\"to\"\n :href=\"href\"\n :target=\"isExternal ? '_blank' : undefined\"\n :rel=\"isExternal ? 'noopener' : undefined\"\n :append-icon=\"isExternal ? 'mdi-open-in-new' : undefined\"\n :variant=\"isExternal ? 'outlined' : 'flat'\"\n :color=\"isExternal ? undefined : 'primary'\"\n :disabled=\"missingUrl\"\n size=\"small\"\n data-cy=\"user-system-manage\"\n >\n {{ label }}\n </VBtn>\n </span>\n </template>\n {{ t('common.userSystem.manageMissingUrl') }}\n </VTooltip>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AUserManageButton.js","names":["AUserManageButton_vue_vue_type_script_setup_true_lang_default","AUserManageButton_default"],"sources":[],"mappings":""}