devextreme-schematics 1.3.0-beta.1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +10 -8
- package/src/add-app-template/index.js +2 -1
- package/src/add-app-template/index.js.map +1 -1
- package/src/add-app-template/index.ts +30 -0
- package/src/add-app-template/index_spec.js +6 -5
- package/src/add-app-template/index_spec.js.map +1 -1
- package/src/add-app-template/index_spec.ts +73 -0
- package/src/add-app-template/schema.json +7 -3
- package/src/add-layout/files/devextreme.json +1 -1
- package/src/add-layout/files/src/app/__name__.component.html +3 -3
- package/src/add-layout/files/src/app/__name__.component.ts +1 -1
- package/src/add-layout/files/src/app/app-routing.module.ts +1 -1
- package/src/add-layout/files/src/app/layouts/side-nav-inner-toolbar/side-nav-inner-toolbar.component.ts +13 -11
- package/src/add-layout/files/src/app/layouts/side-nav-outer-toolbar/side-nav-outer-toolbar.component.ts +10 -9
- package/src/add-layout/files/src/app/layouts/single-card/single-card.component.ts +4 -4
- package/src/add-layout/files/src/app/not-authorized-container.ts +2 -0
- package/src/add-layout/files/src/app/shared/components/change-password-form/change-password-form.component.html +8 -6
- package/src/add-layout/files/src/app/shared/components/change-password-form/change-password-form.component.ts +6 -15
- package/src/add-layout/files/src/app/shared/components/create-account-form/create-account-form.component.html +9 -7
- package/src/add-layout/files/src/app/shared/components/create-account-form/create-account-form.component.ts +4 -13
- package/src/add-layout/files/src/app/shared/components/header/header.component.ts +11 -6
- package/src/add-layout/files/src/app/shared/components/login-form/login-form.component.html +8 -6
- package/src/add-layout/files/src/app/shared/components/login-form/login-form.component.ts +2 -12
- package/src/add-layout/files/src/app/shared/components/reset-password-form/reset-password-form.component.html +8 -6
- package/src/add-layout/files/src/app/shared/components/reset-password-form/reset-password-form.component.ts +2 -12
- package/src/add-layout/files/src/app/shared/components/side-navigation-menu/side-navigation-menu.component.ts +8 -7
- package/src/add-layout/files/src/app/shared/components/user-panel/user-panel.component.html +5 -2
- package/src/add-layout/files/src/app/shared/components/user-panel/user-panel.component.ts +3 -2
- package/src/add-layout/files/src/app/shared/services/auth.service.ts +11 -5
- package/src/add-layout/files/src/app/shared/services/screen.service.ts +2 -2
- package/src/add-layout/files/src/app/unauthenticated-content.ts +53 -0
- package/src/add-layout/files/src/dx-styles.scss +4 -0
- package/src/add-layout/index.js +45 -31
- package/src/add-layout/index.js.map +1 -1
- package/src/add-layout/index.ts +384 -0
- package/src/add-layout/index_spec.js +42 -28
- package/src/add-layout/index_spec.js.map +1 -1
- package/src/add-layout/index_spec.ts +340 -0
- package/src/add-layout/schema.json +6 -2
- package/src/add-sample-views/files/pages/home/home.component.html +5 -5
- package/src/add-sample-views/files/pages/profile/profile.component.ts +1 -1
- package/src/add-sample-views/files/pages/tasks/tasks.component.html +1 -0
- package/src/add-sample-views/index.js +13 -4
- package/src/add-sample-views/index.js.map +1 -1
- package/src/add-sample-views/index.ts +141 -0
- package/src/add-sample-views/index_spec.js +5 -4
- package/src/add-sample-views/index_spec.js.map +1 -1
- package/src/add-sample-views/index_spec.ts +74 -0
- package/src/add-sample-views/schema.json +1 -1
- package/src/add-view/index.d.ts +2 -2
- package/src/add-view/index.js +33 -22
- package/src/add-view/index.js.map +1 -1
- package/src/add-view/index.ts +166 -0
- package/src/add-view/index_spec.js +12 -12
- package/src/add-view/index_spec.js.map +1 -1
- package/src/add-view/index_spec.ts +155 -0
- package/src/add-view/schema.json +4 -4
- package/src/collection.json +2 -1
- package/src/install/index.js +16 -3
- package/src/install/index.js.map +1 -1
- package/src/install/index.ts +88 -0
- package/src/install/index_spec.js +10 -9
- package/src/install/index_spec.js.map +1 -1
- package/src/install/index_spec.ts +106 -0
- package/src/install/schema.json +2 -2
- package/src/utility/array.js +1 -0
- package/src/utility/array.js.map +1 -1
- package/src/utility/array.ts +3 -0
- package/src/utility/change.js +1 -0
- package/src/utility/change.js.map +1 -1
- package/src/utility/change.ts +66 -0
- package/src/utility/latest-versions.d.ts +1 -1
- package/src/utility/latest-versions.js +3 -2
- package/src/utility/latest-versions.js.map +1 -1
- package/src/utility/latest-versions.ts +6 -0
- package/src/utility/modify-json-file.d.ts +1 -0
- package/src/utility/modify-json-file.js +7 -3
- package/src/utility/modify-json-file.js.map +1 -1
- package/src/utility/modify-json-file.ts +16 -0
- package/src/utility/project.d.ts +4 -4
- package/src/utility/project.js +35 -12
- package/src/utility/project.js.map +1 -1
- package/src/utility/project.ts +30 -0
- package/src/utility/routing.js +1 -0
- package/src/utility/routing.js.map +1 -1
- package/src/utility/routing.ts +44 -0
- package/src/utility/source.js +1 -0
- package/src/utility/source.js.map +1 -1
- package/src/utility/source.ts +16 -0
- package/src/utility/string.js +1 -0
- package/src/utility/string.js.map +1 -1
- package/src/utility/string.ts +5 -0
- package/src/utility/styles.d.ts +1 -2
- package/src/utility/styles.js +3 -4
- package/src/utility/styles.js.map +1 -1
- package/src/utility/styles.ts +30 -0
@@ -1,11 +1,12 @@
|
|
1
1
|
import { Component, NgModule, Input, Output, EventEmitter, OnInit } from '@angular/core';
|
2
2
|
import { CommonModule } from '@angular/common';
|
3
3
|
|
4
|
-
import { AuthService } from '../../services';
|
4
|
+
import { AuthService, IUser } from '../../services';
|
5
5
|
import { UserPanelModule } from '../user-panel/user-panel.component';
|
6
6
|
import { DxButtonModule } from 'devextreme-angular/ui/button';
|
7
7
|
import { DxToolbarModule } from 'devextreme-angular/ui/toolbar';
|
8
8
|
|
9
|
+
import { Router } from '@angular/router';
|
9
10
|
@Component({
|
10
11
|
selector: 'app-header',
|
11
12
|
templateUrl: 'header.component.html',
|
@@ -20,14 +21,18 @@ export class HeaderComponent implements OnInit {
|
|
20
21
|
menuToggleEnabled = false;
|
21
22
|
|
22
23
|
@Input()
|
23
|
-
title
|
24
|
+
title!: string;
|
24
25
|
|
25
|
-
user = { email: '' };
|
26
|
+
user: IUser | null = { email: '' };
|
26
27
|
|
27
28
|
userMenuItems = [{
|
28
29
|
text: 'Profile',
|
29
|
-
icon: 'user'
|
30
|
-
|
30
|
+
icon: 'user',
|
31
|
+
onClick: () => {
|
32
|
+
this.router.navigate(['/profile']);
|
33
|
+
}
|
34
|
+
},
|
35
|
+
{
|
31
36
|
text: 'Logout',
|
32
37
|
icon: 'runner',
|
33
38
|
onClick: () => {
|
@@ -35,7 +40,7 @@ export class HeaderComponent implements OnInit {
|
|
35
40
|
}
|
36
41
|
}];
|
37
42
|
|
38
|
-
constructor(private authService: AuthService) { }
|
43
|
+
constructor(private authService: AuthService, private router: Router) { }
|
39
44
|
|
40
45
|
ngOnInit() {
|
41
46
|
this.authService.getUser().then((e) => this.user = e.data);
|
@@ -35,12 +35,14 @@
|
|
35
35
|
</dxi-item>
|
36
36
|
|
37
37
|
<ng-container *dxTemplate="let item of 'signInTemplate'">
|
38
|
-
<
|
39
|
-
<
|
40
|
-
<
|
41
|
-
|
42
|
-
|
43
|
-
|
38
|
+
<div>
|
39
|
+
<span class="dx-button-text">
|
40
|
+
<ng-container *ngIf="loading; else notLoading">
|
41
|
+
<dx-load-indicator width="24px" height="24px" [visible]="true"></dx-load-indicator>
|
42
|
+
</ng-container>
|
43
|
+
<ng-template #notLoading>Sign In</ng-template>
|
44
|
+
</span>
|
45
|
+
</div>
|
44
46
|
</ng-container>
|
45
47
|
|
46
48
|
</dx-form>
|
@@ -1,13 +1,8 @@
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
2
2
|
import { Component, NgModule } from '@angular/core';
|
3
3
|
import { Router, RouterModule } from '@angular/router';
|
4
|
-
import { DxButtonModule } from 'devextreme-angular/ui/button';
|
5
|
-
import { DxCheckBoxModule } from 'devextreme-angular/ui/check-box';
|
6
4
|
import { DxFormModule } from 'devextreme-angular/ui/form';
|
7
5
|
import { DxLoadIndicatorModule } from 'devextreme-angular/ui/load-indicator';
|
8
|
-
import { DxTextBoxModule } from 'devextreme-angular/ui/text-box';
|
9
|
-
import { DxValidationGroupModule } from 'devextreme-angular/ui/validation-group';
|
10
|
-
import { DxValidatorModule } from 'devextreme-angular/ui/validator';
|
11
6
|
import notify from 'devextreme/ui/notify';
|
12
7
|
import { AuthService } from '../../services';
|
13
8
|
|
@@ -23,7 +18,7 @@ export class LoginFormComponent {
|
|
23
18
|
|
24
19
|
constructor(private authService: AuthService, private router: Router) { }
|
25
20
|
|
26
|
-
async onSubmit(e) {
|
21
|
+
async onSubmit(e: Event) {
|
27
22
|
e.preventDefault();
|
28
23
|
const { email, password } = this.formData;
|
29
24
|
this.loading = true;
|
@@ -43,13 +38,8 @@ export class LoginFormComponent {
|
|
43
38
|
imports: [
|
44
39
|
CommonModule,
|
45
40
|
RouterModule,
|
46
|
-
DxButtonModule,
|
47
|
-
DxCheckBoxModule,
|
48
|
-
DxTextBoxModule,
|
49
41
|
DxFormModule,
|
50
|
-
|
51
|
-
DxLoadIndicatorModule,
|
52
|
-
DxValidationGroupModule
|
42
|
+
DxLoadIndicatorModule
|
53
43
|
],
|
54
44
|
declarations: [ LoginFormComponent ],
|
55
45
|
exports: [ LoginFormComponent ]
|
@@ -20,12 +20,14 @@
|
|
20
20
|
</dxi-item>
|
21
21
|
|
22
22
|
<ng-container *dxTemplate="let item of 'resetPasswordTemplate'">
|
23
|
-
<
|
24
|
-
<
|
25
|
-
<
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
<div>
|
24
|
+
<span class="dx-button-text">
|
25
|
+
<ng-container *ngIf="loading; else notLoading">
|
26
|
+
<dx-load-indicator width="24px" height="24px" [visible]="true"></dx-load-indicator>
|
27
|
+
</ng-container>
|
28
|
+
<ng-template #notLoading>Reset my password</ng-template>
|
29
|
+
</span>
|
30
|
+
</div>>
|
29
31
|
</ng-container>
|
30
32
|
|
31
33
|
</dx-form>
|
@@ -1,13 +1,8 @@
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
2
2
|
import { Component, NgModule } from '@angular/core';
|
3
3
|
import { Router, RouterModule } from '@angular/router';
|
4
|
-
import { DxButtonModule } from 'devextreme-angular/ui/button';
|
5
|
-
import { DxCheckBoxModule } from 'devextreme-angular/ui/check-box';
|
6
4
|
import { DxFormModule } from 'devextreme-angular/ui/form';
|
7
5
|
import { DxLoadIndicatorModule } from 'devextreme-angular/ui/load-indicator';
|
8
|
-
import { DxTextBoxModule } from 'devextreme-angular/ui/text-box';
|
9
|
-
import { DxValidationGroupModule } from 'devextreme-angular/ui/validation-group';
|
10
|
-
import { DxValidatorModule } from 'devextreme-angular/ui/validator';
|
11
6
|
import notify from 'devextreme/ui/notify';
|
12
7
|
import { AuthService } from '../../services';
|
13
8
|
|
@@ -24,7 +19,7 @@ export class ResetPasswordFormComponent {
|
|
24
19
|
|
25
20
|
constructor(private authService: AuthService, private router: Router) { }
|
26
21
|
|
27
|
-
async onSubmit(e) {
|
22
|
+
async onSubmit(e: Event) {
|
28
23
|
e.preventDefault();
|
29
24
|
const { email } = this.formData;
|
30
25
|
this.loading = true;
|
@@ -44,13 +39,8 @@ export class ResetPasswordFormComponent {
|
|
44
39
|
imports: [
|
45
40
|
CommonModule,
|
46
41
|
RouterModule,
|
47
|
-
DxButtonModule,
|
48
|
-
DxCheckBoxModule,
|
49
|
-
DxTextBoxModule,
|
50
42
|
DxFormModule,
|
51
|
-
|
52
|
-
DxLoadIndicatorModule,
|
53
|
-
DxValidationGroupModule
|
43
|
+
DxLoadIndicatorModule
|
54
44
|
],
|
55
45
|
declarations: [ResetPasswordFormComponent],
|
56
46
|
exports: [ResetPasswordFormComponent]
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { Component, NgModule, Output, Input, EventEmitter, ViewChild, ElementRef, AfterViewInit, OnDestroy } from '@angular/core';
|
2
|
+
import { ItemClickEvent } from 'devextreme/ui/tree_view';
|
2
3
|
import { DxTreeViewModule, DxTreeViewComponent } from 'devextreme-angular/ui/tree-view';
|
3
4
|
import { navigation } from '../../../app-navigation';
|
4
5
|
|
@@ -11,15 +12,15 @@ import * as events from 'devextreme/events';
|
|
11
12
|
})
|
12
13
|
export class SideNavigationMenuComponent implements AfterViewInit, OnDestroy {
|
13
14
|
@ViewChild(DxTreeViewComponent, { static: true })
|
14
|
-
menu
|
15
|
+
menu!: DxTreeViewComponent;
|
15
16
|
|
16
17
|
@Output()
|
17
|
-
selectedItemChanged = new EventEmitter<
|
18
|
+
selectedItemChanged = new EventEmitter<ItemClickEvent>();
|
18
19
|
|
19
20
|
@Output()
|
20
21
|
openMenu = new EventEmitter<any>();
|
21
22
|
|
22
|
-
private _selectedItem
|
23
|
+
private _selectedItem!: String;
|
23
24
|
@Input()
|
24
25
|
set selectedItem(value: String) {
|
25
26
|
this._selectedItem = value;
|
@@ -30,11 +31,11 @@ export class SideNavigationMenuComponent implements AfterViewInit, OnDestroy {
|
|
30
31
|
this.menu.instance.selectItem(value);
|
31
32
|
}
|
32
33
|
|
33
|
-
private _items;
|
34
|
+
private _items!: Record <string, unknown>[];
|
34
35
|
get items() {
|
35
36
|
if (!this._items) {
|
36
37
|
this._items = navigation.map((item) => {
|
37
|
-
if(item.path && !(/^\//.test(item.path))){
|
38
|
+
if(item.path && !(/^\//.test(item.path))){
|
38
39
|
item.path = `/${item.path}`;
|
39
40
|
}
|
40
41
|
return { ...item, expanded: !this._compactMode }
|
@@ -65,12 +66,12 @@ export class SideNavigationMenuComponent implements AfterViewInit, OnDestroy {
|
|
65
66
|
|
66
67
|
constructor(private elementRef: ElementRef) { }
|
67
68
|
|
68
|
-
onItemClick(event) {
|
69
|
+
onItemClick(event: ItemClickEvent) {
|
69
70
|
this.selectedItemChanged.emit(event);
|
70
71
|
}
|
71
72
|
|
72
73
|
ngAfterViewInit() {
|
73
|
-
events.on(this.elementRef.nativeElement, 'dxclick', (e) => {
|
74
|
+
events.on(this.elementRef.nativeElement, 'dxclick', (e: Event) => {
|
74
75
|
this.openMenu.next(e);
|
75
76
|
});
|
76
77
|
}
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<div class="image-container">
|
4
4
|
<div class="user-image"></div>
|
5
5
|
</div>
|
6
|
-
<div class="user-name">{{user
|
6
|
+
<div class="user-name">{{user?.email}}</div>
|
7
7
|
</div>
|
8
8
|
<dx-context-menu
|
9
9
|
*ngIf="menuMode === 'context'"
|
@@ -11,7 +11,10 @@
|
|
11
11
|
target=".user-button"
|
12
12
|
showEvent="dxclick"
|
13
13
|
width="210px"
|
14
|
-
[position]="{
|
14
|
+
[position]="{
|
15
|
+
my: 'top',
|
16
|
+
at: 'bottom'
|
17
|
+
}"
|
15
18
|
cssClass="user-menu">
|
16
19
|
</dx-context-menu>
|
17
20
|
<dx-list
|
@@ -3,6 +3,7 @@ import { CommonModule } from '@angular/common';
|
|
3
3
|
|
4
4
|
import { DxListModule } from 'devextreme-angular/ui/list';
|
5
5
|
import { DxContextMenuModule } from 'devextreme-angular/ui/context-menu';
|
6
|
+
import { IUser } from '../../services/auth.service';
|
6
7
|
|
7
8
|
@Component({
|
8
9
|
selector: 'app-user-panel',
|
@@ -15,10 +16,10 @@ export class UserPanelComponent {
|
|
15
16
|
menuItems: any;
|
16
17
|
|
17
18
|
@Input()
|
18
|
-
menuMode
|
19
|
+
menuMode!: string;
|
19
20
|
|
20
21
|
@Input()
|
21
|
-
user
|
22
|
+
user!: IUser | null;
|
22
23
|
|
23
24
|
constructor() {}
|
24
25
|
}
|
@@ -1,6 +1,11 @@
|
|
1
1
|
import { Injectable } from '@angular/core';
|
2
2
|
import { CanActivate, Router, ActivatedRouteSnapshot } from '@angular/router';
|
3
3
|
|
4
|
+
export interface IUser {
|
5
|
+
email: string;
|
6
|
+
avatarUrl?: string
|
7
|
+
}
|
8
|
+
|
4
9
|
const defaultPath = '/';
|
5
10
|
const defaultUser = {
|
6
11
|
email: 'sandra@example.com',
|
@@ -9,7 +14,7 @@ const defaultUser = {
|
|
9
14
|
|
10
15
|
@Injectable()
|
11
16
|
export class AuthService {
|
12
|
-
private _user = defaultUser;
|
17
|
+
private _user: IUser | null = defaultUser;
|
13
18
|
get loggedIn(): boolean {
|
14
19
|
return !!this._user;
|
15
20
|
}
|
@@ -53,12 +58,13 @@ export class AuthService {
|
|
53
58
|
}
|
54
59
|
catch {
|
55
60
|
return {
|
56
|
-
isOk: false
|
61
|
+
isOk: false,
|
62
|
+
data: null
|
57
63
|
};
|
58
64
|
}
|
59
65
|
}
|
60
66
|
|
61
|
-
async createAccount(email, password) {
|
67
|
+
async createAccount(email: string, password: string) {
|
62
68
|
try {
|
63
69
|
// Send request
|
64
70
|
console.log(email, password);
|
@@ -127,7 +133,7 @@ export class AuthGuardService implements CanActivate {
|
|
127
133
|
'reset-password',
|
128
134
|
'create-account',
|
129
135
|
'change-password/:recoveryCode'
|
130
|
-
].includes(route.routeConfig
|
136
|
+
].includes(route.routeConfig?.path || defaultPath);
|
131
137
|
|
132
138
|
if (isLoggedIn && isAuthForm) {
|
133
139
|
this.authService.lastAuthenticatedPath = defaultPath;
|
@@ -140,7 +146,7 @@ export class AuthGuardService implements CanActivate {
|
|
140
146
|
}
|
141
147
|
|
142
148
|
if (isLoggedIn) {
|
143
|
-
this.authService.lastAuthenticatedPath = route.routeConfig
|
149
|
+
this.authService.lastAuthenticatedPath = route.routeConfig?.path || defaultPath;
|
144
150
|
}
|
145
151
|
|
146
152
|
return isLoggedIn || isAuthForm;
|
@@ -8,7 +8,7 @@ export class ScreenService {
|
|
8
8
|
constructor(private breakpointObserver: BreakpointObserver) {
|
9
9
|
this.breakpointObserver
|
10
10
|
.observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large])
|
11
|
-
.subscribe(() => this.changed.next());
|
11
|
+
.subscribe(() => this.changed.next(true));
|
12
12
|
}
|
13
13
|
|
14
14
|
private isLargeScreen() {
|
@@ -18,7 +18,7 @@ export class ScreenService {
|
|
18
18
|
return isLarge || isXLarge;
|
19
19
|
}
|
20
20
|
|
21
|
-
public get sizes() {
|
21
|
+
public get sizes(): Record<string, boolean> {
|
22
22
|
return {
|
23
23
|
'screen-x-small': this.breakpointObserver.isMatched(Breakpoints.XSmall),
|
24
24
|
'screen-small': this.breakpointObserver.isMatched(Breakpoints.Small),
|
@@ -0,0 +1,53 @@
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
2
|
+
import { Component, NgModule } from '@angular/core';
|
3
|
+
import { RouterModule } from '@angular/router';
|
4
|
+
import { SingleCardModule } from 'src/app/layouts';
|
5
|
+
import { Router } from '@angular/router';
|
6
|
+
|
7
|
+
@Component({
|
8
|
+
selector: 'app-unauthenticated-content',
|
9
|
+
template: `
|
10
|
+
<app-single-card [title]="title" [description]="description">
|
11
|
+
<router-outlet></router-outlet>
|
12
|
+
</app-single-card>
|
13
|
+
`,
|
14
|
+
styles: [`
|
15
|
+
:host {
|
16
|
+
width: 100%;
|
17
|
+
height: 100%;
|
18
|
+
}
|
19
|
+
`]
|
20
|
+
})
|
21
|
+
export class UnauthenticatedContentComponent {
|
22
|
+
|
23
|
+
constructor(private router: Router) { }
|
24
|
+
|
25
|
+
get title() {
|
26
|
+
const path = this.router.url.split('/')[1];
|
27
|
+
switch (path) {
|
28
|
+
case 'login-form': return 'Sign In';
|
29
|
+
case 'reset-password': return 'Reset Password';
|
30
|
+
case 'create-account': return 'Sign Up';
|
31
|
+
case 'change-password': return 'Change Password';
|
32
|
+
default: return '';
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
get description() {
|
37
|
+
const path = this.router.url.split('/')[1];
|
38
|
+
switch (path) {
|
39
|
+
case 'reset-password': return 'Please enter the email address that you used to register, and we will send you a link to reset your password via Email.';
|
40
|
+
default: return '';
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}
|
44
|
+
@NgModule({
|
45
|
+
imports: [
|
46
|
+
CommonModule,
|
47
|
+
RouterModule,
|
48
|
+
SingleCardModule,
|
49
|
+
],
|
50
|
+
declarations: [UnauthenticatedContentComponent],
|
51
|
+
exports: [UnauthenticatedContentComponent]
|
52
|
+
})
|
53
|
+
export class UnauthenticatedContentModule { }
|
package/src/add-layout/index.js
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
12
|
const schematics_1 = require("@angular-devkit/schematics");
|
4
|
-
const rxjs_1 = require("rxjs");
|
5
13
|
const core_1 = require("@angular-devkit/core");
|
6
14
|
const path_1 = require("path");
|
7
15
|
const project_1 = require("../utility/project");
|
@@ -14,7 +22,7 @@ const source_1 = require("../utility/source");
|
|
14
22
|
const change_1 = require("../utility/change");
|
15
23
|
const routing_1 = require("../utility/routing");
|
16
24
|
const ast_utils_1 = require("@schematics/angular/utility/ast-utils");
|
17
|
-
const
|
25
|
+
const workspace_1 = require("@schematics/angular/utility/workspace");
|
18
26
|
const projectFilesSource = './files/src';
|
19
27
|
const workspaceFilesSource = './files';
|
20
28
|
function addScriptSafe(scripts, name, value) {
|
@@ -42,8 +50,9 @@ function addBuildThemeScript() {
|
|
42
50
|
return host;
|
43
51
|
};
|
44
52
|
}
|
45
|
-
function addCustomThemeStyles(options, sourcePath) {
|
46
|
-
return (
|
53
|
+
function addCustomThemeStyles(host, options, sourcePath = '') {
|
54
|
+
return __awaiter(this, void 0, void 0, function* () {
|
55
|
+
const projectName = yield project_1.getProjectName(host, options.project);
|
47
56
|
modify_json_file_1.modifyJSONFile(host, './angular.json', config => {
|
48
57
|
const stylesList = [
|
49
58
|
`${sourcePath}/dx-styles.scss`,
|
@@ -51,27 +60,27 @@ function addCustomThemeStyles(options, sourcePath) {
|
|
51
60
|
`${sourcePath}/themes/generated/theme.base.css`,
|
52
61
|
'node_modules/devextreme/dist/css/dx.common.css'
|
53
62
|
];
|
54
|
-
return styles_1.addStylesToApp(
|
63
|
+
return styles_1.addStylesToApp(projectName, config, stylesList);
|
55
64
|
});
|
56
65
|
return host;
|
57
|
-
};
|
66
|
+
});
|
58
67
|
}
|
59
|
-
function updateBudgets(options) {
|
60
|
-
return (
|
68
|
+
function updateBudgets(host, options) {
|
69
|
+
return __awaiter(this, void 0, void 0, function* () {
|
70
|
+
const projectName = yield project_1.getProjectName(host, options.project);
|
61
71
|
modify_json_file_1.modifyJSONFile(host, './angular.json', config => {
|
62
|
-
const projectName = project_1.getProjectName(host, options.project);
|
63
72
|
const budgets = config.projects[projectName].architect.build.configurations.production.budgets;
|
64
73
|
const budget = budgets.find((item) => item.type === 'initial');
|
65
74
|
if (budget) {
|
66
75
|
budget.maximumWarning = '4mb';
|
67
|
-
budget.maximumError = '
|
76
|
+
budget.maximumError = '7mb';
|
68
77
|
}
|
69
78
|
return config;
|
70
79
|
});
|
71
80
|
return host;
|
72
|
-
};
|
81
|
+
});
|
73
82
|
}
|
74
|
-
function addViewportToBody(sourcePath) {
|
83
|
+
function addViewportToBody(sourcePath = '') {
|
75
84
|
return (host) => {
|
76
85
|
const indexPath = path_1.join(sourcePath, 'index.html');
|
77
86
|
let indexContent = host.read(indexPath).toString();
|
@@ -107,11 +116,14 @@ function updateAppModule(host, sourcePath) {
|
|
107
116
|
modifyFileRule(appModulePath, importSetter('SideNavInnerToolbarModule', './layouts')),
|
108
117
|
modifyFileRule(appModulePath, importSetter('SingleCardModule', './layouts')),
|
109
118
|
modifyFileRule(appModulePath, importSetter('FooterModule', './shared/components')),
|
119
|
+
modifyFileRule(appModulePath, importSetter('ResetPasswordFormModule', './shared/components')),
|
120
|
+
modifyFileRule(appModulePath, importSetter('CreateAccountFormModule', './shared/components')),
|
121
|
+
modifyFileRule(appModulePath, importSetter('ChangePasswordFormModule', './shared/components')),
|
110
122
|
modifyFileRule(appModulePath, importSetter('LoginFormModule', './shared/components')),
|
111
123
|
modifyFileRule(appModulePath, providerSetter('AuthService', './shared/services')),
|
112
124
|
modifyFileRule(appModulePath, providerSetter('ScreenService', './shared/services')),
|
113
125
|
modifyFileRule(appModulePath, providerSetter('AppInfoService', './shared/services')),
|
114
|
-
modifyFileRule(appModulePath, importSetter('
|
126
|
+
modifyFileRule(appModulePath, importSetter('UnauthenticatedContentModule', './unauthenticated-content')),
|
115
127
|
];
|
116
128
|
if (!hasRoutingModule(host, sourcePath)) {
|
117
129
|
rules.push(modifyFileRule(appModulePath, importSetter('AppRoutingModule', './app-routing.module')));
|
@@ -135,17 +147,17 @@ function getComponentName(host, sourcePath) {
|
|
135
147
|
function hasRoutingModule(host, sourcePath) {
|
136
148
|
return host.exists(sourcePath + 'app-routing.module.ts');
|
137
149
|
}
|
138
|
-
function addPackagesToDependency() {
|
150
|
+
function addPackagesToDependency(globalNgCliVersion) {
|
139
151
|
return (host) => {
|
140
152
|
dependencies_1.addPackageJsonDependency(host, {
|
141
153
|
type: dependencies_1.NodeDependencyType.Default,
|
142
154
|
name: '@angular/cdk',
|
143
|
-
version:
|
155
|
+
version: globalNgCliVersion
|
144
156
|
});
|
145
157
|
return host;
|
146
158
|
};
|
147
159
|
}
|
148
|
-
function modifyContentByTemplate(sourcePath, templateSourcePath, filePath, templateOptions = {}, modifyContent) {
|
160
|
+
function modifyContentByTemplate(sourcePath = '', templateSourcePath, filePath, templateOptions = {}, modifyContent) {
|
149
161
|
return (host, context) => {
|
150
162
|
const modifyIfExists = (fileEntry) => {
|
151
163
|
const fileEntryPath = path_1.join(sourcePath, fileEntry.path.toString());
|
@@ -174,13 +186,12 @@ function modifyContentByTemplate(sourcePath, templateSourcePath, filePath, templ
|
|
174
186
|
];
|
175
187
|
const modifiedSource = schematics_1.apply(schematics_1.url(templateSourcePath), rules);
|
176
188
|
const resultRule = schematics_1.mergeWith(modifiedSource);
|
177
|
-
return schematics_1.callRule(resultRule,
|
189
|
+
return schematics_1.callRule(resultRule, host, context);
|
178
190
|
};
|
179
191
|
}
|
180
|
-
function updateDevextremeConfig(sourcePath) {
|
192
|
+
function updateDevextremeConfig(sourcePath = '') {
|
181
193
|
const devextremeConfigPath = '/devextreme.json';
|
182
194
|
const templateOptions = {
|
183
|
-
engine: 'angular',
|
184
195
|
sourcePath
|
185
196
|
};
|
186
197
|
const modifyConfig = (templateContent, currentContent) => {
|
@@ -205,17 +216,20 @@ const modifyRoutingModule = (host, routingModulePath) => {
|
|
205
216
|
}
|
206
217
|
};
|
207
218
|
function default_1(options) {
|
208
|
-
return (host) => {
|
209
|
-
const
|
210
|
-
const
|
211
|
-
const
|
219
|
+
return (host) => __awaiter(this, void 0, void 0, function* () {
|
220
|
+
const ngConfig = host.read('./angular.json').toString();
|
221
|
+
const defaultProjectName = modify_json_file_1.parseJson(ngConfig).defaultProject;
|
222
|
+
const project = yield project_1.getProjectName(host, options.project);
|
223
|
+
const workspace = yield workspace_1.getWorkspace(host);
|
224
|
+
const ngProject = workspace.projects.get(project);
|
225
|
+
const prefix = ngProject === null || ngProject === void 0 ? void 0 : ngProject.prefix;
|
212
226
|
const title = string_1.humanize(project);
|
213
|
-
const appPath = project_1.getApplicationPath(host, project);
|
214
|
-
const sourcePath = project_1.getSourceRootPath(host, project);
|
227
|
+
const appPath = yield project_1.getApplicationPath(host, project);
|
228
|
+
const sourcePath = yield project_1.getSourceRootPath(host, project);
|
215
229
|
const layout = options.layout;
|
216
230
|
const override = options.resolveConflicts === 'override';
|
217
231
|
const componentName = override ? 'app' : getComponentName(host, appPath);
|
218
|
-
const pathToCss = sourcePath.replace(/\/?(\w)+\/?/g, '../');
|
232
|
+
const pathToCss = sourcePath === null || sourcePath === void 0 ? void 0 : sourcePath.replace(/\/?(\w)+\/?/g, '../');
|
219
233
|
const templateOptions = {
|
220
234
|
name: componentName,
|
221
235
|
layout,
|
@@ -239,12 +253,12 @@ function default_1(options) {
|
|
239
253
|
updateDevextremeConfig(sourcePath),
|
240
254
|
updateAppModule(host, appPath),
|
241
255
|
addBuildThemeScript(),
|
242
|
-
addCustomThemeStyles(options, sourcePath),
|
256
|
+
() => addCustomThemeStyles(host, options, sourcePath),
|
243
257
|
addViewportToBody(sourcePath),
|
244
|
-
addPackagesToDependency()
|
258
|
+
addPackagesToDependency(options.globalNgCliVersion)
|
245
259
|
];
|
246
260
|
if (options.updateBudgets) {
|
247
|
-
rules.push(updateBudgets(options));
|
261
|
+
rules.push(() => updateBudgets(host, options));
|
248
262
|
}
|
249
263
|
if (!options.skipInstall) {
|
250
264
|
rules.push((_, context) => {
|
@@ -252,13 +266,13 @@ function default_1(options) {
|
|
252
266
|
});
|
253
267
|
}
|
254
268
|
if (override) {
|
255
|
-
if (project ===
|
269
|
+
if (project === defaultProjectName) {
|
256
270
|
rules.push(modifyContentByTemplate('./', workspaceFilesSource, 'e2e/src/app.e2e-spec.ts', { title }));
|
257
271
|
rules.push(modifyContentByTemplate('./', workspaceFilesSource, 'e2e/src/app.po.ts'));
|
258
272
|
}
|
259
273
|
}
|
260
274
|
return schematics_1.chain(rules);
|
261
|
-
};
|
275
|
+
});
|
262
276
|
}
|
263
277
|
exports.default = default_1;
|
264
278
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|