Skip to content

Commit 3a4d429

Browse files
authored
Multiple table selection enabled after search. Canner#396 (Canner#491)
* fix: multiple table selection enabled after search * fix: removed console statements * fix: added select all functionality * fix: select all issue fixed
1 parent c23ae65 commit 3a4d429

File tree

1 file changed

+31
-9
lines changed

1 file changed

+31
-9
lines changed

wren-ui/src/components/table/MultiSelectBox.tsx

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ interface Props {
4141

4242
export default function MultiSelectBox(props: Props) {
4343
const { columns, loading, items, onChange, value } = props;
44-
const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>(
45-
value || [],
44+
const [selectedRowKeys, setSelectedRowKeys] = useState<Set<string>>(
45+
new Set(value),
4646
);
4747
const [searchValue, setSearchValue] = useState<string>('');
4848
const formItemContext =
@@ -59,9 +59,15 @@ export default function MultiSelectBox(props: Props) {
5959
: items;
6060
}, [items, searchValue]);
6161

62-
const onSelect = (rowKeys: React.Key[]) => {
63-
setSelectedRowKeys(rowKeys);
64-
onChange && onChange(rowKeys as string[]);
62+
const onSelect = (rowKey: string) => {
63+
const newSelectedRowKey = new Set(selectedRowKeys);
64+
if (newSelectedRowKey.has(rowKey)) {
65+
newSelectedRowKey.delete(rowKey);
66+
} else {
67+
newSelectedRowKey.add(rowKey);
68+
}
69+
setSelectedRowKeys(newSelectedRowKey);
70+
onChange && onChange(Array.from(newSelectedRowKey));
6571
};
6672

6773
const onSearchChange = (event) => {
@@ -71,9 +77,9 @@ export default function MultiSelectBox(props: Props) {
7177
};
7278

7379
const total =
74-
selectedRowKeys.length === 0
80+
selectedRowKeys.size === 0
7581
? items.length
76-
: `${selectedRowKeys.length}/${items.length}`;
82+
: `${selectedRowKeys.size}/${items.length}`;
7783

7884
return (
7985
<StyledBox
@@ -91,8 +97,24 @@ export default function MultiSelectBox(props: Props) {
9197
<Table
9298
rowSelection={{
9399
type: 'checkbox',
94-
selectedRowKeys,
95-
onChange: onSelect,
100+
selectedRowKeys: Array.from(selectedRowKeys),
101+
onSelect: (record) => onSelect(record['value']),
102+
onChange(keys) {
103+
// if more than 1 rows selected and there is only one possibility, if user selects all rows.
104+
if (keys.length !== 1) {
105+
if (keys.length === 0) {
106+
setSelectedRowKeys(new Set());
107+
onChange && onChange([]);
108+
return;
109+
}
110+
const newSelectedRowKeys = [
111+
...selectedRowKeys,
112+
...(keys as string[]),
113+
];
114+
setSelectedRowKeys(new Set(newSelectedRowKeys));
115+
onChange && onChange(newSelectedRowKeys);
116+
}
117+
},
96118
}}
97119
rowKey={(record) => record.value}
98120
columns={columns}

0 commit comments

Comments
 (0)