Browse Source

refactor: routes and settings contants pushing method

#1652
pull/1867/head
mehmet-erim 7 years ago
parent
commit
633d1cd155
  1. 29
      npm/ng-packs/packages/core/src/lib/plugins/config/config.plugin.ts
  2. 14
      npm/ng-packs/packages/core/src/lib/utils/route-utils.ts
  3. 19
      npm/ng-packs/packages/setting-management-config/src/lib/services/setting-management-config.service.ts
  4. 8
      npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts
  5. 14
      npm/ng-packs/packages/theme-shared/src/lib/models/setting-management.ts

29
npm/ng-packs/packages/core/src/lib/plugins/config/config.plugin.ts

@ -3,25 +3,11 @@ import { Router, Routes } from '@angular/router';
import { actionMatcher, InitState, NgxsNextPluginFn, NgxsPlugin, setValue, UpdateState } from '@ngxs/store';
import snq from 'snq';
import { ABP } from '../../models';
import { organizeRoutes } from '../../utils/route-utils';
import { organizeRoutes, getAbpRoutes } from '../../utils/route-utils';
import clone from 'just-clone';
export const NGXS_CONFIG_PLUGIN_OPTIONS = new InjectionToken('NGXS_CONFIG_PLUGIN_OPTIONS');
let ABP_ROUTES = [] as ABP.FullRoute[];
export function addAbpRoutes(routes: ABP.FullRoute | ABP.FullRoute[]): void {
if (!Array.isArray(routes)) {
routes = [routes];
}
ABP_ROUTES.push(...routes);
}
export function getAbpRoutes(): ABP.FullRoute[] {
return [];
}
@Injectable()
export class ConfigPlugin implements NgxsPlugin {
private initialized = false;
@ -54,24 +40,21 @@ export class ConfigPlugin implements NgxsPlugin {
}
function transformRoutes(routes: Routes = [], wrappers: ABP.FullRoute[] = []): any {
/**
*
* @deprecated since version 0.9.0
*/
const abpRoutes: ABP.FullRoute[] = routes
// TODO: remove in v1
const oldAbpRoutes: ABP.FullRoute[] = routes
.filter(route => {
return snq(() => route.data.routes.routes.find(r => r.path === route.path), false);
})
.reduce((acc, val) => [...acc, ...val.data.routes.routes], []);
// tslint:disable-next-line: deprecation
ABP_ROUTES = [...ABP_ROUTES, ...abpRoutes];
const abpRoutes = [...getAbpRoutes(), ...oldAbpRoutes];
wrappers = ABP_ROUTES.filter(ar => ar.wrapper);
wrappers = abpRoutes.filter(ar => ar.wrapper);
const transformed = [] as ABP.FullRoute[];
routes
.filter(route => route.component || route.loadChildren)
.forEach(route => {
const abpPackage = ABP_ROUTES.find(abp => abp.path.toLowerCase() === route.path.toLowerCase() && !abp.wrapper);
const abpPackage = abpRoutes.find(abp => abp.path.toLowerCase() === route.path.toLowerCase() && !abp.wrapper);
const { length } = transformed;

14
npm/ng-packs/packages/core/src/lib/utils/route-utils.ts

@ -60,3 +60,17 @@ export function sortRoutes(routes: ABP.FullRoute[] = []): ABP.FullRoute[] {
return route;
});
}
const ABP_ROUTES = [] as ABP.FullRoute[];
export function addAbpRoutes(routes: ABP.FullRoute | ABP.FullRoute[]): void {
if (!Array.isArray(routes)) {
routes = [routes];
}
ABP_ROUTES.push(...routes);
}
export function getAbpRoutes(): ABP.FullRoute[] {
return ABP_ROUTES;
}

19
npm/ng-packs/packages/setting-management-config/src/lib/services/setting-management-config.service.ts

@ -1,18 +1,29 @@
import { Injectable } from '@angular/core';
import { addAbpRoutes, eLayoutType } from '@abp/ng.core';
import { addAbpRoutes, eLayoutType, PatchRouteByName, ABP } from '@abp/ng.core';
import { getSettingTabs } from '@abp/ng.theme.shared';
import { Store } from '@ngxs/store';
@Injectable({
providedIn: 'root',
})
export class SettingManagementConfigService {
constructor() {
addAbpRoutes({
name: 'Settings',
constructor(private store: Store) {
const route = {
name: 'AbpSettingManagement::Settings',
path: 'setting-management',
parentName: 'AbpUiNavigation::Menu:Administration',
layout: eLayoutType.application,
order: 6,
iconClass: 'fa fa-cog',
} as ABP.FullRoute;
addAbpRoutes(route);
setTimeout(() => {
const tabs = getSettingTabs();
if (!tabs || !tabs.length) {
this.store.dispatch(new PatchRouteByName('AbpSettingManagement::Settings', { ...route, invisible: true }));
}
});
}
}

8
npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts

@ -1,5 +1,5 @@
import { Component, TrackByFunction, OnInit } from '@angular/core';
import { SettingTab, SETTING_TABS } from '@abp/ng.theme.shared';
import { SettingTab, getSettingTabs } from '@abp/ng.theme.shared';
import { Router } from '@angular/router';
import { Store } from '@ngxs/store';
import { ConfigState } from '@abp/ng.core';
@ -18,9 +18,9 @@ export class SettingManagementComponent implements OnInit {
constructor(private router: Router, private store: Store) {}
ngOnInit() {
this.settings = SETTING_TABS.filter(setting =>
this.store.selectSnapshot(ConfigState.getGrantedPolicy(setting.requiredPolicy)),
).sort((a, b) => a.order - b.order);
this.settings = getSettingTabs()
.filter(setting => this.store.selectSnapshot(ConfigState.getGrantedPolicy(setting.requiredPolicy)))
.sort((a, b) => a.order - b.order);
if (this.settings.length) {
this.selected = this.settings[0];
}

14
npm/ng-packs/packages/theme-shared/src/lib/models/setting-management.ts

@ -7,4 +7,16 @@ export interface SettingTab {
requiredPolicy?: string;
}
export const SETTING_TABS = [] as SettingTab[];
const SETTING_TABS = [] as SettingTab[];
export function addSettingTab(tab: SettingTab | SettingTab[]): void {
if (!Array.isArray(tab)) {
tab = [tab];
}
SETTING_TABS.push(...tab);
}
export function getSettingTabs(): SettingTab[] {
return SETTING_TABS;
}

Loading…
Cancel
Save