@ai-table/grid 0.0.40 → 0.0.41
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/components/cell-editors/select/select-editor.component.d.ts +3 -1
- package/components/cell-editors/select/select-editor.component.d.ts.map +1 -1
- package/components/context-menu/context-menu.component.d.ts +4 -1
- package/components/context-menu/context-menu.component.d.ts.map +1 -1
- package/components/drag/drag.component.d.ts +26 -0
- package/components/drag/drag.component.d.ts.map +1 -0
- package/components/drag/drag.component.scss +19 -0
- package/constants/file-icon.d.ts +32 -0
- package/constants/file-icon.d.ts.map +1 -0
- package/constants/grid.d.ts.map +1 -1
- package/constants/icon.d.ts +1 -0
- package/constants/icon.d.ts.map +1 -1
- package/constants/table.d.ts +4 -0
- package/constants/table.d.ts.map +1 -1
- package/core/constants/field.d.ts.map +1 -1
- package/core/types/ai-table.d.ts +3 -1
- package/core/types/ai-table.d.ts.map +1 -1
- package/core/types/core.d.ts +33 -2
- package/core/types/core.d.ts.map +1 -1
- package/core/utils/common.d.ts +3 -3
- package/core/utils/common.d.ts.map +1 -1
- package/core/utils/field.d.ts.map +1 -1
- package/core/utils/queries.d.ts +3 -1
- package/core/utils/queries.d.ts.map +1 -1
- package/esm2022/components/cell-editors/select/select-editor.component.mjs +22 -21
- package/esm2022/components/context-menu/context-menu.component.mjs +17 -5
- package/esm2022/components/drag/drag.component.mjs +150 -0
- package/esm2022/constants/file-icon.mjs +342 -0
- package/esm2022/constants/grid.mjs +2 -1
- package/esm2022/constants/icon.mjs +2 -1
- package/esm2022/constants/table.mjs +6 -2
- package/esm2022/core/constants/field.mjs +7 -1
- package/esm2022/core/types/ai-table.mjs +2 -2
- package/esm2022/core/types/core.mjs +9 -1
- package/esm2022/core/utils/common.mjs +3 -2
- package/esm2022/core/utils/field.mjs +8 -3
- package/esm2022/core/utils/queries.mjs +19 -13
- package/esm2022/grid-base.component.mjs +5 -3
- package/esm2022/grid.component.mjs +90 -4
- package/esm2022/renderer/components/field-icon.component.mjs +5 -2
- package/esm2022/renderer/creations/create-heads.mjs +5 -5
- package/esm2022/renderer/drawers/cell-drawer.mjs +74 -2
- package/esm2022/renderer/drawers/drawer.mjs +11 -2
- package/esm2022/services/event.service.mjs +12 -5
- package/esm2022/services/selection.service.mjs +22 -3
- package/esm2022/types/clipboard.mjs +2 -0
- package/esm2022/types/grid.mjs +1 -1
- package/esm2022/types/index.mjs +2 -1
- package/esm2022/types/row.mjs +1 -1
- package/esm2022/utils/clipboard/clipboard.mjs +77 -0
- package/esm2022/utils/clipboard/copy.mjs +92 -0
- package/esm2022/utils/clipboard/extract.mjs +19 -0
- package/esm2022/utils/clipboard/index.mjs +5 -0
- package/esm2022/utils/clipboard/paste.mjs +180 -0
- package/esm2022/utils/field/model/attachment.mjs +63 -0
- package/esm2022/utils/field/model/date.mjs +45 -2
- package/esm2022/utils/field/model/field.mjs +1 -1
- package/esm2022/utils/field/model/index.mjs +5 -3
- package/esm2022/utils/field/model/link.mjs +25 -1
- package/esm2022/utils/field/model/member.mjs +40 -1
- package/esm2022/utils/field/model/number.mjs +31 -1
- package/esm2022/utils/field/model/progress.mjs +34 -1
- package/esm2022/utils/field/model/rate.mjs +35 -1
- package/esm2022/utils/field/model/select.mjs +64 -1
- package/esm2022/utils/field/model/text.mjs +7 -1
- package/esm2022/utils/file.mjs +208 -0
- package/esm2022/utils/icon.mjs +48 -0
- package/esm2022/utils/index.mjs +2 -1
- package/esm2022/utils/match-keywords.mjs +3 -3
- package/fesm2022/ai-table-grid.mjs +2131 -433
- package/fesm2022/ai-table-grid.mjs.map +1 -1
- package/grid-base.component.d.ts +4 -2
- package/grid-base.component.d.ts.map +1 -1
- package/grid.component.d.ts +6 -1
- package/grid.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/renderer/components/field-icon.component.d.ts.map +1 -1
- package/renderer/drawers/cell-drawer.d.ts +1 -0
- package/renderer/drawers/cell-drawer.d.ts.map +1 -1
- package/renderer/drawers/drawer.d.ts.map +1 -1
- package/services/event.service.d.ts.map +1 -1
- package/services/selection.service.d.ts +5 -1
- package/services/selection.service.d.ts.map +1 -1
- package/styles/styles.scss +2 -0
- package/types/clipboard.d.ts +5 -0
- package/types/clipboard.d.ts.map +1 -0
- package/types/grid.d.ts +22 -5
- package/types/grid.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/row.d.ts +3 -1
- package/types/row.d.ts.map +1 -1
- package/utils/clipboard/clipboard.d.ts +8 -0
- package/utils/clipboard/clipboard.d.ts.map +1 -0
- package/utils/clipboard/copy.d.ts +5 -0
- package/utils/clipboard/copy.d.ts.map +1 -0
- package/utils/clipboard/extract.d.ts +3 -0
- package/utils/clipboard/extract.d.ts.map +1 -0
- package/utils/clipboard/index.d.ts +5 -0
- package/utils/clipboard/index.d.ts.map +1 -0
- package/utils/clipboard/paste.d.ts +10 -0
- package/utils/clipboard/paste.d.ts.map +1 -0
- package/utils/field/model/attachment.d.ts +17 -0
- package/utils/field/model/attachment.d.ts.map +1 -0
- package/utils/field/model/date.d.ts +9 -1
- package/utils/field/model/date.d.ts.map +1 -1
- package/utils/field/model/field.d.ts +4 -0
- package/utils/field/model/field.d.ts.map +1 -1
- package/utils/field/model/index.d.ts +1 -1
- package/utils/field/model/index.d.ts.map +1 -1
- package/utils/field/model/link.d.ts +9 -1
- package/utils/field/model/link.d.ts.map +1 -1
- package/utils/field/model/member.d.ts +8 -0
- package/utils/field/model/member.d.ts.map +1 -1
- package/utils/field/model/number.d.ts +9 -1
- package/utils/field/model/number.d.ts.map +1 -1
- package/utils/field/model/progress.d.ts +9 -1
- package/utils/field/model/progress.d.ts.map +1 -1
- package/utils/field/model/rate.d.ts +9 -1
- package/utils/field/model/rate.d.ts.map +1 -1
- package/utils/field/model/select.d.ts +16 -1
- package/utils/field/model/select.d.ts.map +1 -1
- package/utils/field/model/text.d.ts +2 -0
- package/utils/field/model/text.d.ts.map +1 -1
- package/utils/file.d.ts +11 -0
- package/utils/file.d.ts.map +1 -0
- package/utils/icon.d.ts +19 -0
- package/utils/icon.d.ts.map +1 -0
- package/utils/index.d.ts +1 -0
- package/utils/index.d.ts.map +1 -1
@@ -1,18 +1,14 @@
|
|
1
|
-
import {
|
1
|
+
import { CommonModule } from '@angular/common';
|
2
2
|
import { ChangeDetectionStrategy, Component, computed } from '@angular/core';
|
3
3
|
import { FormsModule } from '@angular/forms';
|
4
|
-
import { ThyDot } from 'ngx-tethys/dot';
|
5
4
|
import { ThyEmptyModule } from 'ngx-tethys/empty';
|
6
|
-
import {
|
7
|
-
import { ThyIcon } from 'ngx-tethys/icon';
|
8
|
-
import { ThySelect } from 'ngx-tethys/select';
|
5
|
+
import { ThySelect, ThySelectModule } from 'ngx-tethys/select';
|
9
6
|
import { ThyOption } from 'ngx-tethys/shared';
|
10
|
-
import { ThyTag } from 'ngx-tethys/tag';
|
11
7
|
import { ThyTooltipModule } from 'ngx-tethys/tooltip';
|
12
8
|
import { AITableQueries, AITableSelectOptionStyle } from '../../../core';
|
13
|
-
import { SelectOptionPipe } from '../../../pipes';
|
14
9
|
import { SelectOptionComponent } from '../../cell-views/select/option.component';
|
15
10
|
import { AbstractEditCellEditor } from '../abstract-cell-editor.component';
|
11
|
+
import { ThyFormModule } from 'ngx-tethys/form';
|
16
12
|
import * as i0 from "@angular/core";
|
17
13
|
import * as i1 from "@angular/forms";
|
18
14
|
export class SelectCellEditorComponent extends AbstractEditCellEditor {
|
@@ -37,36 +33,41 @@ export class SelectCellEditorComponent extends AbstractEditCellEditor {
|
|
37
33
|
return value || [];
|
38
34
|
})();
|
39
35
|
}
|
40
|
-
|
36
|
+
onOpenChange(value) {
|
41
37
|
if (!value) {
|
42
|
-
|
38
|
+
this.closePopover();
|
39
|
+
}
|
40
|
+
}
|
41
|
+
onModelChange(event) {
|
42
|
+
this.updateValueFn();
|
43
|
+
}
|
44
|
+
updateValueFn() {
|
45
|
+
const value = (this.isMultiple ? this.modelValue : (this.modelValue && [this.modelValue]) || []);
|
46
|
+
const originValue = AITableQueries.getFieldValue(this.aiTable, [this.record()._id, this.field()._id]);
|
47
|
+
if (!value.every((v, i) => v === originValue[i]) || value.length !== originValue.length) {
|
43
48
|
this.updateFieldValue.emit({
|
44
49
|
value: value,
|
45
50
|
path: [this.record()._id, this.field()._id]
|
46
51
|
});
|
47
|
-
this.closePopover();
|
48
52
|
}
|
49
53
|
}
|
50
54
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SelectCellEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
51
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SelectCellEditorComponent, isStandalone: true, selector: "select-cell-editor", host: { classAttribute: "d-block h-100 select-cell-editor" }, usesInheritance: true, ngImport: i0, template: "<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"true\"\n [thyAllowClear]=\"true\"\n [thyPlaceHolder]=\"''\"\n [thyPreset]=\"preset()\"\n [thyMode]=\"field().settings.is_multiple ? 'multiple' : ''\"\n (thyOnExpandStatusChange)=\"
|
55
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SelectCellEditorComponent, isStandalone: true, selector: "select-cell-editor", host: { classAttribute: "d-block h-100 select-cell-editor" }, usesInheritance: true, ngImport: i0, template: "<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"true\"\n [thyAllowClear]=\"true\"\n [thyPlaceHolder]=\"''\"\n [thyPreset]=\"preset()\"\n [thyMode]=\"field().settings.is_multiple ? 'multiple' : ''\"\n (ngModelChange)=\"onModelChange($event)\"\n (thyOnExpandStatusChange)=\"onOpenChange($event)\"\n>\n <ng-template #selectedDisplay let-option>\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </ng-template>\n @for (option of selectOptions(); track option._id) {\n <thy-option [thyValue]=\"option._id\" [thyRawValue]=\"option\" [thyShowOptionCustom]=\"true\" [thyLabelText]=\"option.text\">\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </thy-option>\n }\n</thy-select>\n", dependencies: [{ kind: "component", type: ThySelect, selector: "thy-select,thy-custom-select", inputs: ["thyDropdownWidthMode", "thyShowSearch", "thyPlaceHolder", "thyServerSearch", "thyLoadState", "thyAutoActiveFirstItem", "thyMode", "thySize", "thyEmptyStateText", "thyEmptySearchMessageText", "thyEnableScrollLoad", "thyAllowClear", "thyDisabled", "thySortComparator", "thyFooterTemplate", "thyPlacement", "thyOrigin", "thyFooterClass", "thyAutoExpand", "thyHasBackdrop", "thyMaxTagCount", "thyBorderless", "thyOptions", "thyPreset"], outputs: ["thyOnSearch", "thyOnScrollToBottom", "thyOnExpandStatusChange"], exportAs: ["thySelect"] }, { kind: "component", type: ThyOption, selector: "thy-option", inputs: ["thyValue", "thyRawValue", "thyLabelText", "thyShowOptionCustom", "thySearchKey", "thyDisabled"], outputs: ["selectionChange", "visibleChange"] }, { kind: "ngmodule", type: ThyTooltipModule }, { kind: "component", type: SelectOptionComponent, selector: "select-option", inputs: ["field", "displayOption"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ThyEmptyModule }, { kind: "ngmodule", type: ThyFormModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ThySelectModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
52
56
|
}
|
53
57
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SelectCellEditorComponent, decorators: [{
|
54
58
|
type: Component,
|
55
59
|
args: [{ selector: 'select-cell-editor', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
56
60
|
class: 'd-block h-100 select-cell-editor'
|
57
61
|
}, imports: [
|
58
|
-
FormsModule,
|
59
|
-
NgTemplateOutlet,
|
60
62
|
ThySelect,
|
61
63
|
ThyOption,
|
62
|
-
ThyTag,
|
63
|
-
ThyIcon,
|
64
64
|
ThyTooltipModule,
|
65
|
-
ThyDot,
|
66
|
-
ThyFlexibleText,
|
67
|
-
SelectOptionPipe,
|
68
65
|
SelectOptionComponent,
|
69
|
-
|
70
|
-
|
66
|
+
CommonModule,
|
67
|
+
ThyEmptyModule,
|
68
|
+
ThyFormModule,
|
69
|
+
FormsModule,
|
70
|
+
ThySelectModule
|
71
|
+
], template: "<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"true\"\n [thyAllowClear]=\"true\"\n [thyPlaceHolder]=\"''\"\n [thyPreset]=\"preset()\"\n [thyMode]=\"field().settings.is_multiple ? 'multiple' : ''\"\n (ngModelChange)=\"onModelChange($event)\"\n (thyOnExpandStatusChange)=\"onOpenChange($event)\"\n>\n <ng-template #selectedDisplay let-option>\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </ng-template>\n @for (option of selectOptions(); track option._id) {\n <thy-option [thyValue]=\"option._id\" [thyRawValue]=\"option\" [thyShowOptionCustom]=\"true\" [thyLabelText]=\"option.text\">\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </thy-option>\n }\n</thy-select>\n" }]
|
71
72
|
}], ctorParameters: () => [] });
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2NlbGwtZWRpdG9ycy9zZWxlY3Qvc2VsZWN0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2NlbGwtZWRpdG9ycy9zZWxlY3Qvc2VsZWN0LWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBc0JoRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsc0JBQTZEO0lBU3hHLElBQUksVUFBVTtRQUNWLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFL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QixDQUFDLE1BQU0sUUFDekM7d0JBQ0YsS0FBSyxFQUFFLGtDQUFrQztxQkFDNUMsV0FDUTt3QkFDTCxTQUFTO3dCQUNULFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsZUFBZTtxQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGh5RW1wdHlNb2R1bGUgfSBmcm9tICduZ3gtdGV0aHlzL2VtcHR5JztcbmltcG9ydCB7IFRoeVNlbGVjdCwgVGh5U2VsZWN0TW9kdWxlIH0gZnJvbSAnbmd4LXRldGh5cy9zZWxlY3QnO1xuaW1wb3J0IHsgVGh5T3B0aW9uIH0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuaW1wb3J0IHsgVGh5VG9vbHRpcE1vZHVsZSB9IGZyb20gJ25neC10ZXRoeXMvdG9vbHRpcCc7XG5pbXBvcnQgeyBBSVRhYmxlUXVlcmllcywgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlU2VsZWN0RmllbGQgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBTZWxlY3RPcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jZWxsLXZpZXdzL3NlbGVjdC9vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEFic3RyYWN0RWRpdENlbGxFZGl0b3IgfSBmcm9tICcuLi9hYnN0cmFjdC1jZWxsLWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGh5Rm9ybU1vZHVsZSB9IGZyb20gJ25neC10ZXRoeXMvZm9ybSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2VsZWN0LWNlbGwtZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZC1ibG9jayBoLTEwMCBzZWxlY3QtY2VsbC1lZGl0b3InXG4gICAgfSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIFRoeVNlbGVjdCxcbiAgICAgICAgVGh5T3B0aW9uLFxuICAgICAgICBUaHlUb29sdGlwTW9kdWxlLFxuICAgICAgICBTZWxlY3RPcHRpb25Db21wb25lbnQsXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgVGh5RW1wdHlNb2R1bGUsXG4gICAgICAgIFRoeUZvcm1Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBUaHlTZWxlY3RNb2R1bGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdENlbGxFZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEVkaXRDZWxsRWRpdG9yPHN0cmluZ1tdIHwgc3RyaW5nLCBBSVRhYmxlU2VsZWN0RmllbGQ+IHtcbiAgICBzZWxlY3RPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZCgpLnNldHRpbmdzLm9wdGlvbnM7XG4gICAgfSk7XG5cbiAgICBwcmVzZXQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkKCkuc2V0dGluZ3MuaXNfbXVsdGlwbGUgJiYgdGhpcy5maWVsZCgpLnNldHRpbmdzLm9wdGlvbl9zdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZyA/ICd0YWcnIDogJyc7XG4gICAgfSk7XG5cbiAgICBnZXQgaXNNdWx0aXBsZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maWVsZCgpLnNldHRpbmdzLmlzX211bHRpcGxlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vZGVsVmFsdWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IEFJVGFibGVRdWVyaWVzLmdldEZpZWxkVmFsdWUodGhpcy5haVRhYmxlLCBbdGhpcy5yZWNvcmQoKS5faWQsIHRoaXMuZmllbGQoKS5faWRdKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlIHx8IFtdO1xuICAgICAgICB9KSgpO1xuICAgIH1cblxuICAgIG9uT3BlbkNoYW5nZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Nb2RlbENoYW5nZShldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVGbigpO1xuICAgIH1cblxuICAgIHVwZGF0ZVZhbHVlRm4oKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuaXNNdWx0aXBsZSA/IHRoaXMubW9kZWxWYWx1ZSA6ICh0aGlzLm1vZGVsVmFsdWUgJiYgKFt0aGlzLm1vZGVsVmFsdWVdIGFzIHN0cmluZ1tdKSkgfHwgW10pIGFzIHN0cmluZ1tdO1xuICAgICAgICBjb25zdCBvcmlnaW5WYWx1ZSA9IEFJVGFibGVRdWVyaWVzLmdldEZpZWxkVmFsdWUodGhpcy5haVRhYmxlLCBbdGhpcy5yZWNvcmQoKS5faWQsIHRoaXMuZmllbGQoKS5faWRdKSBhcyBzdHJpbmdbXTtcbiAgICAgICAgaWYgKCF2YWx1ZS5ldmVyeSgodiwgaSkgPT4gdiA9PT0gb3JpZ2luVmFsdWVbaV0pIHx8IHZhbHVlLmxlbmd0aCAhPT0gb3JpZ2luVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpZWxkVmFsdWUuZW1pdCh7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHBhdGg6IFt0aGlzLnJlY29yZCgpLl9pZCwgdGhpcy5maWVsZCgpLl9pZF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPHRoeS1zZWxlY3RcbiAgICBbKG5nTW9kZWwpXT1cIm1vZGVsVmFsdWVcIlxuICAgIFt0aHlBdXRvRXhwYW5kXT1cInRydWVcIlxuICAgIFt0aHlBbGxvd0NsZWFyXT1cInRydWVcIlxuICAgIFt0aHlQbGFjZUhvbGRlcl09XCInJ1wiXG4gICAgW3RoeVByZXNldF09XCJwcmVzZXQoKVwiXG4gICAgW3RoeU1vZGVdPVwiZmllbGQoKS5zZXR0aW5ncy5pc19tdWx0aXBsZSA/ICdtdWx0aXBsZScgOiAnJ1wiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgICAodGh5T25FeHBhbmRTdGF0dXNDaGFuZ2UpPVwib25PcGVuQ2hhbmdlKCRldmVudClcIlxuPlxuICAgIDxuZy10ZW1wbGF0ZSAjc2VsZWN0ZWREaXNwbGF5IGxldC1vcHRpb24+XG4gICAgICAgIDxzZWxlY3Qtb3B0aW9uIFtmaWVsZF09XCJmaWVsZCgpXCIgW2Rpc3BsYXlPcHRpb25dPVwib3B0aW9uXCI+PC9zZWxlY3Qtb3B0aW9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgQGZvciAob3B0aW9uIG9mIHNlbGVjdE9wdGlvbnMoKTsgdHJhY2sgb3B0aW9uLl9pZCkge1xuICAgICAgICA8dGh5LW9wdGlvbiBbdGh5VmFsdWVdPVwib3B0aW9uLl9pZFwiIFt0aHlSYXdWYWx1ZV09XCJvcHRpb25cIiBbdGh5U2hvd09wdGlvbkN1c3RvbV09XCJ0cnVlXCIgW3RoeUxhYmVsVGV4dF09XCJvcHRpb24udGV4dFwiPlxuICAgICAgICAgICAgPHNlbGVjdC1vcHRpb24gW2ZpZWxkXT1cImZpZWxkKClcIiBbZGlzcGxheU9wdGlvbl09XCJvcHRpb25cIj48L3NlbGVjdC1vcHRpb24+XG4gICAgICAgIDwvdGh5LW9wdGlvbj5cbiAgICB9XG48L3RoeS1zZWxlY3Q+XG4iXX0=
|
@@ -1,13 +1,16 @@
|
|
1
1
|
import { NgClass } from '@angular/common';
|
2
2
|
import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';
|
3
|
-
import { ThyDropdownAbstractMenu, ThyDropdownMenuItemDirective } from 'ngx-tethys/dropdown';
|
3
|
+
import { ThyDropdownAbstractMenu, ThyDropdownMenuItemDirective, ThyDropdownMenuItemNameDirective, ThyDropdownMenuItemIconDirective, ThyDropdownMenuItemMetaDirective } from 'ngx-tethys/dropdown';
|
4
4
|
import { ThyIcon } from 'ngx-tethys/icon';
|
5
|
+
import { ThyDivider } from 'ngx-tethys/divider';
|
5
6
|
import { AITableGridSelectionService } from '../../services/selection.service';
|
7
|
+
import { ThyNotifyService } from 'ngx-tethys/notify';
|
6
8
|
import * as i0 from "@angular/core";
|
7
9
|
export class AITableContextMenu extends ThyDropdownAbstractMenu {
|
8
10
|
constructor() {
|
9
11
|
super(...arguments);
|
10
12
|
this.aiTableGridSelectionService = inject(AITableGridSelectionService);
|
13
|
+
this.notifyService = inject(ThyNotifyService);
|
11
14
|
this.aiTable = input.required();
|
12
15
|
this.menuItems = input.required();
|
13
16
|
this.targetName = input.required();
|
@@ -15,16 +18,25 @@ export class AITableContextMenu extends ThyDropdownAbstractMenu {
|
|
15
18
|
}
|
16
19
|
execute(menu) {
|
17
20
|
if ((menu.disabled && !menu.disabled(this.aiTable(), this.targetName(), this.position())) || !menu.disabled) {
|
18
|
-
menu.exec &&
|
21
|
+
menu.exec &&
|
22
|
+
menu.exec(this.aiTable(), this.targetName(), this.position(), this.aiTableGridSelectionService, this.notifyService);
|
19
23
|
}
|
20
24
|
}
|
21
25
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableContextMenu, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
22
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AITableContextMenu, isStandalone: true, selector: "ai-table-context-menu", inputs: { aiTable: { classPropertyName: "aiTable", publicName: "aiTable", isSignal: true, isRequired: true, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: true, transformFunction: null }, targetName: { classPropertyName: "targetName", publicName: "targetName", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "context-menu" }, usesInheritance: true, ngImport: i0, template: "@for (menu of menuItems(); track $index) {\n @if ((menu.hidden && !menu.hidden(aiTable(), targetName(), position())) || !menu.hidden) {\n @let disabled = !!(menu.disabled && menu.disabled(aiTable(), targetName(), position()));\n
|
26
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AITableContextMenu, isStandalone: true, selector: "ai-table-context-menu", inputs: { aiTable: { classPropertyName: "aiTable", publicName: "aiTable", isSignal: true, isRequired: true, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: true, transformFunction: null }, targetName: { classPropertyName: "targetName", publicName: "targetName", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "context-menu" }, usesInheritance: true, ngImport: i0, template: "@for (menu of menuItems(); track $index) {\n @if ((menu.hidden && !menu.hidden(aiTable(), targetName(), position())) || !menu.hidden) {\n @if (menu.type === 'divider') {\n <thy-divider thyStyle=\"solid\"></thy-divider>\n } @else {\n @let disabled = !!(menu.disabled && menu.disabled(aiTable(), targetName(), position()));\n @let isRemoveRecords = menu.type === 'removeRecords';\n @let isPreventClearSelection = menu.type === 'copyCells' || menu.type === 'pasteCells' || menu.type === 'removeRecords';\n\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{\n 'remove-record': isRemoveRecords && !disabled,\n 'ai-table-prevent-clear-selection': isPreventClearSelection && !disabled\n }\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"disabled\"\n >\n <thy-icon thyDropdownMenuItemIcon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span thyDropdownMenuItemName>{{ menu.name }}</span>\n <span thyDropdownMenuItemMeta class=\"text-desc\">{{ menu.shortcutKey }}</span>\n </a>\n }\n }\n}\n", dependencies: [{ kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: ThyDropdownMenuItemNameDirective, selector: "[thyDropdownMenuItemName]" }, { kind: "directive", type: ThyDropdownMenuItemIconDirective, selector: "[thyDropdownMenuItemIcon]" }, { kind: "directive", type: ThyDropdownMenuItemMetaDirective, selector: "[thyDropdownMenuItemMeta]" }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThyDivider, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
23
27
|
}
|
24
28
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableContextMenu, decorators: [{
|
25
29
|
type: Component,
|
26
30
|
args: [{ selector: 'ai-table-context-menu', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
27
31
|
class: 'context-menu'
|
28
|
-
}, imports: [
|
32
|
+
}, imports: [
|
33
|
+
ThyDropdownMenuItemDirective,
|
34
|
+
ThyDropdownMenuItemNameDirective,
|
35
|
+
ThyDropdownMenuItemIconDirective,
|
36
|
+
ThyDropdownMenuItemMetaDirective,
|
37
|
+
ThyIcon,
|
38
|
+
NgClass,
|
39
|
+
ThyDivider
|
40
|
+
], template: "@for (menu of menuItems(); track $index) {\n @if ((menu.hidden && !menu.hidden(aiTable(), targetName(), position())) || !menu.hidden) {\n @if (menu.type === 'divider') {\n <thy-divider thyStyle=\"solid\"></thy-divider>\n } @else {\n @let disabled = !!(menu.disabled && menu.disabled(aiTable(), targetName(), position()));\n @let isRemoveRecords = menu.type === 'removeRecords';\n @let isPreventClearSelection = menu.type === 'copyCells' || menu.type === 'pasteCells' || menu.type === 'removeRecords';\n\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{\n 'remove-record': isRemoveRecords && !disabled,\n 'ai-table-prevent-clear-selection': isPreventClearSelection && !disabled\n }\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"disabled\"\n >\n <thy-icon thyDropdownMenuItemIcon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span thyDropdownMenuItemName>{{ menu.name }}</span>\n <span thyDropdownMenuItemMeta class=\"text-desc\">{{ menu.shortcutKey }}</span>\n </a>\n }\n }\n}\n" }]
|
29
41
|
}] });
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2NvbXBvbmVudHMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1QixnQ0FBZ0MsRUFDaEMsZ0NBQWdDLEVBQ2hDLGdDQUFnQyxFQUNuQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBb0JyRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsdUJBQXVCO0lBbEIvRDs7UUFtQkksZ0NBQTJCLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFbEUsa0JBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV6QyxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVyxDQUFDO1FBRXBDLGNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUE0QixDQUFDO1FBRXZELGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFFdEMsYUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQTRCLENBQUM7S0FRekQ7SUFORyxPQUFPLENBQUMsSUFBNEI7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxRyxJQUFJLENBQUMsSUFBSTtnQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUgsQ0FBQztJQUNMLENBQUM7K0dBbEJRLGtCQUFrQjttR0FBbEIsa0JBQWtCLG9xQkNsQy9CLHl2Q0EwQkEsNENERFEsNEJBQTRCLHNHQUM1QixnQ0FBZ0Msc0VBQ2hDLGdDQUFnQyxzRUFDaEMsZ0NBQWdDLHNFQUNoQyxPQUFPLHNNQUNQLE9BQU8sb0ZBQ1AsVUFBVTs7NEZBR0wsa0JBQWtCO2tCQWxCOUIsU0FBUzsrQkFDSSx1QkFBdUIsY0FFckIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNGLEtBQUssRUFBRSxjQUFjO3FCQUN4QixXQUNRO3dCQUNMLDRCQUE0Qjt3QkFDNUIsZ0NBQWdDO3dCQUNoQyxnQ0FBZ0M7d0JBQ2hDLGdDQUFnQzt3QkFDaEMsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLFVBQVU7cUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgVGh5RHJvcGRvd25BYnN0cmFjdE1lbnUsXG4gICAgVGh5RHJvcGRvd25NZW51SXRlbURpcmVjdGl2ZSxcbiAgICBUaHlEcm9wZG93bk1lbnVJdGVtTmFtZURpcmVjdGl2ZSxcbiAgICBUaHlEcm9wZG93bk1lbnVJdGVtSWNvbkRpcmVjdGl2ZSxcbiAgICBUaHlEcm9wZG93bk1lbnVJdGVtTWV0YURpcmVjdGl2ZVxufSBmcm9tICduZ3gtdGV0aHlzL2Ryb3Bkb3duJztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgVGh5RGl2aWRlciB9IGZyb20gJ25neC10ZXRoeXMvZGl2aWRlcic7XG5pbXBvcnQgeyBBSVRhYmxlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQ29udGV4dE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGh5Tm90aWZ5U2VydmljZSB9IGZyb20gJ25neC10ZXRoeXMvbm90aWZ5JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhaS10YWJsZS1jb250ZXh0LW1lbnUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb250ZXh0LW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2NvbnRleHQtbWVudSdcbiAgICB9LFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgVGh5RHJvcGRvd25NZW51SXRlbURpcmVjdGl2ZSxcbiAgICAgICAgVGh5RHJvcGRvd25NZW51SXRlbU5hbWVEaXJlY3RpdmUsXG4gICAgICAgIFRoeURyb3Bkb3duTWVudUl0ZW1JY29uRGlyZWN0aXZlLFxuICAgICAgICBUaHlEcm9wZG93bk1lbnVJdGVtTWV0YURpcmVjdGl2ZSxcbiAgICAgICAgVGh5SWNvbixcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgVGh5RGl2aWRlclxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQUlUYWJsZUNvbnRleHRNZW51IGV4dGVuZHMgVGh5RHJvcGRvd25BYnN0cmFjdE1lbnUge1xuICAgIGFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSA9IGluamVjdChBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UpO1xuXG4gICAgbm90aWZ5U2VydmljZSA9IGluamVjdChUaHlOb3RpZnlTZXJ2aWNlKTtcblxuICAgIGFpVGFibGUgPSBpbnB1dC5yZXF1aXJlZDxBSVRhYmxlPigpO1xuXG4gICAgbWVudUl0ZW1zID0gaW5wdXQucmVxdWlyZWQ8QUlUYWJsZUNvbnRleHRNZW51SXRlbVtdPigpO1xuXG4gICAgdGFyZ2V0TmFtZSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcblxuICAgIHBvc2l0aW9uID0gaW5wdXQucmVxdWlyZWQ8eyB4OiBudW1iZXI7IHk6IG51bWJlciB9PigpO1xuXG4gICAgZXhlY3V0ZShtZW51OiBBSVRhYmxlQ29udGV4dE1lbnVJdGVtKSB7XG4gICAgICAgIGlmICgobWVudS5kaXNhYmxlZCAmJiAhbWVudS5kaXNhYmxlZCh0aGlzLmFpVGFibGUoKSwgdGhpcy50YXJnZXROYW1lKCksIHRoaXMucG9zaXRpb24oKSkpIHx8ICFtZW51LmRpc2FibGVkKSB7XG4gICAgICAgICAgICBtZW51LmV4ZWMgJiZcbiAgICAgICAgICAgICAgICBtZW51LmV4ZWModGhpcy5haVRhYmxlKCksIHRoaXMudGFyZ2V0TmFtZSgpLCB0aGlzLnBvc2l0aW9uKCksIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLCB0aGlzLm5vdGlmeVNlcnZpY2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGZvciAobWVudSBvZiBtZW51SXRlbXMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgQGlmICgobWVudS5oaWRkZW4gJiYgIW1lbnUuaGlkZGVuKGFpVGFibGUoKSwgdGFyZ2V0TmFtZSgpLCBwb3NpdGlvbigpKSkgfHwgIW1lbnUuaGlkZGVuKSB7XG4gICAgICAgIEBpZiAobWVudS50eXBlID09PSAnZGl2aWRlcicpIHtcbiAgICAgICAgICAgIDx0aHktZGl2aWRlciB0aHlTdHlsZT1cInNvbGlkXCI+PC90aHktZGl2aWRlcj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAbGV0IGRpc2FibGVkID0gISEobWVudS5kaXNhYmxlZCAmJiBtZW51LmRpc2FibGVkKGFpVGFibGUoKSwgdGFyZ2V0TmFtZSgpLCBwb3NpdGlvbigpKSk7XG4gICAgICAgICAgICBAbGV0IGlzUmVtb3ZlUmVjb3JkcyA9IG1lbnUudHlwZSA9PT0gJ3JlbW92ZVJlY29yZHMnO1xuICAgICAgICAgICAgQGxldCBpc1ByZXZlbnRDbGVhclNlbGVjdGlvbiA9IG1lbnUudHlwZSA9PT0gJ2NvcHlDZWxscycgfHwgbWVudS50eXBlID09PSAncGFzdGVDZWxscycgfHwgbWVudS50eXBlID09PSAncmVtb3ZlUmVjb3Jkcyc7XG5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgdGh5RHJvcGRvd25NZW51SXRlbVxuICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ3JlbW92ZS1yZWNvcmQnOiBpc1JlbW92ZVJlY29yZHMgJiYgIWRpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgICAnYWktdGFibGUtcHJldmVudC1jbGVhci1zZWxlY3Rpb24nOiBpc1ByZXZlbnRDbGVhclNlbGVjdGlvbiAmJiAhZGlzYWJsZWRcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhlY3V0ZShtZW51KVwiXG4gICAgICAgICAgICAgICAgW3RoeURpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dGh5LWljb24gdGh5RHJvcGRvd25NZW51SXRlbUljb24gW3RoeUljb25OYW1lXT1cIm1lbnUuaWNvbiFcIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuIHRoeURyb3Bkb3duTWVudUl0ZW1OYW1lPnt7IG1lbnUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiB0aHlEcm9wZG93bk1lbnVJdGVtTWV0YSBjbGFzcz1cInRleHQtZGVzY1wiPnt7IG1lbnUuc2hvcnRjdXRLZXkgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
@@ -0,0 +1,150 @@
|
|
1
|
+
import { ChangeDetectionStrategy, Component, effect, ElementRef, inject, output, Renderer2 } from '@angular/core';
|
2
|
+
import { DragType } from '../../core';
|
3
|
+
import { AITableGridSelectionService } from '../../services/selection.service';
|
4
|
+
import * as i0 from "@angular/core";
|
5
|
+
export class AITableDragComponent {
|
6
|
+
constructor() {
|
7
|
+
this.dragEnd = output();
|
8
|
+
this.aiTableGridSelectionService = inject(AITableGridSelectionService);
|
9
|
+
this.render2 = inject(Renderer2);
|
10
|
+
this.elementRef = inject((ElementRef));
|
11
|
+
this.draggedData = null;
|
12
|
+
this.mouseStartPosition = null;
|
13
|
+
this.aiTableDrag = null;
|
14
|
+
effect(() => {
|
15
|
+
const drag = this.aiTableGridSelectionService.aiTable.dragState?.();
|
16
|
+
if (drag && drag.sourceIds.size > 0) {
|
17
|
+
if (!this.rect || !this.line) {
|
18
|
+
return;
|
19
|
+
}
|
20
|
+
this.aiTableDrag = drag;
|
21
|
+
}
|
22
|
+
else {
|
23
|
+
this.aiTableDrag = null;
|
24
|
+
}
|
25
|
+
});
|
26
|
+
}
|
27
|
+
ngOnInit() {
|
28
|
+
this.rect = this.elementRef.nativeElement.querySelector('.rect');
|
29
|
+
this.line = this.elementRef.nativeElement.querySelector('.line');
|
30
|
+
this.mousedownListener = this.render2.listen('window', 'mousedown', (e) => {
|
31
|
+
this.mouseStartPosition = { x: e.x, y: e.y };
|
32
|
+
});
|
33
|
+
this.mousemoveListener = this.render2.listen('window', 'mousemove', (e) => {
|
34
|
+
if (this.timer) {
|
35
|
+
cancelAnimationFrame(this.timer);
|
36
|
+
}
|
37
|
+
this.timer = requestAnimationFrame(() => {
|
38
|
+
if (this.mouseStartPosition && this.aiTableDrag) {
|
39
|
+
this.handleDrag(e, this.aiTableDrag);
|
40
|
+
}
|
41
|
+
});
|
42
|
+
});
|
43
|
+
this.mouseupListener = this.render2.listen('window', 'mouseup', () => {
|
44
|
+
this.mouseStartPosition = null;
|
45
|
+
this.aiTableDrag = null;
|
46
|
+
this.handleDragEnd();
|
47
|
+
});
|
48
|
+
}
|
49
|
+
handleDrag(e, drag) {
|
50
|
+
if (drag.type !== DragType.none) {
|
51
|
+
this.render2.setStyle(this.elementRef.nativeElement, 'display', 'block');
|
52
|
+
}
|
53
|
+
else {
|
54
|
+
return;
|
55
|
+
}
|
56
|
+
const moveX = e.x - this.mouseStartPosition.x;
|
57
|
+
const aiTable = this.aiTableGridSelectionService.aiTable;
|
58
|
+
const scroll = drag.scroll || { x: 0, y: 0 };
|
59
|
+
const coordinate = drag.coordinate;
|
60
|
+
switch (drag.type) {
|
61
|
+
case DragType.field:
|
62
|
+
const fields = aiTable.fields();
|
63
|
+
let width = 0;
|
64
|
+
fields.forEach((field, index) => {
|
65
|
+
if (drag.sourceIds.has(field._id)) {
|
66
|
+
width += coordinate.columnIndicesSizeMap[index] || 0;
|
67
|
+
}
|
68
|
+
});
|
69
|
+
const visibleColumnIndexMap = aiTable.context.visibleColumnsIndexMap();
|
70
|
+
const sourceColumnIndex = visibleColumnIndexMap.get(drag.sourceIds.values().next().value) || 0;
|
71
|
+
const sourceColumnStartX = coordinate.getColumnOffset(sourceColumnIndex);
|
72
|
+
const sourceColumnWidth = coordinate.getColumnWidth(sourceColumnIndex);
|
73
|
+
// TODO: 目前默认第一列为冻结列,后期支持设置冻结列需要处理
|
74
|
+
const isSourceColumnFrozen = sourceColumnIndex === 0;
|
75
|
+
const pointerX = moveX + sourceColumnStartX;
|
76
|
+
// 拖拽中心点
|
77
|
+
const dragCenter = sourceColumnWidth / 2;
|
78
|
+
let targetColumnIndex = coordinate.getColumnStartIndex(pointerX + (isSourceColumnFrozen ? scroll.x : 0) + dragCenter);
|
79
|
+
let targetColumnStartX = coordinate.getColumnOffset(targetColumnIndex);
|
80
|
+
this.render2.setStyle(this.rect, 'cursor', 'move');
|
81
|
+
this.render2.setStyle(this.rect, 'width', `${width}px`);
|
82
|
+
this.render2.setStyle(this.rect, 'height', `100%`);
|
83
|
+
this.render2.setStyle(this.rect, 'top', 0);
|
84
|
+
this.render2.setStyle(this.rect, 'left', `${pointerX - (isSourceColumnFrozen ? 0 : scroll.x)}px`);
|
85
|
+
const lastColumnOffset = coordinate.getColumnOffset(coordinate.columnCount - 1);
|
86
|
+
const lastColumnWidth = coordinate.getColumnWidth(coordinate.columnCount - 1);
|
87
|
+
let isLastColumn = false;
|
88
|
+
// 处理最后一列
|
89
|
+
if (pointerX + dragCenter > lastColumnOffset + lastColumnWidth) {
|
90
|
+
targetColumnIndex = coordinate.columnCount;
|
91
|
+
targetColumnStartX = lastColumnOffset + lastColumnWidth;
|
92
|
+
isLastColumn = true;
|
93
|
+
}
|
94
|
+
if ((targetColumnIndex >= 0 && (targetColumnIndex - sourceColumnIndex > 1 || targetColumnIndex - sourceColumnIndex < 0)) ||
|
95
|
+
isLastColumn) {
|
96
|
+
this.render2.setStyle(this.line, 'width', `2px`);
|
97
|
+
this.render2.setStyle(this.line, 'height', `100%`);
|
98
|
+
this.render2.setStyle(this.line, 'top', 0);
|
99
|
+
this.render2.setStyle(this.line, 'left', `${targetColumnStartX - scroll.x}px`);
|
100
|
+
const fieldsIndex = [];
|
101
|
+
drag.sourceIds.forEach((id) => {
|
102
|
+
const index = visibleColumnIndexMap.get(id) || 0;
|
103
|
+
fieldsIndex.push(index);
|
104
|
+
});
|
105
|
+
// 向右移动目标在目标列的前一列
|
106
|
+
if (targetColumnIndex > sourceColumnIndex) {
|
107
|
+
targetColumnIndex -= 1;
|
108
|
+
}
|
109
|
+
this.draggedData = { type: DragType.field, targetIndex: targetColumnIndex, fieldIds: drag.sourceIds, fieldsIndex };
|
110
|
+
}
|
111
|
+
else {
|
112
|
+
this.render2.setStyle(this.line, 'width', 0);
|
113
|
+
this.draggedData = null;
|
114
|
+
}
|
115
|
+
break;
|
116
|
+
case DragType.record:
|
117
|
+
break;
|
118
|
+
case DragType.columnWidth:
|
119
|
+
break;
|
120
|
+
}
|
121
|
+
}
|
122
|
+
handleDragEnd() {
|
123
|
+
this.render2.setStyle(this.elementRef.nativeElement, 'display', 'none');
|
124
|
+
if (this.draggedData) {
|
125
|
+
this.dragEnd.emit({ ...this.draggedData });
|
126
|
+
this.draggedData = null;
|
127
|
+
}
|
128
|
+
}
|
129
|
+
ngOnDestroy() {
|
130
|
+
if (this.mousedownListener)
|
131
|
+
this.mousedownListener();
|
132
|
+
if (this.mousemoveListener)
|
133
|
+
this.mousemoveListener();
|
134
|
+
if (this.mouseupListener)
|
135
|
+
this.mouseupListener();
|
136
|
+
if (this.timer) {
|
137
|
+
cancelAnimationFrame(this.timer);
|
138
|
+
this.timer = null;
|
139
|
+
}
|
140
|
+
}
|
141
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableDragComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
142
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AITableDragComponent, isStandalone: true, selector: "ai-table-drag", outputs: { dragEnd: "dragEnd" }, host: { classAttribute: "drag-container" }, ngImport: i0, template: "<div class=\"rect\"></div>\n<div class=\"line\"></div>", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
143
|
+
}
|
144
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableDragComponent, decorators: [{
|
145
|
+
type: Component,
|
146
|
+
args: [{ selector: 'ai-table-drag', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
147
|
+
class: 'drag-container'
|
148
|
+
}, template: "<div class=\"rect\"></div>\n<div class=\"line\"></div>" }]
|
149
|
+
}], ctorParameters: () => [] });
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2RyYWcvZHJhZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2RyYWcvZHJhZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JJLE9BQU8sRUFBaUMsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQVcvRSxNQUFNLE9BQU8sb0JBQW9CO0lBeUI3QjtRQXhCQSxZQUFPLEdBQUcsTUFBTSxFQUFlLENBQUM7UUFFeEIsZ0NBQTJCLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFbEUsWUFBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwQyxlQUFVLEdBQTRCLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFDO1FBTTlELGdCQUFXLEdBQXVCLElBQUksQ0FBQztRQUV2Qyx1QkFBa0IsR0FBb0MsSUFBSSxDQUFDO1FBRTNELGdCQUFXLEdBQTRCLElBQUksQ0FBQztRQVNoRCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3BFLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLElB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QjttR0FBcEIsb0JBQW9CLHNKQ2JqQyx3REFDd0I7OzRGRFlYLG9CQUFvQjtrQkFUaEMsU0FBUzsrQkFDSSxlQUFlLGNBRWIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNGLEtBQUssRUFBRSxnQkFBZ0I7cUJBQzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZURyYWdTdGF0ZSwgRHJhZ0VuZERhdGEsIERyYWdUeXBlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWktdGFibGUtZHJhZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RyYWcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2RyYWctY29udGFpbmVyJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgQUlUYWJsZURyYWdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgZHJhZ0VuZCA9IG91dHB1dDxEcmFnRW5kRGF0YT4oKTtcblxuICAgIHByaXZhdGUgYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KEFJVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSk7XG5cbiAgICBwcml2YXRlIHJlbmRlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcblxuICAgIHByaXZhdGUgcmVjdCE6IEhUTUxFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBsaW5lITogSFRNTEVsZW1lbnQ7XG5cbiAgICBwcml2YXRlIGRyYWdnZWREYXRhOiBEcmFnRW5kRGF0YSB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBtb3VzZVN0YXJ0UG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBhaVRhYmxlRHJhZzogQUlUYWJsZURyYWdTdGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSB0aW1lciE6IG51bWJlciB8IG51bGw7XG5cbiAgICBwcml2YXRlIG1vdXNlZG93bkxpc3RlbmVyPzogKCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIG1vdXNlbW92ZUxpc3RlbmVyPzogKCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIG1vdXNldXBMaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRyYWcgPSB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5haVRhYmxlLmRyYWdTdGF0ZT8uKCk7XG4gICAgICAgICAgICBpZiAoZHJhZyAmJiBkcmFnLnNvdXJjZUlkcy5zaXplID4gMCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5yZWN0IHx8ICF0aGlzLmxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVEcmFnID0gZHJhZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlRHJhZyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJlY3QgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucmVjdCcpITtcbiAgICAgICAgdGhpcy5saW5lID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmxpbmUnKSE7XG4gICAgICAgIHRoaXMubW91c2Vkb3duTGlzdGVuZXIgPSB0aGlzLnJlbmRlcjIubGlzdGVuKCd3aW5kb3cnLCAnbW91c2Vkb3duJywgKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2VTdGFydFBvc2l0aW9uID0geyB4OiBlLngsIHk6IGUueSB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tb3VzZW1vdmVMaXN0ZW5lciA9IHRoaXMucmVuZGVyMi5saXN0ZW4oJ3dpbmRvdycsICdtb3VzZW1vdmUnLCAoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnRpbWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGltZXIgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vdXNlU3RhcnRQb3NpdGlvbiAmJiB0aGlzLmFpVGFibGVEcmFnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRHJhZyhlLCB0aGlzLmFpVGFibGVEcmFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubW91c2V1cExpc3RlbmVyID0gdGhpcy5yZW5kZXIyLmxpc3Rlbignd2luZG93JywgJ21vdXNldXAnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlU3RhcnRQb3NpdGlvbiA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGVEcmFnID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRHJhZ0VuZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZURyYWcoZTogTW91c2VFdmVudCwgZHJhZzogQUlUYWJsZURyYWdTdGF0ZSkge1xuICAgICAgICBpZiAoZHJhZy50eXBlICE9PSBEcmFnVHlwZS5ub25lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW92ZVggPSBlLnggLSB0aGlzLm1vdXNlU3RhcnRQb3NpdGlvbiEueDtcbiAgICAgICAgY29uc3QgYWlUYWJsZSA9IHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmFpVGFibGU7XG4gICAgICAgIGNvbnN0IHNjcm9sbCA9IGRyYWcuc2Nyb2xsIHx8IHsgeDogMCwgeTogMCB9O1xuICAgICAgICBjb25zdCBjb29yZGluYXRlID0gZHJhZy5jb29yZGluYXRlITtcbiAgICAgICAgc3dpdGNoIChkcmFnLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRHJhZ1R5cGUuZmllbGQ6XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gYWlUYWJsZS5maWVsZHMoKTtcbiAgICAgICAgICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRyYWcuc291cmNlSWRzLmhhcyhmaWVsZC5faWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCArPSBjb29yZGluYXRlLmNvbHVtbkluZGljZXNTaXplTWFwW2luZGV4XSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbkluZGV4TWFwID0gYWlUYWJsZS5jb250ZXh0IS52aXNpYmxlQ29sdW1uc0luZGV4TWFwKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlQ29sdW1uSW5kZXggPSB2aXNpYmxlQ29sdW1uSW5kZXhNYXAuZ2V0KGRyYWcuc291cmNlSWRzLnZhbHVlcygpLm5leHQoKS52YWx1ZSEpIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlQ29sdW1uU3RhcnRYID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQoc291cmNlQ29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvbHVtbldpZHRoID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5XaWR0aChzb3VyY2VDb2x1bW5JbmRleCk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzog55uu5YmN6buY6K6k56ys5LiA5YiX5Li65Ya757uT5YiX77yM5ZCO5pyf5pSv5oyB6K6+572u5Ya757uT5YiX6ZyA6KaB5aSE55CGXG4gICAgICAgICAgICAgICAgY29uc3QgaXNTb3VyY2VDb2x1bW5Gcm96ZW4gPSBzb3VyY2VDb2x1bW5JbmRleCA9PT0gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludGVyWCA9IG1vdmVYICsgc291cmNlQ29sdW1uU3RhcnRYO1xuICAgICAgICAgICAgICAgIC8vIOaLluaLveS4reW/g+eCuVxuICAgICAgICAgICAgICAgIGNvbnN0IGRyYWdDZW50ZXIgPSBzb3VyY2VDb2x1bW5XaWR0aCAvIDI7XG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldENvbHVtbkluZGV4ID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5TdGFydEluZGV4KHBvaW50ZXJYICsgKGlzU291cmNlQ29sdW1uRnJvemVuID8gc2Nyb2xsLnggOiAwKSArIGRyYWdDZW50ZXIpO1xuICAgICAgICAgICAgICAgIGxldCB0YXJnZXRDb2x1bW5TdGFydFggPSBjb29yZGluYXRlLmdldENvbHVtbk9mZnNldCh0YXJnZXRDb2x1bW5JbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMucmVjdCwgJ2N1cnNvcicsICdtb3ZlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMucmVjdCwgJ3dpZHRoJywgYCR7d2lkdGh9cHhgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5yZWN0LCAnaGVpZ2h0JywgYDEwMCVgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5yZWN0LCAndG9wJywgMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMucmVjdCwgJ2xlZnQnLCBgJHtwb2ludGVyWCAtIChpc1NvdXJjZUNvbHVtbkZyb3plbiA/IDAgOiBzY3JvbGwueCl9cHhgKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDb2x1bW5PZmZzZXQgPSBjb29yZGluYXRlLmdldENvbHVtbk9mZnNldChjb29yZGluYXRlLmNvbHVtbkNvdW50IC0gMSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdENvbHVtbldpZHRoID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5XaWR0aChjb29yZGluYXRlLmNvbHVtbkNvdW50IC0gMSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgaXNMYXN0Q29sdW1uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8g5aSE55CG5pyA5ZCO5LiA5YiXXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50ZXJYICsgZHJhZ0NlbnRlciA+IGxhc3RDb2x1bW5PZmZzZXQgKyBsYXN0Q29sdW1uV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29sdW1uSW5kZXggPSBjb29yZGluYXRlLmNvbHVtbkNvdW50O1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb2x1bW5TdGFydFggPSBsYXN0Q29sdW1uT2Zmc2V0ICsgbGFzdENvbHVtbldpZHRoO1xuICAgICAgICAgICAgICAgICAgICBpc0xhc3RDb2x1bW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICh0YXJnZXRDb2x1bW5JbmRleCA+PSAwICYmICh0YXJnZXRDb2x1bW5JbmRleCAtIHNvdXJjZUNvbHVtbkluZGV4ID4gMSB8fCB0YXJnZXRDb2x1bW5JbmRleCAtIHNvdXJjZUNvbHVtbkluZGV4IDwgMCkpIHx8XG4gICAgICAgICAgICAgICAgICAgIGlzTGFzdENvbHVtblxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5saW5lLCAnd2lkdGgnLCBgMnB4YCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLmxpbmUsICdoZWlnaHQnLCBgMTAwJWApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5saW5lLCAndG9wJywgMCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLmxpbmUsICdsZWZ0JywgYCR7dGFyZ2V0Q29sdW1uU3RhcnRYIC0gc2Nyb2xsLnh9cHhgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRzSW5kZXg6IG51bWJlcltdID0gW107XG4gICAgICAgICAgICAgICAgICAgIGRyYWcuc291cmNlSWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHZpc2libGVDb2x1bW5JbmRleE1hcC5nZXQoaWQpIHx8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHNJbmRleC5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIOWQkeWPs+enu+WKqOebruagh+WcqOebruagh+WIl+eahOWJjeS4gOWIl1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q29sdW1uSW5kZXggPiBzb3VyY2VDb2x1bW5JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29sdW1uSW5kZXggLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdnZWREYXRhID0geyB0eXBlOiBEcmFnVHlwZS5maWVsZCwgdGFyZ2V0SW5kZXg6IHRhcmdldENvbHVtbkluZGV4LCBmaWVsZElkczogZHJhZy5zb3VyY2VJZHMsIGZpZWxkc0luZGV4IH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMubGluZSwgJ3dpZHRoJywgMCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dlZERhdGEgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRHJhZ1R5cGUucmVjb3JkOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEcmFnVHlwZS5jb2x1bW5XaWR0aDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRHJhZ0VuZCgpIHtcbiAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgIGlmICh0aGlzLmRyYWdnZWREYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdFbmQuZW1pdCh7IC4uLnRoaXMuZHJhZ2dlZERhdGEgfSk7XG4gICAgICAgICAgICB0aGlzLmRyYWdnZWREYXRhID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5tb3VzZWRvd25MaXN0ZW5lcikgdGhpcy5tb3VzZWRvd25MaXN0ZW5lcigpO1xuICAgICAgICBpZiAodGhpcy5tb3VzZW1vdmVMaXN0ZW5lcikgdGhpcy5tb3VzZW1vdmVMaXN0ZW5lcigpO1xuICAgICAgICBpZiAodGhpcy5tb3VzZXVwTGlzdGVuZXIpIHRoaXMubW91c2V1cExpc3RlbmVyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudGltZXIpO1xuICAgICAgICAgICAgdGhpcy50aW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicmVjdFwiPjwvZGl2PlxuPGRpdiBjbGFzcz1cImxpbmVcIj48L2Rpdj4iXX0=
|