Skip to content

Commit df44075

Browse files
authored
fix(Table): default prefixをselectedRow, selectedRows に付与 (#1500)
* Fix to add prefix * Fix story * Add change log
1 parent 7584d05 commit df44075

File tree

3 files changed

+21
-16
lines changed

3 files changed

+21
-16
lines changed

.changeset/lucky-gifts-cover.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@4design/for-ui": patch
3+
---
4+
5+
Fix/selectable table add default prefix@1499

packages/for-ui/src/table/Table.stories.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export const WithSelect: Story = () => (
4949
columns={columns}
5050
data={StaticPersonData}
5151
getRowId={(row) => row.id.toString()}
52-
selectedRow="2"
52+
defaultSelectedRow="2"
5353
onSelectRow={(row) => console.info('Selected row: ', row)}
5454
/>
5555
);
@@ -59,7 +59,7 @@ export const WithSelectMultiple: Story = () => (
5959
columns={columns}
6060
data={StaticPersonData}
6161
getRowId={(row) => row.id.toString()}
62-
selectedRows={['2', '3', '4']}
62+
defaultSelectedRows={['2', '3', '4']}
6363
onSelectRows={(rows) => console.info('Selected rows: ', rows)}
6464
/>
6565
);

packages/for-ui/src/table/Table.tsx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,26 +49,26 @@ export type TableProps<T extends RowData> = Pick<TableOptions<T>, 'data' | 'colu
4949
} & (
5050
| {
5151
/** If wanting to use selectable table, specify _onSelectRow_ or _onSelectRows_ exclusively */
52-
selectedRow?: string;
53-
selectedRows?: never;
5452
onSelectRow?: ((id: string | undefined) => void) | undefined;
53+
defaultSelectedRow?: string;
5554
onSelectRows?: never;
55+
defaultSelectedRows?: never;
5656
}
5757
| {
58-
selectedRow?: never;
59-
selectedRows?: string[];
6058
onSelectRow?: never;
59+
defaultSelectedRow?: never;
6160
/** If wanting to use selectable table, specify _onSelectRow_ or _onSelectRows_ exclusively */
6261
onSelectRows?: ((ids: string[]) => void) | undefined;
62+
defaultSelectedRows?: string[];
6363
}
6464
);
6565

6666
export const Table = <T extends RowData>({
6767
data,
6868
disablePagination,
6969
defaultSortColumn,
70-
selectedRow,
71-
selectedRows,
70+
defaultSelectedRow,
71+
defaultSelectedRows,
7272
onSelectRow,
7373
onSelectRows,
7474
onRowClick,
@@ -82,25 +82,25 @@ export const Table = <T extends RowData>({
8282
defaultPage = 1,
8383
onChangePage,
8484
}: TableProps<T>) => {
85-
const defaultSelectedRows = selectedRow
86-
? { [selectedRow]: true }
87-
: selectedRows?.reduce((acc, id) => ({ ...acc, [id]: true }), {}) ?? {};
85+
const tableId = useId();
8886
const [sorting, setSorting] = useState<SortingState>(defaultSortColumn ? [defaultSortColumn] : []);
89-
const [rowSelection, setRowSelection] = useState<RowSelectionState>(defaultSelectedRows);
87+
88+
const defaultRowSelection = defaultSelectedRow
89+
? { [defaultSelectedRow]: true }
90+
: (defaultSelectedRows || []).reduce((acc, id) => ({ ...acc, [id]: true }), {});
91+
const [rowSelection, setRowSelection] = useState<RowSelectionState>(defaultRowSelection);
9092
const prevRowSelection = useRef<RowSelectionState>({});
91-
const tableId = useId();
9293

9394
const onRowSelectionChange: OnChangeFn<RowSelectionState> = useCallback(
9495
(updater) => {
9596
// updater is designed to be passed to setState like `setState((prev) => updater(prev))`
9697
// However, due to the React "state is snapshot" design, it is hard to get current selection without using rowSelection.
9798
// This may lead to some bugs if setting state several times in 1 rendering.
9899
const row: RowSelectionState = typeof updater === 'function' ? updater(rowSelection) : updater;
99-
// If selected the same row (when single selectable table), skip it
100+
// If the same row is selected (when single selectable table), skip it
100101
if (prevRowSelection.current === row) {
101102
return;
102103
}
103-
console.info(row);
104104
setRowSelection(row);
105105
prevRowSelection.current = row;
106106
const selectedIds = Object.keys(row);
@@ -112,7 +112,7 @@ export const Table = <T extends RowData>({
112112

113113
const selectRow = useCallback(
114114
(row: RowType<T>) => {
115-
// If multiply seletable table, using toggle. Or if singly selectable table, not using toggle.
115+
// If multiple seletable table, using toggle. Otherwise (singly selectable table) not using toggle.
116116
row.toggleSelected(onSelectRows ? undefined : true);
117117
},
118118
[onSelectRows],

0 commit comments

Comments
 (0)