barsa-novin-ray-core 0.0.2
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 +25 -0
- package/esm2020/barsa-novin-ray-core.mjs +5 -0
- package/esm2020/lib/abstract-classes/application-base.mjs +24 -0
- package/esm2020/lib/abstract-classes/barsa-api.mjs +40 -0
- package/esm2020/lib/abstract-classes/field-base.mjs +167 -0
- package/esm2020/lib/abstract-classes/files-validation-helper.mjs +71 -0
- package/esm2020/lib/abstract-classes/form-base.mjs +101 -0
- package/esm2020/lib/abstract-classes/form-props.base.mjs +79 -0
- package/esm2020/lib/abstract-classes/form-toolbar-base.mjs +45 -0
- package/esm2020/lib/abstract-classes/index.mjs +21 -0
- package/esm2020/lib/abstract-classes/layout-item-base.mjs +33 -0
- package/esm2020/lib/abstract-classes/layout-panel-base.mjs +80 -0
- package/esm2020/lib/abstract-classes/models.mjs +172 -0
- package/esm2020/lib/abstract-classes/module-with-dynamic-components.mjs +2 -0
- package/esm2020/lib/abstract-classes/number-base.mjs +117 -0
- package/esm2020/lib/abstract-classes/page-base.mjs +97 -0
- package/esm2020/lib/abstract-classes/report-base.mjs +231 -0
- package/esm2020/lib/abstract-classes/report-item-base.mjs +53 -0
- package/esm2020/lib/abstract-classes/report-view-base.component.mjs +262 -0
- package/esm2020/lib/abstract-classes/system-base.mjs +24 -0
- package/esm2020/lib/auth-guard.mjs +37 -0
- package/esm2020/lib/barsa-novin-ray-core-routing.module.mjs +18 -0
- package/esm2020/lib/barsa-novin-ray-core.module.mjs +271 -0
- package/esm2020/lib/base-ulv-setting.component.mjs +37 -0
- package/esm2020/lib/base.component.mjs +59 -0
- package/esm2020/lib/base.module.mjs +28 -0
- package/esm2020/lib/constants.mjs +441 -0
- package/esm2020/lib/container.component.mjs +76 -0
- package/esm2020/lib/custom-route-reuse-strategy.mjs +32 -0
- package/esm2020/lib/date-services/date-hijri.service.mjs +127 -0
- package/esm2020/lib/date-services/date-info.mjs +2 -0
- package/esm2020/lib/date-services/date-miladi.service.mjs +124 -0
- package/esm2020/lib/date-services/date-shamsi.service.mjs +129 -0
- package/esm2020/lib/date-services/date.service.mjs +139 -0
- package/esm2020/lib/date-services/index.mjs +6 -0
- package/esm2020/lib/device.mjs +663 -0
- package/esm2020/lib/directives/anchor-scroll.directive.mjs +24 -0
- package/esm2020/lib/directives/attr-rtl.directive.mjs +35 -0
- package/esm2020/lib/directives/base.directive.mjs +51 -0
- package/esm2020/lib/directives/column-resizer.directive.mjs +39 -0
- package/esm2020/lib/directives/dynamic-command.directive.mjs +43 -0
- package/esm2020/lib/directives/ellipsify.directive.mjs +72 -0
- package/esm2020/lib/directives/field-binding.directive.mjs +17 -0
- package/esm2020/lib/directives/img-lazy.directive.mjs +75 -0
- package/esm2020/lib/directives/index.mjs +19 -0
- package/esm2020/lib/directives/intersection-observer.directive.mjs +49 -0
- package/esm2020/lib/directives/items-renderer.directive.mjs +59 -0
- package/esm2020/lib/directives/numbers-only-input.directive.mjs +26 -0
- package/esm2020/lib/directives/placeHolder.directive.mjs +15 -0
- package/esm2020/lib/directives/render-ulv-paging.directive.mjs +58 -0
- package/esm2020/lib/directives/render-ulv-viewer.directive.mjs +60 -0
- package/esm2020/lib/directives/table-resizer.directive.mjs +235 -0
- package/esm2020/lib/directives/ulv-command.directive.mjs +41 -0
- package/esm2020/lib/directives/until-inview.directive.mjs +51 -0
- package/esm2020/lib/dynamic-component/base-dynamic.component.mjs +89 -0
- package/esm2020/lib/dynamic-component/base-form-toolbaritem-props.mjs +50 -0
- package/esm2020/lib/dynamic-component/base-item-content-props.mjs +70 -0
- package/esm2020/lib/dynamic-component/base-view-content-props.mjs +26 -0
- package/esm2020/lib/dynamic-component/base-view-item-props.mjs +374 -0
- package/esm2020/lib/dynamic-component/base-view-props.mjs +127 -0
- package/esm2020/lib/dynamic-component/dynamic-form-toolbar-item.component.mjs +36 -0
- package/esm2020/lib/dynamic-component/dynamic-form.component.mjs +62 -0
- package/esm2020/lib/dynamic-component/dynamic-item.component.mjs +60 -0
- package/esm2020/lib/dynamic-component/index.mjs +10 -0
- package/esm2020/lib/empty-page-with-router-and-router-outlet/empty-page-with-router-and-router-outlet.component.mjs +16 -0
- package/esm2020/lib/field-ui/field-ui.component.mjs +116 -0
- package/esm2020/lib/form/form.component.mjs +151 -0
- package/esm2020/lib/form-new/form-new.component.mjs +30 -0
- package/esm2020/lib/from-intersection-observer.mjs +53 -0
- package/esm2020/lib/global-error-handler.mjs +26 -0
- package/esm2020/lib/modal-root.component.mjs +31 -0
- package/esm2020/lib/not-found/not-found.component.mjs +16 -0
- package/esm2020/lib/pipes/barsa-icon-dict.pipe.mjs +18 -0
- package/esm2020/lib/pipes/bbb-translate.pipe.mjs +29 -0
- package/esm2020/lib/pipes/can-upload.pipe.mjs +30 -0
- package/esm2020/lib/pipes/context-menu.pipe.mjs +40 -0
- package/esm2020/lib/pipes/control-ui.pipe.mjs +31 -0
- package/esm2020/lib/pipes/convert-to-style.pipe.mjs +32 -0
- package/esm2020/lib/pipes/date-time-to-caption.pipe.mjs +34 -0
- package/esm2020/lib/pipes/fileinfo-count.pipe.mjs +20 -0
- package/esm2020/lib/pipes/filter-columns-by-details.pipe.mjs +20 -0
- package/esm2020/lib/pipes/filter-string.pipe.mjs +44 -0
- package/esm2020/lib/pipes/filter-tab.pipe.mjs +19 -0
- package/esm2020/lib/pipes/filter-toolbar-control.pipe.mjs +16 -0
- package/esm2020/lib/pipes/filter.pipe.mjs +33 -0
- package/esm2020/lib/pipes/find-column-by-db-name.pipe.mjs +17 -0
- package/esm2020/lib/pipes/fiori-icon.pipe.mjs +42 -0
- package/esm2020/lib/pipes/groupby.pipe.mjs +48 -0
- package/esm2020/lib/pipes/header-facet-value.pipe.mjs +22 -0
- package/esm2020/lib/pipes/index.mjs +33 -0
- package/esm2020/lib/pipes/list-count.pipe.mjs +17 -0
- package/esm2020/lib/pipes/merge-fields-to-columns.pipe.mjs +42 -0
- package/esm2020/lib/pipes/mo-info-ulv-data.pipe.mjs +24 -0
- package/esm2020/lib/pipes/mo-report-value-concat.pipe.mjs +35 -0
- package/esm2020/lib/pipes/mo-report-value.pipe.mjs +28 -0
- package/esm2020/lib/pipes/mo-value.pipe.mjs +31 -0
- package/esm2020/lib/pipes/multiple-groupby.pipe.mjs +97 -0
- package/esm2020/lib/pipes/numeral.pipe.mjs +40 -0
- package/esm2020/lib/pipes/picture-field-source.pipe.mjs +22 -0
- package/esm2020/lib/pipes/remove-newline.pipe.mjs +20 -0
- package/esm2020/lib/pipes/seperator-fix.pipe.mjs +23 -0
- package/esm2020/lib/pipes/sort.pipe.mjs +48 -0
- package/esm2020/lib/pipes/tlbButtons.pipe.mjs +58 -0
- package/esm2020/lib/pipes/total-summary.pipe.mjs +16 -0
- package/esm2020/lib/pipes/visible-value.pipe.mjs +24 -0
- package/esm2020/lib/portal-page/portal-page.component.mjs +13 -0
- package/esm2020/lib/redirect-home-guard.mjs +28 -0
- package/esm2020/lib/redirect-report-navigator-command/redirect-report-navigator-command.component.mjs +33 -0
- package/esm2020/lib/report-container/report-container.component.mjs +52 -0
- package/esm2020/lib/resolvers/index.mjs +5 -0
- package/esm2020/lib/resolvers/portal-dynamic-page.resolver.mjs +49 -0
- package/esm2020/lib/resolvers/portal-form-page.resolver.mjs +18 -0
- package/esm2020/lib/resolvers/portal-page.resolver.mjs +30 -0
- package/esm2020/lib/resolvers/portal-report-page.resolver.mjs +37 -0
- package/esm2020/lib/root-page/root-page.component.mjs +21 -0
- package/esm2020/lib/root-portal/root-portal.component.mjs +51 -0
- package/esm2020/lib/services/api.service.mjs +60 -0
- package/esm2020/lib/services/barsa-dialog.service.mjs +80 -0
- package/esm2020/lib/services/breadcrumb.service.mjs +60 -0
- package/esm2020/lib/services/container.service.mjs +36 -0
- package/esm2020/lib/services/dynamic-component.service.mjs +55 -0
- package/esm2020/lib/services/form-panel.service.mjs +235 -0
- package/esm2020/lib/services/form.service.mjs +14 -0
- package/esm2020/lib/services/horizontal-layout.service.mjs +16 -0
- package/esm2020/lib/services/index.mjs +16 -0
- package/esm2020/lib/services/layout.service.mjs +42 -0
- package/esm2020/lib/services/log.service.mjs +50 -0
- package/esm2020/lib/services/network-status.service.mjs +15 -0
- package/esm2020/lib/services/portal.service.mjs +638 -0
- package/esm2020/lib/services/ui.service.mjs +23 -0
- package/esm2020/lib/services/ulvmain.service.mjs +594 -0
- package/esm2020/lib/services/upload.service.mjs +75 -0
- package/esm2020/public-api.mjs +33 -0
- package/fesm2015/barsa-novin-ray-core.mjs +9047 -0
- package/fesm2015/barsa-novin-ray-core.mjs.map +1 -0
- package/fesm2020/barsa-novin-ray-core.mjs +8945 -0
- package/fesm2020/barsa-novin-ray-core.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/abstract-classes/application-base.d.ts +53 -0
- package/lib/abstract-classes/barsa-api.d.ts +28 -0
- package/lib/abstract-classes/field-base.d.ts +81 -0
- package/lib/abstract-classes/files-validation-helper.d.ts +15 -0
- package/lib/abstract-classes/form-base.d.ts +59 -0
- package/lib/abstract-classes/form-props.base.d.ts +45 -0
- package/lib/abstract-classes/form-toolbar-base.d.ts +17 -0
- package/lib/abstract-classes/index.d.ts +20 -0
- package/lib/abstract-classes/layout-item-base.d.ts +15 -0
- package/lib/abstract-classes/layout-panel-base.d.ts +24 -0
- package/lib/abstract-classes/models.d.ts +660 -0
- package/lib/abstract-classes/module-with-dynamic-components.d.ts +4 -0
- package/lib/abstract-classes/number-base.d.ts +20 -0
- package/lib/abstract-classes/page-base.d.ts +31 -0
- package/lib/abstract-classes/report-base.d.ts +97 -0
- package/lib/abstract-classes/report-item-base.d.ts +33 -0
- package/lib/abstract-classes/report-view-base.component.d.ts +130 -0
- package/lib/abstract-classes/system-base.d.ts +45 -0
- package/lib/auth-guard.d.ts +12 -0
- package/lib/barsa-novin-ray-core-routing.module.d.ts +7 -0
- package/lib/barsa-novin-ray-core.module.d.ts +88 -0
- package/lib/base-ulv-setting.component.d.ts +18 -0
- package/lib/base.component.d.ts +15 -0
- package/lib/base.module.d.ts +13 -0
- package/lib/constants.d.ts +89 -0
- package/lib/container.component.d.ts +33 -0
- package/lib/custom-route-reuse-strategy.d.ts +11 -0
- package/lib/date-services/date-hijri.service.d.ts +40 -0
- package/lib/date-services/date-info.d.ts +15 -0
- package/lib/date-services/date-miladi.service.d.ts +39 -0
- package/lib/date-services/date-shamsi.service.d.ts +40 -0
- package/lib/date-services/date.service.d.ts +54 -0
- package/lib/date-services/index.d.ts +5 -0
- package/lib/device.d.ts +15 -0
- package/lib/directives/anchor-scroll.directive.d.ts +7 -0
- package/lib/directives/attr-rtl.directive.d.ts +13 -0
- package/lib/directives/base.directive.d.ts +13 -0
- package/lib/directives/column-resizer.directive.d.ts +13 -0
- package/lib/directives/dynamic-command.directive.d.ts +12 -0
- package/lib/directives/ellipsify.directive.d.ts +17 -0
- package/lib/directives/field-binding.directive.d.ts +7 -0
- package/lib/directives/img-lazy.directive.d.ts +20 -0
- package/lib/directives/index.d.ts +18 -0
- package/lib/directives/intersection-observer.directive.d.ts +17 -0
- package/lib/directives/items-renderer.directive.d.ts +17 -0
- package/lib/directives/numbers-only-input.directive.d.ts +9 -0
- package/lib/directives/placeHolder.directive.d.ts +6 -0
- package/lib/directives/render-ulv-paging.directive.d.ts +19 -0
- package/lib/directives/render-ulv-viewer.directive.d.ts +19 -0
- package/lib/directives/table-resizer.directive.d.ts +47 -0
- package/lib/directives/ulv-command.directive.d.ts +11 -0
- package/lib/directives/until-inview.directive.d.ts +17 -0
- package/lib/dynamic-component/base-dynamic.component.d.ts +26 -0
- package/lib/dynamic-component/base-form-toolbaritem-props.d.ts +28 -0
- package/lib/dynamic-component/base-item-content-props.d.ts +40 -0
- package/lib/dynamic-component/base-view-content-props.d.ts +11 -0
- package/lib/dynamic-component/base-view-item-props.d.ts +95 -0
- package/lib/dynamic-component/base-view-props.d.ts +65 -0
- package/lib/dynamic-component/dynamic-form-toolbar-item.component.d.ts +18 -0
- package/lib/dynamic-component/dynamic-form.component.d.ts +33 -0
- package/lib/dynamic-component/dynamic-item.component.d.ts +30 -0
- package/lib/dynamic-component/index.d.ts +9 -0
- package/lib/empty-page-with-router-and-router-outlet/empty-page-with-router-and-router-outlet.component.d.ts +7 -0
- package/lib/field-ui/field-ui.component.d.ts +27 -0
- package/lib/form/form.component.d.ts +36 -0
- package/lib/form-new/form-new.component.d.ts +23 -0
- package/lib/from-intersection-observer.d.ts +7 -0
- package/lib/global-error-handler.d.ts +8 -0
- package/lib/modal-root.component.d.ts +15 -0
- package/lib/not-found/not-found.component.d.ts +8 -0
- package/lib/pipes/barsa-icon-dict.pipe.d.ts +9 -0
- package/lib/pipes/bbb-translate.pipe.d.ts +7 -0
- package/lib/pipes/can-upload.pipe.d.ts +8 -0
- package/lib/pipes/context-menu.pipe.d.ts +11 -0
- package/lib/pipes/control-ui.pipe.d.ts +9 -0
- package/lib/pipes/convert-to-style.pipe.d.ts +8 -0
- package/lib/pipes/date-time-to-caption.pipe.d.ts +9 -0
- package/lib/pipes/fileinfo-count.pipe.d.ts +10 -0
- package/lib/pipes/filter-columns-by-details.pipe.d.ts +8 -0
- package/lib/pipes/filter-string.pipe.d.ts +11 -0
- package/lib/pipes/filter-tab.pipe.d.ts +7 -0
- package/lib/pipes/filter-toolbar-control.pipe.d.ts +8 -0
- package/lib/pipes/filter.pipe.d.ts +10 -0
- package/lib/pipes/find-column-by-db-name.pipe.d.ts +8 -0
- package/lib/pipes/fiori-icon.pipe.d.ts +7 -0
- package/lib/pipes/groupby.pipe.d.ts +7 -0
- package/lib/pipes/header-facet-value.pipe.d.ts +8 -0
- package/lib/pipes/index.d.ts +32 -0
- package/lib/pipes/list-count.pipe.d.ts +8 -0
- package/lib/pipes/merge-fields-to-columns.pipe.d.ts +10 -0
- package/lib/pipes/mo-info-ulv-data.pipe.d.ts +7 -0
- package/lib/pipes/mo-report-value-concat.pipe.d.ts +9 -0
- package/lib/pipes/mo-report-value.pipe.d.ts +12 -0
- package/lib/pipes/mo-value.pipe.d.ts +9 -0
- package/lib/pipes/multiple-groupby.pipe.d.ts +23 -0
- package/lib/pipes/numeral.pipe.d.ts +9 -0
- package/lib/pipes/picture-field-source.pipe.d.ts +8 -0
- package/lib/pipes/remove-newline.pipe.d.ts +8 -0
- package/lib/pipes/seperator-fix.pipe.d.ts +7 -0
- package/lib/pipes/sort.pipe.d.ts +9 -0
- package/lib/pipes/tlbButtons.pipe.d.ts +9 -0
- package/lib/pipes/total-summary.pipe.d.ts +8 -0
- package/lib/pipes/visible-value.pipe.d.ts +8 -0
- package/lib/portal-page/portal-page.component.d.ts +6 -0
- package/lib/redirect-home-guard.d.ts +13 -0
- package/lib/redirect-report-navigator-command/redirect-report-navigator-command.component.d.ts +14 -0
- package/lib/report-container/report-container.component.d.ts +24 -0
- package/lib/resolvers/index.d.ts +4 -0
- package/lib/resolvers/portal-dynamic-page.resolver.d.ts +12 -0
- package/lib/resolvers/portal-form-page.resolver.d.ts +8 -0
- package/lib/resolvers/portal-page.resolver.d.ts +12 -0
- package/lib/resolvers/portal-report-page.resolver.d.ts +12 -0
- package/lib/root-page/root-page.component.d.ts +10 -0
- package/lib/root-portal/root-portal.component.d.ts +14 -0
- package/lib/services/api.service.d.ts +18 -0
- package/lib/services/barsa-dialog.service.d.ts +31 -0
- package/lib/services/breadcrumb.service.d.ts +14 -0
- package/lib/services/container.service.d.ts +14 -0
- package/lib/services/dynamic-component.service.d.ts +13 -0
- package/lib/services/form-panel.service.d.ts +83 -0
- package/lib/services/form.service.d.ts +8 -0
- package/lib/services/horizontal-layout.service.d.ts +7 -0
- package/lib/services/index.d.ts +15 -0
- package/lib/services/layout.service.d.ts +23 -0
- package/lib/services/log.service.d.ts +17 -0
- package/lib/services/network-status.service.d.ts +7 -0
- package/lib/services/portal.service.d.ts +130 -0
- package/lib/services/ui.service.d.ts +14 -0
- package/lib/services/ulvmain.service.d.ts +178 -0
- package/lib/services/upload.service.d.ts +18 -0
- package/package.json +38 -0
- package/public-api.d.ts +29 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import { delay, takeUntil, tap } from 'rxjs/operators';
|
|
3
|
+
import { BaseDirective } from './base.directive';
|
|
4
|
+
import { getComponentDefined, getUniqueId } from '../constants';
|
|
5
|
+
import { BarsaApi } from '../abstract-classes';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../services/portal.service";
|
|
8
|
+
export class RenderUlvPaginDirective extends BaseDirective {
|
|
9
|
+
constructor(_injector, _portalService, _vcr, _cdr) {
|
|
10
|
+
super();
|
|
11
|
+
this._injector = _injector;
|
|
12
|
+
this._portalService = _portalService;
|
|
13
|
+
this._vcr = _vcr;
|
|
14
|
+
this._cdr = _cdr;
|
|
15
|
+
}
|
|
16
|
+
async ngOnInit() {
|
|
17
|
+
super.ngOnInit();
|
|
18
|
+
this._render();
|
|
19
|
+
}
|
|
20
|
+
ngOnDestroy() {
|
|
21
|
+
super.ngOnDestroy();
|
|
22
|
+
this.component.destroy();
|
|
23
|
+
}
|
|
24
|
+
async _render() {
|
|
25
|
+
const context = this.context;
|
|
26
|
+
if (context) {
|
|
27
|
+
const customUiSetting = BarsaApi.Common.Util.TryGetValue(context.Setting, 'ClassNames.CustomUi', null);
|
|
28
|
+
const { moduleName, modulePath
|
|
29
|
+
// componentName,
|
|
30
|
+
// selector
|
|
31
|
+
} = getComponentDefined(context, customUiSetting);
|
|
32
|
+
this._portalService
|
|
33
|
+
.getComponent(moduleName, modulePath, 'UlvPaging', 'bsu-ulv-paging', this._injector)
|
|
34
|
+
.pipe(takeUntil(this._onDestroy$), delay(0), tap((component) => {
|
|
35
|
+
component.instance.id = getUniqueId(4);
|
|
36
|
+
component.instance.context = context;
|
|
37
|
+
this.component = component;
|
|
38
|
+
this._vcr.insert(component.hostView);
|
|
39
|
+
this._cdr.detectChanges();
|
|
40
|
+
}))
|
|
41
|
+
.subscribe();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
RenderUlvPaginDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RenderUlvPaginDirective, deps: [{ token: i0.Injector }, { token: i1.PortalService }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
46
|
+
RenderUlvPaginDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.7", type: RenderUlvPaginDirective, selector: "[renderUlvPaging]", inputs: { mask: "mask", context: ["renderUlvPaging", "context"] }, usesInheritance: true, ngImport: i0 });
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RenderUlvPaginDirective, decorators: [{
|
|
48
|
+
type: Directive,
|
|
49
|
+
args: [{
|
|
50
|
+
selector: '[renderUlvPaging]'
|
|
51
|
+
}]
|
|
52
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.PortalService }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { mask: [{
|
|
53
|
+
type: Input
|
|
54
|
+
}], context: [{
|
|
55
|
+
type: Input,
|
|
56
|
+
args: ['renderUlvPaging']
|
|
57
|
+
}] } });
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLXVsdi1wYWdpbmcuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL3JlbmRlci11bHYtcGFnaW5nLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsU0FBUyxFQUVULEtBQUssRUFJUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUsvQyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsYUFBYTtJQUl0RCxZQUNZLFNBQW1CLEVBQ25CLGNBQTZCLEVBQzdCLElBQXNCLEVBQ3RCLElBQXVCO1FBRS9CLEtBQUssRUFBRSxDQUFDO1FBTEEsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFtQjtJQUduQyxDQUFDO0lBQ0QsS0FBSyxDQUFDLFFBQVE7UUFDVixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFDRCxXQUFXO1FBQ1AsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUNELEtBQUssQ0FBQyxPQUFPO1FBQ1QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixJQUFJLE9BQU8sRUFBRTtZQUNULE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZHLE1BQU0sRUFDRixVQUFVLEVBQ1YsVUFBVTtZQUNWLGlCQUFpQjtZQUNqQixXQUFXO2NBQ2QsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFFbEQsSUFBSSxDQUFDLGNBQWM7aUJBQ2QsWUFBWSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7aUJBQ25GLElBQUksQ0FDRCxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUMzQixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ2QsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQ0w7aUJBQ0EsU0FBUyxFQUFFLENBQUM7U0FDcEI7SUFDTCxDQUFDOztvSEE5Q1EsdUJBQXVCO3dHQUF2Qix1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFIbkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsbUJBQW1CO2lCQUNoQzswTEFFWSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ29CLE9BQU87c0JBQWhDLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgZ2V0Q29tcG9uZW50RGVmaW5lZCwgZ2V0VW5pcXVlSWQgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUG9ydGFsU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BvcnRhbC5zZXJ2aWNlJztcbmltcG9ydCB7IEJhcnNhQXBpIH0gZnJvbSAnLi4vYWJzdHJhY3QtY2xhc3Nlcyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3JlbmRlclVsdlBhZ2luZ10nXG59KVxuZXhwb3J0IGNsYXNzIFJlbmRlclVsdlBhZ2luRGlyZWN0aXZlIGV4dGVuZHMgQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBtYXNrOiBib29sZWFuO1xuICAgIEBJbnB1dCgncmVuZGVyVWx2UGFnaW5nJykgY29udGV4dDtcbiAgICBjb21wb25lbnQ6IENvbXBvbmVudFJlZjxhbnk+O1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgX3BvcnRhbFNlcnZpY2U6IFBvcnRhbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3ZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cbiAgICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5kZXN0cm95KCk7XG4gICAgfVxuICAgIGFzeW5jIF9yZW5kZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21VaVNldHRpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LlNldHRpbmcsICdDbGFzc05hbWVzLkN1c3RvbVVpJywgbnVsbCk7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZSxcbiAgICAgICAgICAgICAgICBtb2R1bGVQYXRoXG4gICAgICAgICAgICAgICAgLy8gY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgICAvLyBzZWxlY3RvclxuICAgICAgICAgICAgfSA9IGdldENvbXBvbmVudERlZmluZWQoY29udGV4dCwgY3VzdG9tVWlTZXR0aW5nKTtcblxuICAgICAgICAgICAgdGhpcy5fcG9ydGFsU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRDb21wb25lbnQobW9kdWxlTmFtZSwgbW9kdWxlUGF0aCwgJ1VsdlBhZ2luZycsICdic3UtdWx2LXBhZ2luZycsIHRoaXMuX2luamVjdG9yKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXG4gICAgICAgICAgICAgICAgICAgIGRlbGF5KDApLFxuICAgICAgICAgICAgICAgICAgICB0YXAoKGNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50Lmluc3RhbmNlLmlkID0gZ2V0VW5pcXVlSWQoNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Zjci5pbnNlcnQoY29tcG9uZW50Lmhvc3RWaWV3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import { delay, takeUntil, tap } from 'rxjs/operators';
|
|
3
|
+
import { BarsaApi } from '../abstract-classes';
|
|
4
|
+
import { BaseDirective } from './base.directive';
|
|
5
|
+
import { getComponentDefined, getUniqueId } from '../constants';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../services/portal.service";
|
|
8
|
+
export class RenderUlvViewerDirective extends BaseDirective {
|
|
9
|
+
constructor(_injector, _portalService, _vcr, _cdr) {
|
|
10
|
+
super();
|
|
11
|
+
this._injector = _injector;
|
|
12
|
+
this._portalService = _portalService;
|
|
13
|
+
this._vcr = _vcr;
|
|
14
|
+
this._cdr = _cdr;
|
|
15
|
+
}
|
|
16
|
+
ngAfterViewInit() {
|
|
17
|
+
super.ngAfterViewInit();
|
|
18
|
+
this._render();
|
|
19
|
+
}
|
|
20
|
+
ngOnDestroy() {
|
|
21
|
+
super.ngOnDestroy();
|
|
22
|
+
if (this.component) {
|
|
23
|
+
this.component.destroy();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
_render() {
|
|
27
|
+
const context = this.viewer;
|
|
28
|
+
if (context) {
|
|
29
|
+
const customUiSetting = BarsaApi.Common.Util.TryGetValue(context.Setting, 'ClassNames.CustomUi', null);
|
|
30
|
+
const { moduleName, modulePath, componentName, selector } = getComponentDefined(context, customUiSetting);
|
|
31
|
+
this._portalService
|
|
32
|
+
.getComponent(moduleName, modulePath, componentName, selector, this._injector)
|
|
33
|
+
.pipe(takeUntil(this._onDestroy$), delay(0), tap((component) => {
|
|
34
|
+
component.instance.id = getUniqueId(4);
|
|
35
|
+
component.instance.context = context;
|
|
36
|
+
// component.instance.moDataList=BarsaApi.Common.Util.TryGetValue(context,'moDataList',[]);
|
|
37
|
+
context.controlUi = component.instance;
|
|
38
|
+
// context.viewer = component.instance;
|
|
39
|
+
this.component = component;
|
|
40
|
+
this._vcr.insert(component.hostView);
|
|
41
|
+
this._cdr.detectChanges();
|
|
42
|
+
}))
|
|
43
|
+
.subscribe();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
RenderUlvViewerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RenderUlvViewerDirective, deps: [{ token: i0.Injector }, { token: i1.PortalService }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
48
|
+
RenderUlvViewerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.7", type: RenderUlvViewerDirective, selector: "[renderUlvViewer]", inputs: { mask: "mask", viewer: ["renderUlvViewer", "viewer"] }, usesInheritance: true, ngImport: i0 });
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RenderUlvViewerDirective, decorators: [{
|
|
50
|
+
type: Directive,
|
|
51
|
+
args: [{
|
|
52
|
+
selector: '[renderUlvViewer]'
|
|
53
|
+
}]
|
|
54
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.PortalService }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { mask: [{
|
|
55
|
+
type: Input
|
|
56
|
+
}], viewer: [{
|
|
57
|
+
type: Input,
|
|
58
|
+
args: ['renderUlvViewer']
|
|
59
|
+
}] } });
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLXVsdi12aWV3ZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL3JlbmRlci11bHYtdmlld2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUgsU0FBUyxFQUVULEtBQUssRUFHUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7OztBQU1oRSxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsYUFBYTtJQUl2RCxZQUNZLFNBQW1CLEVBQ25CLGNBQTZCLEVBQzdCLElBQXNCLEVBQ3RCLElBQXVCO1FBRS9CLEtBQUssRUFBRSxDQUFDO1FBTEEsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFtQjtJQUduQyxDQUFDO0lBQ0QsZUFBZTtRQUNYLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUNELFdBQVc7UUFDUCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDNUI7SUFDTCxDQUFDO0lBQ0QsT0FBTztRQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDNUIsSUFBSSxPQUFPLEVBQUU7WUFDVCxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2RyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzFHLElBQUksQ0FBQyxjQUFjO2lCQUNkLFlBQVksQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztpQkFDN0UsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQzNCLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDZCxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztnQkFDckMsMkZBQTJGO2dCQUMzRixPQUFPLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3ZDLHVDQUF1QztnQkFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FDTDtpQkFDQSxTQUFTLEVBQUUsQ0FBQztTQUNwQjtJQUNMLENBQUM7O3FIQTdDUSx3QkFBd0I7eUdBQXhCLHdCQUF3QjsyRkFBeEIsd0JBQXdCO2tCQUhwQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQkFBbUI7aUJBQ2hDOzBMQUVZLElBQUk7c0JBQVosS0FBSztnQkFDb0IsTUFBTTtzQkFBL0IsS0FBSzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJhcnNhQXBpIH0gZnJvbSAnLi4vYWJzdHJhY3QtY2xhc3Nlcyc7XG5cbmltcG9ydCB7IEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2Jhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IGdldENvbXBvbmVudERlZmluZWQsIGdldFVuaXF1ZUlkIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBvcnRhbFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wb3J0YWwuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3JlbmRlclVsdlZpZXdlcl0nXG59KVxuZXhwb3J0IGNsYXNzIFJlbmRlclVsdlZpZXdlckRpcmVjdGl2ZSBleHRlbmRzIEJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIG1hc2s6IGJvb2xlYW47XG4gICAgQElucHV0KCdyZW5kZXJVbHZWaWV3ZXInKSB2aWV3ZXI7XG4gICAgY29tcG9uZW50OiBDb21wb25lbnRSZWY8YW55PjtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIF9wb3J0YWxTZXJ2aWNlOiBQb3J0YWxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF92Y3I6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfcmVuZGVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy52aWV3ZXI7XG4gICAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21VaVNldHRpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LlNldHRpbmcsICdDbGFzc05hbWVzLkN1c3RvbVVpJywgbnVsbCk7XG4gICAgICAgICAgICBjb25zdCB7IG1vZHVsZU5hbWUsIG1vZHVsZVBhdGgsIGNvbXBvbmVudE5hbWUsIHNlbGVjdG9yIH0gPSBnZXRDb21wb25lbnREZWZpbmVkKGNvbnRleHQsIGN1c3RvbVVpU2V0dGluZyk7XG4gICAgICAgICAgICB0aGlzLl9wb3J0YWxTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldENvbXBvbmVudChtb2R1bGVOYW1lLCBtb2R1bGVQYXRoLCBjb21wb25lbnROYW1lLCBzZWxlY3RvciwgdGhpcy5faW5qZWN0b3IpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICAgICAgZGVsYXkoMCksXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuaWQgPSBnZXRVbmlxdWVJZCg0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBvbmVudC5pbnN0YW5jZS5tb0RhdGFMaXN0PUJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsJ21vRGF0YUxpc3QnLFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29udHJvbFVpID0gY29tcG9uZW50Lmluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGV4dC52aWV3ZXIgPSBjb21wb25lbnQuaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Zjci5pbnNlcnQoY29tcG9uZW50Lmhvc3RWaWV3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { Directive, Input, HostListener, EventEmitter, Output } from '@angular/core';
|
|
2
|
+
import { fromEvent } from 'rxjs';
|
|
3
|
+
import { takeUntil } from 'rxjs/operators';
|
|
4
|
+
import { BaseDirective } from './base.directive';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class TableResizerDirective extends BaseDirective {
|
|
7
|
+
constructor(el, renderer) {
|
|
8
|
+
super();
|
|
9
|
+
this.el = el;
|
|
10
|
+
this.renderer = renderer;
|
|
11
|
+
this.columnResized = new EventEmitter();
|
|
12
|
+
fromEvent(document, 'mouseup')
|
|
13
|
+
.pipe(takeUntil(this._onDestroy$))
|
|
14
|
+
.subscribe(() => {
|
|
15
|
+
this._mouseUp();
|
|
16
|
+
});
|
|
17
|
+
fromEvent(document, 'mousemove')
|
|
18
|
+
.pipe(takeUntil(this._onDestroy$))
|
|
19
|
+
.subscribe((e) => {
|
|
20
|
+
this._mouseMove(e);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
get _table() {
|
|
24
|
+
return this.el.nativeElement;
|
|
25
|
+
}
|
|
26
|
+
moseDown(e) {
|
|
27
|
+
this._mouseDown(e);
|
|
28
|
+
}
|
|
29
|
+
moseMove(e) {
|
|
30
|
+
this._mouseMove(e);
|
|
31
|
+
}
|
|
32
|
+
ngAfterViewInit() {
|
|
33
|
+
if (this.rowResizer) {
|
|
34
|
+
this._putBodyCellsContentIntoDiv();
|
|
35
|
+
}
|
|
36
|
+
if (this.rowResizer) {
|
|
37
|
+
this._addRowsResizer();
|
|
38
|
+
}
|
|
39
|
+
this._setTableMode(this.fitWidth);
|
|
40
|
+
}
|
|
41
|
+
ngOnChanges(changes) {
|
|
42
|
+
super.ngOnChanges(changes);
|
|
43
|
+
const { fitWidth } = changes;
|
|
44
|
+
if (this.enableResizing && fitWidth && !fitWidth.firstChange) {
|
|
45
|
+
const newFitWidth = fitWidth.currentValue;
|
|
46
|
+
this._setTableMode(newFitWidth);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
_initializeTable() {
|
|
50
|
+
this._initTable();
|
|
51
|
+
this._setTableMode(this.fitWidth);
|
|
52
|
+
}
|
|
53
|
+
_resizeRow(event) {
|
|
54
|
+
this._currentResizer = "Row" /* Resizer.Row */;
|
|
55
|
+
const elementFromPoint = document.elementFromPoint(event.pageX, event.pageY);
|
|
56
|
+
this._currentCell = elementFromPoint?.closest('td');
|
|
57
|
+
this._startY = event.pageY;
|
|
58
|
+
this._currentRowHeight = this._currentCell?.clientHeight || 0;
|
|
59
|
+
}
|
|
60
|
+
_resizeColumn(event) {
|
|
61
|
+
if (!this.fitWidth) {
|
|
62
|
+
this._setTableFreeSize();
|
|
63
|
+
}
|
|
64
|
+
this._currentResizer = "Column" /* Resizer.Column */;
|
|
65
|
+
const elementFromPoint = document.elementFromPoint(event.pageX, event.pageY);
|
|
66
|
+
this._currentCell = elementFromPoint?.closest('th');
|
|
67
|
+
this._startX = event.pageX;
|
|
68
|
+
this._currentColumnWidth = this._currentCell?.clientWidth || 0;
|
|
69
|
+
this._sideCell = this._getSideCell(this._currentCell);
|
|
70
|
+
this._sideColumnWidth = this._sideCell?.clientWidth;
|
|
71
|
+
}
|
|
72
|
+
_addRowsResizer() {
|
|
73
|
+
const table = this._table;
|
|
74
|
+
const rowsLabel = table.querySelectorAll('.vertical-label');
|
|
75
|
+
rowsLabel.forEach((cell) => {
|
|
76
|
+
const rowResizer = this.renderer.createElement('div');
|
|
77
|
+
this.renderer.appendChild(cell, rowResizer);
|
|
78
|
+
rowResizer.setAttribute('class', 'row-resizer');
|
|
79
|
+
this.renderer.setStyle(cell, 'height', 'inherit');
|
|
80
|
+
this.renderer.setStyle(cell, 'position', 'relative');
|
|
81
|
+
this.renderer.setAttribute(rowResizer, 'style', 'cursor: row-resize; height:8px; position:absolute;bottom:0;left:0;right:0');
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
_putBodyCellsContentIntoDiv() {
|
|
85
|
+
const table = this._table;
|
|
86
|
+
const bodyCells = table.querySelectorAll('body td:not(.vertical-label)');
|
|
87
|
+
bodyCells.forEach((cell) => {
|
|
88
|
+
const contentContainer = this.renderer.createElement('div');
|
|
89
|
+
cell.children.forEach((child) => {
|
|
90
|
+
contentContainer.appendChild(child);
|
|
91
|
+
});
|
|
92
|
+
this.renderer.setStyle(cell, 'overflow', 'hidden');
|
|
93
|
+
this.renderer.setStyle(cell, 'height', 'inherit');
|
|
94
|
+
this.renderer.setStyle(contentContainer, 'height', 'inherit');
|
|
95
|
+
this.renderer.setStyle(contentContainer, 'display', 'block');
|
|
96
|
+
cell.appendChild(contentContainer);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
_getSideCell(currentCell) {
|
|
100
|
+
const currentRow = this._currentCell.parentNode?.children;
|
|
101
|
+
if (currentRow) {
|
|
102
|
+
const cellIndexInRow = Array.from(currentRow).indexOf(currentCell);
|
|
103
|
+
return Array.from(currentRow)[cellIndexInRow + 1];
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
_changeWidth(fitWidth, sideCell, currentCell, changedCurrentCellWidth, changedSideCellWidth) {
|
|
108
|
+
if (fitWidth) {
|
|
109
|
+
if (sideCell && changedCurrentCellWidth >= this.minWidth && changedSideCellWidth >= this.minWidth) {
|
|
110
|
+
this.renderer.setStyle(sideCell, 'width', changedSideCellWidth + 'px');
|
|
111
|
+
this.renderer.setStyle(sideCell, 'min-width', changedSideCellWidth + 'px');
|
|
112
|
+
this.renderer.setStyle(currentCell, 'width', changedCurrentCellWidth + 'px');
|
|
113
|
+
this.renderer.setStyle(currentCell, 'min-width', changedCurrentCellWidth + 'px');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else if (changedCurrentCellWidth >= this.minWidth) {
|
|
117
|
+
this.renderer.setStyle(currentCell, 'width', changedCurrentCellWidth + 'px');
|
|
118
|
+
this.renderer.setStyle(currentCell, 'min-width', changedCurrentCellWidth + 'px');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
_changeHeight(currentCell, changedHeight, minHeight) {
|
|
122
|
+
if (changedHeight > minHeight) {
|
|
123
|
+
this.renderer.setStyle(currentCell.closest('tr'), 'height', changedHeight + 'px');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
_initTable() {
|
|
127
|
+
if (this._isInitTable) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
this._isInitTable = true;
|
|
131
|
+
const table = this._table;
|
|
132
|
+
const parent = table.parentElement;
|
|
133
|
+
this.renderer.setStyle(parent, 'overflow-x', this.fitWidth ? 'hidden' : 'auto');
|
|
134
|
+
// this.renderer.setStyle(parent, 'overflow-y', 'auto');
|
|
135
|
+
this.renderer.setStyle(parent, 'width', '100%');
|
|
136
|
+
}
|
|
137
|
+
_setTableMode(isFitWidth) {
|
|
138
|
+
if (isFitWidth) {
|
|
139
|
+
this._setTableFitSize();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
_setTableFreeSize() {
|
|
143
|
+
const table = this._table;
|
|
144
|
+
this.renderer.setStyle(table, 'width', this.containerWidth + 'px');
|
|
145
|
+
this.renderer.setStyle(table, 'max-width', 'unset');
|
|
146
|
+
this.renderer.setStyle(table, 'min-width', this.containerWidth + 'px');
|
|
147
|
+
const headCells = table.querySelectorAll('th');
|
|
148
|
+
headCells.forEach((cell) => {
|
|
149
|
+
const width = cell.offsetWidth;
|
|
150
|
+
this.renderer.setStyle(cell, 'width', width + 'px');
|
|
151
|
+
this.renderer.setStyle(cell, 'min-width', width + 'px');
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
_setTableFitSize() {
|
|
155
|
+
const table = this._table;
|
|
156
|
+
this.renderer.setStyle(table, 'width', '100%');
|
|
157
|
+
this.renderer.setStyle(table, 'max-width', '100%');
|
|
158
|
+
}
|
|
159
|
+
_mouseDown(e) {
|
|
160
|
+
if (e.srcElement.className === 'row-resizer') {
|
|
161
|
+
this._resizeRow(e);
|
|
162
|
+
this.renderer.setStyle(this.el.nativeElement, 'cursor', 'row-resize');
|
|
163
|
+
}
|
|
164
|
+
else if (e.srcElement.className === 'column-resizer') {
|
|
165
|
+
this._resizeColumn(e);
|
|
166
|
+
this.renderer.setStyle(this.el.nativeElement, 'cursor', 'col-resize');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
_mouseMove(e) {
|
|
170
|
+
if (e.buttons !== 0) {
|
|
171
|
+
if (this._currentResizer === "Column" /* Resizer.Column */) {
|
|
172
|
+
if (!this._isInitTable) {
|
|
173
|
+
this._initializeTable();
|
|
174
|
+
}
|
|
175
|
+
const endX = e.pageX;
|
|
176
|
+
const dx = endX - this._startX;
|
|
177
|
+
const changedCurrentCellWidth = this._currentColumnWidth - dx;
|
|
178
|
+
const changedSideCellWidth = this._sideColumnWidth + dx;
|
|
179
|
+
this._changeWidth(this.fitWidth, this._sideCell, this._currentCell, changedCurrentCellWidth, changedSideCellWidth);
|
|
180
|
+
}
|
|
181
|
+
else if (this._currentResizer === "Row" /* Resizer.Row */) {
|
|
182
|
+
const endY = e.pageY;
|
|
183
|
+
const dy = endY - this._startY;
|
|
184
|
+
const changedCurrentRowHeight = this._currentRowHeight + dy;
|
|
185
|
+
this._changeHeight(this._currentCell, changedCurrentRowHeight, this.minHeight);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
_mouseUp() {
|
|
190
|
+
if (this._currentResizer) {
|
|
191
|
+
const table = this.el.nativeElement;
|
|
192
|
+
const headers = table.querySelectorAll('th');
|
|
193
|
+
const columnResized = [];
|
|
194
|
+
for (let i = 0; i < headers.length; i++) {
|
|
195
|
+
const header = headers[i];
|
|
196
|
+
const columnName = header.attributes['columnname']?.value;
|
|
197
|
+
if (typeof columnName !== 'undefined') {
|
|
198
|
+
columnResized.push({ name: columnName, width: header.offsetWidth });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
this.columnResized.emit(columnResized);
|
|
202
|
+
}
|
|
203
|
+
this._currentResizer = null;
|
|
204
|
+
this.renderer.setStyle(this.el.nativeElement, 'cursor', 'default');
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
TableResizerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TableResizerDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
208
|
+
TableResizerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.7", type: TableResizerDirective, selector: "[tableResizer]", inputs: { fitWidth: "fitWidth", minWidth: "minWidth", minHeight: "minHeight", containerWidth: "containerWidth", rowResizer: "rowResizer", enableResizing: "enableResizing" }, outputs: { columnResized: "columnResized" }, host: { listeners: { "mousedown": "moseDown($event)", "mousemove": "moseMove($event)" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
209
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TableResizerDirective, decorators: [{
|
|
210
|
+
type: Directive,
|
|
211
|
+
args: [{
|
|
212
|
+
selector: '[tableResizer]'
|
|
213
|
+
}]
|
|
214
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { fitWidth: [{
|
|
215
|
+
type: Input
|
|
216
|
+
}], minWidth: [{
|
|
217
|
+
type: Input
|
|
218
|
+
}], minHeight: [{
|
|
219
|
+
type: Input
|
|
220
|
+
}], containerWidth: [{
|
|
221
|
+
type: Input
|
|
222
|
+
}], rowResizer: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}], enableResizing: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], columnResized: [{
|
|
227
|
+
type: Output
|
|
228
|
+
}], moseDown: [{
|
|
229
|
+
type: HostListener,
|
|
230
|
+
args: ['mousedown', ['$event']]
|
|
231
|
+
}], moseMove: [{
|
|
232
|
+
type: HostListener,
|
|
233
|
+
args: ['mousemove', ['$event']]
|
|
234
|
+
}] } });
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcmVzaXplci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvdGFibGUtcmVzaXplci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxLQUFLLEVBRUwsWUFBWSxFQU1aLFlBQVksRUFDWixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQVNqRCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsYUFBYTtJQWlCcEQsWUFBb0IsRUFBYyxFQUFVLFFBQW1CO1FBQzNELEtBQUssRUFBRSxDQUFDO1FBRFEsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFWckQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBNEIsQ0FBQztRQVluRSxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQzthQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNqQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsU0FBUyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUM7YUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDakMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FB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QUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2lCQUN2RTthQUNKO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDMUM7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkUsQ0FBQzs7a0hBdFBRLHFCQUFxQjtzR0FBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBSGpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtpQkFDN0I7eUhBRVksUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksYUFBYTtzQkFBdEIsTUFBTTtnQkE0QlAsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNckMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29sdW1uUmVzaXplZEFyZ3MgfSBmcm9tICcuLi9hYnN0cmFjdC1jbGFzc2VzJztcbmltcG9ydCB7IEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2Jhc2UuZGlyZWN0aXZlJztcbmNvbnN0IGVudW0gUmVzaXplciB7XG4gICAgUm93ID0gJ1JvdycsXG4gICAgQ29sdW1uID0gJ0NvbHVtbidcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdGFibGVSZXNpemVyXSdcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVSZXNpemVyRGlyZWN0aXZlIGV4dGVuZHMgQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpIGZpdFdpZHRoOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIG1pbldpZHRoO1xuICAgIEBJbnB1dCgpIG1pbkhlaWdodDtcbiAgICBASW5wdXQoKSBjb250YWluZXJXaWR0aDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHJvd1Jlc2l6ZXI6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZW5hYmxlUmVzaXppbmc6IGJvb2xlYW47XG4gICAgQE91dHB1dCgpIGNvbHVtblJlc2l6ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PENvbHVtblJlc2l6ZWRBcmdzPj4oKTtcbiAgICBwcml2YXRlIF9jdXJyZW50Q2VsbDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBfc2lkZUNlbGw7XG4gICAgcHJpdmF0ZSBfc3RhcnRYO1xuICAgIHByaXZhdGUgX3N0YXJ0WTtcbiAgICBwcml2YXRlIF9jdXJyZW50Q29sdW1uV2lkdGg7XG4gICAgcHJpdmF0ZSBfc2lkZUNvbHVtbldpZHRoO1xuICAgIHByaXZhdGUgX2N1cnJlbnRSb3dIZWlnaHQ7XG4gICAgcHJpdmF0ZSBfY3VycmVudFJlc2l6ZXI6IFJlc2l6ZXIgfCBudWxsO1xuICAgIHByaXZhdGUgX2lzSW5pdFRhYmxlOiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZXVwJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdXNlVXAoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZW1vdmUnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdXNlTW92ZShlKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIGdldCBfdGFibGUoKTogSFRNTFRhYmxlRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRhYmxlRWxlbWVudDtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICAgIG1vc2VEb3duKGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbW91c2VEb3duKGUpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlbW92ZScsIFsnJGV2ZW50J10pXG4gICAgbW9zZU1vdmUoZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tb3VzZU1vdmUoZSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yb3dSZXNpemVyKSB7XG4gICAgICAgICAgICB0aGlzLl9wdXRCb2R5Q2VsbHNDb250ZW50SW50b0RpdigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvd1Jlc2l6ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2FkZFJvd3NSZXNpemVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0VGFibGVNb2RlKHRoaXMuZml0V2lkdGgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgIGNvbnN0IHsgZml0V2lkdGggfSA9IGNoYW5nZXM7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVJlc2l6aW5nICYmIGZpdFdpZHRoICYmICFmaXRXaWR0aC5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgbmV3Rml0V2lkdGggPSBmaXRXaWR0aC5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9zZXRUYWJsZU1vZGUobmV3Rml0V2lkdGgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgX2luaXRpYWxpemVUYWJsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdFRhYmxlKCk7XG4gICAgICAgIHRoaXMuX3NldFRhYmxlTW9kZSh0aGlzLmZpdFdpZHRoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVzaXplUm93KGV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRSZXNpemVyID0gUmVzaXplci5Sb3c7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRGcm9tUG9pbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRDZWxsID0gZWxlbWVudEZyb21Qb2ludD8uY2xvc2VzdCgndGQnKSBhcyBIVE1MVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgdGhpcy5fc3RhcnRZID0gZXZlbnQucGFnZVk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRSb3dIZWlnaHQgPSB0aGlzLl9jdXJyZW50Q2VsbD8uY2xpZW50SGVpZ2h0IHx8IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzaXplQ29sdW1uKGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5maXRXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VGFibGVGcmVlU2l6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJlbnRSZXNpemVyID0gUmVzaXplci5Db2x1bW47XG4gICAgICAgIGNvbnN0IGVsZW1lbnRGcm9tUG9pbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRDZWxsID0gZWxlbWVudEZyb21Qb2ludD8uY2xvc2VzdCgndGgnKSBhcyBIVE1MVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgdGhpcy5fc3RhcnRYID0gZXZlbnQucGFnZVg7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRDb2x1bW5XaWR0aCA9IHRoaXMuX2N1cnJlbnRDZWxsPy5jbGllbnRXaWR0aCB8fCAwO1xuICAgICAgICB0aGlzLl9zaWRlQ2VsbCA9IHRoaXMuX2dldFNpZGVDZWxsKHRoaXMuX2N1cnJlbnRDZWxsKTtcbiAgICAgICAgdGhpcy5fc2lkZUNvbHVtbldpZHRoID0gdGhpcy5fc2lkZUNlbGw/LmNsaWVudFdpZHRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FkZFJvd3NSZXNpemVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuX3RhYmxlO1xuICAgICAgICBjb25zdCByb3dzTGFiZWwgPSB0YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCcudmVydGljYWwtbGFiZWwnKTtcbiAgICAgICAgcm93c0xhYmVsLmZvckVhY2goKGNlbGwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1Jlc2l6ZXIgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGNlbGwsIHJvd1Jlc2l6ZXIpO1xuXG4gICAgICAgICAgICByb3dSZXNpemVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncm93LXJlc2l6ZXInKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2VsbCwgJ2hlaWdodCcsICdpbmhlcml0Jyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNlbGwsICdwb3NpdGlvbicsICdyZWxhdGl2ZScpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgcm93UmVzaXplcixcbiAgICAgICAgICAgICAgICAnc3R5bGUnLFxuICAgICAgICAgICAgICAgICdjdXJzb3I6IHJvdy1yZXNpemU7IGhlaWdodDo4cHg7IHBvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHV0Qm9keUNlbGxzQ29udGVudEludG9EaXYoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fdGFibGUgYXMgYW55O1xuICAgICAgICBjb25zdCBib2R5Q2VsbHMgPSB0YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCdib2R5IHRkOm5vdCgudmVydGljYWwtbGFiZWwpJyk7XG4gICAgICAgIGJvZHlDZWxscy5mb3JFYWNoKChjZWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50Q29udGFpbmVyID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNlbGwuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZW50Q29udGFpbmVyLmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjZWxsLCAnb3ZlcmZsb3cnLCAnaGlkZGVuJyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNlbGwsICdoZWlnaHQnLCAnaW5oZXJpdCcpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjb250ZW50Q29udGFpbmVyLCAnaGVpZ2h0JywgJ2luaGVyaXQnKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY29udGVudENvbnRhaW5lciwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcblxuICAgICAgICAgICAgY2VsbC5hcHBlbmRDaGlsZChjb250ZW50Q29udGFpbmVyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0U2lkZUNlbGwoY3VycmVudENlbGwpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSb3cgPSB0aGlzLl9jdXJyZW50Q2VsbC5wYXJlbnROb2RlPy5jaGlsZHJlbjtcbiAgICAgICAgaWYgKGN1cnJlbnRSb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxJbmRleEluUm93ID0gQXJyYXkuZnJvbShjdXJyZW50Um93KS5pbmRleE9mKGN1cnJlbnRDZWxsKTtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKGN1cnJlbnRSb3cpW2NlbGxJbmRleEluUm93ICsgMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hhbmdlV2lkdGgoXG4gICAgICAgIGZpdFdpZHRoOiBib29sZWFuLFxuICAgICAgICBzaWRlQ2VsbCxcbiAgICAgICAgY3VycmVudENlbGwsXG4gICAgICAgIGNoYW5nZWRDdXJyZW50Q2VsbFdpZHRoLFxuICAgICAgICBjaGFuZ2VkU2lkZUNlbGxXaWR0aFxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoZml0V2lkdGgpIHtcbiAgICAgICAgICAgIGlmIChzaWRlQ2VsbCAmJiBjaGFuZ2VkQ3VycmVudENlbGxXaWR0aCA+PSB0aGlzLm1pbldpZHRoICYmIGNoYW5nZWRTaWRlQ2VsbFdpZHRoID49IHRoaXMubWluV2lkdGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNpZGVDZWxsLCAnd2lkdGgnLCBjaGFuZ2VkU2lkZUNlbGxXaWR0aCArICdweCcpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc2lkZUNlbGwsICdtaW4td2lkdGgnLCBjaGFuZ2VkU2lkZUNlbGxXaWR0aCArICdweCcpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY3VycmVudENlbGwsICd3aWR0aCcsIGNoYW5nZWRDdXJyZW50Q2VsbFdpZHRoICsgJ3B4Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjdXJyZW50Q2VsbCwgJ21pbi13aWR0aCcsIGNoYW5nZWRDdXJyZW50Q2VsbFdpZHRoICsgJ3B4Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlZEN1cnJlbnRDZWxsV2lkdGggPj0gdGhpcy5taW5XaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjdXJyZW50Q2VsbCwgJ3dpZHRoJywgY2hhbmdlZEN1cnJlbnRDZWxsV2lkdGggKyAncHgnKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY3VycmVudENlbGwsICdtaW4td2lkdGgnLCBjaGFuZ2VkQ3VycmVudENlbGxXaWR0aCArICdweCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hhbmdlSGVpZ2h0KGN1cnJlbnRDZWxsLCBjaGFuZ2VkSGVpZ2h0LCBtaW5IZWlnaHQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZWRIZWlnaHQgPiBtaW5IZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY3VycmVudENlbGwuY2xvc2VzdCgndHInKSwgJ2hlaWdodCcsIGNoYW5nZWRIZWlnaHQgKyAncHgnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIF9pbml0VGFibGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRUYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzSW5pdFRhYmxlID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgdGFibGU6IEhUTUxUYWJsZUVsZW1lbnQgPSB0aGlzLl90YWJsZTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGFibGUucGFyZW50RWxlbWVudDtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShwYXJlbnQsICdvdmVyZmxvdy14JywgdGhpcy5maXRXaWR0aCA/ICdoaWRkZW4nIDogJ2F1dG8nKTtcbiAgICAgICAgLy8gdGhpcy5yZW5kZXJlci5zZXRTdHlsZShwYXJlbnQsICdvdmVyZmxvdy15JywgJ2F1dG8nKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShwYXJlbnQsICd3aWR0aCcsICcxMDAlJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0VGFibGVNb2RlKGlzRml0V2lkdGgpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzRml0V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFRhYmxlRml0U2l6ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0VGFibGVGcmVlU2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLl90YWJsZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0YWJsZSwgJ3dpZHRoJywgdGhpcy5jb250YWluZXJXaWR0aCArICdweCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRhYmxlLCAnbWF4LXdpZHRoJywgJ3Vuc2V0Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGFibGUsICdtaW4td2lkdGgnLCB0aGlzLmNvbnRhaW5lcldpZHRoICsgJ3B4Jyk7XG4gICAgICAgIGNvbnN0IGhlYWRDZWxscyA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoJyk7XG4gICAgICAgIGhlYWRDZWxscy5mb3JFYWNoKChjZWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGNlbGwub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNlbGwsICd3aWR0aCcsIHdpZHRoICsgJ3B4Jyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNlbGwsICdtaW4td2lkdGgnLCB3aWR0aCArICdweCcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRUYWJsZUZpdFNpemUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fdGFibGU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGFibGUsICd3aWR0aCcsICcxMDAlJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGFibGUsICdtYXgtd2lkdGgnLCAnMTAwJScpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX21vdXNlRG93bihlKTogdm9pZCB7XG4gICAgICAgIGlmIChlLnNyY0VsZW1lbnQuY2xhc3NOYW1lID09PSAncm93LXJlc2l6ZXInKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNpemVSb3coZSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ2N1cnNvcicsICdyb3ctcmVzaXplJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5zcmNFbGVtZW50LmNsYXNzTmFtZSA9PT0gJ2NvbHVtbi1yZXNpemVyJykge1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplQ29sdW1uKGUpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdjdXJzb3InLCAnY29sLXJlc2l6ZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbW91c2VNb3ZlKGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKGUuYnV0dG9ucyAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRSZXNpemVyID09PSBSZXNpemVyLkNvbHVtbikge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5faXNJbml0VGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZVRhYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFggPSBlLnBhZ2VYO1xuICAgICAgICAgICAgICAgIGNvbnN0IGR4ID0gZW5kWCAtIHRoaXMuX3N0YXJ0WDtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFuZ2VkQ3VycmVudENlbGxXaWR0aCA9IHRoaXMuX2N1cnJlbnRDb2x1bW5XaWR0aCAtIGR4O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZWRTaWRlQ2VsbFdpZHRoID0gdGhpcy5fc2lkZUNvbHVtbldpZHRoICsgZHg7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlV2lkdGgoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZml0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZGVDZWxsLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2VsbCxcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZEN1cnJlbnRDZWxsV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWRTaWRlQ2VsbFdpZHRoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY3VycmVudFJlc2l6ZXIgPT09IFJlc2l6ZXIuUm93KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kWSA9IGUucGFnZVk7XG4gICAgICAgICAgICAgICAgY29uc3QgZHkgPSBlbmRZIC0gdGhpcy5fc3RhcnRZO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZWRDdXJyZW50Um93SGVpZ2h0ID0gdGhpcy5fY3VycmVudFJvd0hlaWdodCArIGR5O1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUhlaWdodCh0aGlzLl9jdXJyZW50Q2VsbCwgY2hhbmdlZEN1cnJlbnRSb3dIZWlnaHQsIHRoaXMubWluSGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX21vdXNlVXAoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50UmVzaXplcikge1xuICAgICAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gdGFibGUucXVlcnlTZWxlY3RvckFsbCgndGgnKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblJlc2l6ZWQ6IENvbHVtblJlc2l6ZWRBcmdzW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IGhlYWRlcnNbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uTmFtZSA9IGhlYWRlci5hdHRyaWJ1dGVzWydjb2x1bW5uYW1lJ10/LnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29sdW1uTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uUmVzaXplZC5wdXNoKHsgbmFtZTogY29sdW1uTmFtZSwgd2lkdGg6IGhlYWRlci5vZmZzZXRXaWR0aCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbHVtblJlc2l6ZWQuZW1pdChjb2x1bW5SZXNpemVkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyZW50UmVzaXplciA9IG51bGw7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnY3Vyc29yJywgJ2RlZmF1bHQnKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
|
|
2
|
+
import { BaseDirective } from './base.directive';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class UlvCommandDirective extends BaseDirective {
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
this.commandClick = new EventEmitter();
|
|
8
|
+
}
|
|
9
|
+
onClick(event) {
|
|
10
|
+
const button = this.ulvCommandHandler;
|
|
11
|
+
event.stopPropagation();
|
|
12
|
+
event.preventDefault();
|
|
13
|
+
this.commandClick.emit(button);
|
|
14
|
+
setTimeout(() => {
|
|
15
|
+
// add settimeout because we need select row before execute row
|
|
16
|
+
if (button.Command && button.Command.Handler) {
|
|
17
|
+
button.Command.Handler(button);
|
|
18
|
+
}
|
|
19
|
+
else if (button.handler) {
|
|
20
|
+
button.handler.bind(button.scope)(button);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
UlvCommandDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UlvCommandDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
27
|
+
UlvCommandDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.7", type: UlvCommandDirective, selector: "[ulvCommandHandler]", inputs: { ulvCommandHandler: "ulvCommandHandler" }, outputs: { commandClick: "commandClick" }, host: { listeners: { "click": "onClick($event)" } }, usesInheritance: true, ngImport: i0 });
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UlvCommandDirective, decorators: [{
|
|
29
|
+
type: Directive,
|
|
30
|
+
args: [{
|
|
31
|
+
selector: '[ulvCommandHandler]'
|
|
32
|
+
}]
|
|
33
|
+
}], ctorParameters: function () { return []; }, propDecorators: { ulvCommandHandler: [{
|
|
34
|
+
type: Input
|
|
35
|
+
}], commandClick: [{
|
|
36
|
+
type: Output
|
|
37
|
+
}], onClick: [{
|
|
38
|
+
type: HostListener,
|
|
39
|
+
args: ['click', ['$event']]
|
|
40
|
+
}] } });
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWx2LWNvbW1hbmQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL3Vsdi1jb21tYW5kLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBS2pELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxhQUFhO0lBR2xEO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFGRixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFHNUMsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFVO1FBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ3RDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLCtEQUErRDtZQUMvRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7Z0JBQzFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2xDO2lCQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzdDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOztnSEF0QlEsbUJBQW1CO29HQUFuQixtQkFBbUI7MkZBQW5CLG1CQUFtQjtrQkFIL0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUscUJBQXFCO2lCQUNsQzswRUFFWSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTTtnQkFLUCxPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vYmFzZS5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t1bHZDb21tYW5kSGFuZGxlcl0nXG59KVxuZXhwb3J0IGNsYXNzIFVsdkNvbW1hbmREaXJlY3RpdmUgZXh0ZW5kcyBCYXNlRGlyZWN0aXZlIHtcbiAgICBASW5wdXQoKSB1bHZDb21tYW5kSGFuZGxlcjogYW55O1xuICAgIEBPdXRwdXQoKSBjb21tYW5kQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBvbkNsaWNrKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgYnV0dG9uID0gdGhpcy51bHZDb21tYW5kSGFuZGxlcjtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY29tbWFuZENsaWNrLmVtaXQoYnV0dG9uKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBhZGQgc2V0dGltZW91dCBiZWNhdXNlIHdlIG5lZWQgc2VsZWN0IHJvdyBiZWZvcmUgZXhlY3V0ZSByb3dcbiAgICAgICAgICAgIGlmIChidXR0b24uQ29tbWFuZCAmJiBidXR0b24uQ29tbWFuZC5IYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgYnV0dG9uLkNvbW1hbmQuSGFuZGxlcihidXR0b24pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChidXR0b24uaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5oYW5kbGVyLmJpbmQoYnV0dG9uLnNjb3BlKShidXR0b24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { takeUntil } from 'rxjs/operators';
|
|
4
|
+
import { BaseDirective } from './base.directive';
|
|
5
|
+
import { fromIntersectionObserver } from '../from-intersection-observer';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class UntilInViewDirective extends BaseDirective {
|
|
8
|
+
constructor(_templateRef, _vcr, _cdr) {
|
|
9
|
+
super();
|
|
10
|
+
this._templateRef = _templateRef;
|
|
11
|
+
this._vcr = _vcr;
|
|
12
|
+
this._cdr = _cdr;
|
|
13
|
+
this.intersectionDebounce = 100;
|
|
14
|
+
this.viewed$ = new Subject();
|
|
15
|
+
}
|
|
16
|
+
viewed() {
|
|
17
|
+
this.viewed$.next();
|
|
18
|
+
this._vcr.createEmbeddedView(this._templateRef);
|
|
19
|
+
this._cdr.detectChanges();
|
|
20
|
+
}
|
|
21
|
+
ngOnInit() {
|
|
22
|
+
super.ngOnInit();
|
|
23
|
+
const element = this.untilInView.nativeElement;
|
|
24
|
+
const config = {
|
|
25
|
+
root: null,
|
|
26
|
+
rootMargin: '0px',
|
|
27
|
+
threshold: 0
|
|
28
|
+
};
|
|
29
|
+
fromIntersectionObserver(element, config, this.intersectionDebounce)
|
|
30
|
+
.pipe(takeUntil(this.viewed$), takeUntil(this._onDestroy$))
|
|
31
|
+
.subscribe(() => {
|
|
32
|
+
this.viewed();
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
ngOnDestroy() {
|
|
36
|
+
this._onDestroy$.next();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
UntilInViewDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UntilInViewDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
40
|
+
UntilInViewDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.7", type: UntilInViewDirective, selector: "[untilInView]", inputs: { untilInView: "untilInView", intersectionDebounce: "intersectionDebounce" }, usesInheritance: true, ngImport: i0 });
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UntilInViewDirective, decorators: [{
|
|
42
|
+
type: Directive,
|
|
43
|
+
args: [{
|
|
44
|
+
selector: '[untilInView]'
|
|
45
|
+
}]
|
|
46
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { untilInView: [{
|
|
47
|
+
type: Input
|
|
48
|
+
}], intersectionDebounce: [{
|
|
49
|
+
type: Input
|
|
50
|
+
}] } });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW50aWwtaW52aWV3LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLW5vdmluLXJheS1jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy91bnRpbC1pbnZpZXcuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsS0FBSyxFQUtSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFLekUsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGFBQWE7SUFJbkQsWUFDWSxZQUE4QixFQUM5QixJQUFzQixFQUN0QixJQUF1QjtRQUUvQixLQUFLLEVBQUUsQ0FBQztRQUpBLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtRQUM5QixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUwxQix5QkFBb0IsR0FBRyxHQUFHLENBQUM7UUFDNUIsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFPdEMsQ0FBQztJQUVNLE1BQU07UUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDL0MsTUFBTSxNQUFNLEdBQUc7WUFDWCxJQUFJLEVBQUUsSUFBSTtZQUNWLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxDQUFDO1NBQ2YsQ0FBQztRQUNGLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDO2FBQy9ELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDMUQsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDOztpSEFuQ1Esb0JBQW9CO3FHQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFIaEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZUFBZTtpQkFDNUI7aUtBRVksV0FBVztzQkFBbkIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgZnJvbUludGVyc2VjdGlvbk9ic2VydmVyIH0gZnJvbSAnLi4vZnJvbS1pbnRlcnNlY3Rpb24tb2JzZXJ2ZXInO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t1bnRpbEluVmlld10nXG59KVxuZXhwb3J0IGNsYXNzIFVudGlsSW5WaWV3RGlyZWN0aXZlIGV4dGVuZHMgQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSB1bnRpbEluVmlldzogRWxlbWVudFJlZjtcbiAgICBASW5wdXQoKSBpbnRlcnNlY3Rpb25EZWJvdW5jZSA9IDEwMDtcbiAgICBwcml2YXRlIHZpZXdlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF90ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICAgICAgcHJpdmF0ZSBfdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHZpZXdlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3ZWQkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fdmNyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZik7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnVudGlsSW5WaWV3Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgICAgIHJvb3Q6IG51bGwsXG4gICAgICAgICAgICByb290TWFyZ2luOiAnMHB4JyxcbiAgICAgICAgICAgIHRocmVzaG9sZDogMFxuICAgICAgICB9O1xuICAgICAgICBmcm9tSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZWxlbWVudCwgY29uZmlnLCB0aGlzLmludGVyc2VjdGlvbkRlYm91bmNlKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudmlld2VkJCksIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld2VkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { takeUntil, tap } from 'rxjs';
|
|
3
|
+
import { BaseComponent } from '../base.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../services";
|
|
6
|
+
export class BaseDynamicComponent extends BaseComponent {
|
|
7
|
+
constructor(_portalService, _injector) {
|
|
8
|
+
super();
|
|
9
|
+
this._portalService = _portalService;
|
|
10
|
+
this._injector = _injector;
|
|
11
|
+
this.events = new EventEmitter();
|
|
12
|
+
}
|
|
13
|
+
async ngOnInit() {
|
|
14
|
+
super.ngOnInit();
|
|
15
|
+
this._renderComponentInstance();
|
|
16
|
+
}
|
|
17
|
+
ngOnChanges(changes) {
|
|
18
|
+
if (!this._component?.instance) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
// const changesKey = Object.keys(changes);
|
|
22
|
+
// changesKey
|
|
23
|
+
// .filter((c) => !changes[c].firstChange)
|
|
24
|
+
// .forEach((c) => (this._component.instance[c] = changes[c].currentValue));
|
|
25
|
+
this._component.instance.ngOnChanges(changes);
|
|
26
|
+
}
|
|
27
|
+
ngOnDestroy() {
|
|
28
|
+
this._destroyComponentInstance();
|
|
29
|
+
}
|
|
30
|
+
async _renderComponentInstance() {
|
|
31
|
+
this._destroyComponentInstance();
|
|
32
|
+
if (!this.component) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const { Module, ModuleFileName, Name, Selector } = this.component;
|
|
36
|
+
this._portalService
|
|
37
|
+
.getComponent(Module, ModuleFileName, Name, Selector, this._injector)
|
|
38
|
+
.pipe(takeUntil(this._onDestroy$))
|
|
39
|
+
.subscribe((componentRef) => {
|
|
40
|
+
this._container.insert(componentRef.hostView);
|
|
41
|
+
this._component = componentRef;
|
|
42
|
+
if (this.component.Parameters) {
|
|
43
|
+
this._component.instance.parameters = this.component.Parameters;
|
|
44
|
+
}
|
|
45
|
+
if (this.value) {
|
|
46
|
+
this._component.instance.value = this.value;
|
|
47
|
+
}
|
|
48
|
+
this.setComponentInputs();
|
|
49
|
+
const events = this._component.instance.events;
|
|
50
|
+
if (events) {
|
|
51
|
+
events
|
|
52
|
+
.pipe(takeUntil(this._onDestroy$), tap((c) => this.events.emit(c)))
|
|
53
|
+
.subscribe();
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
this.setComponentInputs();
|
|
57
|
+
}
|
|
58
|
+
setComponentInputs() {
|
|
59
|
+
const inputProperties = Object.keys(this).filter((c) => !c.startsWith('_') && c !== 'events');
|
|
60
|
+
inputProperties.forEach((c) => {
|
|
61
|
+
this._component.instance[c] = this[c];
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
_destroyComponentInstance() {
|
|
65
|
+
if (this._component) {
|
|
66
|
+
this._component.destroy();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
BaseDynamicComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BaseDynamicComponent, deps: [{ token: i1.PortalService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
71
|
+
BaseDynamicComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: BaseDynamicComponent, selector: "bnrc-dynamic-component", inputs: { component: "component", value: "value" }, outputs: { events: "events" }, viewQueries: [{ propertyName: "_container", first: true, predicate: ["componentContainer"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `<ng-container #componentContainer></ng-container>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BaseDynamicComponent, decorators: [{
|
|
73
|
+
type: Component,
|
|
74
|
+
args: [{
|
|
75
|
+
selector: 'bnrc-dynamic-component',
|
|
76
|
+
template: `<ng-container #componentContainer></ng-container>`,
|
|
77
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
78
|
+
}]
|
|
79
|
+
}], ctorParameters: function () { return [{ type: i1.PortalService }, { type: i0.Injector }]; }, propDecorators: { _container: [{
|
|
80
|
+
type: ViewChild,
|
|
81
|
+
args: ['componentContainer', { read: ViewContainerRef, static: true }]
|
|
82
|
+
}], component: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], value: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], events: [{
|
|
87
|
+
type: Output
|
|
88
|
+
}] } });
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1keW5hbWljLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLW5vdmluLXJheS1jb3JlL3NyYy9saWIvZHluYW1pYy1jb21wb25lbnQvYmFzZS1keW5hbWljLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBRVosS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7O0FBUWxELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxhQUFhO0lBT25ELFlBQXNCLGNBQTZCLEVBQVksU0FBbUI7UUFDOUUsS0FBSyxFQUFFLENBQUM7UUFEVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUFZLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFGeEUsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFpQyxDQUFDO0lBSXJFLENBQUM7SUFDRCxLQUFLLENBQUMsUUFBUTtRQUNWLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRTtZQUM1QixPQUFPO1NBQ1Y7UUFDRCwyQ0FBMkM7UUFDM0MsYUFBYTtRQUNiLDhDQUE4QztRQUM5QyxnRkFBZ0Y7UUFFaEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCxXQUFXO1FBQ1AsSUFBSSxD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QkFBYixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRWpyYXlPbGdvIH0gZnJvbSAnLi4vYWJzdHJhY3QtY2xhc3Nlcyc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9ydGFsU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdibnJjLWR5bmFtaWMtY29tcG9uZW50JyxcbiAgICB0ZW1wbGF0ZTogYDxuZy1jb250YWluZXIgI2NvbXBvbmVudENvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5gLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEJhc2VEeW5hbWljQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIEBWaWV3Q2hpbGQoJ2NvbXBvbmVudENvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgX2NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcbiAgICBASW5wdXQoKSBjb21wb25lbnQ6IEVqcmF5T2xnbztcbiAgICBASW5wdXQoKSB2YWx1ZTogYW55O1xuICAgIEBPdXRwdXQoKSBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdGl0bGU6IHN0cmluZzsgZGF0YT86IGFueSB9PigpO1xuICAgIHB1YmxpYyBfY29tcG9uZW50OiBDb21wb25lbnRSZWY8YW55PjtcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3BvcnRhbFNlcnZpY2U6IFBvcnRhbFNlcnZpY2UsIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLl9yZW5kZXJDb21wb25lbnRJbnN0YW5jZSgpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fY29tcG9uZW50Py5pbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnN0IGNoYW5nZXNLZXkgPSBPYmplY3Qua2V5cyhjaGFuZ2VzKTtcbiAgICAgICAgLy8gY2hhbmdlc0tleVxuICAgICAgICAvLyAgICAgLmZpbHRlcigoYykgPT4gIWNoYW5nZXNbY10uZmlyc3RDaGFuZ2UpXG4gICAgICAgIC8vICAgICAuZm9yRWFjaCgoYykgPT4gKHRoaXMuX2NvbXBvbmVudC5pbnN0YW5jZVtjXSA9IGNoYW5nZXNbY10uY3VycmVudFZhbHVlKSk7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Lmluc3RhbmNlLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveUNvbXBvbmVudEluc3RhbmNlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIF9yZW5kZXJDb21wb25lbnRJbnN0YW5jZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fZGVzdHJveUNvbXBvbmVudEluc3RhbmNlKCk7XG4gICAgICAgIGlmICghdGhpcy5jb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IE1vZHVsZSwgTW9kdWxlRmlsZU5hbWUsIE5hbWUsIFNlbGVjdG9yIH0gPSB0aGlzLmNvbXBvbmVudDtcbiAgICAgICAgdGhpcy5fcG9ydGFsU2VydmljZVxuICAgICAgICAgICAgLmdldENvbXBvbmVudChNb2R1bGUsIE1vZHVsZUZpbGVOYW1lLCBOYW1lLCBTZWxlY3RvciwgdGhpcy5faW5qZWN0b3IpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmluc2VydChjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudCA9IGNvbXBvbmVudFJlZjtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21wb25lbnQuUGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnQuaW5zdGFuY2UucGFyYW1ldGVycyA9IHRoaXMuY29tcG9uZW50LlBhcmFtZXRlcnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudC5pbnN0YW5jZS52YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29tcG9uZW50SW5wdXRzKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5fY29tcG9uZW50Lmluc3RhbmNlLmV2ZW50cyBhcyBFdmVudEVtaXR0ZXI8eyB0aXRsZTogc3RyaW5nOyBkYXRhPzogYW55IH0+O1xuICAgICAgICAgICAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwKChjKSA9PiB0aGlzLmV2ZW50cy5lbWl0KGMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldENvbXBvbmVudElucHV0cygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXRDb21wb25lbnRJbnB1dHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHRoaXMpLmZpbHRlcigoYykgPT4gIWMuc3RhcnRzV2l0aCgnXycpICYmIGMgIT09ICdldmVudHMnKTtcbiAgICAgICAgaW5wdXRQcm9wZXJ0aWVzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudC5pbnN0YW5jZVtjXSA9IHRoaXNbY107XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZGVzdHJveUNvbXBvbmVudEluc3RhbmNlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnQuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|