Skip to content

Commit 333bb85

Browse files
feat: Collapse expanded rows on each action
1 parent da01630 commit 333bb85

File tree

3 files changed

+12
-4
lines changed

3 files changed

+12
-4
lines changed

src/components/MultiLevelTable.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useMemo, useState } from "react";
1+
import React, { useEffect, useMemo, useState } from "react";
22

33
import {
44
type Row,
@@ -136,7 +136,7 @@ export const MultiLevelTable: React.FC<MultiLevelTableProps> = ({
136136
);
137137
},
138138
Filter: col.filterable
139-
? ({ column }: { column: { setFilter: (value: string) => void } }) => (
139+
? ({ column }: { column: { setFilter: (value: string) => void; filterValue?: string } }) => (
140140
<input
141141
value={filterInput}
142142
onChange={(e) => {
@@ -164,7 +164,7 @@ export const MultiLevelTable: React.FC<MultiLevelTableProps> = ({
164164
nextPage,
165165
previousPage,
166166
setPageSize,
167-
state: { pageIndex, pageSize: currentPageSize },
167+
state: { pageIndex, pageSize: currentPageSize, sortBy, filters },
168168
} = useTable(
169169
{
170170
columns: tableColumns,
@@ -208,6 +208,12 @@ export const MultiLevelTable: React.FC<MultiLevelTableProps> = ({
208208

209209
const [expandedRows, setExpandedRows] = useState<Set<string | number>>(new Set());
210210

211+
// Collapse expanded rows when filtering or sorting occurs
212+
useEffect(() => {
213+
if (expandedRows.size > 0) setExpandedRows(new Set());
214+
// eslint-disable-next-line react-hooks/exhaustive-deps
215+
}, [sortBy, filters]);
216+
211217
const toggleRow = (rowId: string | number) => {
212218
setExpandedRows((prev) => {
213219
const newSet = new Set(prev);

src/components/TableHeader.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ export const TableHeader: React.FC<TableHeaderProps> = ({
104104
)}
105105
<span
106106
style={{ display: 'inline-flex', alignItems: 'center', cursor: isColumnSortable ? 'pointer' : 'default', userSelect: 'none' }}
107-
onClick={isColumnSortable ? (e => { e.stopPropagation(); (sortProps.onClick as any)?.(e); }) : undefined}
107+
onClick={isColumnSortable ? (e: React.MouseEvent) => { e.stopPropagation(); (sortProps.onClick as (e: React.MouseEvent) => void)?.(e); } : undefined}
108108
>
109109
{column.render('Header')}
110110
<span className="sort-icon" style={{ marginLeft: 4 }}>

src/types/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ export interface DataItem {
2222
export interface TableStateWithPagination<T extends object> extends TableState<T> {
2323
pageIndex: number;
2424
pageSize: number;
25+
sortBy: Array<{ id: string; desc: boolean }>;
26+
filters: Array<{ id: string; value: string }>;
2527
}
2628

2729
export interface TableInstanceWithHooks<T extends object> extends TableInstance<T> {

0 commit comments

Comments
 (0)