From 9d06c42d1f8d991e2663685930b1d53e473d455e Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Tue, 28 Sep 2021 14:20:23 +0300 Subject: [PATCH 1/2] Angular UI: Check setting management feature to allow the setting management page to open --- .../config/src/providers/features.token.ts | 39 ++++++++++++++++ .../config/src/providers/index.ts | 1 + .../config/src/providers/route.provider.ts | 46 +++++++++---------- .../config/src/providers/visible.provider.ts | 30 ++++++++++++ .../src/setting-management-config.module.ts | 13 ++++-- 5 files changed, 103 insertions(+), 26 deletions(-) create mode 100644 npm/ng-packs/packages/setting-management/config/src/providers/features.token.ts create mode 100644 npm/ng-packs/packages/setting-management/config/src/providers/visible.provider.ts diff --git a/npm/ng-packs/packages/setting-management/config/src/providers/features.token.ts b/npm/ng-packs/packages/setting-management/config/src/providers/features.token.ts new file mode 100644 index 0000000000..f161832972 --- /dev/null +++ b/npm/ng-packs/packages/setting-management/config/src/providers/features.token.ts @@ -0,0 +1,39 @@ +import { ConfigStateService, featuresFactory, noop } from '@abp/ng.core'; +import { APP_INITIALIZER, inject, InjectionToken } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +export const SETTING_MANAGEMENT_FEATURES = new InjectionToken>( + 'SETTING_MANAGEMENT_FEATURES', + { + providedIn: 'root', + factory: () => { + const configState = inject(ConfigStateService); + const featureKey = 'SettingManagement.Enable'; + const mapFn = features => ({ + enable: features[featureKey].toLowerCase() !== 'false', + }); + return featuresFactory(configState, [featureKey], mapFn); + }, + }, +); + +export const SETTING_MANAGEMENT_ROUTE_VISIBILITY = new InjectionToken>( + 'SETTING_MANAGEMENT_ROUTE_VISIBILITY', + { + providedIn: 'root', + factory: () => { + const stream = inject(SETTING_MANAGEMENT_FEATURES); + return stream.pipe(map(features => features.enable)); + }, + }, +); + +export const SETTING_MANAGEMENT_FEATURES_PROVIDERS = [ + { + provide: APP_INITIALIZER, + useFactory: noop, + deps: [SETTING_MANAGEMENT_ROUTE_VISIBILITY], + multi: true, + }, +]; diff --git a/npm/ng-packs/packages/setting-management/config/src/providers/index.ts b/npm/ng-packs/packages/setting-management/config/src/providers/index.ts index a1e873bacc..b44902e5d5 100644 --- a/npm/ng-packs/packages/setting-management/config/src/providers/index.ts +++ b/npm/ng-packs/packages/setting-management/config/src/providers/index.ts @@ -1,2 +1,3 @@ export * from './route.provider'; export * from './setting-tab.provider'; +export * from './visible.provider'; diff --git a/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts b/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts index 9d272b8be0..6bed72f2fc 100644 --- a/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts +++ b/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts @@ -1,18 +1,9 @@ -import { eLayoutType, RoutesService, SettingTabsService } from '@abp/ng.core'; +import { eLayoutType, noop, RoutesService, SettingTabsService } from '@abp/ng.core'; import { eThemeSharedRouteNames } from '@abp/ng.theme.shared'; -import { APP_INITIALIZER } from '@angular/core'; +import { APP_INITIALIZER, inject, InjectionToken } from '@angular/core'; import { debounceTime, map } from 'rxjs/operators'; import { eSettingManagementRouteNames } from '../enums/route-names'; - -export const SETTING_MANAGEMENT_ROUTE_PROVIDERS = [ - { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, - { - provide: APP_INITIALIZER, - useFactory: hideRoutes, - deps: [RoutesService, SettingTabsService], - multi: true, - }, -]; +import { Observable } from 'rxjs'; export function configureRoutes(routesService: RoutesService) { return () => { @@ -28,16 +19,25 @@ export function configureRoutes(routesService: RoutesService) { ]); }; } - -export function hideRoutes(routesService: RoutesService, settingTabsService: SettingTabsService) { - return () => { - settingTabsService.visible$ - .pipe( +export const SETTING_MANAGEMENT_HAS_SETTING = new InjectionToken>( + 'SETTING_MANAGEMENT_HAS_SETTING', + { + factory: () => { + const settingTabsService = inject(SettingTabsService); + return settingTabsService.visible$.pipe( debounceTime(0), - map(nodes => !nodes.length), - ) - .subscribe(invisible => - routesService.patch(eSettingManagementRouteNames.Settings, { invisible }), + map(nodes => !!nodes.length), ); - }; -} + }, + }, +); + +export const SETTING_MANAGEMENT_ROUTE_PROVIDERS = [ + { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, + { + provide: APP_INITIALIZER, + useFactory: noop, + deps: [SETTING_MANAGEMENT_HAS_SETTING], + multi: true, + }, +]; diff --git a/npm/ng-packs/packages/setting-management/config/src/providers/visible.provider.ts b/npm/ng-packs/packages/setting-management/config/src/providers/visible.provider.ts new file mode 100644 index 0000000000..c7f9bc8e8e --- /dev/null +++ b/npm/ng-packs/packages/setting-management/config/src/providers/visible.provider.ts @@ -0,0 +1,30 @@ +import { APP_INITIALIZER, Injector } from '@angular/core'; +import { combineLatest } from 'rxjs'; +import { RoutesService } from '@abp/ng.core'; +import { SETTING_MANAGEMENT_HAS_SETTING } from './route.provider'; +import { SETTING_MANAGEMENT_ROUTE_VISIBILITY } from './features.token'; +import { eSettingManagementRouteNames } from '../enums'; + +export const SETTING_MANAGEMENT_VISIBLE_PROVIDERS = [ + { + provide: APP_INITIALIZER, + useFactory: setSettingManagementVisibility, + deps: [Injector], + multi: true, + }, +]; + +export function setSettingManagementVisibility(injector: Injector) { + return () => { + const settingManagementHasSetting$ = injector.get(SETTING_MANAGEMENT_HAS_SETTING); + const isSettingManagementFeatureOpen$ = injector.get(SETTING_MANAGEMENT_ROUTE_VISIBILITY); + const routes = injector.get(RoutesService); + combineLatest([settingManagementHasSetting$, isSettingManagementFeatureOpen$]).subscribe( + ([settingManagementHasSetting, isSettingManagementFeatureOpen]) => { + routes.patch(eSettingManagementRouteNames.Settings, { + invisible: !(settingManagementHasSetting && isSettingManagementFeatureOpen), + }); + }, + ); + }; +} diff --git a/npm/ng-packs/packages/setting-management/config/src/setting-management-config.module.ts b/npm/ng-packs/packages/setting-management/config/src/setting-management-config.module.ts index 38c04c68a0..4821dad145 100644 --- a/npm/ng-packs/packages/setting-management/config/src/setting-management-config.module.ts +++ b/npm/ng-packs/packages/setting-management/config/src/setting-management-config.module.ts @@ -1,9 +1,11 @@ import { ModuleWithProviders, NgModule } from '@angular/core'; import { CoreModule } from '@abp/ng.core'; -import { EmailSettingGroupComponent } from './components/email-setting-group/email-setting-group.component'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; +import { SETTING_MANAGEMENT_FEATURES_PROVIDERS } from './providers/features.token'; +import { SETTING_MANAGEMENT_VISIBLE_PROVIDERS } from './providers/visible.provider'; import { SETTING_MANAGEMENT_ROUTE_PROVIDERS } from './providers/route.provider'; import { SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS } from './providers/setting-tab.provider'; -import { NgxValidateCoreModule } from '@ngx-validate/core'; +import { EmailSettingGroupComponent } from './components/email-setting-group/email-setting-group.component'; @NgModule({ imports: [CoreModule, NgxValidateCoreModule], @@ -14,7 +16,12 @@ export class SettingManagementConfigModule { static forRoot(): ModuleWithProviders { return { ngModule: SettingManagementConfigModule, - providers: [SETTING_MANAGEMENT_ROUTE_PROVIDERS, SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS], + providers: [ + SETTING_MANAGEMENT_ROUTE_PROVIDERS, + SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS, + SETTING_MANAGEMENT_FEATURES_PROVIDERS, + SETTING_MANAGEMENT_VISIBLE_PROVIDERS, + ], }; } } From 45befe09ead58de1e0862f166c1f3f263f49a810 Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Tue, 28 Sep 2021 14:43:59 +0300 Subject: [PATCH 2/2] rename variable --- .../config/src/providers/visible.provider.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/npm/ng-packs/packages/setting-management/config/src/providers/visible.provider.ts b/npm/ng-packs/packages/setting-management/config/src/providers/visible.provider.ts index c7f9bc8e8e..e70e037da6 100644 --- a/npm/ng-packs/packages/setting-management/config/src/providers/visible.provider.ts +++ b/npm/ng-packs/packages/setting-management/config/src/providers/visible.provider.ts @@ -17,12 +17,12 @@ export const SETTING_MANAGEMENT_VISIBLE_PROVIDERS = [ export function setSettingManagementVisibility(injector: Injector) { return () => { const settingManagementHasSetting$ = injector.get(SETTING_MANAGEMENT_HAS_SETTING); - const isSettingManagementFeatureOpen$ = injector.get(SETTING_MANAGEMENT_ROUTE_VISIBILITY); + const isSettingManagementFeatureEnable$ = injector.get(SETTING_MANAGEMENT_ROUTE_VISIBILITY); const routes = injector.get(RoutesService); - combineLatest([settingManagementHasSetting$, isSettingManagementFeatureOpen$]).subscribe( - ([settingManagementHasSetting, isSettingManagementFeatureOpen]) => { + combineLatest([settingManagementHasSetting$, isSettingManagementFeatureEnable$]).subscribe( + ([settingManagementHasSetting, isSettingManagementFeatureEnable]) => { routes.patch(eSettingManagementRouteNames.Settings, { - invisible: !(settingManagementHasSetting && isSettingManagementFeatureOpen), + invisible: !(settingManagementHasSetting && isSettingManagementFeatureEnable), }); }, );