trotl-table 1.0.69 → 1.0.71
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/Table.cjs.js +35 -5
- package/dist/Table.cjs.js.map +1 -1
- package/dist/Table.esm.js +35 -5
- package/dist/Table.esm.js.map +1 -1
- package/package.json +1 -1
package/dist/Table.cjs.js
CHANGED
|
@@ -9965,6 +9965,19 @@ function TableInner({
|
|
|
9965
9965
|
}
|
|
9966
9966
|
return a === b;
|
|
9967
9967
|
}, []);
|
|
9968
|
+
const formatArrayValue = React.useCallback((value, col) => {
|
|
9969
|
+
if (!Array.isArray(value)) return value;
|
|
9970
|
+
const objectKey = col?.objectKey;
|
|
9971
|
+
const parts = value.map(item => {
|
|
9972
|
+
if (item == null) return "";
|
|
9973
|
+
if (typeof item !== "object") return String(item);
|
|
9974
|
+
if (objectKey && item?.[objectKey] !== undefined) return String(item[objectKey]);
|
|
9975
|
+
if (item.label !== undefined) return String(item.label);
|
|
9976
|
+
if (item.value !== undefined) return String(item.value);
|
|
9977
|
+
return JSON.stringify(item);
|
|
9978
|
+
}).filter(item => item !== "");
|
|
9979
|
+
return parts.join(", ");
|
|
9980
|
+
}, []);
|
|
9968
9981
|
|
|
9969
9982
|
// console.log(extraSearchTerm)
|
|
9970
9983
|
|
|
@@ -10051,13 +10064,16 @@ function TableInner({
|
|
|
10051
10064
|
const query = searchTerm.toLowerCase();
|
|
10052
10065
|
return dateFiltered.filter(row => columns.some(col => {
|
|
10053
10066
|
const val = getAccessorValue(row, col.accessor);
|
|
10054
|
-
|
|
10055
|
-
|
|
10067
|
+
const normalized = Array.isArray(val) ? formatArrayValue(val, col) : val;
|
|
10068
|
+
if (normalized == null) return false;
|
|
10069
|
+
return String(normalized).toLowerCase().includes(query);
|
|
10056
10070
|
}));
|
|
10057
|
-
}, [searchTerm, columns, urlSearchString, getAccessorValue]);
|
|
10071
|
+
}, [searchTerm, columns, urlSearchString, getAccessorValue, formatArrayValue]);
|
|
10058
10072
|
|
|
10059
10073
|
// Natural-ish comparator: handles nulls, numbers, strings, ISO dates
|
|
10060
10074
|
const compare = (x, y, dir = "asc") => {
|
|
10075
|
+
if (Array.isArray(x)) x = formatArrayValue(x);
|
|
10076
|
+
if (Array.isArray(y)) y = formatArrayValue(y);
|
|
10061
10077
|
const nullCmp = () => {
|
|
10062
10078
|
if (x == null && y == null) return 0;
|
|
10063
10079
|
if (x == null) return 1; // nulls last
|
|
@@ -10492,6 +10508,15 @@ function TableInner({
|
|
|
10492
10508
|
title: formatted
|
|
10493
10509
|
}, formatted);
|
|
10494
10510
|
}
|
|
10511
|
+
if (col && col.type === 'array') {
|
|
10512
|
+
const arr = Array.isArray(v) ? v : [];
|
|
10513
|
+
const list = formatArrayValue(arr, col);
|
|
10514
|
+
const count = arr.length;
|
|
10515
|
+
const display = count > 0 ? `${count}: ${list}` : "...";
|
|
10516
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
10517
|
+
title: list || translate("noData")
|
|
10518
|
+
}, display);
|
|
10519
|
+
}
|
|
10495
10520
|
|
|
10496
10521
|
// If column has dateFormat, format value as date/time
|
|
10497
10522
|
if (col && col.dateFormat && v) {
|
|
@@ -10537,7 +10562,7 @@ function TableInner({
|
|
|
10537
10562
|
}
|
|
10538
10563
|
// existing highlight logic for other fields
|
|
10539
10564
|
return highlight(String(v));
|
|
10540
|
-
}, [highlight, isGrouped, triggerCellCallback, translate]);
|
|
10565
|
+
}, [highlight, isGrouped, triggerCellCallback, translate, formatArrayValue]);
|
|
10541
10566
|
const showView = buttons.includes("view");
|
|
10542
10567
|
const showEdit = buttons.includes("edit");
|
|
10543
10568
|
// show delete only when view is also shown (per request)
|
|
@@ -10977,6 +11002,7 @@ function TableInner({
|
|
|
10977
11002
|
return content;
|
|
10978
11003
|
}, [tableDataFlat, columns, selectedRows, toggleRowSelection, groupRowsById, renderCell, showActions, showDelete, showEdit, showKey, showView, translate, enableDragRow, moveRow, enableMultiSelect, rowHeight, tableId, customColumns, doubleClickEnable, keyWidth, actionColumnStyle, showDuplicate, showDownload, showIcons, showShare, triggerCellCallback, getAccessorKey, getAccessorValue]);
|
|
10979
11004
|
const rightClickActions = Array.isArray(enableMouseRightClick) ? enableMouseRightClick : [];
|
|
11005
|
+
const [hoveredActionIndex, setHoveredActionIndex] = React.useState(null);
|
|
10980
11006
|
const rowHeightGetter = ({
|
|
10981
11007
|
index
|
|
10982
11008
|
}) => tableDataFlat[index]?.type === "group" ? groupHeaderHeight : rowHeight;
|
|
@@ -11124,8 +11150,12 @@ function TableInner({
|
|
|
11124
11150
|
style: {
|
|
11125
11151
|
padding: '8px 12px',
|
|
11126
11152
|
cursor: 'pointer',
|
|
11127
|
-
borderBottom: i < rightClickActions.length - 1 ? '1px solid #eee' : 'none'
|
|
11153
|
+
borderBottom: i < rightClickActions.length - 1 ? '1px solid #eee' : 'none',
|
|
11154
|
+
backgroundColor: hoveredActionIndex === i ? '#f5f5f5' : '#fff',
|
|
11155
|
+
color: hoveredActionIndex === i ? '#000' : '#333'
|
|
11128
11156
|
},
|
|
11157
|
+
onMouseEnter: () => setHoveredActionIndex(i),
|
|
11158
|
+
onMouseLeave: () => setHoveredActionIndex(null),
|
|
11129
11159
|
onClick: () => performContextMenuAction(action, contextMenu.row)
|
|
11130
11160
|
}, action.label || action.text || `Action ${i + 1}`))) : null;
|
|
11131
11161
|
const contextMenuModalMarkup = contextMenuModal.visible && contextMenuModal.component ? /*#__PURE__*/React.createElement(Modal.default, {
|