@semcore/data-table 17.0.0-prerelease.31 → 17.0.0-prerelease.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -1
- package/lib/cjs/components/AccordionRows/AccordionRows.js +50 -51
- package/lib/cjs/components/AccordionRows/AccordionRows.js.map +1 -1
- package/lib/cjs/components/Body/Body.js +65 -88
- package/lib/cjs/components/Body/Body.js.map +1 -1
- package/lib/cjs/components/Body/Body.types.js.map +1 -1
- package/lib/cjs/components/Body/Cell.js +50 -51
- package/lib/cjs/components/Body/Cell.js.map +1 -1
- package/lib/cjs/components/Body/LimitOverlay.js +50 -51
- package/lib/cjs/components/Body/LimitOverlay.js.map +1 -1
- package/lib/cjs/components/Body/Row.js +65 -90
- package/lib/cjs/components/Body/Row.js.map +1 -1
- package/lib/cjs/components/Body/Row.types.js.map +1 -1
- package/lib/cjs/components/Body/RowGroup.js +133 -0
- package/lib/cjs/components/Body/RowGroup.js.map +1 -0
- package/lib/cjs/components/Body/style.shadow.css +86 -151
- package/lib/cjs/components/DataTable/DataTable.js +35 -12
- package/lib/cjs/components/DataTable/DataTable.js.map +1 -1
- package/lib/cjs/components/DataTable/DataTable.types.js.map +1 -1
- package/lib/cjs/components/Head/Head.js +45 -14
- package/lib/cjs/components/Head/Head.js.map +1 -1
- package/lib/cjs/components/Head/Head.types.js.map +1 -1
- package/lib/cjs/components/RowSelector/RowsSelector.js +112 -0
- package/lib/cjs/components/RowSelector/RowsSelector.js.map +1 -0
- package/lib/cjs/index.js +7 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/store/SelectableRows.js +129 -0
- package/lib/cjs/store/SelectableRows.js.map +1 -0
- package/lib/es6/components/AccordionRows/AccordionRows.js +50 -51
- package/lib/es6/components/AccordionRows/AccordionRows.js.map +1 -1
- package/lib/es6/components/Body/Body.js +67 -90
- package/lib/es6/components/Body/Body.js.map +1 -1
- package/lib/es6/components/Body/Body.types.js.map +1 -1
- package/lib/es6/components/Body/Cell.js +50 -51
- package/lib/es6/components/Body/Cell.js.map +1 -1
- package/lib/es6/components/Body/LimitOverlay.js +50 -51
- package/lib/es6/components/Body/LimitOverlay.js.map +1 -1
- package/lib/es6/components/Body/Row.js +66 -91
- package/lib/es6/components/Body/Row.js.map +1 -1
- package/lib/es6/components/Body/Row.types.js.map +1 -1
- package/lib/es6/components/Body/RowGroup.js +125 -0
- package/lib/es6/components/Body/RowGroup.js.map +1 -0
- package/lib/es6/components/Body/style.shadow.css +86 -151
- package/lib/es6/components/DataTable/DataTable.js +35 -12
- package/lib/es6/components/DataTable/DataTable.js.map +1 -1
- package/lib/es6/components/DataTable/DataTable.types.js.map +1 -1
- package/lib/es6/components/Head/Head.js +45 -14
- package/lib/es6/components/Head/Head.js.map +1 -1
- package/lib/es6/components/Head/Head.types.js.map +1 -1
- package/lib/es6/components/RowSelector/RowsSelector.js +104 -0
- package/lib/es6/components/RowSelector/RowsSelector.js.map +1 -0
- package/lib/es6/index.js +2 -1
- package/lib/es6/index.js.map +1 -1
- package/lib/es6/store/SelectableRows.js +121 -0
- package/lib/es6/store/SelectableRows.js.map +1 -0
- package/lib/esm/components/AccordionRows/AccordionRows.mjs +51 -52
- package/lib/esm/components/Body/Body.mjs +68 -91
- package/lib/esm/components/Body/Cell.mjs +51 -52
- package/lib/esm/components/Body/LimitOverlay.mjs +51 -52
- package/lib/esm/components/Body/Row.mjs +66 -90
- package/lib/esm/components/Body/RowGroup.mjs +124 -0
- package/lib/esm/components/Body/style.shadow.css +86 -151
- package/lib/esm/components/DataTable/DataTable.mjs +34 -12
- package/lib/esm/components/Head/Head.mjs +46 -14
- package/lib/esm/components/RowSelector/RowsSelector.mjs +107 -0
- package/lib/esm/index.mjs +2 -0
- package/lib/esm/store/SelectableRows.mjs +123 -0
- package/lib/types/components/Body/Body.types.d.ts +2 -1
- package/lib/types/components/Body/Row.d.ts +0 -2
- package/lib/types/components/Body/Row.types.d.ts +2 -1
- package/lib/types/components/Body/RowGroup.d.ts +19 -0
- package/lib/types/components/DataTable/DataTable.types.d.ts +21 -12
- package/lib/types/components/Head/Head.types.d.ts +2 -1
- package/lib/types/components/RowSelector/RowsSelector.d.ts +31 -0
- package/lib/types/index.d.ts +2 -1
- package/lib/types/store/SelectableRows.d.ts +56 -0
- package/package.json +18 -18
package/lib/esm/index.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { MergedColumnsCell, MergedRowsCell } from "./components/Body/MergedCells.mjs";
|
|
2
2
|
import { ACCORDION, DataTable, ROW_GROUP } from "./components/DataTable/DataTable.mjs";
|
|
3
|
+
import { SelectableRows } from "./store/SelectableRows.mjs";
|
|
3
4
|
const wrapDataTable = (wrapper) => wrapper;
|
|
4
5
|
export {
|
|
5
6
|
ACCORDION,
|
|
@@ -7,5 +8,6 @@ export {
|
|
|
7
8
|
MergedColumnsCell,
|
|
8
9
|
MergedRowsCell,
|
|
9
10
|
ROW_GROUP,
|
|
11
|
+
SelectableRows,
|
|
10
12
|
wrapDataTable
|
|
11
13
|
};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import EventEmitter from "@semcore/core/lib/utils/eventEmitter";
|
|
3
|
+
import { UNIQ_ROW_KEY } from "../components/DataTable/DataTable.mjs";
|
|
4
|
+
class SelectableRows extends EventEmitter {
|
|
5
|
+
constructor(initValues = []) {
|
|
6
|
+
super();
|
|
7
|
+
_defineProperty(this, "values", void 0);
|
|
8
|
+
_defineProperty(this, "availableKeys", /* @__PURE__ */ new Set());
|
|
9
|
+
_defineProperty(this, "lastSelectedRow", null);
|
|
10
|
+
_defineProperty(this, "isPressedShift", false);
|
|
11
|
+
this.values = new Set(initValues);
|
|
12
|
+
}
|
|
13
|
+
setAvailableKeys(value) {
|
|
14
|
+
this.availableKeys = new Set(value);
|
|
15
|
+
}
|
|
16
|
+
get() {
|
|
17
|
+
return Array.from(this.values.keys());
|
|
18
|
+
}
|
|
19
|
+
isChecked(key) {
|
|
20
|
+
return this.values.has(key);
|
|
21
|
+
}
|
|
22
|
+
replace(value) {
|
|
23
|
+
this.clearAll();
|
|
24
|
+
value.forEach((val) => {
|
|
25
|
+
this.values.add(val);
|
|
26
|
+
this.emit(SelectableRows.TOGGLE_EVENT, val);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
has(value) {
|
|
30
|
+
return this.values.has(value);
|
|
31
|
+
}
|
|
32
|
+
isAllSelected() {
|
|
33
|
+
let isAllSelected = true;
|
|
34
|
+
if (this.availableKeys.size === 0 || this.values.size === 0) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
for (const key of this.availableKeys.values()) {
|
|
38
|
+
if (!this.values.has(key)) {
|
|
39
|
+
isAllSelected = false;
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return isAllSelected;
|
|
44
|
+
}
|
|
45
|
+
isIndeterminate() {
|
|
46
|
+
let isIndeterminate = false;
|
|
47
|
+
for (const key of this.availableKeys.values()) {
|
|
48
|
+
if (this.values.has(key)) {
|
|
49
|
+
isIndeterminate = true;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return isIndeterminate;
|
|
54
|
+
}
|
|
55
|
+
selectAll() {
|
|
56
|
+
for (const key of this.availableKeys.values()) {
|
|
57
|
+
this.values.add(key);
|
|
58
|
+
this.emit(SelectableRows.TOGGLE_EVENT, key);
|
|
59
|
+
}
|
|
60
|
+
this.emit(SelectableRows.SELECT_ALL_EVENT);
|
|
61
|
+
}
|
|
62
|
+
clearAll() {
|
|
63
|
+
const keys = Array.from(this.values.values());
|
|
64
|
+
this.values.clear();
|
|
65
|
+
for (const key of keys) {
|
|
66
|
+
this.emit(SelectableRows.TOGGLE_EVENT, key);
|
|
67
|
+
}
|
|
68
|
+
this.emit(SelectableRows.SELECT_ALL_EVENT);
|
|
69
|
+
}
|
|
70
|
+
clearAllAvailable() {
|
|
71
|
+
for (const key of this.availableKeys.values()) {
|
|
72
|
+
this.values.delete(key);
|
|
73
|
+
this.emit(SelectableRows.TOGGLE_EVENT, key);
|
|
74
|
+
}
|
|
75
|
+
this.emit(SelectableRows.SELECT_ALL_EVENT);
|
|
76
|
+
}
|
|
77
|
+
toggle(selected, row) {
|
|
78
|
+
if (this.isPressedShift && this.values.size > 0 && this.lastSelectedRow && (selected ? this.values.has(this.lastSelectedRow) : true)) {
|
|
79
|
+
let select = false;
|
|
80
|
+
for (const item of this.availableKeys.values()) {
|
|
81
|
+
if (!select && (item === row[UNIQ_ROW_KEY] || item === this.lastSelectedRow)) {
|
|
82
|
+
select = true;
|
|
83
|
+
this.toggleOneRow(selected, item);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (select) {
|
|
87
|
+
this.toggleOneRow(selected, item);
|
|
88
|
+
}
|
|
89
|
+
if (select && (item === row[UNIQ_ROW_KEY] || item === this.lastSelectedRow)) {
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
} else {
|
|
94
|
+
this.toggleOneRow(selected, row[UNIQ_ROW_KEY]);
|
|
95
|
+
}
|
|
96
|
+
this.lastSelectedRow = row[UNIQ_ROW_KEY];
|
|
97
|
+
}
|
|
98
|
+
toggleOneRow(isSelected, key) {
|
|
99
|
+
if (isSelected) {
|
|
100
|
+
if (this.values.size === 0) {
|
|
101
|
+
this.emit(SelectableRows.SELECT_ALL_EVENT);
|
|
102
|
+
}
|
|
103
|
+
this.values.add(key);
|
|
104
|
+
if (this.values.size === this.availableKeys.size) {
|
|
105
|
+
this.emit(SelectableRows.SELECT_ALL_EVENT);
|
|
106
|
+
}
|
|
107
|
+
} else {
|
|
108
|
+
if (this.values.size === this.availableKeys.size) {
|
|
109
|
+
this.emit(SelectableRows.SELECT_ALL_EVENT);
|
|
110
|
+
}
|
|
111
|
+
this.values.delete(key);
|
|
112
|
+
if (this.values.size === 0) {
|
|
113
|
+
this.emit(SelectableRows.SELECT_ALL_EVENT);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
this.emit(SelectableRows.TOGGLE_EVENT, key);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
_defineProperty(SelectableRows, "TOGGLE_EVENT", "toggle_selected_row");
|
|
120
|
+
_defineProperty(SelectableRows, "SELECT_ALL_EVENT", "select_all_selected_rows");
|
|
121
|
+
export {
|
|
122
|
+
SelectableRows
|
|
123
|
+
};
|
|
@@ -2,6 +2,7 @@ import type { Intergalactic } from '@semcore/core';
|
|
|
2
2
|
import type * as React from 'react';
|
|
3
3
|
import type { DataTableCellProps, Theme } from './Cell.types';
|
|
4
4
|
import type { DTRow, RowPropsInner } from './Row.types';
|
|
5
|
+
import type { ISelectedRows } from '../../store/SelectableRows';
|
|
5
6
|
import type { ACCORDION } from '../DataTable/DataTable';
|
|
6
7
|
import type { DataRowItem, DTUse, VirtualScroll, DataTableProps, DataTableData } from '../DataTable/DataTable.types';
|
|
7
8
|
import type { DTColumn } from '../Head/Column.types';
|
|
@@ -67,7 +68,7 @@ export type BodyPropsInner<Data extends DataTableData, UniqKeyType> = DataTableB
|
|
|
67
68
|
renderCell?: (props: CellRenderProps<Data[number], UniqKeyType>) => React.ReactNode | Record<string, any>;
|
|
68
69
|
onBackFromAccordion: (colName: string) => void;
|
|
69
70
|
stickyHeader?: boolean;
|
|
70
|
-
selectedRows?: UniqKeyType[]
|
|
71
|
+
selectedRows?: UniqKeyType[] | ISelectedRows<UniqKeyType>;
|
|
71
72
|
onSelectRow?: (isSelect: boolean, selectedRowIndex: number, row: DTRow<UniqKeyType>, event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
72
73
|
renderEmptyData: () => React.ReactNode;
|
|
73
74
|
sideIndents?: 'wide';
|
|
@@ -28,8 +28,6 @@ export declare class RowRoot<Data extends DataTableData, UniqKeyType> extends Co
|
|
|
28
28
|
componentWillUnmount(): void;
|
|
29
29
|
setAccordion(): void;
|
|
30
30
|
cellHasAccordion(cellValue?: DTValue | MergedColumnsCell | MergedRowsCell): cellValue is DTValue;
|
|
31
|
-
handleSelectRow: (value: boolean, event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
32
|
-
handleClickCheckbox: (value: boolean) => (event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
33
31
|
handleBackFromAccordion: (e: React.KeyboardEvent) => void;
|
|
34
32
|
handleExpandRow: (row: DTRow<UniqKeyType>, index: number) => void;
|
|
35
33
|
closeAccordion: (row: DTRow<UniqKeyType>, closeDuration: number) => void;
|
|
@@ -4,6 +4,7 @@ import type { CellRenderProps } from './Body.types';
|
|
|
4
4
|
import type { DataTableCellProps, Theme } from './Cell.types';
|
|
5
5
|
import type { MergedColumnsCell, MergedRowsCell } from './MergedCells';
|
|
6
6
|
import type { RowRoot } from './Row';
|
|
7
|
+
import type { ISelectedRows } from '../../store/SelectableRows';
|
|
7
8
|
import type { ACCORDION, GRID_ROW_INDEX, IS_EMPTY_DATA_ROW, ROW_GROUP, ROW_INDEX, UNIQ_ROW_KEY } from '../DataTable/DataTable';
|
|
8
9
|
import type { DTValue, DTUse, DataTableData, VirtualScroll, DataRowItem, DataTableProps } from '../DataTable/DataTable.types';
|
|
9
10
|
import type { DTColumn } from '../Head/Column.types';
|
|
@@ -42,7 +43,7 @@ export type RowPropsInner<Data extends DataTableData, UniqKeyType> = JSX.Intrins
|
|
|
42
43
|
onExpandRow: (expandedRow: DTRow<UniqKeyType>) => void;
|
|
43
44
|
gridTemplateAreas: string[];
|
|
44
45
|
gridTemplateColumns: string[];
|
|
45
|
-
selectedRows?: UniqKeyType[]
|
|
46
|
+
selectedRows?: UniqKeyType[] | ISelectedRows<UniqKeyType>;
|
|
46
47
|
onSelectRow?: (isSelect: boolean, selectedRowIndex: number, row: DTRow<UniqKeyType>, event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
47
48
|
inert?: '';
|
|
48
49
|
accordionDuration: number | [number, number];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { ISelectedRows } from '../../store/SelectableRows';
|
|
3
|
+
import type { RowRoot } from '../Body/Row';
|
|
4
|
+
import type { DTRow } from '../Body/Row.types';
|
|
5
|
+
import type { DataTableData } from '../DataTable/DataTable.types';
|
|
6
|
+
import type { DTColumn } from '../Head/Column.types';
|
|
7
|
+
type RowGroupProps<Data extends DataTableData, UniqKeyType> = {
|
|
8
|
+
rows: DTRow<UniqKeyType>[];
|
|
9
|
+
selectedRows?: UniqKeyType[] | ISelectedRows<UniqKeyType>;
|
|
10
|
+
columns: DTColumn[];
|
|
11
|
+
startIndex: number;
|
|
12
|
+
rowIndex: number;
|
|
13
|
+
handleRef: (index: number, row: DTRow<UniqKeyType>) => (node: HTMLElement | null) => void;
|
|
14
|
+
handleComponentRef: (row: DTRow<UniqKeyType>) => (component: RowRoot<Data, UniqKeyType> | null) => void;
|
|
15
|
+
};
|
|
16
|
+
export declare class RowGroup<Data extends DataTableData, UniqKeyType> extends React.PureComponent<RowGroupProps<Data, UniqKeyType>> {
|
|
17
|
+
render(): React.ReactNode;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
@@ -3,6 +3,7 @@ import type { Intergalactic } from '@semcore/core';
|
|
|
3
3
|
import type Tooltip from '@semcore/tooltip';
|
|
4
4
|
import type * as React from 'react';
|
|
5
5
|
import type { ACCORDION, ROW_GROUP, UNIQ_ROW_KEY } from './DataTable';
|
|
6
|
+
import type { ISelectedRows } from '../../store/SelectableRows';
|
|
6
7
|
import type { DataTableBodyProps } from '../Body/Body.types';
|
|
7
8
|
import type { DTRow, RowPropsInner } from '../Body/Row.types';
|
|
8
9
|
import type { DataTableColumnProps } from '../Head/Column.types';
|
|
@@ -31,7 +32,7 @@ export interface DTValue {
|
|
|
31
32
|
}
|
|
32
33
|
export type DataTableData = DataRowItem[];
|
|
33
34
|
export type DTUse = 'primary' | 'secondary';
|
|
34
|
-
export type Sizes = Pick<BoxProps, 'w' | 'wMax' | 'wMin' | 'h' | 'hMax' | 'hMin'
|
|
35
|
+
export type Sizes = Partial<Pick<BoxProps, 'w' | 'wMax' | 'wMin' | 'h' | 'hMax' | 'hMin'>>;
|
|
35
36
|
export type DataTableProps<Data extends DataTableData, UniqKey extends (Data[number] extends {
|
|
36
37
|
[ROW_GROUP]: DataTableData;
|
|
37
38
|
} ? keyof Data[number][typeof ROW_GROUP][number] : keyof Data[number]), UniqKeyType extends (Data[number] extends {
|
|
@@ -88,16 +89,6 @@ export type DataTableProps<Data extends DataTableData, UniqKey extends (Data[num
|
|
|
88
89
|
* Name of a unique key for each row data item
|
|
89
90
|
*/
|
|
90
91
|
uniqueRowKey?: UniqKey;
|
|
91
|
-
/**
|
|
92
|
-
* List of selected rows (uniqIds from a data array)
|
|
93
|
-
*/
|
|
94
|
-
selectedRows?: UniqKeyType[];
|
|
95
|
-
/** Callback when row selection changes */
|
|
96
|
-
onSelectedRowsChange?: (selectedRows: UniqKeyType[], event?: React.SyntheticEvent<HTMLElement>, opts?: {
|
|
97
|
-
selectedRowIndex: number;
|
|
98
|
-
isSelected: boolean;
|
|
99
|
-
row: DTRow<UniqKeyType>;
|
|
100
|
-
}) => void;
|
|
101
92
|
/**
|
|
102
93
|
* For custom empty data widget.
|
|
103
94
|
*/
|
|
@@ -154,7 +145,25 @@ export type DataTableProps<Data extends DataTableData, UniqKey extends (Data[num
|
|
|
154
145
|
* Handling table container resizing.
|
|
155
146
|
*/
|
|
156
147
|
onResize?: ResizeObserverCallback;
|
|
157
|
-
}
|
|
148
|
+
} & ({
|
|
149
|
+
/**
|
|
150
|
+
* List of selected rows (uniqIds from a data array)
|
|
151
|
+
* @deprecated use ISelectedRows for this property instead of an array.
|
|
152
|
+
*/
|
|
153
|
+
selectedRows?: UniqKeyType[];
|
|
154
|
+
/** Callback when row selection changes */
|
|
155
|
+
onSelectedRowsChange?: (selectedRows: UniqKeyType[], event?: React.SyntheticEvent<HTMLElement>, opts?: {
|
|
156
|
+
selectedRowIndex: number;
|
|
157
|
+
isSelected: boolean;
|
|
158
|
+
row: DTRow<UniqKeyType>;
|
|
159
|
+
}) => void;
|
|
160
|
+
} | {
|
|
161
|
+
/**
|
|
162
|
+
* Entity of selected rows (uniq id from them)
|
|
163
|
+
* This is mutable! variable because of table performance. Don't change the link on it.
|
|
164
|
+
*/
|
|
165
|
+
selectedRows?: ISelectedRows<UniqKeyType>;
|
|
166
|
+
});
|
|
158
167
|
export type ColumnItemConfig = Intergalactic.InternalTypings.EfficientOmit<Intergalactic.InternalTypings.ComponentProps<'div' | typeof Tooltip, 'div', DataTableColumnProps, {}, [
|
|
159
168
|
]>, 'children'> & {
|
|
160
169
|
children: React.ReactNode | React.FC;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ColumnPropsInner, DTColumn } from './Column.types';
|
|
2
|
+
import type { ISelectedRows } from '../../store/SelectableRows';
|
|
2
3
|
import type { BodyPropsInner } from '../Body/Body.types';
|
|
3
4
|
import type { DataTableCellProps } from '../Body/Cell.types';
|
|
4
5
|
import type { DTRow } from '../Body/Row.types';
|
|
@@ -45,7 +46,7 @@ export type HeadPropsInner<Data extends DataTableData, UniqKey extends (Data[num
|
|
|
45
46
|
gridTemplateAreas: string[];
|
|
46
47
|
sideIndents?: 'wide';
|
|
47
48
|
totalRows: number;
|
|
48
|
-
selectedRows?: UniqKeyType[]
|
|
49
|
+
selectedRows?: UniqKeyType[] | ISelectedRows<UniqKeyType>;
|
|
49
50
|
onChangeSelectAll?: (selectedRows: UniqKeyType[], event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
50
51
|
flatRows: DTRow<UniqKeyType>[];
|
|
51
52
|
getFixedStyle: (cell: Pick<DTColumn, 'name' | 'fixed'>) => [side: 'left' | 'right', style: string | number] | [side: undefined, style: undefined];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ISelectedRows } from '../../store/SelectableRows';
|
|
3
|
+
import type { Theme } from '../Body/Cell.types';
|
|
4
|
+
import type { DTRow } from '../Body/Row.types';
|
|
5
|
+
type RowSelectorProps<UniqKeyType> = {
|
|
6
|
+
row: DTRow<UniqKeyType>;
|
|
7
|
+
rowIndex: number;
|
|
8
|
+
gridRowIndex: number;
|
|
9
|
+
expanded: boolean;
|
|
10
|
+
withAccordion: boolean;
|
|
11
|
+
uid: string;
|
|
12
|
+
theme?: Theme;
|
|
13
|
+
isCellHidden?: boolean;
|
|
14
|
+
isAccordionRow?: boolean;
|
|
15
|
+
selectedRows?: UniqKeyType[] | ISelectedRows<UniqKeyType>;
|
|
16
|
+
onSelectRow?: (isSelect: boolean, selectedRowIndex: number, row: DTRow<UniqKeyType>, event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
17
|
+
};
|
|
18
|
+
type State = {
|
|
19
|
+
checked: boolean;
|
|
20
|
+
};
|
|
21
|
+
export declare class RowSelector<UniqKeyType> extends React.PureComponent<RowSelectorProps<UniqKeyType>, State> {
|
|
22
|
+
state: State;
|
|
23
|
+
private unsubscribeToggle;
|
|
24
|
+
constructor(props: RowSelectorProps<UniqKeyType>);
|
|
25
|
+
componentDidMount(): void;
|
|
26
|
+
componentWillUnmount(): void;
|
|
27
|
+
handleSelectRow: (value: boolean, event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
28
|
+
handleClickCheckbox: (value: boolean) => (event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
29
|
+
render(): React.JSX.Element;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
package/lib/types/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { CellRenderProps } from './components/Body/Body.types';
|
|
|
4
4
|
import { MergedRowsCell, MergedColumnsCell } from './components/Body/MergedCells';
|
|
5
5
|
import { DataTable, ACCORDION, ROW_GROUP } from './components/DataTable/DataTable';
|
|
6
6
|
import type { DataTableSort, DataTableType, DataTableData, DataTableProps, DataTableChangeSort, ColumnGroupConfig, ColumnItemConfig } from './components/DataTable/DataTable.types';
|
|
7
|
+
import { SelectableRows } from './store/SelectableRows';
|
|
7
8
|
declare const wrapDataTable: <PropsExtending extends {}>(wrapper: (props: Intergalactic.InternalTypings.UntypeRefAndTag<Intergalactic.InternalTypings.ComponentPropsNesting<DataTableType>> & PropsExtending) => React.ReactNode) => DataTableType;
|
|
8
|
-
export { MergedRowsCell, MergedColumnsCell, DataTable, ACCORDION, ROW_GROUP, wrapDataTable, };
|
|
9
|
+
export { MergedRowsCell, MergedColumnsCell, DataTable, ACCORDION, ROW_GROUP, wrapDataTable, SelectableRows, };
|
|
9
10
|
export type { DataTableSort, DataTableData, DataTableProps, DataTableChangeSort, ColumnGroupConfig, ColumnItemConfig, CellRenderProps, };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import EventEmitter from '@semcore/core/lib/utils/eventEmitter';
|
|
2
|
+
import type { DTRow } from '../components/Body/Row.types';
|
|
3
|
+
export interface ISelectedRows<UniqKeyType> {
|
|
4
|
+
/** Flag for multiple rows selection */
|
|
5
|
+
isPressedShift: boolean;
|
|
6
|
+
/** Method for set keys from data. Call it in DataTable, on data changes */
|
|
7
|
+
setAvailableKeys(keys: UniqKeyType[]): void;
|
|
8
|
+
/** Get the list of keys */
|
|
9
|
+
get(): UniqKeyType[];
|
|
10
|
+
/** Check if the row is selected */
|
|
11
|
+
isChecked(key: UniqKeyType): boolean;
|
|
12
|
+
/** Replace the list of keys. */
|
|
13
|
+
replace(value: UniqKeyType[]): void;
|
|
14
|
+
/** Check if the key exists in selected rows */
|
|
15
|
+
has(value: UniqKeyType): boolean;
|
|
16
|
+
/** Select all handler */
|
|
17
|
+
selectAll(): void;
|
|
18
|
+
/** Clear all handler */
|
|
19
|
+
clearAll(): void;
|
|
20
|
+
/** Clear all available values (rows on current page) handler */
|
|
21
|
+
clearAllAvailable(): void;
|
|
22
|
+
/** Toggle selection of row */
|
|
23
|
+
toggle(selected: boolean, row: DTRow<UniqKeyType>): void;
|
|
24
|
+
/** Check if all rows selected */
|
|
25
|
+
isAllSelected(): boolean;
|
|
26
|
+
/** Check if at least one row selected */
|
|
27
|
+
isIndeterminate(): boolean;
|
|
28
|
+
/** Subscribe to changes */
|
|
29
|
+
subscribe: EventEmitter<Events<UniqKeyType>>['subscribe'];
|
|
30
|
+
}
|
|
31
|
+
type Events<UniqRowKeyType> = {
|
|
32
|
+
[SelectableRows.TOGGLE_EVENT]: (val: UniqRowKeyType) => void;
|
|
33
|
+
[SelectableRows.SELECT_ALL_EVENT]: () => void;
|
|
34
|
+
};
|
|
35
|
+
export declare class SelectableRows<UniqRowKeyType> extends EventEmitter<Events<UniqRowKeyType>> implements ISelectedRows<UniqRowKeyType> {
|
|
36
|
+
private readonly values;
|
|
37
|
+
private availableKeys;
|
|
38
|
+
private lastSelectedRow;
|
|
39
|
+
static TOGGLE_EVENT: "toggle_selected_row";
|
|
40
|
+
static SELECT_ALL_EVENT: "select_all_selected_rows";
|
|
41
|
+
isPressedShift: boolean;
|
|
42
|
+
constructor(initValues?: UniqRowKeyType[]);
|
|
43
|
+
setAvailableKeys(value: UniqRowKeyType[]): void;
|
|
44
|
+
get(): UniqRowKeyType[];
|
|
45
|
+
isChecked(key: UniqRowKeyType): boolean;
|
|
46
|
+
replace(value: UniqRowKeyType[]): void;
|
|
47
|
+
has(value: UniqRowKeyType): boolean;
|
|
48
|
+
isAllSelected(): boolean;
|
|
49
|
+
isIndeterminate(): boolean;
|
|
50
|
+
selectAll(): void;
|
|
51
|
+
clearAll(): void;
|
|
52
|
+
clearAllAvailable(): void;
|
|
53
|
+
toggle(selected: boolean, row: DTRow<UniqRowKeyType>): void;
|
|
54
|
+
private toggleOneRow;
|
|
55
|
+
}
|
|
56
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@semcore/data-table",
|
|
3
3
|
"description": "Semrush DataTable Component",
|
|
4
|
-
"version": "17.0.0-prerelease.
|
|
4
|
+
"version": "17.0.0-prerelease.36",
|
|
5
5
|
"main": "lib/cjs/index.js",
|
|
6
6
|
"module": "lib/es6/index.js",
|
|
7
7
|
"typings": "lib/types/index.d.ts",
|
|
@@ -14,28 +14,28 @@
|
|
|
14
14
|
"types": "./lib/types/index.d.ts"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@semcore/button": "^17.0.0-prerelease.
|
|
18
|
-
"@semcore/checkbox": "^17.0.0-prerelease.
|
|
19
|
-
"@semcore/spin": "^17.0.0-prerelease.
|
|
20
|
-
"@semcore/tooltip": "^17.0.0-prerelease.
|
|
21
|
-
"@semcore/widget-empty": "^17.0.0-prerelease.
|
|
17
|
+
"@semcore/button": "^17.0.0-prerelease.36",
|
|
18
|
+
"@semcore/checkbox": "^17.0.0-prerelease.36",
|
|
19
|
+
"@semcore/spin": "^17.0.0-prerelease.36",
|
|
20
|
+
"@semcore/tooltip": "^17.0.0-prerelease.36",
|
|
21
|
+
"@semcore/widget-empty": "^17.0.0-prerelease.36"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/node": "18.16.15",
|
|
25
25
|
"csstype": "3.1.3",
|
|
26
|
+
"@semcore/base-trigger": "17.0.0-prerelease.36",
|
|
27
|
+
"@semcore/typography": "17.0.0-prerelease.36",
|
|
28
|
+
"@semcore/dropdown-menu": "17.0.0-prerelease.36",
|
|
29
|
+
"@semcore/divider": "17.0.0-prerelease.36",
|
|
26
30
|
"@semcore/testing-utils": "1.0.0",
|
|
27
|
-
"@semcore/
|
|
28
|
-
"@semcore/
|
|
29
|
-
"@semcore/
|
|
30
|
-
"@semcore/
|
|
31
|
-
"@semcore/
|
|
32
|
-
"@semcore/
|
|
33
|
-
"@semcore/
|
|
34
|
-
"@semcore/
|
|
35
|
-
"@semcore/spin-container": "17.0.0-prerelease.31",
|
|
36
|
-
"@semcore/tooltip": "17.0.0-prerelease.31",
|
|
37
|
-
"@semcore/base-components": "17.0.0-prerelease.31",
|
|
38
|
-
"@semcore/icon": "16.7.2-prerelease.31"
|
|
31
|
+
"@semcore/skeleton": "17.0.0-prerelease.36",
|
|
32
|
+
"@semcore/progress-bar": "17.0.0-prerelease.36",
|
|
33
|
+
"@semcore/accordion": "17.0.0-prerelease.36",
|
|
34
|
+
"@semcore/spin": "17.0.0-prerelease.36",
|
|
35
|
+
"@semcore/spin-container": "17.0.0-prerelease.36",
|
|
36
|
+
"@semcore/tooltip": "17.0.0-prerelease.36",
|
|
37
|
+
"@semcore/base-components": "17.0.0-prerelease.36",
|
|
38
|
+
"@semcore/icon": "16.7.2-prerelease.36"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"@semcore/base-components": "^17.0.0 || ^17.0.0-0",
|