mig-schema-table 3.0.45 → 3.0.47
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/SchemaTable/index.js +32 -20
- package/package.json +1 -1
|
@@ -15,10 +15,17 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
15
15
|
const [searchQuery, setSearchQuery] = React.useState("");
|
|
16
16
|
const [columnFilterMap, setColumnFilterMap] = React.useState({});
|
|
17
17
|
const [popoverConfig, setPopoverConfig] = React.useState();
|
|
18
|
-
const
|
|
18
|
+
const isDataFunction = data instanceof Function;
|
|
19
|
+
const [sourceData, setSourceData] = React.useState(isDataFunction ? undefined : data);
|
|
19
20
|
const [isDirty, setIsDirty] = React.useState(false);
|
|
20
21
|
React.useEffect(() => {
|
|
21
|
-
if (
|
|
22
|
+
if (isDataFunction) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
setSourceData(data);
|
|
26
|
+
}, [data, isDataFunction]);
|
|
27
|
+
React.useEffect(() => {
|
|
28
|
+
if (!isDataFunction || sourceData !== undefined) {
|
|
22
29
|
return;
|
|
23
30
|
}
|
|
24
31
|
data({
|
|
@@ -27,7 +34,15 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
27
34
|
sortColumn,
|
|
28
35
|
sortAsc,
|
|
29
36
|
}).then(setSourceData);
|
|
30
|
-
}, [
|
|
37
|
+
}, [
|
|
38
|
+
columnFilterMap,
|
|
39
|
+
data,
|
|
40
|
+
isDataFunction,
|
|
41
|
+
searchQuery,
|
|
42
|
+
sortAsc,
|
|
43
|
+
sortColumn,
|
|
44
|
+
sourceData,
|
|
45
|
+
]);
|
|
31
46
|
const { properties = {} } = schema;
|
|
32
47
|
const columnNames = React.useMemo(() => {
|
|
33
48
|
const columns = Object.keys(properties);
|
|
@@ -171,7 +186,7 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
171
186
|
const filteredRenderData = React.useMemo(() => {
|
|
172
187
|
if (!renderData ||
|
|
173
188
|
(!isColumnFilterable && !isSearchable) ||
|
|
174
|
-
|
|
189
|
+
isDataFunction) {
|
|
175
190
|
return renderData;
|
|
176
191
|
}
|
|
177
192
|
return renderData.filter((item) => {
|
|
@@ -220,7 +235,7 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
220
235
|
renderData,
|
|
221
236
|
isColumnFilterable,
|
|
222
237
|
isSearchable,
|
|
223
|
-
|
|
238
|
+
isDataFunction,
|
|
224
239
|
searchQuery,
|
|
225
240
|
columnNames,
|
|
226
241
|
columnFilterMap,
|
|
@@ -229,10 +244,7 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
229
244
|
]);
|
|
230
245
|
// Sort the filtered data
|
|
231
246
|
const sortedRenderData = React.useMemo(() => {
|
|
232
|
-
if (!sortColumn ||
|
|
233
|
-
!filteredRenderData ||
|
|
234
|
-
!sourceData ||
|
|
235
|
-
data instanceof Function) {
|
|
247
|
+
if (!sortColumn || !filteredRenderData || !sourceData || isDataFunction) {
|
|
236
248
|
return filteredRenderData;
|
|
237
249
|
}
|
|
238
250
|
const sortSchema = properties[sortColumn];
|
|
@@ -288,7 +300,7 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
288
300
|
sortColumn,
|
|
289
301
|
filteredRenderData,
|
|
290
302
|
sourceData,
|
|
291
|
-
|
|
303
|
+
isDataFunction,
|
|
292
304
|
properties,
|
|
293
305
|
config,
|
|
294
306
|
sortAsc,
|
|
@@ -312,23 +324,23 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
312
324
|
const disableColumnFilter = React.useCallback((propName) => {
|
|
313
325
|
const newColumnFilterMap = Object.assign({}, columnFilterMap);
|
|
314
326
|
delete newColumnFilterMap[propName];
|
|
315
|
-
if (
|
|
327
|
+
if (isDataFunction) {
|
|
316
328
|
setIsDirty(true);
|
|
317
329
|
}
|
|
318
330
|
setColumnFilterMap(newColumnFilterMap);
|
|
319
|
-
}, [columnFilterMap,
|
|
331
|
+
}, [columnFilterMap, isDataFunction]);
|
|
320
332
|
const onSetSortColumn = React.useCallback((x) => {
|
|
321
|
-
if (
|
|
333
|
+
if (isDataFunction) {
|
|
322
334
|
setIsDirty(true);
|
|
323
335
|
}
|
|
324
336
|
setSortColumn(x);
|
|
325
|
-
}, [
|
|
337
|
+
}, [isDataFunction]);
|
|
326
338
|
const onSetSortAsc = React.useCallback((x) => {
|
|
327
|
-
if (
|
|
339
|
+
if (isDataFunction) {
|
|
328
340
|
setIsDirty(true);
|
|
329
341
|
}
|
|
330
342
|
setSortAsc(x);
|
|
331
|
-
}, [
|
|
343
|
+
}, [isDataFunction]);
|
|
332
344
|
const SchemaTableTh = React.useCallback(({ style, index }) => {
|
|
333
345
|
const propName = columnNames[index];
|
|
334
346
|
const propConfig = config ? config[propName] : undefined;
|
|
@@ -379,11 +391,11 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
379
391
|
sortedRenderData,
|
|
380
392
|
]);
|
|
381
393
|
const onSearchChange = React.useCallback((e) => {
|
|
382
|
-
if (
|
|
394
|
+
if (isDataFunction) {
|
|
383
395
|
setIsDirty(true);
|
|
384
396
|
}
|
|
385
397
|
setSearchQuery(e.currentTarget.value);
|
|
386
|
-
}, [
|
|
398
|
+
}, [isDataFunction]);
|
|
387
399
|
const refreshData = React.useCallback(() => {
|
|
388
400
|
setIsDirty(false);
|
|
389
401
|
setSourceData(undefined);
|
|
@@ -413,7 +425,7 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
413
425
|
if (!popoverConfig) {
|
|
414
426
|
return;
|
|
415
427
|
}
|
|
416
|
-
if (
|
|
428
|
+
if (isDataFunction) {
|
|
417
429
|
setIsDirty(true);
|
|
418
430
|
}
|
|
419
431
|
if (newColumnFilterValue === undefined) {
|
|
@@ -421,7 +433,7 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
421
433
|
return;
|
|
422
434
|
}
|
|
423
435
|
setColumnFilterMap((columnFilterMap) => (Object.assign(Object.assign({}, columnFilterMap), { [popoverConfig.propName]: newColumnFilterValue })));
|
|
424
|
-
}, [
|
|
436
|
+
}, [disableColumnFilter, isDataFunction, popoverConfig]);
|
|
425
437
|
return (_jsxs("div", Object.assign({ className: `schema-table${onRowClick ? " schema-table--clickable-rows" : ""}`, style: Object.assign(Object.assign({}, style), { width: rowWidth }), role: "table" }, { children: [_jsxs("div", Object.assign({ className: "schema-table__action-container" }, { children: [_jsx("div", Object.assign({ style: { flex: 1 } }, { children: isSearchable ? (_jsx("input", { type: "text", placeholder: searchPlaceholder || "Search...", value: searchQuery, onChange: onSearchChange, onKeyDown: onInputKeyDown, autoFocus: true })) : null })), customElement] })), _jsx(Heading, Object.assign({ height: 50, itemCount: columnCount, itemSize: getColumnWidth, layout: "horizontal", width: rowWidth, sortAsc: sortAsc, setSortAsc: onSetSortAsc, setSortColumn: onSetSortColumn, sortColumn: sortColumn, sortedRenderData: sortedRenderData, className: "schema-table__th-row" }, { children: SchemaTableTh }), `thead_${rowWidth}_${sortColumn}_${sortAsc}_${searchQuery}`), sourceData && !isDirty ? (_jsx(VariableSizeGrid, Object.assign({ className: "schema-table__tbody", height: tableBodyHeight, width: rowWidth, columnWidth: getColumnWidth, rowHeight: getRowHeight, columnCount: columnCount, rowCount: rowCount }, { children: SchemaTableTd }), `tbody_${tableBodyHeight}_${rowWidth}_${sortColumn}_${sortAsc}_${searchQuery}_${columnCount}`)) : (_jsx("div", Object.assign({ style: {
|
|
426
438
|
width: rowWidth,
|
|
427
439
|
height: Math.max(50, tableBodyHeight),
|