@alaarab/ogrid-angular 2.0.4 → 2.0.5
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.
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { Component, input, output,
|
|
7
|
+
import { Component, input, output, viewChild, DestroyRef, inject } from '@angular/core';
|
|
8
8
|
import { CommonModule } from '@angular/common';
|
|
9
9
|
import { GRID_CONTEXT_MENU_ITEMS, formatShortcut } from '@alaarab/ogrid-core';
|
|
10
10
|
let GridContextMenuComponent = class GridContextMenuComponent {
|
|
@@ -35,11 +35,9 @@ let GridContextMenuComponent = class GridContextMenuComponent {
|
|
|
35
35
|
if (e.key === 'Escape')
|
|
36
36
|
this.close.emit();
|
|
37
37
|
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
document.addEventListener('keydown', this.keyDownHandler, true);
|
|
42
|
-
});
|
|
38
|
+
// Register listeners once on init (no signal dependencies needed)
|
|
39
|
+
document.addEventListener('mousedown', this.clickOutsideHandler, true);
|
|
40
|
+
document.addEventListener('keydown', this.keyDownHandler, true);
|
|
43
41
|
this.destroyRef.onDestroy(() => {
|
|
44
42
|
document.removeEventListener('mousedown', this.clickOutsideHandler, true);
|
|
45
43
|
document.removeEventListener('keydown', this.keyDownHandler, true);
|
|
@@ -108,9 +108,14 @@ let DataGridStateService = class DataGridStateService {
|
|
|
108
108
|
const order = p.columnOrder;
|
|
109
109
|
if (!order?.length)
|
|
110
110
|
return filtered;
|
|
111
|
+
// Build index map for O(1) lookup instead of repeated O(n) indexOf
|
|
112
|
+
const orderMap = new Map();
|
|
113
|
+
for (let i = 0; i < order.length; i++) {
|
|
114
|
+
orderMap.set(order[i], i);
|
|
115
|
+
}
|
|
111
116
|
return [...filtered].sort((a, b) => {
|
|
112
|
-
const ia =
|
|
113
|
-
const ib =
|
|
117
|
+
const ia = orderMap.get(a.columnId) ?? -1;
|
|
118
|
+
const ib = orderMap.get(b.columnId) ?? -1;
|
|
114
119
|
if (ia === -1 && ib === -1)
|
|
115
120
|
return 0;
|
|
116
121
|
if (ia === -1)
|
|
@@ -241,14 +246,20 @@ let DataGridStateService = class DataGridStateService {
|
|
|
241
246
|
this.resizeObserver.observe(el);
|
|
242
247
|
measure();
|
|
243
248
|
});
|
|
244
|
-
// Cleanup on destroy
|
|
249
|
+
// Cleanup on destroy — null out refs to prevent accidental reuse after teardown
|
|
245
250
|
this.destroyRef.onDestroy(() => {
|
|
246
|
-
if (this.rafId)
|
|
251
|
+
if (this.rafId) {
|
|
247
252
|
cancelAnimationFrame(this.rafId);
|
|
248
|
-
|
|
253
|
+
this.rafId = 0;
|
|
254
|
+
}
|
|
255
|
+
if (this.autoScrollInterval) {
|
|
249
256
|
clearInterval(this.autoScrollInterval);
|
|
250
|
-
|
|
257
|
+
this.autoScrollInterval = null;
|
|
258
|
+
}
|
|
259
|
+
if (this.resizeObserver) {
|
|
251
260
|
this.resizeObserver.disconnect();
|
|
261
|
+
this.resizeObserver = null;
|
|
262
|
+
}
|
|
252
263
|
});
|
|
253
264
|
// Clean up column sizing overrides for removed columns
|
|
254
265
|
effect(() => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alaarab/ogrid-angular",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.5",
|
|
4
4
|
"description": "OGrid Angular – Angular services, signals, and headless components for OGrid data grids.",
|
|
5
5
|
"main": "dist/esm/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"files": ["dist", "README.md", "LICENSE"],
|
|
23
23
|
"engines": { "node": ">=18" },
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@alaarab/ogrid-core": "2.0.
|
|
25
|
+
"@alaarab/ogrid-core": "2.0.5"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
28
|
"@angular/core": "^21.0.0",
|