@one-grid-core/angular 0.1.0-beta.6 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -4
- package/esm2022/lib/components/one-grid/one-grid.component.mjs +67 -16
- package/esm2022/lib/components/one-grid-body/one-grid-body.component.mjs +282 -30
- package/esm2022/lib/components/one-grid-cell-group-renderer/one-grid-cell-group-renderer.component.mjs +10 -7
- package/esm2022/lib/components/one-grid-cell-option-menu/one-grid-cell-option-menu.component.mjs +60 -4
- package/esm2022/lib/components/one-grid-checkbox-header/one-grid-checkbox-header.component.mjs +14 -5
- package/esm2022/lib/components/one-grid-header/one-grid-header.component.mjs +50 -13
- package/esm2022/lib/components/one-grid-pagination/one-grid-pagination.component.mjs +39 -15
- package/esm2022/lib/components/one-grid-row-action/one-grid-row-action.component.mjs +54 -8
- package/esm2022/lib/components/one-grid-row-drag-handle/one-grid-row-drag-handle.component.mjs +110 -0
- package/esm2022/lib/core/directives/one-cell-renderer-component.directive.mjs +9 -2
- package/esm2022/lib/core/directives/one-cell-text-expand.directive.mjs +33 -51
- package/esm2022/lib/core/instants/one-grid-api.class.mjs +429 -166
- package/esm2022/lib/core/instants/one-row-node.class.mjs +103 -37
- package/esm2022/lib/core/models/one-column-def-types.model.mjs +1 -1
- package/esm2022/lib/core/models/one-event-types.model.mjs +1 -1
- package/esm2022/lib/core/models/one-grid-types.model.mjs +1 -1
- package/esm2022/lib/core/models/one-row-drag.model.mjs +2 -0
- package/esm2022/lib/core/models/one-row.model.mjs +1 -1
- package/esm2022/lib/core/models/one-tree-data.model.mjs +1 -1
- package/esm2022/lib/core/models/one-validation.model.mjs +1 -1
- package/esm2022/lib/core/pipes/cell-field-value-empty.pipe.mjs +8 -3
- package/esm2022/lib/core/pipes/column-sort-state.pipe.mjs +3 -1
- package/esm2022/lib/core/services/og-column.service.mjs +120 -13
- package/esm2022/lib/core/services/one-grid-cell.service.mjs +123 -20
- package/esm2022/lib/core/services/one-grid-row-drag.service.mjs +351 -0
- package/esm2022/lib/core/services/one-grid-selection.service.mjs +19 -6
- package/esm2022/lib/helpers/one-column-def.helper.mjs +27 -2
- package/esm2022/lib/helpers/one-filter.helper.mjs +71 -12
- package/esm2022/lib/helpers/one-validation.helper.mjs +7 -2
- package/esm2022/lib/index.mjs +6 -1
- package/esm2022/lib/one-grid.module.mjs +7 -16
- package/fesm2022/one-grid-core-angular.mjs +1964 -421
- package/fesm2022/one-grid-core-angular.mjs.map +1 -1
- package/lib/components/one-grid/one-grid.component.d.ts +16 -1
- package/lib/components/one-grid-body/one-grid-body.component.d.ts +132 -5
- package/lib/components/one-grid-cell-group-renderer/one-grid-cell-group-renderer.component.d.ts +6 -1
- package/lib/components/one-grid-cell-option-menu/one-grid-cell-option-menu.component.d.ts +19 -2
- package/lib/components/one-grid-checkbox-header/one-grid-checkbox-header.component.d.ts +5 -2
- package/lib/components/one-grid-header/one-grid-header.component.d.ts +15 -7
- package/lib/components/one-grid-pagination/one-grid-pagination.component.d.ts +24 -5
- package/lib/components/one-grid-row-action/one-grid-row-action.component.d.ts +44 -0
- package/lib/components/one-grid-row-drag-handle/one-grid-row-drag-handle.component.d.ts +39 -0
- package/lib/core/directives/one-cell-text-expand.directive.d.ts +21 -9
- package/lib/core/instants/one-grid-api.class.d.ts +212 -26
- package/lib/core/instants/one-row-node.class.d.ts +67 -14
- package/lib/core/models/one-column-def-types.model.d.ts +89 -15
- package/lib/core/models/one-event-types.model.d.ts +24 -1
- package/lib/core/models/one-grid-types.model.d.ts +36 -1
- package/lib/core/models/one-row-drag.model.d.ts +44 -0
- package/lib/core/models/one-row.model.d.ts +0 -5
- package/lib/core/models/one-tree-data.model.d.ts +13 -0
- package/lib/core/models/one-validation.model.d.ts +12 -2
- package/lib/core/pipes/column-sort-state.pipe.d.ts +1 -1
- package/lib/core/services/og-column.service.d.ts +44 -3
- package/lib/core/services/one-grid-cell.service.d.ts +52 -4
- package/lib/core/services/one-grid-row-drag.service.d.ts +113 -0
- package/lib/core/services/one-grid-selection.service.d.ts +9 -0
- package/lib/helpers/one-column-def.helper.d.ts +19 -1
- package/lib/helpers/one-filter.helper.d.ts +29 -4
- package/lib/index.d.ts +5 -0
- package/lib/one-grid.module.d.ts +17 -19
- package/package.json +1 -2
- package/scss/_one-grid.scss +389 -17
- package/esm2022/lib/core/pipes/cell-disable-resolver.pipe.mjs +0 -26
- package/lib/core/pipes/cell-disable-resolver.pipe.d.ts +0 -9
package/esm2022/lib/components/one-grid-row-drag-handle/one-grid-row-drag-handle.component.mjs
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../core/services/one-grid-row-drag.service";
|
|
4
|
+
import * as i2 from "lucide-angular";
|
|
5
|
+
/** Why the handle is disabled, in words a user can act on. */
|
|
6
|
+
const SUPPRESSED_TEXT = {
|
|
7
|
+
sorted: 'Rows cannot be reordered while a sort is applied. Clear the sort to reorder.',
|
|
8
|
+
filtered: 'Rows cannot be reordered while a filter is applied. Clear the filter to reorder.',
|
|
9
|
+
treeData: 'Rows cannot be reordered in a tree grid.',
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* The grab handle for one row.
|
|
13
|
+
*
|
|
14
|
+
* A real `<button>`, not a styled div: it has to be focusable and operable from
|
|
15
|
+
* the keyboard, because WCAG 2.5.7 requires everything achievable by dragging
|
|
16
|
+
* to have a non-dragging alternative. Space picks the row up, the arrows move
|
|
17
|
+
* it, space drops it and escape puts it back.
|
|
18
|
+
*
|
|
19
|
+
* When reordering is unavailable the handle is disabled and says why, rather
|
|
20
|
+
* than disappearing — a control that vanishes when the user sorts looks like a
|
|
21
|
+
* bug, and one that silently does nothing is worse.
|
|
22
|
+
*/
|
|
23
|
+
export class OneGridRowDragHandleComponent {
|
|
24
|
+
constructor(dragService) {
|
|
25
|
+
this.dragService = dragService;
|
|
26
|
+
/** Non-null when the grid's order is not its own; see the model docs. */
|
|
27
|
+
this.suppressedReason = null;
|
|
28
|
+
this.dragEnd = new EventEmitter();
|
|
29
|
+
}
|
|
30
|
+
get disabled() {
|
|
31
|
+
return this.suppressedReason !== null;
|
|
32
|
+
}
|
|
33
|
+
get label() {
|
|
34
|
+
if (this.suppressedReason)
|
|
35
|
+
return SUPPRESSED_TEXT[this.suppressedReason];
|
|
36
|
+
return this.grabbed
|
|
37
|
+
? 'Moving row. Arrow keys to move, space to drop, escape to cancel.'
|
|
38
|
+
: 'Drag to reorder row, or press space to move it with the arrow keys.';
|
|
39
|
+
}
|
|
40
|
+
/** True while this specific row is the one being moved. */
|
|
41
|
+
get grabbed() {
|
|
42
|
+
return this.dragService.state?.rowId === this.node.rowId;
|
|
43
|
+
}
|
|
44
|
+
onPointerDown(event) {
|
|
45
|
+
if (this.disabled)
|
|
46
|
+
return;
|
|
47
|
+
// The body starts a cell range selection on mousedown; the handle is not
|
|
48
|
+
// part of that, and a press here must not also select.
|
|
49
|
+
event.stopPropagation();
|
|
50
|
+
this.dragService.startPointerDrag(event, this.node, { onEnd: (result) => this.emit(result) });
|
|
51
|
+
}
|
|
52
|
+
onKeyDown(event) {
|
|
53
|
+
if (this.disabled)
|
|
54
|
+
return;
|
|
55
|
+
switch (event.key) {
|
|
56
|
+
case ' ':
|
|
57
|
+
case 'Enter':
|
|
58
|
+
event.preventDefault();
|
|
59
|
+
this.dragService.toggleKeyboardDrag(this.node, { onEnd: (result) => this.emit(result) });
|
|
60
|
+
return;
|
|
61
|
+
case 'ArrowUp':
|
|
62
|
+
if (!this.grabbed)
|
|
63
|
+
return;
|
|
64
|
+
event.preventDefault();
|
|
65
|
+
this.dragService.moveKeyboard(-1);
|
|
66
|
+
return;
|
|
67
|
+
case 'ArrowDown':
|
|
68
|
+
if (!this.grabbed)
|
|
69
|
+
return;
|
|
70
|
+
event.preventDefault();
|
|
71
|
+
this.dragService.moveKeyboard(1);
|
|
72
|
+
return;
|
|
73
|
+
case 'Escape':
|
|
74
|
+
if (!this.grabbed)
|
|
75
|
+
return;
|
|
76
|
+
event.preventDefault();
|
|
77
|
+
this.dragService.cancel();
|
|
78
|
+
return;
|
|
79
|
+
default:
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* A row that is picked up and dropped where it started produces no event.
|
|
85
|
+
* Blur while grabbed would otherwise strand the row mid-move, so it cancels.
|
|
86
|
+
*/
|
|
87
|
+
onBlur() {
|
|
88
|
+
if (this.grabbed && this.dragService.state?.source === 'keyboard') {
|
|
89
|
+
this.dragService.cancel();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
emit(result) {
|
|
93
|
+
if (result)
|
|
94
|
+
this.dragEnd.emit(result);
|
|
95
|
+
}
|
|
96
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridRowDragHandleComponent, deps: [{ token: i1.OneGridRowDragService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
97
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: OneGridRowDragHandleComponent, selector: "one-grid-row-drag-handle", inputs: { node: "node", suppressedReason: "suppressedReason" }, outputs: { dragEnd: "dragEnd" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"one-row-drag-handle\"\n [class.one-row-drag-handle-grabbed]=\"grabbed\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"label\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [attr.aria-pressed]=\"disabled ? null : grabbed\"\n [title]=\"label\"\n (pointerdown)=\"onPointerDown($event)\"\n (keydown)=\"onKeyDown($event)\"\n (blur)=\"onBlur()\"\n (click)=\"$event.stopPropagation()\"\n (dblclick)=\"$event.stopPropagation()\">\n <lucide-icon name=\"grip-vertical\" [size]=\"14\" [strokeWidth]=\"2\"></lucide-icon>\n</button>\n", styles: [":host{display:inline-flex;align-items:center}\n"], dependencies: [{ kind: "component", type: i2.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
98
|
+
}
|
|
99
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridRowDragHandleComponent, decorators: [{
|
|
100
|
+
type: Component,
|
|
101
|
+
args: [{ standalone: false, selector: 'one-grid-row-drag-handle', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n type=\"button\"\n class=\"one-row-drag-handle\"\n [class.one-row-drag-handle-grabbed]=\"grabbed\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"label\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [attr.aria-pressed]=\"disabled ? null : grabbed\"\n [title]=\"label\"\n (pointerdown)=\"onPointerDown($event)\"\n (keydown)=\"onKeyDown($event)\"\n (blur)=\"onBlur()\"\n (click)=\"$event.stopPropagation()\"\n (dblclick)=\"$event.stopPropagation()\">\n <lucide-icon name=\"grip-vertical\" [size]=\"14\" [strokeWidth]=\"2\"></lucide-icon>\n</button>\n", styles: [":host{display:inline-flex;align-items:center}\n"] }]
|
|
102
|
+
}], ctorParameters: () => [{ type: i1.OneGridRowDragService }], propDecorators: { node: [{
|
|
103
|
+
type: Input,
|
|
104
|
+
args: [{ required: true }]
|
|
105
|
+
}], suppressedReason: [{
|
|
106
|
+
type: Input
|
|
107
|
+
}], dragEnd: [{
|
|
108
|
+
type: Output
|
|
109
|
+
}] } });
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtcm93LWRyYWctaGFuZGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZS1ncmlkL3NyYy9saWIvY29tcG9uZW50cy9vbmUtZ3JpZC1yb3ctZHJhZy1oYW5kbGUvb25lLWdyaWQtcm93LWRyYWctaGFuZGxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZS1ncmlkL3NyYy9saWIvY29tcG9uZW50cy9vbmUtZ3JpZC1yb3ctZHJhZy1oYW5kbGUvb25lLWdyaWQtcm93LWRyYWctaGFuZGxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFLaEcsOERBQThEO0FBQzlELE1BQU0sZUFBZSxHQUErQztJQUNoRSxNQUFNLEVBQUUsOEVBQThFO0lBQ3RGLFFBQVEsRUFBRSxrRkFBa0Y7SUFDNUYsUUFBUSxFQUFFLDBDQUEwQztDQUN2RCxDQUFDO0FBRUY7Ozs7Ozs7Ozs7O0dBV0c7QUFRSCxNQUFNLE9BQU8sNkJBQTZCO0lBU3RDLFlBQTZCLFdBQXFDO1FBQXJDLGdCQUFXLEdBQVgsV0FBVyxDQUEwQjtRQUxsRSx5RUFBeUU7UUFDaEUscUJBQWdCLEdBQXNDLElBQUksQ0FBQztRQUUxRCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7SUFFVSxDQUFDO0lBRXRFLElBQWMsUUFBUTtRQUVsQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQWMsS0FBSztRQUVmLElBQUksSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXpFLE9BQU8s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bmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPbmVSb3dOb2RlIH0gZnJvbSAnLi4vLi4vY29yZS9pbnN0YW50cy9vbmUtcm93LW5vZGUuY2xhc3MnO1xuaW1wb3J0IHsgT25lR3JpZFJvd0RyYWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9vbmUtZ3JpZC1yb3ctZHJhZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9uZVJvd0RyYWdFdmVudCwgT25lUm93RHJhZ1N1cHByZXNzZWRSZWFzb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9vbmUtcm93LWRyYWcubW9kZWwnO1xuXG4vKiogV2h5IHRoZSBoYW5kbGUgaXMgZGlzYWJsZWQsIGluIHdvcmRzIGEgdXNlciBjYW4gYWN0IG9uLiAqL1xuY29uc3QgU1VQUFJFU1NFRF9URVhUOiBSZWNvcmQ8T25lUm93RHJhZ1N1cHByZXNzZWRSZWFzb24sIHN0cmluZz4gPSB7XG4gICAgc29ydGVkOiAnUm93cyBjYW5ub3QgYmUgcmVvcmRlcmVkIHdoaWxlIGEgc29ydCBpcyBhcHBsaWVkLiBDbGVhciB0aGUgc29ydCB0byByZW9yZGVyLicsXG4gICAgZmlsdGVyZWQ6ICdSb3dzIGNhbm5vdCBiZSByZW9yZGVyZWQgd2hpbGUgYSBmaWx0ZXIgaXMgYXBwbGllZC4gQ2xlYXIgdGhlIGZpbHRlciB0byByZW9yZGVyLicsXG4gICAgdHJlZURhdGE6ICdSb3dzIGNhbm5vdCBiZSByZW9yZGVyZWQgaW4gYSB0cmVlIGdyaWQuJyxcbn07XG5cbi8qKlxuICogVGhlIGdyYWIgaGFuZGxlIGZvciBvbmUgcm93LlxuICpcbiAqIEEgcmVhbCBgPGJ1dHRvbj5gLCBub3QgYSBzdHlsZWQgZGl2OiBpdCBoYXMgdG8gYmUgZm9jdXNhYmxlIGFuZCBvcGVyYWJsZSBmcm9tXG4gKiB0aGUga2V5Ym9hcmQsIGJlY2F1c2UgV0NBRyAyLjUuNyByZXF1aXJlcyBldmVyeXRoaW5nIGFjaGlldmFibGUgYnkgZHJhZ2dpbmdcbiAqIHRvIGhhdmUgYSBub24tZHJhZ2dpbmcgYWx0ZXJuYXRpdmUuIFNwYWNlIHBpY2tzIHRoZSByb3cgdXAsIHRoZSBhcnJvd3MgbW92ZVxuICogaXQsIHNwYWNlIGRyb3BzIGl0IGFuZCBlc2NhcGUgcHV0cyBpdCBiYWNrLlxuICpcbiAqIFdoZW4gcmVvcmRlcmluZyBpcyB1bmF2YWlsYWJsZSB0aGUgaGFuZGxlIGlzIGRpc2FibGVkIGFuZCBzYXlzIHdoeSwgcmF0aGVyXG4gKiB0aGFuIGRpc2FwcGVhcmluZyDigJQgYSBjb250cm9sIHRoYXQgdmFuaXNoZXMgd2hlbiB0aGUgdXNlciBzb3J0cyBsb29rcyBsaWtlIGFcbiAqIGJ1ZywgYW5kIG9uZSB0aGF0IHNpbGVudGx5IGRvZXMgbm90aGluZyBpcyB3b3JzZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogZmFsc2UsXG4gICAgc2VsZWN0b3I6ICdvbmUtZ3JpZC1yb3ctZHJhZy1oYW5kbGUnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9vbmUtZ3JpZC1yb3ctZHJhZy1oYW5kbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9vbmUtZ3JpZC1yb3ctZHJhZy1oYW5kbGUuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBPbmVHcmlkUm93RHJhZ0hhbmRsZUNvbXBvbmVudDxUPiB7XG5cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBub2RlITogT25lUm93Tm9kZTxUPjtcblxuICAgIC8qKiBOb24tbnVsbCB3aGVuIHRoZSBncmlkJ3Mgb3JkZXIgaXMgbm90IGl0cyBvd247IHNlZSB0aGUgbW9kZWwgZG9jcy4gKi9cbiAgICBASW5wdXQoKSBzdXBwcmVzc2VkUmVhc29uOiBPbmVSb3dEcmFnU3VwcHJlc3NlZFJlYXNvbiB8IG51bGwgPSBudWxsO1xuXG4gICAgQE91dHB1dCgpIGRyYWdFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPE9uZVJvd0RyYWdFdmVudDxUPj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZHJhZ1NlcnZpY2U6IE9uZUdyaWRSb3dEcmFnU2VydmljZTxUPikge31cblxuICAgIHByb3RlY3RlZCBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3VwcHJlc3NlZFJlYXNvbiAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGxhYmVsKCk6IHN0cmluZyB7XG5cbiAgICAgICAgaWYgKHRoaXMuc3VwcHJlc3NlZFJlYXNvbikgcmV0dXJuIFNVUFBSRVNTRURfVEVYVFt0aGlzLnN1cHByZXNzZWRSZWFzb25dO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdyYWJiZWRcbiAgICAgICAgICAgID8gJ01vdmluZyByb3cuIEFycm93IGtleXMgdG8gbW92ZSwgc3BhY2UgdG8gZHJvcCwgZXNjYXBlIHRvIGNhbmNlbC4nXG4gICAgICAgICAgICA6ICdEcmFnIHRvIHJlb3JkZXIgcm93LCBvciBwcmVzcyBzcGFjZSB0byBtb3ZlIGl0IHdpdGggdGhlIGFycm93IGtleXMuJztcbiAgICB9XG5cbiAgICAvKiogVHJ1ZSB3aGlsZSB0aGlzIHNwZWNpZmljIHJvdyBpcyB0aGUgb25lIGJlaW5nIG1vdmVkLiAqL1xuICAgIHByb3RlY3RlZCBnZXQgZ3JhYmJlZCgpOiBib29sZWFuIHtcblxuICAgICAgICByZXR1cm4gdGhpcy5kcmFnU2VydmljZS5zdGF0ZT8ucm93SWQgPT09IHRoaXMubm9kZS5yb3dJZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Qb2ludGVyRG93bihldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcblxuICAgICAgICAvLyBUaGUgYm9keSBzdGFydHMgYSBjZWxsIHJhbmdlIHNlbGVjdGlvbiBvbiBtb3VzZWRvd247IHRoZSBoYW5kbGUgaXMgbm90XG4gICAgICAgIC8vIHBhcnQgb2YgdGhhdCwgYW5kIGEgcHJlc3MgaGVyZSBtdXN0IG5vdCBhbHNvIHNlbGVjdC5cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5kcmFnU2VydmljZS5zdGFydFBvaW50ZXJEcmFnKGV2ZW50LCB0aGlzLm5vZGUsIHsgb25FbmQ6IChyZXN1bHQpID0+IHRoaXMuZW1pdChyZXN1bHQpIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcblxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG5cbiAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnU2VydmljZS50b2dnbGVLZXlib2FyZERyYWcodGhpcy5ub2RlLCB7IG9uRW5kOiAocmVzdWx0KSA9PiB0aGlzLmVtaXQocmVzdWx0KSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5ncmFiYmVkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTZXJ2aWNlLm1vdmVLZXlib2FyZCgtMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5ncmFiYmVkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTZXJ2aWNlLm1vdmVLZXlib2FyZCgxKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdyYWJiZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1NlcnZpY2UuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgcm93IHRoYXQgaXMgcGlja2VkIHVwIGFuZCBkcm9wcGVkIHdoZXJlIGl0IHN0YXJ0ZWQgcHJvZHVjZXMgbm8gZXZlbnQuXG4gICAgICogQmx1ciB3aGlsZSBncmFiYmVkIHdvdWxkIG90aGVyd2lzZSBzdHJhbmQgdGhlIHJvdyBtaWQtbW92ZSwgc28gaXQgY2FuY2Vscy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25CbHVyKCk6IHZvaWQge1xuXG4gICAgICAgIGlmICh0aGlzLmdyYWJiZWQgJiYgdGhpcy5kcmFnU2VydmljZS5zdGF0ZT8uc291cmNlID09PSAna2V5Ym9hcmQnKSB7XG5cbiAgICAgICAgICAgIHRoaXMuZHJhZ1NlcnZpY2UuY2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXQocmVzdWx0OiBPbmVSb3dEcmFnRXZlbnQ8VD4gfCBudWxsKTogdm9pZCB7XG5cbiAgICAgICAgaWYgKHJlc3VsdCkgdGhpcy5kcmFnRW5kLmVtaXQocmVzdWx0KTtcbiAgICB9XG59XG4iLCI8YnV0dG9uXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgY2xhc3M9XCJvbmUtcm93LWRyYWctaGFuZGxlXCJcbiAgICBbY2xhc3Mub25lLXJvdy1kcmFnLWhhbmRsZS1ncmFiYmVkXT1cImdyYWJiZWRcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICd0cnVlJyA6IG51bGxcIlxuICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJkaXNhYmxlZCA/IG51bGwgOiBncmFiYmVkXCJcbiAgICBbdGl0bGVdPVwibGFiZWxcIlxuICAgIChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duKCRldmVudClcIlxuICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgKGRibGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgIDxsdWNpZGUtaWNvbiBuYW1lPVwiZ3JpcC12ZXJ0aWNhbFwiIFtzaXplXT1cIjE0XCIgW3N0cm9rZVdpZHRoXT1cIjJcIj48L2x1Y2lkZS1pY29uPlxuPC9idXR0b24+XG4iXX0=
|
|
@@ -37,8 +37,15 @@ export class OneCellRendererComponentDirective {
|
|
|
37
37
|
return;
|
|
38
38
|
const instance = this.compRef.instance;
|
|
39
39
|
if (typeof instance.oneInit === 'function') {
|
|
40
|
+
// The body supplies `value` already, and it honours the column's
|
|
41
|
+
// valueGetter. Only derive it here when nothing did — this used to
|
|
42
|
+
// overwrite unconditionally with the raw field, so a column with both a
|
|
43
|
+
// valueGetter and a component renderer showed the underlying field
|
|
44
|
+
// instead of the value every other part of the grid displays.
|
|
40
45
|
const newParams = { ...this.params };
|
|
41
|
-
newParams.value
|
|
46
|
+
if (newParams.value === undefined) {
|
|
47
|
+
newParams.value = getFieldValue(this.params.data, this.params?.columnDef?.field) ?? null;
|
|
48
|
+
}
|
|
42
49
|
instance.oneInit(newParams);
|
|
43
50
|
}
|
|
44
51
|
else {
|
|
@@ -74,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
74
81
|
type: Input,
|
|
75
82
|
args: [{ required: true }]
|
|
76
83
|
}] } });
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWNlbGwtcmVuZGVyZXItY29tcG9uZW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZS1ncmlkL3NyYy9saWIvY29yZS9kaXJlY3RpdmVzL29uZS1jZWxsLXJlbmRlcmVyLWNvbXBvbmVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQUUsS0FBSyxFQUF1RSxNQUFNLGVBQWUsQ0FBQztBQUdwSSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBTTlELE1BQU0sT0FBTyxpQ0FBaUM7SUFRNUMsWUFBb0IsR0FBcUI7UUFBckIsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFGakMsZ0JBQVcsR0FBRyxLQUFLLENBQUM7SUFFZ0IsQ0FBQztJQUU3QyxRQUFRO1FBRU4sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFeEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFFaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUU5QixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRTFELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV4QyxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFFckIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFeEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLENBQUM7YUFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBRXpCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsV0FBVyxHQUFHLEtBQUs7UUFFakQsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUI7WUFBRSxPQUFPO1FBRXhDLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLHFCQUFxQjtRQUUzQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRO1lBQUUsT0FBTztRQUVwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQW9DLENBQUM7UUFFbkUsSUFBSSxPQUFPLFFBQVEsQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7WUFFM0MsaUVBQWlFO1lBQ2pFLG1FQUFtRTtZQUNuRSx3RUFBd0U7WUFDeEUsbUVBQW1FO1lBQ25FLDhEQUE4RDtZQUM5RCxNQUFNLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRXJDLElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFFbEMsU0FBUyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO1lBQzNGLENBQUM7WUFFRCxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTlCLENBQUM7YUFBTSxDQUFDO1lBRU4sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCwyQ0FBMkM7UUFDM0Msd0NBQXdDO1FBRXhDLG9EQUFvRDtRQUNwRCxJQUFJO0lBQ04sQ0FBQztJQUVPLGdCQUFnQjtRQUV0QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUVqQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRXZCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUVULElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7K0dBaEdVLGlDQUFpQzttR0FBakMsaUNBQWlDOzs0RkFBakMsaUNBQWlDO2tCQUo3QyxTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxLQUFLO29CQUNqQixRQUFRLEVBQUUsNEJBQTRCO2lCQUN2QztxRkFHNEIscUJBQXFCO3NCQUEvQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDRSxNQUFNO3NCQUFoQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiwgRGlyZWN0aXZlLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVHlwZSwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT25lQ2VsbFJlbmRlcmVyUGFyYW1zIH0gZnJvbSAnLi4vbW9kZWxzL29uZS1jb2x1bW4tZGVmLXR5cGVzLm1vZGVsJztcbmltcG9ydCB7IE9uZUNlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL21vZGVscy9vbmUtdHJlZS1kYXRhLm1vZGVsJztcbmltcG9ydCB7IGdldEZpZWxkVmFsdWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL29uZS1jZWxsLmhlbHBlcic7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgc2VsZWN0b3I6ICdbb25lQ2VsbFJlbmRlcmVyQ29tcG9uZW50XSdcbn0pXG5leHBvcnQgY2xhc3MgT25lQ2VsbFJlbmRlcmVyQ29tcG9uZW50RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY2VsbFJlbmRlcmVyQ29tcG9uZW50ITogVHlwZTxPbmVDZWxsUmVuZGVyZXJDb21wb25lbnQ+O1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwYXJhbXM6IE9uZUNlbGxSZW5kZXJlclBhcmFtcztcblxuICBwcml2YXRlIGNvbXBSZWY/OiBDb21wb25lbnRSZWY8T25lQ2VsbFJlbmRlcmVyQ29tcG9uZW50PjtcbiAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmNyOiBWaWV3Q29udGFpbmVyUmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICB0aGlzLmNyZWF0ZU9yVXBkYXRlQ29tcG9uZW50KHRydWUpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuXG4gICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSByZXR1cm47XG5cbiAgICBjb25zdCBjb21wb25lbnRDaGFuZ2VkID0gY2hhbmdlc1snY2VsbFJlbmRlcmVyQ29tcG9uZW50J107XG4gICAgXG4gICAgY29uc3QgcGFyYW1zQ2hhbmdlZCA9IGNoYW5nZXNbJ3BhcmFtcyddO1xuXG4gICAgaWYgKGNvbXBvbmVudENoYW5nZWQpIHtcblxuICAgICAgdGhpcy5kZXN0cm95Q29tcG9uZW50KCk7XG5cbiAgICAgIHRoaXMuY3JlYXRlT3JVcGRhdGVDb21wb25lbnQodHJ1ZSk7XG5cbiAgICB9IGVsc2UgaWYgKHBhcmFtc0NoYW5nZWQpIHtcblxuICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRJbnB1dHMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9yVXBkYXRlQ29tcG9uZW50KGZvcmNlQ3JlYXRlID0gZmFsc2UpOiB2b2lkIHtcblxuICAgIGlmICghdGhpcy5jZWxsUmVuZGVyZXJDb21wb25lbnQpIHJldHVybjtcblxuICAgIGlmIChmb3JjZUNyZWF0ZSB8fCAhdGhpcy5jb21wUmVmKSB7XG4gICAgICB0aGlzLnZjci5jbGVhcigpO1xuICAgICAgdGhpcy5jb21wUmVmID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KHRoaXMuY2VsbFJlbmRlcmVyQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudElucHV0cygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb21wb25lbnRJbnB1dHMoKTogdm9pZCB7XG5cbiAgICBpZiAoIXRoaXMuY29tcFJlZj8uaW5zdGFuY2UpIHJldHVybjtcblxuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5jb21wUmVmLmluc3RhbmNlIGFzIE9uZUNlbGxSZW5kZXJlckNvbXBvbmVudDtcblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2Uub25lSW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuXG4gICAgICAvLyBUaGUgYm9keSBzdXBwbGllcyBgdmFsdWVgIGFscmVhZHksIGFuZCBpdCBob25vdXJzIHRoZSBjb2x1bW4nc1xuICAgICAgLy8gdmFsdWVHZXR0ZXIuIE9ubHkgZGVyaXZlIGl0IGhlcmUgd2hlbiBub3RoaW5nIGRpZCDigJQgdGhpcyB1c2VkIHRvXG4gICAgICAvLyBvdmVyd3JpdGUgdW5jb25kaXRpb25hbGx5IHdpdGggdGhlIHJhdyBmaWVsZCwgc28gYSBjb2x1bW4gd2l0aCBib3RoIGFcbiAgICAgIC8vIHZhbHVlR2V0dGVyIGFuZCBhIGNvbXBvbmVudCByZW5kZXJlciBzaG93ZWQgdGhlIHVuZGVybHlpbmcgZmllbGRcbiAgICAgIC8vIGluc3RlYWQgb2YgdGhlIHZhbHVlIGV2ZXJ5IG90aGVyIHBhcnQgb2YgdGhlIGdyaWQgZGlzcGxheXMuXG4gICAgICBjb25zdCBuZXdQYXJhbXMgPSB7IC4uLnRoaXMucGFyYW1zIH07XG5cbiAgICAgIGlmIChuZXdQYXJhbXMudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXG4gICAgICAgIG5ld1BhcmFtcy52YWx1ZSA9IGdldEZpZWxkVmFsdWUodGhpcy5wYXJhbXMuZGF0YSwgdGhpcy5wYXJhbXM/LmNvbHVtbkRlZj8uZmllbGQpID8/IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLm9uZUluaXQobmV3UGFyYW1zKTtcblxuICAgIH0gZWxzZSB7XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oaW5zdGFuY2UsIHRoaXMucGFyYW1zKTtcbiAgICB9XG5cbiAgICAvLyBPcHRpb25hbDogY2FsbCBjaGFuZ2UgZGV0ZWN0b3IgaWYgbmVlZGVkXG4gICAgLy8gaWYgKHRoaXMuY29tcFJlZi5jaGFuZ2VEZXRlY3RvclJlZikge1xuXG4gICAgLy8gICB0aGlzLmNvbXBSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveUNvbXBvbmVudCgpOiB2b2lkIHtcblxuICAgIGlmICh0aGlzLmNvbXBSZWYpIHtcblxuICAgICAgdGhpcy5jb21wUmVmLmRlc3Ryb3koKTtcblxuICAgICAgdGhpcy5jb21wUmVmID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuXG4gICAgdGhpcy5kZXN0cm95Q29tcG9uZW50KCk7XG4gIH1cbn0iXX0=
|
|
@@ -1,67 +1,52 @@
|
|
|
1
1
|
import { Directive, HostListener } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Reveals a truncated cell in full while the pointer rests on it.
|
|
5
|
+
*
|
|
6
|
+
* Presentation lives in the stylesheet, under `.one-cell-text-expanded`. It
|
|
7
|
+
* used to be applied as inline styles here, one of which was
|
|
8
|
+
* `background: var(--ins-card-bg)` — a token from the application this library
|
|
9
|
+
* was extracted from, which no consumer defines. The expanded cell therefore
|
|
10
|
+
* had a transparent background and its text overlapped the next column. The
|
|
11
|
+
* inline rules also set `z-index` on a statically positioned element, where it
|
|
12
|
+
* does nothing.
|
|
13
|
+
*
|
|
14
|
+
* Overflow is measured on hover rather than after every view check. The old
|
|
15
|
+
* version measured on init and on every text change, and reading `scrollWidth`
|
|
16
|
+
* forces a synchronous layout — several hundred of them per render for a
|
|
17
|
+
* normal viewport, to answer a question only the hovered cell ever asks.
|
|
18
|
+
*/
|
|
3
19
|
export class OneCellTextExpandDirective {
|
|
20
|
+
static { this.EXPANDED_CLASS = 'one-cell-text-expanded'; }
|
|
21
|
+
static { this.HOVER_DELAY_MS = 800; }
|
|
4
22
|
constructor(cell, renderer) {
|
|
5
23
|
this.cell = cell;
|
|
6
24
|
this.renderer = renderer;
|
|
7
|
-
this.overflowing = false;
|
|
8
|
-
this.lastText = null;
|
|
9
|
-
}
|
|
10
|
-
ngAfterViewInit() {
|
|
11
|
-
this.checkOverflow();
|
|
12
|
-
this.lastText = this.cell.nativeElement.textContent;
|
|
13
|
-
}
|
|
14
|
-
ngAfterViewChecked() {
|
|
15
|
-
const currentText = this.cell.nativeElement.textContent;
|
|
16
|
-
if (this.lastText !== currentText) {
|
|
17
|
-
this.lastText = currentText;
|
|
18
|
-
this.checkOverflow();
|
|
19
|
-
this.collapse();
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
ngOnDestroy() {
|
|
23
|
-
clearTimeout(this.timer);
|
|
24
|
-
this.collapse();
|
|
25
|
-
}
|
|
26
|
-
checkOverflow() {
|
|
27
|
-
const cell = this.cell.nativeElement;
|
|
28
|
-
this.overflowing = cell.scrollWidth > cell.clientWidth;
|
|
29
|
-
}
|
|
30
|
-
onResize() {
|
|
31
|
-
this.checkOverflow();
|
|
32
25
|
}
|
|
33
26
|
onMouseEnter() {
|
|
34
|
-
|
|
27
|
+
const element = this.cell.nativeElement;
|
|
28
|
+
// Measured here, so the layout read happens once for the cell being
|
|
29
|
+
// hovered instead of for every cell on screen.
|
|
30
|
+
if (element.scrollWidth <= element.clientWidth)
|
|
35
31
|
return;
|
|
36
|
-
this.timer = setTimeout(() => this.expand(),
|
|
32
|
+
this.timer = setTimeout(() => this.expand(), OneCellTextExpandDirective.HOVER_DELAY_MS);
|
|
37
33
|
}
|
|
38
34
|
onMouseLeave() {
|
|
39
|
-
|
|
35
|
+
this.collapse();
|
|
36
|
+
}
|
|
37
|
+
ngOnDestroy() {
|
|
40
38
|
this.collapse();
|
|
41
39
|
}
|
|
42
40
|
expand() {
|
|
43
|
-
|
|
44
|
-
this.renderer.setStyle(cell, 'overflow', 'visible');
|
|
45
|
-
this.renderer.setStyle(cell, 'text-overflow', 'unset');
|
|
46
|
-
this.renderer.setStyle(cell, 'z-index', '1000');
|
|
47
|
-
this.renderer.setStyle(cell, 'background', 'var(--ins-card-bg)');
|
|
48
|
-
this.renderer.setStyle(cell, 'white-space', 'nowrap');
|
|
49
|
-
this.renderer.setStyle(cell, 'transition', 'width 0.3s ease');
|
|
50
|
-
this.renderer.setStyle(cell, 'padding', '4px 8px');
|
|
51
|
-
this.renderer.setStyle(cell, 'border-radius', '4px');
|
|
41
|
+
this.renderer.addClass(this.cell.nativeElement, OneCellTextExpandDirective.EXPANDED_CLASS);
|
|
52
42
|
}
|
|
53
43
|
collapse() {
|
|
54
|
-
|
|
55
|
-
this.
|
|
56
|
-
this.renderer.
|
|
57
|
-
this.renderer.setStyle(cell, 'text-overflow', 'ellipsis');
|
|
58
|
-
this.renderer.removeStyle(cell, 'z-index');
|
|
59
|
-
this.renderer.removeStyle(cell, 'background');
|
|
60
|
-
this.renderer.removeStyle(cell, 'padding');
|
|
61
|
-
this.renderer.removeStyle(cell, 'border-radius');
|
|
44
|
+
clearTimeout(this.timer);
|
|
45
|
+
this.timer = undefined;
|
|
46
|
+
this.renderer.removeClass(this.cell.nativeElement, OneCellTextExpandDirective.EXPANDED_CLASS);
|
|
62
47
|
}
|
|
63
48
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneCellTextExpandDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
64
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: OneCellTextExpandDirective, selector: "[oneCellTextExpand]", host: { listeners: { "
|
|
49
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: OneCellTextExpandDirective, selector: "[oneCellTextExpand]", host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0 }); }
|
|
65
50
|
}
|
|
66
51
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneCellTextExpandDirective, decorators: [{
|
|
67
52
|
type: Directive,
|
|
@@ -69,14 +54,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
69
54
|
standalone: false,
|
|
70
55
|
selector: '[oneCellTextExpand]'
|
|
71
56
|
}]
|
|
72
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: {
|
|
73
|
-
type: HostListener,
|
|
74
|
-
args: ['window:resize']
|
|
75
|
-
}], onMouseEnter: [{
|
|
57
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { onMouseEnter: [{
|
|
76
58
|
type: HostListener,
|
|
77
59
|
args: ['mouseenter']
|
|
78
60
|
}], onMouseLeave: [{
|
|
79
61
|
type: HostListener,
|
|
80
62
|
args: ['mouseleave']
|
|
81
63
|
}] } });
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWNlbGwtdGV4dC1leHBhbmQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25lLWdyaWQvc3JjL2xpYi9jb3JlL2RpcmVjdGl2ZXMvb25lLWNlbGwtdGV4dC1leHBhbmQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUF3QixNQUFNLGVBQWUsQ0FBQzs7QUFFMUY7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBS0gsTUFBTSxPQUFPLDBCQUEwQjthQUViLG1CQUFjLEdBQUcsd0JBQXdCLEFBQTNCLENBQTRCO2FBQzFDLG1CQUFjLEdBQUcsR0FBRyxBQUFOLENBQU87SUFJN0MsWUFBb0IsSUFBNkIsRUFBVSxRQUFtQjtRQUExRCxTQUFJLEdBQUosSUFBSSxDQUF5QjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7SUFBRyxDQUFDO0lBR2xGLFlBQVk7UUFFVixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUV4QyxvRUFBb0U7UUFDcEUsK0NBQStDO1FBQy9DLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsV0FBVztZQUFFLE9BQU87UUFFdkQsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLDBCQUEwQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFHRCxZQUFZO1FBRVYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXO1FBRVQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxNQUFNO1FBRVosSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsMEJBQTBCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVPLFFBQVE7UUFFZCxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpCLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBRXZCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLDBCQUEwQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7K0dBNUNVLDBCQUEwQjttR0FBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQUp0QyxTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxLQUFLO29CQUNqQixRQUFRLEVBQUUscUJBQXFCO2lCQUNoQzt1R0FXQyxZQUFZO3NCQURYLFlBQVk7dUJBQUMsWUFBWTtnQkFhMUIsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBSZXZlYWxzIGEgdHJ1bmNhdGVkIGNlbGwgaW4gZnVsbCB3aGlsZSB0aGUgcG9pbnRlciByZXN0cyBvbiBpdC5cbiAqXG4gKiBQcmVzZW50YXRpb24gbGl2ZXMgaW4gdGhlIHN0eWxlc2hlZXQsIHVuZGVyIGAub25lLWNlbGwtdGV4dC1leHBhbmRlZGAuIEl0XG4gKiB1c2VkIHRvIGJlIGFwcGxpZWQgYXMgaW5saW5lIHN0eWxlcyBoZXJlLCBvbmUgb2Ygd2hpY2ggd2FzXG4gKiBgYmFja2dyb3VuZDogdmFyKC0taW5zLWNhcmQtYmcpYCDigJQgYSB0b2tlbiBmcm9tIHRoZSBhcHBsaWNhdGlvbiB0aGlzIGxpYnJhcnlcbiAqIHdhcyBleHRyYWN0ZWQgZnJvbSwgd2hpY2ggbm8gY29uc3VtZXIgZGVmaW5lcy4gVGhlIGV4cGFuZGVkIGNlbGwgdGhlcmVmb3JlXG4gKiBoYWQgYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kIGFuZCBpdHMgdGV4dCBvdmVybGFwcGVkIHRoZSBuZXh0IGNvbHVtbi4gVGhlXG4gKiBpbmxpbmUgcnVsZXMgYWxzbyBzZXQgYHotaW5kZXhgIG9uIGEgc3RhdGljYWxseSBwb3NpdGlvbmVkIGVsZW1lbnQsIHdoZXJlIGl0XG4gKiBkb2VzIG5vdGhpbmcuXG4gKlxuICogT3ZlcmZsb3cgaXMgbWVhc3VyZWQgb24gaG92ZXIgcmF0aGVyIHRoYW4gYWZ0ZXIgZXZlcnkgdmlldyBjaGVjay4gVGhlIG9sZFxuICogdmVyc2lvbiBtZWFzdXJlZCBvbiBpbml0IGFuZCBvbiBldmVyeSB0ZXh0IGNoYW5nZSwgYW5kIHJlYWRpbmcgYHNjcm9sbFdpZHRoYFxuICogZm9yY2VzIGEgc3luY2hyb25vdXMgbGF5b3V0IOKAlCBzZXZlcmFsIGh1bmRyZWQgb2YgdGhlbSBwZXIgcmVuZGVyIGZvciBhXG4gKiBub3JtYWwgdmlld3BvcnQsIHRvIGFuc3dlciBhIHF1ZXN0aW9uIG9ubHkgdGhlIGhvdmVyZWQgY2VsbCBldmVyIGFza3MuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgc2VsZWN0b3I6ICdbb25lQ2VsbFRleHRFeHBhbmRdJ1xufSlcbmV4cG9ydCBjbGFzcyBPbmVDZWxsVGV4dEV4cGFuZERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRVhQQU5ERURfQ0xBU1MgPSAnb25lLWNlbGwtdGV4dC1leHBhbmRlZCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEhPVkVSX0RFTEFZX01TID0gODAwO1xuXG4gIHByaXZhdGUgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2VsbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcbiAgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuY2VsbC5uYXRpdmVFbGVtZW50O1xuXG4gICAgLy8gTWVhc3VyZWQgaGVyZSwgc28gdGhlIGxheW91dCByZWFkIGhhcHBlbnMgb25jZSBmb3IgdGhlIGNlbGwgYmVpbmdcbiAgICAvLyBob3ZlcmVkIGluc3RlYWQgb2YgZm9yIGV2ZXJ5IGNlbGwgb24gc2NyZWVuLlxuICAgIGlmIChlbGVtZW50LnNjcm9sbFdpZHRoIDw9IGVsZW1lbnQuY2xpZW50V2lkdGgpIHJldHVybjtcblxuICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZXhwYW5kKCksIE9uZUNlbGxUZXh0RXhwYW5kRGlyZWN0aXZlLkhPVkVSX0RFTEFZX01TKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICBvbk1vdXNlTGVhdmUoKTogdm9pZCB7XG5cbiAgICB0aGlzLmNvbGxhcHNlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblxuICAgIHRoaXMuY29sbGFwc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwYW5kKCk6IHZvaWQge1xuXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmNlbGwubmF0aXZlRWxlbWVudCwgT25lQ2VsbFRleHRFeHBhbmREaXJlY3RpdmUuRVhQQU5ERURfQ0xBU1MpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZSgpOiB2b2lkIHtcblxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblxuICAgIHRoaXMudGltZXIgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuY2VsbC5uYXRpdmVFbGVtZW50LCBPbmVDZWxsVGV4dEV4cGFuZERpcmVjdGl2ZS5FWFBBTkRFRF9DTEFTUyk7XG4gIH1cbn1cbiJdfQ==
|