Browse Source

feature(setting-management): change setting management module structure

pull/1741/head
mehmet-erim 7 years ago
parent
commit
180d37a653
  1. 1
      npm/ng-packs/packages/setting-management/src/lib/components/index.ts
  2. 17
      npm/ng-packs/packages/setting-management/src/lib/components/services/initial.service.ts
  3. 59
      npm/ng-packs/packages/setting-management/src/lib/components/setting-layout.component.html
  4. 37
      npm/ng-packs/packages/setting-management/src/lib/components/setting-layout.component.ts
  5. 51
      npm/ng-packs/packages/setting-management/src/lib/components/setting/setting.component.html
  6. 20
      npm/ng-packs/packages/setting-management/src/lib/components/setting/setting.component.ts
  7. 1
      npm/ng-packs/packages/setting-management/src/lib/constants/routes.ts
  8. 53
      npm/ng-packs/packages/setting-management/src/lib/services/setting-management.service.ts
  9. 8
      npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts
  10. 19
      npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts
  11. 4
      npm/ng-packs/packages/theme-shared/src/lib/models/setting-management.ts
  12. 9
      npm/ng-packs/tsconfig.json

1
npm/ng-packs/packages/setting-management/src/lib/components/index.ts

@ -1 +0,0 @@
export * from './setting/setting.component';

17
npm/ng-packs/packages/setting-management/src/lib/components/services/initial.service.ts

@ -1,17 +0,0 @@
import { SettingTab } from '@abp/ng.theme.shared';
import { Injectable, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import snq from 'snq';
@Injectable()
export class InitialService {
public settings: SettingTab[];
constructor(private router: Router) {
this.settings = this.router.config
.map(route => snq(() => route.data.routes.settings))
.filter(settings => settings && settings.length)
.reduce((acc, val) => [...acc, ...val], [])
.sort((a, b) => a.order - b.order);
}
}

59
npm/ng-packs/packages/setting-management/src/lib/components/setting-layout.component.html

@ -0,0 +1,59 @@
<div class="row entry-row">
<div class="col-auto">
<h1 class="content-header-title">{{ 'AbpSettingManagement::Settings' | abpLocalization }}</h1>
</div>
<!-- <div id="breadcrumb" class="col-md-auto pl-md-0">
<abp-breadcrumb></abp-breadcrumb>
</div> -->
<div class="col">
<div class="text-lg-right pt-2" id="AbpContentToolbar"></div>
</div>
</div>
<div id="SettingManagementWrapper">
<div class="card">
<div class="card-body">
<div *ngIf="!settingManagementService.settings.length" class="text-center">
<i class="fa fa-spinner fa-spin"></i>
</div>
<div class="row">
<div class="col-3">
<ul class="nav flex-column nav-pills" id="nav-tab" role="tablist">
<li
*abpFor="
let setting of settingManagementService.settings;
trackBy: trackByFn;
orderBy: 'order';
orderDir: 'ASC'
"
(click)="settingManagementService.setSelected(setting)"
class="nav-item"
[abpPermission]="setting.requiredPolicy"
>
<a
class="nav-link"
[id]="setting.name + '-tab'"
role="tab"
[class.active]="setting.name === settingManagementService.selected.name"
>{{ setting.name | abpLocalization }}</a
>
</li>
</ul>
</div>
<div class="col-9">
<div *ngIf="settingManagementService.settings.length" class="tab-content">
<div
class="tab-pane fade show active"
[id]="settingManagementService.selected.name + '-tab'"
role="tabpanel"
>
<h2>{{ settingManagementService.selected.name | abpLocalization }}</h2>
<hr class="my-4" />
<router-outlet></router-outlet>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

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

@ -0,0 +1,37 @@
import { eLayoutType } from '@abp/ng.core';
import { SettingTab } from '@abp/ng.theme.shared';
import { Component, TrackByFunction } from '@angular/core';
import { Router } from '@angular/router';
import { timer } from 'rxjs';
import { SettingManagementService } from '../services/setting-management.service';
@Component({
selector: 'abp-setting-layout',
templateUrl: './setting-layout.component.html',
})
export class SettingLayoutComponent {
// required for dynamic component
static type = eLayoutType.setting;
trackByFn: TrackByFunction<SettingTab> = (_, item) => item.name;
constructor(public settingManagementService: SettingManagementService, private router: Router) {
if (
settingManagementService.selected &&
this.router.url !== settingManagementService.selected.url &&
settingManagementService.settings.length
) {
settingManagementService.setSelected(settingManagementService.settings[0]);
}
}
ngOnDestroy() {}
ngAfterViewInit() {
timer(250).subscribe(() => {
if (!this.settingManagementService.settings.length) {
this.settingManagementService.setSettings();
}
});
}
}

51
npm/ng-packs/packages/setting-management/src/lib/components/setting/setting.component.html

@ -1,51 +0,0 @@
<div class="row entry-row">
<div class="col-auto">
<h1 class="content-header-title">{{ 'AbpSettingManagement::Settings' | abpLocalization }}</h1>
</div>
<div id="breadcrumb" class="col-md-auto pl-md-0">
<abp-breadcrumb></abp-breadcrumb>
</div>
<div class="col">
<div class="text-lg-right pt-2" id="AbpContentToolbar"></div>
</div>
</div>
<div id="SettingManagementWrapper">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-3">
<ul class="nav flex-column nav-pills" id="T515ccf3324254f41a4a9a6b34b0dae56" role="tablist">
<li
*ngFor="let setting of settings"
(click)="selected = setting"
class="nav-item"
[abpPermission]="setting.requiredPolicy"
>
<a
class="nav-link"
[id]="setting.name + '-tab'"
role="tab"
[class.active]="setting.name === selected.name"
>{{ setting.name | abpLocalization }}</a
>
</li>
</ul>
</div>
<div class="col-9">
<div class="tab-content">
<div class="tab-pane fade show active" [id]="selected.name + '-tab'" role="tabpanel">
<h2>{{ selected.name | abpLocalization }}</h2>
<hr class="my-4" />
<ng-container
*ngComponentOutlet="selected.component"
[abpPermission]="selected.requiredPolicy"
></ng-container>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

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

@ -1,20 +0,0 @@
import { Component, OnInit } from '@angular/core';
import { SettingTab, fade } from '@abp/ng.theme.shared';
import { InitialService } from '../services/initial.service';
@Component({
selector: 'abp-setting',
templateUrl: './setting.component.html',
})
export class SettingComponent implements OnInit {
settings: SettingTab[];
selected = {} as SettingTab;
constructor(private initialService: InitialService) {}
ngOnInit() {
this.settings = this.initialService.settings;
this.selected = this.settings[0];
}
}

1
npm/ng-packs/packages/setting-management/src/lib/constants/routes.ts

@ -11,5 +11,4 @@ export const SETTING_MANAGEMENT_ROUTES = {
iconClass: 'fa fa-cog',
},
] as ABP.FullRoute[],
settings: [],
};

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

@ -0,0 +1,53 @@
import { SettingTab } from '@abp/ng.theme.shared';
import { Injectable } from '@angular/core';
import { Router, RouteConfigLoadEnd, NavigationEnd } from '@angular/router';
import { Navigate } from '@ngxs/router-plugin';
import { Store } from '@ngxs/store';
import { filter } from 'rxjs/operators';
import { takeUntilDestroy } from '@abp/ng.core';
import { Subscription, timer } from 'rxjs';
@Injectable({ providedIn: 'root' })
export class SettingManagementService {
settings: SettingTab[] = [];
selected = {} as SettingTab;
constructor(private router: Router, private store: Store) {
let timeout: Subscription;
this.router.events
.pipe(
filter(event => event instanceof RouteConfigLoadEnd),
takeUntilDestroy(this),
)
.subscribe(event => {
if (timeout) timeout.unsubscribe();
timeout = timer(150).subscribe(() => {
this.setSettings();
});
});
}
ngOnDestroy() {}
setSettings() {
setTimeout(() => {
const route = this.router.config.find(r => r.path === 'setting-management');
this.settings = route.data.settings.sort((a, b) => a.order - b.order);
this.checkSelected();
}, 0);
}
checkSelected() {
this.selected = this.settings.find(setting => setting.url === this.router.url) || ({} as SettingTab);
if (!this.selected.name && this.settings.length) {
this.setSelected(this.settings[0]);
}
}
setSelected(selected: SettingTab) {
this.selected = selected;
this.store.dispatch(new Navigate([selected.url]));
}
}

8
npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts

@ -1,13 +1,15 @@
import { DynamicLayoutComponent } from '@abp/ng.core';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { SettingComponent } from './components/setting/setting.component';
import { SETTING_MANAGEMENT_ROUTES } from './constants/routes';
import { SettingLayoutComponent } from './components/setting-layout.component';
const routes: Routes = [
{
path: '',
path: 'setting-management',
component: DynamicLayoutComponent,
children: [{ path: '', component: SettingComponent }],
children: [{ path: '', component: SettingLayoutComponent }],
data: { routes: SETTING_MANAGEMENT_ROUTES, settings: [] },
},
];

19
npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts

@ -1,15 +1,14 @@
import { CoreModule, noop } from '@abp/ng.core';
import { NgModule, ModuleWithProviders, APP_INITIALIZER, Self } from '@angular/core';
import { SettingComponent } from './components/setting/setting.component';
import { SettingManagementRoutingModule } from './setting-management-routing.module';
import { CoreModule } from '@abp/ng.core';
import { ThemeSharedModule } from '@abp/ng.theme.shared';
import { InitialService } from './components/services/initial.service';
import { NgModule } from '@angular/core';
import { SettingLayoutComponent } from './components/setting-layout.component';
import { SettingManagementRoutingModule } from './setting-management-routing.module';
export const SETTING_LAYOUT = SettingLayoutComponent;
@NgModule({
declarations: [SettingComponent],
declarations: [SETTING_LAYOUT],
imports: [SettingManagementRoutingModule, CoreModule, ThemeSharedModule],
providers: [InitialService],
entryComponents: [SETTING_LAYOUT],
})
export class SettingManagementModule {
constructor(@Self() initialService: InitialService) {}
}
export class SettingManagementModule {}

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

@ -1,8 +1,6 @@
import { Type } from '@angular/core';
export interface SettingTab {
name: string;
order: number;
component: Type<any>;
requiredPolicy?: string;
url?: string;
}

9
npm/ng-packs/tsconfig.json

@ -11,8 +11,13 @@
"moduleResolution": "node",
"importHelpers": true,
"target": "es2015",
"typeRoots": ["node_modules/@types"],
"lib": ["es2018", "dom"],
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2018",
"dom"
],
"paths": {}
},
"angularCompilerOptions": {

Loading…
Cancel
Save