From c97c6923ea2e3fd48c66e97376887b46a07f2671 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 16 Sep 2026 08:45:49 -0700 Subject: [PATCH] Enhancement: centralized management of share links + bundles (#14115) --- src-ui/src/app/app-routing.module.ts | 19 ++ .../admin/settings/settings.component.ts | 1 + .../app-frame/app-frame.component.html | 12 ++ .../app-frame/app-frame.component.spec.ts | 7 +- .../app-frame/app-frame.component.ts | 13 ++ .../bulk-editor/bulk-editor.component.spec.ts | 34 ++-- .../bulk-editor/bulk-editor.component.ts | 8 +- .../share-link-bundle-list.component.html} | 130 +++++++------ .../share-link-bundle-list.component.scss} | 0 .../share-link-bundle-list.component.spec.ts} | 122 +++++++++---- .../share-link-bundle-list.component.ts} | 113 +++++++++--- .../share-link-list.component.html | 110 +++++++++++ .../share-link-list.component.spec.ts | 155 ++++++++++++++++ .../share-link-list.component.ts | 172 ++++++++++++++++++ .../share-links/share-links.component.html | 34 ++++ .../share-links/share-links.component.spec.ts | 102 +++++++++++ .../share-links/share-links.component.ts | 78 ++++++++ src-ui/src/app/data/share-link.ts | 2 + src-ui/src/app/data/ui-settings.ts | 3 + .../rest/share-link-bundle.service.spec.ts | 9 - .../rest/share-link-bundle.service.ts | 7 - src-ui/src/styles.scss | 4 + src/documents/serialisers.py | 6 + src/documents/tests/test_api_documents.py | 32 ++++ src/documents/views.py | 13 +- 25 files changed, 1027 insertions(+), 159 deletions(-) rename src-ui/src/app/components/{common/share-link-bundle-manage-dialog/share-link-bundle-manage-dialog.component.html => manage/share-links/share-link-bundle-list/share-link-bundle-list.component.html} (52%) rename src-ui/src/app/components/{common/share-link-bundle-manage-dialog/share-link-bundle-manage-dialog.component.scss => manage/share-links/share-link-bundle-list/share-link-bundle-list.component.scss} (100%) rename src-ui/src/app/components/{common/share-link-bundle-manage-dialog/share-link-bundle-manage-dialog.component.spec.ts => manage/share-links/share-link-bundle-list/share-link-bundle-list.component.spec.ts} (63%) rename src-ui/src/app/components/{common/share-link-bundle-manage-dialog/share-link-bundle-manage-dialog.component.ts => manage/share-links/share-link-bundle-list/share-link-bundle-list.component.ts} (59%) create mode 100644 src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.html create mode 100644 src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.spec.ts create mode 100644 src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.ts create mode 100644 src-ui/src/app/components/manage/share-links/share-links.component.html create mode 100644 src-ui/src/app/components/manage/share-links/share-links.component.spec.ts create mode 100644 src-ui/src/app/components/manage/share-links/share-links.component.ts diff --git a/src-ui/src/app/app-routing.module.ts b/src-ui/src/app/app-routing.module.ts index 66864a0d5..57ca25876 100644 --- a/src-ui/src/app/app-routing.module.ts +++ b/src-ui/src/app/app-routing.module.ts @@ -14,6 +14,7 @@ import { DocumentListComponent } from './components/document-list/document-list. import { DocumentAttributesComponent } from './components/manage/document-attributes/document-attributes.component' import { MailComponent } from './components/manage/mail/mail.component' import { SavedViewsComponent } from './components/manage/saved-views/saved-views.component' +import { ShareLinksComponent } from './components/manage/share-links/share-links.component' import { WorkflowsComponent } from './components/manage/workflows/workflows.component' import { NotFoundComponent } from './components/not-found/not-found.component' import { DirtyDocGuard } from './guards/dirty-doc.guard' @@ -310,6 +311,24 @@ export const routes: Routes = [ componentName: 'SavedViewsComponent', }, }, + { + path: 'share-links', + component: ShareLinksComponent, + canActivate: [PermissionsGuard], + data: { + requiredPermissionAny: [ + { + action: PermissionAction.View, + type: PermissionType.ShareLink, + }, + { + action: PermissionAction.View, + type: PermissionType.ShareLinkBundle, + }, + ], + componentName: 'ShareLinksComponent', + }, + }, ], }, diff --git a/src-ui/src/app/components/admin/settings/settings.component.ts b/src-ui/src/app/components/admin/settings/settings.component.ts index 9076d2a3e..a4ead8373 100644 --- a/src-ui/src/app/components/admin/settings/settings.component.ts +++ b/src-ui/src/app/components/admin/settings/settings.component.ts @@ -110,6 +110,7 @@ const documentDetailFieldOptions = [ const sidebarItemLabels: Record = { [HideableSidebarItemID.Dashboard]: $localize`Dashboard`, [HideableSidebarItemID.SavedViews]: $localize`Saved Views`, + [HideableSidebarItemID.ShareLinks]: $localize`Share Links`, [HideableSidebarItemID.Workflows]: $localize`Workflows`, [HideableSidebarItemID.Mail]: $localize`Mail`, [HideableSidebarItemID.Documentation]: $localize`Documentation`, diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index a8dd12d34..942c6a195 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -250,6 +250,18 @@ } + @if (canManageShareLinks) { + + }