ketekny-ui-kit 1.0.32 → 1.0.34
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/package.json +1 -1
- package/src/ui/kDatatable.vue +32 -12
package/package.json
CHANGED
package/src/ui/kDatatable.vue
CHANGED
|
@@ -101,7 +101,7 @@ export default {
|
|
|
101
101
|
selectedKeys: [],
|
|
102
102
|
selectedKeySet: new Set(),
|
|
103
103
|
lastSelectionAnchorKey: null,
|
|
104
|
-
|
|
104
|
+
_pageSelectableKeys: [],
|
|
105
105
|
keyedItems: [],
|
|
106
106
|
currentItemsByKey: new Map(),
|
|
107
107
|
baseKeyToKeys: new Map(),
|
|
@@ -123,17 +123,7 @@ export default {
|
|
|
123
123
|
return Object.keys(this.$slots).filter((name) => !reserved.has(name));
|
|
124
124
|
},
|
|
125
125
|
pageSelectableKeys() {
|
|
126
|
-
|
|
127
|
-
const seen = new Set();
|
|
128
|
-
this.currentPageRowsCache.forEach((rowItem) => {
|
|
129
|
-
const key = this.resolveIncomingItemKey(rowItem);
|
|
130
|
-
if (!key || seen.has(key)) return;
|
|
131
|
-
const sourceItem = this.currentItemsByKey.get(key);
|
|
132
|
-
if (!sourceItem || !this.isItemSelectable(sourceItem)) return;
|
|
133
|
-
seen.add(key);
|
|
134
|
-
keys.push(key);
|
|
135
|
-
});
|
|
136
|
-
return keys;
|
|
126
|
+
return this._pageSelectableKeys;
|
|
137
127
|
},
|
|
138
128
|
allSelectableSelected() {
|
|
139
129
|
if (!this.pageSelectableKeys.length) return false;
|
|
@@ -146,6 +136,8 @@ export default {
|
|
|
146
136
|
},
|
|
147
137
|
|
|
148
138
|
created() {
|
|
139
|
+
this.currentPageRowsCache = []; // non-reactive — mutated during EasyDataTable render
|
|
140
|
+
this._pageRenderScheduled = false; // non-reactive flag
|
|
149
141
|
this.rebuildItemCaches();
|
|
150
142
|
this.applyExternalModelValue(this.modelValue);
|
|
151
143
|
},
|
|
@@ -284,6 +276,17 @@ export default {
|
|
|
284
276
|
}
|
|
285
277
|
this.currentPageRowsCache[rowNumber - 1] = item;
|
|
286
278
|
|
|
279
|
+
if (!this._pageRenderScheduled) {
|
|
280
|
+
this._pageRenderScheduled = true;
|
|
281
|
+
this.$nextTick(() => {
|
|
282
|
+
this._pageRenderScheduled = false;
|
|
283
|
+
const newKeys = this._computePageSelectableKeys();
|
|
284
|
+
if (!this._arePageKeysEqual(newKeys, this._pageSelectableKeys)) {
|
|
285
|
+
this._pageSelectableKeys = newKeys;
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
|
|
287
290
|
const externalBodyRowClass =
|
|
288
291
|
this.$attrs["body-row-class-name"] ?? this.$attrs.bodyRowClassName;
|
|
289
292
|
if (typeof externalBodyRowClass === "function") {
|
|
@@ -294,6 +297,23 @@ export default {
|
|
|
294
297
|
}
|
|
295
298
|
return "";
|
|
296
299
|
},
|
|
300
|
+
_arePageKeysEqual(a, b) {
|
|
301
|
+
if (a.length !== b.length) return false;
|
|
302
|
+
return a.every((k, i) => k === b[i]);
|
|
303
|
+
},
|
|
304
|
+
_computePageSelectableKeys() {
|
|
305
|
+
const keys = [];
|
|
306
|
+
const seen = new Set();
|
|
307
|
+
this.currentPageRowsCache.forEach((rowItem) => {
|
|
308
|
+
const key = this.resolveIncomingItemKey(rowItem);
|
|
309
|
+
if (!key || seen.has(key)) return;
|
|
310
|
+
const sourceItem = this.currentItemsByKey.get(key);
|
|
311
|
+
if (!sourceItem || !this.isItemSelectable(sourceItem)) return;
|
|
312
|
+
seen.add(key);
|
|
313
|
+
keys.push(key);
|
|
314
|
+
});
|
|
315
|
+
return keys;
|
|
316
|
+
},
|
|
297
317
|
rebuildItemCaches() {
|
|
298
318
|
const keyedItems = [];
|
|
299
319
|
const currentItemsByKey = new Map();
|