mig-schema-table 3.0.100 → 3.0.101

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.
@@ -1,7 +1,7 @@
1
1
  import { Dispatch, SetStateAction } from "react";
2
2
  interface IColumnResizersProps {
3
3
  columnWidths: number[];
4
- setColumnWidths: Dispatch<SetStateAction<number[]>>;
4
+ setColumnWidths: Dispatch<SetStateAction<undefined | number[]>>;
5
5
  tableBodyHeight: number;
6
6
  }
7
7
  declare const ColumnResizers: ({ columnWidths, setColumnWidths, tableBodyHeight, }: IColumnResizersProps) => import("react/jsx-runtime").JSX.Element;
@@ -54,6 +54,7 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, config, custo
54
54
  const [thMenuConfig, setThMenuConfig] = React.useState();
55
55
  const isDataFunction = data instanceof Function;
56
56
  const [sourceData, setSourceData] = React.useState(isDataFunction ? undefined : data);
57
+ const [columnWidths, setColumnWidths] = React.useState();
57
58
  const [locationHash, setLocationHash] = React.useState(useFilterStateHash ? parseLocationHash(window.location.hash) : {});
58
59
  const [searchQuery, setSearchQuery] = React.useState(locationHash.searchQuery || "");
59
60
  const [columnFilterMap, setColumnFilterMap] = React.useState(locationHash.columnFilterMap || defaultColumnFilters);
@@ -205,22 +206,30 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, config, custo
205
206
  }, 0);
206
207
  return { dynamicWidthColumnCount, fixedWidthColumnsWidth };
207
208
  }, [columnNames, config]);
208
- const dynamicColumnWidth = Math.floor((width - fixedWidthColumnsWidth) / dynamicWidthColumnCount);
209
- let roundingDifference = (width - fixedWidthColumnsWidth) % dynamicWidthColumnCount;
210
- const [columnWidths, setColumnWidths] = React.useState(columnNames.map((propName) => {
211
- if (propName === SELECT_ALL_COLUMN_NAME) {
212
- return SELECT_ALL_COLUMN_WIDTH;
213
- }
214
- const propConfig = config ? config[propName] : undefined;
215
- if (propConfig === null || propConfig === void 0 ? void 0 : propConfig.width) {
216
- return propConfig === null || propConfig === void 0 ? void 0 : propConfig.width;
217
- }
218
- if (roundingDifference) {
219
- roundingDifference -= 1;
220
- return dynamicColumnWidth + 1;
221
- }
222
- return dynamicColumnWidth;
223
- }));
209
+ React.useEffect(() => {
210
+ const dynamicColumnWidth = Math.floor((width - fixedWidthColumnsWidth) / dynamicWidthColumnCount);
211
+ let roundingDifference = (width - fixedWidthColumnsWidth) % dynamicWidthColumnCount;
212
+ setColumnWidths(columnNames.map((propName) => {
213
+ if (propName === SELECT_ALL_COLUMN_NAME) {
214
+ return SELECT_ALL_COLUMN_WIDTH;
215
+ }
216
+ const propConfig = config ? config[propName] : undefined;
217
+ if (propConfig === null || propConfig === void 0 ? void 0 : propConfig.width) {
218
+ return propConfig === null || propConfig === void 0 ? void 0 : propConfig.width;
219
+ }
220
+ if (roundingDifference) {
221
+ roundingDifference -= 1;
222
+ return dynamicColumnWidth + 1;
223
+ }
224
+ return dynamicColumnWidth;
225
+ }));
226
+ }, [
227
+ columnNames,
228
+ config,
229
+ dynamicWidthColumnCount,
230
+ fixedWidthColumnsWidth,
231
+ width,
232
+ ]);
224
233
  const getColumnWidth = React.useCallback((columnIndex) => (columnWidths ? columnWidths[columnIndex] : 1), [columnWidths]);
225
234
  const filteredRenderData = React.useMemo(() => {
226
235
  if (!renderData ||
@@ -587,7 +596,7 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, config, custo
587
596
  type: "text/csv;charset=utf-8",
588
597
  }), "export.csv");
589
598
  }, [sortedRenderData]);
590
- 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", { children: isSearchable ? (_jsx("input", { className: "schema-table__search", type: "text", placeholder: searchPlaceholder || "Search...", value: searchQuery, onChange: onSearchChange, onKeyDown: onInputKeyDown, autoFocus: enableAutoFocus, onBlur: onSearchBlur })) : null }), customElement || (_jsx("div", { className: "schema-table__custom_element_placeholder" })), enableRowCounter ? (_jsx("span", Object.assign({ className: "schema-table__row_counter" }, { children: translate("showingFilteredCountOfTotalCount", (sortedRenderData === null || sortedRenderData === void 0 ? void 0 : sortedRenderData.length) || 0, data.length) }))) : null, isExportable ? (_jsx("button", Object.assign({ onClick: onExportDataClick, style: { marginLeft: 8 }, disabled: !(sortedRenderData === null || sortedRenderData === void 0 ? void 0 : sortedRenderData.length) }, { children: translate("exportData") }))) : null, isSearchable || isColumnFilterable ? (_jsx("button", Object.assign({ onClick: onClearFiltersButtonClick, style: { marginLeft: 8 }, disabled: Object.keys(columnFilterMap).length + searchQuery.length === 0 }, { children: translate("clearFilters") }))) : null] })), _jsxs("div", Object.assign({ className: "schema-table__column_resize_container" }, { children: [_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: ConfiguredTh }), `thead_${rowWidth}_${sortColumn}_${sortAsc}_${searchQuery}_${columnWidths.join(" ")}`), 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}_${columnWidths.join(" ")}`)) : (_jsx("div", Object.assign({ style: {
599
+ 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", { children: isSearchable ? (_jsx("input", { className: "schema-table__search", type: "text", placeholder: searchPlaceholder || "Search...", value: searchQuery, onChange: onSearchChange, onKeyDown: onInputKeyDown, autoFocus: enableAutoFocus, onBlur: onSearchBlur })) : null }), customElement || (_jsx("div", { className: "schema-table__custom_element_placeholder" })), enableRowCounter ? (_jsx("span", Object.assign({ className: "schema-table__row_counter" }, { children: translate("showingFilteredCountOfTotalCount", (sortedRenderData === null || sortedRenderData === void 0 ? void 0 : sortedRenderData.length) || 0, data.length) }))) : null, isExportable ? (_jsx("button", Object.assign({ onClick: onExportDataClick, style: { marginLeft: 8 }, disabled: !(sortedRenderData === null || sortedRenderData === void 0 ? void 0 : sortedRenderData.length) }, { children: translate("exportData") }))) : null, isSearchable || isColumnFilterable ? (_jsx("button", Object.assign({ onClick: onClearFiltersButtonClick, style: { marginLeft: 8 }, disabled: Object.keys(columnFilterMap).length + searchQuery.length === 0 }, { children: translate("clearFilters") }))) : null] })), columnWidths ? (_jsxs("div", Object.assign({ className: "schema-table__column_resize_container" }, { children: [_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: ConfiguredTh }), `thead_${rowWidth}_${sortColumn}_${sortAsc}_${searchQuery}_${columnWidths.join(" ")}`), 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}_${columnWidths.join(" ")}`)) : (_jsx("div", Object.assign({ style: {
591
600
  width: rowWidth,
592
601
  height: Math.max(50, tableBodyHeight),
593
602
  border: "1px solid #BBB",
@@ -596,6 +605,6 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, config, custo
596
605
  backgroundColor: "#CCC",
597
606
  alignItems: "center",
598
607
  justifyContent: "center",
599
- } }, { children: isDirty ? (_jsx("button", Object.assign({ onClick: refreshData, className: "btn border" }, { children: "Refresh data" }))) : (_jsx("div", { children: "\u231B Loading..." })) }))), isResizable ? (_jsx(ColumnResizers, { columnWidths: columnWidths, setColumnWidths: setColumnWidths, tableBodyHeight: tableBodyHeight })) : null] })), thMenuConfig ? (_jsx(ThMenu, { isFilterable: !!isColumnFilterable, isSortable: getIsColumnSortable(!!isSortable, schema.properties[thMenuConfig.propName], thMenuConfig.propConfig), onChange: onSchemaColumnFilterChange, onClose: onPopoverClose, onInputKeyDown: onInputKeyDown, propConfig: thMenuConfig.propConfig, propIsRequired: thMenuConfig.propIsRequired, propName: thMenuConfig.propName, propSchema: schema.properties[thMenuConfig.propName], referenceElement: thMenuConfig.referenceElement, setSortAsc: setSortAsc, setSortColumn: setSortColumn, translate: translate, value: columnFilterMap[thMenuConfig.propName] })) : null] })));
608
+ } }, { children: isDirty ? (_jsx("button", Object.assign({ onClick: refreshData, className: "btn border" }, { children: "Refresh data" }))) : (_jsx("div", { children: "\u231B Loading..." })) }))), isResizable ? (_jsx(ColumnResizers, { columnWidths: columnWidths, setColumnWidths: setColumnWidths, tableBodyHeight: tableBodyHeight })) : null] }))) : null, thMenuConfig ? (_jsx(ThMenu, { isFilterable: !!isColumnFilterable, isSortable: getIsColumnSortable(!!isSortable, schema.properties[thMenuConfig.propName], thMenuConfig.propConfig), onChange: onSchemaColumnFilterChange, onClose: onPopoverClose, onInputKeyDown: onInputKeyDown, propConfig: thMenuConfig.propConfig, propIsRequired: thMenuConfig.propIsRequired, propName: thMenuConfig.propName, propSchema: schema.properties[thMenuConfig.propName], referenceElement: thMenuConfig.referenceElement, setSortAsc: setSortAsc, setSortColumn: setSortColumn, translate: translate, value: columnFilterMap[thMenuConfig.propName] })) : null] })));
600
609
  }
601
610
  export default React.memo(SchemaTable);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mig-schema-table",
3
- "version": "3.0.100",
3
+ "version": "3.0.101",
4
4
  "main": "dist/index.js",
5
5
  "files": [
6
6
  "dist/"