@indice/ng-components 0.2.175 → 0.3.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/README.md +4 -4
- package/_styles.scss +4323 -4275
- package/{esm2020 → esm2022}/indice-ng-components.mjs +4 -4
- package/esm2022/lib/controls/advanced-search/advanced-search.component.mjs +156 -0
- package/esm2022/lib/controls/advanced-search/models.mjs +109 -0
- package/esm2022/lib/controls/avatar-initials/avatar-initials.component.mjs +48 -0
- package/{esm2020 → esm2022}/lib/controls/breadcrumb/breadcrumb-item.mjs +14 -14
- package/esm2022/lib/controls/breadcrumb/breadcrumb.component.mjs +26 -0
- package/esm2022/lib/controls/collapsible-panel/collapsible-panel.component.mjs +20 -0
- package/esm2022/lib/controls/combobox/combobox.component.mjs +121 -0
- package/esm2022/lib/controls/content-tile/content-tile-header/content-tile-header.component.mjs +17 -0
- package/esm2022/lib/controls/content-tile/content-tile-item/content-tile-item.component.mjs +19 -0
- package/esm2022/lib/controls/content-tile/content-tile.component.mjs +63 -0
- package/esm2022/lib/controls/date-picker/date-picker.component.mjs +300 -0
- package/esm2022/lib/controls/drop-down-menu/drop-down-menu.component.mjs +72 -0
- package/esm2022/lib/controls/kpi-tile/kpi-tile.component.mjs +43 -0
- package/esm2022/lib/controls/language-selection/language-selection.component.mjs +31 -0
- package/{esm2020 → esm2022}/lib/controls/list-view/list-column.component.mjs +25 -25
- package/esm2022/lib/controls/list-view/list-details-section.component.mjs +17 -0
- package/{esm2020 → esm2022}/lib/controls/list-view/list-tile.component.mjs +17 -17
- package/esm2022/lib/controls/list-view/list-view-empty-state.component.mjs +29 -0
- package/esm2022/lib/controls/list-view/list-view.component.mjs +210 -0
- package/esm2022/lib/controls/nav-links-list/nav-links-list.component.mjs +54 -0
- package/esm2022/lib/controls/notifications-indicator/notifications-indicator.component.mjs +79 -0
- package/esm2022/lib/controls/pager/pager.component.mjs +130 -0
- package/esm2022/lib/controls/progress-bar/progress-bar.component.mjs +46 -0
- package/esm2022/lib/controls/side-pane/side-pane.component.mjs +87 -0
- package/esm2022/lib/controls/skeleton-loader/skeleton-loader.component.mjs +29 -0
- package/esm2022/lib/controls/stats-grid/stats-grid.component.mjs +49 -0
- package/{esm2020 → esm2022}/lib/controls/stepper/lib-step-info.directive.mjs +16 -16
- package/{esm2020 → esm2022}/lib/controls/stepper/lib-step-label.directive.mjs +16 -16
- package/esm2022/lib/controls/stepper/lib-step.component.mjs +81 -0
- package/esm2022/lib/controls/stepper/lib-stepper.component.mjs +108 -0
- package/esm2022/lib/controls/stepper/types/step-selected-event.mjs +4 -0
- package/{esm2020 → esm2022}/lib/controls/stepper/types/stepper-type.mjs +12 -12
- package/esm2022/lib/controls/tabs/lib-tab-group.component.mjs +66 -0
- package/{esm2020 → esm2022}/lib/controls/tabs/lib-tab-label.directive.mjs +16 -16
- package/{esm2020 → esm2022}/lib/controls/tabs/lib-tab.component.mjs +64 -64
- package/esm2022/lib/controls/toaster/toaster-container.component.mjs +28 -0
- package/esm2022/lib/controls/toaster/toaster.component.mjs +31 -0
- package/esm2022/lib/controls/toggle/toggle.component.mjs +64 -0
- package/esm2022/lib/controls/toggle-button/toggle-button.component.mjs +87 -0
- package/esm2022/lib/controls/toggle-buttons-list/toggle-buttons-list.component.mjs +34 -0
- package/esm2022/lib/controls/user-profile-menu/user-profile-menu.component.mjs +71 -0
- package/esm2022/lib/directives/click-outside.directive.mjs +189 -0
- package/esm2022/lib/directives/dynamic-component-host.directive.mjs +17 -0
- package/esm2022/lib/helpers/base-list.component.mjs +230 -0
- package/esm2022/lib/icons.mjs +36 -0
- package/esm2022/lib/layouts/shell/shell-footer/shell-footer.component.mjs +19 -0
- package/esm2022/lib/layouts/shell/shell-header/shell-header.component.mjs +130 -0
- package/esm2022/lib/layouts/shell/shell-layout/shell-layout.component.mjs +90 -0
- package/esm2022/lib/layouts/shell/shell-sidebar/shell-sidebar.component.mjs +54 -0
- package/esm2022/lib/layouts/shell/shell-sidebar-header/shell-sidebar-header.component.mjs +45 -0
- package/esm2022/lib/layouts/shell/shell-sidebar-layout/shell-sidebar-layout.component.mjs +30 -0
- package/esm2022/lib/layouts/shell/shell-stacked-layout/shell-stacked-layout.component.mjs +20 -0
- package/esm2022/lib/layouts/views/form-layout/form-layout.component.mjs +86 -0
- package/esm2022/lib/layouts/views/model-view-layout/model-view-layout.component.mjs +101 -0
- package/esm2022/lib/layouts/views/side-view-layout/side-view-layout.component.mjs +106 -0
- package/esm2022/lib/layouts/views/view-layout/view-layout.component.mjs +104 -0
- package/esm2022/lib/ng-components.module.mjs +320 -0
- package/esm2022/lib/pages/auth/auth-callback/auth-callback.component.mjs +30 -0
- package/esm2022/lib/pages/auth/auth-renew/auth-renew.component.mjs +31 -0
- package/esm2022/lib/pages/auth/logged-out/logged-out.component.mjs +28 -0
- package/esm2022/lib/pages/http-status/error/error.component.mjs +17 -0
- package/esm2022/lib/pages/http-status/page-not-found/page-not-found.component.mjs +15 -0
- package/esm2022/lib/pages/http-status/unauthorized/unauthorized.component.mjs +14 -0
- package/esm2022/lib/pipes/address.pipe.mjs +21 -0
- package/esm2022/lib/pipes/duration-format.pipe.mjs +64 -0
- package/esm2022/lib/pipes/short-number.pipe.mjs +43 -0
- package/esm2022/lib/services/breadcrumb.service.mjs +174 -0
- package/esm2022/lib/services/component-loader/component-loader-options.class.mjs +8 -0
- package/esm2022/lib/services/component-loader/component-loader.class.mjs +188 -0
- package/esm2022/lib/services/component-loader/component-loader.factory.mjs +32 -0
- package/{esm2020 → esm2022}/lib/services/component-loader/content-ref.class.mjs +13 -13
- package/esm2022/lib/services/modal-service/modal-backdrop-component.mjs +44 -0
- package/esm2022/lib/services/modal-service/modal-container-component.mjs +126 -0
- package/esm2022/lib/services/modal-service/modal-options.class.mjs +35 -0
- package/esm2022/lib/services/modal-service/modal-service.mjs +220 -0
- package/{esm2020 → esm2022}/lib/services/modal-service/modal-styles.class.mjs +11 -11
- package/esm2022/lib/services/modal-service/modal.class.mjs +27 -0
- package/{esm2020 → esm2022}/lib/services/toaster.service.mjs +26 -26
- package/esm2022/lib/services/user-settings.service.mjs +35 -0
- package/esm2022/lib/services/utilities.service.mjs +47 -0
- package/{esm2020 → esm2022}/lib/tokens.mjs +8 -8
- package/esm2022/lib/types.mjs +133 -0
- package/esm2022/public-api.mjs +78 -0
- package/fesm2022/indice-ng-components.mjs +5069 -0
- package/fesm2022/indice-ng-components.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/controls/advanced-search/advanced-search.component.d.ts +40 -40
- package/lib/controls/advanced-search/models.d.ts +91 -91
- package/lib/controls/avatar-initials/avatar-initials.component.d.ts +14 -14
- package/lib/controls/breadcrumb/breadcrumb-item.d.ts +7 -7
- package/lib/controls/breadcrumb/breadcrumb.component.d.ts +12 -12
- package/lib/controls/collapsible-panel/collapsible-panel.component.d.ts +10 -10
- package/lib/controls/combobox/combobox.component.d.ts +35 -34
- package/lib/controls/content-tile/content-tile-header/content-tile-header.component.d.ts +7 -0
- package/lib/controls/content-tile/content-tile-item/content-tile-item.component.d.ts +8 -0
- package/lib/controls/content-tile/content-tile.component.d.ts +23 -0
- package/lib/controls/date-picker/date-picker.component.d.ts +53 -53
- package/lib/controls/drop-down-menu/drop-down-menu.component.d.ts +26 -26
- package/lib/controls/kpi-tile/kpi-tile.component.d.ts +15 -15
- package/lib/controls/language-selection/language-selection.component.d.ts +14 -14
- package/lib/controls/list-view/list-column.component.d.ts +9 -9
- package/lib/controls/list-view/list-details-section.component.d.ts +7 -7
- package/lib/controls/list-view/list-tile.component.d.ts +7 -7
- package/lib/controls/list-view/list-view-empty-state.component.d.ts +11 -11
- package/lib/controls/list-view/list-view.component.d.ts +62 -61
- package/lib/controls/nav-links-list/nav-links-list.component.d.ts +21 -21
- package/lib/controls/notifications-indicator/notifications-indicator.component.d.ts +22 -22
- package/lib/controls/pager/pager.component.d.ts +36 -36
- package/lib/controls/progress-bar/progress-bar.component.d.ts +16 -0
- package/lib/controls/side-pane/side-pane.component.d.ts +22 -18
- package/lib/controls/skeleton-loader/skeleton-loader.component.d.ts +12 -11
- package/lib/controls/stats-grid/stats-grid.component.d.ts +16 -0
- package/lib/controls/stepper/lib-step-info.directive.d.ts +8 -8
- package/lib/controls/stepper/lib-step-label.directive.d.ts +8 -8
- package/lib/controls/stepper/lib-step.component.d.ts +34 -34
- package/lib/controls/stepper/lib-stepper.component.d.ts +43 -43
- package/lib/controls/stepper/types/step-selected-event.d.ts +12 -12
- package/lib/controls/stepper/types/stepper-type.d.ts +10 -10
- package/lib/controls/tabs/lib-tab-group.component.d.ts +21 -21
- package/lib/controls/tabs/lib-tab-label.directive.d.ts +8 -8
- package/lib/controls/tabs/lib-tab.component.d.ts +24 -24
- package/lib/controls/toaster/toaster-container.component.d.ts +13 -13
- package/lib/controls/toaster/toaster.component.d.ts +15 -15
- package/lib/controls/toggle/toggle.component.d.ts +19 -19
- package/lib/controls/toggle-button/toggle-button.component.d.ts +25 -25
- package/lib/controls/toggle-buttons-list/toggle-buttons-list.component.d.ts +15 -14
- package/lib/controls/user-profile-menu/user-profile-menu.component.d.ts +24 -24
- package/lib/directives/click-outside.directive.d.ts +40 -40
- package/lib/directives/dynamic-component-host.directive.d.ts +9 -9
- package/lib/helpers/base-list.component.d.ts +54 -53
- package/lib/icons.d.ts +34 -34
- package/lib/layouts/shell/shell-footer/shell-footer.component.d.ts +8 -8
- package/lib/layouts/shell/shell-header/shell-header.component.d.ts +39 -39
- package/lib/layouts/shell/shell-layout/shell-layout.component.d.ts +26 -26
- package/lib/layouts/shell/shell-sidebar/shell-sidebar.component.d.ts +20 -20
- package/lib/layouts/shell/shell-sidebar-header/shell-sidebar-header.component.d.ts +14 -14
- package/lib/layouts/shell/shell-sidebar-layout/shell-sidebar-layout.component.d.ts +15 -15
- package/lib/layouts/shell/shell-stacked-layout/shell-stacked-layout.component.d.ts +10 -10
- package/lib/layouts/views/form-layout/form-layout.component.d.ts +26 -24
- package/lib/layouts/views/model-view-layout/model-view-layout.component.d.ts +42 -42
- package/lib/layouts/views/side-view-layout/side-view-layout.component.d.ts +29 -28
- package/lib/layouts/views/view-layout/view-layout.component.d.ts +31 -31
- package/lib/ng-components.module.d.ts +71 -65
- package/lib/pages/auth/auth-callback/auth-callback.component.d.ts +13 -13
- package/lib/pages/auth/auth-renew/auth-renew.component.d.ts +12 -12
- package/lib/pages/auth/logged-out/logged-out.component.d.ts +12 -12
- package/lib/pages/http-status/error/error.component.d.ts +8 -8
- package/lib/pages/http-status/page-not-found/page-not-found.component.d.ts +8 -8
- package/lib/pages/http-status/unauthorized/unauthorized.component.d.ts +8 -8
- package/lib/pipes/address.pipe.d.ts +8 -8
- package/lib/pipes/duration-format.pipe.d.ts +8 -8
- package/lib/pipes/short-number.pipe.d.ts +7 -0
- package/lib/services/breadcrumb.service.d.ts +29 -29
- package/lib/services/component-loader/component-loader-options.class.d.ts +30 -30
- package/lib/services/component-loader/component-loader.class.d.ts +92 -92
- package/lib/services/component-loader/component-loader.factory.d.ts +24 -24
- package/lib/services/component-loader/content-ref.class.d.ts +12 -12
- package/lib/services/modal-service/modal-backdrop-component.d.ts +20 -20
- package/lib/services/modal-service/modal-container-component.d.ts +33 -33
- package/lib/services/modal-service/modal-options.class.d.ts +81 -81
- package/lib/services/modal-service/modal-service.d.ts +58 -58
- package/lib/services/modal-service/modal-styles.class.d.ts +10 -10
- package/lib/services/modal-service/modal.class.d.ts +43 -43
- package/lib/services/toaster.service.d.ts +11 -11
- package/lib/services/user-settings.service.d.ts +13 -13
- package/lib/services/utilities.service.d.ts +11 -11
- package/lib/tokens.d.ts +10 -10
- package/lib/types.d.ts +179 -177
- package/modal.css +157 -157
- package/package.json +13 -19
- package/public-api.d.ts +68 -60
- package/esm2020/lib/controls/advanced-search/advanced-search.component.mjs +0 -156
- package/esm2020/lib/controls/advanced-search/models.mjs +0 -109
- package/esm2020/lib/controls/avatar-initials/avatar-initials.component.mjs +0 -48
- package/esm2020/lib/controls/breadcrumb/breadcrumb.component.mjs +0 -26
- package/esm2020/lib/controls/collapsible-panel/collapsible-panel.component.mjs +0 -20
- package/esm2020/lib/controls/combobox/combobox.component.mjs +0 -117
- package/esm2020/lib/controls/date-picker/date-picker.component.mjs +0 -292
- package/esm2020/lib/controls/drop-down-menu/drop-down-menu.component.mjs +0 -72
- package/esm2020/lib/controls/kpi-tile/kpi-tile.component.mjs +0 -43
- package/esm2020/lib/controls/language-selection/language-selection.component.mjs +0 -31
- package/esm2020/lib/controls/list-view/list-details-section.component.mjs +0 -17
- package/esm2020/lib/controls/list-view/list-view-empty-state.component.mjs +0 -29
- package/esm2020/lib/controls/list-view/list-view.component.mjs +0 -206
- package/esm2020/lib/controls/nav-links-list/nav-links-list.component.mjs +0 -54
- package/esm2020/lib/controls/notifications-indicator/notifications-indicator.component.mjs +0 -79
- package/esm2020/lib/controls/pager/pager.component.mjs +0 -130
- package/esm2020/lib/controls/side-pane/side-pane.component.mjs +0 -72
- package/esm2020/lib/controls/skeleton-loader/skeleton-loader.component.mjs +0 -25
- package/esm2020/lib/controls/stepper/lib-step.component.mjs +0 -81
- package/esm2020/lib/controls/stepper/lib-stepper.component.mjs +0 -108
- package/esm2020/lib/controls/stepper/types/step-selected-event.mjs +0 -4
- package/esm2020/lib/controls/tabs/lib-tab-group.component.mjs +0 -66
- package/esm2020/lib/controls/toaster/toaster-container.component.mjs +0 -28
- package/esm2020/lib/controls/toaster/toaster.component.mjs +0 -31
- package/esm2020/lib/controls/toggle/toggle.component.mjs +0 -64
- package/esm2020/lib/controls/toggle-button/toggle-button.component.mjs +0 -87
- package/esm2020/lib/controls/toggle-buttons-list/toggle-buttons-list.component.mjs +0 -31
- package/esm2020/lib/controls/user-profile-menu/user-profile-menu.component.mjs +0 -71
- package/esm2020/lib/directives/click-outside.directive.mjs +0 -189
- package/esm2020/lib/directives/dynamic-component-host.directive.mjs +0 -17
- package/esm2020/lib/helpers/base-list.component.mjs +0 -226
- package/esm2020/lib/icons.mjs +0 -36
- package/esm2020/lib/layouts/shell/shell-footer/shell-footer.component.mjs +0 -19
- package/esm2020/lib/layouts/shell/shell-header/shell-header.component.mjs +0 -130
- package/esm2020/lib/layouts/shell/shell-layout/shell-layout.component.mjs +0 -90
- package/esm2020/lib/layouts/shell/shell-sidebar/shell-sidebar.component.mjs +0 -54
- package/esm2020/lib/layouts/shell/shell-sidebar-header/shell-sidebar-header.component.mjs +0 -45
- package/esm2020/lib/layouts/shell/shell-sidebar-layout/shell-sidebar-layout.component.mjs +0 -30
- package/esm2020/lib/layouts/shell/shell-stacked-layout/shell-stacked-layout.component.mjs +0 -20
- package/esm2020/lib/layouts/views/form-layout/form-layout.component.mjs +0 -80
- package/esm2020/lib/layouts/views/model-view-layout/model-view-layout.component.mjs +0 -101
- package/esm2020/lib/layouts/views/side-view-layout/side-view-layout.component.mjs +0 -98
- package/esm2020/lib/layouts/views/view-layout/view-layout.component.mjs +0 -104
- package/esm2020/lib/ng-components.module.mjs +0 -288
- package/esm2020/lib/pages/auth/auth-callback/auth-callback.component.mjs +0 -30
- package/esm2020/lib/pages/auth/auth-renew/auth-renew.component.mjs +0 -31
- package/esm2020/lib/pages/auth/logged-out/logged-out.component.mjs +0 -28
- package/esm2020/lib/pages/http-status/error/error.component.mjs +0 -17
- package/esm2020/lib/pages/http-status/page-not-found/page-not-found.component.mjs +0 -15
- package/esm2020/lib/pages/http-status/unauthorized/unauthorized.component.mjs +0 -14
- package/esm2020/lib/pipes/address.pipe.mjs +0 -21
- package/esm2020/lib/pipes/duration-format.pipe.mjs +0 -64
- package/esm2020/lib/services/breadcrumb.service.mjs +0 -174
- package/esm2020/lib/services/component-loader/component-loader-options.class.mjs +0 -8
- package/esm2020/lib/services/component-loader/component-loader.class.mjs +0 -188
- package/esm2020/lib/services/component-loader/component-loader.factory.mjs +0 -32
- package/esm2020/lib/services/modal-service/modal-backdrop-component.mjs +0 -44
- package/esm2020/lib/services/modal-service/modal-container-component.mjs +0 -126
- package/esm2020/lib/services/modal-service/modal-options.class.mjs +0 -35
- package/esm2020/lib/services/modal-service/modal-service.mjs +0 -220
- package/esm2020/lib/services/modal-service/modal.class.mjs +0 -27
- package/esm2020/lib/services/user-settings.service.mjs +0 -35
- package/esm2020/lib/services/utilities.service.mjs +0 -47
- package/esm2020/lib/types.mjs +0 -132
- package/esm2020/public-api.mjs +0 -70
- package/fesm2015/indice-ng-components.mjs +0 -4852
- package/fesm2015/indice-ng-components.mjs.map +0 -1
- package/fesm2020/indice-ng-components.mjs +0 -4763
- package/fesm2020/indice-ng-components.mjs.map +0 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class DurationFormatPipe {
|
|
4
|
+
transform(value, arg1, arg2) {
|
|
5
|
+
let days;
|
|
6
|
+
let seconds;
|
|
7
|
+
let minutes;
|
|
8
|
+
let hours;
|
|
9
|
+
if (arg1 === 'ms' && arg2 === 'hhmmss') {
|
|
10
|
+
seconds = Math.floor((value / 1000) % 60);
|
|
11
|
+
minutes = Math.floor(((value / (1000 * 60)) % 60));
|
|
12
|
+
hours = Math.floor((value / (1000 * 60 * 60)));
|
|
13
|
+
return this.format(arg2, seconds, minutes, hours, days);
|
|
14
|
+
}
|
|
15
|
+
else if (arg1 === 's' && arg2 === 'hhmmss') {
|
|
16
|
+
seconds = Math.floor((value % 60));
|
|
17
|
+
minutes = Math.floor(((value / 60) % 60));
|
|
18
|
+
hours = Math.floor(((value / 60) / 60));
|
|
19
|
+
return this.format(arg2, seconds, minutes, hours, days);
|
|
20
|
+
}
|
|
21
|
+
else if (arg1 === 'ms' && (arg2 === 'ddhhmmss' || arg2 === 'ddhhmmssLong')) {
|
|
22
|
+
seconds = Math.floor(((value / 1000) % 60));
|
|
23
|
+
minutes = Math.floor((value / (1000 * 60) % 60));
|
|
24
|
+
hours = Math.floor((value / (1000 * 60 * 60) % 24));
|
|
25
|
+
days = Math.floor((value / (1000 * 60 * 60 * 24)));
|
|
26
|
+
return this.format(arg2, seconds, minutes, hours, days);
|
|
27
|
+
}
|
|
28
|
+
else if (arg1 === 's' && (arg2 === 'ddhhmmss' || arg2 === 'ddhhmmssLong')) {
|
|
29
|
+
seconds = Math.floor(value % 60);
|
|
30
|
+
minutes = Math.floor(((value / 60) % 60));
|
|
31
|
+
hours = Math.floor(((value / 60) / 60) % 24);
|
|
32
|
+
days = Math.floor((((value / 60) / 60) / 24));
|
|
33
|
+
return this.format(arg2, seconds, minutes, hours, days);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
format(arg2, seconds, minutes, hours, days) {
|
|
40
|
+
(days < 10) ? days = '0' + days : days;
|
|
41
|
+
(hours < 10) ? hours = '0' + hours : hours;
|
|
42
|
+
(minutes < 10) ? minutes = '0' + minutes : minutes;
|
|
43
|
+
(seconds < 10) ? seconds = '0' + seconds : seconds;
|
|
44
|
+
switch (arg2) {
|
|
45
|
+
case 'hhmmss':
|
|
46
|
+
return `${hours}:${minutes}:${seconds}`;
|
|
47
|
+
case 'ddhhmmss':
|
|
48
|
+
return `${days}d, ${hours}h, ${minutes}m, ${seconds}s`;
|
|
49
|
+
case 'ddhhmmssLong':
|
|
50
|
+
return `${days} days, ${hours} hours, ${minutes} minutes, ${seconds} seconds`;
|
|
51
|
+
}
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DurationFormatPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
55
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.6", ngImport: i0, type: DurationFormatPipe, name: "durationFormat", pure: false }); }
|
|
56
|
+
}
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DurationFormatPipe, decorators: [{
|
|
58
|
+
type: Pipe,
|
|
59
|
+
args: [{
|
|
60
|
+
name: 'durationFormat',
|
|
61
|
+
pure: false
|
|
62
|
+
}]
|
|
63
|
+
}] });
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24tZm9ybWF0LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb21wb25lbnRzL3NyYy9saWIvcGlwZXMvZHVyYXRpb24tZm9ybWF0LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBTXBELE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsU0FBUyxDQUFDLEtBQVUsRUFBRSxJQUFTLEVBQUUsSUFBUztRQUV4QyxJQUFJLElBQVMsQ0FBQztRQUNkLElBQUksT0FBWSxDQUFDO1FBQ2pCLElBQUksT0FBWSxDQUFDO1FBQ2pCLElBQUksS0FBVSxDQUFDO1FBRWYsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMxQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuRCxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFMUQsQ0FBQzthQUFNLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0MsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFMUQsQ0FBQzthQUFNLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksSUFBSSxLQUFLLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDN0UsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDakQsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEQsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxRCxDQUFDO2FBQU0sSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLEtBQUssY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUM1RSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDakMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDN0MsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxRCxDQUFDO2FBQ0ksQ0FBQztZQUNKLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFTyxNQUFNLENBQUMsSUFBWSxFQUFFLE9BQVksRUFBRSxPQUFZLEVBQUUsS0FBVSxFQUFFLElBQVM7UUFDNUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdkMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDM0MsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDbkQsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFFbkQsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssUUFBUTtnQkFDWCxPQUFPLEdBQUcsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUUxQyxLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxHQUFHLElBQUksTUFBTSxLQUFLLE1BQU0sT0FBTyxNQUFNLE9BQU8sR0FBRyxDQUFDO1lBRXpELEtBQUssY0FBYztnQkFDakIsT0FBTyxHQUFHLElBQUksVUFBVSxLQUFLLFdBQVcsT0FBTyxhQUFhLE9BQU8sVUFBVSxDQUFDO1FBQ2xGLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzhHQTFEVSxrQkFBa0I7NEdBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFKOUIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsZ0JBQWdCO29CQUN0QixJQUFJLEVBQUUsS0FBSztpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICBuYW1lOiAnZHVyYXRpb25Gb3JtYXQnLFxuICBwdXJlOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBEdXJhdGlvbkZvcm1hdFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgYXJnMTogYW55LCBhcmcyOiBhbnkpOiBzdHJpbmcge1xuXG4gICAgbGV0IGRheXM6IGFueTtcbiAgICBsZXQgc2Vjb25kczogYW55O1xuICAgIGxldCBtaW51dGVzOiBhbnk7XG4gICAgbGV0IGhvdXJzOiBhbnk7XG5cbiAgICBpZiAoYXJnMSA9PT0gJ21zJyAmJiBhcmcyID09PSAnaGhtbXNzJykge1xuICAgICAgc2Vjb25kcyA9IE1hdGguZmxvb3IoKHZhbHVlIC8gMTAwMCkgJSA2MCk7XG4gICAgICBtaW51dGVzID0gTWF0aC5mbG9vcigoKHZhbHVlIC8gKDEwMDAgKiA2MCkpICUgNjApKTtcbiAgICAgIGhvdXJzID0gTWF0aC5mbG9vcigodmFsdWUgLyAoMTAwMCAqIDYwICogNjApKSk7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXQoYXJnMiwgc2Vjb25kcywgbWludXRlcywgaG91cnMsIGRheXMpO1xuXG4gICAgfSBlbHNlIGlmIChhcmcxID09PSAncycgJiYgYXJnMiA9PT0gJ2hobW1zcycpIHtcbiAgICAgIHNlY29uZHMgPSBNYXRoLmZsb29yKCh2YWx1ZSAlIDYwKSk7XG4gICAgICBtaW51dGVzID0gTWF0aC5mbG9vcigoKHZhbHVlIC8gNjApICUgNjApKTtcbiAgICAgIGhvdXJzID0gTWF0aC5mbG9vcigoKHZhbHVlIC8gNjApIC8gNjApKTtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdChhcmcyLCBzZWNvbmRzLCBtaW51dGVzLCBob3VycywgZGF5cyk7XG5cbiAgICB9IGVsc2UgaWYgKGFyZzEgPT09ICdtcycgJiYgKGFyZzIgPT09ICdkZGhobW1zcycgfHwgYXJnMiA9PT0gJ2RkaGhtbXNzTG9uZycpKSB7XG4gICAgICBzZWNvbmRzID0gTWF0aC5mbG9vcigoKHZhbHVlIC8gMTAwMCkgJSA2MCkpO1xuICAgICAgbWludXRlcyA9IE1hdGguZmxvb3IoKHZhbHVlIC8gKDEwMDAgKiA2MCkgJSA2MCkpO1xuICAgICAgaG91cnMgPSBNYXRoLmZsb29yKCh2YWx1ZSAvICgxMDAwICogNjAgKiA2MCkgJSAyNCkpO1xuICAgICAgZGF5cyA9IE1hdGguZmxvb3IoKHZhbHVlIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKSk7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXQoYXJnMiwgc2Vjb25kcywgbWludXRlcywgaG91cnMsIGRheXMpO1xuXG4gICAgfSBlbHNlIGlmIChhcmcxID09PSAncycgJiYgKGFyZzIgPT09ICdkZGhobW1zcycgfHwgYXJnMiA9PT0gJ2RkaGhtbXNzTG9uZycpKSB7XG4gICAgICBzZWNvbmRzID0gTWF0aC5mbG9vcih2YWx1ZSAlIDYwKTtcbiAgICAgIG1pbnV0ZXMgPSBNYXRoLmZsb29yKCgodmFsdWUgLyA2MCkgJSA2MCkpO1xuICAgICAgaG91cnMgPSBNYXRoLmZsb29yKCgodmFsdWUgLyA2MCkgLyA2MCkgJSAyNCk7XG4gICAgICBkYXlzID0gTWF0aC5mbG9vcigoKCh2YWx1ZSAvIDYwKSAvIDYwKSAvIDI0KSk7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXQoYXJnMiwgc2Vjb25kcywgbWludXRlcywgaG91cnMsIGRheXMpO1xuXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0KGFyZzI6IHN0cmluZywgc2Vjb25kczogYW55LCBtaW51dGVzOiBhbnksIGhvdXJzOiBhbnksIGRheXM6IGFueSk6IGFueSB7XG4gICAgKGRheXMgPCAxMCkgPyBkYXlzID0gJzAnICsgZGF5cyA6IGRheXM7XG4gICAgKGhvdXJzIDwgMTApID8gaG91cnMgPSAnMCcgKyBob3VycyA6IGhvdXJzO1xuICAgIChtaW51dGVzIDwgMTApID8gbWludXRlcyA9ICcwJyArIG1pbnV0ZXMgOiBtaW51dGVzO1xuICAgIChzZWNvbmRzIDwgMTApID8gc2Vjb25kcyA9ICcwJyArIHNlY29uZHMgOiBzZWNvbmRzO1xuXG4gICAgc3dpdGNoIChhcmcyKSB7XG4gICAgICBjYXNlICdoaG1tc3MnOlxuICAgICAgICByZXR1cm4gYCR7aG91cnN9OiR7bWludXRlc306JHtzZWNvbmRzfWA7XG5cbiAgICAgIGNhc2UgJ2RkaGhtbXNzJzpcbiAgICAgICAgcmV0dXJuIGAke2RheXN9ZCwgJHtob3Vyc31oLCAke21pbnV0ZXN9bSwgJHtzZWNvbmRzfXNgO1xuXG4gICAgICBjYXNlICdkZGhobW1zc0xvbmcnOlxuICAgICAgICByZXR1cm4gYCR7ZGF5c30gZGF5cywgJHtob3Vyc30gaG91cnMsICR7bWludXRlc30gbWludXRlcywgJHtzZWNvbmRzfSBzZWNvbmRzYDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class ShortNumberPipe {
|
|
4
|
+
transform(number, args) {
|
|
5
|
+
if (isNaN(number))
|
|
6
|
+
return null; // will only work value is a number
|
|
7
|
+
if (number === null)
|
|
8
|
+
return null;
|
|
9
|
+
if (number === 0)
|
|
10
|
+
return null;
|
|
11
|
+
let abs = Math.abs(number);
|
|
12
|
+
const rounder = Math.pow(10, 1);
|
|
13
|
+
const isNegative = number < 0; // will also work for Negative numbers
|
|
14
|
+
let key = '';
|
|
15
|
+
const powers = [
|
|
16
|
+
{ key: 'Q', value: Math.pow(10, 15) },
|
|
17
|
+
{ key: 'T', value: Math.pow(10, 12) },
|
|
18
|
+
{ key: 'B', value: Math.pow(10, 9) },
|
|
19
|
+
{ key: 'M', value: Math.pow(10, 6) },
|
|
20
|
+
{ key: 'K', value: 1000 }
|
|
21
|
+
];
|
|
22
|
+
for (let i = 0; i < powers.length; i++) {
|
|
23
|
+
let reduced = abs / powers[i].value;
|
|
24
|
+
reduced = Math.round(reduced * rounder) / rounder;
|
|
25
|
+
if (reduced >= 1) {
|
|
26
|
+
abs = reduced;
|
|
27
|
+
key = powers[i].key;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return (isNegative ? '-' : '') + abs + key;
|
|
32
|
+
}
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: ShortNumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
34
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.6", ngImport: i0, type: ShortNumberPipe, name: "shortNumber", pure: false }); }
|
|
35
|
+
}
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: ShortNumberPipe, decorators: [{
|
|
37
|
+
type: Pipe,
|
|
38
|
+
args: [{
|
|
39
|
+
name: 'shortNumber',
|
|
40
|
+
pure: false
|
|
41
|
+
}]
|
|
42
|
+
}] });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnQtbnVtYmVyLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb21wb25lbnRzL3NyYy9saWIvcGlwZXMvc2hvcnQtbnVtYmVyLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBTXBELE1BQU0sT0FBTyxlQUFlO0lBRXhCLFNBQVMsQ0FBQyxNQUFjLEVBQUUsSUFBVTtRQUNoQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLG1DQUFtQztRQUNuRSxJQUFJLE1BQU0sS0FBSyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDakMsSUFBSSxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzlCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLHNDQUFzQztRQUNyRSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFFYixNQUFNLE1BQU0sR0FBRztZQUNYLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUM7WUFDbkMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBQztZQUNuQyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDO1lBQ2xDLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUM7WUFDbEMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUM7U0FDMUIsQ0FBQztRQUVGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckMsSUFBSSxPQUFPLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDcEMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUNsRCxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDZixHQUFHLEdBQUcsT0FBTyxDQUFDO2dCQUNkLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUNwQixNQUFNO1lBQ1YsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDL0MsQ0FBQzs4R0E3QlEsZUFBZTs0R0FBZixlQUFlOzsyRkFBZixlQUFlO2tCQUozQixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxhQUFhO29CQUNuQixJQUFJLEVBQUUsS0FBSztpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdzaG9ydE51bWJlcicsXG4gICAgcHVyZTogZmFsc2VcbiAgfSlcbmV4cG9ydCBjbGFzcyBTaG9ydE51bWJlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHRyYW5zZm9ybShudW1iZXI6IG51bWJlciwgYXJncz86IGFueSk6IGFueSB7XG4gICAgICAgIGlmIChpc05hTihudW1iZXIpKSByZXR1cm4gbnVsbDsgLy8gd2lsbCBvbmx5IHdvcmsgdmFsdWUgaXMgYSBudW1iZXJcbiAgICAgICAgaWYgKG51bWJlciA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHJldHVybiBudWxsO1xuICAgICAgICBsZXQgYWJzID0gTWF0aC5hYnMobnVtYmVyKTtcbiAgICAgICAgY29uc3Qgcm91bmRlciA9IE1hdGgucG93KDEwLCAxKTtcbiAgICAgICAgY29uc3QgaXNOZWdhdGl2ZSA9IG51bWJlciA8IDA7IC8vIHdpbGwgYWxzbyB3b3JrIGZvciBOZWdhdGl2ZSBudW1iZXJzXG4gICAgICAgIGxldCBrZXkgPSAnJztcblxuICAgICAgICBjb25zdCBwb3dlcnMgPSBbXG4gICAgICAgICAgICB7a2V5OiAnUScsIHZhbHVlOiBNYXRoLnBvdygxMCwgMTUpfSxcbiAgICAgICAgICAgIHtrZXk6ICdUJywgdmFsdWU6IE1hdGgucG93KDEwLCAxMil9LFxuICAgICAgICAgICAge2tleTogJ0InLCB2YWx1ZTogTWF0aC5wb3coMTAsIDkpfSxcbiAgICAgICAgICAgIHtrZXk6ICdNJywgdmFsdWU6IE1hdGgucG93KDEwLCA2KX0sXG4gICAgICAgICAgICB7a2V5OiAnSycsIHZhbHVlOiAxMDAwfVxuICAgICAgICBdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG93ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcmVkdWNlZCA9IGFicyAvIHBvd2Vyc1tpXS52YWx1ZTtcbiAgICAgICAgICAgIHJlZHVjZWQgPSBNYXRoLnJvdW5kKHJlZHVjZWQgKiByb3VuZGVyKSAvIHJvdW5kZXI7XG4gICAgICAgICAgICBpZiAocmVkdWNlZCA+PSAxKSB7XG4gICAgICAgICAgICAgICAgYWJzID0gcmVkdWNlZDtcbiAgICAgICAgICAgICAgICBrZXkgPSBwb3dlcnNbaV0ua2V5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoaXNOZWdhdGl2ZSA/ICctJyA6ICcnKSArIGFicyArIGtleTtcbiAgICB9XG59Il19
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
|
+
import { NavigationEnd } from '@angular/router';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { distinctUntilChanged, filter } from 'rxjs/operators';
|
|
5
|
+
import { BreadcrumbItem } from '../controls/breadcrumb/breadcrumb-item';
|
|
6
|
+
import { SHELL_CONFIG } from '../tokens';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/router";
|
|
9
|
+
import * as i2 from "./utilities.service";
|
|
10
|
+
export class BreadcrumbService {
|
|
11
|
+
constructor(_router, _utilities, _shellConfig) {
|
|
12
|
+
this._router = _router;
|
|
13
|
+
this._utilities = _utilities;
|
|
14
|
+
this._shellConfig = _shellConfig;
|
|
15
|
+
this._breadcrumb$ = new Subject();
|
|
16
|
+
this.breadcrumb = this._breadcrumb$.asObservable();
|
|
17
|
+
if (_shellConfig?.breadcrumb) {
|
|
18
|
+
this._defaultHome = this._getDefaultHomeItem();
|
|
19
|
+
this._router
|
|
20
|
+
.events
|
|
21
|
+
.pipe(filter(event => event instanceof NavigationEnd), distinctUntilChanged())
|
|
22
|
+
.subscribe(_ => {
|
|
23
|
+
const breadcrumb = [...this._buildBreadcrumb()];
|
|
24
|
+
this._breadcrumb$.next(breadcrumb);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
_getDefaultHomeItem() {
|
|
29
|
+
const routerConfig = this._router.config;
|
|
30
|
+
const declaredHomeRoutes = routerConfig.filter((route) => route.data?.breadcrumb?.isHome === true);
|
|
31
|
+
if (declaredHomeRoutes.length > 1) {
|
|
32
|
+
throw new Error('You can declare only one route as home.');
|
|
33
|
+
}
|
|
34
|
+
let homeRoute;
|
|
35
|
+
if (declaredHomeRoutes.length === 1) {
|
|
36
|
+
homeRoute = declaredHomeRoutes[0];
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
homeRoute = routerConfig.find((route) => route.path === '');
|
|
40
|
+
if (!homeRoute) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
const redirectionUrl = homeRoute.redirectTo;
|
|
44
|
+
if (!homeRoute?.data?.breadcrumb?.title && redirectionUrl) {
|
|
45
|
+
homeRoute = routerConfig.find((route) => route.path === redirectionUrl);
|
|
46
|
+
if (!homeRoute) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return new BreadcrumbItem(this._getRouteTitle(homeRoute), homeRoute.path || '');
|
|
52
|
+
}
|
|
53
|
+
_getRouteTitle(route) {
|
|
54
|
+
return route?.data?.breadcrumb?.title || route.component?.name.replace('Component', '');
|
|
55
|
+
}
|
|
56
|
+
_buildBreadcrumb() {
|
|
57
|
+
const breadcrumb = [];
|
|
58
|
+
if (this._defaultHome) {
|
|
59
|
+
breadcrumb.push(this._defaultHome);
|
|
60
|
+
}
|
|
61
|
+
const url = this._router.url;
|
|
62
|
+
const path = this._utilities.getPathFromUrl(url) || '';
|
|
63
|
+
const activeRoute = this._findRouteFromUrl(path);
|
|
64
|
+
const parentRoutes = this._findParentRoutes(activeRoute);
|
|
65
|
+
breadcrumb.push(...parentRoutes);
|
|
66
|
+
if (activeRoute && activeRoute?.path !== this._defaultHome?.url) {
|
|
67
|
+
const routeData = this._getBreadcrumbRouteData(activeRoute);
|
|
68
|
+
breadcrumb.push(new BreadcrumbItem(this._getRouteTitle(activeRoute), (routeData._fullPath || activeRoute.path || '')));
|
|
69
|
+
}
|
|
70
|
+
return breadcrumb.map((route) => {
|
|
71
|
+
const routeSegments = route.url?.split('/') || [];
|
|
72
|
+
routeSegments.forEach((segment, index) => {
|
|
73
|
+
if (segment.startsWith(':')) {
|
|
74
|
+
route.url = route.url?.replace(segment, url.split('/')[index + 1]);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
return route;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
_findRouteFromUrl(url) {
|
|
81
|
+
const urlSegments = url.split('/').filter((segment) => segment !== '');
|
|
82
|
+
const routerConfig = this._router.config;
|
|
83
|
+
const flattenedRouterConfig = this._flattenRoutes(routerConfig);
|
|
84
|
+
const filteredRouterConfig = flattenedRouterConfig.filter((route) => {
|
|
85
|
+
const routeData = this._getBreadcrumbRouteData(route);
|
|
86
|
+
return (routeData._fullPath || route.path)?.split('/').length === urlSegments.length;
|
|
87
|
+
});
|
|
88
|
+
const route = filteredRouterConfig.find((route) => {
|
|
89
|
+
const routeData = this._getBreadcrumbRouteData(route);
|
|
90
|
+
const routeSegments = (routeData._fullPath || route.path)?.split('/') || [];
|
|
91
|
+
let segmentsMatched = false;
|
|
92
|
+
for (let i = 0; i < routeSegments.length; i++) {
|
|
93
|
+
const currentSegment = routeSegments[i];
|
|
94
|
+
const isDynamicSegment = currentSegment.startsWith(':');
|
|
95
|
+
if (!isDynamicSegment) {
|
|
96
|
+
segmentsMatched = currentSegment === urlSegments[i];
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return segmentsMatched ? route : undefined;
|
|
100
|
+
});
|
|
101
|
+
return route;
|
|
102
|
+
}
|
|
103
|
+
_findParentRoutes(activeRoute, items = []) {
|
|
104
|
+
if (!activeRoute) {
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
const routeData = this._getBreadcrumbRouteData(activeRoute);
|
|
108
|
+
let urlSegments = (routeData._fullPath || activeRoute.path)?.split('/').filter((segment) => segment !== '') || [];
|
|
109
|
+
if (urlSegments?.length <= 1) {
|
|
110
|
+
return [...items];
|
|
111
|
+
}
|
|
112
|
+
const previousUrl = urlSegments.slice(0, -1).join('/');
|
|
113
|
+
const route = this._findRouteFromUrl(previousUrl);
|
|
114
|
+
if (route) {
|
|
115
|
+
const routeData = this._getBreadcrumbRouteData(route);
|
|
116
|
+
if (routeData._level > 0 || (!route.children || route.children.length === 0)) {
|
|
117
|
+
items.push(new BreadcrumbItem(this._getRouteTitle(route), routeData._fullPath || route.path));
|
|
118
|
+
this._findParentRoutes(route, [...items]);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return [...items];
|
|
122
|
+
}
|
|
123
|
+
_flattenRoutes(routes, level) {
|
|
124
|
+
let children = [];
|
|
125
|
+
level = level || 0;
|
|
126
|
+
return routes.map((route) => {
|
|
127
|
+
const routeData = this._getBreadcrumbRouteData(route);
|
|
128
|
+
routeData._level = level;
|
|
129
|
+
if (route.children && route.children.length) {
|
|
130
|
+
route.children.forEach((child) => {
|
|
131
|
+
const childRouteData = this._getBreadcrumbRouteData(child);
|
|
132
|
+
const routePath = routeData._fullPath || route.path || '';
|
|
133
|
+
const childPath = child.path?.endsWith('/') ? child.path.slice(0, -1) : child.path;
|
|
134
|
+
childRouteData._fullPath = childPath?.indexOf(routePath) === -1 ? `${routePath}/${childPath}` : childPath;
|
|
135
|
+
});
|
|
136
|
+
children = [...children, ...route.children];
|
|
137
|
+
}
|
|
138
|
+
return route;
|
|
139
|
+
}).concat(children.length ? this._flattenRoutes(children, level + 1) : children);
|
|
140
|
+
}
|
|
141
|
+
_getBreadcrumbRouteData(route) {
|
|
142
|
+
if (!route) {
|
|
143
|
+
throw new Error('No route was found');
|
|
144
|
+
}
|
|
145
|
+
if (!route.data?.breadcrumb) {
|
|
146
|
+
if (!route.data) {
|
|
147
|
+
route.data = {};
|
|
148
|
+
}
|
|
149
|
+
route.data.breadcrumb = new BreadcrumbRouteData(0, false, undefined);
|
|
150
|
+
}
|
|
151
|
+
return route.data.breadcrumb;
|
|
152
|
+
}
|
|
153
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: BreadcrumbService, deps: [{ token: i1.Router }, { token: i2.UtilitiesService }, { token: SHELL_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
154
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: BreadcrumbService, providedIn: 'root' }); }
|
|
155
|
+
}
|
|
156
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: BreadcrumbService, decorators: [{
|
|
157
|
+
type: Injectable,
|
|
158
|
+
args: [{
|
|
159
|
+
providedIn: 'root'
|
|
160
|
+
}]
|
|
161
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.UtilitiesService }, { type: undefined, decorators: [{
|
|
162
|
+
type: Optional
|
|
163
|
+
}, {
|
|
164
|
+
type: Inject,
|
|
165
|
+
args: [SHELL_CONFIG]
|
|
166
|
+
}] }] });
|
|
167
|
+
export class BreadcrumbRouteData {
|
|
168
|
+
constructor(_level, isHome, _fullPath) {
|
|
169
|
+
this._level = _level;
|
|
170
|
+
this.isHome = isHome;
|
|
171
|
+
this._fullPath = _fullPath;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2VzL2JyZWFkY3J1bWIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFRLGFBQWEsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUVyRSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQzs7OztBQU16QyxNQUFNLE9BQU8saUJBQWlCO0lBSTFCLFlBQ1ksT0FBZSxFQUNmLFVBQTRCLEVBQ0ssWUFBa0I7UUFGbkQsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQ0ssaUJBQVksR0FBWixZQUFZLENBQU07UUFMdkQsaUJBQVksR0FBOEIsSUFBSSxPQUFPLEVBQW9CLENBQUM7UUFzQjNFLGVBQVUsR0FBaUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQWYvRSxJQUFJLFlBQVksRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxPQUFPO2lCQUNQLE1BQU07aUJBQ04sSUFBSSxDQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsRUFDL0Msb0JBQW9CLEVBQUUsQ0FD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QyxZQUFZOztBQXVKeEMsTUFBTSxPQUFPLG1CQUFtQjtJQUM1QixZQUFtQixNQUFjLEVBQVMsTUFBZSxFQUFTLFNBQThCO1FBQTdFLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFTO1FBQVMsY0FBUyxHQUFULFNBQVMsQ0FBcUI7SUFBSSxDQUFDO0NBQ3hHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YSwgTmF2aWdhdGlvbkVuZCwgUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCcmVhZGNydW1iSXRlbSB9IGZyb20gJy4uL2NvbnRyb2xzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi1pdGVtJztcbmltcG9ydCB7IFNIRUxMX0NPTkZJRyB9IGZyb20gJy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBVdGlsaXRpZXNTZXJ2aWNlIH0gZnJvbSAnLi91dGlsaXRpZXMuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQnJlYWRjcnVtYlNlcnZpY2Uge1xuICAgIHByaXZhdGUgX2RlZmF1bHRIb21lOiBCcmVhZGNydW1iSXRlbSB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIF9icmVhZGNydW1iJDogU3ViamVjdDxCcmVhZGNydW1iSXRlbVtdPiA9IG5ldyBTdWJqZWN0PEJyZWFkY3J1bWJJdGVtW10+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgX3V0aWxpdGllczogVXRpbGl0aWVzU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChTSEVMTF9DT05GSUcpIHB1YmxpYyBfc2hlbGxDb25maWc/OiBhbnlcbiAgICApIHtcbiAgICAgICAgaWYgKF9zaGVsbENvbmZpZz8uYnJlYWRjcnVtYikge1xuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdEhvbWUgPSB0aGlzLl9nZXREZWZhdWx0SG9tZUl0ZW0oKTtcbiAgICAgICAgICAgIHRoaXMuX3JvdXRlclxuICAgICAgICAgICAgICAgIC5ldmVudHNcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IFsuLi50aGlzLl9idWlsZEJyZWFkY3J1bWIoKV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFkY3J1bWIkLm5leHQoYnJlYWRjcnVtYik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYnJlYWRjcnVtYjogT2JzZXJ2YWJsZTxCcmVhZGNydW1iSXRlbVtdPiA9IHRoaXMuX2JyZWFkY3J1bWIkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgcHJpdmF0ZSBfZ2V0RGVmYXVsdEhvbWVJdGVtKCk6IEJyZWFkY3J1bWJJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgcm91dGVyQ29uZmlnID0gdGhpcy5fcm91dGVyLmNvbmZpZztcbiAgICAgICAgY29uc3QgZGVjbGFyZWRIb21lUm91dGVzID0gcm91dGVyQ29uZmlnLmZpbHRlcigocm91dGU6IFJvdXRlKSA9PiByb3V0ZS5kYXRhPy5icmVhZGNydW1iPy5pc0hvbWUgPT09IHRydWUpO1xuICAgICAgICBpZiAoZGVjbGFyZWRIb21lUm91dGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGNhbiBkZWNsYXJlIG9ubHkgb25lIHJvdXRlIGFzIGhvbWUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGhvbWVSb3V0ZTogUm91dGUgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChkZWNsYXJlZEhvbWVSb3V0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBob21lUm91dGUgPSBkZWNsYXJlZEhvbWVSb3V0ZXNbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob21lUm91dGUgPSByb3V0ZXJDb25maWcuZmluZCgocm91dGU6IFJvdXRlKSA9PiByb3V0ZS5wYXRoID09PSAnJyk7XG4gICAgICAgICAgICBpZiAoIWhvbWVSb3V0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZWRpcmVjdGlvblVybCA9IGhvbWVSb3V0ZS5yZWRpcmVjdFRvO1xuICAgICAgICAgICAgaWYgKCFob21lUm91dGU/LmRhdGE/LmJyZWFkY3J1bWI/LnRpdGxlICYmIHJlZGlyZWN0aW9uVXJsKSB7XG4gICAgICAgICAgICAgICAgaG9tZVJvdXRlID0gcm91dGVyQ29uZmlnLmZpbmQoKHJvdXRlOiBSb3V0ZSkgPT4gcm91dGUucGF0aCA9PT0gcmVkaXJlY3Rpb25VcmwpO1xuICAgICAgICAgICAgICAgIGlmICghaG9tZVJvdXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQnJlYWRjcnVtYkl0ZW0odGhpcy5fZ2V0Um91dGVUaXRsZShob21lUm91dGUpLCBob21lUm91dGUucGF0aCB8fCAnJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0Um91dGVUaXRsZShyb3V0ZTogUm91dGUpIHtcbiAgICAgICAgcmV0dXJuIHJvdXRlPy5kYXRhPy5icmVhZGNydW1iPy50aXRsZSB8fCByb3V0ZS5jb21wb25lbnQ/Lm5hbWUucmVwbGFjZSgnQ29tcG9uZW50JywgJycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2J1aWxkQnJlYWRjcnVtYigpOiBCcmVhZGNydW1iSXRlbVtdIHtcbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYjogQnJlYWRjcnVtYkl0ZW1bXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5fZGVmYXVsdEhvbWUpIHtcbiAgICAgICAgICAgIGJyZWFkY3J1bWIucHVzaCh0aGlzLl9kZWZhdWx0SG9tZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5fcm91dGVyLnVybDtcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuX3V0aWxpdGllcy5nZXRQYXRoRnJvbVVybCh1cmwpIHx8ICcnO1xuICAgICAgICBjb25zdCBhY3RpdmVSb3V0ZSA9IHRoaXMuX2ZpbmRSb3V0ZUZyb21VcmwocGF0aCk7XG4gICAgICAgIGNvbnN0IHBhcmVudFJvdXRlcyA9IHRoaXMuX2ZpbmRQYXJlbnRSb3V0ZXMoYWN0aXZlUm91dGUpO1xuICAgICAgICBicmVhZGNydW1iLnB1c2goLi4ucGFyZW50Um91dGVzKTtcbiAgICAgICAgaWYgKGFjdGl2ZVJvdXRlICYmIGFjdGl2ZVJvdXRlPy5wYXRoICE9PSB0aGlzLl9kZWZhdWx0SG9tZT8udXJsKSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZURhdGEgPSB0aGlzLl9nZXRCcmVhZGNydW1iUm91dGVEYXRhKGFjdGl2ZVJvdXRlKTtcbiAgICAgICAgICAgIGJyZWFkY3J1bWIucHVzaChuZXcgQnJlYWRjcnVtYkl0ZW0odGhpcy5fZ2V0Um91dGVUaXRsZShhY3RpdmVSb3V0ZSksIChyb3V0ZURhdGEuX2Z1bGxQYXRoIHx8IGFjdGl2ZVJvdXRlLnBhdGggfHwgJycpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJyZWFkY3J1bWIubWFwKChyb3V0ZTogQnJlYWRjcnVtYkl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlU2VnbWVudHMgPSByb3V0ZS51cmw/LnNwbGl0KCcvJykgfHwgW107XG4gICAgICAgICAgICByb3V0ZVNlZ21lbnRzLmZvckVhY2goKHNlZ21lbnQ6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZWdtZW50LnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICAgICAgICAgICAgICByb3V0ZS51cmwgPSByb3V0ZS51cmw/LnJlcGxhY2Uoc2VnbWVudCwgdXJsLnNwbGl0KCcvJylbaW5kZXggKyAxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcm91dGU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ZpbmRSb3V0ZUZyb21VcmwodXJsOiBzdHJpbmcpOiBSb3V0ZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHVybFNlZ21lbnRzID0gdXJsLnNwbGl0KCcvJykuZmlsdGVyKChzZWdtZW50OiBzdHJpbmcpID0+IHNlZ21lbnQgIT09ICcnKTtcbiAgICAgICAgY29uc3Qgcm91dGVyQ29uZmlnID0gdGhpcy5fcm91dGVyLmNvbmZpZztcbiAgICAgICAgY29uc3QgZmxhdHRlbmVkUm91dGVyQ29uZmlnID0gdGhpcy5fZmxhdHRlblJvdXRlcyhyb3V0ZXJDb25maWcpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZFJvdXRlckNvbmZpZyA9IGZsYXR0ZW5lZFJvdXRlckNvbmZpZy5maWx0ZXIoKHJvdXRlOiBSb3V0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVEYXRhID0gdGhpcy5fZ2V0QnJlYWRjcnVtYlJvdXRlRGF0YShyb3V0ZSk7XG4gICAgICAgICAgICByZXR1cm4gKHJvdXRlRGF0YS5fZnVsbFBhdGggfHwgcm91dGUucGF0aCk/LnNwbGl0KCcvJykubGVuZ3RoID09PSB1cmxTZWdtZW50cy5sZW5ndGg7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByb3V0ZSA9IGZpbHRlcmVkUm91dGVyQ29uZmlnLmZpbmQoKHJvdXRlOiBSb3V0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVEYXRhID0gdGhpcy5fZ2V0QnJlYWRjcnVtYlJvdXRlRGF0YShyb3V0ZSk7XG4gICAgICAgICAgICBjb25zdCByb3V0ZVNlZ21lbnRzID0gKHJvdXRlRGF0YS5fZnVsbFBhdGggfHwgcm91dGUucGF0aCk/LnNwbGl0KCcvJykgfHwgW107XG4gICAgICAgICAgICBsZXQgc2VnbWVudHNNYXRjaGVkID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdXRlU2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VnbWVudCA9IHJvdXRlU2VnbWVudHNbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgaXNEeW5hbWljU2VnbWVudCA9IGN1cnJlbnRTZWdtZW50LnN0YXJ0c1dpdGgoJzonKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRHluYW1pY1NlZ21lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudHNNYXRjaGVkID0gY3VycmVudFNlZ21lbnQgPT09IHVybFNlZ21lbnRzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZWdtZW50c01hdGNoZWQgPyByb3V0ZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByb3V0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9maW5kUGFyZW50Um91dGVzKGFjdGl2ZVJvdXRlOiBSb3V0ZSB8IHVuZGVmaW5lZCwgaXRlbXM6IEJyZWFkY3J1bWJJdGVtW10gPSBbXSk6IEJyZWFkY3J1bWJJdGVtW10ge1xuICAgICAgICBpZiAoIWFjdGl2ZVJvdXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm91dGVEYXRhID0gdGhpcy5fZ2V0QnJlYWRjcnVtYlJvdXRlRGF0YShhY3RpdmVSb3V0ZSk7XG4gICAgICAgIGxldCB1cmxTZWdtZW50cyA9IChyb3V0ZURhdGEuX2Z1bGxQYXRoIHx8IGFjdGl2ZVJvdXRlLnBhdGgpPy5zcGxpdCgnLycpLmZpbHRlcigoc2VnbWVudDogc3RyaW5nKSA9PiBzZWdtZW50ICE9PSAnJykgfHwgW107XG4gICAgICAgIGlmICh1cmxTZWdtZW50cz8ubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uaXRlbXNdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVXJsID0gdXJsU2VnbWVudHMuc2xpY2UoMCwgLTEpLmpvaW4oJy8nKTtcbiAgICAgICAgY29uc3Qgcm91dGUgPSB0aGlzLl9maW5kUm91dGVGcm9tVXJsKHByZXZpb3VzVXJsKTtcbiAgICAgICAgaWYgKHJvdXRlKSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZURhdGEgPSB0aGlzLl9nZXRCcmVhZGNydW1iUm91dGVEYXRhKHJvdXRlKTtcbiAgICAgICAgICAgIGlmIChyb3V0ZURhdGEuX2xldmVsID4gMCB8fCAoIXJvdXRlLmNoaWxkcmVuIHx8IHJvdXRlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKG5ldyBCcmVhZGNydW1iSXRlbSh0aGlzLl9nZXRSb3V0ZVRpdGxlKHJvdXRlKSwgcm91dGVEYXRhLl9mdWxsUGF0aCB8fCByb3V0ZS5wYXRoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluZFBhcmVudFJvdXRlcyhyb3V0ZSwgWy4uLml0ZW1zXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5pdGVtc107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmxhdHRlblJvdXRlcyhyb3V0ZXM6IFJvdXRlW10sIGxldmVsPzogbnVtYmVyKTogUm91dGVbXSB7XG4gICAgICAgIGxldCBjaGlsZHJlbjogUm91dGVbXSA9IFtdO1xuICAgICAgICBsZXZlbCA9IGxldmVsIHx8IDA7XG4gICAgICAgIHJldHVybiByb3V0ZXMubWFwKChyb3V0ZTogUm91dGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlRGF0YSA9IHRoaXMuX2dldEJyZWFkY3J1bWJSb3V0ZURhdGEocm91dGUpO1xuICAgICAgICAgICAgcm91dGVEYXRhLl9sZXZlbCA9IGxldmVsITtcbiAgICAgICAgICAgIGlmIChyb3V0ZS5jaGlsZHJlbiAmJiByb3V0ZS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByb3V0ZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogUm91dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRSb3V0ZURhdGEgPSB0aGlzLl9nZXRCcmVhZGNydW1iUm91dGVEYXRhKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm91dGVQYXRoID0gcm91dGVEYXRhLl9mdWxsUGF0aCB8fCByb3V0ZS5wYXRoIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFBhdGggPSBjaGlsZC5wYXRoPy5lbmRzV2l0aCgnLycpID8gY2hpbGQucGF0aC5zbGljZSgwLCAtMSkgOiBjaGlsZC5wYXRoO1xuICAgICAgICAgICAgICAgICAgICBjaGlsZFJvdXRlRGF0YS5fZnVsbFBhdGggPSBjaGlsZFBhdGg/LmluZGV4T2Yocm91dGVQYXRoKSA9PT0gLTEgPyBgJHtyb3V0ZVBhdGh9LyR7Y2hpbGRQYXRofWAgOiBjaGlsZFBhdGg7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBbLi4uY2hpbGRyZW4sIC4uLnJvdXRlLmNoaWxkcmVuXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByb3V0ZTtcbiAgICAgICAgfSkuY29uY2F0KGNoaWxkcmVuLmxlbmd0aCA/IHRoaXMuX2ZsYXR0ZW5Sb3V0ZXMoY2hpbGRyZW4sIGxldmVsICsgMSkgOiBjaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0QnJlYWRjcnVtYlJvdXRlRGF0YShyb3V0ZTogUm91dGUgfCB1bmRlZmluZWQpOiBCcmVhZGNydW1iUm91dGVEYXRhIHtcbiAgICAgICAgaWYgKCFyb3V0ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByb3V0ZSB3YXMgZm91bmQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJvdXRlLmRhdGE/LmJyZWFkY3J1bWIpIHtcbiAgICAgICAgICAgIGlmICghcm91dGUuZGF0YSkge1xuICAgICAgICAgICAgICAgIHJvdXRlLmRhdGEgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdXRlLmRhdGEuYnJlYWRjcnVtYiA9IG5ldyBCcmVhZGNydW1iUm91dGVEYXRhKDAsIGZhbHNlLCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3V0ZS5kYXRhLmJyZWFkY3J1bWI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQnJlYWRjcnVtYlJvdXRlRGF0YSB7XG4gICAgY29uc3RydWN0b3IocHVibGljIF9sZXZlbDogbnVtYmVyLCBwdWJsaWMgaXNIb21lOiBib29sZWFuLCBwdWJsaWMgX2Z1bGxQYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkKSB7IH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options passed to {@link ComponentLoader.show}.
|
|
3
|
+
*
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export class ComponentLoaderOptions {
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWxvYWRlci1vcHRpb25zLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2VzL2NvbXBvbmVudC1sb2FkZXIvY29tcG9uZW50LWxvYWRlci1vcHRpb25zLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO0NBdUJsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogT3B0aW9ucyBwYXNzZWQgdG8ge0BsaW5rIENvbXBvbmVudExvYWRlci5zaG93fS5cbiAqIFxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRMb2FkZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHRvIGJlIGRyYXduIGluc2lkZSBgPG5nLWNvbnRlbnQ+YCBvZiBgQ29tcG9uZW50TG9hZGVyYCBhdHRhY2hlZCBjb21wb25lbnQuXG5cdCAqIEByZW1hcmtzXG5cdCAqIGBjb250ZW50YCBjYW4gYmUgYENvbXBvbmVudGAgLCBgVGVtcGxhdGVSZWZgIG9yIGBTdHJpbmdgLlxuICAgKi9cbiAgY29udGVudD86IHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICAvKipcbiAgICogVGhlIGRhdGEgdG8gYmUgcGFzc2VkIHRvIHZpZXcgZm9yIGBUZW1wbGF0ZVJlZmAgY2FzZS5cbiAgICovXG4gIGNvbnRleHQ/OiB1bmtub3duO1xuICAvKipcbiAgICogSW5pdGlhbCBkYXRhIHRvIGJlIHBhc3NlZCB0byBgY29udGVudGAgZm9yIGBDb21wb25lbnRgIGNhc2UuXG4gICAqL1xuICBpbml0aWFsU3RhdGU/OiB1bmtub3duO1xuICAvKipcbiAgICogT3RoZXIgcHJvcGVydGllcyBwYXNzZWQgdG8gYXR0YWNoZWQgY29tcG9uZW50LlxuICAgKi9cbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgLyoqXG4gICAqIGlkYCAtIFRoZSBpZCBvZiB0aGUgYXR0YWNoZWQgY29tcG9uZW50IHJlZi5cbiAgICovXG4gIGlkPzogbnVtYmVyIHwgc3RyaW5nO1xufVxuIl19
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { ElementRef, TemplateRef, Injector, } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { ContentRef } from './content-ref.class';
|
|
4
|
+
/**
|
|
5
|
+
* Provides ways of loading and handling dynamic content.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* Do NOT use this directly, create an instance through {@link ComponentLoaderFactory}
|
|
9
|
+
* You can use this loader in two ways:
|
|
10
|
+
* - Attaches a component to `ViewContainerRef`.
|
|
11
|
+
* - Attaches a component to `ViewContainerRef`. The attached component has a `<ng-content>` tag inside its view. The {@link ComponentLoaderOptions.content} will be drawn inside this tag.
|
|
12
|
+
*
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export class ComponentLoader {
|
|
16
|
+
constructor(vcr, cfr, applicationRef, injector) {
|
|
17
|
+
this.vcr = vcr;
|
|
18
|
+
this.cfr = cfr;
|
|
19
|
+
this.applicationRef = applicationRef;
|
|
20
|
+
this.injector = injector;
|
|
21
|
+
/**
|
|
22
|
+
* Before content is shown event.
|
|
23
|
+
*/
|
|
24
|
+
this.onBeforeShow = new Subject();
|
|
25
|
+
/**
|
|
26
|
+
* After show content event.
|
|
27
|
+
* @returns The id of newly created component ref.
|
|
28
|
+
*/
|
|
29
|
+
this.onShown = new Subject();
|
|
30
|
+
/**
|
|
31
|
+
* Before content is hidden event.
|
|
32
|
+
* @returns The instance of attached component;
|
|
33
|
+
*/
|
|
34
|
+
this.onBeforeHide = new Subject();
|
|
35
|
+
/**
|
|
36
|
+
* After content is hidden event.
|
|
37
|
+
* @returns The id of destroyed component ref.
|
|
38
|
+
*/
|
|
39
|
+
this.onHidden = new Subject();
|
|
40
|
+
this.providers = [];
|
|
41
|
+
this.containerDefaultSelector = 'body';
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Attaches component.
|
|
45
|
+
* @param componentType - The type component to attach.
|
|
46
|
+
* @returns Current instance of {@link ComponentLoader}
|
|
47
|
+
*/
|
|
48
|
+
attach(componentType) {
|
|
49
|
+
this.componentFactory = this.cfr.resolveComponentFactory(componentType);
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Body will be used in nothing is provided.
|
|
54
|
+
* @param container - The element in which dynamic content will be drawn inside to. For string case a query to the dom will be executed to find the element.
|
|
55
|
+
* @returns Current instance of {@link ComponentLoader}
|
|
56
|
+
*/
|
|
57
|
+
to(container) {
|
|
58
|
+
this.container = container || this.container;
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Adds provider to the providers array. These providers will be injected to the attached component.
|
|
63
|
+
*
|
|
64
|
+
* @see {@link https://angular.io/guide/glossary#di-token | Injection Token}
|
|
65
|
+
*
|
|
66
|
+
* @param provider - Provider to inject.
|
|
67
|
+
* @returns Current instance of {@link ComponentLoader}
|
|
68
|
+
*/
|
|
69
|
+
provide(provider) {
|
|
70
|
+
this.providers.push(provider);
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Attaches attached component to dom and any dynamic content if provided.
|
|
75
|
+
* @remarks
|
|
76
|
+
* Also triggers the {@link ComponentLoader.onBeforeShow} and {@link ComponentLoader.onShown} events.
|
|
77
|
+
*
|
|
78
|
+
* @param options - {@link ComponentLoaderOptions}.
|
|
79
|
+
* @returns A reference to the created content.
|
|
80
|
+
*/
|
|
81
|
+
show(options = {}) {
|
|
82
|
+
if (this.componentRef) {
|
|
83
|
+
throw Error('Component is already shown');
|
|
84
|
+
}
|
|
85
|
+
if (!this.componentFactory) {
|
|
86
|
+
throw Error('You must attach a component');
|
|
87
|
+
}
|
|
88
|
+
this.onBeforeShow.next({});
|
|
89
|
+
if (options.content) {
|
|
90
|
+
this.contentRef = this.getContentRef(options.content, options.context, options.initialState);
|
|
91
|
+
}
|
|
92
|
+
this.createComponentAndAttachToView(options);
|
|
93
|
+
this.appendContentToContainer();
|
|
94
|
+
this.markComponentsForCheck();
|
|
95
|
+
this.onShown.next(options.id);
|
|
96
|
+
return this.componentRef;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Removes attached component from dom.
|
|
100
|
+
* @remarks
|
|
101
|
+
* Also triggers the {@link ComponentLoader.onBeforeHide} and {@link ComponentLoader.onHidden} events.
|
|
102
|
+
*
|
|
103
|
+
* @param id - If provided it is returned through the {@link ComponentLoader.onHidden}.
|
|
104
|
+
* @returns Current instance of {@link ComponentLoader}
|
|
105
|
+
*/
|
|
106
|
+
hide(id, result) {
|
|
107
|
+
if (!this.componentRef) {
|
|
108
|
+
throw Error('No attached component found to hide');
|
|
109
|
+
}
|
|
110
|
+
this.onBeforeHide.next(this.componentRef.instance);
|
|
111
|
+
const componentEl = this.componentRef.location.nativeElement;
|
|
112
|
+
componentEl.parentNode.removeChild(componentEl);
|
|
113
|
+
if (this.contentRef?.componentRef) {
|
|
114
|
+
this.contentRef.componentRef.destroy();
|
|
115
|
+
}
|
|
116
|
+
if (this.vcr && this.contentRef?.viewRef) {
|
|
117
|
+
this.vcr.remove(this.vcr.indexOf(this.contentRef.viewRef));
|
|
118
|
+
}
|
|
119
|
+
if (this.contentRef?.viewRef) {
|
|
120
|
+
this.contentRef.viewRef.destroy();
|
|
121
|
+
}
|
|
122
|
+
this.contentRef = void 0;
|
|
123
|
+
this.componentRef = void 0;
|
|
124
|
+
this.onHidden.next(id ? { id, result } : null);
|
|
125
|
+
return this;
|
|
126
|
+
}
|
|
127
|
+
getInnerComponent() {
|
|
128
|
+
return this.innerComponent;
|
|
129
|
+
}
|
|
130
|
+
markComponentsForCheck() {
|
|
131
|
+
if (this.contentRef?.componentRef) {
|
|
132
|
+
this.innerComponent = this.contentRef.componentRef.instance;
|
|
133
|
+
this.contentRef.componentRef.changeDetectorRef.markForCheck();
|
|
134
|
+
this.contentRef.componentRef.changeDetectorRef.detectChanges();
|
|
135
|
+
}
|
|
136
|
+
this.componentRef.changeDetectorRef.markForCheck();
|
|
137
|
+
this.componentRef.changeDetectorRef.detectChanges();
|
|
138
|
+
}
|
|
139
|
+
createComponentAndAttachToView(options) {
|
|
140
|
+
const injector = Injector.create({
|
|
141
|
+
providers: this.providers,
|
|
142
|
+
parent: this.injector,
|
|
143
|
+
});
|
|
144
|
+
this.componentRef = this.componentFactory.create(injector, this.contentRef?.nodes);
|
|
145
|
+
this.applicationRef.attachView(this.componentRef.hostView);
|
|
146
|
+
this.instance = this.componentRef.instance;
|
|
147
|
+
Object.assign(this.componentRef.instance, options);
|
|
148
|
+
}
|
|
149
|
+
appendContentToContainer() {
|
|
150
|
+
if (this.container instanceof ElementRef) {
|
|
151
|
+
this.container.nativeElement.appendChild(this.componentRef?.location.nativeElement);
|
|
152
|
+
}
|
|
153
|
+
if (typeof this.container === 'string' && typeof document !== 'undefined') {
|
|
154
|
+
const selectedElement = document.querySelector(this.container) || document.querySelector(this.containerDefaultSelector);
|
|
155
|
+
if (!selectedElement) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
selectedElement.appendChild(this.componentRef?.location.nativeElement);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
getContentRef(content, context, initialState) {
|
|
162
|
+
//TemplateRef case
|
|
163
|
+
if (content instanceof TemplateRef) {
|
|
164
|
+
if (this.vcr) {
|
|
165
|
+
const viewRef = this.vcr.createEmbeddedView(content, context);
|
|
166
|
+
viewRef.markForCheck();
|
|
167
|
+
return new ContentRef([viewRef.rootNodes], viewRef);
|
|
168
|
+
}
|
|
169
|
+
const viewRef = content.createEmbeddedView({});
|
|
170
|
+
this.applicationRef.attachView(viewRef);
|
|
171
|
+
return new ContentRef([viewRef.rootNodes], viewRef);
|
|
172
|
+
}
|
|
173
|
+
//Component case
|
|
174
|
+
if (typeof content === 'function') {
|
|
175
|
+
const contentCf = this.cfr.resolveComponentFactory(content);
|
|
176
|
+
const injector = Injector.create({
|
|
177
|
+
providers: this.providers,
|
|
178
|
+
parent: this.injector,
|
|
179
|
+
});
|
|
180
|
+
const componentRef = contentCf.create(injector);
|
|
181
|
+
// Object.assign(componentRef.instance, initialState);
|
|
182
|
+
this.applicationRef.attachView(componentRef.hostView);
|
|
183
|
+
return new ContentRef([[componentRef.location.nativeElement]], componentRef.hostView, componentRef);
|
|
184
|
+
}
|
|
185
|
+
throw Error('Unsupported content type');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWxvYWRlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9zZXJ2aWNlcy9jb21wb25lbnQtbG9hZGVyL2NvbXBvbmVudC1sb2FkZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUtMLFVBQVUsRUFFVixXQUFXLEVBR1gsUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQTZCMUIsWUFDVSxHQUFpQyxFQUNqQyxHQUE2QixFQUM3QixjQUE4QixFQUM5QixRQUFrQjtRQUhsQixRQUFHLEdBQUgsR0FBRyxDQUE4QjtRQUNqQyxRQUFHLEdBQUgsR0FBRyxDQUEwQjtRQUM3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQWhDNUI7O1dBRUc7UUFDSCxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0I7OztXQUdHO1FBQ0gsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDeEI7OztXQUdHO1FBQ0gsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCOzs7V0FHRztRQUNILGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBTWpCLGNBQVMsR0FBcUIsRUFBRSxDQUFDO1FBRWpDLDZCQUF3QixHQUFHLE1BQU0sQ0FBQztJQU92QyxDQUFDO0lBRUo7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxhQUFzQjtRQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FB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QyxFQUFFLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxnQkFBZ0I7UUFDaEIsSUFBSSxPQUFPLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQy9CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3RCLENBQUMsQ0FBQztZQUNILE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsc0RBQXNEO1lBQ3RELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RCxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN0RyxDQUFDO1FBRUQsTUFBTSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIFR5cGUsXG4gIEVsZW1lbnRSZWYsXG4gIFN0YXRpY1Byb3ZpZGVyLFxuICBUZW1wbGF0ZVJlZixcbiAgQ29tcG9uZW50UmVmLFxuICBBcHBsaWNhdGlvblJlZixcbiAgSW5qZWN0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tcG9uZW50TG9hZGVyT3B0aW9ucyB9IGZyb20gJy4vY29tcG9uZW50LWxvYWRlci1vcHRpb25zLmNsYXNzJztcbmltcG9ydCB7IENvbnRlbnRSZWYgfSBmcm9tICcuL2NvbnRlbnQtcmVmLmNsYXNzJztcblxuLyoqXG4gKiBQcm92aWRlcyB3YXlzIG9mIGxvYWRpbmcgYW5kIGhhbmRsaW5nIGR5bmFtaWMgY29udGVudC5cbiAqXG4gKiBAcmVtYXJrc1xuICogRG8gTk9UIHVzZSB0aGlzIGRpcmVjdGx5LCBjcmVhdGUgYW4gaW5zdGFuY2UgdGhyb3VnaCB7QGxpbmsgQ29tcG9uZW50TG9hZGVyRmFjdG9yeX1cbiAqIFlvdSBjYW4gdXNlIHRoaXMgbG9hZGVyIGluIHR3byB3YXlzOlxuICogLSBBdHRhY2hlcyBhIGNvbXBvbmVudCB0byBgVmlld0NvbnRhaW5lclJlZmAuXG4gKiAtIEF0dGFjaGVzIGEgY29tcG9uZW50IHRvIGBWaWV3Q29udGFpbmVyUmVmYC4gVGhlIGF0dGFjaGVkIGNvbXBvbmVudCBoYXMgYSBgPG5nLWNvbnRlbnQ+YCB0YWcgaW5zaWRlIGl0cyB2aWV3LiBUaGUge0BsaW5rIENvbXBvbmVudExvYWRlck9wdGlvbnMuY29udGVudH0gd2lsbCBiZSBkcmF3biBpbnNpZGUgdGhpcyB0YWcuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRMb2FkZXI8VCBleHRlbmRzIG9iamVjdD4ge1xuICAvKipcbiAgICogQmVmb3JlIGNvbnRlbnQgaXMgc2hvd24gZXZlbnQuXG4gICAqL1xuICBvbkJlZm9yZVNob3cgPSBuZXcgU3ViamVjdCgpO1xuICAvKipcbiAgICogQWZ0ZXIgc2hvdyBjb250ZW50IGV2ZW50LlxuICAgKiBAcmV0dXJucyBUaGUgaWQgb2YgbmV3bHkgY3JlYXRlZCBjb21wb25lbnQgcmVmLlxuICAgKi9cbiAgb25TaG93biA9IG5ldyBTdWJqZWN0KCk7XG4gIC8qKlxuICAgKiBCZWZvcmUgY29udGVudCBpcyBoaWRkZW4gZXZlbnQuXG4gICAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBvZiBhdHRhY2hlZCBjb21wb25lbnQ7XG4gICAqL1xuICBvbkJlZm9yZUhpZGUgPSBuZXcgU3ViamVjdCgpO1xuICAvKipcbiAgICogQWZ0ZXIgY29udGVudCBpcyBoaWRkZW4gZXZlbnQuXG4gICAqIEByZXR1cm5zIFRoZSBpZCBvZiBkZXN0cm95ZWQgY29tcG9uZW50IHJlZi5cbiAgICovXG4gIG9uSGlkZGVuID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgaW5zdGFuY2U/OiBUO1xuICBwdWJsaWMgY29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPFQ+O1xuICBwcml2YXRlIGNvbXBvbmVudEZhY3Rvcnk/OiBDb21wb25lbnRGYWN0b3J5PFQ+O1xuICBwcml2YXRlIGNvbnRhaW5lcjogc3RyaW5nIHwgRWxlbWVudFJlZiB8IGFueTtcbiAgcHJpdmF0ZSBwcm92aWRlcnM6IFN0YXRpY1Byb3ZpZGVyW10gPSBbXTtcbiAgcHJpdmF0ZSBjb250ZW50UmVmPzogQ29udGVudFJlZjtcbiAgcHJpdmF0ZSBjb250YWluZXJEZWZhdWx0U2VsZWN0b3IgPSAnYm9keSc7XG4gIHByaXZhdGUgaW5uZXJDb21wb25lbnQ/OiBDb21wb25lbnRSZWY8VD47XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdmNyOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkLFxuICAgIHByaXZhdGUgY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBBdHRhY2hlcyBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBjb21wb25lbnRUeXBlIC0gVGhlIHR5cGUgY29tcG9uZW50IHRvIGF0dGFjaC5cbiAgICogQHJldHVybnMgQ3VycmVudCBpbnN0YW5jZSBvZiB7QGxpbmsgQ29tcG9uZW50TG9hZGVyfVxuICAgKi9cbiAgcHVibGljIGF0dGFjaChjb21wb25lbnRUeXBlOiBUeXBlPFQ+KTogQ29tcG9uZW50TG9hZGVyPFQ+IHtcbiAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeTxUPihjb21wb25lbnRUeXBlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBCb2R5IHdpbGwgYmUgdXNlZCBpbiBub3RoaW5nIGlzIHByb3ZpZGVkLlxuICAgKiBAcGFyYW0gY29udGFpbmVyIC0gVGhlIGVsZW1lbnQgaW4gd2hpY2ggZHluYW1pYyBjb250ZW50IHdpbGwgYmUgZHJhd24gaW5zaWRlIHRvLiBGb3Igc3RyaW5nIGNhc2UgYSBxdWVyeSB0byB0aGUgZG9tIHdpbGwgYmUgZXhlY3V0ZWQgdG8gZmluZCB0aGUgZWxlbWVudC5cbiAgICogQHJldHVybnMgQ3VycmVudCBpbnN0YW5jZSBvZiB7QGxpbmsgQ29tcG9uZW50TG9hZGVyfVxuICAgKi9cbiAgcHVibGljIHRvKGNvbnRhaW5lcj86IHN0cmluZyB8IEVsZW1lbnRSZWYpOiBDb21wb25lbnRMb2FkZXI8VD4ge1xuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyIHx8IHRoaXMuY29udGFpbmVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcHJvdmlkZXIgdG8gdGhlIHByb3ZpZGVycyBhcnJheS4gVGhlc2UgcHJvdmlkZXJzIHdpbGwgYmUgaW5qZWN0ZWQgdG8gdGhlIGF0dGFjaGVkIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL2dsb3NzYXJ5I2RpLXRva2VuIHwgSW5qZWN0aW9uIFRva2VufVxuICAgKlxuICAgKiBAcGFyYW0gcHJvdmlkZXIgLSBQcm92aWRlciB0byBpbmplY3QuXG4gICAqIEByZXR1cm5zIEN1cnJlbnQgaW5zdGFuY2Ugb2Yge0BsaW5rIENvbXBvbmVudExvYWRlcn1cbiAgICovXG4gIHB1YmxpYyBwcm92aWRlKHByb3ZpZGVyOiBTdGF0aWNQcm92aWRlcik6IENvbXBvbmVudExvYWRlcjxUPiB7XG4gICAgdGhpcy5wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoZXMgYXR0YWNoZWQgY29tcG9uZW50IHRvIGRvbSBhbmQgYW55IGR5bmFtaWMgY29udGVudCBpZiBwcm92aWRlZC5cbiAgICogQHJlbWFya3NcbiAgICogQWxzbyB0cmlnZ2VycyB0aGUge0BsaW5rIENvbXBvbmVudExvYWRlci5vbkJlZm9yZVNob3d9IGFuZCB7QGxpbmsgQ29tcG9uZW50TG9hZGVyLm9uU2hvd259IGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSB7QGxpbmsgQ29tcG9uZW50TG9hZGVyT3B0aW9uc30uXG4gICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBjcmVhdGVkIGNvbnRlbnQuXG4gICAqL1xuICBwdWJsaWMgc2hvdyhvcHRpb25zOiBDb21wb25lbnRMb2FkZXJPcHRpb25zID0ge30pOiBDb21wb25lbnRSZWY8VD4gfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NvbXBvbmVudCBpcyBhbHJlYWR5IHNob3duJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5jb21wb25lbnRGYWN0b3J5KSB7XG4gICAgICB0aHJvdyBFcnJvcignWW91IG11c3QgYXR0YWNoIGEgY29tcG9uZW50Jyk7XG4gICAgfVxuICAgIHRoaXMub25CZWZvcmVTaG93Lm5leHQoe30pO1xuXG4gICAgaWYgKG9wdGlvbnMuY29udGVudCkge1xuICAgICAgdGhpcy5jb250ZW50UmVmID0gdGhpcy5nZXRDb250ZW50UmVmKG9wdGlvbnMuY29udGVudCwgb3B0aW9ucy5jb250ZXh0LCBvcHRpb25zLmluaXRpYWxTdGF0ZSk7XG4gICAgfVxuICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50QW5kQXR0YWNoVG9WaWV3KG9wdGlvbnMpO1xuICAgIHRoaXMuYXBwZW5kQ29udGVudFRvQ29udGFpbmVyKCk7XG4gICAgdGhpcy5tYXJrQ29tcG9uZW50c0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLm9uU2hvd24ubmV4dChvcHRpb25zLmlkKTtcblxuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGF0dGFjaGVkIGNvbXBvbmVudCBmcm9tIGRvbS5cbiAgICogQHJlbWFya3NcbiAgICogQWxzbyB0cmlnZ2VycyB0aGUge0BsaW5rIENvbXBvbmVudExvYWRlci5vbkJlZm9yZUhpZGV9IGFuZCB7QGxpbmsgQ29tcG9uZW50TG9hZGVyLm9uSGlkZGVufSBldmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIElmIHByb3ZpZGVkIGl0IGlzIHJldHVybmVkIHRocm91Z2ggdGhlIHtAbGluayBDb21wb25lbnRMb2FkZXIub25IaWRkZW59LlxuICAgKiBAcmV0dXJucyBDdXJyZW50IGluc3RhbmNlIG9mIHtAbGluayBDb21wb25lbnRMb2FkZXJ9XG4gICAqL1xuICBwdWJsaWMgaGlkZShpZD86IG51bWJlciB8IHN0cmluZywgcmVzdWx0PzogYW55KTogQ29tcG9uZW50TG9hZGVyPFQ+IHtcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICB0aHJvdyBFcnJvcignTm8gYXR0YWNoZWQgY29tcG9uZW50IGZvdW5kIHRvIGhpZGUnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9uQmVmb3JlSGlkZS5uZXh0KHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudEVsID0gdGhpcy5jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICBjb21wb25lbnRFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbXBvbmVudEVsKTtcbiAgICBpZiAodGhpcy5jb250ZW50UmVmPy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHRoaXMuY29udGVudFJlZi5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy52Y3IgJiYgdGhpcy5jb250ZW50UmVmPy52aWV3UmVmKSB7XG4gICAgICB0aGlzLnZjci5yZW1vdmUodGhpcy52Y3IuaW5kZXhPZih0aGlzLmNvbnRlbnRSZWYudmlld1JlZikpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb250ZW50UmVmPy52aWV3UmVmKSB7XG4gICAgICB0aGlzLmNvbnRlbnRSZWYudmlld1JlZi5kZXN0cm95KCk7XG4gICAgfVxuICAgIHRoaXMuY29udGVudFJlZiA9IHZvaWQgMDtcbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHZvaWQgMDtcblxuICAgIHRoaXMub25IaWRkZW4ubmV4dChpZCA/IHsgaWQsIHJlc3VsdCB9IDogbnVsbCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldElubmVyQ29tcG9uZW50KCk6IENvbXBvbmVudFJlZjxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJDb21wb25lbnQ7XG4gIH1cblxuICBwcml2YXRlIG1hcmtDb21wb25lbnRzRm9yQ2hlY2soKSB7XG4gICAgaWYgKHRoaXMuY29udGVudFJlZj8uY29tcG9uZW50UmVmKSB7XG4gICAgICB0aGlzLmlubmVyQ29tcG9uZW50ID0gdGhpcy5jb250ZW50UmVmLmNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICAgIHRoaXMuY29udGVudFJlZi5jb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLmNvbnRlbnRSZWYuY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgdGhpcy5jb21wb25lbnRSZWYhLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmIS5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbXBvbmVudEFuZEF0dGFjaFRvVmlldyhvcHRpb25zOiBDb21wb25lbnRMb2FkZXJPcHRpb25zKSB7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiB0aGlzLnByb3ZpZGVycyxcbiAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICB9KTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50RmFjdG9yeSEuY3JlYXRlKGluamVjdG9yLCB0aGlzLmNvbnRlbnRSZWY/Lm5vZGVzKTtcbiAgICB0aGlzLmFwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgIHRoaXMuaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwZW5kQ29udGVudFRvQ29udGFpbmVyKCkge1xuICAgIGlmICh0aGlzLmNvbnRhaW5lciBpbnN0YW5jZW9mIEVsZW1lbnRSZWYpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5jb21wb25lbnRSZWY/LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuY29udGFpbmVyID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuY29udGFpbmVyKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuY29udGFpbmVyRGVmYXVsdFNlbGVjdG9yKTtcbiAgICAgIGlmICghc2VsZWN0ZWRFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlbGVjdGVkRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbXBvbmVudFJlZj8ubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250ZW50UmVmKGNvbnRlbnQ/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+LCBjb250ZXh0PzogYW55LCBpbml0aWFsU3RhdGU/OiBhbnkpOiBDb250ZW50UmVmIHtcbiAgICAvL1RlbXBsYXRlUmVmIGNhc2VcbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICBpZiAodGhpcy52Y3IpIHtcbiAgICAgICAgY29uc3Qgdmlld1JlZiA9IHRoaXMudmNyLmNyZWF0ZUVtYmVkZGVkVmlldzxUZW1wbGF0ZVJlZjxUPj4oY29udGVudCwgY29udGV4dCk7XG4gICAgICAgIHZpZXdSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHJldHVybiBuZXcgQ29udGVudFJlZihbdmlld1JlZi5yb290Tm9kZXNdLCB2aWV3UmVmKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZpZXdSZWYgPSBjb250ZW50LmNyZWF0ZUVtYmVkZGVkVmlldyh7fSk7XG4gICAgICB0aGlzLmFwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcodmlld1JlZik7XG4gICAgICByZXR1cm4gbmV3IENvbnRlbnRSZWYoW3ZpZXdSZWYucm9vdE5vZGVzXSwgdmlld1JlZik7XG4gICAgfVxuXG4gICAgLy9Db21wb25lbnQgY2FzZVxuICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgY29udGVudENmID0gdGhpcy5jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29udGVudCk7XG4gICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgIHByb3ZpZGVyczogdGhpcy5wcm92aWRlcnMsXG4gICAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gY29udGVudENmLmNyZWF0ZShpbmplY3Rvcik7XG4gICAgICAvLyBPYmplY3QuYXNzaWduKGNvbXBvbmVudFJlZi5pbnN0YW5jZSwgaW5pdGlhbFN0YXRlKTtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25SZWYuYXR0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgcmV0dXJuIG5ldyBDb250ZW50UmVmKFtbY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnRdXSwgY29tcG9uZW50UmVmLmhvc3RWaWV3LCBjb21wb25lbnRSZWYpO1xuICAgIH1cblxuICAgIHRocm93IEVycm9yKCdVbnN1cHBvcnRlZCBjb250ZW50IHR5cGUnKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { ComponentLoader } from './component-loader.class';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Use to create instances of {@link ComponentLoader}.
|
|
6
|
+
*
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export class ComponentLoaderFactory {
|
|
10
|
+
constructor(componentFactoryResolver, injector, applicationRef) {
|
|
11
|
+
this.componentFactoryResolver = componentFactoryResolver;
|
|
12
|
+
this.injector = injector;
|
|
13
|
+
this.applicationRef = applicationRef;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Returns a new instance of {@link ComponentLoader}
|
|
17
|
+
* @param viewContainerRef - The view container the dynamic content will be attached to.
|
|
18
|
+
* @returns A new instance of {@link ComponentLoader}.
|
|
19
|
+
*
|
|
20
|
+
* @public
|
|
21
|
+
*/
|
|
22
|
+
createLoader(viewContainerRef) {
|
|
23
|
+
return new ComponentLoader(viewContainerRef, this.componentFactoryResolver, this.applicationRef, this.injector);
|
|
24
|
+
}
|
|
25
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: ComponentLoaderFactory, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
26
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: ComponentLoaderFactory, providedIn: 'root' }); }
|
|
27
|
+
}
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: ComponentLoaderFactory, decorators: [{
|
|
29
|
+
type: Injectable,
|
|
30
|
+
args: [{ providedIn: 'root' }]
|
|
31
|
+
}], ctorParameters: () => [{ type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i0.ApplicationRef }] });
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWxvYWRlci5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2VzL2NvbXBvbmVudC1sb2FkZXIvY29tcG9uZW50LWxvYWRlci5mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNEMsVUFBVSxFQUE4QixNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRTNEOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1Usd0JBQWtELEVBQ2xELFFBQWtCLEVBQ2xCLGNBQThCO1FBRjlCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDckMsQ0FBQztJQUVKOzs7Ozs7T0FNRztJQUNILFlBQVksQ0FBbUIsZ0JBQW1DO1FBQ2hFLE9BQU8sSUFBSSxlQUFlLENBQUksZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JILENBQUM7OEdBaEJVLHNCQUFzQjtrSEFBdEIsc0JBQXNCLGNBRFQsTUFBTTs7MkZBQ25CLHNCQUFzQjtrQkFEbEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBJbmplY3RhYmxlLCBJbmplY3RvciwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50TG9hZGVyIH0gZnJvbSAnLi9jb21wb25lbnQtbG9hZGVyLmNsYXNzJztcblxuLyoqXG4gKiBVc2UgdG8gY3JlYXRlIGluc3RhbmNlcyBvZiB7QGxpbmsgQ29tcG9uZW50TG9hZGVyfS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50TG9hZGVyRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWZcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDb21wb25lbnRMb2FkZXJ9XG4gICAqIEBwYXJhbSB2aWV3Q29udGFpbmVyUmVmIC0gVGhlIHZpZXcgY29udGFpbmVyIHRoZSBkeW5hbWljIGNvbnRlbnQgd2lsbCBiZSBhdHRhY2hlZCB0by5cbiAgICogQHJldHVybnMgQSBuZXcgaW5zdGFuY2Ugb2Yge0BsaW5rIENvbXBvbmVudExvYWRlcn0uXG4gICAqXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGNyZWF0ZUxvYWRlcjxUIGV4dGVuZHMgb2JqZWN0Pih2aWV3Q29udGFpbmVyUmVmPzogVmlld0NvbnRhaW5lclJlZik6IENvbXBvbmVudExvYWRlcjxUPiB7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRMb2FkZXI8VD4odmlld0NvbnRhaW5lclJlZiwgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIHRoaXMuYXBwbGljYXRpb25SZWYsIHRoaXMuaW5qZWN0b3IpO1xuICB9XG59XG4iXX0=
|