diff --git a/packages/lib/src/data-grid/DataGrid.stories.tsx b/packages/lib/src/data-grid/DataGrid.stories.tsx
index 592839224..5c3f1c41c 100644
--- a/packages/lib/src/data-grid/DataGrid.stories.tsx
+++ b/packages/lib/src/data-grid/DataGrid.stories.tsx
@@ -721,6 +721,17 @@ const DataGrid = () => {
+
+
+
+
{
);
};
+const DataGridUnknownUniqueRowId = () => {
+ const [selectedRows, setSelectedRows] = useState((): Set => new Set());
+ const [selectedChildRows, setSelectedChildRows] = useState((): Set => new Set());
+
+ const [itemsPerPage, setItemsPerPage] = useState(5);
+ const [rowsControlled, setRowsControlled] = useState(expandableRows.slice(0, itemsPerPage));
+ const [page, setPage] = useState(0);
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ if (sortColumn) {
+ const { columnKey, direction } = sortColumn;
+ console.log(`Sorting the column '${columnKey}' by '${direction}' direction`);
+ setRowsControlled((currentRows) => {
+ return currentRows.sort((a, b) => {
+ if (isKeyOfRow(columnKey, a) && isKeyOfRow(columnKey, b)) {
+ const valueA = a[columnKey];
+ const valueB = b[columnKey];
+ if (valueA != null && valueB != null) {
+ if (direction === "ASC") {
+ return valueA < valueB ? -1 : valueA > valueB ? 1 : 0;
+ } else {
+ return valueA < valueB ? 1 : valueA > valueB ? -1 : 0;
+ }
+ } else {
+ return 0;
+ }
+ } else {
+ return 0;
+ }
+ });
+ });
+ } else {
+ console.log("Removed sorting criteria");
+ setRowsControlled(expandableRows.slice(page * itemsPerPage, page * itemsPerPage + itemsPerPage));
+ }
+ }}
+ onPageChange={(page) => {
+ const internalPage = page - 1;
+ setPage(internalPage);
+ setRowsControlled(
+ expandableRows.slice(internalPage * itemsPerPage, internalPage * itemsPerPage + itemsPerPage)
+ );
+ }}
+ itemsPerPage={itemsPerPage}
+ itemsPerPageOptions={[5, 10]}
+ itemsPerPageFunction={(n) => {
+ setItemsPerPage(n);
+ setRowsControlled(expandableRows.slice(0, n));
+ }}
+ totalItems={expandableRows.length}
+ />
+
+ >
+ );
+};
+
type Story = StoryObj;
export const Chromatic: Story = {
@@ -991,3 +1139,7 @@ export const DataGridSortedExpanded: Story = {
button37 && (await userEvent.click(button37));
},
};
+
+export const UnknownUniqueId: Story = {
+ render: DataGridUnknownUniqueRowId,
+};
\ No newline at end of file
diff --git a/packages/lib/src/data-grid/DataGrid.tsx b/packages/lib/src/data-grid/DataGrid.tsx
index 9b483666f..9fe2cc1e2 100644
--- a/packages/lib/src/data-grid/DataGrid.tsx
+++ b/packages/lib/src/data-grid/DataGrid.tsx
@@ -197,26 +197,30 @@ const DxcDataGrid = ({
const sortedRows = useMemo((): readonly GridRow[] | HierarchyGridRow[] | ExpandableGridRow[] => {
const sortFunctions = getCustomSortFn(columns);
if (!onSort) {
- if (expandable && sortColumns.length > 0) {
- const innerSortedRows = sortRows(
- rowsToRender.filter((row) => !row.isExpandedChildContent),
- sortColumns,
- sortFunctions
- );
- rowsToRender
- .filter((row) => row.isExpandedChildContent)
- .map((expandedRow) =>
- addRow(
- innerSortedRows,
- innerSortedRows.findIndex((trigger) => rowKeyGetter(trigger, uniqueRowId) === expandedRow.triggerRowKey) +
- 1,
- expandedRow
- )
+ if (sortColumns.length > 0 && uniqueRowId) {
+ if (expandable) {
+ const innerSortedRows = sortRows(
+ rowsToRender.filter((row) => !row.isExpandedChildContent),
+ sortColumns,
+ sortFunctions
);
- return innerSortedRows;
- }
- if (!expandable && sortColumns.length > 0 && uniqueRowId) {
- return sortHierarchyRows(rowsToRender, sortColumns, sortFunctions, uniqueRowId);
+ if (innerSortedRows.some((row) => uniqueRowId in row)) {
+ rowsToRender
+ .filter((row) => row.isExpandedChildContent)
+ .map((expandedRow) =>
+ addRow(
+ innerSortedRows,
+ innerSortedRows.findIndex(
+ (trigger) => rowKeyGetter(trigger, uniqueRowId) === expandedRow.triggerRowKey
+ ) + 1,
+ expandedRow
+ )
+ );
+ return innerSortedRows;
+ }
+ } else {
+ return sortHierarchyRows(rowsToRender, sortColumns, sortFunctions, uniqueRowId);
+ }
}
}
return rowsToRender;
diff --git a/packages/lib/src/data-grid/utils.tsx b/packages/lib/src/data-grid/utils.tsx
index 7c08c2df8..f10bde38d 100644
--- a/packages/lib/src/data-grid/utils.tsx
+++ b/packages/lib/src/data-grid/utils.tsx
@@ -122,6 +122,7 @@ export const renderExpandableTrigger = (
});
}
}}
+ disabled={!rows.some((row) => uniqueRowId in row)}
/>
);
@@ -143,6 +144,7 @@ export const renderHierarchyTrigger = (
) => (