@sd-angular/core 0.0.836 → 0.0.840
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/bundles/sd-angular-core-grid-material.umd.js +2 -1
- package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
- package/bundles/sd-angular-core-grid-material.umd.min.js +1 -1
- package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-tab-router.umd.js +830 -0
- package/bundles/sd-angular-core-tab-router.umd.js.map +1 -0
- package/bundles/sd-angular-core-tab-router.umd.min.js +16 -0
- package/bundles/sd-angular-core-tab-router.umd.min.js.map +1 -0
- package/bundles/sd-angular-core.umd.js +4 -4
- package/bundles/sd-angular-core.umd.js.map +1 -1
- package/bundles/sd-angular-core.umd.min.js +1 -1
- package/bundles/sd-angular-core.umd.min.js.map +1 -1
- package/esm2015/grid-material/src/lib/grid-material.component.js +3 -2
- package/esm2015/public-api.js +2 -1
- package/esm2015/tab-router/index.js +2 -0
- package/esm2015/tab-router/sd-angular-core-tab-router.js +7 -0
- package/esm2015/tab-router/src/lib/actions/tab-router.action.js +2 -0
- package/esm2015/tab-router/src/lib/components/tab-router-item/tab-router-item.component.js +26 -0
- package/esm2015/tab-router/src/lib/components/tab-router-nav/tab-router-nav.component.js +33 -0
- package/esm2015/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.js +196 -0
- package/esm2015/tab-router/src/lib/decorators/tab.decorator.js +9 -0
- package/esm2015/tab-router/src/lib/events/tab-router.event.js +17 -0
- package/esm2015/tab-router/src/lib/models/tab-router.model.js +5 -0
- package/esm2015/tab-router/src/lib/pipes/tab-info.pipe.js +34 -0
- package/esm2015/tab-router/src/lib/services/tab-decorator.service.js +26 -0
- package/esm2015/tab-router/src/lib/services/tab-router.service.js +106 -0
- package/esm2015/tab-router/src/lib/tab-router.module.js +29 -0
- package/esm2015/tab-router/src/public-api.js +18 -0
- package/fesm2015/sd-angular-core-grid-material.js +2 -1
- package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
- package/fesm2015/sd-angular-core-tab-router.js +464 -0
- package/fesm2015/sd-angular-core-tab-router.js.map +1 -0
- package/fesm2015/sd-angular-core.js +1 -0
- package/fesm2015/sd-angular-core.js.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/{sd-angular-core-0.0.836.tgz → sd-angular-core-0.0.840.tgz} +0 -0
- package/tab-router/index.d.ts +1 -0
- package/tab-router/package.json +12 -0
- package/tab-router/sd-angular-core-tab-router.d.ts +6 -0
- package/tab-router/sd-angular-core-tab-router.metadata.json +1 -0
- package/tab-router/src/lib/actions/tab-router.action.d.ts +5 -0
- package/tab-router/src/lib/components/tab-router-item/tab-router-item.component.d.ts +8 -0
- package/tab-router/src/lib/components/tab-router-nav/tab-router-nav.component.d.ts +10 -0
- package/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.d.ts +22 -0
- package/tab-router/src/lib/decorators/tab.decorator.d.ts +17 -0
- package/tab-router/src/lib/events/tab-router.event.d.ts +11 -0
- package/tab-router/src/lib/models/tab-router.model.d.ts +20 -0
- package/tab-router/src/lib/pipes/tab-info.pipe.d.ts +9 -0
- package/tab-router/src/lib/services/tab-decorator.service.d.ts +6 -0
- package/tab-router/src/lib/services/tab-router.service.d.ts +24 -0
- package/tab-router/src/lib/tab-router.module.d.ts +2 -0
- package/tab-router/src/public-api.d.ts +9 -0
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
import { __classPrivateFieldSet, __classPrivateFieldGet, __awaiter } from 'tslib';
|
|
2
|
+
import { ɵɵdefineInjectable, ɵɵinject, Injectable, Component, Input, ViewChild, HostListener, ChangeDetectorRef, Injector, Compiler, Pipe, NgModule } from '@angular/core';
|
|
3
|
+
import { BehaviorSubject, Subscription } from 'rxjs';
|
|
4
|
+
import { SdNotifyService } from '@sd-angular/core/notify';
|
|
5
|
+
import { RoutesRecognized, Router, ChildrenOutletContexts, ActivatedRoute, RouterModule } from '@angular/router';
|
|
6
|
+
import { CommonModule } from '@angular/common';
|
|
7
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
8
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
9
|
+
import { map } from 'rxjs/operators';
|
|
10
|
+
|
|
11
|
+
// export interface SdTabComponent {
|
|
12
|
+
// getTabInfo(args: {params: any, queryParams: any});
|
|
13
|
+
// }
|
|
14
|
+
|
|
15
|
+
var _tab;
|
|
16
|
+
class SdTabBase {
|
|
17
|
+
constructor(tab) {
|
|
18
|
+
_tab.set(this, void 0);
|
|
19
|
+
__classPrivateFieldSet(this, _tab, tab);
|
|
20
|
+
}
|
|
21
|
+
get tab() {
|
|
22
|
+
return __classPrivateFieldGet(this, _tab);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
_tab = new WeakMap();
|
|
26
|
+
class SdTabActivated extends SdTabBase {
|
|
27
|
+
}
|
|
28
|
+
class SdTabDeactivated extends SdTabBase {
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
var _currentTab, _componentBuilders;
|
|
32
|
+
class SdTabRouterService {
|
|
33
|
+
constructor(notifyService) {
|
|
34
|
+
this.notifyService = notifyService;
|
|
35
|
+
this.events = new BehaviorSubject(new SdTabBase(null));
|
|
36
|
+
this.actions = new BehaviorSubject(null);
|
|
37
|
+
this.builders = new BehaviorSubject([]);
|
|
38
|
+
_currentTab.set(this, null);
|
|
39
|
+
_componentBuilders.set(this, []);
|
|
40
|
+
this.addBuilder = (builder) => {
|
|
41
|
+
if (!__classPrivateFieldGet(this, _componentBuilders).some(e => e.component === builder.component)) {
|
|
42
|
+
__classPrivateFieldGet(this, _componentBuilders).push(builder);
|
|
43
|
+
this.builders.next(__classPrivateFieldGet(this, _componentBuilders));
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
// select = (tabOrKey: string | SdTab): void => {
|
|
47
|
+
// const tab = this.#tabs.find(e => {
|
|
48
|
+
// if (typeof (tabOrKey) === 'string') {
|
|
49
|
+
// return e.key === tabOrKey;
|
|
50
|
+
// }
|
|
51
|
+
// return e.key === tabOrKey?.key;
|
|
52
|
+
// });
|
|
53
|
+
// if (tab) {
|
|
54
|
+
// this.#currentTab = tab;
|
|
55
|
+
// }
|
|
56
|
+
// }
|
|
57
|
+
// add = (tab: SdTab): void => {
|
|
58
|
+
// if (!tab.key) {
|
|
59
|
+
// this.notifyService.notify.warning('Tab key is required');
|
|
60
|
+
// }
|
|
61
|
+
// if (!tab.component) {
|
|
62
|
+
// this.notifyService.notify.warning('Tab component is required');
|
|
63
|
+
// }
|
|
64
|
+
// const existedTab = this.#tabs.find(e => e.key === tab.key);
|
|
65
|
+
// if (!existedTab) {
|
|
66
|
+
// this.#tabs.push(tab);
|
|
67
|
+
// this.select(tab);
|
|
68
|
+
// } else {
|
|
69
|
+
// this.select(existedTab);
|
|
70
|
+
// }
|
|
71
|
+
// }
|
|
72
|
+
// remove = (tabOrKey: string | SdTab): void => {
|
|
73
|
+
// this.#tabs = this.#tabs.filter(e => {
|
|
74
|
+
// if (typeof (tabOrKey) === 'string') {
|
|
75
|
+
// return e.key !== tabOrKey;
|
|
76
|
+
// }
|
|
77
|
+
// return e.key !== tabOrKey?.key;
|
|
78
|
+
// });
|
|
79
|
+
// }
|
|
80
|
+
this.setCurrentTab = (tab) => {
|
|
81
|
+
__classPrivateFieldSet(this, _currentTab, tab);
|
|
82
|
+
};
|
|
83
|
+
this.pushEvent = (tab, Event) => {
|
|
84
|
+
this.events.next(new Event(tab));
|
|
85
|
+
};
|
|
86
|
+
this.setOptions = () => { };
|
|
87
|
+
this.close = (tab) => {
|
|
88
|
+
if (tab) {
|
|
89
|
+
this.actions.next({
|
|
90
|
+
type: 'close',
|
|
91
|
+
tab,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
else if (__classPrivateFieldGet(this, _currentTab)) {
|
|
95
|
+
this.actions.next({
|
|
96
|
+
type: 'close',
|
|
97
|
+
tab: __classPrivateFieldGet(this, _currentTab),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
SdTabRouterService.service = this;
|
|
102
|
+
}
|
|
103
|
+
// #tabs: SdTab[] = [];
|
|
104
|
+
static getService() {
|
|
105
|
+
if (!SdTabRouterService.service) {
|
|
106
|
+
throw new Error('SdTabRouterService is not initialized');
|
|
107
|
+
}
|
|
108
|
+
return SdTabRouterService.service;
|
|
109
|
+
}
|
|
110
|
+
get currentTab() {
|
|
111
|
+
return __classPrivateFieldGet(this, _currentTab);
|
|
112
|
+
}
|
|
113
|
+
get key() {
|
|
114
|
+
var _a;
|
|
115
|
+
return ((_a = __classPrivateFieldGet(this, _currentTab)) === null || _a === void 0 ? void 0 : _a.key) || null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
_currentTab = new WeakMap(), _componentBuilders = new WeakMap();
|
|
119
|
+
SdTabRouterService.service = undefined;
|
|
120
|
+
SdTabRouterService.ɵprov = ɵɵdefineInjectable({ factory: function SdTabRouterService_Factory() { return new SdTabRouterService(ɵɵinject(SdNotifyService)); }, token: SdTabRouterService, providedIn: "root" });
|
|
121
|
+
SdTabRouterService.decorators = [
|
|
122
|
+
{ type: Injectable, args: [{
|
|
123
|
+
providedIn: 'root',
|
|
124
|
+
},] }
|
|
125
|
+
];
|
|
126
|
+
SdTabRouterService.ctorParameters = () => [
|
|
127
|
+
{ type: SdNotifyService }
|
|
128
|
+
];
|
|
129
|
+
|
|
130
|
+
class SdTabDecoratorService {
|
|
131
|
+
constructor(service) {
|
|
132
|
+
SdTabDecoratorService.service = service;
|
|
133
|
+
}
|
|
134
|
+
static getService() {
|
|
135
|
+
if (!SdTabDecoratorService.service) {
|
|
136
|
+
throw new Error('SdTabDecoratorService not initialized');
|
|
137
|
+
}
|
|
138
|
+
return SdTabDecoratorService.service;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
SdTabDecoratorService.service = undefined;
|
|
142
|
+
SdTabDecoratorService.ɵprov = ɵɵdefineInjectable({ factory: function SdTabDecoratorService_Factory() { return new SdTabDecoratorService(ɵɵinject(SdTabRouterService)); }, token: SdTabDecoratorService, providedIn: "root" });
|
|
143
|
+
SdTabDecoratorService.decorators = [
|
|
144
|
+
{ type: Injectable, args: [{
|
|
145
|
+
providedIn: 'root'
|
|
146
|
+
},] }
|
|
147
|
+
];
|
|
148
|
+
SdTabDecoratorService.ctorParameters = () => [
|
|
149
|
+
{ type: SdTabRouterService }
|
|
150
|
+
];
|
|
151
|
+
|
|
152
|
+
function SdTabComponent(builder) {
|
|
153
|
+
return (constructor) => {
|
|
154
|
+
const service = SdTabDecoratorService.getService();
|
|
155
|
+
service.addBuilder(builder);
|
|
156
|
+
console.log(constructor);
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
class SdTabRouterItemComponent {
|
|
161
|
+
constructor(tabRouterService) {
|
|
162
|
+
this.tabRouterService = tabRouterService;
|
|
163
|
+
this.close = (event) => {
|
|
164
|
+
event.preventDefault();
|
|
165
|
+
event.stopPropagation();
|
|
166
|
+
this.tabRouterService.close(this.tab);
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
SdTabRouterItemComponent.decorators = [
|
|
171
|
+
{ type: Component, args: [{
|
|
172
|
+
selector: 'sd-tab-router-item',
|
|
173
|
+
template: "<a [routerLink]=\"[tab.url]\" [state]=\"{ switchTab: true }\" class=\"tab-router__item d-flex align-items-center\" [ngClass]=\"{\r\n 'tab-router__item--active': tab.isActive,\r\n 'tab-router__item--child': tab.isChild\r\n }\" matTooltip=\"{{ tab.name }}\" matTooltipPosition=\"below\" matTooltipShowDelay=\"1000\">\r\n <ng-container *ngIf=\"tab | sdTabInfo | async as tabInfo\">\r\n <div class=\"\r\n tab-router__icon\r\n d-flex\r\n align-items-center\r\n justify-content-center\r\n mr-8\r\n \" [ngStyle]=\"{\r\n 'background-color': tabInfo.color\r\n }\">\r\n <mat-icon fontSet=\"material-icons-outlined\" *ngIf=\"tab.isChild; else parentIcon\">circle</mat-icon>\r\n <ng-template #parentIcon>{{ tabInfo.initialName || 'W' }}</ng-template>\r\n </div>\r\n <div class=\"flex-1\">\r\n <div class=\"tab-router__name\">{{ tabInfo.name }}</div>\r\n </div>\r\n <button type=\"button\" class=\"\r\n tab-router__close\r\n d-flex\r\n align-items-center\r\n justify-content-center\r\n ml-4\r\n \" (click)=\"close($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </ng-container>\r\n\r\n</a>",
|
|
174
|
+
styles: [":host{flex:1 1 auto;max-width:240px;position:relative}:host:after{background:#dde0e5;bottom:0;content:\"\";height:16px;margin:auto;position:absolute;right:0;top:0;width:1px}:host:last-child:after{content:none}.flex-1{flex:1}.tab-router__icon{background-color:#5c6bc0;border-radius:2px;color:#fff;font-size:10px;height:16px;line-height:1;text-transform:uppercase;width:16px}.tab-router__icon .mat-icon{font-size:10px;height:10px;width:10px}.tab-router__close{background:none;border:0;border-radius:50%;color:#757575;height:16px;outline:none;width:16px}.tab-router__close:hover{background-color:rgba(0,0,0,.12)}.tab-router__close .mat-icon{font-size:12px;height:12px;width:12px}.tab-router__item{background:#f2f3f4;color:inherit;font-size:12px;line-height:16px;padding:16px 16px 8px;text-decoration:none}.tab-router__item:hover{background-color:#fff}.tab-router__name{-webkit-box-orient:vertical;-webkit-line-clamp:1;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.tab-router__item--active{background-color:#fff;border-radius:8px 8px 0 0}"]
|
|
175
|
+
},] }
|
|
176
|
+
];
|
|
177
|
+
SdTabRouterItemComponent.ctorParameters = () => [
|
|
178
|
+
{ type: SdTabRouterService }
|
|
179
|
+
];
|
|
180
|
+
SdTabRouterItemComponent.propDecorators = {
|
|
181
|
+
tab: [{ type: Input }]
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
class SdTabRouterNavComponent {
|
|
185
|
+
constructor() {
|
|
186
|
+
this.mode = 'default';
|
|
187
|
+
this.checkUI = () => {
|
|
188
|
+
const width = this.tabRouterNav.nativeElement.clientWidth;
|
|
189
|
+
const nameWidth = (width - this.tabs.length * 64) / this.tabs.length;
|
|
190
|
+
if (nameWidth <= 20) {
|
|
191
|
+
this.mode = 'compact';
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
this.mode = 'default';
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
onResize(event) {
|
|
199
|
+
this.checkUI();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
SdTabRouterNavComponent.decorators = [
|
|
203
|
+
{ type: Component, args: [{
|
|
204
|
+
selector: 'sd-tab-router-nav',
|
|
205
|
+
template: "<div\r\n #tabRouterNav\r\n class=\"tab-router__nav tab-router__nav--{{ mode }} d-flex align-items-center\"\r\n>\r\n <ng-container *ngFor=\"let tab of tabs\">\r\n <sd-tab-router-item [tab]=\"tab\"></sd-tab-router-item>\r\n </ng-container>\r\n</div>\r\n",
|
|
206
|
+
styles: [".tab-router__nav{background:#f9f9f9}.tab-router__nav--compact::ng-deep .tab-router__name{display:none}.tab-router__nav--compact::ng-deep .tab-router__icon{margin:0!important}.tab-router__nav--compact::ng-deep .tab-router__item--active{min-width:240px}.tab-router__nav--compact::ng-deep .tab-router__item--active .tab-router__icon{margin-right:8px!important}.tab-router__nav--compact::ng-deep .tab-router__item--active .tab-router__name{display:-webkit-box}"]
|
|
207
|
+
},] }
|
|
208
|
+
];
|
|
209
|
+
SdTabRouterNavComponent.ctorParameters = () => [];
|
|
210
|
+
SdTabRouterNavComponent.propDecorators = {
|
|
211
|
+
tabRouterNav: [{ type: ViewChild, args: ['tabRouterNav',] }],
|
|
212
|
+
tabs: [{ type: Input }],
|
|
213
|
+
onResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }]
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
var _rootRoute, _subscription, _closeTab, _activeRoute, _getActivatedRouteSnapshot, _getActivatedRoute;
|
|
217
|
+
class SdTabRouterOutletComponent {
|
|
218
|
+
constructor(router, cd, injector, compiler, parentContexts, tabDecoratorService, tabRouterService, sdNotifyService) {
|
|
219
|
+
this.router = router;
|
|
220
|
+
this.cd = cd;
|
|
221
|
+
this.injector = injector;
|
|
222
|
+
this.compiler = compiler;
|
|
223
|
+
this.parentContexts = parentContexts;
|
|
224
|
+
this.tabDecoratorService = tabDecoratorService;
|
|
225
|
+
this.tabRouterService = tabRouterService;
|
|
226
|
+
this.sdNotifyService = sdNotifyService;
|
|
227
|
+
this.tabs = [];
|
|
228
|
+
_rootRoute.set(this, void 0);
|
|
229
|
+
_subscription.set(this, new Subscription());
|
|
230
|
+
_closeTab.set(this, (tab) => {
|
|
231
|
+
var _a;
|
|
232
|
+
this.tabs = this.tabs.filter(({ key }) => key !== tab.key);
|
|
233
|
+
if (tab.isActive) {
|
|
234
|
+
const lastTab = this.tabs[this.tabs.length - 1];
|
|
235
|
+
if (lastTab) {
|
|
236
|
+
this.router.navigateByUrl(lastTab.url, {
|
|
237
|
+
state: {
|
|
238
|
+
switchTab: true,
|
|
239
|
+
},
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
this.router.navigateByUrl('/', {
|
|
244
|
+
state: {
|
|
245
|
+
switchTab: true,
|
|
246
|
+
},
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
(_a = this.tabRouterNav) === null || _a === void 0 ? void 0 : _a.checkUI();
|
|
252
|
+
this.cd.markForCheck();
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
_activeRoute.set(this, (url, route) => __awaiter(this, void 0, void 0, function* () {
|
|
256
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
257
|
+
if (!(route === null || route === void 0 ? void 0 : route.component)) {
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
const component = route.component;
|
|
261
|
+
const queryParams = Object.assign({}, (route.queryParams || {}));
|
|
262
|
+
const params = Object.assign({}, (route.params || {}));
|
|
263
|
+
let existedIndex = -1;
|
|
264
|
+
this.tabs.forEach((tab, index) => {
|
|
265
|
+
if (tab.key === url) {
|
|
266
|
+
tab.isActive = true;
|
|
267
|
+
existedIndex = index;
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
if (tab.isActive) {
|
|
271
|
+
this.tabRouterService.pushEvent(tab, SdTabDeactivated);
|
|
272
|
+
}
|
|
273
|
+
tab.isActive = false;
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
const currentNavigation = this.router.getCurrentNavigation();
|
|
277
|
+
if (existedIndex >= 0 && ((_b = (_a = currentNavigation === null || currentNavigation === void 0 ? void 0 : currentNavigation.extras) === null || _a === void 0 ? void 0 : _a.state) === null || _b === void 0 ? void 0 : _b.switchTab)) {
|
|
278
|
+
const existedTab = this.tabs[existedIndex];
|
|
279
|
+
this.tabRouterService.setCurrentTab(existedTab);
|
|
280
|
+
this.tabRouterService.pushEvent(existedTab, SdTabActivated);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
if (typeof ((_d = (_c = route === null || route === void 0 ? void 0 : route.parent) === null || _c === void 0 ? void 0 : _c.routeConfig) === null || _d === void 0 ? void 0 : _d.loadChildren) === 'function') {
|
|
284
|
+
const module = yield route.parent.routeConfig.loadChildren();
|
|
285
|
+
const factory = yield this.compiler.compileModuleAsync(module);
|
|
286
|
+
const injector = factory.create(this.injector);
|
|
287
|
+
// let tabInfo = {};
|
|
288
|
+
// if ('getTabInfo' in component) {
|
|
289
|
+
// tabInfo = component.getTabInfo({
|
|
290
|
+
// params,
|
|
291
|
+
// queryParams,
|
|
292
|
+
// });
|
|
293
|
+
// }
|
|
294
|
+
const activatedRoute = __classPrivateFieldGet(this, _getActivatedRoute).call(this, __classPrivateFieldGet(this, _rootRoute), component);
|
|
295
|
+
const tab = {
|
|
296
|
+
key: url,
|
|
297
|
+
component,
|
|
298
|
+
injector: new SdOutletInjector(activatedRoute, injector),
|
|
299
|
+
isActive: true,
|
|
300
|
+
name: url,
|
|
301
|
+
url,
|
|
302
|
+
params,
|
|
303
|
+
queryParams,
|
|
304
|
+
};
|
|
305
|
+
this.tabRouterService.setCurrentTab(tab);
|
|
306
|
+
if (existedIndex >= 0 && !((_f = (_e = currentNavigation === null || currentNavigation === void 0 ? void 0 : currentNavigation.extras) === null || _e === void 0 ? void 0 : _e.state) === null || _f === void 0 ? void 0 : _f.switchTab)) {
|
|
307
|
+
this.tabs[existedIndex] = tab;
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
this.tabs.push(tab);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
(_g = this.tabRouterNav) === null || _g === void 0 ? void 0 : _g.checkUI();
|
|
314
|
+
if (this.tabs.length > 10) {
|
|
315
|
+
this.sdNotifyService.notify.warning('Bạn đã mở quá nhiều tab. Vui lòng tắt các tab không dùng để hệ thống hoạt động tốt hơn.');
|
|
316
|
+
}
|
|
317
|
+
if (this.tabs.length > 12) {
|
|
318
|
+
this.tabs.splice(0, this.tabs.length - 10);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
this.cd.markForCheck();
|
|
322
|
+
}));
|
|
323
|
+
_getActivatedRouteSnapshot.set(this, (activatedRouteSnapshot) => {
|
|
324
|
+
if (!activatedRouteSnapshot) {
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
327
|
+
if (activatedRouteSnapshot.firstChild) {
|
|
328
|
+
return __classPrivateFieldGet(this, _getActivatedRouteSnapshot).call(this, activatedRouteSnapshot.firstChild);
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
return activatedRouteSnapshot;
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
_getActivatedRoute.set(this, (activatedRoute, component) => {
|
|
335
|
+
if (!activatedRoute) {
|
|
336
|
+
return null;
|
|
337
|
+
}
|
|
338
|
+
if (activatedRoute.component && activatedRoute.component === component) {
|
|
339
|
+
return activatedRoute;
|
|
340
|
+
}
|
|
341
|
+
else if (activatedRoute.firstChild) {
|
|
342
|
+
return __classPrivateFieldGet(this, _getActivatedRoute).call(this, activatedRoute.firstChild, component);
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
__classPrivateFieldGet(this, _subscription).add(router.events.subscribe((event) => __awaiter(this, void 0, void 0, function* () {
|
|
349
|
+
if (event instanceof RoutesRecognized) {
|
|
350
|
+
const route = __classPrivateFieldGet(this, _getActivatedRouteSnapshot).call(this, event.state.root);
|
|
351
|
+
__classPrivateFieldSet(this, _rootRoute, this.router.routerState.root);
|
|
352
|
+
yield __classPrivateFieldGet(this, _activeRoute).call(this, event.urlAfterRedirects || event.url, route);
|
|
353
|
+
}
|
|
354
|
+
})));
|
|
355
|
+
__classPrivateFieldGet(this, _subscription).add(tabRouterService.actions.subscribe((event) => {
|
|
356
|
+
if (event && event.type === 'close') {
|
|
357
|
+
__classPrivateFieldGet(this, _closeTab).call(this, event.tab);
|
|
358
|
+
}
|
|
359
|
+
}));
|
|
360
|
+
}
|
|
361
|
+
ngOnDestroy() {
|
|
362
|
+
__classPrivateFieldGet(this, _subscription).unsubscribe();
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
_rootRoute = new WeakMap(), _subscription = new WeakMap(), _closeTab = new WeakMap(), _activeRoute = new WeakMap(), _getActivatedRouteSnapshot = new WeakMap(), _getActivatedRoute = new WeakMap();
|
|
366
|
+
SdTabRouterOutletComponent.decorators = [
|
|
367
|
+
{ type: Component, args: [{
|
|
368
|
+
selector: 'sd-tab-router-outlet',
|
|
369
|
+
template: "<sd-tab-router-nav [tabs]=\"tabs\" #tabRouterNav></sd-tab-router-nav>\r\n\r\n<div class=\"tab-router__list\">\r\n <ng-container *ngFor=\"let tab of tabs\">\r\n <div class=\"tab-router__pane\" [class.active]=\"tab.isActive\" [id]=\"tab.key\">\r\n <div class=\"tab-router__content\">\r\n <ng-container\r\n *ngComponentOutlet=\"tab.component; injector: tab.injector\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n",
|
|
370
|
+
styles: [":host{display:flex;flex-direction:column;height:calc(100vh - 64px);width:100%}::ng-deep page-layout{height:100%!important}.tab-router__list{flex:1}.tab-router__pane{display:none;height:100%;position:relative;width:100%}.tab-router__pane.active{display:block}.tab-router__content{bottom:0;height:100%;left:0;overflow:auto;position:absolute;right:0;top:0;width:100%}"]
|
|
371
|
+
},] }
|
|
372
|
+
];
|
|
373
|
+
SdTabRouterOutletComponent.ctorParameters = () => [
|
|
374
|
+
{ type: Router },
|
|
375
|
+
{ type: ChangeDetectorRef },
|
|
376
|
+
{ type: Injector },
|
|
377
|
+
{ type: Compiler },
|
|
378
|
+
{ type: ChildrenOutletContexts },
|
|
379
|
+
{ type: SdTabDecoratorService },
|
|
380
|
+
{ type: SdTabRouterService },
|
|
381
|
+
{ type: SdNotifyService }
|
|
382
|
+
];
|
|
383
|
+
SdTabRouterOutletComponent.propDecorators = {
|
|
384
|
+
tabRouterNav: [{ type: ViewChild, args: ['tabRouterNav',] }]
|
|
385
|
+
};
|
|
386
|
+
class SdOutletInjector {
|
|
387
|
+
constructor(route,
|
|
388
|
+
// private childContexts: ChildrenOutletContexts,
|
|
389
|
+
parent) {
|
|
390
|
+
this.route = route;
|
|
391
|
+
this.parent = parent;
|
|
392
|
+
}
|
|
393
|
+
get(token, notFoundValue) {
|
|
394
|
+
if (token === ActivatedRoute && this.route) {
|
|
395
|
+
return this.route;
|
|
396
|
+
}
|
|
397
|
+
// if (token === ChildrenOutletContexts) {
|
|
398
|
+
// return this.childContexts;
|
|
399
|
+
// }
|
|
400
|
+
return this.parent.get(token, notFoundValue);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
class SdTabInfoPipe {
|
|
405
|
+
constructor(tabRouterService) {
|
|
406
|
+
this.tabRouterService = tabRouterService;
|
|
407
|
+
}
|
|
408
|
+
transform(tab) {
|
|
409
|
+
return this.tabRouterService.builders.pipe(map(builders => {
|
|
410
|
+
const builder = builders.find(e => e.component === tab.component);
|
|
411
|
+
if (builder) {
|
|
412
|
+
const { params, queryParams } = tab;
|
|
413
|
+
return {
|
|
414
|
+
name: typeof (builder.name) === 'function' ? builder.name({ params, queryParams }) : builder.name,
|
|
415
|
+
initialName: typeof (builder.initialName) === 'function' ? builder.initialName({ params, queryParams }) : builder.initialName,
|
|
416
|
+
color: typeof (builder.color) === 'function' ? builder.color({ params, queryParams }) : builder.color
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
return {
|
|
420
|
+
name: tab.url,
|
|
421
|
+
initialName: tab.url[0],
|
|
422
|
+
};
|
|
423
|
+
}));
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
SdTabInfoPipe.decorators = [
|
|
427
|
+
{ type: Pipe, args: [{
|
|
428
|
+
name: 'sdTabInfo'
|
|
429
|
+
},] }
|
|
430
|
+
];
|
|
431
|
+
SdTabInfoPipe.ctorParameters = () => [
|
|
432
|
+
{ type: SdTabRouterService }
|
|
433
|
+
];
|
|
434
|
+
|
|
435
|
+
class SdTabRouterModule {
|
|
436
|
+
}
|
|
437
|
+
SdTabRouterModule.decorators = [
|
|
438
|
+
{ type: NgModule, args: [{
|
|
439
|
+
declarations: [
|
|
440
|
+
SdTabRouterItemComponent,
|
|
441
|
+
SdTabRouterNavComponent,
|
|
442
|
+
SdTabRouterOutletComponent,
|
|
443
|
+
SdTabInfoPipe,
|
|
444
|
+
],
|
|
445
|
+
imports: [RouterModule, CommonModule, MatIconModule, MatTooltipModule],
|
|
446
|
+
exports: [
|
|
447
|
+
SdTabRouterItemComponent,
|
|
448
|
+
SdTabRouterNavComponent,
|
|
449
|
+
SdTabRouterOutletComponent,
|
|
450
|
+
],
|
|
451
|
+
providers: [],
|
|
452
|
+
},] }
|
|
453
|
+
];
|
|
454
|
+
|
|
455
|
+
/*
|
|
456
|
+
* Public API Surface of superdev-angular-core
|
|
457
|
+
*/
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* Generated bundle index. Do not edit.
|
|
461
|
+
*/
|
|
462
|
+
|
|
463
|
+
export { SdTabActivated, SdTabBase, SdTabComponent, SdTabDeactivated, SdTabRouterItemComponent, SdTabRouterModule, SdTabRouterNavComponent, SdTabRouterOutletComponent, SdTabRouterService, SdTabDecoratorService as ɵa, SdTabInfoPipe as ɵb };
|
|
464
|
+
//# sourceMappingURL=sd-angular-core-tab-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sd-angular-core-tab-router.js","sources":["../../../../projects/sd-core/tab-router/src/lib/models/tab-router.model.ts","../../../../projects/sd-core/tab-router/src/lib/events/tab-router.event.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-router.service.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-decorator.service.ts","../../../../projects/sd-core/tab-router/src/lib/decorators/tab.decorator.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-item/tab-router-item.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-nav/tab-router-nav.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.ts","../../../../projects/sd-core/tab-router/src/lib/pipes/tab-info.pipe.ts","../../../../projects/sd-core/tab-router/src/lib/tab-router.module.ts","../../../../projects/sd-core/tab-router/src/public-api.ts","../../../../projects/sd-core/tab-router/sd-angular-core-tab-router.ts"],"sourcesContent":["import { Component, Type } from '@angular/core';\r\n\r\nexport interface SdTabInfo {\r\n name: string;\r\n initialName?: string;\r\n color?: string;\r\n}\r\n\r\nexport interface SdTab extends SdTabInfo {\r\n component: Type<any>;\r\n injector?: any;\r\n key: string;\r\n\r\n isActive: boolean;\r\n url: string;\r\n isChild?: boolean;\r\n params?: {\r\n [key: string]: string | number;\r\n };\r\n queryParams?: {\r\n [key: string]: string | number;\r\n };\r\n}\r\n\r\n// export interface SdTabComponent {\r\n// getTabInfo(args: {params: any, queryParams: any});\r\n// }","import { SdTab } from '../models/tab-router.model';\r\n\r\nexport class SdTabBase {\r\n #tab: SdTab | null;\r\n\r\n constructor(tab: SdTab | null) {\r\n this.#tab = tab;\r\n }\r\n\r\n get tab(): SdTab | null {\r\n return this.#tab;\r\n }\r\n}\r\n\r\nexport class SdTabActivated extends SdTabBase {}\r\n\r\nexport class SdTabDeactivated extends SdTabBase {}\r\n\r\nexport declare type SdTabEvent = SdTabActivated | SdTabDeactivated;\r\n","import { Injectable, Type } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTab } from '../models/tab-router.model';\r\nimport { SdTabAction } from '../actions/tab-router.action';\r\nimport { SdTabEvent, SdTabBase } from '../events/tab-router.event';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTabComponentBuilder } from '../decorators/tab.decorator';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdTabRouterService {\r\n private static service: SdTabRouterService | undefined = undefined;\r\n events = new BehaviorSubject<SdTabEvent>(new SdTabBase(null));\r\n actions = new BehaviorSubject<SdTabAction | null>(null);\r\n builders = new BehaviorSubject<SdTabComponentBuilder[]>([]);\r\n\r\n #currentTab: SdTab | null = null;\r\n #componentBuilders: SdTabComponentBuilder[] = [];\r\n // #tabs: SdTab[] = [];\r\n\r\n public static getService(): SdTabRouterService {\r\n if (!SdTabRouterService.service) {\r\n throw new Error('SdTabRouterService is not initialized');\r\n }\r\n return SdTabRouterService.service;\r\n }\r\n constructor(private notifyService: SdNotifyService) {\r\n SdTabRouterService.service = this;\r\n }\r\n\r\n addBuilder = (builder: SdTabComponentBuilder) => {\r\n if (!this.#componentBuilders.some(e => e.component === builder.component)) {\r\n this.#componentBuilders.push(builder);\r\n this.builders.next(this.#componentBuilders);\r\n }\r\n }\r\n\r\n get currentTab() {\r\n return this.#currentTab;\r\n }\r\n\r\n get key() {\r\n return this.#currentTab?.key || null;\r\n }\r\n\r\n // select = (tabOrKey: string | SdTab): void => {\r\n // const tab = this.#tabs.find(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key === tabOrKey;\r\n // }\r\n // return e.key === tabOrKey?.key;\r\n // });\r\n // if (tab) {\r\n // this.#currentTab = tab;\r\n // }\r\n // }\r\n\r\n // add = (tab: SdTab): void => {\r\n // if (!tab.key) {\r\n // this.notifyService.notify.warning('Tab key is required');\r\n // }\r\n // if (!tab.component) {\r\n // this.notifyService.notify.warning('Tab component is required');\r\n // }\r\n // const existedTab = this.#tabs.find(e => e.key === tab.key);\r\n // if (!existedTab) {\r\n // this.#tabs.push(tab);\r\n // this.select(tab);\r\n // } else {\r\n // this.select(existedTab);\r\n // }\r\n // }\r\n\r\n // remove = (tabOrKey: string | SdTab): void => {\r\n // this.#tabs = this.#tabs.filter(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key !== tabOrKey;\r\n // }\r\n // return e.key !== tabOrKey?.key;\r\n // });\r\n // }\r\n\r\n setCurrentTab = (tab: SdTab): void => {\r\n this.#currentTab = tab;\r\n }\r\n\r\n pushEvent = (tab: SdTab, Event: Type<SdTabEvent>) => {\r\n this.events.next(new Event(tab));\r\n }\r\n\r\n setOptions = () => { };\r\n\r\n close = (tab?: SdTab) => {\r\n if (tab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab,\r\n });\r\n } else if (this.#currentTab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab: this.#currentTab,\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SdTabRouterService } from './tab-router.service';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdTabDecoratorService {\r\n private static service: SdTabRouterService | undefined = undefined;\r\n public constructor(service: SdTabRouterService) {\r\n SdTabDecoratorService.service = service;\r\n }\r\n public static getService(): SdTabRouterService {\r\n if (!SdTabDecoratorService.service) {\r\n throw new Error('SdTabDecoratorService not initialized');\r\n }\r\n return SdTabDecoratorService.service;\r\n }\r\n}\r\n","import { Type } from '@angular/core';\r\nimport { SdTabDecoratorService } from '../services/tab-decorator.service';\r\n\r\nexport declare interface SdTabComponentBuilder {\r\n component: Type<any>;\r\n name: string | ((args: { params: any, queryParams: any }) => string);\r\n initialName: string | ((args: { params: any, queryParams: any }) => string);\r\n color?: string | ((args: { params: any, queryParams: any }) => string);\r\n}\r\n\r\nexport function SdTabComponent<T>(builder: SdTabComponentBuilder) {\r\n return (constructor: T) => {\r\n const service = SdTabDecoratorService.getService();\r\n service.addBuilder(builder);\r\n console.log(constructor);\r\n };\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-item',\r\n templateUrl: './tab-router-item.component.html',\r\n styleUrls: ['./tab-router-item.component.scss'],\r\n})\r\nexport class SdTabRouterItemComponent {\r\n @Input() tab: SdTab;\r\n\r\n constructor(private tabRouterService: SdTabRouterService) {}\r\n\r\n close = (event: Event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.tabRouterService.close(this.tab);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-nav',\r\n templateUrl: './tab-router-nav.component.html',\r\n styleUrls: ['./tab-router-nav.component.scss'],\r\n})\r\nexport class SdTabRouterNavComponent {\r\n @ViewChild('tabRouterNav') tabRouterNav: ElementRef;\r\n\r\n @Input() tabs: SdTab[];\r\n mode: 'default' | 'compact' = 'default';\r\n\r\n constructor() {}\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event): void {\r\n this.checkUI();\r\n }\r\n\r\n checkUI = () => {\r\n const width = this.tabRouterNav.nativeElement.clientWidth;\r\n const nameWidth = (width - this.tabs.length * 64) / this.tabs.length;\r\n if (nameWidth <= 20) {\r\n this.mode = 'compact';\r\n } else {\r\n this.mode = 'default';\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Compiler,\r\n Component,\r\n Injector,\r\n NgModuleRef,\r\n OnDestroy,\r\n OnInit,\r\n Type,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n ActivatedRoute,\r\n ActivatedRouteSnapshot,\r\n ChildrenOutletContexts,\r\n // ChildrenOutletContexts,\r\n Event,\r\n PRIMARY_OUTLET,\r\n Router,\r\n RoutesRecognized,\r\n} from '@angular/router';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport {\r\n SdTabActivated,\r\n SdTabDeactivated,\r\n} from '../../events/tab-router.event';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabAction } from '../../actions/tab-router.action';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\nimport { SdTabRouterNavComponent } from '../tab-router-nav/tab-router-nav.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { SdTabDecoratorService } from '../../services/tab-decorator.service';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-outlet',\r\n templateUrl: './tab-router-outlet.component.html',\r\n styleUrls: ['./tab-router-outlet.component.scss'],\r\n // changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdTabRouterOutletComponent implements OnDestroy {\r\n @ViewChild('tabRouterNav') tabRouterNav: SdTabRouterNavComponent;\r\n tabs: SdTab[] = [];\r\n\r\n #rootRoute: ActivatedRoute;\r\n #subscription = new Subscription();\r\n constructor(\r\n private router: Router,\r\n private cd: ChangeDetectorRef,\r\n private injector: Injector,\r\n private compiler: Compiler,\r\n private parentContexts: ChildrenOutletContexts,\r\n private tabDecoratorService: SdTabDecoratorService, \r\n private tabRouterService: SdTabRouterService,\r\n private sdNotifyService: SdNotifyService\r\n ) {\r\n this.#subscription.add(router.events.subscribe(async (event: Event) => {\r\n if (event instanceof RoutesRecognized) {\r\n const route = this.#getActivatedRouteSnapshot(event.state.root);\r\n this.#rootRoute = this.router.routerState.root;\r\n await this.#activeRoute(event.urlAfterRedirects || event.url, route);\r\n }\r\n }));\r\n\r\n this.#subscription.add(tabRouterService.actions.subscribe((event: SdTabAction | null) => {\r\n if (event && event.type === 'close') {\r\n this.#closeTab(event.tab);\r\n }\r\n }));\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #closeTab = (tab: SdTab) => {\r\n this.tabs = this.tabs.filter(({ key }) => key !== tab.key);\r\n if (tab.isActive) {\r\n const lastTab = this.tabs[this.tabs.length - 1];\r\n if (lastTab) {\r\n this.router.navigateByUrl(lastTab.url, {\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n } else {\r\n this.router.navigateByUrl('/', {\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n }\r\n } else {\r\n this.tabRouterNav?.checkUI();\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n #activeRoute = async (url: string, route: ActivatedRouteSnapshot | null) => {\r\n if (!route?.component) {\r\n return;\r\n }\r\n\r\n const component = route.component as Type<any>;\r\n const queryParams = {\r\n ...(route.queryParams || {}),\r\n };\r\n const params = {\r\n ...(route.params || {}),\r\n };\r\n\r\n let existedIndex = -1;\r\n this.tabs.forEach((tab: SdTab, index: number) => {\r\n if (tab.key === url) {\r\n tab.isActive = true;\r\n existedIndex = index;\r\n } else {\r\n if (tab.isActive) {\r\n this.tabRouterService.pushEvent(tab, SdTabDeactivated);\r\n }\r\n tab.isActive = false;\r\n }\r\n });\r\n\r\n const currentNavigation = this.router.getCurrentNavigation();\r\n if (existedIndex >= 0 && currentNavigation?.extras?.state?.switchTab) {\r\n const existedTab = this.tabs[existedIndex];\r\n this.tabRouterService.setCurrentTab(existedTab);\r\n this.tabRouterService.pushEvent(existedTab, SdTabActivated);\r\n } else {\r\n if (typeof route?.parent?.routeConfig?.loadChildren === 'function') {\r\n const module = await route.parent.routeConfig.loadChildren();\r\n const factory = await this.compiler.compileModuleAsync(module);\r\n const injector = factory.create(this.injector);\r\n // let tabInfo = {};\r\n // if ('getTabInfo' in component) {\r\n // tabInfo = component.getTabInfo({\r\n // params,\r\n // queryParams,\r\n // });\r\n // }\r\n\r\n const activatedRoute = this.#getActivatedRoute(\r\n this.#rootRoute,\r\n component\r\n );\r\n\r\n const tab = {\r\n key: url,\r\n component,\r\n injector: new SdOutletInjector(activatedRoute, injector),\r\n\r\n isActive: true,\r\n name: url,\r\n url,\r\n params,\r\n queryParams,\r\n // ...tabInfo,\r\n };\r\n\r\n this.tabRouterService.setCurrentTab(tab);\r\n if (existedIndex >= 0 && !currentNavigation?.extras?.state?.switchTab) {\r\n this.tabs[existedIndex] = tab;\r\n } else {\r\n this.tabs.push(tab);\r\n }\r\n }\r\n\r\n this.tabRouterNav?.checkUI();\r\n if (this.tabs.length > 10) {\r\n this.sdNotifyService.notify.warning(\r\n 'Bạn đã mở quá nhiều tab. Vui lòng tắt các tab không dùng để hệ thống hoạt động tốt hơn.'\r\n );\r\n }\r\n if (this.tabs.length > 12) {\r\n this.tabs.splice(0, this.tabs.length - 10);\r\n }\r\n }\r\n this.cd.markForCheck();\r\n }\r\n\r\n #getActivatedRouteSnapshot = (\r\n activatedRouteSnapshot: ActivatedRouteSnapshot\r\n ): ActivatedRouteSnapshot | null => {\r\n if (!activatedRouteSnapshot) {\r\n return null;\r\n }\r\n\r\n if (activatedRouteSnapshot.firstChild) {\r\n return this.#getActivatedRouteSnapshot(activatedRouteSnapshot.firstChild);\r\n } else {\r\n return activatedRouteSnapshot;\r\n }\r\n }\r\n\r\n #getActivatedRoute = (\r\n activatedRoute: ActivatedRoute,\r\n component: any\r\n ): ActivatedRoute | null => {\r\n if (!activatedRoute) {\r\n return null;\r\n }\r\n\r\n if (activatedRoute.component && activatedRoute.component === component) {\r\n return activatedRoute;\r\n } else if (activatedRoute.firstChild) {\r\n return this.#getActivatedRoute(activatedRoute.firstChild, component);\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nclass SdOutletInjector implements Injector {\r\n constructor(\r\n private route: ActivatedRoute | null,\r\n // private childContexts: ChildrenOutletContexts,\r\n private parent: any\r\n ) {}\r\n\r\n get(token: any, notFoundValue?: any): any {\r\n if (token === ActivatedRoute && this.route) {\r\n return this.route;\r\n }\r\n\r\n // if (token === ChildrenOutletContexts) {\r\n // return this.childContexts;\r\n // }\r\n\r\n return this.parent.get(token, notFoundValue);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { SdTab, SdTabInfo } from '../models/tab-router.model';\r\nimport { SdTabRouterService } from '../services/tab-router.service';\r\n@Pipe({\r\n name: 'sdTabInfo'\r\n})\r\nexport class SdTabInfoPipe implements PipeTransform {\r\n constructor(private tabRouterService: SdTabRouterService) { }\r\n transform(tab: SdTab): Observable<SdTabInfo> {\r\n return this.tabRouterService.builders.pipe(map(builders => {\r\n const builder = builders.find(e => e.component === tab.component);\r\n if (builder) {\r\n const { params, queryParams } = tab;\r\n return {\r\n name: typeof (builder.name) === 'function' ? builder.name({ params, queryParams }) : builder.name,\r\n initialName: typeof (builder.initialName) === 'function' ? builder.initialName({ params, queryParams }) : builder.initialName,\r\n color: typeof (builder.color) === 'function' ? builder.color({ params, queryParams }) : builder.color\r\n };\r\n }\r\n return {\r\n name: tab.url,\r\n initialName: tab.url[0],\r\n };\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { SdTabRouterItemComponent } from './components/tab-router-item/tab-router-item.component';\r\nimport { SdTabRouterNavComponent } from './components/tab-router-nav/tab-router-nav.component';\r\nimport { SdTabRouterOutletComponent } from './components/tab-router-outlet/tab-router-outlet.component';\r\nimport { SdTabInfoPipe } from './pipes/tab-info.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n SdTabInfoPipe,\r\n ],\r\n imports: [RouterModule, CommonModule, MatIconModule, MatTooltipModule],\r\n exports: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n ],\r\n providers: [],\r\n})\r\nexport class SdTabRouterModule {}\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\n// Models\r\nexport * from './lib/models/tab-router.model';\r\nexport * from './lib/events/tab-router.event';\r\nexport * from './lib/actions/tab-router.action';\r\n\r\n// Decorators\r\nexport * from './lib/decorators/tab.decorator';\r\n\r\n// Service\r\nexport * from './lib/services/tab-router.service';\r\n\r\n// Components\r\nexport * from './lib/components/tab-router-item/tab-router-item.component';\r\nexport * from './lib/components/tab-router-nav/tab-router-nav.component';\r\nexport * from './lib/components/tab-router-outlet/tab-router-outlet.component';\r\n\r\n// Module\r\nexport * from './lib/tab-router.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {SdTabInfoPipe as ɵb} from './src/lib/pipes/tab-info.pipe';\nexport {SdTabDecoratorService as ɵa} from './src/lib/services/tab-decorator.service';"],"names":[],"mappings":"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"}
|
|
@@ -52,6 +52,7 @@ import '@sd-angular/core/textarea';
|
|
|
52
52
|
import '@sd-angular/core/checkbox';
|
|
53
53
|
import '@sd-angular/core/time';
|
|
54
54
|
import '@sd-angular/core/side-drawer';
|
|
55
|
+
import '@sd-angular/core/tab-router';
|
|
55
56
|
import '@sd-angular/core/excel';
|
|
56
57
|
import '@sd-angular/core/input';
|
|
57
58
|
import '@sd-angular/core/select';
|