@keenthemes/ktui 1.0.29 → 1.1.1
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/dist/ktui.js +3942 -8634
- package/dist/ktui.min.js +1 -1
- package/dist/ktui.min.js.map +1 -1
- package/dist/styles.css +0 -196
- package/lib/cjs/components/datatable/__tests__/pagination-reset.test.js +596 -0
- package/lib/cjs/components/datatable/__tests__/pagination-reset.test.js.map +1 -0
- package/lib/cjs/components/datatable/__tests__/race-conditions.test.js +548 -0
- package/lib/cjs/components/datatable/__tests__/race-conditions.test.js.map +1 -0
- package/lib/cjs/components/datatable/__tests__/setup.js +63 -0
- package/lib/cjs/components/datatable/__tests__/setup.js.map +1 -0
- package/lib/cjs/components/datatable/datatable.js +92 -30
- package/lib/cjs/components/datatable/datatable.js.map +1 -1
- package/lib/cjs/index.js +1 -5
- package/lib/cjs/index.js.map +1 -1
- package/lib/esm/components/datatable/__tests__/pagination-reset.test.js +594 -0
- package/lib/esm/components/datatable/__tests__/pagination-reset.test.js.map +1 -0
- package/lib/esm/components/datatable/__tests__/race-conditions.test.js +546 -0
- package/lib/esm/components/datatable/__tests__/race-conditions.test.js.map +1 -0
- package/lib/esm/components/datatable/__tests__/setup.js +58 -0
- package/lib/esm/components/datatable/__tests__/setup.js.map +1 -0
- package/lib/esm/components/datatable/datatable.js +92 -30
- package/lib/esm/components/datatable/datatable.js.map +1 -1
- package/lib/esm/index.js +0 -3
- package/lib/esm/index.js.map +1 -1
- package/package.json +9 -2
- package/src/components/datatable/__tests__/pagination-reset.test.ts +657 -0
- package/src/components/datatable/__tests__/race-conditions.test.ts +455 -0
- package/src/components/datatable/__tests__/setup.ts +67 -0
- package/src/components/datatable/datatable.ts +66 -11
- package/src/components/input/input.css +0 -1
- package/src/components/select/select.css +0 -1
- package/src/components/textarea/textarea.css +0 -1
- package/src/index.ts +0 -4
- package/styles.css +0 -1
- package/lib/cjs/components/datepicker/calendar.js +0 -1061
- package/lib/cjs/components/datepicker/calendar.js.map +0 -1
- package/lib/cjs/components/datepicker/config.js +0 -332
- package/lib/cjs/components/datepicker/config.js.map +0 -1
- package/lib/cjs/components/datepicker/datepicker.js +0 -949
- package/lib/cjs/components/datepicker/datepicker.js.map +0 -1
- package/lib/cjs/components/datepicker/dropdown.js +0 -635
- package/lib/cjs/components/datepicker/dropdown.js.map +0 -1
- package/lib/cjs/components/datepicker/events.js +0 -129
- package/lib/cjs/components/datepicker/events.js.map +0 -1
- package/lib/cjs/components/datepicker/index.js +0 -13
- package/lib/cjs/components/datepicker/index.js.map +0 -1
- package/lib/cjs/components/datepicker/keyboard.js +0 -536
- package/lib/cjs/components/datepicker/keyboard.js.map +0 -1
- package/lib/cjs/components/datepicker/locales.js +0 -78
- package/lib/cjs/components/datepicker/locales.js.map +0 -1
- package/lib/cjs/components/datepicker/templates.js +0 -403
- package/lib/cjs/components/datepicker/templates.js.map +0 -1
- package/lib/cjs/components/datepicker/types.js +0 -23
- package/lib/cjs/components/datepicker/types.js.map +0 -1
- package/lib/cjs/components/datepicker/utils.js +0 -524
- package/lib/cjs/components/datepicker/utils.js.map +0 -1
- package/lib/esm/components/datepicker/calendar.js +0 -1058
- package/lib/esm/components/datepicker/calendar.js.map +0 -1
- package/lib/esm/components/datepicker/config.js +0 -329
- package/lib/esm/components/datepicker/config.js.map +0 -1
- package/lib/esm/components/datepicker/datepicker.js +0 -946
- package/lib/esm/components/datepicker/datepicker.js.map +0 -1
- package/lib/esm/components/datepicker/dropdown.js +0 -632
- package/lib/esm/components/datepicker/dropdown.js.map +0 -1
- package/lib/esm/components/datepicker/events.js +0 -126
- package/lib/esm/components/datepicker/events.js.map +0 -1
- package/lib/esm/components/datepicker/index.js +0 -9
- package/lib/esm/components/datepicker/index.js.map +0 -1
- package/lib/esm/components/datepicker/keyboard.js +0 -533
- package/lib/esm/components/datepicker/keyboard.js.map +0 -1
- package/lib/esm/components/datepicker/locales.js +0 -74
- package/lib/esm/components/datepicker/locales.js.map +0 -1
- package/lib/esm/components/datepicker/templates.js +0 -390
- package/lib/esm/components/datepicker/templates.js.map +0 -1
- package/lib/esm/components/datepicker/types.js +0 -20
- package/lib/esm/components/datepicker/types.js.map +0 -1
- package/lib/esm/components/datepicker/utils.js +0 -508
- package/lib/esm/components/datepicker/utils.js.map +0 -1
- package/src/components/datepicker/calendar.ts +0 -1397
- package/src/components/datepicker/config.ts +0 -368
- package/src/components/datepicker/datepicker.css +0 -7
- package/src/components/datepicker/datepicker.ts +0 -1287
- package/src/components/datepicker/dropdown.ts +0 -757
- package/src/components/datepicker/events.ts +0 -149
- package/src/components/datepicker/index.ts +0 -10
- package/src/components/datepicker/keyboard.ts +0 -646
- package/src/components/datepicker/locales.ts +0 -80
- package/src/components/datepicker/templates.ts +0 -792
- package/src/components/datepicker/types.ts +0 -154
- package/src/components/datepicker/utils.ts +0 -631
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Race Condition Tests for KTDataTable
|
|
4
|
+
* Tests the fixes for concurrent request handling, request cancellation, and stale response detection
|
|
5
|
+
*/
|
|
6
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
7
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
8
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
9
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
10
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
11
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
12
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
16
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
17
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
18
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
19
|
+
function step(op) {
|
|
20
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
21
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
22
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
23
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
24
|
+
switch (op[0]) {
|
|
25
|
+
case 0: case 1: t = op; break;
|
|
26
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
27
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
28
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
29
|
+
default:
|
|
30
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
31
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
32
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
33
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
34
|
+
if (t[2]) _.ops.pop();
|
|
35
|
+
_.trys.pop(); continue;
|
|
36
|
+
}
|
|
37
|
+
op = body.call(thisArg, _);
|
|
38
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
39
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
var vitest_1 = require("vitest");
|
|
44
|
+
var datatable_1 = require("../datatable");
|
|
45
|
+
var setup_1 = require("./setup");
|
|
46
|
+
(0, vitest_1.describe)('KTDataTable Race Condition Fixes', function () {
|
|
47
|
+
var container;
|
|
48
|
+
var mockFetch;
|
|
49
|
+
var abortSignals = [];
|
|
50
|
+
(0, vitest_1.beforeEach)(function () {
|
|
51
|
+
// Setup DOM
|
|
52
|
+
container = document.createElement('div');
|
|
53
|
+
container.innerHTML = "\n\t\t\t<div data-kt-datatable=\"true\">\n\t\t\t\t<table data-kt-datatable-table=\"true\">\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th data-kt-datatable-column=\"id\">ID</th>\n\t\t\t\t\t\t\t<th data-kt-datatable-column=\"name\">Name</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody></tbody>\n\t\t\t\t</table>\n\t\t\t\t<div data-kt-datatable-info=\"true\"></div>\n\t\t\t\t<select data-kt-datatable-size=\"true\"></select>\n\t\t\t\t<div data-kt-datatable-pagination=\"true\"></div>\n\t\t\t</div>\n\t\t";
|
|
54
|
+
document.body.appendChild(container);
|
|
55
|
+
// Mock fetch to track requests and signals
|
|
56
|
+
abortSignals = [];
|
|
57
|
+
mockFetch = vitest_1.vi.fn(function (url, options) {
|
|
58
|
+
// Store abort signal for verification
|
|
59
|
+
if (options === null || options === void 0 ? void 0 : options.signal) {
|
|
60
|
+
abortSignals.push(options.signal);
|
|
61
|
+
}
|
|
62
|
+
// Simulate network delay
|
|
63
|
+
return new Promise(function (resolve, reject) {
|
|
64
|
+
var timeout = setTimeout(function () {
|
|
65
|
+
var _a;
|
|
66
|
+
if ((_a = options === null || options === void 0 ? void 0 : options.signal) === null || _a === void 0 ? void 0 : _a.aborted) {
|
|
67
|
+
reject(new DOMException('The operation was aborted.', 'AbortError'));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
resolve(new Response(JSON.stringify({
|
|
71
|
+
data: [
|
|
72
|
+
{ id: 1, name: 'Item 1' },
|
|
73
|
+
{ id: 2, name: 'Item 2' },
|
|
74
|
+
],
|
|
75
|
+
totalCount: 2,
|
|
76
|
+
}), { status: 200, headers: { 'Content-Type': 'application/json' } }));
|
|
77
|
+
}
|
|
78
|
+
}, 100); // 100ms delay
|
|
79
|
+
// Handle abort
|
|
80
|
+
if (options === null || options === void 0 ? void 0 : options.signal) {
|
|
81
|
+
options.signal.addEventListener('abort', function () {
|
|
82
|
+
clearTimeout(timeout);
|
|
83
|
+
reject(new DOMException('The operation was aborted.', 'AbortError'));
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
global.fetch = mockFetch;
|
|
89
|
+
});
|
|
90
|
+
(0, vitest_1.afterEach)(function () {
|
|
91
|
+
document.body.removeChild(container);
|
|
92
|
+
vitest_1.vi.clearAllMocks();
|
|
93
|
+
abortSignals = [];
|
|
94
|
+
});
|
|
95
|
+
(0, vitest_1.describe)('AbortController Integration', function () {
|
|
96
|
+
(0, vitest_1.it)('should create AbortController for remote data requests', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
97
|
+
var datatable;
|
|
98
|
+
return __generator(this, function (_a) {
|
|
99
|
+
switch (_a.label) {
|
|
100
|
+
case 0:
|
|
101
|
+
datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
|
|
102
|
+
apiEndpoint: '/api/data',
|
|
103
|
+
});
|
|
104
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
105
|
+
case 1:
|
|
106
|
+
_a.sent();
|
|
107
|
+
(0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(1);
|
|
108
|
+
(0, vitest_1.expect)(abortSignals.length).toBe(1);
|
|
109
|
+
(0, vitest_1.expect)(abortSignals[0]).toBeInstanceOf(AbortSignal);
|
|
110
|
+
return [2 /*return*/];
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}); });
|
|
114
|
+
(0, vitest_1.it)('should use _isFetching flag to prevent concurrent requests', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
115
|
+
var datatable;
|
|
116
|
+
return __generator(this, function (_a) {
|
|
117
|
+
switch (_a.label) {
|
|
118
|
+
case 0:
|
|
119
|
+
datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
|
|
120
|
+
apiEndpoint: '/api/data',
|
|
121
|
+
});
|
|
122
|
+
// Try to trigger search during initial fetch
|
|
123
|
+
datatable.search('test'); // Should be blocked by _isFetching
|
|
124
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
125
|
+
case 1:
|
|
126
|
+
_a.sent();
|
|
127
|
+
// Should only have 1 request (initial) because _isFetching blocked the second
|
|
128
|
+
(0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(1);
|
|
129
|
+
return [2 /*return*/];
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}); });
|
|
133
|
+
(0, vitest_1.it)('should allow new request after previous completes', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
134
|
+
var datatable;
|
|
135
|
+
return __generator(this, function (_a) {
|
|
136
|
+
switch (_a.label) {
|
|
137
|
+
case 0:
|
|
138
|
+
datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
|
|
139
|
+
apiEndpoint: '/api/data',
|
|
140
|
+
});
|
|
141
|
+
// Wait for initial fetch to complete
|
|
142
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
143
|
+
case 1:
|
|
144
|
+
// Wait for initial fetch to complete
|
|
145
|
+
_a.sent();
|
|
146
|
+
// Now trigger a search - should succeed
|
|
147
|
+
datatable.search('test');
|
|
148
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
149
|
+
case 2:
|
|
150
|
+
_a.sent();
|
|
151
|
+
// Should have 2 requests total
|
|
152
|
+
(0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(2);
|
|
153
|
+
(0, vitest_1.expect)(abortSignals.length).toBe(2);
|
|
154
|
+
return [2 /*return*/];
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}); });
|
|
158
|
+
(0, vitest_1.it)('should abort previous request when _performFetchRequest is called again', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
159
|
+
var datatable;
|
|
160
|
+
return __generator(this, function (_a) {
|
|
161
|
+
switch (_a.label) {
|
|
162
|
+
case 0:
|
|
163
|
+
datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
|
|
164
|
+
apiEndpoint: '/api/data',
|
|
165
|
+
});
|
|
166
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
167
|
+
case 1:
|
|
168
|
+
_a.sent(); // Complete initial request
|
|
169
|
+
// Trigger first search
|
|
170
|
+
datatable.search('first');
|
|
171
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
172
|
+
case 2:
|
|
173
|
+
_a.sent();
|
|
174
|
+
// Trigger second search (first should complete, second starts fresh)
|
|
175
|
+
datatable.search('second');
|
|
176
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
177
|
+
case 3:
|
|
178
|
+
_a.sent();
|
|
179
|
+
// Should have 3 requests: initial + first search + second search
|
|
180
|
+
(0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(3);
|
|
181
|
+
(0, vitest_1.expect)(abortSignals.length).toBe(3);
|
|
182
|
+
// Each gets its own AbortController
|
|
183
|
+
abortSignals.forEach(function (signal) {
|
|
184
|
+
(0, vitest_1.expect)(signal).toBeInstanceOf(AbortSignal);
|
|
185
|
+
});
|
|
186
|
+
return [2 /*return*/];
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}); });
|
|
190
|
+
});
|
|
191
|
+
(0, vitest_1.describe)('Request ID Sequencing', function () {
|
|
192
|
+
(0, vitest_1.it)('should assign incremental request IDs for sequential requests', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
193
|
+
var requestIds, callCount, datatable;
|
|
194
|
+
return __generator(this, function (_a) {
|
|
195
|
+
switch (_a.label) {
|
|
196
|
+
case 0:
|
|
197
|
+
requestIds = [];
|
|
198
|
+
callCount = 0;
|
|
199
|
+
// Mock to capture request sequence
|
|
200
|
+
mockFetch.mockImplementation(function (url, options) {
|
|
201
|
+
callCount++;
|
|
202
|
+
var id = callCount;
|
|
203
|
+
requestIds.push(id);
|
|
204
|
+
return new Promise(function (resolve) {
|
|
205
|
+
setTimeout(function () {
|
|
206
|
+
resolve(new Response(JSON.stringify({
|
|
207
|
+
data: [{ id: id, name: "Item ".concat(id) }],
|
|
208
|
+
totalCount: 1,
|
|
209
|
+
}), { status: 200 }));
|
|
210
|
+
}, 50);
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
|
|
214
|
+
apiEndpoint: '/api/data',
|
|
215
|
+
});
|
|
216
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(100)];
|
|
217
|
+
case 1:
|
|
218
|
+
_a.sent(); // Complete initial request
|
|
219
|
+
datatable.search('a');
|
|
220
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(100)];
|
|
221
|
+
case 2:
|
|
222
|
+
_a.sent(); // Complete search
|
|
223
|
+
datatable.search('b');
|
|
224
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(100)];
|
|
225
|
+
case 3:
|
|
226
|
+
_a.sent(); // Complete second search
|
|
227
|
+
// Request IDs should be sequential: 1, 2, 3
|
|
228
|
+
(0, vitest_1.expect)(requestIds).toEqual([1, 2, 3]);
|
|
229
|
+
return [2 /*return*/];
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
}); });
|
|
233
|
+
(0, vitest_1.it)('should have request ID validation logic in place', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
234
|
+
var datatable, tbody;
|
|
235
|
+
return __generator(this, function (_a) {
|
|
236
|
+
switch (_a.label) {
|
|
237
|
+
case 0:
|
|
238
|
+
datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
|
|
239
|
+
apiEndpoint: '/api/data',
|
|
240
|
+
});
|
|
241
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
242
|
+
case 1:
|
|
243
|
+
_a.sent(); // Complete initial
|
|
244
|
+
datatable.search('first');
|
|
245
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
246
|
+
case 2:
|
|
247
|
+
_a.sent(); // Complete first search
|
|
248
|
+
datatable.search('second');
|
|
249
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
250
|
+
case 3:
|
|
251
|
+
_a.sent(); // Complete second search
|
|
252
|
+
// All requests should complete successfully with incremental request IDs
|
|
253
|
+
(0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(3);
|
|
254
|
+
tbody = container.querySelector('tbody');
|
|
255
|
+
(0, vitest_1.expect)(tbody === null || tbody === void 0 ? void 0 : tbody.querySelectorAll('tr').length).toBeGreaterThan(0);
|
|
256
|
+
return [2 /*return*/];
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}); });
|
|
260
|
+
});
|
|
261
|
+
(0, vitest_1.describe)('_isFetching Flag Management', function () {
|
|
262
|
+
(0, vitest_1.it)('should prevent concurrent fetch executions', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
263
|
+
var datatable;
|
|
264
|
+
return __generator(this, function (_a) {
|
|
265
|
+
switch (_a.label) {
|
|
266
|
+
case 0:
|
|
267
|
+
datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
|
|
268
|
+
apiEndpoint: '/api/data',
|
|
269
|
+
});
|
|
270
|
+
// Try to trigger reload immediately (should be blocked by initial fetch)
|
|
271
|
+
datatable.reload(); // Blocked by _isFetching
|
|
272
|
+
datatable.reload(); // Blocked by _isFetching
|
|
273
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
274
|
+
case 1:
|
|
275
|
+
_a.sent();
|
|
276
|
+
// Should only have 1 request: initial
|
|
277
|
+
// The reload calls are blocked by _isFetching
|
|
278
|
+
(0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(1);
|
|
279
|
+
return [2 /*return*/];
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
}); });
|
|
283
|
+
(0, vitest_1.it)('should reset _isFetching flag after fetch completes', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
284
|
+
var datatable;
|
|
285
|
+
return __generator(this, function (_a) {
|
|
286
|
+
switch (_a.label) {
|
|
287
|
+
case 0:
|
|
288
|
+
datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
|
|
289
|
+
apiEndpoint: '/api/data',
|
|
290
|
+
});
|
|
291
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
292
|
+
case 1:
|
|
293
|
+
_a.sent(); // Wait for initial fetch
|
|
294
|
+
// Should be able to trigger new fetch after previous completes
|
|
295
|
+
datatable.reload();
|
|
296
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
297
|
+
case 2:
|
|
298
|
+
_a.sent();
|
|
299
|
+
(0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(2);
|
|
300
|
+
return [2 /*return*/];
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
}); });
|
|
304
|
+
(0, vitest_1.it)('should reset _isFetching flag even after fetch error', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
305
|
+
var callCount, datatable;
|
|
306
|
+
return __generator(this, function (_a) {
|
|
307
|
+
switch (_a.label) {
|
|
308
|
+
case 0:
|
|
309
|
+
callCount = 0;
|
|
310
|
+
mockFetch.mockImplementation(function () {
|
|
311
|
+
callCount++;
|
|
312
|
+
if (callCount === 1) {
|
|
313
|
+
// Return invalid JSON to trigger parse error
|
|
314
|
+
return Promise.resolve(new Response('Not JSON', { status: 200 }));
|
|
315
|
+
}
|
|
316
|
+
return Promise.resolve(new Response(JSON.stringify({
|
|
317
|
+
data: [{ id: 1, name: 'Success' }],
|
|
318
|
+
totalCount: 1,
|
|
319
|
+
}), { status: 200 }));
|
|
320
|
+
});
|
|
321
|
+
datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
|
|
322
|
+
apiEndpoint: '/api/data',
|
|
323
|
+
});
|
|
324
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
325
|
+
case 1:
|
|
326
|
+
_a.sent(); // Initial request triggers parse error
|
|
327
|
+
// Should be able to retry after error
|
|
328
|
+
datatable.reload();
|
|
329
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
330
|
+
case 2:
|
|
331
|
+
_a.sent();
|
|
332
|
+
(0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(2);
|
|
333
|
+
return [2 /*return*/];
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
}); });
|
|
337
|
+
});
|
|
338
|
+
(0, vitest_1.describe)('Loading Spinner Management', function () {
|
|
339
|
+
(0, vitest_1.it)('should show spinner during fetch', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
340
|
+
var element, datatable;
|
|
341
|
+
return __generator(this, function (_a) {
|
|
342
|
+
switch (_a.label) {
|
|
343
|
+
case 0:
|
|
344
|
+
element = container.querySelector('[data-kt-datatable="true"]');
|
|
345
|
+
datatable = new datatable_1.KTDataTable(element, {
|
|
346
|
+
apiEndpoint: '/api/data',
|
|
347
|
+
});
|
|
348
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(10)];
|
|
349
|
+
case 1:
|
|
350
|
+
_a.sent(); // Spinner should be visible
|
|
351
|
+
(0, vitest_1.expect)(element.classList.contains('loading')).toBe(true);
|
|
352
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
353
|
+
case 2:
|
|
354
|
+
_a.sent(); // Wait for fetch to complete
|
|
355
|
+
(0, vitest_1.expect)(element.classList.contains('loading')).toBe(false);
|
|
356
|
+
return [2 /*return*/];
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
}); });
|
|
360
|
+
(0, vitest_1.it)('should keep spinner visible during overlapping requests', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
361
|
+
var element, datatable;
|
|
362
|
+
return __generator(this, function (_a) {
|
|
363
|
+
switch (_a.label) {
|
|
364
|
+
case 0:
|
|
365
|
+
element = container.querySelector('[data-kt-datatable="true"]');
|
|
366
|
+
datatable = new datatable_1.KTDataTable(element, {
|
|
367
|
+
apiEndpoint: '/api/data',
|
|
368
|
+
});
|
|
369
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(10)];
|
|
370
|
+
case 1:
|
|
371
|
+
_a.sent();
|
|
372
|
+
(0, vitest_1.expect)(element.classList.contains('loading')).toBe(true);
|
|
373
|
+
// Trigger second request while first is in progress
|
|
374
|
+
datatable.search('test');
|
|
375
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(10)];
|
|
376
|
+
case 2:
|
|
377
|
+
_a.sent();
|
|
378
|
+
// Spinner should still be visible
|
|
379
|
+
(0, vitest_1.expect)(element.classList.contains('loading')).toBe(true);
|
|
380
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
381
|
+
case 3:
|
|
382
|
+
_a.sent();
|
|
383
|
+
// Spinner should hide only after last request completes
|
|
384
|
+
(0, vitest_1.expect)(element.classList.contains('loading')).toBe(false);
|
|
385
|
+
return [2 /*return*/];
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
}); });
|
|
389
|
+
(0, vitest_1.it)('should not flicker spinner during rapid interactions', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
390
|
+
var element, datatable, spinnerStates, checkInterval, transitions;
|
|
391
|
+
return __generator(this, function (_a) {
|
|
392
|
+
switch (_a.label) {
|
|
393
|
+
case 0:
|
|
394
|
+
element = container.querySelector('[data-kt-datatable="true"]');
|
|
395
|
+
datatable = new datatable_1.KTDataTable(element, {
|
|
396
|
+
apiEndpoint: '/api/data',
|
|
397
|
+
});
|
|
398
|
+
spinnerStates = [];
|
|
399
|
+
checkInterval = setInterval(function () {
|
|
400
|
+
spinnerStates.push(element.classList.contains('loading'));
|
|
401
|
+
}, 20);
|
|
402
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(10)];
|
|
403
|
+
case 1:
|
|
404
|
+
_a.sent();
|
|
405
|
+
datatable.search('a');
|
|
406
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(10)];
|
|
407
|
+
case 2:
|
|
408
|
+
_a.sent();
|
|
409
|
+
datatable.search('ab');
|
|
410
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(10)];
|
|
411
|
+
case 3:
|
|
412
|
+
_a.sent();
|
|
413
|
+
datatable.search('abc');
|
|
414
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
415
|
+
case 4:
|
|
416
|
+
_a.sent();
|
|
417
|
+
clearInterval(checkInterval);
|
|
418
|
+
transitions = spinnerStates.reduce(function (acc, curr, idx) {
|
|
419
|
+
if (idx > 0 && spinnerStates[idx - 1] !== curr) {
|
|
420
|
+
acc.push(curr);
|
|
421
|
+
}
|
|
422
|
+
return acc;
|
|
423
|
+
}, []);
|
|
424
|
+
// Should have exactly 2 transitions: off->on, on->off
|
|
425
|
+
// No additional transitions that would indicate flickering
|
|
426
|
+
(0, vitest_1.expect)(transitions.length).toBeLessThanOrEqual(2);
|
|
427
|
+
return [2 /*return*/];
|
|
428
|
+
}
|
|
429
|
+
});
|
|
430
|
+
}); });
|
|
431
|
+
});
|
|
432
|
+
(0, vitest_1.describe)('Event Handling During Race Conditions', function () {
|
|
433
|
+
(0, vitest_1.it)('should fire fetch event for successful requests', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
434
|
+
var fetchEvents, element, datatable;
|
|
435
|
+
return __generator(this, function (_a) {
|
|
436
|
+
switch (_a.label) {
|
|
437
|
+
case 0:
|
|
438
|
+
fetchEvents = [];
|
|
439
|
+
element = container.querySelector('[data-kt-datatable="true"]');
|
|
440
|
+
element.addEventListener('fetch', function (e) {
|
|
441
|
+
fetchEvents.push(e);
|
|
442
|
+
});
|
|
443
|
+
datatable = new datatable_1.KTDataTable(element, {
|
|
444
|
+
apiEndpoint: '/api/data',
|
|
445
|
+
});
|
|
446
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
447
|
+
case 1:
|
|
448
|
+
_a.sent(); // Complete initial
|
|
449
|
+
datatable.search('test');
|
|
450
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
451
|
+
case 2:
|
|
452
|
+
_a.sent(); // Complete search
|
|
453
|
+
// Should fire fetch for initial and search
|
|
454
|
+
(0, vitest_1.expect)(fetchEvents.length).toBeGreaterThanOrEqual(2);
|
|
455
|
+
return [2 /*return*/];
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
}); });
|
|
459
|
+
(0, vitest_1.it)('should fire fetched event after successful data load', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
460
|
+
var fetchedEvents, element, datatable;
|
|
461
|
+
return __generator(this, function (_a) {
|
|
462
|
+
switch (_a.label) {
|
|
463
|
+
case 0:
|
|
464
|
+
fetchedEvents = [];
|
|
465
|
+
element = container.querySelector('[data-kt-datatable="true"]');
|
|
466
|
+
element.addEventListener('fetched', function (e) {
|
|
467
|
+
fetchedEvents.push(e);
|
|
468
|
+
});
|
|
469
|
+
datatable = new datatable_1.KTDataTable(element, {
|
|
470
|
+
apiEndpoint: '/api/data',
|
|
471
|
+
});
|
|
472
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
473
|
+
case 1:
|
|
474
|
+
_a.sent();
|
|
475
|
+
// Should fire fetched for initial request
|
|
476
|
+
(0, vitest_1.expect)(fetchedEvents.length).toBeGreaterThanOrEqual(1);
|
|
477
|
+
return [2 /*return*/];
|
|
478
|
+
}
|
|
479
|
+
});
|
|
480
|
+
}); });
|
|
481
|
+
(0, vitest_1.it)('should not fire error events for AbortError', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
482
|
+
var errorEvents, element, datatable;
|
|
483
|
+
return __generator(this, function (_a) {
|
|
484
|
+
switch (_a.label) {
|
|
485
|
+
case 0:
|
|
486
|
+
errorEvents = [];
|
|
487
|
+
element = container.querySelector('[data-kt-datatable="true"]');
|
|
488
|
+
element.addEventListener('error.kt.datatable', function (e) {
|
|
489
|
+
errorEvents.push(e);
|
|
490
|
+
});
|
|
491
|
+
datatable = new datatable_1.KTDataTable(element, {
|
|
492
|
+
apiEndpoint: '/api/data',
|
|
493
|
+
});
|
|
494
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(10)];
|
|
495
|
+
case 1:
|
|
496
|
+
_a.sent();
|
|
497
|
+
datatable.search('test'); // Cancels previous
|
|
498
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
499
|
+
case 2:
|
|
500
|
+
_a.sent();
|
|
501
|
+
// AbortError should not trigger error event
|
|
502
|
+
(0, vitest_1.expect)(errorEvents.length).toBe(0);
|
|
503
|
+
return [2 /*return*/];
|
|
504
|
+
}
|
|
505
|
+
});
|
|
506
|
+
}); });
|
|
507
|
+
});
|
|
508
|
+
(0, vitest_1.describe)('Backward Compatibility', function () {
|
|
509
|
+
(0, vitest_1.it)('should work with local data mode (no AbortController needed)', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
510
|
+
var datatable;
|
|
511
|
+
return __generator(this, function (_a) {
|
|
512
|
+
datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'));
|
|
513
|
+
// Should not call fetch for local data
|
|
514
|
+
(0, vitest_1.expect)(mockFetch).not.toHaveBeenCalled();
|
|
515
|
+
// Should still work without errors
|
|
516
|
+
datatable.search('Item 1');
|
|
517
|
+
datatable.sort('name');
|
|
518
|
+
datatable.goPage(1);
|
|
519
|
+
return [2 /*return*/];
|
|
520
|
+
});
|
|
521
|
+
}); });
|
|
522
|
+
(0, vitest_1.it)('should maintain existing API compatibility', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
523
|
+
var datatable;
|
|
524
|
+
return __generator(this, function (_a) {
|
|
525
|
+
switch (_a.label) {
|
|
526
|
+
case 0:
|
|
527
|
+
datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
|
|
528
|
+
apiEndpoint: '/api/data',
|
|
529
|
+
});
|
|
530
|
+
return [4 /*yield*/, (0, setup_1.waitFor)(150)];
|
|
531
|
+
case 1:
|
|
532
|
+
_a.sent();
|
|
533
|
+
// All existing methods should work
|
|
534
|
+
(0, vitest_1.expect)(function () {
|
|
535
|
+
datatable.reload();
|
|
536
|
+
datatable.search('test');
|
|
537
|
+
datatable.sort('name');
|
|
538
|
+
datatable.goPage(1);
|
|
539
|
+
datatable.setPageSize(20);
|
|
540
|
+
datatable.getState();
|
|
541
|
+
}).not.toThrow();
|
|
542
|
+
return [2 /*return*/];
|
|
543
|
+
}
|
|
544
|
+
});
|
|
545
|
+
}); });
|
|
546
|
+
});
|
|
547
|
+
});
|
|
548
|
+
//# sourceMappingURL=race-conditions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"race-conditions.test.js","sourceRoot":"","sources":["../../../../../src/components/datatable/__tests__/race-conditions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Vitest setup file for datatable tests
|
|
4
|
+
* Provides DOM environment setup and utilities
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createMockElement = exports.waitFor = void 0;
|
|
8
|
+
var vitest_1 = require("vitest");
|
|
9
|
+
// Mock KTComponents to prevent auto-initialization errors
|
|
10
|
+
vitest_1.vi.mock('../../../index', function () { return ({
|
|
11
|
+
default: {
|
|
12
|
+
init: vitest_1.vi.fn(),
|
|
13
|
+
},
|
|
14
|
+
KTComponents: {
|
|
15
|
+
init: vitest_1.vi.fn(),
|
|
16
|
+
},
|
|
17
|
+
}); });
|
|
18
|
+
// Setup DOM environment before each test
|
|
19
|
+
(0, vitest_1.beforeEach)(function () {
|
|
20
|
+
// Clear localStorage
|
|
21
|
+
localStorage.clear();
|
|
22
|
+
// Reset document body
|
|
23
|
+
document.body.innerHTML = '';
|
|
24
|
+
// Clear any global state
|
|
25
|
+
// Add any other global setup here
|
|
26
|
+
});
|
|
27
|
+
// Cleanup after each test
|
|
28
|
+
(0, vitest_1.afterEach)(function () {
|
|
29
|
+
// Clear localStorage
|
|
30
|
+
localStorage.clear();
|
|
31
|
+
// Reset document body
|
|
32
|
+
document.body.innerHTML = '';
|
|
33
|
+
// Clear all pending timers to prevent "document is not defined" errors
|
|
34
|
+
vitest_1.vi.clearAllTimers();
|
|
35
|
+
});
|
|
36
|
+
// Mock window.matchMedia if needed
|
|
37
|
+
Object.defineProperty(window, 'matchMedia', {
|
|
38
|
+
writable: true,
|
|
39
|
+
value: function (query) { return ({
|
|
40
|
+
matches: false,
|
|
41
|
+
media: query,
|
|
42
|
+
onchange: null,
|
|
43
|
+
addListener: function () { }, // deprecated
|
|
44
|
+
removeListener: function () { }, // deprecated
|
|
45
|
+
addEventListener: function () { },
|
|
46
|
+
removeEventListener: function () { },
|
|
47
|
+
dispatchEvent: function () { return true; },
|
|
48
|
+
}); },
|
|
49
|
+
});
|
|
50
|
+
// Export utilities that tests can use
|
|
51
|
+
var waitFor = function (ms) { return new Promise(function (resolve) { return setTimeout(resolve, ms); }); };
|
|
52
|
+
exports.waitFor = waitFor;
|
|
53
|
+
var createMockElement = function (tag, attributes) {
|
|
54
|
+
if (attributes === void 0) { attributes = {}; }
|
|
55
|
+
var el = document.createElement(tag);
|
|
56
|
+
Object.entries(attributes).forEach(function (_a) {
|
|
57
|
+
var key = _a[0], value = _a[1];
|
|
58
|
+
el.setAttribute(key, value);
|
|
59
|
+
});
|
|
60
|
+
return el;
|
|
61
|
+
};
|
|
62
|
+
exports.createMockElement = createMockElement;
|
|
63
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../../src/components/datatable/__tests__/setup.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,iCAAmD;AAEnD,0DAA0D;AAC1D,WAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,cAAM,OAAA,CAAC;IAChC,OAAO,EAAE;QACR,IAAI,EAAE,WAAE,CAAC,EAAE,EAAE;KACb;IACD,YAAY,EAAE;QACb,IAAI,EAAE,WAAE,CAAC,EAAE,EAAE;KACb;CACD,CAAC,EAP8B,CAO9B,CAAC,CAAC;AAEJ,yCAAyC;AACzC,IAAA,mBAAU,EAAC;IACV,qBAAqB;IACrB,YAAY,CAAC,KAAK,EAAE,CAAC;IAErB,sBAAsB;IACtB,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IAE7B,yBAAyB;IACzB,kCAAkC;AACnC,CAAC,CAAC,CAAC;AAEH,0BAA0B;AAC1B,IAAA,kBAAS,EAAC;IACT,qBAAqB;IACrB,YAAY,CAAC,KAAK,EAAE,CAAC;IAErB,sBAAsB;IACtB,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IAE7B,uEAAuE;IACvE,WAAE,CAAC,cAAc,EAAE,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,mCAAmC;AACnC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE;IAC3C,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,UAAC,KAAa,IAAK,OAAA,CAAC;QAC1B,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,IAAuE;QACjF,WAAW,EAAE,cAAO,CAAC,EAAE,aAAa;QACpC,cAAc,EAAE,cAAO,CAAC,EAAE,aAAa;QACvC,gBAAgB,EAAE,cAAO,CAAC;QAC1B,mBAAmB,EAAE,cAAO,CAAC;QAC7B,aAAa,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;KACzB,CAAC,EATwB,CASxB;CACF,CAAC,CAAC;AAEH,sCAAsC;AAC/B,IAAM,OAAO,GAAG,UAAC,EAAU,IAAK,OAAA,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,EAAvB,CAAuB,CAAC,EAAjD,CAAiD,CAAC;AAA5E,QAAA,OAAO,WAAqE;AAElF,IAAM,iBAAiB,GAAG,UAAC,GAAW,EAAE,UAAuC;IAAvC,2BAAA,EAAA,eAAuC;IACrF,IAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAC,EAAY;YAAX,GAAG,QAAA,EAAE,KAAK,QAAA;QAC9C,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,CAAC;AACX,CAAC,CAAC;AANW,QAAA,iBAAiB,qBAM5B"}
|