Merge pull request #10168 from abpframework/auto-merge/rel-4-4/560

Merge branch dev with rel-4.4
pull/10171/head
Muhammed Altuğ 4 years ago committed by GitHub
commit 76f2ba32cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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<Observable<{ enable: boolean }>>(
'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<Observable<boolean>>(
'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,
},
];

@ -1,2 +1,3 @@
export * from './route.provider';
export * from './setting-tab.provider';
export * from './visible.provider';

@ -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<Observable<boolean>>(
'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,
},
];

@ -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 isSettingManagementFeatureEnable$ = injector.get(SETTING_MANAGEMENT_ROUTE_VISIBILITY);
const routes = injector.get(RoutesService);
combineLatest([settingManagementHasSetting$, isSettingManagementFeatureEnable$]).subscribe(
([settingManagementHasSetting, isSettingManagementFeatureEnable]) => {
routes.patch(eSettingManagementRouteNames.Settings, {
invisible: !(settingManagementHasSetting && isSettingManagementFeatureEnable),
});
},
);
};
}

@ -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<SettingManagementConfigModule> {
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,
],
};
}
}

Loading…
Cancel
Save