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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ketekny-ui-kit",
3
3
  "type": "module",
4
- "version": "1.0.32",
4
+ "version": "1.0.34",
5
5
  "description": "A Vue 3 UI component library with Tailwind CSS styling",
6
6
  "main": "index.js",
7
7
  "files": [
@@ -101,7 +101,7 @@ export default {
101
101
  selectedKeys: [],
102
102
  selectedKeySet: new Set(),
103
103
  lastSelectionAnchorKey: null,
104
- currentPageRowsCache: [],
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
- const keys = [];
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();