@ai-table/grid 0.0.40 → 0.0.42
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 +91 -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 +88 -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 +184 -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 +2146 -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.gridData().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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QTNKUSxvQkFBb0I7bUdBQXBCLG9CQUFvQixzSkNiakMsd0RBQ3dCOzs0RkRZWCxvQkFBb0I7a0JBVGhDLFNBQVM7K0JBQ0ksZUFBZSxjQUViLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDRixLQUFLLEVBQUUsZ0JBQWdCO3FCQUMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVEcmFnU3RhdGUsIERyYWdFbmREYXRhLCBEcmFnVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLWRyYWcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kcmFnLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdkcmFnLWNvbnRhaW5lcidcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEFJVGFibGVEcmFnQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIGRyYWdFbmQgPSBvdXRwdXQ8RHJhZ0VuZERhdGE+KCk7XG5cbiAgICBwcml2YXRlIGFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSA9IGluamVjdChBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UpO1xuXG4gICAgcHJpdmF0ZSByZW5kZXIyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XG5cbiAgICBwcml2YXRlIHJlY3QhOiBIVE1MRWxlbWVudDtcblxuICAgIHByaXZhdGUgbGluZSE6IEhUTUxFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBkcmFnZ2VkRGF0YTogRHJhZ0VuZERhdGEgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgbW91c2VTdGFydFBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgYWlUYWJsZURyYWc6IEFJVGFibGVEcmFnU3RhdGUgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgdGltZXIhOiBudW1iZXIgfCBudWxsO1xuXG4gICAgcHJpdmF0ZSBtb3VzZWRvd25MaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBtb3VzZW1vdmVMaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBtb3VzZXVwTGlzdGVuZXI/OiAoKSA9PiB2b2lkO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkcmFnID0gdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuYWlUYWJsZS5kcmFnU3RhdGU/LigpO1xuICAgICAgICAgICAgaWYgKGRyYWcgJiYgZHJhZy5zb3VyY2VJZHMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucmVjdCB8fCAhdGhpcy5saW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlRHJhZyA9IGRyYWc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZURyYWcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5yZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnJlY3QnKSE7XG4gICAgICAgIHRoaXMubGluZSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5saW5lJykhO1xuICAgICAgICB0aGlzLm1vdXNlZG93bkxpc3RlbmVyID0gdGhpcy5yZW5kZXIyLmxpc3Rlbignd2luZG93JywgJ21vdXNlZG93bicsIChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlU3RhcnRQb3NpdGlvbiA9IHsgeDogZS54LCB5OiBlLnkgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubW91c2Vtb3ZlTGlzdGVuZXIgPSB0aGlzLnJlbmRlcjIubGlzdGVuKCd3aW5kb3cnLCAnbW91c2Vtb3ZlJywgKGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy50aW1lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRpbWVyID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb3VzZVN0YXJ0UG9zaXRpb24gJiYgdGhpcy5haVRhYmxlRHJhZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZURyYWcoZSwgdGhpcy5haVRhYmxlRHJhZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1vdXNldXBMaXN0ZW5lciA9IHRoaXMucmVuZGVyMi5saXN0ZW4oJ3dpbmRvdycsICdtb3VzZXVwJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3VzZVN0YXJ0UG9zaXRpb24gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlRHJhZyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZURyYWdFbmQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVEcmFnKGU6IE1vdXNlRXZlbnQsIGRyYWc6IEFJVGFibGVEcmFnU3RhdGUpIHtcbiAgICAgICAgaWYgKGRyYWcudHlwZSAhPT0gRHJhZ1R5cGUubm9uZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdibG9jaycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vdmVYID0gZS54IC0gdGhpcy5tb3VzZVN0YXJ0UG9zaXRpb24hLng7XG4gICAgICAgIGNvbnN0IGFpVGFibGUgPSB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5haVRhYmxlO1xuICAgICAgICBjb25zdCBzY3JvbGwgPSBkcmFnLnNjcm9sbCB8fCB7IHg6IDAsIHk6IDAgfTtcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZSA9IGRyYWcuY29vcmRpbmF0ZSE7XG4gICAgICAgIHN3aXRjaCAoZHJhZy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIERyYWdUeXBlLmZpZWxkOlxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IGFpVGFibGUuZ3JpZERhdGEoKS5maWVsZHM7XG4gICAgICAgICAgICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkcmFnLnNvdXJjZUlkcy5oYXMoZmllbGQuX2lkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggKz0gY29vcmRpbmF0ZS5jb2x1bW5JbmRpY2VzU2l6ZU1hcFtpbmRleF0gfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpc2libGVDb2x1bW5JbmRleE1hcCA9IGFpVGFibGUuY29udGV4dCEudmlzaWJsZUNvbHVtbnNJbmRleE1hcCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvbHVtbkluZGV4ID0gdmlzaWJsZUNvbHVtbkluZGV4TWFwLmdldChkcmFnLnNvdXJjZUlkcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUhKSB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvbHVtblN0YXJ0WCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uT2Zmc2V0KHNvdXJjZUNvbHVtbkluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VDb2x1bW5XaWR0aCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uV2lkdGgoc291cmNlQ29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IOebruWJjem7mOiupOesrOS4gOWIl+S4uuWGu+e7k+WIl++8jOWQjuacn+aUr+aMgeiuvue9ruWGu+e7k+WIl+mcgOimgeWkhOeQhlxuICAgICAgICAgICAgICAgIGNvbnN0IGlzU291cmNlQ29sdW1uRnJvemVuID0gc291cmNlQ29sdW1uSW5kZXggPT09IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRlclggPSBtb3ZlWCArIHNvdXJjZUNvbHVtblN0YXJ0WDtcbiAgICAgICAgICAgICAgICAvLyDmi5bmi73kuK3lv4PngrlcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnQ2VudGVyID0gc291cmNlQ29sdW1uV2lkdGggLyAyO1xuICAgICAgICAgICAgICAgIGxldCB0YXJnZXRDb2x1bW5JbmRleCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uU3RhcnRJbmRleChwb2ludGVyWCArIChpc1NvdXJjZUNvbHVtbkZyb3plbiA/IHNjcm9sbC54IDogMCkgKyBkcmFnQ2VudGVyKTtcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0Q29sdW1uU3RhcnRYID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQodGFyZ2V0Q29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLnJlY3QsICdjdXJzb3InLCAnbW92ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLnJlY3QsICd3aWR0aCcsIGAke3dpZHRofXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMucmVjdCwgJ2hlaWdodCcsIGAxMDAlYCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMucmVjdCwgJ3RvcCcsIDApO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLnJlY3QsICdsZWZ0JywgYCR7cG9pbnRlclggLSAoaXNTb3VyY2VDb2x1bW5Gcm96ZW4gPyAwIDogc2Nyb2xsLngpfXB4YCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q29sdW1uT2Zmc2V0ID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQoY29vcmRpbmF0ZS5jb2x1bW5Db3VudCAtIDEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDb2x1bW5XaWR0aCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uV2lkdGgoY29vcmRpbmF0ZS5jb2x1bW5Db3VudCAtIDEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGlzTGFzdENvbHVtbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIOWkhOeQhuacgOWQjuS4gOWIl1xuICAgICAgICAgICAgICAgIGlmIChwb2ludGVyWCArIGRyYWdDZW50ZXIgPiBsYXN0Q29sdW1uT2Zmc2V0ICsgbGFzdENvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldENvbHVtbkluZGV4ID0gY29vcmRpbmF0ZS5jb2x1bW5Db3VudDtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29sdW1uU3RhcnRYID0gbGFzdENvbHVtbk9mZnNldCArIGxhc3RDb2x1bW5XaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgaXNMYXN0Q29sdW1uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAodGFyZ2V0Q29sdW1uSW5kZXggPj0gMCAmJiAodGFyZ2V0Q29sdW1uSW5kZXggLSBzb3VyY2VDb2x1bW5JbmRleCA+IDEgfHwgdGFyZ2V0Q29sdW1uSW5kZXggLSBzb3VyY2VDb2x1bW5JbmRleCA8IDApKSB8fFxuICAgICAgICAgICAgICAgICAgICBpc0xhc3RDb2x1bW5cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMubGluZSwgJ3dpZHRoJywgYDJweGApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5saW5lLCAnaGVpZ2h0JywgYDEwMCVgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMubGluZSwgJ3RvcCcsIDApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5saW5lLCAnbGVmdCcsIGAke3RhcmdldENvbHVtblN0YXJ0WCAtIHNjcm9sbC54fXB4YCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkc0luZGV4OiBudW1iZXJbXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBkcmFnLnNvdXJjZUlkcy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB2aXNpYmxlQ29sdW1uSW5kZXhNYXAuZ2V0KGlkKSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzSW5kZXgucHVzaChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyDlkJHlj7Pnp7vliqjnm67moIflnKjnm67moIfliJfnmoTliY3kuIDliJdcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENvbHVtbkluZGV4ID4gc291cmNlQ29sdW1uSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldENvbHVtbkluZGV4IC09IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnZ2VkRGF0YSA9IHsgdHlwZTogRHJhZ1R5cGUuZmllbGQsIHRhcmdldEluZGV4OiB0YXJnZXRDb2x1bW5JbmRleCwgZmllbGRJZHM6IGRyYWcuc291cmNlSWRzLCBmaWVsZHNJbmRleCB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLmxpbmUsICd3aWR0aCcsIDApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdnZWREYXRhID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERyYWdUeXBlLnJlY29yZDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRHJhZ1R5cGUuY29sdW1uV2lkdGg6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZURyYWdFbmQoKSB7XG4gICAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICBpZiAodGhpcy5kcmFnZ2VkRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kcmFnRW5kLmVtaXQoeyAuLi50aGlzLmRyYWdnZWREYXRhIH0pO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkRGF0YSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMubW91c2Vkb3duTGlzdGVuZXIpIHRoaXMubW91c2Vkb3duTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHRoaXMubW91c2Vtb3ZlTGlzdGVuZXIpIHRoaXMubW91c2Vtb3ZlTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHRoaXMubW91c2V1cExpc3RlbmVyKSB0aGlzLm1vdXNldXBMaXN0ZW5lcigpO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJlY3RcIj48L2Rpdj5cbjxkaXYgY2xhc3M9XCJsaW5lXCI+PC9kaXY+Il19
|