@unifiedsoftware/react-ui 1.0.14 → 1.0.15
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 +3 -1
package/dist/index.mjs
CHANGED
|
@@ -1115,20 +1115,571 @@ var Toolbar = (props) => {
|
|
|
1115
1115
|
};
|
|
1116
1116
|
var Toolbar_default = Toolbar;
|
|
1117
1117
|
|
|
1118
|
+
// src/components/Select/SelectClient.tsx
|
|
1119
|
+
import { filterBy } from "@progress/kendo-data-query";
|
|
1120
|
+
import {
|
|
1121
|
+
ComboBox
|
|
1122
|
+
} from "@progress/kendo-react-dropdowns";
|
|
1123
|
+
import { useEffect as useEffect6, useRef as useRef7, useState as useState4 } from "react";
|
|
1124
|
+
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
1125
|
+
var SelectClient = ({
|
|
1126
|
+
value: valueProp,
|
|
1127
|
+
data: propData,
|
|
1128
|
+
filter: filterProp,
|
|
1129
|
+
keyField: keyField2 = "key",
|
|
1130
|
+
textField: textField3 = "text",
|
|
1131
|
+
placeholder,
|
|
1132
|
+
virtual,
|
|
1133
|
+
filterable,
|
|
1134
|
+
disabled,
|
|
1135
|
+
loading,
|
|
1136
|
+
className,
|
|
1137
|
+
onChange,
|
|
1138
|
+
onFilterChange
|
|
1139
|
+
}) => {
|
|
1140
|
+
const [value, setValue] = useState4(valueProp);
|
|
1141
|
+
const [filter, setFilter] = useState4(filterProp);
|
|
1142
|
+
const handleChange = (event) => {
|
|
1143
|
+
const value2 = event.target.value || null;
|
|
1144
|
+
if (valueProp !== void 0) {
|
|
1145
|
+
onChange(value2);
|
|
1146
|
+
} else {
|
|
1147
|
+
setValue(value2);
|
|
1148
|
+
}
|
|
1149
|
+
};
|
|
1150
|
+
const pageSize3 = virtual == null ? void 0 : virtual.pageSize;
|
|
1151
|
+
const filteredData = useRef7([]);
|
|
1152
|
+
const [state, setState] = useState4({
|
|
1153
|
+
skip: 0,
|
|
1154
|
+
total: propData.total,
|
|
1155
|
+
subsetData: propData.items.slice(0, pageSize3)
|
|
1156
|
+
});
|
|
1157
|
+
const handleFilterChange = (event) => {
|
|
1158
|
+
if (pageSize3) {
|
|
1159
|
+
filteredData.current = filterBy(propData.items.slice(), event.filter);
|
|
1160
|
+
const data = filteredData.current.slice(0, pageSize3);
|
|
1161
|
+
setState({
|
|
1162
|
+
subsetData: data,
|
|
1163
|
+
skip: 0,
|
|
1164
|
+
total: filteredData.current.length
|
|
1165
|
+
});
|
|
1166
|
+
}
|
|
1167
|
+
const filter2 = event.filter.value;
|
|
1168
|
+
if (filterProp !== void 0) {
|
|
1169
|
+
onFilterChange == null ? void 0 : onFilterChange(filter2);
|
|
1170
|
+
} else {
|
|
1171
|
+
setFilter(filter2);
|
|
1172
|
+
}
|
|
1173
|
+
};
|
|
1174
|
+
const handlePageChange = (event) => {
|
|
1175
|
+
if (pageSize3) {
|
|
1176
|
+
const skip = event.page.skip;
|
|
1177
|
+
const take = event.page.take;
|
|
1178
|
+
const newSubsetData = filteredData.current.slice(skip, skip + take);
|
|
1179
|
+
setState(__spreadProps(__spreadValues({}, state), { subsetData: newSubsetData, skip }));
|
|
1180
|
+
}
|
|
1181
|
+
};
|
|
1182
|
+
useEffect6(() => {
|
|
1183
|
+
if (valueProp !== void 0) {
|
|
1184
|
+
setValue(valueProp);
|
|
1185
|
+
}
|
|
1186
|
+
}, [valueProp]);
|
|
1187
|
+
useEffect6(() => {
|
|
1188
|
+
setFilter(filterProp);
|
|
1189
|
+
}, [filterProp]);
|
|
1190
|
+
useEffect6(() => {
|
|
1191
|
+
if (pageSize3) {
|
|
1192
|
+
filteredData.current = propData.items.slice();
|
|
1193
|
+
}
|
|
1194
|
+
}, [propData]);
|
|
1195
|
+
return /* @__PURE__ */ jsx18(
|
|
1196
|
+
ComboBox,
|
|
1197
|
+
{
|
|
1198
|
+
value,
|
|
1199
|
+
data: pageSize3 ? state.subsetData : propData.items,
|
|
1200
|
+
placeholder,
|
|
1201
|
+
dataItemKey: keyField2,
|
|
1202
|
+
textField: textField3,
|
|
1203
|
+
filterable,
|
|
1204
|
+
filter,
|
|
1205
|
+
virtual: pageSize3 ? {
|
|
1206
|
+
total: state.total,
|
|
1207
|
+
pageSize: pageSize3,
|
|
1208
|
+
skip: state.skip
|
|
1209
|
+
} : void 0,
|
|
1210
|
+
disabled,
|
|
1211
|
+
loading,
|
|
1212
|
+
className,
|
|
1213
|
+
onChange: handleChange,
|
|
1214
|
+
onFilterChange: handleFilterChange,
|
|
1215
|
+
onPageChange: handlePageChange
|
|
1216
|
+
}
|
|
1217
|
+
);
|
|
1218
|
+
};
|
|
1219
|
+
var SelectClient_default = SelectClient;
|
|
1220
|
+
|
|
1221
|
+
// src/components/Select/SelectServer.tsx
|
|
1222
|
+
import {
|
|
1223
|
+
ComboBox as ComboBox2
|
|
1224
|
+
} from "@progress/kendo-react-dropdowns";
|
|
1225
|
+
import { cloneElement as cloneElement4, useCallback, useEffect as useEffect7, useRef as useRef8, useState as useState5 } from "react";
|
|
1226
|
+
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
1227
|
+
var textField = "ContactName";
|
|
1228
|
+
var emptyItem = { [textField]: "loading ...", CustomerID: 0 };
|
|
1229
|
+
var pageSize = 10;
|
|
1230
|
+
var loadingData = [];
|
|
1231
|
+
while (loadingData.length < pageSize) {
|
|
1232
|
+
loadingData.push(__spreadValues({}, emptyItem));
|
|
1233
|
+
}
|
|
1234
|
+
var SelectServer = ({
|
|
1235
|
+
data: dataProp,
|
|
1236
|
+
value: valueProp,
|
|
1237
|
+
keyField: keyField2 = "key",
|
|
1238
|
+
textField: textField3 = "text",
|
|
1239
|
+
placeholder,
|
|
1240
|
+
virtual,
|
|
1241
|
+
filterable,
|
|
1242
|
+
filter: filterProp = "",
|
|
1243
|
+
disabled,
|
|
1244
|
+
loading,
|
|
1245
|
+
className,
|
|
1246
|
+
onChange,
|
|
1247
|
+
onDataChange,
|
|
1248
|
+
onFilterChange,
|
|
1249
|
+
getData,
|
|
1250
|
+
renderItem
|
|
1251
|
+
}) => {
|
|
1252
|
+
var _a;
|
|
1253
|
+
const dataCaching = useRef8([]);
|
|
1254
|
+
const pendingRequest = useRef8();
|
|
1255
|
+
const requestStarted = useRef8(false);
|
|
1256
|
+
const emptyItem3 = { [keyField2]: 0, [textField3]: "loading ..." };
|
|
1257
|
+
const [loadingData3, setLoadingData] = useState5([]);
|
|
1258
|
+
const [data, setData] = useState5(dataProp.items);
|
|
1259
|
+
const [total, setTotal] = useState5(0);
|
|
1260
|
+
const [value, setValue] = useState5(valueProp);
|
|
1261
|
+
const [filter, setFilter] = useState5(filterProp);
|
|
1262
|
+
const pageSize3 = (_a = virtual == null ? void 0 : virtual.pageSize) != null ? _a : 10;
|
|
1263
|
+
const skipRef = useRef8(0);
|
|
1264
|
+
const resetCach = () => {
|
|
1265
|
+
dataCaching.current.length = 0;
|
|
1266
|
+
};
|
|
1267
|
+
const requestData = useCallback((state) => {
|
|
1268
|
+
const { skip } = state;
|
|
1269
|
+
if (requestStarted.current) {
|
|
1270
|
+
clearTimeout(pendingRequest.current);
|
|
1271
|
+
pendingRequest.current = setTimeout(() => {
|
|
1272
|
+
requestData(state);
|
|
1273
|
+
}, 50);
|
|
1274
|
+
return;
|
|
1275
|
+
}
|
|
1276
|
+
requestStarted.current = true;
|
|
1277
|
+
getData(state).then(({ items, total: total2 }) => {
|
|
1278
|
+
items.forEach((item, index) => {
|
|
1279
|
+
dataCaching.current[index + skip] = item;
|
|
1280
|
+
});
|
|
1281
|
+
if (skip === skipRef.current) {
|
|
1282
|
+
setData(items);
|
|
1283
|
+
setTotal(total2);
|
|
1284
|
+
onDataChange == null ? void 0 : onDataChange({ items, total: total2 });
|
|
1285
|
+
}
|
|
1286
|
+
requestStarted.current = false;
|
|
1287
|
+
}).catch(() => {
|
|
1288
|
+
requestStarted.current = false;
|
|
1289
|
+
});
|
|
1290
|
+
}, []);
|
|
1291
|
+
const handleFilterChange = useCallback((event) => {
|
|
1292
|
+
const filter2 = event.filter.value;
|
|
1293
|
+
if (filterProp !== void 0) {
|
|
1294
|
+
onFilterChange == null ? void 0 : onFilterChange(filter2);
|
|
1295
|
+
} else {
|
|
1296
|
+
setFilter(filter2);
|
|
1297
|
+
}
|
|
1298
|
+
resetCach();
|
|
1299
|
+
requestData({ skip: 0, filter: filter2 });
|
|
1300
|
+
setData(loadingData3);
|
|
1301
|
+
skipRef.current = 0;
|
|
1302
|
+
}, []);
|
|
1303
|
+
const shouldRequestData = useCallback((skip) => {
|
|
1304
|
+
for (let i = 0; i < pageSize3; i++) {
|
|
1305
|
+
if (!dataCaching.current[skip + i]) {
|
|
1306
|
+
return true;
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
return false;
|
|
1310
|
+
}, []);
|
|
1311
|
+
const getCachedData = useCallback((skip) => {
|
|
1312
|
+
const data2 = [];
|
|
1313
|
+
for (let i = 0; i < pageSize3; i++) {
|
|
1314
|
+
data2.push(dataCaching.current[i + skip] || emptyItem3);
|
|
1315
|
+
}
|
|
1316
|
+
return data2;
|
|
1317
|
+
}, []);
|
|
1318
|
+
const pageChange = useCallback(
|
|
1319
|
+
(event) => {
|
|
1320
|
+
if (filter !== void 0) {
|
|
1321
|
+
const newSkip = event.page.skip;
|
|
1322
|
+
if (shouldRequestData(newSkip)) {
|
|
1323
|
+
requestData({ skip: newSkip, filter });
|
|
1324
|
+
}
|
|
1325
|
+
const data2 = getCachedData(newSkip);
|
|
1326
|
+
setData(data2);
|
|
1327
|
+
skipRef.current = newSkip;
|
|
1328
|
+
}
|
|
1329
|
+
},
|
|
1330
|
+
[getCachedData, requestData, shouldRequestData, filter]
|
|
1331
|
+
);
|
|
1332
|
+
const handleChange = useCallback((event) => {
|
|
1333
|
+
const value2 = event.target.value;
|
|
1334
|
+
if (value2 && value2[textField3] === emptyItem3[textField3]) {
|
|
1335
|
+
return;
|
|
1336
|
+
}
|
|
1337
|
+
if (valueProp !== void 0) {
|
|
1338
|
+
onChange(value2);
|
|
1339
|
+
} else {
|
|
1340
|
+
setValue(value2);
|
|
1341
|
+
}
|
|
1342
|
+
}, []);
|
|
1343
|
+
const handleItemRender = (li, itemProps) => {
|
|
1344
|
+
const itemChildren = renderItem == null ? void 0 : renderItem(itemProps.dataItem);
|
|
1345
|
+
if (!itemChildren)
|
|
1346
|
+
return cloneElement4(li, li.props);
|
|
1347
|
+
return cloneElement4(li, li.props, itemChildren);
|
|
1348
|
+
};
|
|
1349
|
+
useEffect7(() => {
|
|
1350
|
+
const pageSize4 = 10;
|
|
1351
|
+
const loadingData4 = [];
|
|
1352
|
+
while (loadingData4.length < pageSize4) {
|
|
1353
|
+
loadingData4.push(emptyItem3);
|
|
1354
|
+
}
|
|
1355
|
+
setLoadingData(loadingData4);
|
|
1356
|
+
}, []);
|
|
1357
|
+
useEffect7(() => {
|
|
1358
|
+
if (valueProp !== void 0) {
|
|
1359
|
+
setValue(valueProp);
|
|
1360
|
+
}
|
|
1361
|
+
}, [valueProp]);
|
|
1362
|
+
useEffect7(() => {
|
|
1363
|
+
if (filterProp !== void 0) {
|
|
1364
|
+
setFilter(filterProp);
|
|
1365
|
+
}
|
|
1366
|
+
}, [filterProp]);
|
|
1367
|
+
useEffect7(() => {
|
|
1368
|
+
requestData({ skip: 0, filter });
|
|
1369
|
+
return () => {
|
|
1370
|
+
resetCach();
|
|
1371
|
+
};
|
|
1372
|
+
}, [filter, requestData]);
|
|
1373
|
+
useEffect7(() => {
|
|
1374
|
+
setData(dataProp.items);
|
|
1375
|
+
}, [dataProp]);
|
|
1376
|
+
return /* @__PURE__ */ jsx19(
|
|
1377
|
+
ComboBox2,
|
|
1378
|
+
{
|
|
1379
|
+
data,
|
|
1380
|
+
value,
|
|
1381
|
+
placeholder,
|
|
1382
|
+
dataItemKey: keyField2,
|
|
1383
|
+
textField: textField3,
|
|
1384
|
+
filterable,
|
|
1385
|
+
onFilterChange: handleFilterChange,
|
|
1386
|
+
virtual: {
|
|
1387
|
+
pageSize: pageSize3,
|
|
1388
|
+
skip: skipRef.current,
|
|
1389
|
+
total
|
|
1390
|
+
},
|
|
1391
|
+
disabled,
|
|
1392
|
+
loading,
|
|
1393
|
+
className,
|
|
1394
|
+
onChange: handleChange,
|
|
1395
|
+
onPageChange: pageChange,
|
|
1396
|
+
itemRender: handleItemRender
|
|
1397
|
+
}
|
|
1398
|
+
);
|
|
1399
|
+
};
|
|
1400
|
+
var SelectServer_default = SelectServer;
|
|
1401
|
+
|
|
1402
|
+
// src/components/Select/Select.tsx
|
|
1403
|
+
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
1404
|
+
var Select = (props) => {
|
|
1405
|
+
return props.filterMode === "client" ? /* @__PURE__ */ jsx20(SelectClient_default, __spreadValues({}, props)) : /* @__PURE__ */ jsx20(SelectServer_default, __spreadValues({}, props));
|
|
1406
|
+
};
|
|
1407
|
+
var Select_default = Select;
|
|
1408
|
+
|
|
1409
|
+
// src/components/MultiSelect/MultiSelectClient.tsx
|
|
1410
|
+
import { filterBy as filterBy2 } from "@progress/kendo-data-query";
|
|
1411
|
+
import {
|
|
1412
|
+
MultiSelect
|
|
1413
|
+
} from "@progress/kendo-react-dropdowns";
|
|
1414
|
+
import { useEffect as useEffect8, useRef as useRef9, useState as useState6 } from "react";
|
|
1415
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
1416
|
+
var textField2 = "text";
|
|
1417
|
+
var keyField = "key";
|
|
1418
|
+
var emptyItem2 = { [textField2]: "loading ...", [keyField]: 0 };
|
|
1419
|
+
var pageSize2 = 10;
|
|
1420
|
+
var loadingData2 = [];
|
|
1421
|
+
while (loadingData2.length < pageSize2) {
|
|
1422
|
+
loadingData2.push(__spreadValues({}, emptyItem2));
|
|
1423
|
+
}
|
|
1424
|
+
var SelectClient2 = ({
|
|
1425
|
+
data: dataProp,
|
|
1426
|
+
value: valueProp,
|
|
1427
|
+
keyField: keyField2 = "key",
|
|
1428
|
+
textField: textField3 = "text",
|
|
1429
|
+
placeholder,
|
|
1430
|
+
virtual,
|
|
1431
|
+
filterable,
|
|
1432
|
+
filter: filterProp,
|
|
1433
|
+
disabled,
|
|
1434
|
+
loading,
|
|
1435
|
+
className,
|
|
1436
|
+
onChange,
|
|
1437
|
+
onFilterChange
|
|
1438
|
+
}) => {
|
|
1439
|
+
const [value, setValue] = useState6(valueProp);
|
|
1440
|
+
const [filter, setFilter] = useState6(filterProp);
|
|
1441
|
+
const handleChange = (event) => {
|
|
1442
|
+
onChange(event.target.value);
|
|
1443
|
+
};
|
|
1444
|
+
const pageSize3 = virtual == null ? void 0 : virtual.pageSize;
|
|
1445
|
+
const filteredData = useRef9([]);
|
|
1446
|
+
const [state, setState] = useState6({
|
|
1447
|
+
skip: 0,
|
|
1448
|
+
total: dataProp.total,
|
|
1449
|
+
subsetData: dataProp.items.slice(0, pageSize3)
|
|
1450
|
+
});
|
|
1451
|
+
const handleFilterChange = (event) => {
|
|
1452
|
+
if (pageSize3) {
|
|
1453
|
+
filteredData.current = filterBy2(dataProp.items.slice(), event.filter);
|
|
1454
|
+
const data = filteredData.current.slice(0, pageSize3);
|
|
1455
|
+
setState({
|
|
1456
|
+
subsetData: data,
|
|
1457
|
+
skip: 0,
|
|
1458
|
+
total: filteredData.current.length
|
|
1459
|
+
});
|
|
1460
|
+
}
|
|
1461
|
+
onFilterChange == null ? void 0 : onFilterChange(event.filter.value);
|
|
1462
|
+
};
|
|
1463
|
+
const pageChange = (event) => {
|
|
1464
|
+
if (pageSize3) {
|
|
1465
|
+
const skip = event.page.skip;
|
|
1466
|
+
const take = event.page.take;
|
|
1467
|
+
const newSubsetData = filteredData.current.slice(skip, skip + take);
|
|
1468
|
+
setState(__spreadProps(__spreadValues({}, state), { subsetData: newSubsetData, skip }));
|
|
1469
|
+
}
|
|
1470
|
+
};
|
|
1471
|
+
useEffect8(() => {
|
|
1472
|
+
setValue(valueProp);
|
|
1473
|
+
}, [valueProp]);
|
|
1474
|
+
useEffect8(() => {
|
|
1475
|
+
setFilter(filterProp);
|
|
1476
|
+
}, [filterProp]);
|
|
1477
|
+
useEffect8(() => {
|
|
1478
|
+
if (pageSize3) {
|
|
1479
|
+
filteredData.current = dataProp.items.slice();
|
|
1480
|
+
}
|
|
1481
|
+
}, [dataProp]);
|
|
1482
|
+
return /* @__PURE__ */ jsx21(
|
|
1483
|
+
MultiSelect,
|
|
1484
|
+
{
|
|
1485
|
+
value,
|
|
1486
|
+
data: pageSize3 ? state.subsetData : dataProp.items,
|
|
1487
|
+
placeholder,
|
|
1488
|
+
dataItemKey: keyField2,
|
|
1489
|
+
textField: textField3,
|
|
1490
|
+
filterable,
|
|
1491
|
+
filter,
|
|
1492
|
+
virtual: pageSize3 ? {
|
|
1493
|
+
total: state.total,
|
|
1494
|
+
pageSize: pageSize3,
|
|
1495
|
+
skip: state.skip
|
|
1496
|
+
} : void 0,
|
|
1497
|
+
disabled,
|
|
1498
|
+
loading,
|
|
1499
|
+
className,
|
|
1500
|
+
onChange: handleChange,
|
|
1501
|
+
onFilterChange: handleFilterChange,
|
|
1502
|
+
onPageChange: pageChange
|
|
1503
|
+
}
|
|
1504
|
+
);
|
|
1505
|
+
};
|
|
1506
|
+
var MultiSelectClient_default = SelectClient2;
|
|
1507
|
+
|
|
1508
|
+
// src/components/MultiSelect/MultiSelectServer.tsx
|
|
1509
|
+
import {
|
|
1510
|
+
MultiSelect as MultiSelect2
|
|
1511
|
+
} from "@progress/kendo-react-dropdowns";
|
|
1512
|
+
import { useCallback as useCallback2, useEffect as useEffect9, useRef as useRef10, useState as useState7 } from "react";
|
|
1513
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
1514
|
+
var MultiSelectServer = ({
|
|
1515
|
+
data: dataProp,
|
|
1516
|
+
value: valueProp,
|
|
1517
|
+
keyField: keyField2 = "key",
|
|
1518
|
+
textField: textField3 = "text",
|
|
1519
|
+
placeholder,
|
|
1520
|
+
virtual,
|
|
1521
|
+
filterable,
|
|
1522
|
+
filter: filterProp = "",
|
|
1523
|
+
disabled,
|
|
1524
|
+
loading,
|
|
1525
|
+
className,
|
|
1526
|
+
onDataChange,
|
|
1527
|
+
onChange,
|
|
1528
|
+
onFilterChange,
|
|
1529
|
+
getData
|
|
1530
|
+
}) => {
|
|
1531
|
+
var _a;
|
|
1532
|
+
const dataCaching = useRef10([]);
|
|
1533
|
+
const pendingRequest = useRef10();
|
|
1534
|
+
const requestStarted = useRef10(false);
|
|
1535
|
+
const emptyItem3 = { [keyField2]: 0, [textField3]: "loading ..." };
|
|
1536
|
+
const [loadingData3, setLoadingData] = useState7([]);
|
|
1537
|
+
const [data, setData] = useState7(dataProp.items);
|
|
1538
|
+
const [total, setTotal] = useState7(0);
|
|
1539
|
+
const [value, setValue] = useState7(valueProp);
|
|
1540
|
+
const [filter, setFilter] = useState7(filterProp);
|
|
1541
|
+
const pageSize3 = (_a = virtual == null ? void 0 : virtual.pageSize) != null ? _a : 10;
|
|
1542
|
+
const skipRef = useRef10(0);
|
|
1543
|
+
const resetCach = () => {
|
|
1544
|
+
dataCaching.current.length = 0;
|
|
1545
|
+
};
|
|
1546
|
+
const requestData = useCallback2((state) => {
|
|
1547
|
+
if (requestStarted.current) {
|
|
1548
|
+
clearTimeout(pendingRequest.current);
|
|
1549
|
+
pendingRequest.current = setTimeout(() => {
|
|
1550
|
+
requestData(state);
|
|
1551
|
+
}, 50);
|
|
1552
|
+
return;
|
|
1553
|
+
}
|
|
1554
|
+
requestStarted.current = true;
|
|
1555
|
+
getData(state).then(({ items, total: total2 }) => {
|
|
1556
|
+
const { skip } = state;
|
|
1557
|
+
items.forEach((item, index) => {
|
|
1558
|
+
dataCaching.current[index + skip] = item;
|
|
1559
|
+
});
|
|
1560
|
+
if (skip === skipRef.current) {
|
|
1561
|
+
setData(items);
|
|
1562
|
+
setTotal(total2);
|
|
1563
|
+
onDataChange == null ? void 0 : onDataChange({ items, total: total2 });
|
|
1564
|
+
}
|
|
1565
|
+
requestStarted.current = false;
|
|
1566
|
+
}).catch(() => {
|
|
1567
|
+
requestStarted.current = false;
|
|
1568
|
+
});
|
|
1569
|
+
}, []);
|
|
1570
|
+
const handleFilterChange = useCallback2((event) => {
|
|
1571
|
+
const filter2 = event.filter.value;
|
|
1572
|
+
resetCach();
|
|
1573
|
+
requestData({ skip: 0, filter: filter2 });
|
|
1574
|
+
setData(loadingData3);
|
|
1575
|
+
skipRef.current = 0;
|
|
1576
|
+
setFilter(filter2);
|
|
1577
|
+
onFilterChange == null ? void 0 : onFilterChange(filter2);
|
|
1578
|
+
}, []);
|
|
1579
|
+
const shouldRequestData = useCallback2((skip) => {
|
|
1580
|
+
for (let i = 0; i < pageSize3; i++) {
|
|
1581
|
+
if (!dataCaching.current[skip + i]) {
|
|
1582
|
+
return true;
|
|
1583
|
+
}
|
|
1584
|
+
}
|
|
1585
|
+
return false;
|
|
1586
|
+
}, []);
|
|
1587
|
+
const getCachedData = useCallback2((skip) => {
|
|
1588
|
+
const data2 = [];
|
|
1589
|
+
for (let i = 0; i < pageSize3; i++) {
|
|
1590
|
+
data2.push(dataCaching.current[i + skip] || emptyItem3);
|
|
1591
|
+
}
|
|
1592
|
+
return data2;
|
|
1593
|
+
}, []);
|
|
1594
|
+
const pageChange = useCallback2(
|
|
1595
|
+
(event) => {
|
|
1596
|
+
const newSkip = event.page.skip;
|
|
1597
|
+
if (shouldRequestData(newSkip)) {
|
|
1598
|
+
requestData({ skip: newSkip, filter });
|
|
1599
|
+
}
|
|
1600
|
+
const data2 = getCachedData(newSkip);
|
|
1601
|
+
setData(data2);
|
|
1602
|
+
skipRef.current = newSkip;
|
|
1603
|
+
},
|
|
1604
|
+
[getCachedData, requestData, shouldRequestData, filter]
|
|
1605
|
+
);
|
|
1606
|
+
const handleChange = useCallback2((event) => {
|
|
1607
|
+
const value2 = event.target.value;
|
|
1608
|
+
if (value2 && value2[textField3] === emptyItem3[textField3]) {
|
|
1609
|
+
return;
|
|
1610
|
+
}
|
|
1611
|
+
setValue(value2);
|
|
1612
|
+
onChange(value2);
|
|
1613
|
+
}, []);
|
|
1614
|
+
useEffect9(() => {
|
|
1615
|
+
const pageSize4 = 10;
|
|
1616
|
+
const loadingData4 = [];
|
|
1617
|
+
while (loadingData4.length < pageSize4) {
|
|
1618
|
+
loadingData4.push(emptyItem3);
|
|
1619
|
+
}
|
|
1620
|
+
setLoadingData(loadingData4);
|
|
1621
|
+
}, []);
|
|
1622
|
+
useEffect9(() => {
|
|
1623
|
+
setData(dataProp.items);
|
|
1624
|
+
}, [dataProp]);
|
|
1625
|
+
useEffect9(() => {
|
|
1626
|
+
setValue(valueProp);
|
|
1627
|
+
}, [valueProp]);
|
|
1628
|
+
useEffect9(() => {
|
|
1629
|
+
setFilter(filterProp);
|
|
1630
|
+
}, [filterProp]);
|
|
1631
|
+
useEffect9(() => {
|
|
1632
|
+
requestData({ skip: 0, filter });
|
|
1633
|
+
return () => {
|
|
1634
|
+
resetCach();
|
|
1635
|
+
};
|
|
1636
|
+
}, [filter, requestData]);
|
|
1637
|
+
return /* @__PURE__ */ jsx22(
|
|
1638
|
+
MultiSelect2,
|
|
1639
|
+
{
|
|
1640
|
+
data,
|
|
1641
|
+
value,
|
|
1642
|
+
placeholder,
|
|
1643
|
+
dataItemKey: keyField2,
|
|
1644
|
+
textField: textField3,
|
|
1645
|
+
filterable,
|
|
1646
|
+
onFilterChange: handleFilterChange,
|
|
1647
|
+
virtual: {
|
|
1648
|
+
pageSize: pageSize3,
|
|
1649
|
+
skip: skipRef.current,
|
|
1650
|
+
total
|
|
1651
|
+
},
|
|
1652
|
+
disabled,
|
|
1653
|
+
loading,
|
|
1654
|
+
className,
|
|
1655
|
+
onChange: handleChange,
|
|
1656
|
+
onPageChange: pageChange
|
|
1657
|
+
}
|
|
1658
|
+
);
|
|
1659
|
+
};
|
|
1660
|
+
var MultiSelectServer_default = MultiSelectServer;
|
|
1661
|
+
|
|
1662
|
+
// src/components/MultiSelect/MultiSelect.tsx
|
|
1663
|
+
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
1664
|
+
var MultiSelect3 = (props) => {
|
|
1665
|
+
return props.filterMode === "client" ? /* @__PURE__ */ jsx23(MultiSelectClient_default, __spreadValues({}, props)) : /* @__PURE__ */ jsx23(MultiSelectServer_default, __spreadValues({}, props));
|
|
1666
|
+
};
|
|
1667
|
+
var MultiSelect_default = MultiSelect3;
|
|
1668
|
+
|
|
1118
1669
|
// src/hooks/useLocalStorage.tsx
|
|
1119
|
-
import { useCallback, useEffect as
|
|
1670
|
+
import { useCallback as useCallback3, useEffect as useEffect11, useState as useState8 } from "react";
|
|
1120
1671
|
|
|
1121
1672
|
// src/hooks/useEventListener.tsx
|
|
1122
|
-
import { useRef as
|
|
1673
|
+
import { useRef as useRef11 } from "react";
|
|
1123
1674
|
|
|
1124
1675
|
// src/hooks/useIsomorphicLayoutEffect.tsx
|
|
1125
|
-
import { useEffect as
|
|
1126
|
-
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect :
|
|
1676
|
+
import { useEffect as useEffect10, useLayoutEffect } from "react";
|
|
1677
|
+
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect10;
|
|
1127
1678
|
var useIsomorphicLayoutEffect_default = useIsomorphicLayoutEffect;
|
|
1128
1679
|
|
|
1129
1680
|
// src/hooks/useEventListener.tsx
|
|
1130
1681
|
function useEventListener(handler) {
|
|
1131
|
-
const savedHandler =
|
|
1682
|
+
const savedHandler = useRef11(handler);
|
|
1132
1683
|
useIsomorphicLayoutEffect_default(() => {
|
|
1133
1684
|
savedHandler.current = handler;
|
|
1134
1685
|
}, [handler]);
|
|
@@ -1137,7 +1688,7 @@ var useEventListener_default = useEventListener;
|
|
|
1137
1688
|
|
|
1138
1689
|
// src/hooks/useLocalStorage.tsx
|
|
1139
1690
|
function useLocalStorage(key, initialValue) {
|
|
1140
|
-
const readValue =
|
|
1691
|
+
const readValue = useCallback3(() => {
|
|
1141
1692
|
if (typeof window === "undefined") {
|
|
1142
1693
|
return initialValue;
|
|
1143
1694
|
}
|
|
@@ -1149,8 +1700,8 @@ function useLocalStorage(key, initialValue) {
|
|
|
1149
1700
|
return initialValue;
|
|
1150
1701
|
}
|
|
1151
1702
|
}, [initialValue, key]);
|
|
1152
|
-
const [storedValue, setStoredValue] =
|
|
1153
|
-
const setValue =
|
|
1703
|
+
const [storedValue, setStoredValue] = useState8(readValue);
|
|
1704
|
+
const setValue = useCallback3(
|
|
1154
1705
|
(value) => {
|
|
1155
1706
|
if (typeof window == "undefined") {
|
|
1156
1707
|
console.warn(`Tried setting localStorage key \u201C${key}\u201D even though environment is not a client`);
|
|
@@ -1166,10 +1717,10 @@ function useLocalStorage(key, initialValue) {
|
|
|
1166
1717
|
},
|
|
1167
1718
|
[key, storedValue]
|
|
1168
1719
|
);
|
|
1169
|
-
|
|
1720
|
+
useEffect11(() => {
|
|
1170
1721
|
setStoredValue(readValue());
|
|
1171
1722
|
}, []);
|
|
1172
|
-
const handleStorageChange =
|
|
1723
|
+
const handleStorageChange = useCallback3(() => {
|
|
1173
1724
|
setStoredValue(readValue());
|
|
1174
1725
|
}, [readValue]);
|
|
1175
1726
|
useEventListener_default("storage", handleStorageChange);
|
|
@@ -1180,28 +1731,27 @@ function parseJSON(value) {
|
|
|
1180
1731
|
try {
|
|
1181
1732
|
return value === "undefined" ? void 0 : JSON.parse(value != null ? value : "");
|
|
1182
1733
|
} catch (e) {
|
|
1183
|
-
console.log("parsing error on", { value });
|
|
1184
1734
|
return void 0;
|
|
1185
1735
|
}
|
|
1186
1736
|
}
|
|
1187
1737
|
|
|
1188
1738
|
// src/hooks/usePrevious.tsx
|
|
1189
|
-
import { useEffect as
|
|
1739
|
+
import { useEffect as useEffect12, useRef as useRef12 } from "react";
|
|
1190
1740
|
var usePrevious = (value) => {
|
|
1191
|
-
const ref =
|
|
1192
|
-
|
|
1741
|
+
const ref = useRef12();
|
|
1742
|
+
useEffect12(() => {
|
|
1193
1743
|
ref.current = value;
|
|
1194
1744
|
});
|
|
1195
1745
|
return ref.current;
|
|
1196
1746
|
};
|
|
1197
1747
|
|
|
1198
1748
|
// src/hooks/useStep.tsx
|
|
1199
|
-
import { useCallback as
|
|
1749
|
+
import { useCallback as useCallback4, useMemo as useMemo4, useState as useState9 } from "react";
|
|
1200
1750
|
var useStep = (maxStep) => {
|
|
1201
|
-
const [currentStep, setCurrentStep] =
|
|
1751
|
+
const [currentStep, setCurrentStep] = useState9(1);
|
|
1202
1752
|
const canGoToNextStep = useMemo4(() => currentStep + 1 <= maxStep, [currentStep, maxStep]);
|
|
1203
1753
|
const canGoToPrevStep = useMemo4(() => currentStep - 1 >= 1, [currentStep]);
|
|
1204
|
-
const setStep =
|
|
1754
|
+
const setStep = useCallback4(
|
|
1205
1755
|
(step) => {
|
|
1206
1756
|
const newStep = step instanceof Function ? step(currentStep) : step;
|
|
1207
1757
|
if (newStep >= 1 && newStep <= maxStep) {
|
|
@@ -1212,17 +1762,17 @@ var useStep = (maxStep) => {
|
|
|
1212
1762
|
},
|
|
1213
1763
|
[maxStep, currentStep]
|
|
1214
1764
|
);
|
|
1215
|
-
const goToNextStep =
|
|
1765
|
+
const goToNextStep = useCallback4(() => {
|
|
1216
1766
|
if (canGoToNextStep) {
|
|
1217
1767
|
setCurrentStep((step) => step + 1);
|
|
1218
1768
|
}
|
|
1219
1769
|
}, [canGoToNextStep]);
|
|
1220
|
-
const goToPrevStep =
|
|
1770
|
+
const goToPrevStep = useCallback4(() => {
|
|
1221
1771
|
if (canGoToPrevStep) {
|
|
1222
1772
|
setCurrentStep((step) => step - 1);
|
|
1223
1773
|
}
|
|
1224
1774
|
}, [canGoToPrevStep]);
|
|
1225
|
-
const reset =
|
|
1775
|
+
const reset = useCallback4(() => {
|
|
1226
1776
|
setCurrentStep(1);
|
|
1227
1777
|
}, []);
|
|
1228
1778
|
return [
|
|
@@ -1254,7 +1804,9 @@ export {
|
|
|
1254
1804
|
MenuItem_default as MenuItem,
|
|
1255
1805
|
MenuSubmenu_default as MenuSubmenu,
|
|
1256
1806
|
MenuValueContext_default as MenuValueContext,
|
|
1807
|
+
MultiSelect_default as MultiSelect,
|
|
1257
1808
|
Portal_default as Portal,
|
|
1809
|
+
Select_default as Select,
|
|
1258
1810
|
Tab,
|
|
1259
1811
|
Tabs,
|
|
1260
1812
|
Toolbar_default as Toolbar,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unifiedsoftware/react-ui",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.15",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
"react-dom": "^16.0.0 || ^17.0.2 || ^18.2.0"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
+
"@progress/kendo-react-dropdowns": "^5.16.1",
|
|
25
|
+
"@progress/kendo-data-query": "^1.6.0",
|
|
24
26
|
"clsx": "^2.0.0",
|
|
25
27
|
"merge-refs": "^1.2.1",
|
|
26
28
|
"react-merge-refs": "^2.1.1",
|