-
Notifications
You must be signed in to change notification settings - Fork 69
Expand file tree
/
Copy pathIndexColumn.tsx
More file actions
77 lines (71 loc) · 2.29 KB
/
IndexColumn.tsx
File metadata and controls
77 lines (71 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import React, {useCallback} from 'react';
import type {Column} from '@gravity-ui/react-data-table';
import DataTable from '@gravity-ui/react-data-table';
import {Checkbox} from '@gravity-ui/uikit';
import block from 'bem-cn-lite';
import type {DatasetField, DatasetSelectionMap} from 'shared';
import {DatasetFieldsTabQa} from 'shared';
const b = block('dataset-table');
export const getIndexColumn = ({
selectedRows,
isAllSelected,
indeterminate,
onSelectChange,
onSelectAllChange,
readonly,
}: {
selectedRows: DatasetSelectionMap;
isAllSelected?: boolean;
indeterminate?: boolean;
onSelectChange: (
isSelected: boolean,
guids: (keyof DatasetSelectionMap)[],
clickedIndex: number,
modifier: {shiftKey: boolean},
) => void;
onSelectAllChange: (isSelected: boolean) => void;
readonly: boolean;
}): Column<DatasetField> => ({
name: 'index',
className: b('column'),
align: DataTable.CENTER,
width: 50,
sortable: false,
header: (
<Checkbox
size={'l'}
checked={isAllSelected}
indeterminate={indeterminate}
onUpdate={onSelectAllChange}
disabled={readonly}
qa={DatasetFieldsTabQa.FieldIndexHeaderColumnCheckbox}
/>
),
render: function IndexColumnItem({index, row}) {
const {guid} = row;
const handleCheckboxChange = useCallback(
(event: React.ChangeEvent<HTMLInputElement>) => {
const {checked} = event.target;
onSelectChange(checked, [guid], index, {
shiftKey: Boolean(
'shiftKey' in event.nativeEvent && event.nativeEvent.shiftKey,
),
});
},
[guid, index],
);
return (
<React.Fragment>
<Checkbox
className={b('btn-select')}
checked={selectedRows[guid] ?? false}
size={'l'}
disabled={readonly}
onChange={handleCheckboxChange}
qa={DatasetFieldsTabQa.FieldIndexColumnCheckbox}
/>
<div className={b('title-index')}>{index + 1}</div>
</React.Fragment>
);
},
});