@unifiedsoftware/react-ui 1.0.14 → 1.0.16
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/index.d.mts +92 -1
- package/dist/index.d.ts +92 -1
- package/dist/index.js +568 -22
- package/dist/index.mjs +572 -20
- package/package.json +6 -4
package/dist/index.js
CHANGED
|
@@ -75,7 +75,9 @@ __export(src_exports, {
|
|
|
75
75
|
MenuItem: () => MenuItem_default,
|
|
76
76
|
MenuSubmenu: () => MenuSubmenu_default,
|
|
77
77
|
MenuValueContext: () => MenuValueContext_default,
|
|
78
|
+
MultiSelect: () => MultiSelect_default,
|
|
78
79
|
Portal: () => Portal_default,
|
|
80
|
+
Select: () => Select_default,
|
|
79
81
|
Tab: () => Tab,
|
|
80
82
|
Tabs: () => Tabs,
|
|
81
83
|
Toolbar: () => Toolbar_default,
|
|
@@ -1175,20 +1177,563 @@ var Toolbar = (props) => {
|
|
|
1175
1177
|
};
|
|
1176
1178
|
var Toolbar_default = Toolbar;
|
|
1177
1179
|
|
|
1178
|
-
// src/
|
|
1180
|
+
// src/components/Select/SelectClient.tsx
|
|
1181
|
+
var import_kendo_data_query = require("@progress/kendo-data-query");
|
|
1182
|
+
var import_kendo_react_dropdowns = require("@progress/kendo-react-dropdowns");
|
|
1183
|
+
var import_react26 = require("react");
|
|
1184
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1185
|
+
var SelectClient = ({
|
|
1186
|
+
value: valueProp,
|
|
1187
|
+
data: propData,
|
|
1188
|
+
filter: filterProp,
|
|
1189
|
+
keyField: keyField2 = "key",
|
|
1190
|
+
textField: textField3 = "text",
|
|
1191
|
+
placeholder,
|
|
1192
|
+
virtual,
|
|
1193
|
+
filterable,
|
|
1194
|
+
disabled,
|
|
1195
|
+
loading,
|
|
1196
|
+
className,
|
|
1197
|
+
onChange,
|
|
1198
|
+
onFilterChange
|
|
1199
|
+
}) => {
|
|
1200
|
+
const [value, setValue] = (0, import_react26.useState)(valueProp);
|
|
1201
|
+
const [filter, setFilter] = (0, import_react26.useState)(filterProp);
|
|
1202
|
+
const handleChange = (event) => {
|
|
1203
|
+
const value2 = event.target.value || null;
|
|
1204
|
+
if (valueProp !== void 0) {
|
|
1205
|
+
onChange(value2);
|
|
1206
|
+
} else {
|
|
1207
|
+
setValue(value2);
|
|
1208
|
+
}
|
|
1209
|
+
};
|
|
1210
|
+
const pageSize3 = virtual == null ? void 0 : virtual.pageSize;
|
|
1211
|
+
const filteredData = (0, import_react26.useRef)([]);
|
|
1212
|
+
const [state, setState] = (0, import_react26.useState)({
|
|
1213
|
+
skip: 0,
|
|
1214
|
+
total: propData.total,
|
|
1215
|
+
subsetData: propData.items.slice(0, pageSize3)
|
|
1216
|
+
});
|
|
1217
|
+
const handleFilterChange = (event) => {
|
|
1218
|
+
if (pageSize3) {
|
|
1219
|
+
filteredData.current = (0, import_kendo_data_query.filterBy)(propData.items.slice(), event.filter);
|
|
1220
|
+
const data = filteredData.current.slice(0, pageSize3);
|
|
1221
|
+
setState({
|
|
1222
|
+
subsetData: data,
|
|
1223
|
+
skip: 0,
|
|
1224
|
+
total: filteredData.current.length
|
|
1225
|
+
});
|
|
1226
|
+
}
|
|
1227
|
+
const filter2 = event.filter.value;
|
|
1228
|
+
if (filterProp !== void 0) {
|
|
1229
|
+
onFilterChange == null ? void 0 : onFilterChange(filter2);
|
|
1230
|
+
} else {
|
|
1231
|
+
setFilter(filter2);
|
|
1232
|
+
}
|
|
1233
|
+
};
|
|
1234
|
+
const handlePageChange = (event) => {
|
|
1235
|
+
if (pageSize3) {
|
|
1236
|
+
const skip = event.page.skip;
|
|
1237
|
+
const take = event.page.take;
|
|
1238
|
+
const newSubsetData = filteredData.current.slice(skip, skip + take);
|
|
1239
|
+
setState(__spreadProps(__spreadValues({}, state), { subsetData: newSubsetData, skip }));
|
|
1240
|
+
}
|
|
1241
|
+
};
|
|
1242
|
+
(0, import_react26.useEffect)(() => {
|
|
1243
|
+
if (valueProp !== void 0) {
|
|
1244
|
+
setValue(valueProp);
|
|
1245
|
+
}
|
|
1246
|
+
}, [valueProp]);
|
|
1247
|
+
(0, import_react26.useEffect)(() => {
|
|
1248
|
+
setFilter(filterProp);
|
|
1249
|
+
}, [filterProp]);
|
|
1250
|
+
(0, import_react26.useEffect)(() => {
|
|
1251
|
+
if (pageSize3) {
|
|
1252
|
+
filteredData.current = propData.items.slice();
|
|
1253
|
+
}
|
|
1254
|
+
}, [propData]);
|
|
1255
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1256
|
+
import_kendo_react_dropdowns.ComboBox,
|
|
1257
|
+
{
|
|
1258
|
+
value,
|
|
1259
|
+
data: pageSize3 ? state.subsetData : propData.items,
|
|
1260
|
+
placeholder,
|
|
1261
|
+
dataItemKey: keyField2,
|
|
1262
|
+
textField: textField3,
|
|
1263
|
+
filterable,
|
|
1264
|
+
filter,
|
|
1265
|
+
virtual: pageSize3 ? {
|
|
1266
|
+
total: state.total,
|
|
1267
|
+
pageSize: pageSize3,
|
|
1268
|
+
skip: state.skip
|
|
1269
|
+
} : void 0,
|
|
1270
|
+
disabled,
|
|
1271
|
+
loading,
|
|
1272
|
+
className,
|
|
1273
|
+
onChange: handleChange,
|
|
1274
|
+
onFilterChange: handleFilterChange,
|
|
1275
|
+
onPageChange: handlePageChange
|
|
1276
|
+
}
|
|
1277
|
+
);
|
|
1278
|
+
};
|
|
1279
|
+
var SelectClient_default = SelectClient;
|
|
1280
|
+
|
|
1281
|
+
// src/components/Select/SelectServer.tsx
|
|
1282
|
+
var import_kendo_react_dropdowns2 = require("@progress/kendo-react-dropdowns");
|
|
1283
|
+
var import_react27 = require("react");
|
|
1284
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
1285
|
+
var textField = "ContactName";
|
|
1286
|
+
var emptyItem = { [textField]: "loading ...", CustomerID: 0 };
|
|
1287
|
+
var pageSize = 10;
|
|
1288
|
+
var loadingData = [];
|
|
1289
|
+
while (loadingData.length < pageSize) {
|
|
1290
|
+
loadingData.push(__spreadValues({}, emptyItem));
|
|
1291
|
+
}
|
|
1292
|
+
var SelectServer = ({
|
|
1293
|
+
data: dataProp,
|
|
1294
|
+
value: valueProp,
|
|
1295
|
+
keyField: keyField2 = "key",
|
|
1296
|
+
textField: textField3 = "text",
|
|
1297
|
+
placeholder,
|
|
1298
|
+
virtual,
|
|
1299
|
+
filterable,
|
|
1300
|
+
filter: filterProp = "",
|
|
1301
|
+
disabled,
|
|
1302
|
+
loading,
|
|
1303
|
+
className,
|
|
1304
|
+
onChange,
|
|
1305
|
+
onDataChange,
|
|
1306
|
+
onFilterChange,
|
|
1307
|
+
getData,
|
|
1308
|
+
renderItem
|
|
1309
|
+
}) => {
|
|
1310
|
+
var _a;
|
|
1311
|
+
const dataCaching = (0, import_react27.useRef)([]);
|
|
1312
|
+
const pendingRequest = (0, import_react27.useRef)();
|
|
1313
|
+
const requestStarted = (0, import_react27.useRef)(false);
|
|
1314
|
+
const emptyItem3 = { [keyField2]: 0, [textField3]: "loading ..." };
|
|
1315
|
+
const [loadingData3, setLoadingData] = (0, import_react27.useState)([]);
|
|
1316
|
+
const [data, setData] = (0, import_react27.useState)(dataProp.items);
|
|
1317
|
+
const [total, setTotal] = (0, import_react27.useState)(0);
|
|
1318
|
+
const [value, setValue] = (0, import_react27.useState)(valueProp);
|
|
1319
|
+
const [filter, setFilter] = (0, import_react27.useState)(filterProp);
|
|
1320
|
+
const pageSize3 = (_a = virtual == null ? void 0 : virtual.pageSize) != null ? _a : 10;
|
|
1321
|
+
const skipRef = (0, import_react27.useRef)(0);
|
|
1322
|
+
const resetCach = () => {
|
|
1323
|
+
dataCaching.current.length = 0;
|
|
1324
|
+
};
|
|
1325
|
+
const requestData = (0, import_react27.useCallback)((state) => {
|
|
1326
|
+
const { skip } = state;
|
|
1327
|
+
if (requestStarted.current) {
|
|
1328
|
+
clearTimeout(pendingRequest.current);
|
|
1329
|
+
pendingRequest.current = setTimeout(() => {
|
|
1330
|
+
requestData(state);
|
|
1331
|
+
}, 50);
|
|
1332
|
+
return;
|
|
1333
|
+
}
|
|
1334
|
+
requestStarted.current = true;
|
|
1335
|
+
getData(state).then(({ items, total: total2 }) => {
|
|
1336
|
+
items.forEach((item, index) => {
|
|
1337
|
+
dataCaching.current[index + skip] = item;
|
|
1338
|
+
});
|
|
1339
|
+
if (skip === skipRef.current) {
|
|
1340
|
+
setData(items);
|
|
1341
|
+
setTotal(total2);
|
|
1342
|
+
onDataChange == null ? void 0 : onDataChange({ items, total: total2 });
|
|
1343
|
+
}
|
|
1344
|
+
requestStarted.current = false;
|
|
1345
|
+
}).catch(() => {
|
|
1346
|
+
requestStarted.current = false;
|
|
1347
|
+
});
|
|
1348
|
+
}, []);
|
|
1349
|
+
const handleFilterChange = (0, import_react27.useCallback)((event) => {
|
|
1350
|
+
const filter2 = event.filter.value;
|
|
1351
|
+
if (filterProp !== void 0) {
|
|
1352
|
+
onFilterChange == null ? void 0 : onFilterChange(filter2);
|
|
1353
|
+
} else {
|
|
1354
|
+
setFilter(filter2);
|
|
1355
|
+
}
|
|
1356
|
+
resetCach();
|
|
1357
|
+
requestData({ skip: 0, filter: filter2 });
|
|
1358
|
+
setData(loadingData3);
|
|
1359
|
+
skipRef.current = 0;
|
|
1360
|
+
}, []);
|
|
1361
|
+
const shouldRequestData = (0, import_react27.useCallback)((skip) => {
|
|
1362
|
+
for (let i = 0; i < pageSize3; i++) {
|
|
1363
|
+
if (!dataCaching.current[skip + i]) {
|
|
1364
|
+
return true;
|
|
1365
|
+
}
|
|
1366
|
+
}
|
|
1367
|
+
return false;
|
|
1368
|
+
}, []);
|
|
1369
|
+
const getCachedData = (0, import_react27.useCallback)((skip) => {
|
|
1370
|
+
const data2 = [];
|
|
1371
|
+
for (let i = 0; i < pageSize3; i++) {
|
|
1372
|
+
data2.push(dataCaching.current[i + skip] || emptyItem3);
|
|
1373
|
+
}
|
|
1374
|
+
return data2;
|
|
1375
|
+
}, []);
|
|
1376
|
+
const pageChange = (0, import_react27.useCallback)(
|
|
1377
|
+
(event) => {
|
|
1378
|
+
if (filter !== void 0) {
|
|
1379
|
+
const newSkip = event.page.skip;
|
|
1380
|
+
if (shouldRequestData(newSkip)) {
|
|
1381
|
+
requestData({ skip: newSkip, filter });
|
|
1382
|
+
}
|
|
1383
|
+
const data2 = getCachedData(newSkip);
|
|
1384
|
+
setData(data2);
|
|
1385
|
+
skipRef.current = newSkip;
|
|
1386
|
+
}
|
|
1387
|
+
},
|
|
1388
|
+
[getCachedData, requestData, shouldRequestData, filter]
|
|
1389
|
+
);
|
|
1390
|
+
const handleChange = (0, import_react27.useCallback)((event) => {
|
|
1391
|
+
const value2 = event.target.value;
|
|
1392
|
+
if (value2 && value2[textField3] === emptyItem3[textField3]) {
|
|
1393
|
+
return;
|
|
1394
|
+
}
|
|
1395
|
+
if (valueProp !== void 0) {
|
|
1396
|
+
onChange(value2);
|
|
1397
|
+
} else {
|
|
1398
|
+
setValue(value2);
|
|
1399
|
+
}
|
|
1400
|
+
}, []);
|
|
1401
|
+
const handleItemRender = (li, itemProps) => {
|
|
1402
|
+
const itemChildren = renderItem == null ? void 0 : renderItem(itemProps.dataItem);
|
|
1403
|
+
if (!itemChildren)
|
|
1404
|
+
return (0, import_react27.cloneElement)(li, li.props);
|
|
1405
|
+
return (0, import_react27.cloneElement)(li, li.props, itemChildren);
|
|
1406
|
+
};
|
|
1407
|
+
(0, import_react27.useEffect)(() => {
|
|
1408
|
+
const pageSize4 = 10;
|
|
1409
|
+
const loadingData4 = [];
|
|
1410
|
+
while (loadingData4.length < pageSize4) {
|
|
1411
|
+
loadingData4.push(emptyItem3);
|
|
1412
|
+
}
|
|
1413
|
+
setLoadingData(loadingData4);
|
|
1414
|
+
}, []);
|
|
1415
|
+
(0, import_react27.useEffect)(() => {
|
|
1416
|
+
if (valueProp !== void 0) {
|
|
1417
|
+
setValue(valueProp);
|
|
1418
|
+
}
|
|
1419
|
+
}, [valueProp]);
|
|
1420
|
+
(0, import_react27.useEffect)(() => {
|
|
1421
|
+
if (filterProp !== void 0) {
|
|
1422
|
+
setFilter(filterProp);
|
|
1423
|
+
}
|
|
1424
|
+
}, [filterProp]);
|
|
1425
|
+
(0, import_react27.useEffect)(() => {
|
|
1426
|
+
requestData({ skip: 0, filter });
|
|
1427
|
+
return () => {
|
|
1428
|
+
resetCach();
|
|
1429
|
+
};
|
|
1430
|
+
}, [filter, requestData]);
|
|
1431
|
+
(0, import_react27.useEffect)(() => {
|
|
1432
|
+
setData(dataProp.items);
|
|
1433
|
+
}, [dataProp]);
|
|
1434
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1435
|
+
import_kendo_react_dropdowns2.ComboBox,
|
|
1436
|
+
{
|
|
1437
|
+
data,
|
|
1438
|
+
value,
|
|
1439
|
+
placeholder,
|
|
1440
|
+
dataItemKey: keyField2,
|
|
1441
|
+
textField: textField3,
|
|
1442
|
+
filterable,
|
|
1443
|
+
onFilterChange: handleFilterChange,
|
|
1444
|
+
virtual: {
|
|
1445
|
+
pageSize: pageSize3,
|
|
1446
|
+
skip: skipRef.current,
|
|
1447
|
+
total
|
|
1448
|
+
},
|
|
1449
|
+
disabled,
|
|
1450
|
+
loading,
|
|
1451
|
+
className,
|
|
1452
|
+
onChange: handleChange,
|
|
1453
|
+
onPageChange: pageChange,
|
|
1454
|
+
itemRender: handleItemRender
|
|
1455
|
+
}
|
|
1456
|
+
);
|
|
1457
|
+
};
|
|
1458
|
+
var SelectServer_default = SelectServer;
|
|
1459
|
+
|
|
1460
|
+
// src/components/Select/Select.tsx
|
|
1461
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
1462
|
+
var Select = (props) => {
|
|
1463
|
+
return props.filterMode === "client" ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SelectClient_default, __spreadValues({}, props)) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SelectServer_default, __spreadValues({}, props));
|
|
1464
|
+
};
|
|
1465
|
+
var Select_default = Select;
|
|
1466
|
+
|
|
1467
|
+
// src/components/MultiSelect/MultiSelectClient.tsx
|
|
1468
|
+
var import_kendo_data_query2 = require("@progress/kendo-data-query");
|
|
1469
|
+
var import_kendo_react_dropdowns3 = require("@progress/kendo-react-dropdowns");
|
|
1179
1470
|
var import_react28 = require("react");
|
|
1471
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
1472
|
+
var textField2 = "text";
|
|
1473
|
+
var keyField = "key";
|
|
1474
|
+
var emptyItem2 = { [textField2]: "loading ...", [keyField]: 0 };
|
|
1475
|
+
var pageSize2 = 10;
|
|
1476
|
+
var loadingData2 = [];
|
|
1477
|
+
while (loadingData2.length < pageSize2) {
|
|
1478
|
+
loadingData2.push(__spreadValues({}, emptyItem2));
|
|
1479
|
+
}
|
|
1480
|
+
var SelectClient2 = ({
|
|
1481
|
+
data: dataProp,
|
|
1482
|
+
value: valueProp,
|
|
1483
|
+
keyField: keyField2 = "key",
|
|
1484
|
+
textField: textField3 = "text",
|
|
1485
|
+
placeholder,
|
|
1486
|
+
virtual,
|
|
1487
|
+
filterable,
|
|
1488
|
+
filter: filterProp,
|
|
1489
|
+
disabled,
|
|
1490
|
+
loading,
|
|
1491
|
+
className,
|
|
1492
|
+
onChange,
|
|
1493
|
+
onFilterChange
|
|
1494
|
+
}) => {
|
|
1495
|
+
const [value, setValue] = (0, import_react28.useState)(valueProp);
|
|
1496
|
+
const [filter, setFilter] = (0, import_react28.useState)(filterProp);
|
|
1497
|
+
const handleChange = (event) => {
|
|
1498
|
+
onChange(event.target.value);
|
|
1499
|
+
};
|
|
1500
|
+
const pageSize3 = virtual == null ? void 0 : virtual.pageSize;
|
|
1501
|
+
const filteredData = (0, import_react28.useRef)([]);
|
|
1502
|
+
const [state, setState] = (0, import_react28.useState)({
|
|
1503
|
+
skip: 0,
|
|
1504
|
+
total: dataProp.total,
|
|
1505
|
+
subsetData: dataProp.items.slice(0, pageSize3)
|
|
1506
|
+
});
|
|
1507
|
+
const handleFilterChange = (event) => {
|
|
1508
|
+
if (pageSize3) {
|
|
1509
|
+
filteredData.current = (0, import_kendo_data_query2.filterBy)(dataProp.items.slice(), event.filter);
|
|
1510
|
+
const data = filteredData.current.slice(0, pageSize3);
|
|
1511
|
+
setState({
|
|
1512
|
+
subsetData: data,
|
|
1513
|
+
skip: 0,
|
|
1514
|
+
total: filteredData.current.length
|
|
1515
|
+
});
|
|
1516
|
+
}
|
|
1517
|
+
onFilterChange == null ? void 0 : onFilterChange(event.filter.value);
|
|
1518
|
+
};
|
|
1519
|
+
const pageChange = (event) => {
|
|
1520
|
+
if (pageSize3) {
|
|
1521
|
+
const skip = event.page.skip;
|
|
1522
|
+
const take = event.page.take;
|
|
1523
|
+
const newSubsetData = filteredData.current.slice(skip, skip + take);
|
|
1524
|
+
setState(__spreadProps(__spreadValues({}, state), { subsetData: newSubsetData, skip }));
|
|
1525
|
+
}
|
|
1526
|
+
};
|
|
1527
|
+
(0, import_react28.useEffect)(() => {
|
|
1528
|
+
setValue(valueProp);
|
|
1529
|
+
}, [valueProp]);
|
|
1530
|
+
(0, import_react28.useEffect)(() => {
|
|
1531
|
+
setFilter(filterProp);
|
|
1532
|
+
}, [filterProp]);
|
|
1533
|
+
(0, import_react28.useEffect)(() => {
|
|
1534
|
+
if (pageSize3) {
|
|
1535
|
+
filteredData.current = dataProp.items.slice();
|
|
1536
|
+
}
|
|
1537
|
+
}, [dataProp]);
|
|
1538
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
1539
|
+
import_kendo_react_dropdowns3.MultiSelect,
|
|
1540
|
+
{
|
|
1541
|
+
value,
|
|
1542
|
+
data: pageSize3 ? state.subsetData : dataProp.items,
|
|
1543
|
+
placeholder,
|
|
1544
|
+
dataItemKey: keyField2,
|
|
1545
|
+
textField: textField3,
|
|
1546
|
+
filterable,
|
|
1547
|
+
filter,
|
|
1548
|
+
virtual: pageSize3 ? {
|
|
1549
|
+
total: state.total,
|
|
1550
|
+
pageSize: pageSize3,
|
|
1551
|
+
skip: state.skip
|
|
1552
|
+
} : void 0,
|
|
1553
|
+
disabled,
|
|
1554
|
+
loading,
|
|
1555
|
+
className,
|
|
1556
|
+
onChange: handleChange,
|
|
1557
|
+
onFilterChange: handleFilterChange,
|
|
1558
|
+
onPageChange: pageChange
|
|
1559
|
+
}
|
|
1560
|
+
);
|
|
1561
|
+
};
|
|
1562
|
+
var MultiSelectClient_default = SelectClient2;
|
|
1563
|
+
|
|
1564
|
+
// src/components/MultiSelect/MultiSelectServer.tsx
|
|
1565
|
+
var import_kendo_react_dropdowns4 = require("@progress/kendo-react-dropdowns");
|
|
1566
|
+
var import_react29 = require("react");
|
|
1567
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
1568
|
+
var MultiSelectServer = ({
|
|
1569
|
+
data: dataProp,
|
|
1570
|
+
value: valueProp,
|
|
1571
|
+
keyField: keyField2 = "key",
|
|
1572
|
+
textField: textField3 = "text",
|
|
1573
|
+
placeholder,
|
|
1574
|
+
virtual,
|
|
1575
|
+
filterable,
|
|
1576
|
+
filter: filterProp = "",
|
|
1577
|
+
disabled,
|
|
1578
|
+
loading,
|
|
1579
|
+
className,
|
|
1580
|
+
onDataChange,
|
|
1581
|
+
onChange,
|
|
1582
|
+
onFilterChange,
|
|
1583
|
+
getData
|
|
1584
|
+
}) => {
|
|
1585
|
+
var _a;
|
|
1586
|
+
const dataCaching = (0, import_react29.useRef)([]);
|
|
1587
|
+
const pendingRequest = (0, import_react29.useRef)();
|
|
1588
|
+
const requestStarted = (0, import_react29.useRef)(false);
|
|
1589
|
+
const emptyItem3 = { [keyField2]: 0, [textField3]: "loading ..." };
|
|
1590
|
+
const [loadingData3, setLoadingData] = (0, import_react29.useState)([]);
|
|
1591
|
+
const [data, setData] = (0, import_react29.useState)(dataProp.items);
|
|
1592
|
+
const [total, setTotal] = (0, import_react29.useState)(0);
|
|
1593
|
+
const [value, setValue] = (0, import_react29.useState)(valueProp);
|
|
1594
|
+
const [filter, setFilter] = (0, import_react29.useState)(filterProp);
|
|
1595
|
+
const pageSize3 = (_a = virtual == null ? void 0 : virtual.pageSize) != null ? _a : 10;
|
|
1596
|
+
const skipRef = (0, import_react29.useRef)(0);
|
|
1597
|
+
const resetCach = () => {
|
|
1598
|
+
dataCaching.current.length = 0;
|
|
1599
|
+
};
|
|
1600
|
+
const requestData = (0, import_react29.useCallback)((state) => {
|
|
1601
|
+
if (requestStarted.current) {
|
|
1602
|
+
clearTimeout(pendingRequest.current);
|
|
1603
|
+
pendingRequest.current = setTimeout(() => {
|
|
1604
|
+
requestData(state);
|
|
1605
|
+
}, 50);
|
|
1606
|
+
return;
|
|
1607
|
+
}
|
|
1608
|
+
requestStarted.current = true;
|
|
1609
|
+
getData(state).then(({ items, total: total2 }) => {
|
|
1610
|
+
const { skip } = state;
|
|
1611
|
+
items.forEach((item, index) => {
|
|
1612
|
+
dataCaching.current[index + skip] = item;
|
|
1613
|
+
});
|
|
1614
|
+
if (skip === skipRef.current) {
|
|
1615
|
+
setData(items);
|
|
1616
|
+
setTotal(total2);
|
|
1617
|
+
onDataChange == null ? void 0 : onDataChange({ items, total: total2 });
|
|
1618
|
+
}
|
|
1619
|
+
requestStarted.current = false;
|
|
1620
|
+
}).catch(() => {
|
|
1621
|
+
requestStarted.current = false;
|
|
1622
|
+
});
|
|
1623
|
+
}, []);
|
|
1624
|
+
const handleFilterChange = (0, import_react29.useCallback)((event) => {
|
|
1625
|
+
const filter2 = event.filter.value;
|
|
1626
|
+
resetCach();
|
|
1627
|
+
requestData({ skip: 0, filter: filter2 });
|
|
1628
|
+
setData(loadingData3);
|
|
1629
|
+
skipRef.current = 0;
|
|
1630
|
+
setFilter(filter2);
|
|
1631
|
+
onFilterChange == null ? void 0 : onFilterChange(filter2);
|
|
1632
|
+
}, []);
|
|
1633
|
+
const shouldRequestData = (0, import_react29.useCallback)((skip) => {
|
|
1634
|
+
for (let i = 0; i < pageSize3; i++) {
|
|
1635
|
+
if (!dataCaching.current[skip + i]) {
|
|
1636
|
+
return true;
|
|
1637
|
+
}
|
|
1638
|
+
}
|
|
1639
|
+
return false;
|
|
1640
|
+
}, []);
|
|
1641
|
+
const getCachedData = (0, import_react29.useCallback)((skip) => {
|
|
1642
|
+
const data2 = [];
|
|
1643
|
+
for (let i = 0; i < pageSize3; i++) {
|
|
1644
|
+
data2.push(dataCaching.current[i + skip] || emptyItem3);
|
|
1645
|
+
}
|
|
1646
|
+
return data2;
|
|
1647
|
+
}, []);
|
|
1648
|
+
const pageChange = (0, import_react29.useCallback)(
|
|
1649
|
+
(event) => {
|
|
1650
|
+
const newSkip = event.page.skip;
|
|
1651
|
+
if (shouldRequestData(newSkip)) {
|
|
1652
|
+
requestData({ skip: newSkip, filter });
|
|
1653
|
+
}
|
|
1654
|
+
const data2 = getCachedData(newSkip);
|
|
1655
|
+
setData(data2);
|
|
1656
|
+
skipRef.current = newSkip;
|
|
1657
|
+
},
|
|
1658
|
+
[getCachedData, requestData, shouldRequestData, filter]
|
|
1659
|
+
);
|
|
1660
|
+
const handleChange = (0, import_react29.useCallback)((event) => {
|
|
1661
|
+
const value2 = event.target.value;
|
|
1662
|
+
if (value2 && value2[textField3] === emptyItem3[textField3]) {
|
|
1663
|
+
return;
|
|
1664
|
+
}
|
|
1665
|
+
setValue(value2);
|
|
1666
|
+
onChange(value2);
|
|
1667
|
+
}, []);
|
|
1668
|
+
(0, import_react29.useEffect)(() => {
|
|
1669
|
+
const pageSize4 = 10;
|
|
1670
|
+
const loadingData4 = [];
|
|
1671
|
+
while (loadingData4.length < pageSize4) {
|
|
1672
|
+
loadingData4.push(emptyItem3);
|
|
1673
|
+
}
|
|
1674
|
+
setLoadingData(loadingData4);
|
|
1675
|
+
}, []);
|
|
1676
|
+
(0, import_react29.useEffect)(() => {
|
|
1677
|
+
setData(dataProp.items);
|
|
1678
|
+
}, [dataProp]);
|
|
1679
|
+
(0, import_react29.useEffect)(() => {
|
|
1680
|
+
setValue(valueProp);
|
|
1681
|
+
}, [valueProp]);
|
|
1682
|
+
(0, import_react29.useEffect)(() => {
|
|
1683
|
+
setFilter(filterProp);
|
|
1684
|
+
}, [filterProp]);
|
|
1685
|
+
(0, import_react29.useEffect)(() => {
|
|
1686
|
+
requestData({ skip: 0, filter });
|
|
1687
|
+
return () => {
|
|
1688
|
+
resetCach();
|
|
1689
|
+
};
|
|
1690
|
+
}, [filter, requestData]);
|
|
1691
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
1692
|
+
import_kendo_react_dropdowns4.MultiSelect,
|
|
1693
|
+
{
|
|
1694
|
+
data,
|
|
1695
|
+
value,
|
|
1696
|
+
placeholder,
|
|
1697
|
+
dataItemKey: keyField2,
|
|
1698
|
+
textField: textField3,
|
|
1699
|
+
filterable,
|
|
1700
|
+
onFilterChange: handleFilterChange,
|
|
1701
|
+
virtual: {
|
|
1702
|
+
pageSize: pageSize3,
|
|
1703
|
+
skip: skipRef.current,
|
|
1704
|
+
total
|
|
1705
|
+
},
|
|
1706
|
+
disabled,
|
|
1707
|
+
loading,
|
|
1708
|
+
className,
|
|
1709
|
+
onChange: handleChange,
|
|
1710
|
+
onPageChange: pageChange
|
|
1711
|
+
}
|
|
1712
|
+
);
|
|
1713
|
+
};
|
|
1714
|
+
var MultiSelectServer_default = MultiSelectServer;
|
|
1715
|
+
|
|
1716
|
+
// src/components/MultiSelect/MultiSelect.tsx
|
|
1717
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
1718
|
+
var MultiSelect3 = (props) => {
|
|
1719
|
+
return props.filterMode === "client" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(MultiSelectClient_default, __spreadValues({}, props)) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(MultiSelectServer_default, __spreadValues({}, props));
|
|
1720
|
+
};
|
|
1721
|
+
var MultiSelect_default = MultiSelect3;
|
|
1722
|
+
|
|
1723
|
+
// src/hooks/useLocalStorage.tsx
|
|
1724
|
+
var import_react32 = require("react");
|
|
1180
1725
|
|
|
1181
1726
|
// src/hooks/useEventListener.tsx
|
|
1182
|
-
var
|
|
1727
|
+
var import_react31 = require("react");
|
|
1183
1728
|
|
|
1184
1729
|
// src/hooks/useIsomorphicLayoutEffect.tsx
|
|
1185
|
-
var
|
|
1186
|
-
var useIsomorphicLayoutEffect = typeof window !== "undefined" ?
|
|
1730
|
+
var import_react30 = require("react");
|
|
1731
|
+
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? import_react30.useLayoutEffect : import_react30.useEffect;
|
|
1187
1732
|
var useIsomorphicLayoutEffect_default = useIsomorphicLayoutEffect;
|
|
1188
1733
|
|
|
1189
1734
|
// src/hooks/useEventListener.tsx
|
|
1190
1735
|
function useEventListener(handler) {
|
|
1191
|
-
const savedHandler = (0,
|
|
1736
|
+
const savedHandler = (0, import_react31.useRef)(handler);
|
|
1192
1737
|
useIsomorphicLayoutEffect_default(() => {
|
|
1193
1738
|
savedHandler.current = handler;
|
|
1194
1739
|
}, [handler]);
|
|
@@ -1197,7 +1742,7 @@ var useEventListener_default = useEventListener;
|
|
|
1197
1742
|
|
|
1198
1743
|
// src/hooks/useLocalStorage.tsx
|
|
1199
1744
|
function useLocalStorage(key, initialValue) {
|
|
1200
|
-
const readValue = (0,
|
|
1745
|
+
const readValue = (0, import_react32.useCallback)(() => {
|
|
1201
1746
|
if (typeof window === "undefined") {
|
|
1202
1747
|
return initialValue;
|
|
1203
1748
|
}
|
|
@@ -1209,8 +1754,8 @@ function useLocalStorage(key, initialValue) {
|
|
|
1209
1754
|
return initialValue;
|
|
1210
1755
|
}
|
|
1211
1756
|
}, [initialValue, key]);
|
|
1212
|
-
const [storedValue, setStoredValue] = (0,
|
|
1213
|
-
const setValue = (0,
|
|
1757
|
+
const [storedValue, setStoredValue] = (0, import_react32.useState)(readValue);
|
|
1758
|
+
const setValue = (0, import_react32.useCallback)(
|
|
1214
1759
|
(value) => {
|
|
1215
1760
|
if (typeof window == "undefined") {
|
|
1216
1761
|
console.warn(`Tried setting localStorage key \u201C${key}\u201D even though environment is not a client`);
|
|
@@ -1226,10 +1771,10 @@ function useLocalStorage(key, initialValue) {
|
|
|
1226
1771
|
},
|
|
1227
1772
|
[key, storedValue]
|
|
1228
1773
|
);
|
|
1229
|
-
(0,
|
|
1774
|
+
(0, import_react32.useEffect)(() => {
|
|
1230
1775
|
setStoredValue(readValue());
|
|
1231
1776
|
}, []);
|
|
1232
|
-
const handleStorageChange = (0,
|
|
1777
|
+
const handleStorageChange = (0, import_react32.useCallback)(() => {
|
|
1233
1778
|
setStoredValue(readValue());
|
|
1234
1779
|
}, [readValue]);
|
|
1235
1780
|
useEventListener_default("storage", handleStorageChange);
|
|
@@ -1240,28 +1785,27 @@ function parseJSON(value) {
|
|
|
1240
1785
|
try {
|
|
1241
1786
|
return value === "undefined" ? void 0 : JSON.parse(value != null ? value : "");
|
|
1242
1787
|
} catch (e) {
|
|
1243
|
-
console.log("parsing error on", { value });
|
|
1244
1788
|
return void 0;
|
|
1245
1789
|
}
|
|
1246
1790
|
}
|
|
1247
1791
|
|
|
1248
1792
|
// src/hooks/usePrevious.tsx
|
|
1249
|
-
var
|
|
1793
|
+
var import_react33 = require("react");
|
|
1250
1794
|
var usePrevious = (value) => {
|
|
1251
|
-
const ref = (0,
|
|
1252
|
-
(0,
|
|
1795
|
+
const ref = (0, import_react33.useRef)();
|
|
1796
|
+
(0, import_react33.useEffect)(() => {
|
|
1253
1797
|
ref.current = value;
|
|
1254
1798
|
});
|
|
1255
1799
|
return ref.current;
|
|
1256
1800
|
};
|
|
1257
1801
|
|
|
1258
1802
|
// src/hooks/useStep.tsx
|
|
1259
|
-
var
|
|
1803
|
+
var import_react34 = require("react");
|
|
1260
1804
|
var useStep = (maxStep) => {
|
|
1261
|
-
const [currentStep, setCurrentStep] = (0,
|
|
1262
|
-
const canGoToNextStep = (0,
|
|
1263
|
-
const canGoToPrevStep = (0,
|
|
1264
|
-
const setStep = (0,
|
|
1805
|
+
const [currentStep, setCurrentStep] = (0, import_react34.useState)(1);
|
|
1806
|
+
const canGoToNextStep = (0, import_react34.useMemo)(() => currentStep + 1 <= maxStep, [currentStep, maxStep]);
|
|
1807
|
+
const canGoToPrevStep = (0, import_react34.useMemo)(() => currentStep - 1 >= 1, [currentStep]);
|
|
1808
|
+
const setStep = (0, import_react34.useCallback)(
|
|
1265
1809
|
(step) => {
|
|
1266
1810
|
const newStep = step instanceof Function ? step(currentStep) : step;
|
|
1267
1811
|
if (newStep >= 1 && newStep <= maxStep) {
|
|
@@ -1272,17 +1816,17 @@ var useStep = (maxStep) => {
|
|
|
1272
1816
|
},
|
|
1273
1817
|
[maxStep, currentStep]
|
|
1274
1818
|
);
|
|
1275
|
-
const goToNextStep = (0,
|
|
1819
|
+
const goToNextStep = (0, import_react34.useCallback)(() => {
|
|
1276
1820
|
if (canGoToNextStep) {
|
|
1277
1821
|
setCurrentStep((step) => step + 1);
|
|
1278
1822
|
}
|
|
1279
1823
|
}, [canGoToNextStep]);
|
|
1280
|
-
const goToPrevStep = (0,
|
|
1824
|
+
const goToPrevStep = (0, import_react34.useCallback)(() => {
|
|
1281
1825
|
if (canGoToPrevStep) {
|
|
1282
1826
|
setCurrentStep((step) => step - 1);
|
|
1283
1827
|
}
|
|
1284
1828
|
}, [canGoToPrevStep]);
|
|
1285
|
-
const reset = (0,
|
|
1829
|
+
const reset = (0, import_react34.useCallback)(() => {
|
|
1286
1830
|
setCurrentStep(1);
|
|
1287
1831
|
}, []);
|
|
1288
1832
|
return [
|
|
@@ -1315,7 +1859,9 @@ var useStep = (maxStep) => {
|
|
|
1315
1859
|
MenuItem,
|
|
1316
1860
|
MenuSubmenu,
|
|
1317
1861
|
MenuValueContext,
|
|
1862
|
+
MultiSelect,
|
|
1318
1863
|
Portal,
|
|
1864
|
+
Select,
|
|
1319
1865
|
Tab,
|
|
1320
1866
|
Tabs,
|
|
1321
1867
|
Toolbar,
|