@onecx/angular-accelerator 4.43.0 → 5.0.0
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/{esm2020 → esm2022}/lib/angular-accelerator-primeng.module.mjs +53 -53
- package/esm2022/lib/angular-accelerator.module.mjs +168 -0
- package/esm2022/lib/components/column-group-selection/column-group-selection.component.mjs +72 -0
- package/esm2022/lib/components/custom-group-column-selector/custom-group-column-selector.component.mjs +109 -0
- package/esm2022/lib/components/data-layout-selection/data-layout-selection.component.mjs +46 -0
- package/esm2022/lib/components/data-list-grid/data-list-grid.component.mjs +399 -0
- package/esm2022/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.mjs +92 -0
- package/esm2022/lib/components/data-sort-base/data-sort-base.mjs +110 -0
- package/esm2022/lib/components/data-table/data-table.component.mjs +401 -0
- package/esm2022/lib/components/data-view/data-view.component.mjs +407 -0
- package/esm2022/lib/components/diagram/diagram.component.mjs +137 -0
- package/esm2022/lib/components/group-by-count-diagram/group-by-count-diagram.component.mjs +109 -0
- package/esm2022/lib/components/interactive-data-view/interactive-data-view.component.mjs +375 -0
- package/esm2022/lib/components/page-header/page-header.component.mjs +232 -0
- package/{esm2020 → esm2022}/lib/components/search-config/search-config.component.mjs +4 -4
- package/esm2022/lib/components/search-header/search-header.component.mjs +136 -0
- package/esm2022/lib/directives/advanced.directive.mjs +36 -0
- package/esm2022/lib/directives/if-breakpoint.directive.mjs +39 -0
- package/esm2022/lib/directives/if-permission.directive.mjs +80 -0
- package/esm2022/lib/directives/src.directive.mjs +59 -0
- package/esm2022/lib/functions/flatten-object.mjs +20 -0
- package/{esm2020 → esm2022}/lib/model/breadcrumb-menu-item.model.mjs +1 -1
- package/esm2022/lib/pipes/dynamic.pipe.mjs +58 -0
- package/esm2022/lib/pipes/ocxtimeago.pipe.mjs +107 -0
- package/esm2022/lib/services/app-config-service.mjs +43 -0
- package/esm2022/lib/services/breadcrumb.service.mjs +113 -0
- package/esm2022/lib/services/translation-cache.service.mjs +41 -0
- package/esm2022/lib/utils/async-translate-loader.utils.mjs +12 -0
- package/esm2022/lib/utils/caching-translate-loader.utils.mjs +15 -0
- package/{esm2020 → esm2022}/lib/utils/colorutils.mjs +1 -1
- package/{esm2020 → esm2022}/lib/utils/dateutils.mjs +6 -6
- package/esm2022/lib/utils/objectutils.mjs +30 -0
- package/{esm2020 → esm2022}/lib/utils/translate.combined.loader.mjs +1 -1
- package/{esm2020 → esm2022}/testing/column-group-selection.harness.mjs +2 -2
- package/esm2022/testing/custom-group-column-selector.harness.mjs +31 -0
- package/esm2022/testing/data-layout-selection.harness.mjs +33 -0
- package/esm2022/testing/data-list-grid.harness.mjs +47 -0
- package/esm2022/testing/data-table.harness.mjs +63 -0
- package/{esm2020 → esm2022}/testing/data-view.harness.mjs +2 -2
- package/esm2022/testing/default-grid-item.harness.mjs +24 -0
- package/esm2022/testing/default-list-item.harness.mjs +24 -0
- package/esm2022/testing/diagram.harness.mjs +22 -0
- package/{esm2020 → esm2022}/testing/group-by-count-diagram.harness.mjs +2 -2
- package/{esm2020 → esm2022}/testing/interactive-data-view.harness.mjs +2 -2
- package/esm2022/testing/more-actions-menu-button.harness.mjs +35 -0
- package/esm2022/testing/page-header.harness.mjs +78 -0
- package/{esm2020 → esm2022}/testing/search-config.harness.mjs +2 -2
- package/{esm2020 → esm2022}/testing/search-header.harness.mjs +2 -2
- package/{fesm2020 → fesm2022}/onecx-angular-accelerator-testing.mjs +34 -28
- package/fesm2022/onecx-angular-accelerator-testing.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/onecx-angular-accelerator.mjs +244 -224
- package/fesm2022/onecx-angular-accelerator.mjs.map +1 -0
- package/lib/components/column-group-selection/column-group-selection.component.d.ts +1 -1
- package/lib/components/custom-group-column-selector/custom-group-column-selector.component.d.ts +1 -1
- package/lib/components/data-layout-selection/data-layout-selection.component.d.ts +1 -1
- package/lib/components/data-list-grid/data-list-grid.component.d.ts +1 -1
- package/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.d.ts +1 -1
- package/lib/components/data-table/data-table.component.d.ts +1 -1
- package/lib/components/data-view/data-view.component.d.ts +2 -2
- package/lib/components/diagram/diagram.component.d.ts +2 -2
- package/lib/components/group-by-count-diagram/group-by-count-diagram.component.d.ts +1 -1
- package/lib/components/interactive-data-view/interactive-data-view.component.d.ts +1 -1
- package/lib/components/page-header/page-header.component.d.ts +1 -1
- package/lib/components/search-config/search-config.component.d.ts +1 -1
- package/lib/components/search-header/search-header.component.d.ts +1 -1
- package/lib/directives/if-breakpoint.directive.d.ts +1 -1
- package/lib/directives/if-permission.directive.d.ts +14 -5
- package/lib/directives/src.directive.d.ts +1 -1
- package/lib/model/breadcrumb-menu-item.model.d.ts +2 -2
- package/package.json +20 -28
- package/testing/data-list-grid.harness.d.ts +1 -1
- package/esm2020/lib/angular-accelerator.module.mjs +0 -160
- package/esm2020/lib/components/column-group-selection/column-group-selection.component.mjs +0 -72
- package/esm2020/lib/components/custom-group-column-selector/custom-group-column-selector.component.mjs +0 -109
- package/esm2020/lib/components/data-layout-selection/data-layout-selection.component.mjs +0 -45
- package/esm2020/lib/components/data-list-grid/data-list-grid.component.mjs +0 -399
- package/esm2020/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.mjs +0 -92
- package/esm2020/lib/components/data-sort-base/data-sort-base.mjs +0 -110
- package/esm2020/lib/components/data-table/data-table.component.mjs +0 -401
- package/esm2020/lib/components/data-view/data-view.component.mjs +0 -407
- package/esm2020/lib/components/diagram/diagram.component.mjs +0 -137
- package/esm2020/lib/components/group-by-count-diagram/group-by-count-diagram.component.mjs +0 -109
- package/esm2020/lib/components/interactive-data-view/interactive-data-view.component.mjs +0 -375
- package/esm2020/lib/components/page-header/page-header.component.mjs +0 -232
- package/esm2020/lib/components/search-header/search-header.component.mjs +0 -136
- package/esm2020/lib/directives/advanced.directive.mjs +0 -36
- package/esm2020/lib/directives/if-breakpoint.directive.mjs +0 -39
- package/esm2020/lib/directives/if-permission.directive.mjs +0 -70
- package/esm2020/lib/directives/src.directive.mjs +0 -59
- package/esm2020/lib/functions/flatten-object.mjs +0 -20
- package/esm2020/lib/pipes/dynamic.pipe.mjs +0 -58
- package/esm2020/lib/pipes/ocxtimeago.pipe.mjs +0 -107
- package/esm2020/lib/services/app-config-service.mjs +0 -43
- package/esm2020/lib/services/breadcrumb.service.mjs +0 -113
- package/esm2020/lib/services/translation-cache.service.mjs +0 -41
- package/esm2020/lib/utils/async-translate-loader.utils.mjs +0 -12
- package/esm2020/lib/utils/caching-translate-loader.utils.mjs +0 -15
- package/esm2020/lib/utils/objectutils.mjs +0 -30
- package/esm2020/testing/custom-group-column-selector.harness.mjs +0 -31
- package/esm2020/testing/data-layout-selection.harness.mjs +0 -33
- package/esm2020/testing/data-list-grid.harness.mjs +0 -47
- package/esm2020/testing/data-table.harness.mjs +0 -57
- package/esm2020/testing/default-grid-item.harness.mjs +0 -24
- package/esm2020/testing/default-list-item.harness.mjs +0 -24
- package/esm2020/testing/diagram.harness.mjs +0 -22
- package/esm2020/testing/more-actions-menu-button.harness.mjs +0 -35
- package/esm2020/testing/page-header.harness.mjs +0 -78
- package/fesm2015/onecx-angular-accelerator-testing.mjs +0 -541
- package/fesm2015/onecx-angular-accelerator-testing.mjs.map +0 -1
- package/fesm2015/onecx-angular-accelerator.mjs +0 -3563
- package/fesm2015/onecx-angular-accelerator.mjs.map +0 -1
- package/fesm2020/onecx-angular-accelerator-testing.mjs.map +0 -1
- package/fesm2020/onecx-angular-accelerator.mjs.map +0 -1
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/column-type.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/data-action.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/data-column-name-id.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/data-sort-direction.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/data-table-column.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/diagram-column.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/diagram-data.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/diagram-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/search-config-info.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/create-remote-component-translate-loader.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/create-translate-loader.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/enum-to-dropdown-options.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/primeicon.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/onecx-angular-accelerator.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/index.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/onecx-angular-accelerator-testing.mjs +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "primeng/api";
|
|
5
|
+
import * as i2 from "primeng/dropdown";
|
|
6
|
+
import * as i3 from "primeng/button";
|
|
7
|
+
import * as i4 from "@angular/forms";
|
|
8
|
+
import * as i5 from "@ngx-translate/core";
|
|
9
|
+
export class DataListGridSortingComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.columns = [];
|
|
12
|
+
this.sortStates = ["ASCENDING" /* DataSortDirection.ASCENDING */, "DESCENDING" /* DataSortDirection.DESCENDING */];
|
|
13
|
+
this._sortDirection$ = new BehaviorSubject("NONE" /* DataSortDirection.NONE */);
|
|
14
|
+
this._sortField$ = new BehaviorSubject('');
|
|
15
|
+
this.sortChange = new EventEmitter();
|
|
16
|
+
this.sortDirectionChange = new EventEmitter();
|
|
17
|
+
this.columnsChange = new EventEmitter();
|
|
18
|
+
this.dropdownOptions = [];
|
|
19
|
+
}
|
|
20
|
+
get sortDirection() {
|
|
21
|
+
return this._sortDirection$.getValue();
|
|
22
|
+
}
|
|
23
|
+
set sortDirection(value) {
|
|
24
|
+
this._sortDirection$.next(value);
|
|
25
|
+
}
|
|
26
|
+
get sortField() {
|
|
27
|
+
return this?._sortField$.getValue();
|
|
28
|
+
}
|
|
29
|
+
set sortField(value) {
|
|
30
|
+
this._sortField$.next(value);
|
|
31
|
+
}
|
|
32
|
+
ngOnInit() {
|
|
33
|
+
this.columns.forEach((element) => this.dropdownOptions.push({ columnId: element.id, columnName: element.nameKey }));
|
|
34
|
+
this.selectedSortingOption = this.dropdownOptions.find((e) => e.columnId === this?.sortField);
|
|
35
|
+
}
|
|
36
|
+
selectSorting(event) {
|
|
37
|
+
this._sortField$.next(event.value);
|
|
38
|
+
this.sortChange.emit(event.value.columnId);
|
|
39
|
+
}
|
|
40
|
+
sortDirectionChanged() {
|
|
41
|
+
const newSortDirection = this.nextSortDirection();
|
|
42
|
+
this._sortDirection$.next(newSortDirection);
|
|
43
|
+
this.sortDirectionChange.emit(newSortDirection);
|
|
44
|
+
}
|
|
45
|
+
nextSortDirection() {
|
|
46
|
+
return this.sortStates[(this.sortStates.indexOf(this.sortDirection) + 1) % this.sortStates.length];
|
|
47
|
+
}
|
|
48
|
+
sortIcon() {
|
|
49
|
+
switch (this.sortDirection) {
|
|
50
|
+
case "ASCENDING" /* DataSortDirection.ASCENDING */:
|
|
51
|
+
return 'pi-sort-amount-up';
|
|
52
|
+
case "DESCENDING" /* DataSortDirection.DESCENDING */:
|
|
53
|
+
return 'pi-sort-amount-down';
|
|
54
|
+
default:
|
|
55
|
+
return 'pi-sort-alt';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
sortIconTitle() {
|
|
59
|
+
return this.sortDirectionToTitle(this.sortDirection);
|
|
60
|
+
}
|
|
61
|
+
sortDirectionToTitle(sortDirection) {
|
|
62
|
+
switch (sortDirection) {
|
|
63
|
+
case "ASCENDING" /* DataSortDirection.ASCENDING */:
|
|
64
|
+
return 'OCX_LIST_GRID_SORT.TOGGLE_BUTTON.ASCENDING_TITLE';
|
|
65
|
+
case "DESCENDING" /* DataSortDirection.DESCENDING */:
|
|
66
|
+
return 'OCX_LIST_GRID_SORT.TOGGLE_BUTTON.DESCENDING_TITLE';
|
|
67
|
+
default:
|
|
68
|
+
return 'OCX_LIST_GRID_SORT.TOGGLE_BUTTON.DEFAULT_TITLE';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataListGridSortingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
72
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.5", type: DataListGridSortingComponent, selector: "ocx-data-list-grid-sorting", inputs: { columns: "columns", sortStates: "sortStates", sortDirection: "sortDirection", sortField: "sortField" }, outputs: { sortChange: "sortChange", sortDirectionChange: "sortDirectionChange", columnsChange: "columnsChange" }, ngImport: i0, template: "<div class=\"flex align-items-center gap-2\">\n <p-dropdown\n id=\"dataListGridSortingDropdown\"\n [(ngModel)]=\"selectedSortingOption\"\n class=\"sort-dropdown\"\n [options]=\"dropdownOptions\"\n [placeholder]=\"('OCX_LIST_GRID_SORT.DROPDOWN.PLACEHOLDER' | translate)\"\n (onChange)=\"selectSorting($event)\"\n [title]=\"('OCX_LIST_GRID_SORT.DROPDOWN.TITLE' | translate)\"\n >\n <ng-template let-item pTemplate=\"item\"> {{ item?.columnName ? (item.columnName | translate) : ''}} </ng-template>\n <ng-template let-item pTemplate=\"selectedItem\">\n {{ item?.columnName ? (item.columnName | translate) : ''}}\n </ng-template></p-dropdown\n >\n <p-button\n id=\"dataListGridSortingButton\"\n icon=\"pi {{sortIcon()}}\"\n styleClass=\"p-button-outlined\"\n (onClick)=\"sortDirectionChanged()\"\n [title]=\"(sortIconTitle() | translate)\"\n [attr.aria-label]=\"('OCX_LIST_GRID_SORT.SORTING_BUTTON_ARIA_LABEL' | translate:{direction: (sortDirectionToTitle(nextSortDirection())) | translate})\"\n ></p-button>\n</div>\n", styles: [".pi{border-radius:var(--border-radius);border-width:thin;background:none;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i2.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] }); }
|
|
73
|
+
}
|
|
74
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataListGridSortingComponent, decorators: [{
|
|
75
|
+
type: Component,
|
|
76
|
+
args: [{ selector: 'ocx-data-list-grid-sorting', template: "<div class=\"flex align-items-center gap-2\">\n <p-dropdown\n id=\"dataListGridSortingDropdown\"\n [(ngModel)]=\"selectedSortingOption\"\n class=\"sort-dropdown\"\n [options]=\"dropdownOptions\"\n [placeholder]=\"('OCX_LIST_GRID_SORT.DROPDOWN.PLACEHOLDER' | translate)\"\n (onChange)=\"selectSorting($event)\"\n [title]=\"('OCX_LIST_GRID_SORT.DROPDOWN.TITLE' | translate)\"\n >\n <ng-template let-item pTemplate=\"item\"> {{ item?.columnName ? (item.columnName | translate) : ''}} </ng-template>\n <ng-template let-item pTemplate=\"selectedItem\">\n {{ item?.columnName ? (item.columnName | translate) : ''}}\n </ng-template></p-dropdown\n >\n <p-button\n id=\"dataListGridSortingButton\"\n icon=\"pi {{sortIcon()}}\"\n styleClass=\"p-button-outlined\"\n (onClick)=\"sortDirectionChanged()\"\n [title]=\"(sortIconTitle() | translate)\"\n [attr.aria-label]=\"('OCX_LIST_GRID_SORT.SORTING_BUTTON_ARIA_LABEL' | translate:{direction: (sortDirectionToTitle(nextSortDirection())) | translate})\"\n ></p-button>\n</div>\n", styles: [".pi{border-radius:var(--border-radius);border-width:thin;background:none;cursor:pointer}\n"] }]
|
|
77
|
+
}], propDecorators: { columns: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}], sortStates: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}], sortDirection: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}], sortField: [{
|
|
84
|
+
type: Input
|
|
85
|
+
}], sortChange: [{
|
|
86
|
+
type: Output
|
|
87
|
+
}], sortDirectionChange: [{
|
|
88
|
+
type: Output
|
|
89
|
+
}], columnsChange: [{
|
|
90
|
+
type: Output
|
|
91
|
+
}] } });
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LWdyaWQtc29ydGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtbGlzdC1ncmlkLXNvcnRpbmcvZGF0YS1saXN0LWdyaWQtc29ydGluZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtbGlzdC1ncmlkLXNvcnRpbmcvZGF0YS1saXN0LWdyaWQtc29ydGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUE7Ozs7Ozs7QUFVdEMsTUFBTSxPQUFPLDRCQUE0QjtJQUx6QztRQU1XLFlBQU8sR0FBc0IsRUFBRSxDQUFBO1FBQy9CLGVBQVUsR0FBd0IsZ0dBQTJELENBQUE7UUFDdEcsb0JBQWUsR0FBRyxJQUFJLGVBQWUscUNBQTJDLENBQUE7UUFRaEYsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQTtRQVNuQyxlQUFVLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUE7UUFDckQsd0JBQW1CLEdBQW9DLElBQUksWUFBWSxFQUFFLENBQUE7UUFDekUsa0JBQWEsR0FBMkIsSUFBSSxZQUFZLEVBQUUsQ0FBQTtRQUVwRSxvQkFBZSxHQUF1QixFQUFFLENBQUE7S0E4Q3pDO0lBbEVDLElBQ0ksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUN4QyxDQUFDO0lBQ0QsSUFBSSxhQUFhLENBQUMsS0FBd0I7UUFDeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVELElBQ0ksU0FBUztRQUNYLE9BQU8sSUFBSSxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNyQyxDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM5QixDQUFDO0lBUUQsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ25ILElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDL0YsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFDRCxvQkFBb0I7UUFDbEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQzNDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDcEcsQ0FBQztJQUVELFFBQVE7UUFDTixRQUFRLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQjtnQkFDRSxPQUFPLG1CQUFtQixDQUFBO1lBQzVCO2dCQUNFLE9BQU8scUJBQXFCLENBQUE7WUFDOUI7Z0JBQ0UsT0FBTyxhQUFhLENBQUE7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ3RELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxhQUFnQztRQUNuRCxRQUFRLGFBQWEsRUFBRSxDQUFDO1lBQ3RCO2dCQUNFLE9BQU8sa0RBQWtELENBQUE7WUFDM0Q7Z0JBQ0UsT0FBTyxtREFBbUQsQ0FBQTtZQUM1RDtnQkFDRSxPQUFPLGdEQUFnRCxDQUFBO1FBQzNELENBQUM7SUFDSCxDQUFDOzhHQXJFVSw0QkFBNEI7a0dBQTVCLDRCQUE0Qix1U0NYekMsa2pDQXdCQTs7MkZEYmEsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDRCQUE0Qjs4QkFLN0IsT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0YsYUFBYTtzQkFEaEIsS0FBSztnQkFTRixTQUFTO3NCQURaLEtBQUs7Z0JBUUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IERhdGFTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS1zb3J0LWRpcmVjdGlvbidcbmltcG9ydCB7IERhdGFDb2x1bW5OYW1lSWQgfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLWNvbHVtbi1uYW1lLWlkLm1vZGVsJ1xuaW1wb3J0IHsgRGF0YVRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS10YWJsZS1jb2x1bW4ubW9kZWwnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29jeC1kYXRhLWxpc3QtZ3JpZC1zb3J0aW5nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtbGlzdC1ncmlkLXNvcnRpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLWxpc3QtZ3JpZC1zb3J0aW5nLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXSA9IFtdXG4gIEBJbnB1dCgpIHNvcnRTdGF0ZXM6IERhdGFTb3J0RGlyZWN0aW9uW10gPSBbRGF0YVNvcnREaXJlY3Rpb24uQVNDRU5ESU5HLCBEYXRhU29ydERpcmVjdGlvbi5ERVNDRU5ESU5HXVxuICBfc29ydERpcmVjdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFTb3J0RGlyZWN0aW9uPihEYXRhU29ydERpcmVjdGlvbi5OT05FKVxuICBASW5wdXQoKVxuICBnZXQgc29ydERpcmVjdGlvbigpOiBEYXRhU29ydERpcmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnREaXJlY3Rpb24kLmdldFZhbHVlKClcbiAgfVxuICBzZXQgc29ydERpcmVjdGlvbih2YWx1ZTogRGF0YVNvcnREaXJlY3Rpb24pIHtcbiAgICB0aGlzLl9zb3J0RGlyZWN0aW9uJC5uZXh0KHZhbHVlKVxuICB9XG4gIF9zb3J0RmllbGQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKVxuICBASW5wdXQoKVxuICBnZXQgc29ydEZpZWxkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXM/Ll9zb3J0RmllbGQkLmdldFZhbHVlKClcbiAgfVxuICBzZXQgc29ydEZpZWxkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zb3J0RmllbGQkLm5leHQodmFsdWUpXG4gIH1cblxuICBAT3V0cHV0KCkgc29ydENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIHNvcnREaXJlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRhU29ydERpcmVjdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIGNvbHVtbnNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgc2VsZWN0ZWRTb3J0aW5nT3B0aW9uOiBEYXRhQ29sdW1uTmFtZUlkIHwgdW5kZWZpbmVkXG4gIGRyb3Bkb3duT3B0aW9uczogRGF0YUNvbHVtbk5hbWVJZFtdID0gW11cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZWxlbWVudCkgPT4gdGhpcy5kcm9wZG93bk9wdGlvbnMucHVzaCh7IGNvbHVtbklkOiBlbGVtZW50LmlkLCBjb2x1bW5OYW1lOiBlbGVtZW50Lm5hbWVLZXkgfSkpXG4gICAgdGhpcy5zZWxlY3RlZFNvcnRpbmdPcHRpb24gPSB0aGlzLmRyb3Bkb3duT3B0aW9ucy5maW5kKChlKSA9PiBlLmNvbHVtbklkID09PSB0aGlzPy5zb3J0RmllbGQpXG4gIH1cblxuICBzZWxlY3RTb3J0aW5nKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9zb3J0RmllbGQkLm5leHQoZXZlbnQudmFsdWUpXG4gICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoZXZlbnQudmFsdWUuY29sdW1uSWQpXG4gIH1cbiAgc29ydERpcmVjdGlvbkNoYW5nZWQoKTogdm9pZCB7XG4gICAgY29uc3QgbmV3U29ydERpcmVjdGlvbiA9IHRoaXMubmV4dFNvcnREaXJlY3Rpb24oKVxuICAgIHRoaXMuX3NvcnREaXJlY3Rpb24kLm5leHQobmV3U29ydERpcmVjdGlvbilcbiAgICB0aGlzLnNvcnREaXJlY3Rpb25DaGFuZ2UuZW1pdChuZXdTb3J0RGlyZWN0aW9uKVxuICB9XG5cbiAgbmV4dFNvcnREaXJlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc29ydFN0YXRlc1sodGhpcy5zb3J0U3RhdGVzLmluZGV4T2YodGhpcy5zb3J0RGlyZWN0aW9uKSArIDEpICUgdGhpcy5zb3J0U3RhdGVzLmxlbmd0aF1cbiAgfVxuXG4gIHNvcnRJY29uKCkge1xuICAgIHN3aXRjaCAodGhpcy5zb3J0RGlyZWN0aW9uKSB7XG4gICAgICBjYXNlIERhdGFTb3J0RGlyZWN0aW9uLkFTQ0VORElORzpcbiAgICAgICAgcmV0dXJuICdwaS1zb3J0LWFtb3VudC11cCdcbiAgICAgIGNhc2UgRGF0YVNvcnREaXJlY3Rpb24uREVTQ0VORElORzpcbiAgICAgICAgcmV0dXJuICdwaS1zb3J0LWFtb3VudC1kb3duJ1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdwaS1zb3J0LWFsdCdcbiAgICB9XG4gIH1cblxuICBzb3J0SWNvblRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLnNvcnREaXJlY3Rpb25Ub1RpdGxlKHRoaXMuc29ydERpcmVjdGlvbilcbiAgfVxuXG4gIHNvcnREaXJlY3Rpb25Ub1RpdGxlKHNvcnREaXJlY3Rpb246IERhdGFTb3J0RGlyZWN0aW9uKSB7XG4gICAgc3dpdGNoIChzb3J0RGlyZWN0aW9uKSB7XG4gICAgICBjYXNlIERhdGFTb3J0RGlyZWN0aW9uLkFTQ0VORElORzpcbiAgICAgICAgcmV0dXJuICdPQ1hfTElTVF9HUklEX1NPUlQuVE9HR0xFX0JVVFRPTi5BU0NFTkRJTkdfVElUTEUnXG4gICAgICBjYXNlIERhdGFTb3J0RGlyZWN0aW9uLkRFU0NFTkRJTkc6XG4gICAgICAgIHJldHVybiAnT0NYX0xJU1RfR1JJRF9TT1JULlRPR0dMRV9CVVRUT04uREVTQ0VORElOR19USVRMRSdcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnT0NYX0xJU1RfR1JJRF9TT1JULlRPR0dMRV9CVVRUT04uREVGQVVMVF9USVRMRSdcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICA8cC1kcm9wZG93blxuICAgIGlkPVwiZGF0YUxpc3RHcmlkU29ydGluZ0Ryb3Bkb3duXCJcbiAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU29ydGluZ09wdGlvblwiXG4gICAgY2xhc3M9XCJzb3J0LWRyb3Bkb3duXCJcbiAgICBbb3B0aW9uc109XCJkcm9wZG93bk9wdGlvbnNcIlxuICAgIFtwbGFjZWhvbGRlcl09XCIoJ09DWF9MSVNUX0dSSURfU09SVC5EUk9QRE9XTi5QTEFDRUhPTERFUicgfCB0cmFuc2xhdGUpXCJcbiAgICAob25DaGFuZ2UpPVwic2VsZWN0U29ydGluZygkZXZlbnQpXCJcbiAgICBbdGl0bGVdPVwiKCdPQ1hfTElTVF9HUklEX1NPUlQuRFJPUERPV04uVElUTEUnIHwgdHJhbnNsYXRlKVwiXG4gID5cbiAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwiaXRlbVwiPiB7eyBpdGVtPy5jb2x1bW5OYW1lID8gKGl0ZW0uY29sdW1uTmFtZSB8IHRyYW5zbGF0ZSkgOiAnJ319IDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cInNlbGVjdGVkSXRlbVwiPlxuICAgICAge3sgaXRlbT8uY29sdW1uTmFtZSA/IChpdGVtLmNvbHVtbk5hbWUgfCB0cmFuc2xhdGUpIDogJyd9fVxuICAgIDwvbmctdGVtcGxhdGU+PC9wLWRyb3Bkb3duXG4gID5cbiAgPHAtYnV0dG9uXG4gICAgaWQ9XCJkYXRhTGlzdEdyaWRTb3J0aW5nQnV0dG9uXCJcbiAgICBpY29uPVwicGkge3tzb3J0SWNvbigpfX1cIlxuICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZFwiXG4gICAgKG9uQ2xpY2spPVwic29ydERpcmVjdGlvbkNoYW5nZWQoKVwiXG4gICAgW3RpdGxlXT1cIihzb3J0SWNvblRpdGxlKCkgfCB0cmFuc2xhdGUpXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIignT0NYX0xJU1RfR1JJRF9TT1JULlNPUlRJTkdfQlVUVE9OX0FSSUFfTEFCRUwnIHwgdHJhbnNsYXRlOntkaXJlY3Rpb246IChzb3J0RGlyZWN0aW9uVG9UaXRsZShuZXh0U29ydERpcmVjdGlvbigpKSkgfCB0cmFuc2xhdGV9KVwiXG4gID48L3AtYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { map, of } from 'rxjs';
|
|
2
|
+
import { flattenObject } from '../../functions/flatten-object';
|
|
3
|
+
import { ColumnType } from '../../model/column-type.model';
|
|
4
|
+
import { ObjectUtils } from '../../utils/objectutils';
|
|
5
|
+
export class DataSortBase {
|
|
6
|
+
constructor(locale, translateService) {
|
|
7
|
+
this.locale = locale;
|
|
8
|
+
this.translateService = translateService;
|
|
9
|
+
}
|
|
10
|
+
translateItems([items, filters, sortColumn, sortDirection], columns, clientSideFiltering, clientSideSorting) {
|
|
11
|
+
if (clientSideFiltering || clientSideSorting) {
|
|
12
|
+
let translationKeys = [];
|
|
13
|
+
const translatedColumns = columns.filter((c) => c.columnType === ColumnType.TRANSLATION_KEY);
|
|
14
|
+
translatedColumns.forEach((c) => {
|
|
15
|
+
translationKeys = [...translationKeys, ...items.map((i) => ObjectUtils.resolveFieldData(i, c.id)?.toString())];
|
|
16
|
+
});
|
|
17
|
+
if (translationKeys.length) {
|
|
18
|
+
return this.translateService.get(translationKeys).pipe(map((translatedValues) => {
|
|
19
|
+
const translations = {};
|
|
20
|
+
translatedColumns.forEach((c) => {
|
|
21
|
+
translations[c.id] = Object.fromEntries(items.map((i) => [
|
|
22
|
+
ObjectUtils.resolveFieldData(i, c.id)?.toString() || '',
|
|
23
|
+
translatedValues[ObjectUtils.resolveFieldData(i, c.id)?.toString()],
|
|
24
|
+
]));
|
|
25
|
+
});
|
|
26
|
+
return [items, filters, sortColumn, sortDirection, translations];
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return of([items, filters, sortColumn, sortDirection, {}]);
|
|
31
|
+
}
|
|
32
|
+
filterItems([items, filters, sortColumn, sortDirection, translations], clientSideFiltering) {
|
|
33
|
+
if (!clientSideFiltering) {
|
|
34
|
+
return [items, filters, sortColumn, sortDirection, translations];
|
|
35
|
+
}
|
|
36
|
+
return [
|
|
37
|
+
items.filter((item) => filters
|
|
38
|
+
.map((filter) => filter.columnId)
|
|
39
|
+
.filter((value, index, self) => self.indexOf(value) === index && value != null)
|
|
40
|
+
.every((filterColumnId) => filters
|
|
41
|
+
.filter((filter) => filter.columnId === filterColumnId)
|
|
42
|
+
.some((filter) => (translations[filter.columnId]?.[ObjectUtils.resolveFieldData(item, filter.columnId).toString()] ||
|
|
43
|
+
ObjectUtils.resolveFieldData(item, filter.columnId)).toString() === filter.value.toString()))),
|
|
44
|
+
filters,
|
|
45
|
+
sortColumn,
|
|
46
|
+
sortDirection,
|
|
47
|
+
translations,
|
|
48
|
+
];
|
|
49
|
+
}
|
|
50
|
+
sortItems([items, filters, sortColumn, sortDirection, translations], columns, clientSideSorting) {
|
|
51
|
+
if (!clientSideSorting || sortColumn === '') {
|
|
52
|
+
return [items, filters, sortColumn, sortDirection, translations];
|
|
53
|
+
}
|
|
54
|
+
let translatedColValues = Object.fromEntries(items.map((i) => [
|
|
55
|
+
ObjectUtils.resolveFieldData(i, sortColumn)?.toString(),
|
|
56
|
+
ObjectUtils.resolveFieldData(i, sortColumn)?.toString(),
|
|
57
|
+
]));
|
|
58
|
+
if (columns.find((h) => h.id === sortColumn)?.columnType === ColumnType.TRANSLATION_KEY) {
|
|
59
|
+
translatedColValues = translations[sortColumn];
|
|
60
|
+
}
|
|
61
|
+
return [
|
|
62
|
+
[...items].sort(this.createCompareFunction(translatedColValues, sortColumn, sortDirection)),
|
|
63
|
+
filters,
|
|
64
|
+
sortColumn,
|
|
65
|
+
sortDirection,
|
|
66
|
+
translations,
|
|
67
|
+
];
|
|
68
|
+
}
|
|
69
|
+
flattenItems(items) {
|
|
70
|
+
return items.map((i) => flattenObject(i));
|
|
71
|
+
}
|
|
72
|
+
createCompareFunction(translatedColValues, sortColumn, sortDirection) {
|
|
73
|
+
let direction = 0;
|
|
74
|
+
if (sortDirection === "ASCENDING" /* DataSortDirection.ASCENDING */) {
|
|
75
|
+
direction = 1;
|
|
76
|
+
}
|
|
77
|
+
else if (sortDirection === "DESCENDING" /* DataSortDirection.DESCENDING */) {
|
|
78
|
+
direction = -1;
|
|
79
|
+
}
|
|
80
|
+
return (data1, data2) => {
|
|
81
|
+
if (direction === 0) {
|
|
82
|
+
return 0;
|
|
83
|
+
}
|
|
84
|
+
let result;
|
|
85
|
+
const value1 = translatedColValues[ObjectUtils.resolveFieldData(data1, sortColumn)];
|
|
86
|
+
const value2 = translatedColValues[ObjectUtils.resolveFieldData(data2, sortColumn)];
|
|
87
|
+
if (value1 == null && value2 != null)
|
|
88
|
+
result = -1;
|
|
89
|
+
else if (value1 != null && value2 == null)
|
|
90
|
+
result = 1;
|
|
91
|
+
else if (value1 == null && value2 == null)
|
|
92
|
+
result = 0;
|
|
93
|
+
else if (typeof value1 === 'string' && typeof value2 === 'string')
|
|
94
|
+
result = value1.localeCompare(value2, [this.locale, 'en', 'de'], { numeric: true });
|
|
95
|
+
else {
|
|
96
|
+
if (value1 < value2) {
|
|
97
|
+
result = -1;
|
|
98
|
+
}
|
|
99
|
+
else if (value1 > value2) {
|
|
100
|
+
result = 1;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
result = 0;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return direction * result;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3J0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtc29ydC1iYXNlL2RhdGEtc29ydC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBYyxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFLMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBSXJELE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFlBQXNCLE1BQWMsRUFBWSxnQkFBa0M7UUFBNUQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFZLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFBRyxDQUFDO0lBRXRGLGNBQWMsQ0FDWixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBMkQsRUFDckcsT0FBMEIsRUFDMUIsbUJBQTRCLEVBQzVCLGlCQUEwQjtRQUUxQixJQUFJLG1CQUFtQixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDN0MsSUFBSSxlQUFlLEdBQWEsRUFBRSxDQUFBO1lBQ2xDLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDNUYsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlCLGVBQWUsR0FBRyxDQUFDLEdBQUcsZUFBZSxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFF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RSxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO2lCQUNoRixDQUFDO2dCQUNKLElBQUksTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO29CQUNwQixNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUE7Z0JBQ2IsQ0FBQztxQkFBTSxJQUFJLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQztvQkFDM0IsTUFBTSxHQUFHLENBQUMsQ0FBQTtnQkFDWixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxHQUFHLENBQUMsQ0FBQTtnQkFDWixDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sU0FBUyxHQUFHLE1BQU0sQ0FBQTtRQUMzQixDQUFDLENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7IE9ic2VydmFibGUsIG1hcCwgb2YgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgZmxhdHRlbk9iamVjdCB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9mbGF0dGVuLW9iamVjdCdcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbC9jb2x1bW4tdHlwZS5tb2RlbCdcbmltcG9ydCB7IERhdGFTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS1zb3J0LWRpcmVjdGlvbidcbmltcG9ydCB7IERhdGFUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL21vZGVsL2RhdGEtdGFibGUtY29sdW1uLm1vZGVsJ1xuaW1wb3J0IHsgTGlzdEdyaWREYXRhIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9kYXRhLWxpc3QtZ3JpZC9kYXRhLWxpc3QtZ3JpZC5jb21wb25lbnQnXG5pbXBvcnQgeyBSb3csIEZpbHRlciB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudCdcbmltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbHMvb2JqZWN0dXRpbHMnXG5cbnR5cGUgUm93TGlzdEdyaWREYXRhID0gTGlzdEdyaWREYXRhIHwgUm93XG5cbmV4cG9ydCBjbGFzcyBEYXRhU29ydEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgbG9jYWxlOiBzdHJpbmcsIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7fVxuXG4gIHRyYW5zbGF0ZUl0ZW1zKFxuICAgIFtpdGVtcywgZmlsdGVycywgc29ydENvbHVtbiwgc29ydERpcmVjdGlvbl06IFtSb3dMaXN0R3JpZERhdGFbXSwgRmlsdGVyW10sIHN0cmluZywgRGF0YVNvcnREaXJlY3Rpb25dLFxuICAgIGNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdLFxuICAgIGNsaWVudFNpZGVGaWx0ZXJpbmc6IGJvb2xlYW4sXG4gICAgY2xpZW50U2lkZVNvcnRpbmc6IGJvb2xlYW5cbiAgKTogT2JzZXJ2YWJsZTxbUm93TGlzdEdyaWREYXRhW10sIEZpbHRlcltdLCBzdHJpbmcsIERhdGFTb3J0RGlyZWN0aW9uLCBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pl0+IHtcbiAgICBpZiAoY2xpZW50U2lkZUZpbHRlcmluZyB8fCBjbGllbnRTaWRlU29ydGluZykge1xuICAgICAgbGV0IHRyYW5zbGF0aW9uS2V5czogc3RyaW5nW10gPSBbXVxuICAgICAgY29uc3QgdHJhbnNsYXRlZENvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoYykgPT4gYy5jb2x1bW5UeXBlID09PSBDb2x1bW5UeXBlLlRSQU5TTEFUSU9OX0tFWSlcbiAgICAgIHRyYW5zbGF0ZWRDb2x1bW5zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgdHJhbnNsYXRpb25LZXlzID0gWy4uLnRyYW5zbGF0aW9uS2V5cywgLi4uaXRlbXMubWFwKChpKSA9PiBPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKGksIGMuaWQpPy50b1N0cmluZygpKV1cbiAgICAgIH0pXG4gICAgICBpZiAodHJhbnNsYXRpb25LZXlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0cmFuc2xhdGlvbktleXMpLnBpcGUoXG4gICAgICAgICAgbWFwKCh0cmFuc2xhdGVkVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge31cbiAgICAgICAgICAgIHRyYW5zbGF0ZWRDb2x1bW5zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgdHJhbnNsYXRpb25zW2MuaWRdID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgICAgICAgIGl0ZW1zLm1hcCgoaSkgPT4gW1xuICAgICAgICAgICAgICAgICAgT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShpLCBjLmlkKT8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRWYWx1ZXNbT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShpLCBjLmlkKT8udG9TdHJpbmcoKV0sXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVybiBbaXRlbXMsIGZpbHRlcnMsIHNvcnRDb2x1bW4sIHNvcnREaXJlY3Rpb24sIHRyYW5zbGF0aW9uc11cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZihbaXRlbXMsIGZpbHRlcnMsIHNvcnRDb2x1bW4sIHNvcnREaXJlY3Rpb24sIHt9XSlcbiAgfVxuXG4gIGZpbHRlckl0ZW1zKFxuICAgIFtpdGVtcywgZmlsdGVycywgc29ydENvbHVtbiwgc29ydERpcmVjdGlvbiwgdHJhbnNsYXRpb25zXTogW1xuICAgICAgUm93TGlzdEdyaWREYXRhW10sXG4gICAgICBGaWx0ZXJbXSxcbiAgICAgIHN0cmluZyxcbiAgICAgIERhdGFTb3J0RGlyZWN0aW9uLFxuICAgICAgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj5cbiAgICBdLFxuICAgIGNsaWVudFNpZGVGaWx0ZXJpbmc6IGJvb2xlYW5cbiAgKTogW1Jvd0xpc3RHcmlkRGF0YVtdLCBGaWx0ZXJbXSwgc3RyaW5nLCBEYXRhU29ydERpcmVjdGlvbiwgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj5dIHtcbiAgICBpZiAoIWNsaWVudFNpZGVGaWx0ZXJpbmcpIHtcbiAgICAgIHJldHVybiBbaXRlbXMsIGZpbHRlcnMsIHNvcnRDb2x1bW4sIHNvcnREaXJlY3Rpb24sIHRyYW5zbGF0aW9uc11cbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgZmlsdGVyc1xuICAgICAgICAgIC5tYXAoKGZpbHRlcikgPT4gZmlsdGVyLmNvbHVtbklkKVxuICAgICAgICAgIC5maWx0ZXIoKHZhbHVlLCBpbmRleCwgc2VsZikgPT4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXggJiYgdmFsdWUgIT0gbnVsbClcbiAgICAgICAgICAuZXZlcnkoKGZpbHRlckNvbHVtbklkKSA9PlxuICAgICAgICAgICAgZmlsdGVyc1xuICAgICAgICAgICAgICAuZmlsdGVyKChmaWx0ZXIpID0+IGZpbHRlci5jb2x1bW5JZCA9PT0gZmlsdGVyQ29sdW1uSWQpXG4gICAgICAgICAgICAgIC5zb21lKFxuICAgICAgICAgICAgICAgIChmaWx0ZXIpID0+XG4gICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uc1tmaWx0ZXIuY29sdW1uSWRdPy5bT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShpdGVtLCBmaWx0ZXIuY29sdW1uSWQpLnRvU3RyaW5nKCldIHx8XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoaXRlbSwgZmlsdGVyLmNvbHVtbklkKVxuICAgICAgICAgICAgICAgICAgKS50b1N0cmluZygpID09PSBmaWx0ZXIudmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGZpbHRlcnMsXG4gICAgICBzb3J0Q29sdW1uLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICBdXG4gIH1cblxuICBzb3J0SXRlbXMoXG4gICAgW2l0ZW1zLCBmaWx0ZXJzLCBzb3J0Q29sdW1uLCBzb3J0RGlyZWN0aW9uLCB0cmFuc2xhdGlvbnNdOiBbXG4gICAgICBSb3dMaXN0R3JpZERhdGFbXSxcbiAgICAgIEZpbHRlcltdLFxuICAgICAgc3RyaW5nLFxuICAgICAgRGF0YVNvcnREaXJlY3Rpb24sXG4gICAgICBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PlxuICAgIF0sXG4gICAgY29sdW1uczogRGF0YVRhYmxlQ29sdW1uW10sXG4gICAgY2xpZW50U2lkZVNvcnRpbmc6IGJvb2xlYW5cbiAgKTogW1Jvd0xpc3RHcmlkRGF0YVtdLCBGaWx0ZXJbXSwgc3RyaW5nLCBEYXRhU29ydERpcmVjdGlvbiwgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj5dIHtcbiAgICBpZiAoIWNsaWVudFNpZGVTb3J0aW5nIHx8IHNvcnRDb2x1bW4gPT09ICcnKSB7XG4gICAgICByZXR1cm4gW2l0ZW1zLCBmaWx0ZXJzLCBzb3J0Q29sdW1uLCBzb3J0RGlyZWN0aW9uLCB0cmFuc2xhdGlvbnNdXG4gICAgfVxuICAgIGxldCB0cmFuc2xhdGVkQ29sVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgaXRlbXMubWFwKChpKSA9PiBbXG4gICAgICAgIE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoaSwgc29ydENvbHVtbik/LnRvU3RyaW5nKCksXG4gICAgICAgIE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoaSwgc29ydENvbHVtbik/LnRvU3RyaW5nKCksXG4gICAgICBdKVxuICAgIClcbiAgICBpZiAoY29sdW1ucy5maW5kKChoKSA9PiBoLmlkID09PSBzb3J0Q29sdW1uKT8uY29sdW1uVHlwZSA9PT0gQ29sdW1uVHlwZS5UUkFOU0xBVElPTl9LRVkpIHtcbiAgICAgIHRyYW5zbGF0ZWRDb2xWYWx1ZXMgPSB0cmFuc2xhdGlvbnNbc29ydENvbHVtbl1cbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIFsuLi5pdGVtc10uc29ydCh0aGlzLmNyZWF0ZUNvbXBhcmVGdW5jdGlvbih0cmFuc2xhdGVkQ29sVmFsdWVzLCBzb3J0Q29sdW1uLCBzb3J0RGlyZWN0aW9uKSksXG4gICAgICBmaWx0ZXJzLFxuICAgICAgc29ydENvbHVtbixcbiAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICB0cmFuc2xhdGlvbnMsXG4gICAgXVxuICB9XG5cbiAgZmxhdHRlbkl0ZW1zKGl0ZW1zOiBSb3dMaXN0R3JpZERhdGFbXSkge1xuICAgIHJldHVybiBpdGVtcy5tYXAoKGkpID0+IGZsYXR0ZW5PYmplY3QoaSkpXG4gIH1cblxuICBjcmVhdGVDb21wYXJlRnVuY3Rpb24oXG4gICAgdHJhbnNsYXRlZENvbFZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBzb3J0Q29sdW1uOiBzdHJpbmcsXG4gICAgc29ydERpcmVjdGlvbjogRGF0YVNvcnREaXJlY3Rpb25cbiAgKTogKGE6IFJlY29yZDxzdHJpbmcsIGFueT4sIGI6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IG51bWJlciB7XG4gICAgbGV0IGRpcmVjdGlvbiA9IDBcbiAgICBpZiAoc29ydERpcmVjdGlvbiA9PT0gRGF0YVNvcnREaXJlY3Rpb24uQVNDRU5ESU5HKSB7XG4gICAgICBkaXJlY3Rpb24gPSAxXG4gICAgfSBlbHNlIGlmIChzb3J0RGlyZWN0aW9uID09PSBEYXRhU29ydERpcmVjdGlvbi5ERVNDRU5ESU5HKSB7XG4gICAgICBkaXJlY3Rpb24gPSAtMVxuICAgIH1cbiAgICByZXR1cm4gKGRhdGExLCBkYXRhMikgPT4ge1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuICAgICAgbGV0IHJlc3VsdFxuICAgICAgY29uc3QgdmFsdWUxID0gdHJhbnNsYXRlZENvbFZhbHVlc1tPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKGRhdGExLCBzb3J0Q29sdW1uKV1cbiAgICAgIGNvbnN0IHZhbHVlMiA9IHRyYW5zbGF0ZWRDb2xWYWx1ZXNbT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShkYXRhMiwgc29ydENvbHVtbildXG5cbiAgICAgIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgIT0gbnVsbCkgcmVzdWx0ID0gLTFcbiAgICAgIGVsc2UgaWYgKHZhbHVlMSAhPSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSByZXN1bHQgPSAxXG4gICAgICBlbHNlIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkgcmVzdWx0ID0gMFxuICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlMSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlMiA9PT0gJ3N0cmluZycpXG4gICAgICAgIHJlc3VsdCA9IHZhbHVlMS5sb2NhbGVDb21wYXJlKHZhbHVlMiwgW3RoaXMubG9jYWxlLCAnZW4nLCAnZGUnXSwgeyBudW1lcmljOiB0cnVlIH0pXG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlMSA8IHZhbHVlMikge1xuICAgICAgICAgIHJlc3VsdCA9IC0xXG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUxID4gdmFsdWUyKSB7XG4gICAgICAgICAgcmVzdWx0ID0gMVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCA9IDBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRpcmVjdGlvbiAqIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIl19
|