From d8626ffab7489a663db86c773381ca008f831316 Mon Sep 17 00:00:00 2001 From: Hash Palak Date: Thu, 19 Jun 2025 00:29:56 +0600 Subject: [PATCH] Feature/include admin control panel in quick links of assistant (#4955) * Include admin control panel in quick links of assistant * Update changelog --- CHANGELOG.md | 4 ++++ libs/common/src/lib/routes/interfaces/interfaces.ts | 4 +++- libs/common/src/lib/routes/routes.ts | 7 ++++++- libs/ui/src/lib/assistant/assistant.component.ts | 5 +++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 10c54f682..17ecf6ca1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Included the admin control panel in the quick links of the assistant + ### Changed - Adapted the options of the date range selector in the assistant dynamically based on the user’s first activity diff --git a/libs/common/src/lib/routes/interfaces/interfaces.ts b/libs/common/src/lib/routes/interfaces/interfaces.ts index 5e9f65b40..5acbb2350 100644 --- a/libs/common/src/lib/routes/interfaces/interfaces.ts +++ b/libs/common/src/lib/routes/interfaces/interfaces.ts @@ -1,5 +1,7 @@ +import { User } from '@ghostfolio/common/interfaces'; + export interface IRoute { - excludeFromAssistant?: boolean; + excludeFromAssistant?: boolean | ((aUser: User) => boolean); path: string; routerLink: string[]; subRoutes?: Record; diff --git a/libs/common/src/lib/routes/routes.ts b/libs/common/src/lib/routes/routes.ts index 20d911d24..ab3e5afd0 100644 --- a/libs/common/src/lib/routes/routes.ts +++ b/libs/common/src/lib/routes/routes.ts @@ -1,3 +1,6 @@ +import { User } from '@ghostfolio/common/interfaces'; +import { hasPermission, permissions } from '@ghostfolio/common/permissions'; + import '@angular/localize/init'; import { IRoute } from './interfaces/interfaces'; @@ -21,7 +24,9 @@ export const internalRoutes: Record = { title: $localize`Settings` }, adminControl: { - excludeFromAssistant: true, + excludeFromAssistant: (aUser: User) => { + return hasPermission(aUser?.permissions, permissions.accessAdminControl); + }, path: 'admin', routerLink: ['/admin'], subRoutes: { diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index a5a5fdb9f..22c75b91c 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -41,6 +41,7 @@ import { MatSelectModule } from '@angular/material/select'; import { RouterModule } from '@angular/router'; import { Account, AssetClass, DataSource } from '@prisma/client'; import { differenceInYears } from 'date-fns'; +import { isFunction } from 'lodash'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { EMPTY, Observable, Subject, merge, of } from 'rxjs'; import { @@ -627,6 +628,10 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { const allRoutes = Object.values(internalRoutes) .filter(({ excludeFromAssistant }) => { + if (isFunction(excludeFromAssistant)) { + return excludeFromAssistant(this.user); + } + return !excludeFromAssistant; }) .reduce((acc, route) => {