From 3ec9a83acd358fea1f4e533bd8033f771edf46c5 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 6 Jan 2022 13:41:22 +0300 Subject: [PATCH] feat: add user-menu.provider --- .../theme-basic/src/lib/enums/index.ts | 1 + .../src/lib/enums/user-menu-items.ts | 4 ++ .../theme-basic/src/lib/providers/index.ts | 1 + .../src/lib/providers/user-menu.provider.ts | 59 +++++++++++++++++++ .../theme-basic/src/lib/theme-basic.module.ts | 2 + .../theme-shared/src/lib/models/index.ts | 3 +- .../theme-shared/src/lib/models/user-menu.ts | 3 + 7 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 npm/ng-packs/packages/theme-basic/src/lib/enums/user-menu-items.ts create mode 100644 npm/ng-packs/packages/theme-basic/src/lib/providers/user-menu.provider.ts create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/models/user-menu.ts diff --git a/npm/ng-packs/packages/theme-basic/src/lib/enums/index.ts b/npm/ng-packs/packages/theme-basic/src/lib/enums/index.ts index 07635cbbc8..3c919aa271 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/enums/index.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/enums/index.ts @@ -1 +1,2 @@ export * from './components'; +export * from './user-menu-items'; diff --git a/npm/ng-packs/packages/theme-basic/src/lib/enums/user-menu-items.ts b/npm/ng-packs/packages/theme-basic/src/lib/enums/user-menu-items.ts new file mode 100644 index 0000000000..42ab66e802 --- /dev/null +++ b/npm/ng-packs/packages/theme-basic/src/lib/enums/user-menu-items.ts @@ -0,0 +1,4 @@ +export const enum eUserMenuItems { + MyAccount = 'UserMenu.MyAccount', + Logout = 'UserMenu.Logout', +} diff --git a/npm/ng-packs/packages/theme-basic/src/lib/providers/index.ts b/npm/ng-packs/packages/theme-basic/src/lib/providers/index.ts index 8102d94f62..d3028eab68 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/providers/index.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/providers/index.ts @@ -1,2 +1,3 @@ export * from './nav-item.provider'; export * from './styles.provider'; +export * from './user-menu.provider'; diff --git a/npm/ng-packs/packages/theme-basic/src/lib/providers/user-menu.provider.ts b/npm/ng-packs/packages/theme-basic/src/lib/providers/user-menu.provider.ts new file mode 100644 index 0000000000..5c36cc5347 --- /dev/null +++ b/npm/ng-packs/packages/theme-basic/src/lib/providers/user-menu.provider.ts @@ -0,0 +1,59 @@ +import { + AuthService, + ConfigStateService, + LocalizationService, + NAVIGATE_TO_MANAGE_PROFILE, +} from '@abp/ng.core'; +import { UserMenuService } from '@abp/ng.theme.shared'; +import { APP_INITIALIZER, Injector } from '@angular/core'; +import { filter } from 'rxjs/operators'; +import { eUserMenuItems } from '../enums/user-menu-items'; + +export const BASIC_THEME_USER_MENU_PROVIDERS = [ + { + provide: APP_INITIALIZER, + useFactory: configureUserMenu, + deps: [Injector], + multi: true, + }, +]; + +export function configureUserMenu(injector: Injector) { + const configState = injector.get(ConfigStateService); + const userMenu = injector.get(UserMenuService); + const localization = injector.get(LocalizationService); + const authService = injector.get(AuthService); + const navigateToManageProfile = injector.get(NAVIGATE_TO_MANAGE_PROFILE); + + return () => { + configState + .getAll$() + .pipe(filter(res => !!res?.localization)) + .subscribe(() => { + userMenu.addItems([ + { + id: eUserMenuItems.MyAccount, + order: 100, + html: ` + ${localization.instant('AbpAccount::MyAccount')} + `, + action: () => navigateToManageProfile(), + }, + { + id: eUserMenuItems.Logout, + order: 101, + html: ` + ${localization.instant('AbpUi::Logout')} + `, + action: () => { + authService.logout().subscribe(); + }, + }, + ]); + }); + }; +} diff --git a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts index 17ef89338f..a8020e50fe 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts @@ -23,6 +23,7 @@ import { ValidationErrorComponent } from './components/validation-error/validati import { LazyStyleHandler } from './handlers/lazy-style.handler'; import { BASIC_THEME_NAV_ITEM_PROVIDERS } from './providers/nav-item.provider'; import { BASIC_THEME_STYLES_PROVIDERS } from './providers/styles.provider'; +import { BASIC_THEME_USER_MENU_PROVIDERS } from './providers/user-menu.provider'; export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, EmptyLayoutComponent]; @@ -70,6 +71,7 @@ export class ThemeBasicModule { ngModule: ThemeBasicModule, providers: [ BASIC_THEME_NAV_ITEM_PROVIDERS, + BASIC_THEME_USER_MENU_PROVIDERS, BASIC_THEME_STYLES_PROVIDERS, { provide: VALIDATION_ERROR_TEMPLATE, diff --git a/npm/ng-packs/packages/theme-shared/src/lib/models/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/models/index.ts index d1e2e71c5c..ca6aa74124 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/models/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/models/index.ts @@ -1,5 +1,6 @@ export * from './common'; export * from './confirmation'; +export * from './nav-item'; export * from './statistics'; export * from './toaster'; -export * from './nav-item'; +export * from './user-menu'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/models/user-menu.ts b/npm/ng-packs/packages/theme-shared/src/lib/models/user-menu.ts new file mode 100644 index 0000000000..20b92b8082 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/models/user-menu.ts @@ -0,0 +1,3 @@ +import { NavItem } from './nav-item'; + +export class UserMenu extends NavItem {}