@abp/ng.theme.basic 4.4.0 → 5.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abp-ng.theme.basic.d.ts +1 -15
- package/bundles/abp-ng.theme.basic-testing.umd.js +33 -7
- package/bundles/abp-ng.theme.basic-testing.umd.js.map +1 -1
- package/bundles/abp-ng.theme.basic.umd.js +305 -263
- package/bundles/abp-ng.theme.basic.umd.js.map +1 -1
- package/esm2015/abp-ng.theme.basic.js +1 -16
- package/esm2015/abp-ng.theme.basic.js.map +1 -0
- package/esm2015/lib/components/account-layout/account-layout.component.js +22 -11
- package/esm2015/lib/components/account-layout/account-layout.component.js.map +1 -0
- package/esm2015/lib/components/account-layout/auth-wrapper/auth-wrapper.component.js +17 -13
- package/esm2015/lib/components/account-layout/auth-wrapper/auth-wrapper.component.js.map +1 -0
- package/esm2015/lib/components/account-layout/tenant-box/tenant-box.component.js +18 -13
- package/esm2015/lib/components/account-layout/tenant-box/tenant-box.component.js.map +1 -0
- package/esm2015/lib/components/application-layout/application-layout.component.js +22 -12
- package/esm2015/lib/components/application-layout/application-layout.component.js.map +1 -0
- package/esm2015/lib/components/empty-layout/empty-layout.component.js +17 -8
- package/esm2015/lib/components/empty-layout/empty-layout.component.js.map +1 -0
- package/esm2015/lib/components/index.js +1 -1
- package/esm2015/lib/components/index.js.map +1 -0
- package/esm2015/lib/components/logo/logo.component.js +29 -11
- package/esm2015/lib/components/logo/logo.component.js.map +1 -0
- package/esm2015/lib/components/nav-items/current-user.component.js +17 -13
- package/esm2015/lib/components/nav-items/current-user.component.js.map +1 -0
- package/esm2015/lib/components/nav-items/languages.component.js +51 -16
- package/esm2015/lib/components/nav-items/languages.component.js.map +1 -0
- package/esm2015/lib/components/nav-items/nav-items.component.js +14 -10
- package/esm2015/lib/components/nav-items/nav-items.component.js.map +1 -0
- package/esm2015/lib/components/page-alert-container/page-alert-container.component.js +15 -11
- package/esm2015/lib/components/page-alert-container/page-alert-container.component.js.map +1 -0
- package/esm2015/lib/components/routes/routes.component.js +22 -16
- package/esm2015/lib/components/routes/routes.component.js.map +1 -0
- package/esm2015/lib/components/validation-error/validation-error.component.js +19 -9
- package/esm2015/lib/components/validation-error/validation-error.component.js.map +1 -0
- package/esm2015/lib/constants/styles.js +1 -1
- package/esm2015/lib/constants/styles.js.map +1 -0
- package/esm2015/lib/enums/components.js +1 -1
- package/esm2015/lib/enums/components.js.map +1 -0
- package/esm2015/lib/enums/index.js +1 -1
- package/esm2015/lib/enums/index.js.map +1 -0
- package/esm2015/lib/models/index.js +1 -1
- package/esm2015/lib/models/index.js.map +1 -0
- package/esm2015/lib/models/layout.js +1 -1
- package/esm2015/lib/models/layout.js.map +1 -0
- package/esm2015/lib/providers/index.js +1 -1
- package/esm2015/lib/providers/index.js.map +1 -0
- package/esm2015/lib/providers/nav-item.provider.js +1 -1
- package/esm2015/lib/providers/nav-item.provider.js.map +1 -0
- package/esm2015/lib/providers/styles.provider.js +2 -2
- package/esm2015/lib/providers/styles.provider.js.map +1 -0
- package/esm2015/lib/services/layout.service.js +8 -8
- package/esm2015/lib/services/layout.service.js.map +1 -0
- package/esm2015/lib/theme-basic.module.js +74 -41
- package/esm2015/lib/theme-basic.module.js.map +1 -0
- package/esm2015/public-api.js +1 -1
- package/esm2015/public-api.js.map +1 -0
- package/esm2015/testing/abp-ng.theme.basic-testing.js +1 -1
- package/esm2015/testing/abp-ng.theme.basic-testing.js.map +1 -0
- package/esm2015/testing/lib/theme-basic-testing.module.js +12 -7
- package/esm2015/testing/lib/theme-basic-testing.module.js.map +1 -0
- package/esm2015/testing/public-api.js +1 -1
- package/esm2015/testing/public-api.js.map +1 -0
- package/fesm2015/abp-ng.theme.basic-testing.js +11 -6
- package/fesm2015/abp-ng.theme.basic-testing.js.map +1 -1
- package/fesm2015/abp-ng.theme.basic.js +334 -240
- package/fesm2015/abp-ng.theme.basic.js.map +1 -1
- package/lib/components/account-layout/account-layout.component.d.ts +3 -0
- package/lib/components/account-layout/auth-wrapper/auth-wrapper.component.d.ts +4 -3
- package/lib/components/account-layout/tenant-box/tenant-box.component.d.ts +4 -3
- package/lib/components/application-layout/application-layout.component.d.ts +3 -0
- package/lib/components/empty-layout/empty-layout.component.d.ts +3 -0
- package/lib/components/logo/logo.component.d.ts +3 -0
- package/lib/components/nav-items/current-user.component.d.ts +3 -0
- package/lib/components/nav-items/languages.component.d.ts +3 -0
- package/lib/components/nav-items/nav-items.component.d.ts +3 -0
- package/lib/components/page-alert-container/page-alert-container.component.d.ts +3 -0
- package/lib/components/routes/routes.component.d.ts +3 -0
- package/lib/components/validation-error/validation-error.component.d.ts +3 -0
- package/lib/providers/nav-item.provider.d.ts +1 -1
- package/lib/providers/styles.provider.d.ts +2 -2
- package/lib/services/layout.service.d.ts +3 -0
- package/lib/theme-basic.module.d.ts +23 -0
- package/package.json +7 -5
- package/testing/abp-ng.theme.basic-testing.d.ts +1 -0
- package/testing/lib/theme-basic-testing.module.d.ts +5 -0
- package/testing/package.json +0 -1
- package/abp-ng.theme.basic.metadata.json +0 -1
- package/bundles/abp-ng.theme.basic-testing.umd.min.js +0 -2
- package/bundles/abp-ng.theme.basic-testing.umd.min.js.map +0 -1
- package/bundles/abp-ng.theme.basic.umd.min.js +0 -17
- package/bundles/abp-ng.theme.basic.umd.min.js.map +0 -1
- package/testing/abp-ng.theme.basic-testing.metadata.json +0 -1
|
@@ -2,6 +2,16 @@ import { SubscriptionService } from '@abp/ng.core';
|
|
|
2
2
|
import { collapseWithMargin, slideFromBottom } from '@abp/ng.theme.shared';
|
|
3
3
|
import { Component } from '@angular/core';
|
|
4
4
|
import { LayoutService } from '../../services/layout.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../services/layout.service";
|
|
7
|
+
import * as i2 from "../logo/logo.component";
|
|
8
|
+
import * as i3 from "../routes/routes.component";
|
|
9
|
+
import * as i4 from "../nav-items/nav-items.component";
|
|
10
|
+
import * as i5 from "../page-alert-container/page-alert-container.component";
|
|
11
|
+
import * as i6 from "@ng-bootstrap/ng-bootstrap";
|
|
12
|
+
import * as i7 from "@abp/ng.core";
|
|
13
|
+
import * as i8 from "@angular/common";
|
|
14
|
+
import * as i9 from "@angular/router";
|
|
5
15
|
export class ApplicationLayoutComponent {
|
|
6
16
|
constructor(service) {
|
|
7
17
|
this.service = service;
|
|
@@ -12,15 +22,15 @@ export class ApplicationLayoutComponent {
|
|
|
12
22
|
}
|
|
13
23
|
// required for dynamic component
|
|
14
24
|
ApplicationLayoutComponent.type = "application" /* application */;
|
|
15
|
-
ApplicationLayoutComponent
|
|
16
|
-
{ type:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
]
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
];
|
|
26
|
-
//# sourceMappingURL=
|
|
25
|
+
ApplicationLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: ApplicationLayoutComponent, deps: [{ token: i1.LayoutService }], target: i0.ɵɵFactoryTarget.Component });
|
|
26
|
+
ApplicationLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.6", type: ApplicationLayoutComponent, selector: "abp-layout-application", providers: [LayoutService, SubscriptionService], ngImport: i0, template: "<nav\n class=\"navbar navbar-expand-lg navbar-dark bg-dark shadow-sm flex-column flex-md-row mb-4\"\n id=\"main-navbar\"\n style=\"min-height: 4rem\"\n>\n <div class=\"container\">\n <abp-logo *abpReplaceableTemplate=\"{ componentKey: service.logoComponentKey }\"></abp-logo>\n <button\n class=\"navbar-toggler\"\n type=\"button\"\n [attr.aria-expanded]=\"!service.isCollapsed\"\n (click)=\"service.isCollapsed = !service.isCollapsed\"\n >\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-collapse\" [class.overflow-hidden]=\"service.smallScreen\" id=\"main-navbar-collapse\">\n <ng-container *ngTemplateOutlet=\"!service.smallScreen ? navigations : null\"></ng-container>\n\n <div *ngIf=\"service.smallScreen\" [@collapseWithMargin]=\"service.isCollapsed ? 'collapsed' : 'expanded'\">\n <ng-container *ngTemplateOutlet=\"navigations\"></ng-container>\n </div>\n\n <ng-template #navigations>\n <abp-routes\n *abpReplaceableTemplate=\"{\n componentKey: service.routesComponentKey,\n inputs: {\n smallScreen: { value: service.smallScreen }\n }\n }\"\n class=\"mx-auto\"\n [smallScreen]=\"service.smallScreen\"\n ></abp-routes>\n\n <abp-nav-items\n *abpReplaceableTemplate=\"{\n componentKey: service.navItemsComponentKey\n }\"\n ></abp-nav-items>\n </ng-template>\n </div>\n </div>\n</nav>\n\n<!-- [@slideFromBottom]=\"outlet.isActivated && outlet.activatedRoute?.routeConfig?.path\" TODO: throws ExpressionChangedAfterItHasBeenCheck when animation is active. It should be fixed -->\n<div class=\"container\">\n <abp-page-alert-container></abp-page-alert-container>\n\n <router-outlet #outlet=\"outlet\"></router-outlet>\n</div>\n", components: [{ type: i2.LogoComponent, selector: "abp-logo" }, { type: i3.RoutesComponent, selector: "abp-routes", inputs: ["smallScreen"] }, { type: i4.NavItemsComponent, selector: "abp-nav-items" }, { type: i5.PageAlertContainerComponent, selector: "abp-page-alert-container" }], directives: [{ type: i6.NgbNavbar, selector: ".navbar" }, { type: i7.ReplaceableTemplateDirective, selector: "[abpReplaceableTemplate]", inputs: ["abpReplaceableTemplate"] }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }], animations: [slideFromBottom, collapseWithMargin] });
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: ApplicationLayoutComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{
|
|
30
|
+
selector: 'abp-layout-application',
|
|
31
|
+
templateUrl: './application-layout.component.html',
|
|
32
|
+
animations: [slideFromBottom, collapseWithMargin],
|
|
33
|
+
providers: [LayoutService, SubscriptionService],
|
|
34
|
+
}]
|
|
35
|
+
}], ctorParameters: function () { return [{ type: i1.LayoutService }]; } });
|
|
36
|
+
//# sourceMappingURL=application-layout.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-layout.component.js","sourceRoot":"","sources":["../../../../../../../packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts","../../../../../../../packages/theme-basic/src/lib/components/application-layout/application-layout.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAe,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAiB,SAAS,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;;;;;;;;;;;AAQ9D,MAAM,OAAO,0BAA0B;IAIrC,YAAmB,OAAsB;QAAtB,YAAO,GAAP,OAAO,CAAe;IAAG,CAAC;IAE7C,eAAe;QACb,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;IACrC,CAAC;;AAPD,iCAAiC;AAC1B,+BAAI,mCAA2B;uHAF3B,0BAA0B;2GAA1B,0BAA0B,iDAF1B,CAAC,aAAa,EAAE,mBAAmB,CAAC,0BCTjD,01DAkDA,kxBD1Cc,CAAC,eAAe,EAAE,kBAAkB,CAAC;2FAGtC,0BAA0B;kBANtC,SAAS;mBAAC;oBACT,QAAQ,EAAE,wBAAwB;oBAClC,WAAW,EAAE,qCAAqC;oBAClD,UAAU,EAAE,CAAC,eAAe,EAAE,kBAAkB,CAAC;oBACjD,SAAS,EAAE,CAAC,aAAa,EAAE,mBAAmB,CAAC;iBAChD","sourcesContent":["import { eLayoutType, SubscriptionService } from '@abp/ng.core';\nimport { collapseWithMargin, slideFromBottom } from '@abp/ng.theme.shared';\nimport { AfterViewInit, Component } from '@angular/core';\nimport { LayoutService } from '../../services/layout.service';\n\n@Component({\n selector: 'abp-layout-application',\n templateUrl: './application-layout.component.html',\n animations: [slideFromBottom, collapseWithMargin],\n providers: [LayoutService, SubscriptionService],\n})\nexport class ApplicationLayoutComponent implements AfterViewInit {\n // required for dynamic component\n static type = eLayoutType.application;\n\n constructor(public service: LayoutService) {}\n\n ngAfterViewInit() {\n this.service.subscribeWindowSize();\n }\n}\n","<nav\n class=\"navbar navbar-expand-lg navbar-dark bg-dark shadow-sm flex-column flex-md-row mb-4\"\n id=\"main-navbar\"\n style=\"min-height: 4rem\"\n>\n <div class=\"container\">\n <abp-logo *abpReplaceableTemplate=\"{ componentKey: service.logoComponentKey }\"></abp-logo>\n <button\n class=\"navbar-toggler\"\n type=\"button\"\n [attr.aria-expanded]=\"!service.isCollapsed\"\n (click)=\"service.isCollapsed = !service.isCollapsed\"\n >\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-collapse\" [class.overflow-hidden]=\"service.smallScreen\" id=\"main-navbar-collapse\">\n <ng-container *ngTemplateOutlet=\"!service.smallScreen ? navigations : null\"></ng-container>\n\n <div *ngIf=\"service.smallScreen\" [@collapseWithMargin]=\"service.isCollapsed ? 'collapsed' : 'expanded'\">\n <ng-container *ngTemplateOutlet=\"navigations\"></ng-container>\n </div>\n\n <ng-template #navigations>\n <abp-routes\n *abpReplaceableTemplate=\"{\n componentKey: service.routesComponentKey,\n inputs: {\n smallScreen: { value: service.smallScreen }\n }\n }\"\n class=\"mx-auto\"\n [smallScreen]=\"service.smallScreen\"\n ></abp-routes>\n\n <abp-nav-items\n *abpReplaceableTemplate=\"{\n componentKey: service.navItemsComponentKey\n }\"\n ></abp-nav-items>\n </ng-template>\n </div>\n </div>\n</nav>\n\n<!-- [@slideFromBottom]=\"outlet.isActivated && outlet.activatedRoute?.routeConfig?.path\" TODO: throws ExpressionChangedAfterItHasBeenCheck when animation is active. It should be fixed -->\n<div class=\"container\">\n <abp-page-alert-container></abp-page-alert-container>\n\n <router-outlet #outlet=\"outlet\"></router-outlet>\n</div>\n"]}
|
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@abp/ng.theme.shared";
|
|
4
|
+
import * as i2 from "@angular/router";
|
|
2
5
|
export class EmptyLayoutComponent {
|
|
3
6
|
}
|
|
4
7
|
EmptyLayoutComponent.type = "empty" /* empty */;
|
|
5
|
-
EmptyLayoutComponent
|
|
6
|
-
|
|
7
|
-
selector: 'abp-layout-empty',
|
|
8
|
-
template: `
|
|
8
|
+
EmptyLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: EmptyLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9
|
+
EmptyLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.6", type: EmptyLayoutComponent, selector: "abp-layout-empty", ngImport: i0, template: `
|
|
9
10
|
<router-outlet></router-outlet>
|
|
10
11
|
<abp-confirmation></abp-confirmation>
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
`, isInline: true, components: [{ type: i1.ConfirmationComponent, selector: "abp-confirmation" }], directives: [{ type: i2.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }] });
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: EmptyLayoutComponent, decorators: [{
|
|
14
|
+
type: Component,
|
|
15
|
+
args: [{
|
|
16
|
+
selector: 'abp-layout-empty',
|
|
17
|
+
template: `
|
|
18
|
+
<router-outlet></router-outlet>
|
|
19
|
+
<abp-confirmation></abp-confirmation>
|
|
20
|
+
`,
|
|
21
|
+
}]
|
|
22
|
+
}] });
|
|
23
|
+
//# sourceMappingURL=empty-layout.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"empty-layout.component.js","sourceRoot":"","sources":["../../../../../../../packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;;;;AAU1C,MAAM,OAAO,oBAAoB;;AACxB,yBAAI,uBAAqB;iHADrB,oBAAoB;qGAApB,oBAAoB,wDALrB;;;GAGT;2FAEU,oBAAoB;kBAPhC,SAAS;mBAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,QAAQ,EAAE;;;GAGT;iBACF","sourcesContent":["import { Component } from '@angular/core';\nimport { eLayoutType } from '@abp/ng.core';\n\n@Component({\n selector: 'abp-layout-empty',\n template: `\n <router-outlet></router-outlet>\n <abp-confirmation></abp-confirmation>\n `,\n})\nexport class EmptyLayoutComponent {\n static type = eLayoutType.empty;\n}\n"]}
|
|
@@ -10,4 +10,4 @@ export * from './nav-items/nav-items.component';
|
|
|
10
10
|
export * from './routes/routes.component';
|
|
11
11
|
export * from './validation-error/validation-error.component';
|
|
12
12
|
export * from './page-alert-container/page-alert-container.component';
|
|
13
|
-
//# sourceMappingURL=
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/theme-basic/src/lib/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,2CAA2C,CAAC;AAC1D,cAAc,sDAAsD,CAAC;AACrE,cAAc,kDAAkD,CAAC;AACjE,cAAc,mDAAmD,CAAC;AAClE,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC;AACnD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,uDAAuD,CAAC","sourcesContent":["export * from './account-layout/account-layout.component';\nexport * from './account-layout/auth-wrapper/auth-wrapper.component';\nexport * from './account-layout/tenant-box/tenant-box.component';\nexport * from './application-layout/application-layout.component';\nexport * from './empty-layout/empty-layout.component';\nexport * from './logo/logo.component';\nexport * from './nav-items/current-user.component';\nexport * from './nav-items/languages.component';\nexport * from './nav-items/nav-items.component';\nexport * from './routes/routes.component';\nexport * from './validation-error/validation-error.component';\nexport * from './page-alert-container/page-alert-container.component';\n"]}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { EnvironmentService } from '@abp/ng.core';
|
|
2
2
|
import { Component } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@abp/ng.core";
|
|
5
|
+
import * as i2 from "@angular/router";
|
|
6
|
+
import * as i3 from "@angular/common";
|
|
3
7
|
export class LogoComponent {
|
|
4
8
|
constructor(environment) {
|
|
5
9
|
this.environment = environment;
|
|
@@ -8,10 +12,8 @@ export class LogoComponent {
|
|
|
8
12
|
return this.environment.getEnvironment().application;
|
|
9
13
|
}
|
|
10
14
|
}
|
|
11
|
-
LogoComponent
|
|
12
|
-
|
|
13
|
-
selector: 'abp-logo',
|
|
14
|
-
template: `
|
|
15
|
+
LogoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: LogoComponent, deps: [{ token: i1.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
|
|
16
|
+
LogoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.6", type: LogoComponent, selector: "abp-logo", ngImport: i0, template: `
|
|
15
17
|
<a class="navbar-brand" routerLink="/">
|
|
16
18
|
<img
|
|
17
19
|
*ngIf="appInfo.logoUrl; else appName"
|
|
@@ -25,10 +27,26 @@ LogoComponent.decorators = [
|
|
|
25
27
|
<ng-template #appName>
|
|
26
28
|
{{ appInfo.name }}
|
|
27
29
|
</ng-template>
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
`, isInline: true, directives: [{ type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: LogoComponent, decorators: [{
|
|
32
|
+
type: Component,
|
|
33
|
+
args: [{
|
|
34
|
+
selector: 'abp-logo',
|
|
35
|
+
template: `
|
|
36
|
+
<a class="navbar-brand" routerLink="/">
|
|
37
|
+
<img
|
|
38
|
+
*ngIf="appInfo.logoUrl; else appName"
|
|
39
|
+
[src]="appInfo.logoUrl"
|
|
40
|
+
[alt]="appInfo.name"
|
|
41
|
+
width="100%"
|
|
42
|
+
height="auto"
|
|
43
|
+
/>
|
|
44
|
+
</a>
|
|
45
|
+
|
|
46
|
+
<ng-template #appName>
|
|
47
|
+
{{ appInfo.name }}
|
|
48
|
+
</ng-template>
|
|
49
|
+
`,
|
|
50
|
+
}]
|
|
51
|
+
}], ctorParameters: function () { return [{ type: i1.EnvironmentService }]; } });
|
|
52
|
+
//# sourceMappingURL=logo.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logo.component.js","sourceRoot":"","sources":["../../../../../../../packages/theme-basic/src/lib/components/logo/logo.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;;;;;AAoB1C,MAAM,OAAO,aAAa;IAKxB,YAAoB,WAA+B;QAA/B,gBAAW,GAAX,WAAW,CAAoB;IAAG,CAAC;IAJvD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC;IACvD,CAAC;;0GAHU,aAAa;8FAAb,aAAa,gDAhBd;;;;;;;;;;;;;;GAcT;2FAEU,aAAa;kBAlBzB,SAAS;mBAAC;oBACT,QAAQ,EAAE,UAAU;oBACpB,QAAQ,EAAE;;;;;;;;;;;;;;GAcT;iBACF","sourcesContent":["import { ApplicationInfo, EnvironmentService } from '@abp/ng.core';\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'abp-logo',\n template: `\n <a class=\"navbar-brand\" routerLink=\"/\">\n <img\n *ngIf=\"appInfo.logoUrl; else appName\"\n [src]=\"appInfo.logoUrl\"\n [alt]=\"appInfo.name\"\n width=\"100%\"\n height=\"auto\"\n />\n </a>\n\n <ng-template #appName>\n {{ appInfo.name }}\n </ng-template>\n `,\n})\nexport class LogoComponent {\n get appInfo(): ApplicationInfo {\n return this.environment.getEnvironment().application;\n }\n\n constructor(private environment: EnvironmentService) {}\n}\n"]}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { AuthService, ConfigStateService, NAVIGATE_TO_MANAGE_PROFILE, SessionStateService, } from '@abp/ng.core';
|
|
2
2
|
import { Component, Inject } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@abp/ng.core";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@ng-bootstrap/ng-bootstrap";
|
|
3
7
|
export class CurrentUserComponent {
|
|
4
8
|
constructor(navigateToManageProfile, authService, configState, sessionState) {
|
|
5
9
|
this.navigateToManageProfile = navigateToManageProfile;
|
|
@@ -19,16 +23,16 @@ export class CurrentUserComponent {
|
|
|
19
23
|
this.authService.logout().subscribe();
|
|
20
24
|
}
|
|
21
25
|
}
|
|
22
|
-
CurrentUserComponent
|
|
23
|
-
{ type:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
];
|
|
34
|
-
//# sourceMappingURL=
|
|
26
|
+
CurrentUserComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: CurrentUserComponent, deps: [{ token: NAVIGATE_TO_MANAGE_PROFILE }, { token: i1.AuthService }, { token: i1.ConfigStateService }, { token: i1.SessionStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
27
|
+
CurrentUserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.6", type: CurrentUserComponent, selector: "abp-current-user", ngImport: i0, template: "<ng-template #loginBtn>\n <a role=\"button\" class=\"nav-link pointer\" (click)=\"navigateToLogin()\">{{\n 'AbpAccount::Login' | abpLocalization\n }}</a>\n</ng-template>\n<div\n *ngIf=\"(currentUser$ | async)?.isAuthenticated; else loginBtn\"\n ngbDropdown\n class=\"dropdown\"\n #currentUserDropdown=\"ngbDropdown\"\n display=\"static\"\n>\n <a\n ngbDropdownToggle\n class=\"nav-link\"\n href=\"javascript:void(0)\"\n role=\"button\"\n id=\"dropdownMenuLink\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <small *ngIf=\"(selectedTenant$ | async)?.name as tenantName\"\n ><i>{{ tenantName }}</i\n >\\</small\n >\n <strong>{{ (currentUser$ | async)?.userName }}</strong>\n </a>\n <div\n class=\"dropdown-menu dropdown-menu-right border-0 shadow-sm\"\n aria-labelledby=\"dropdownMenuLink\"\n [class.d-block]=\"smallScreen && currentUserDropdown.isOpen()\"\n >\n <a class=\"dropdown-item pointer\" (click)=\"navigateToManageProfile()\"\n ><i class=\"fa fa-cog mr-1\"></i>{{ 'AbpAccount::MyAccount' | abpLocalization }}</a\n >\n <a class=\"dropdown-item\" href=\"javascript:void(0)\" (click)=\"logout()\"\n ><i class=\"fa fa-power-off mr-1\"></i>{{ 'AbpUi::Logout' | abpLocalization }}</a\n >\n </div>\n</div>\n", directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgbDropdown, selector: "[ngbDropdown]", inputs: ["open", "placement", "container", "autoClose", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { type: i3.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }], pipes: { "abpLocalization": i1.LocalizationPipe, "async": i2.AsyncPipe } });
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: CurrentUserComponent, decorators: [{
|
|
29
|
+
type: Component,
|
|
30
|
+
args: [{
|
|
31
|
+
selector: 'abp-current-user',
|
|
32
|
+
templateUrl: './current-user.component.html',
|
|
33
|
+
}]
|
|
34
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
35
|
+
type: Inject,
|
|
36
|
+
args: [NAVIGATE_TO_MANAGE_PROFILE]
|
|
37
|
+
}] }, { type: i1.AuthService }, { type: i1.ConfigStateService }, { type: i1.SessionStateService }]; } });
|
|
38
|
+
//# sourceMappingURL=current-user.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"current-user.component.js","sourceRoot":"","sources":["../../../../../../../packages/theme-basic/src/lib/components/nav-items/current-user.component.ts","../../../../../../../packages/theme-basic/src/lib/components/nav-items/current-user.component.html"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,kBAAkB,EAElB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;;;;;AAOlD,MAAM,OAAO,oBAAoB;IAQ/B,YAC6C,uBAAuB,EAC1D,WAAwB,EACxB,WAA+B,EAC/B,YAAiC;QAHE,4BAAuB,GAAvB,uBAAuB,CAAA;QAC1D,gBAAW,GAAX,WAAW,CAAa;QACxB,gBAAW,GAAX,WAAW,CAAoB;QAC/B,iBAAY,GAAZ,YAAY,CAAqB;QAX3C,iBAAY,GAA+B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACnF,oBAAe,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;IAW9C,CAAC;IATJ,IAAI,WAAW;QACb,OAAO,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;IACjC,CAAC;IASD,eAAe;QACb,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;IACrC,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,CAAC;IACxC,CAAC;;iHArBU,oBAAoB,kBASrB,0BAA0B;qGATzB,oBAAoB,wDCdjC,0zCAyCA;2FD3Ba,oBAAoB;kBAJhC,SAAS;mBAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,WAAW,EAAE,+BAA+B;iBAC7C;;0BAUI,MAAM;2BAAC,0BAA0B","sourcesContent":["import {\n AuthService,\n ConfigStateService,\n CurrentUserDto,\n NAVIGATE_TO_MANAGE_PROFILE,\n SessionStateService,\n} from '@abp/ng.core';\nimport { Component, Inject } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'abp-current-user',\n templateUrl: './current-user.component.html',\n})\nexport class CurrentUserComponent {\n currentUser$: Observable<CurrentUserDto> = this.configState.getOne$('currentUser');\n selectedTenant$ = this.sessionState.getTenant$();\n\n get smallScreen(): boolean {\n return window.innerWidth < 992;\n }\n\n constructor(\n @Inject(NAVIGATE_TO_MANAGE_PROFILE) public navigateToManageProfile,\n private authService: AuthService,\n private configState: ConfigStateService,\n private sessionState: SessionStateService,\n ) {}\n\n navigateToLogin() {\n this.authService.navigateToLogin();\n }\n\n logout() {\n this.authService.logout().subscribe();\n }\n}\n","<ng-template #loginBtn>\n <a role=\"button\" class=\"nav-link pointer\" (click)=\"navigateToLogin()\">{{\n 'AbpAccount::Login' | abpLocalization\n }}</a>\n</ng-template>\n<div\n *ngIf=\"(currentUser$ | async)?.isAuthenticated; else loginBtn\"\n ngbDropdown\n class=\"dropdown\"\n #currentUserDropdown=\"ngbDropdown\"\n display=\"static\"\n>\n <a\n ngbDropdownToggle\n class=\"nav-link\"\n href=\"javascript:void(0)\"\n role=\"button\"\n id=\"dropdownMenuLink\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <small *ngIf=\"(selectedTenant$ | async)?.name as tenantName\"\n ><i>{{ tenantName }}</i\n >\\</small\n >\n <strong>{{ (currentUser$ | async)?.userName }}</strong>\n </a>\n <div\n class=\"dropdown-menu dropdown-menu-right border-0 shadow-sm\"\n aria-labelledby=\"dropdownMenuLink\"\n [class.d-block]=\"smallScreen && currentUserDropdown.isOpen()\"\n >\n <a class=\"dropdown-item pointer\" (click)=\"navigateToManageProfile()\"\n ><i class=\"fa fa-cog mr-1\"></i>{{ 'AbpAccount::MyAccount' | abpLocalization }}</a\n >\n <a class=\"dropdown-item\" href=\"javascript:void(0)\" (click)=\"logout()\"\n ><i class=\"fa fa-power-off mr-1\"></i>{{ 'AbpUi::Logout' | abpLocalization }}</a\n >\n </div>\n</div>\n"]}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { ConfigStateService, SessionStateService } from '@abp/ng.core';
|
|
2
2
|
import { Component } from '@angular/core';
|
|
3
3
|
import { map } from 'rxjs/operators';
|
|
4
|
-
import
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@abp/ng.core";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
import * as i3 from "@ng-bootstrap/ng-bootstrap";
|
|
5
8
|
export class LanguagesComponent {
|
|
6
9
|
constructor(sessionState, configState) {
|
|
7
10
|
this.sessionState = sessionState;
|
|
@@ -12,10 +15,10 @@ export class LanguagesComponent {
|
|
|
12
15
|
return window.innerWidth < 992;
|
|
13
16
|
}
|
|
14
17
|
get defaultLanguage$() {
|
|
15
|
-
return this.languages$.pipe(map(languages =>
|
|
18
|
+
return this.languages$.pipe(map(languages => (languages === null || languages === void 0 ? void 0 : languages.find(lang => lang.cultureName === this.selectedLangCulture).displayName) || ''));
|
|
16
19
|
}
|
|
17
20
|
get dropdownLanguages$() {
|
|
18
|
-
return this.languages$.pipe(map(languages =>
|
|
21
|
+
return this.languages$.pipe(map(languages => (languages === null || languages === void 0 ? void 0 : languages.filter(lang => lang.cultureName !== this.selectedLangCulture)) || []));
|
|
19
22
|
}
|
|
20
23
|
get selectedLangCulture() {
|
|
21
24
|
return this.sessionState.getLanguage();
|
|
@@ -24,11 +27,8 @@ export class LanguagesComponent {
|
|
|
24
27
|
this.sessionState.setLanguage(cultureName);
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
|
-
LanguagesComponent
|
|
28
|
-
|
|
29
|
-
selector: 'abp-languages',
|
|
30
|
-
// tslint:disable-next-line: component-max-inline-declarations
|
|
31
|
-
template: `
|
|
30
|
+
LanguagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: LanguagesComponent, deps: [{ token: i1.SessionStateService }, { token: i1.ConfigStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
31
|
+
LanguagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.6", type: LanguagesComponent, selector: "abp-languages", ngImport: i0, template: `
|
|
32
32
|
<div
|
|
33
33
|
*ngIf="(dropdownLanguages$ | async)?.length > 0"
|
|
34
34
|
class="dropdown"
|
|
@@ -62,11 +62,46 @@ LanguagesComponent.decorators = [
|
|
|
62
62
|
>
|
|
63
63
|
</div>
|
|
64
64
|
</div>
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
65
|
+
`, isInline: true, directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgbDropdown, selector: "[ngbDropdown]", inputs: ["open", "placement", "container", "autoClose", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { type: i3.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i2.AsyncPipe } });
|
|
66
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: LanguagesComponent, decorators: [{
|
|
67
|
+
type: Component,
|
|
68
|
+
args: [{
|
|
69
|
+
selector: 'abp-languages',
|
|
70
|
+
template: `
|
|
71
|
+
<div
|
|
72
|
+
*ngIf="(dropdownLanguages$ | async)?.length > 0"
|
|
73
|
+
class="dropdown"
|
|
74
|
+
ngbDropdown
|
|
75
|
+
#languageDropdown="ngbDropdown"
|
|
76
|
+
display="static"
|
|
77
|
+
>
|
|
78
|
+
<a
|
|
79
|
+
ngbDropdownToggle
|
|
80
|
+
class="nav-link"
|
|
81
|
+
href="javascript:void(0)"
|
|
82
|
+
role="button"
|
|
83
|
+
id="dropdownMenuLink"
|
|
84
|
+
data-toggle="dropdown"
|
|
85
|
+
aria-haspopup="true"
|
|
86
|
+
aria-expanded="false"
|
|
87
|
+
>
|
|
88
|
+
{{ defaultLanguage$ | async }}
|
|
89
|
+
</a>
|
|
90
|
+
<div
|
|
91
|
+
class="dropdown-menu dropdown-menu-right border-0 shadow-sm"
|
|
92
|
+
aria-labelledby="dropdownMenuLink"
|
|
93
|
+
[class.d-block]="smallScreen && languageDropdown.isOpen()"
|
|
94
|
+
>
|
|
95
|
+
<a
|
|
96
|
+
*ngFor="let lang of dropdownLanguages$ | async"
|
|
97
|
+
href="javascript:void(0)"
|
|
98
|
+
class="dropdown-item"
|
|
99
|
+
(click)="onChangeLang(lang.cultureName)"
|
|
100
|
+
>{{ lang?.displayName }}</a
|
|
101
|
+
>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
`,
|
|
105
|
+
}]
|
|
106
|
+
}], ctorParameters: function () { return [{ type: i1.SessionStateService }, { type: i1.ConfigStateService }]; } });
|
|
107
|
+
//# sourceMappingURL=languages.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"languages.component.js","sourceRoot":"","sources":["../../../../../../../packages/theme-basic/src/lib/components/nav-items/languages.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgB,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;;;;;AAwCrC,MAAM,OAAO,kBAAkB;IA4B7B,YAAoB,YAAiC,EAAU,WAA+B;QAA1E,iBAAY,GAAZ,YAAY,CAAqB;QAAU,gBAAW,GAAX,WAAW,CAAoB;QAvB9F,eAAU,GAA+B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IAuBI,CAAC;IA3BlG,IAAI,WAAW;QACb,OAAO,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;IACjC,CAAC;IAID,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,GAAG,CACD,SAAS,CAAC,EAAE,CACV,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,mBAAmB,EAAE,WAAW,KAAI,EAAE,CAC3F,CACF,CAAC;IACJ,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,GAAG,CACD,SAAS,CAAC,EAAE,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,mBAAmB,CAAC,KAAI,EAAE,CAC5F,CACF,CAAC;IACJ,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;IACzC,CAAC;IAID,YAAY,CAAC,WAAmB;QAC9B,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;;+GAhCU,kBAAkB;mGAAlB,kBAAkB,qDApCnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCT;2FAEU,kBAAkB;kBAtC9B,SAAS;mBAAC;oBACT,QAAQ,EAAE,eAAe;oBACzB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCT;iBACF","sourcesContent":["import { ConfigStateService, LanguageInfo, SessionStateService } from '@abp/ng.core';\nimport { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Component({\n selector: 'abp-languages',\n template: `\n <div\n *ngIf=\"(dropdownLanguages$ | async)?.length > 0\"\n class=\"dropdown\"\n ngbDropdown\n #languageDropdown=\"ngbDropdown\"\n display=\"static\"\n >\n <a\n ngbDropdownToggle\n class=\"nav-link\"\n href=\"javascript:void(0)\"\n role=\"button\"\n id=\"dropdownMenuLink\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n {{ defaultLanguage$ | async }}\n </a>\n <div\n class=\"dropdown-menu dropdown-menu-right border-0 shadow-sm\"\n aria-labelledby=\"dropdownMenuLink\"\n [class.d-block]=\"smallScreen && languageDropdown.isOpen()\"\n >\n <a\n *ngFor=\"let lang of dropdownLanguages$ | async\"\n href=\"javascript:void(0)\"\n class=\"dropdown-item\"\n (click)=\"onChangeLang(lang.cultureName)\"\n >{{ lang?.displayName }}</a\n >\n </div>\n </div>\n `,\n})\nexport class LanguagesComponent {\n get smallScreen(): boolean {\n return window.innerWidth < 992;\n }\n\n languages$: Observable<LanguageInfo[]> = this.configState.getDeep$('localization.languages');\n\n get defaultLanguage$(): Observable<string> {\n return this.languages$.pipe(\n map(\n languages =>\n languages?.find(lang => lang.cultureName === this.selectedLangCulture).displayName || '',\n ),\n );\n }\n\n get dropdownLanguages$(): Observable<LanguageInfo[]> {\n return this.languages$.pipe(\n map(\n languages => languages?.filter(lang => lang.cultureName !== this.selectedLangCulture) || [],\n ),\n );\n }\n\n get selectedLangCulture(): string {\n return this.sessionState.getLanguage();\n }\n\n constructor(private sessionState: SessionStateService, private configState: ConfigStateService) {}\n\n onChangeLang(cultureName: string) {\n this.sessionState.setLanguage(cultureName);\n }\n}\n"]}
|
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import { NavItemsService } from '@abp/ng.theme.shared';
|
|
2
2
|
import { Component } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@abp/ng.theme.shared";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@abp/ng.core";
|
|
3
7
|
export class NavItemsComponent {
|
|
4
8
|
constructor(navItems) {
|
|
5
9
|
this.navItems = navItems;
|
|
6
10
|
this.trackByFn = (_, element) => element.id;
|
|
7
11
|
}
|
|
8
12
|
}
|
|
9
|
-
NavItemsComponent
|
|
10
|
-
{ type:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
];
|
|
18
|
-
//# sourceMappingURL=
|
|
13
|
+
NavItemsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: NavItemsComponent, deps: [{ token: i1.NavItemsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
14
|
+
NavItemsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.6", type: NavItemsComponent, selector: "abp-nav-items", ngImport: i0, template: "<ul class=\"navbar-nav\">\n <ng-container *ngFor=\"let item of navItems.items$ | async; trackBy: trackByFn\">\n <ng-container *ngIf=\"item.visible()\">\n <li class=\"nav-item d-flex align-items-center\" *abpPermission=\"item.requiredPolicy\">\n <ng-container\n *ngIf=\"item.component; else htmlTemplate\"\n [ngComponentOutlet]=\"item.component\"\n ></ng-container>\n\n <ng-template #htmlTemplate>\n <div [innerHTML]=\"item.html\" (click)=\"item.action ? item.action() : null\"></div>\n </ng-template>\n </li>\n </ng-container>\n </ng-container>\n</ul>\n", directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission"] }, { type: i2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }], pipes: { "async": i2.AsyncPipe } });
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: NavItemsComponent, decorators: [{
|
|
16
|
+
type: Component,
|
|
17
|
+
args: [{
|
|
18
|
+
selector: 'abp-nav-items',
|
|
19
|
+
templateUrl: 'nav-items.component.html',
|
|
20
|
+
}]
|
|
21
|
+
}], ctorParameters: function () { return [{ type: i1.NavItemsService }]; } });
|
|
22
|
+
//# sourceMappingURL=nav-items.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav-items.component.js","sourceRoot":"","sources":["../../../../../../../packages/theme-basic/src/lib/components/nav-items/nav-items.component.ts","../../../../../../../packages/theme-basic/src/lib/components/nav-items/nav-items.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAW,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,SAAS,EAA0B,MAAM,eAAe,CAAC;;;;;AAMlE,MAAM,OAAO,iBAAiB;IAG5B,YAA4B,QAAyB;QAAzB,aAAQ,GAAR,QAAQ,CAAiB;QAFrD,cAAS,GAA6B,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAET,CAAC;;8GAH9C,iBAAiB;kGAAjB,iBAAiB,qDCP9B,onBAgBA;2FDTa,iBAAiB;kBAJ7B,SAAS;mBAAC;oBACT,QAAQ,EAAE,eAAe;oBACzB,WAAW,EAAE,0BAA0B;iBACxC","sourcesContent":["import { NavItem, NavItemsService } from '@abp/ng.theme.shared';\nimport { Component, Input, TrackByFunction } from '@angular/core';\n\n@Component({\n selector: 'abp-nav-items',\n templateUrl: 'nav-items.component.html',\n})\nexport class NavItemsComponent {\n trackByFn: TrackByFunction<NavItem> = (_, element) => element.id;\n\n constructor(public readonly navItems: NavItemsService) {}\n}\n","<ul class=\"navbar-nav\">\n <ng-container *ngFor=\"let item of navItems.items$ | async; trackBy: trackByFn\">\n <ng-container *ngIf=\"item.visible()\">\n <li class=\"nav-item d-flex align-items-center\" *abpPermission=\"item.requiredPolicy\">\n <ng-container\n *ngIf=\"item.component; else htmlTemplate\"\n [ngComponentOutlet]=\"item.component\"\n ></ng-container>\n\n <ng-template #htmlTemplate>\n <div [innerHTML]=\"item.html\" (click)=\"item.action ? item.action() : null\"></div>\n </ng-template>\n </li>\n </ng-container>\n </ng-container>\n</ul>\n"]}
|
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import { Component, ViewEncapsulation } from '@angular/core';
|
|
2
2
|
import { PageAlertService } from '@abp/ng.theme.shared';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@abp/ng.theme.shared";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@abp/ng.core";
|
|
3
7
|
export class PageAlertContainerComponent {
|
|
4
8
|
constructor(service) {
|
|
5
9
|
this.service = service;
|
|
6
10
|
}
|
|
7
11
|
}
|
|
8
|
-
PageAlertContainerComponent
|
|
9
|
-
{ type:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
];
|
|
18
|
-
//# sourceMappingURL=
|
|
12
|
+
PageAlertContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: PageAlertContainerComponent, deps: [{ token: i1.PageAlertService }], target: i0.ɵɵFactoryTarget.Component });
|
|
13
|
+
PageAlertContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.6", type: PageAlertContainerComponent, selector: "abp-page-alert-container", ngImport: i0, template: "<ng-container *ngFor=\"let alert of service.alerts$ | async; let i = index\">\n <div\n class=\"alert alert-{{ alert.type }} fade show\"\n [ngClass]=\"{ 'alert-dismissible fade show': alert.dismissible }\"\n role=\"alert\"\n >\n <h4 class=\"alert-heading\" *ngIf=\"alert.title\">\n {{ alert.title | abpLocalization: alert.titleLocalizationParams }}\n </h4>\n {{ alert.message | abpLocalization: alert.messageLocalizationParams }}\n <button\n *ngIf=\"alert.dismissible\"\n type=\"button\"\n class=\"close\"\n data-dismiss=\"alert\"\n aria-label=\"Close\"\n (click)=\"service.remove(i)\"\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n</ng-container>\n", directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i2.AsyncPipe, "abpLocalization": i3.LocalizationPipe }, encapsulation: i0.ViewEncapsulation.None });
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: PageAlertContainerComponent, decorators: [{
|
|
15
|
+
type: Component,
|
|
16
|
+
args: [{
|
|
17
|
+
selector: 'abp-page-alert-container',
|
|
18
|
+
templateUrl: './page-alert-container.component.html',
|
|
19
|
+
encapsulation: ViewEncapsulation.None,
|
|
20
|
+
}]
|
|
21
|
+
}], ctorParameters: function () { return [{ type: i1.PageAlertService }]; } });
|
|
22
|
+
//# sourceMappingURL=page-alert-container.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-alert-container.component.js","sourceRoot":"","sources":["../../../../../../../packages/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts","../../../../../../../packages/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;;;;;AAOxD,MAAM,OAAO,2BAA2B;IACtC,YAAmB,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;IAAG,CAAC;;wHADrC,2BAA2B;4GAA3B,2BAA2B,gECRxC,wuBAsBA;2FDda,2BAA2B;kBALvC,SAAS;mBAAC;oBACT,QAAQ,EAAE,0BAA0B;oBACpC,WAAW,EAAE,uCAAuC;oBACpD,aAAa,EAAE,iBAAiB,CAAC,IAAI;iBACtC","sourcesContent":["import { Component, ViewEncapsulation } from '@angular/core';\nimport { PageAlertService } from '@abp/ng.theme.shared';\n\n@Component({\n selector: 'abp-page-alert-container',\n templateUrl: './page-alert-container.component.html',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PageAlertContainerComponent {\n constructor(public service: PageAlertService) {}\n}\n","<ng-container *ngFor=\"let alert of service.alerts$ | async; let i = index\">\n <div\n class=\"alert alert-{{ alert.type }} fade show\"\n [ngClass]=\"{ 'alert-dismissible fade show': alert.dismissible }\"\n role=\"alert\"\n >\n <h4 class=\"alert-heading\" *ngIf=\"alert.title\">\n {{ alert.title | abpLocalization: alert.titleLocalizationParams }}\n </h4>\n {{ alert.message | abpLocalization: alert.messageLocalizationParams }}\n <button\n *ngIf=\"alert.dismissible\"\n type=\"button\"\n class=\"close\"\n data-dismiss=\"alert\"\n aria-label=\"Close\"\n (click)=\"service.remove(i)\"\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n</ng-container>\n"]}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { RoutesService } from '@abp/ng.core';
|
|
2
|
-
import { Component, Input, Renderer2, ViewChildren, } from '@angular/core';
|
|
2
|
+
import { Component, Input, QueryList, Renderer2, ViewChildren, } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@abp/ng.core";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@angular/router";
|
|
7
|
+
import * as i4 from "@ng-bootstrap/ng-bootstrap";
|
|
8
|
+
import * as i5 from "@abp/ng.theme.shared";
|
|
3
9
|
export class RoutesComponent {
|
|
4
10
|
constructor(routesService, renderer) {
|
|
5
11
|
this.routesService = routesService;
|
|
@@ -16,18 +22,18 @@ export class RoutesComponent {
|
|
|
16
22
|
});
|
|
17
23
|
}
|
|
18
24
|
}
|
|
19
|
-
RoutesComponent
|
|
20
|
-
{ type:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
};
|
|
33
|
-
//# sourceMappingURL=
|
|
25
|
+
RoutesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: RoutesComponent, deps: [{ token: i1.RoutesService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
26
|
+
RoutesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.6", type: RoutesComponent, selector: "abp-routes", inputs: { smallScreen: "smallScreen" }, viewQueries: [{ propertyName: "childrenContainers", predicate: ["childrenContainer"], descendants: true }], ngImport: i0, template: "<ul class=\"navbar-nav\">\n <ng-container\n *ngFor=\"let route of routesService.visible$ | async; trackBy: trackByFn\"\n [ngTemplateOutlet]=\"isDropdown(route) ? dropdownLink : defaultLink\"\n [ngTemplateOutletContext]=\"{ $implicit: route }\"\n >\n </ng-container>\n\n <ng-template #defaultLink let-route>\n <li class=\"nav-item\" *abpPermission=\"route.requiredPolicy\">\n <a class=\"nav-link\" [routerLink]=\"[route.path]\"\n ><i *ngIf=\"route.iconClass\" [ngClass]=\"route.iconClass\"></i>\n {{ route.name | abpLocalization }}</a\n >\n </li>\n </ng-template>\n\n <ng-template #dropdownLink let-route>\n <ng-container *ngIf=\"route.children?.length\">\n <li\n #navbarRootDropdown\n class=\"nav-item dropdown\"\n display=\"static\"\n *abpPermission=\"route.requiredPolicy\"\n (click)=\"\n navbarRootDropdown.expand\n ? (navbarRootDropdown.expand = false)\n : (navbarRootDropdown.expand = true)\n \"\n >\n <a\n class=\"nav-link dropdown-toggle\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n href=\"javascript:void(0)\"\n >\n <i *ngIf=\"route.iconClass\" [ngClass]=\"route.iconClass\"></i>\n {{ route.name | abpLocalization }}\n </a>\n <div\n #routeContainer\n class=\"dropdown-menu border-0 shadow-sm\"\n (click)=\"$event.preventDefault(); $event.stopPropagation()\"\n [class.d-block]=\"smallScreen && navbarRootDropdown.expand\"\n >\n <ng-container\n *ngTemplateOutlet=\"forTemplate; context: { $implicit: route }\"\n ></ng-container>\n </div>\n </li>\n </ng-container>\n </ng-template>\n\n <ng-template #forTemplate let-route>\n <ng-container *ngFor=\"let child of route.children\">\n <ng-template\n [ngTemplateOutlet]=\"child.children?.length ? dropdownChild : defaultChild\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\"\n ></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #defaultChild let-child>\n <ng-container *ngIf=\"child.path\">\n <div class=\"dropdown-submenu\" *abpPermission=\"child.requiredPolicy\">\n <a class=\"dropdown-item\" [routerLink]=\"[child.path]\" (click)=\"closeDropdown()\">\n <i *ngIf=\"child.iconClass\" [ngClass]=\"child.iconClass\"></i>\n {{ child.name | abpLocalization }}</a\n >\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template #dropdownChild let-child>\n <div\n class=\"dropdown-submenu\"\n ngbDropdown\n #dropdownSubmenu=\"ngbDropdown\"\n placement=\"right-top\"\n [autoClose]=\"true\"\n *abpPermission=\"child.requiredPolicy\"\n >\n <div ngbDropdownToggle [class.dropdown-toggle]=\"false\">\n <a\n abpEllipsis=\"210px\"\n [abpEllipsisEnabled]=\"!smallScreen\"\n role=\"button\"\n class=\"btn d-block text-left dropdown-toggle\"\n >\n <i *ngIf=\"child.iconClass\" [ngClass]=\"child.iconClass\"></i>\n {{ child.name | abpLocalization }}\n </a>\n </div>\n <div\n #childrenContainer\n class=\"dropdown-menu border-0 shadow-sm\"\n [class.d-block]=\"smallScreen && dropdownSubmenu.isOpen()\"\n >\n <ng-container *ngTemplateOutlet=\"forTemplate; context: { $implicit: child }\"></ng-container>\n </div>\n </div>\n </ng-template>\n</ul>\n", directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission"] }, { type: i3.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["open", "placement", "container", "autoClose", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { type: i5.EllipsisDirective, selector: "[abpEllipsis]", inputs: ["abpEllipsis", "title", "abpEllipsisEnabled"] }], pipes: { "async": i2.AsyncPipe, "abpLocalization": i1.LocalizationPipe } });
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: RoutesComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{
|
|
30
|
+
selector: 'abp-routes',
|
|
31
|
+
templateUrl: 'routes.component.html',
|
|
32
|
+
}]
|
|
33
|
+
}], ctorParameters: function () { return [{ type: i1.RoutesService }, { type: i0.Renderer2 }]; }, propDecorators: { smallScreen: [{
|
|
34
|
+
type: Input
|
|
35
|
+
}], childrenContainers: [{
|
|
36
|
+
type: ViewChildren,
|
|
37
|
+
args: ['childrenContainer']
|
|
38
|
+
}] } });
|
|
39
|
+
//# sourceMappingURL=routes.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.component.js","sourceRoot":"","sources":["../../../../../../../packages/theme-basic/src/lib/components/routes/routes.component.ts","../../../../../../../packages/theme-basic/src/lib/components/routes/routes.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAO,aAAa,EAAY,MAAM,cAAc,CAAC;AAC5D,OAAO,EACL,SAAS,EAET,KAAK,EACL,SAAS,EACT,SAAS,EAET,YAAY,GACb,MAAM,eAAe,CAAC;;;;;;;AAMvB,MAAM,OAAO,eAAe;IAO1B,YAA4B,aAA4B,EAAY,QAAmB;QAA3D,kBAAa,GAAb,aAAa,CAAe;QAAY,aAAQ,GAAR,QAAQ,CAAW;QAFvF,cAAS,GAAyC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;IAEiB,CAAC;IAE3F,UAAU,CAAC,IAAyB;QAClC,OAAO,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAA,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,aAAa;QACX,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE;YACpD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAChD,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC;;4GAlBU,eAAe;gGAAf,eAAe,sMCf5B,mhHAwGA;2FDzFa,eAAe;kBAJ3B,SAAS;mBAAC;oBACT,QAAQ,EAAE,YAAY;oBACtB,WAAW,EAAE,uBAAuB;iBACrC;4HAEU,WAAW;sBAAnB,KAAK;gBAE6B,kBAAkB;sBAApD,YAAY;uBAAC,mBAAmB","sourcesContent":["import { ABP, RoutesService, TreeNode } from '@abp/ng.core';\nimport {\n Component,\n ElementRef,\n Input,\n QueryList,\n Renderer2,\n TrackByFunction,\n ViewChildren,\n} from '@angular/core';\n\n@Component({\n selector: 'abp-routes',\n templateUrl: 'routes.component.html',\n})\nexport class RoutesComponent {\n @Input() smallScreen: boolean;\n\n @ViewChildren('childrenContainer') childrenContainers: QueryList<ElementRef<HTMLDivElement>>;\n\n trackByFn: TrackByFunction<TreeNode<ABP.Route>> = (_, item) => item.name;\n\n constructor(public readonly routesService: RoutesService, protected renderer: Renderer2) {}\n\n isDropdown(node: TreeNode<ABP.Route>) {\n return !node?.isLeaf || this.routesService.hasChildren(node.name);\n }\n\n closeDropdown() {\n this.childrenContainers.forEach(({ nativeElement }) => {\n this.renderer.addClass(nativeElement, 'd-none');\n setTimeout(() => this.renderer.removeClass(nativeElement, 'd-none'), 0);\n });\n }\n}\n","<ul class=\"navbar-nav\">\n <ng-container\n *ngFor=\"let route of routesService.visible$ | async; trackBy: trackByFn\"\n [ngTemplateOutlet]=\"isDropdown(route) ? dropdownLink : defaultLink\"\n [ngTemplateOutletContext]=\"{ $implicit: route }\"\n >\n </ng-container>\n\n <ng-template #defaultLink let-route>\n <li class=\"nav-item\" *abpPermission=\"route.requiredPolicy\">\n <a class=\"nav-link\" [routerLink]=\"[route.path]\"\n ><i *ngIf=\"route.iconClass\" [ngClass]=\"route.iconClass\"></i>\n {{ route.name | abpLocalization }}</a\n >\n </li>\n </ng-template>\n\n <ng-template #dropdownLink let-route>\n <ng-container *ngIf=\"route.children?.length\">\n <li\n #navbarRootDropdown\n class=\"nav-item dropdown\"\n display=\"static\"\n *abpPermission=\"route.requiredPolicy\"\n (click)=\"\n navbarRootDropdown.expand\n ? (navbarRootDropdown.expand = false)\n : (navbarRootDropdown.expand = true)\n \"\n >\n <a\n class=\"nav-link dropdown-toggle\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n href=\"javascript:void(0)\"\n >\n <i *ngIf=\"route.iconClass\" [ngClass]=\"route.iconClass\"></i>\n {{ route.name | abpLocalization }}\n </a>\n <div\n #routeContainer\n class=\"dropdown-menu border-0 shadow-sm\"\n (click)=\"$event.preventDefault(); $event.stopPropagation()\"\n [class.d-block]=\"smallScreen && navbarRootDropdown.expand\"\n >\n <ng-container\n *ngTemplateOutlet=\"forTemplate; context: { $implicit: route }\"\n ></ng-container>\n </div>\n </li>\n </ng-container>\n </ng-template>\n\n <ng-template #forTemplate let-route>\n <ng-container *ngFor=\"let child of route.children\">\n <ng-template\n [ngTemplateOutlet]=\"child.children?.length ? dropdownChild : defaultChild\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\"\n ></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #defaultChild let-child>\n <ng-container *ngIf=\"child.path\">\n <div class=\"dropdown-submenu\" *abpPermission=\"child.requiredPolicy\">\n <a class=\"dropdown-item\" [routerLink]=\"[child.path]\" (click)=\"closeDropdown()\">\n <i *ngIf=\"child.iconClass\" [ngClass]=\"child.iconClass\"></i>\n {{ child.name | abpLocalization }}</a\n >\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template #dropdownChild let-child>\n <div\n class=\"dropdown-submenu\"\n ngbDropdown\n #dropdownSubmenu=\"ngbDropdown\"\n placement=\"right-top\"\n [autoClose]=\"true\"\n *abpPermission=\"child.requiredPolicy\"\n >\n <div ngbDropdownToggle [class.dropdown-toggle]=\"false\">\n <a\n abpEllipsis=\"210px\"\n [abpEllipsisEnabled]=\"!smallScreen\"\n role=\"button\"\n class=\"btn d-block text-left dropdown-toggle\"\n >\n <i *ngIf=\"child.iconClass\" [ngClass]=\"child.iconClass\"></i>\n {{ child.name | abpLocalization }}\n </a>\n </div>\n <div\n #childrenContainer\n class=\"dropdown-menu border-0 shadow-sm\"\n [class.d-block]=\"smallScreen && dropdownSubmenu.isOpen()\"\n >\n <ng-container *ngTemplateOutlet=\"forTemplate; context: { $implicit: child }\"></ng-container>\n </div>\n </div>\n </ng-template>\n</ul>\n"]}
|