@gravity-ui/react-data-table 1.3.0 → 2.0.1
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/build/esm/lib/DataTable.d.ts +71 -95
- package/build/esm/lib/DataTable.js +5 -90
- package/build/esm/lib/DataTable.scss +7 -10
- package/build/esm/lib/types.d.ts +8 -8
- package/build/esm/lib/util.d.ts +8 -2
- package/package.json +62 -63
- package/CHANGELOG.md +0 -83
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import PropTypes from 'prop-types';
|
|
2
1
|
import * as React from 'react';
|
|
3
2
|
import ReactList from 'react-list';
|
|
4
3
|
import './DataTable.scss';
|
|
@@ -35,14 +34,6 @@ interface TableHeadProps<T> {
|
|
|
35
34
|
onDataRowsHeightChange?: StickyHeadProps<T>['onDataRowsHeightChange'];
|
|
36
35
|
}
|
|
37
36
|
declare class TableHead<T> extends React.Component<TableHeadProps<T>> {
|
|
38
|
-
static propTypes: {
|
|
39
|
-
headColumns: PropTypes.Validator<any[]>;
|
|
40
|
-
dataColumns: PropTypes.Validator<any[]>;
|
|
41
|
-
displayIndices: PropTypes.Validator<boolean>;
|
|
42
|
-
onSort: PropTypes.Requireable<(...args: any[]) => any>;
|
|
43
|
-
onColumnsUpdated: PropTypes.Requireable<(...args: any[]) => any>;
|
|
44
|
-
renderedDataRows: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
45
|
-
};
|
|
46
37
|
_dataRowsRef: HTMLTableSectionElement | null;
|
|
47
38
|
dataRowsHeightObserver?: HeightObserver;
|
|
48
39
|
renderedColumns: HTMLTableHeaderCellElement[];
|
|
@@ -65,6 +56,7 @@ interface StickyHeadProps<T> {
|
|
|
65
56
|
displayIndices?: Settings['displayIndices'];
|
|
66
57
|
onSort?: TableProps<T>['onSort'];
|
|
67
58
|
top: number;
|
|
59
|
+
renderedDataRows: React.ReactNode;
|
|
68
60
|
onDataRowsHeightChange: (height: number) => void;
|
|
69
61
|
}
|
|
70
62
|
interface StickyHeadState {
|
|
@@ -73,11 +65,6 @@ interface StickyHeadState {
|
|
|
73
65
|
style?: React.CSSProperties;
|
|
74
66
|
}
|
|
75
67
|
declare class StickyHead<T> extends React.Component<StickyHeadProps<T>, StickyHeadState> {
|
|
76
|
-
static propTypes: {
|
|
77
|
-
mode: PropTypes.Requireable<string>;
|
|
78
|
-
top: PropTypes.Requireable<number>;
|
|
79
|
-
renderedDataRows: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
80
|
-
};
|
|
81
68
|
static defaultProps: {
|
|
82
69
|
top: number;
|
|
83
70
|
};
|
|
@@ -104,7 +91,7 @@ interface StickyFooterProps<T> {
|
|
|
104
91
|
bottom?: number;
|
|
105
92
|
onMovingHeightChange: (height: number) => void;
|
|
106
93
|
}
|
|
107
|
-
|
|
94
|
+
type StickyFooterState = StickyHeadState;
|
|
108
95
|
declare class StickyFooter<T> extends React.PureComponent<StickyFooterProps<T>, StickyFooterState> {
|
|
109
96
|
static defaultProps: {
|
|
110
97
|
bottom: number;
|
|
@@ -157,23 +144,6 @@ interface TableState {
|
|
|
157
144
|
};
|
|
158
145
|
}
|
|
159
146
|
declare class Table<T> extends React.PureComponent<TableProps<T>, TableState> {
|
|
160
|
-
static propTypes: {
|
|
161
|
-
className: PropTypes.Requireable<string>;
|
|
162
|
-
settings: PropTypes.Requireable<object>;
|
|
163
|
-
refs: PropTypes.Requireable<object>;
|
|
164
|
-
headerData: PropTypes.Requireable<any[]>;
|
|
165
|
-
data: PropTypes.Requireable<any[]>;
|
|
166
|
-
footerData: PropTypes.Requireable<any[]>;
|
|
167
|
-
columns: PropTypes.Requireable<object>;
|
|
168
|
-
emptyDataMessage: PropTypes.Requireable<string>;
|
|
169
|
-
onRowClick: PropTypes.Requireable<(...args: any[]) => any>;
|
|
170
|
-
rowClassName: PropTypes.Requireable<(...args: any[]) => any>;
|
|
171
|
-
rowKey: PropTypes.Requireable<(...args: any[]) => any>;
|
|
172
|
-
startIndex: PropTypes.Requireable<number>;
|
|
173
|
-
onSort: PropTypes.Requireable<(...args: any[]) => any>;
|
|
174
|
-
renderEmptyRow: PropTypes.Requireable<(...args: any[]) => any>;
|
|
175
|
-
getColSpansOfRow: PropTypes.Requireable<(...args: any[]) => any>;
|
|
176
|
-
};
|
|
177
147
|
state: TableState;
|
|
178
148
|
_onWindowResize?: () => void;
|
|
179
149
|
_body?: HTMLDivElement;
|
|
@@ -226,63 +196,13 @@ interface CellProps<T> {
|
|
|
226
196
|
footer?: boolean;
|
|
227
197
|
headerData?: boolean;
|
|
228
198
|
}
|
|
229
|
-
|
|
199
|
+
type InternalProps<T> = DataTableProps<T> & typeof DataTableView.defaultProps;
|
|
230
200
|
interface DataTableViewState<T> extends SortOrderWithSortColumns {
|
|
231
201
|
indexColumn?: Column<T>;
|
|
232
202
|
settings: ReturnType<typeof DataTableView.calculateSettings>;
|
|
233
203
|
}
|
|
234
|
-
|
|
204
|
+
type HeadPositionInner = HeadPosition | false;
|
|
235
205
|
declare class DataTableView<T> extends React.Component<DataTableProps<T>, DataTableViewState<T>> {
|
|
236
|
-
static propTypes: {
|
|
237
|
-
getColSpansOfRow: PropTypes.Requireable<(...args: any[]) => any>;
|
|
238
|
-
columns: PropTypes.Validator<any[]>;
|
|
239
|
-
headerData: PropTypes.Requireable<any[]>;
|
|
240
|
-
data: PropTypes.Validator<any[]>;
|
|
241
|
-
footerData: PropTypes.Requireable<any[]>;
|
|
242
|
-
startIndex: PropTypes.Requireable<number>;
|
|
243
|
-
emptyDataMessage: PropTypes.Requireable<string>;
|
|
244
|
-
renderEmptyRow: PropTypes.Requireable<(...args: any[]) => any>;
|
|
245
|
-
rowClassName: PropTypes.Requireable<(...args: any[]) => any>;
|
|
246
|
-
rowKey: PropTypes.Requireable<(...args: any[]) => any>;
|
|
247
|
-
visibleRowIndex: PropTypes.Requireable<(...args: any[]) => any>;
|
|
248
|
-
initialSortOrder: PropTypes.Requireable<PropTypes.InferProps<{
|
|
249
|
-
columnId: PropTypes.Requireable<string>;
|
|
250
|
-
order: PropTypes.Requireable<number>;
|
|
251
|
-
}> | (PropTypes.InferProps<{
|
|
252
|
-
columnId: PropTypes.Requireable<string>;
|
|
253
|
-
order: PropTypes.Requireable<number>;
|
|
254
|
-
}> | null | undefined)[]>;
|
|
255
|
-
sortOrder: PropTypes.Requireable<PropTypes.InferProps<{
|
|
256
|
-
columnId: PropTypes.Requireable<string>;
|
|
257
|
-
order: PropTypes.Requireable<number>;
|
|
258
|
-
}> | (PropTypes.InferProps<{
|
|
259
|
-
columnId: PropTypes.Requireable<string>;
|
|
260
|
-
order: PropTypes.Requireable<number>;
|
|
261
|
-
}> | null | undefined)[]>;
|
|
262
|
-
settings: PropTypes.Requireable<PropTypes.InferProps<{
|
|
263
|
-
displayIndices: PropTypes.Requireable<boolean>;
|
|
264
|
-
dynamicRender: PropTypes.Requireable<boolean>;
|
|
265
|
-
dynamicRenderType: PropTypes.Requireable<string>;
|
|
266
|
-
dynamicRenderUseStaticSize: PropTypes.Requireable<boolean>;
|
|
267
|
-
dynamicRenderThreshold: PropTypes.Requireable<number>;
|
|
268
|
-
dynamicRenderMinSize: PropTypes.Requireable<number>;
|
|
269
|
-
dynamicRenderScrollParentGetter: PropTypes.Requireable<(...args: any[]) => any>;
|
|
270
|
-
dynamicRenderScrollParentViewportSizeGetter: PropTypes.Requireable<(...args: any[]) => any>;
|
|
271
|
-
dynamicItemSizeEstimator: PropTypes.Requireable<(...args: any[]) => any>;
|
|
272
|
-
dynamicItemSizeGetter: PropTypes.Requireable<(...args: any[]) => any>;
|
|
273
|
-
stickyHead: PropTypes.Requireable<string | boolean>;
|
|
274
|
-
stickyTop: PropTypes.Requireable<string | number>;
|
|
275
|
-
sortable: PropTypes.Requireable<boolean>;
|
|
276
|
-
externalSort: PropTypes.Requireable<boolean>;
|
|
277
|
-
highlightRows: PropTypes.Requireable<boolean>;
|
|
278
|
-
stripedRows: PropTypes.Requireable<boolean>;
|
|
279
|
-
headerMod: PropTypes.Requireable<string>;
|
|
280
|
-
defaultOrder: PropTypes.Requireable<number>;
|
|
281
|
-
syncHeadOnResize: PropTypes.Requireable<boolean>;
|
|
282
|
-
}>>;
|
|
283
|
-
theme: PropTypes.Requireable<string>;
|
|
284
|
-
onSort: PropTypes.Requireable<(...args: any[]) => any>;
|
|
285
|
-
};
|
|
286
206
|
static defaultProps: {
|
|
287
207
|
startIndex: number;
|
|
288
208
|
emptyDataMessage: string;
|
|
@@ -328,9 +248,65 @@ declare class DataTableView<T> extends React.Component<DataTableProps<T>, DataTa
|
|
|
328
248
|
headerMod?: "pre" | "multiline" | undefined;
|
|
329
249
|
};
|
|
330
250
|
static getIndexColumn<T extends HasHeaderFooterIndex>({ startIndex, data, visibleRowIndex, }: InternalProps<T>): Column<T>;
|
|
331
|
-
static getDerivedStateFromProps<T>(nextProps: InternalProps<T>): {
|
|
332
|
-
|
|
333
|
-
|
|
251
|
+
static getDerivedStateFromProps<T extends HasHeaderFooterIndex>(nextProps: InternalProps<T>): {
|
|
252
|
+
settings: {
|
|
253
|
+
stickyHead: HeadPositionInner;
|
|
254
|
+
stickyFooter: HeadPositionInner;
|
|
255
|
+
displayIndices: boolean;
|
|
256
|
+
stickyTop?: number | "auto" | undefined;
|
|
257
|
+
syncHeadOnResize?: boolean | undefined;
|
|
258
|
+
stickyBottom?: number | "auto" | undefined;
|
|
259
|
+
dynamicRender?: boolean | undefined;
|
|
260
|
+
dynamicInnerRef?: React.Ref<ReactList> | undefined;
|
|
261
|
+
dynamicRenderType?: "simple" | "uniform" | "variable" | undefined;
|
|
262
|
+
dynamicItemSizeEstimator?: ((index: number, cache: {}) => number) | undefined;
|
|
263
|
+
dynamicItemSizeGetter?: ((index: number) => number) | undefined;
|
|
264
|
+
dynamicRenderMinSize: number;
|
|
265
|
+
dynamicRenderUseStaticSize?: boolean | undefined;
|
|
266
|
+
dynamicRenderThreshold?: number | undefined;
|
|
267
|
+
dynamicRenderScrollParentGetter?: (() => JSX.Element) | undefined;
|
|
268
|
+
dynamicRenderScrollParentViewportSizeGetter?: (() => number) | undefined;
|
|
269
|
+
sortable: boolean;
|
|
270
|
+
externalSort: boolean;
|
|
271
|
+
disableSortReset?: boolean | undefined;
|
|
272
|
+
defaultOrder: OrderType;
|
|
273
|
+
highlightRows?: boolean | undefined;
|
|
274
|
+
stripedRows?: boolean | undefined;
|
|
275
|
+
headerMod?: "pre" | "multiline" | undefined;
|
|
276
|
+
};
|
|
277
|
+
indexColumn: false | Column<T>;
|
|
278
|
+
} | {
|
|
279
|
+
sortOrder: {};
|
|
280
|
+
sortColumns: never[];
|
|
281
|
+
settings: {
|
|
282
|
+
stickyHead: HeadPositionInner;
|
|
283
|
+
stickyFooter: HeadPositionInner;
|
|
284
|
+
displayIndices: boolean;
|
|
285
|
+
stickyTop?: number | "auto" | undefined;
|
|
286
|
+
syncHeadOnResize?: boolean | undefined;
|
|
287
|
+
stickyBottom?: number | "auto" | undefined;
|
|
288
|
+
dynamicRender?: boolean | undefined;
|
|
289
|
+
dynamicInnerRef?: React.Ref<ReactList> | undefined;
|
|
290
|
+
dynamicRenderType?: "simple" | "uniform" | "variable" | undefined;
|
|
291
|
+
dynamicItemSizeEstimator?: ((index: number, cache: {}) => number) | undefined;
|
|
292
|
+
dynamicItemSizeGetter?: ((index: number) => number) | undefined;
|
|
293
|
+
dynamicRenderMinSize: number;
|
|
294
|
+
dynamicRenderUseStaticSize?: boolean | undefined;
|
|
295
|
+
dynamicRenderThreshold?: number | undefined;
|
|
296
|
+
dynamicRenderScrollParentGetter?: (() => JSX.Element) | undefined;
|
|
297
|
+
dynamicRenderScrollParentViewportSizeGetter?: (() => number) | undefined;
|
|
298
|
+
sortable: boolean;
|
|
299
|
+
externalSort: boolean;
|
|
300
|
+
disableSortReset?: boolean | undefined;
|
|
301
|
+
defaultOrder: OrderType;
|
|
302
|
+
highlightRows?: boolean | undefined;
|
|
303
|
+
stripedRows?: boolean | undefined;
|
|
304
|
+
headerMod?: "pre" | "multiline" | undefined;
|
|
305
|
+
};
|
|
306
|
+
indexColumn: false | Column<T>;
|
|
307
|
+
} | {
|
|
308
|
+
sortOrder: NameToOrderTypeMap;
|
|
309
|
+
sortColumns: string[];
|
|
334
310
|
settings: {
|
|
335
311
|
stickyHead: HeadPositionInner;
|
|
336
312
|
stickyFooter: HeadPositionInner;
|
|
@@ -415,27 +391,27 @@ declare class DataTableView<T> extends React.Component<DataTableProps<T>, DataTa
|
|
|
415
391
|
dataColumns: DataColumns<T>;
|
|
416
392
|
};
|
|
417
393
|
isSortEnabled: () => boolean;
|
|
418
|
-
onSort: (column?: SlimColumn
|
|
394
|
+
onSort: (column?: SlimColumn, multisort?: boolean) => void;
|
|
419
395
|
resize(): void;
|
|
420
396
|
}
|
|
421
|
-
export
|
|
397
|
+
export type ColumnExtended<T> = ReturnType<DataTableView<T>['getColumn']> & {
|
|
422
398
|
headerTitle?: string;
|
|
423
399
|
};
|
|
424
|
-
|
|
400
|
+
type HeadCellColumn<T> = ColumnExtended<T> | (Column<T> & {
|
|
425
401
|
index?: number;
|
|
426
402
|
columnIndex?: number;
|
|
427
403
|
headerTitle?: string;
|
|
428
404
|
dataColumn?: boolean;
|
|
429
405
|
});
|
|
430
|
-
|
|
406
|
+
type HeadCellsType<T> = {
|
|
431
407
|
column: HeadCellColumn<T>;
|
|
432
408
|
itemLevel: number;
|
|
433
409
|
colSpan: number;
|
|
434
410
|
rowSpan: number;
|
|
435
411
|
};
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
412
|
+
type HeadColumnsItem<T> = HeadCellsType<T>[];
|
|
413
|
+
type HeadColumns<T> = HeadColumnsItem<T>[];
|
|
414
|
+
type DataColumns<T> = ColumnExtended<T>[];
|
|
439
415
|
interface TableColumns<T> {
|
|
440
416
|
headColumns: HeadColumns<T>;
|
|
441
417
|
dataColumns: DataColumns<T>;
|
|
@@ -444,7 +420,7 @@ export interface SortOrderWithSortColumns {
|
|
|
444
420
|
sortOrder: NameToOrderTypeMap;
|
|
445
421
|
sortColumns: string[];
|
|
446
422
|
}
|
|
447
|
-
export
|
|
423
|
+
export type NameToOrderTypeMap = {
|
|
448
424
|
[colName: string]: OrderType;
|
|
449
425
|
};
|
|
450
426
|
interface State {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { __rest } from "tslib";
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
2
|
import * as React from 'react';
|
|
4
3
|
import ReactList from 'react-list';
|
|
5
4
|
import './DataTable.scss';
|
|
@@ -34,11 +33,6 @@ const ColumnSortIcon = ({ sortOrder, sortIndex, sortable, defaultOrder }) => {
|
|
|
34
33
|
return null;
|
|
35
34
|
}
|
|
36
35
|
};
|
|
37
|
-
ColumnSortIcon.propTypes = {
|
|
38
|
-
sortOrder: PropTypes.oneOf([ASCENDING, DESCENDING]),
|
|
39
|
-
sortable: PropTypes.bool,
|
|
40
|
-
defaultOrder: PropTypes.oneOf([ASCENDING, DESCENDING]),
|
|
41
|
-
};
|
|
42
36
|
class TableRow extends React.PureComponent {
|
|
43
37
|
constructor() {
|
|
44
38
|
super(...arguments);
|
|
@@ -174,14 +168,6 @@ class TableHead extends React.Component {
|
|
|
174
168
|
: undefined;
|
|
175
169
|
}
|
|
176
170
|
}
|
|
177
|
-
TableHead.propTypes = {
|
|
178
|
-
headColumns: PropTypes.array.isRequired,
|
|
179
|
-
dataColumns: PropTypes.array.isRequired,
|
|
180
|
-
displayIndices: PropTypes.bool.isRequired,
|
|
181
|
-
onSort: PropTypes.func,
|
|
182
|
-
onColumnsUpdated: PropTypes.func,
|
|
183
|
-
renderedDataRows: PropTypes.node,
|
|
184
|
-
};
|
|
185
171
|
class StickyHead extends React.Component {
|
|
186
172
|
constructor() {
|
|
187
173
|
super(...arguments);
|
|
@@ -241,11 +227,6 @@ class StickyHead extends React.Component {
|
|
|
241
227
|
}
|
|
242
228
|
}
|
|
243
229
|
}
|
|
244
|
-
StickyHead.propTypes = {
|
|
245
|
-
mode: PropTypes.oneOf([FIXED, MOVING]),
|
|
246
|
-
top: PropTypes.number,
|
|
247
|
-
renderedDataRows: PropTypes.node,
|
|
248
|
-
};
|
|
249
230
|
StickyHead.defaultProps = {
|
|
250
231
|
top: 0,
|
|
251
232
|
};
|
|
@@ -491,7 +472,7 @@ class Table extends React.PureComponent {
|
|
|
491
472
|
}
|
|
492
473
|
renderTableDynamic() {
|
|
493
474
|
const { data, settings: { dynamicInnerRef, dynamicRenderType = 'uniform', dynamicRenderUseStaticSize, dynamicRenderThreshold, dynamicRenderMinSize, dynamicRenderScrollParentGetter, dynamicRenderScrollParentViewportSizeGetter, dynamicItemSizeEstimator, dynamicItemSizeGetter, } = {}, } = this.props;
|
|
494
|
-
return (React.createElement(ReactList,
|
|
475
|
+
return (React.createElement(ReactList, { ref: dynamicInnerRef, type: dynamicRenderType, useStaticSize: dynamicRenderUseStaticSize, threshold: dynamicRenderThreshold, minSize: dynamicRenderMinSize, itemSizeEstimator: dynamicItemSizeEstimator, itemSizeGetter: dynamicItemSizeGetter, length: data.length, itemRenderer: this.renderRow, itemsRenderer: this.renderTable, scrollParentGetter: dynamicRenderScrollParentGetter, scrollParentViewportSizeGetter: dynamicRenderScrollParentViewportSizeGetter }));
|
|
495
476
|
}
|
|
496
477
|
renderTableSimple() {
|
|
497
478
|
const { data } = this.props;
|
|
@@ -515,32 +496,11 @@ class Table extends React.PureComponent {
|
|
|
515
496
|
return stickyFooter;
|
|
516
497
|
}
|
|
517
498
|
}
|
|
518
|
-
Table.propTypes = {
|
|
519
|
-
className: PropTypes.string,
|
|
520
|
-
settings: PropTypes.object,
|
|
521
|
-
refs: PropTypes.object,
|
|
522
|
-
headerData: PropTypes.array,
|
|
523
|
-
data: PropTypes.array,
|
|
524
|
-
footerData: PropTypes.array,
|
|
525
|
-
columns: PropTypes.object,
|
|
526
|
-
emptyDataMessage: PropTypes.string,
|
|
527
|
-
onRowClick: PropTypes.func,
|
|
528
|
-
rowClassName: PropTypes.func,
|
|
529
|
-
rowKey: PropTypes.func,
|
|
530
|
-
startIndex: PropTypes.number,
|
|
531
|
-
onSort: PropTypes.func,
|
|
532
|
-
renderEmptyRow: PropTypes.func,
|
|
533
|
-
getColSpansOfRow: PropTypes.func,
|
|
534
|
-
};
|
|
535
499
|
const MemoizedCell = React.memo(CellImpl);
|
|
536
500
|
function CellImpl(props) {
|
|
537
501
|
const { column, value, row, index, footer, headerData } = props;
|
|
538
502
|
return (React.createElement(React.Fragment, null, column.render({ value, row, index, footer, headerData })));
|
|
539
503
|
}
|
|
540
|
-
const sortOrderShape = {
|
|
541
|
-
columnId: PropTypes.string,
|
|
542
|
-
order: PropTypes.oneOf([ASCENDING, DESCENDING]),
|
|
543
|
-
};
|
|
544
504
|
class DataTableView extends React.Component {
|
|
545
505
|
constructor() {
|
|
546
506
|
super(...arguments);
|
|
@@ -549,14 +509,12 @@ class DataTableView extends React.Component {
|
|
|
549
509
|
this.table = node;
|
|
550
510
|
};
|
|
551
511
|
this.renderMemoizedCell = ({ column, value, row, index, footer, headerData }) => {
|
|
552
|
-
return (React.createElement(MemoizedCell,
|
|
553
|
-
column,
|
|
512
|
+
return (React.createElement(MemoizedCell, { column,
|
|
554
513
|
value,
|
|
555
514
|
row,
|
|
556
515
|
index,
|
|
557
516
|
footer,
|
|
558
|
-
headerData
|
|
559
|
-
})));
|
|
517
|
+
headerData }));
|
|
560
518
|
};
|
|
561
519
|
this.getColumn = (column, columnIndex) => {
|
|
562
520
|
const { settings } = this.state;
|
|
@@ -720,50 +678,6 @@ class DataTableView extends React.Component {
|
|
|
720
678
|
}
|
|
721
679
|
}
|
|
722
680
|
}
|
|
723
|
-
DataTableView.propTypes = {
|
|
724
|
-
getColSpansOfRow: PropTypes.func,
|
|
725
|
-
columns: PropTypes.array.isRequired,
|
|
726
|
-
headerData: PropTypes.array,
|
|
727
|
-
data: PropTypes.array.isRequired,
|
|
728
|
-
footerData: PropTypes.array,
|
|
729
|
-
startIndex: PropTypes.number,
|
|
730
|
-
emptyDataMessage: PropTypes.string,
|
|
731
|
-
renderEmptyRow: PropTypes.func,
|
|
732
|
-
rowClassName: PropTypes.func,
|
|
733
|
-
rowKey: PropTypes.func,
|
|
734
|
-
visibleRowIndex: PropTypes.func,
|
|
735
|
-
initialSortOrder: PropTypes.oneOfType([
|
|
736
|
-
PropTypes.shape(sortOrderShape),
|
|
737
|
-
PropTypes.arrayOf(PropTypes.shape(sortOrderShape)),
|
|
738
|
-
]),
|
|
739
|
-
sortOrder: PropTypes.oneOfType([
|
|
740
|
-
PropTypes.shape(sortOrderShape),
|
|
741
|
-
PropTypes.arrayOf(PropTypes.shape(sortOrderShape)),
|
|
742
|
-
]),
|
|
743
|
-
settings: PropTypes.shape({
|
|
744
|
-
displayIndices: PropTypes.bool,
|
|
745
|
-
dynamicRender: PropTypes.bool,
|
|
746
|
-
dynamicRenderType: PropTypes.oneOf(['simple', 'uniform', 'variable']),
|
|
747
|
-
dynamicRenderUseStaticSize: PropTypes.bool,
|
|
748
|
-
dynamicRenderThreshold: PropTypes.number,
|
|
749
|
-
dynamicRenderMinSize: PropTypes.number,
|
|
750
|
-
dynamicRenderScrollParentGetter: PropTypes.func,
|
|
751
|
-
dynamicRenderScrollParentViewportSizeGetter: PropTypes.func,
|
|
752
|
-
dynamicItemSizeEstimator: PropTypes.func,
|
|
753
|
-
dynamicItemSizeGetter: PropTypes.func,
|
|
754
|
-
stickyHead: PropTypes.oneOf([false, FIXED, MOVING]),
|
|
755
|
-
stickyTop: PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf(['auto'])]),
|
|
756
|
-
sortable: PropTypes.bool,
|
|
757
|
-
externalSort: PropTypes.bool,
|
|
758
|
-
highlightRows: PropTypes.bool,
|
|
759
|
-
stripedRows: PropTypes.bool,
|
|
760
|
-
headerMod: PropTypes.oneOf(['multiline', 'pre']),
|
|
761
|
-
defaultOrder: PropTypes.oneOf([ASCENDING, DESCENDING]),
|
|
762
|
-
syncHeadOnResize: PropTypes.bool,
|
|
763
|
-
}),
|
|
764
|
-
theme: PropTypes.string,
|
|
765
|
-
onSort: PropTypes.func,
|
|
766
|
-
};
|
|
767
681
|
DataTableView.defaultProps = {
|
|
768
682
|
startIndex: 0,
|
|
769
683
|
emptyDataMessage: 'No data',
|
|
@@ -789,7 +703,7 @@ function doColumnsHaveDuplicateNames(columns) {
|
|
|
789
703
|
const DUPLICATE_COLUMN_NAMES_WARNING = 'It is strongly recommended against using duplicate column names. ' +
|
|
790
704
|
'They act as default accessors and titles, so doing so may lead to confusing titles and the wrong ' +
|
|
791
705
|
'data being extracted.';
|
|
792
|
-
|
|
706
|
+
class DataTable extends React.PureComponent {
|
|
793
707
|
constructor() {
|
|
794
708
|
super(...arguments);
|
|
795
709
|
this.state = {};
|
|
@@ -847,3 +761,4 @@ DataTable.DESCENDING = DESCENDING;
|
|
|
847
761
|
DataTable.LEFT = LEFT;
|
|
848
762
|
DataTable.CENTER = CENTER;
|
|
849
763
|
DataTable.RIGHT = RIGHT;
|
|
764
|
+
export default DataTable;
|
|
@@ -244,21 +244,18 @@ $cell-border: 1px solid var(--data-table-border-color);
|
|
|
244
244
|
}
|
|
245
245
|
|
|
246
246
|
&_theme_yandex-cloud {
|
|
247
|
-
--data-table-color-base: var(
|
|
248
|
-
--yc-color-base-background,
|
|
249
|
-
var(--yc-color-base, var(--color-base))
|
|
250
|
-
);
|
|
247
|
+
--data-table-color-base: var(--g-color-base-background, var(--yc-color-base-background));
|
|
251
248
|
--data-table-color-stripe: var(
|
|
252
|
-
--
|
|
253
|
-
var(--yc-color-base-
|
|
249
|
+
--g-color-base-generic-ultralight,
|
|
250
|
+
var(--yc-color-base-generic-ultralight)
|
|
254
251
|
);
|
|
255
252
|
--data-table-border-color: var(
|
|
256
|
-
--
|
|
257
|
-
var(--yc-color-
|
|
253
|
+
--g-color-base-generic-hover,
|
|
254
|
+
var(--yc-color-base-generic-hover)
|
|
258
255
|
);
|
|
259
256
|
--data-table-color-hover-area: var(
|
|
260
|
-
--
|
|
261
|
-
var(--yc-color-
|
|
257
|
+
--g-color-base-simple-hover,
|
|
258
|
+
var(--yc-color-base-simple-hover)
|
|
262
259
|
);
|
|
263
260
|
--data-table-color-footer-area: var(--data-table-color-base);
|
|
264
261
|
}
|
package/build/esm/lib/types.d.ts
CHANGED
|
@@ -2,10 +2,10 @@ import * as React from 'react';
|
|
|
2
2
|
import ReactList from 'react-list';
|
|
3
3
|
import type { TableRowProps } from './DataTable';
|
|
4
4
|
import { ASCENDING, CENTER, DESCENDING, FIXED, LEFT, LEGACY_THEME, MOVING, RIGHT, YCLOUD_THEME } from './constants';
|
|
5
|
-
|
|
5
|
+
type HeaderData<T> = T & {
|
|
6
6
|
headerIndex?: number;
|
|
7
7
|
};
|
|
8
|
-
|
|
8
|
+
type FooterData<T> = T & {
|
|
9
9
|
footerIndex?: number;
|
|
10
10
|
};
|
|
11
11
|
export interface DataTableProps<T> {
|
|
@@ -62,7 +62,7 @@ export interface Column<T> {
|
|
|
62
62
|
group?: boolean;
|
|
63
63
|
autogroup?: boolean;
|
|
64
64
|
}
|
|
65
|
-
export
|
|
65
|
+
export type DynamicInnerRefT = ReactList;
|
|
66
66
|
export interface Settings {
|
|
67
67
|
displayIndices?: boolean;
|
|
68
68
|
stickyHead?: HeadPosition;
|
|
@@ -96,14 +96,14 @@ export interface CustomStyleParams<T> {
|
|
|
96
96
|
footer?: boolean;
|
|
97
97
|
headerData?: boolean;
|
|
98
98
|
}
|
|
99
|
-
export
|
|
100
|
-
export
|
|
99
|
+
export type AlignType = typeof LEFT | typeof RIGHT | typeof CENTER;
|
|
100
|
+
export type OrderType = typeof ASCENDING | typeof DESCENDING;
|
|
101
101
|
export interface SortOrder {
|
|
102
102
|
columnId: string;
|
|
103
103
|
order: OrderType;
|
|
104
104
|
}
|
|
105
|
-
export
|
|
106
|
-
export
|
|
105
|
+
export type HeadPosition = typeof FIXED | typeof MOVING;
|
|
106
|
+
export type THEMES = typeof LEGACY_THEME | typeof YCLOUD_THEME;
|
|
107
107
|
export interface SortedDataItem<T> {
|
|
108
108
|
row: T;
|
|
109
109
|
index: number;
|
|
@@ -111,5 +111,5 @@ export interface SortedDataItem<T> {
|
|
|
111
111
|
[colName: string]: number;
|
|
112
112
|
};
|
|
113
113
|
}
|
|
114
|
-
export
|
|
114
|
+
export type Comparator<T> = (l: SortedDataItem<T>, r: SortedDataItem<T>) => number;
|
|
115
115
|
export {};
|
package/build/esm/lib/util.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ColumnExtended, NameToOrderTypeMap, SortOrderWithSortColumns } from './DataTable';
|
|
2
2
|
import { OrderType, Settings, SortOrder, SortedDataItem } from './types';
|
|
3
3
|
export declare const cn: import("@bem-react/classname").ClassNameInitilizer;
|
|
4
|
-
export
|
|
4
|
+
export type SlimColumn = {
|
|
5
5
|
name: string;
|
|
6
6
|
defaultOrder?: OrderType;
|
|
7
7
|
};
|
|
@@ -9,6 +9,9 @@ export declare function getSortOrder({ name: columnName, defaultOrder: columnDef
|
|
|
9
9
|
defaultOrder?: OrderType;
|
|
10
10
|
disableSortReset?: boolean;
|
|
11
11
|
}): {
|
|
12
|
+
sortOrder: {};
|
|
13
|
+
sortColumns: never[];
|
|
14
|
+
} | {
|
|
12
15
|
sortOrder: NameToOrderTypeMap;
|
|
13
16
|
sortColumns: string[];
|
|
14
17
|
};
|
|
@@ -17,8 +20,11 @@ interface SortingFunctionFlags {
|
|
|
17
20
|
externalSort?: boolean;
|
|
18
21
|
}
|
|
19
22
|
export declare function getSortedData<T>(data: T[], dataColumns: ColumnExtended<T>[], { sortOrder, sortColumns }: SortOrderWithSortColumns, sortingFunctionFlags: SortingFunctionFlags): SortedDataItem<T>[];
|
|
20
|
-
|
|
23
|
+
type ExternalSortOrderType = SortOrder | SortOrder[];
|
|
21
24
|
export declare function externalToInternalSortOrder(columns: ExternalSortOrderType, settings?: Settings): {
|
|
25
|
+
sortOrder: {};
|
|
26
|
+
sortColumns: never[];
|
|
27
|
+
} | {
|
|
22
28
|
sortOrder: NameToOrderTypeMap;
|
|
23
29
|
sortColumns: string[];
|
|
24
30
|
};
|
package/package.json
CHANGED
|
@@ -1,103 +1,102 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gravity-ui/react-data-table",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "DataTable component",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"table"
|
|
7
|
+
],
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/gravity-ui/react-data-table"
|
|
11
|
+
},
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"sideEffects": [
|
|
14
|
+
"*.scss"
|
|
15
|
+
],
|
|
5
16
|
"main": "build/esm/lib/index.js",
|
|
6
17
|
"types": "build/esm/lib/index.d.ts",
|
|
7
18
|
"files": [
|
|
8
19
|
"build/esm/lib"
|
|
9
20
|
],
|
|
10
|
-
"sideEffects": [
|
|
11
|
-
"*.scss"
|
|
12
|
-
],
|
|
13
21
|
"scripts": {
|
|
22
|
+
"build": "npm run build:clean && npm run build:compile && npm run build:copy",
|
|
23
|
+
"build-storybook": "storybook build -c .storybook -o storybook-static",
|
|
24
|
+
"build:clean": "rm -rf build",
|
|
25
|
+
"build:compile": "tsc",
|
|
26
|
+
"build:copy": "copyfiles -u 1 \"src/**/*.scss\" build/esm",
|
|
27
|
+
"dev": "storybook dev -p 8888 -c .storybook",
|
|
14
28
|
"lint:js": "eslint src --ext .js,.jsx,.ts,.tsx",
|
|
15
29
|
"lint:other": "npm run prettier -- --check",
|
|
16
30
|
"lint:styles": "stylelint 'src/**/*.scss'",
|
|
17
31
|
"lint": "run-p lint:*",
|
|
18
32
|
"prettier": "prettier '**/*.{md,json,yaml,yml}'",
|
|
19
|
-
"dev": "npm run start",
|
|
20
|
-
"start": "start-storybook -p 7007",
|
|
21
|
-
"build-storybook": "build-storybook -c .storybook -o storybook-static",
|
|
22
33
|
"typecheck": "npm run build:compile -- --noEmit",
|
|
23
34
|
"test": "jest",
|
|
24
|
-
"build:clean": "rm -rf build",
|
|
25
|
-
"build:compile": "tsc",
|
|
26
|
-
"build:copy": "copyfiles -u 1 \"src/**/*.scss\" build/esm",
|
|
27
|
-
"build": "npm run build:clean && npm run build:compile && npm run build:copy",
|
|
28
35
|
"prepublishOnly": "npm run build"
|
|
29
36
|
},
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
37
|
+
"simple-git-hooks": {
|
|
38
|
+
"pre-commit": "npx nano-staged",
|
|
39
|
+
"commit-msg": "npx commitlint --edit $1"
|
|
33
40
|
},
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"
|
|
41
|
+
"nano-staged": {
|
|
42
|
+
"*.scss": [
|
|
43
|
+
"stylelint --fix --quiet"
|
|
44
|
+
],
|
|
45
|
+
"*.{js,jsx,ts,tsx}": [
|
|
46
|
+
"eslint --fix --quiet"
|
|
47
|
+
],
|
|
48
|
+
"*.{md,json,yaml,yml}": [
|
|
49
|
+
"prettier --write"
|
|
50
|
+
]
|
|
42
51
|
},
|
|
43
|
-
"
|
|
44
|
-
"
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@bem-react/classname": ">=1.6.0",
|
|
54
|
+
"react-list": "^0.8.17",
|
|
55
|
+
"tslib": "^2.6.2"
|
|
45
56
|
},
|
|
46
57
|
"devDependencies": {
|
|
47
58
|
"@bem-react/classname": "^1.6.0",
|
|
48
|
-
"@commitlint/cli": "
|
|
49
|
-
"@commitlint/config-conventional": "
|
|
50
|
-
"@gravity-ui/eslint-config": "
|
|
59
|
+
"@commitlint/cli": "^17.7.1",
|
|
60
|
+
"@commitlint/config-conventional": "^17.7.0",
|
|
61
|
+
"@gravity-ui/eslint-config": "2.2",
|
|
51
62
|
"@gravity-ui/prettier-config": "^1.0.1",
|
|
52
63
|
"@gravity-ui/stylelint-config": "^2.0.0",
|
|
53
64
|
"@gravity-ui/tsconfig": "^1.0.0",
|
|
54
|
-
"@gravity-ui/uikit": "^
|
|
55
|
-
"@storybook/addon-
|
|
56
|
-
"@storybook/
|
|
57
|
-
"@storybook/
|
|
58
|
-
"@
|
|
59
|
-
"@
|
|
65
|
+
"@gravity-ui/uikit": "^6.1.1",
|
|
66
|
+
"@storybook/addon-actions": "^7.3.1",
|
|
67
|
+
"@storybook/addon-essentials": "^7.3.1",
|
|
68
|
+
"@storybook/addon-interactions": "^7.3.1",
|
|
69
|
+
"@storybook/addon-links": "^7.3.1",
|
|
70
|
+
"@storybook/preset-scss": "^1.0.3",
|
|
71
|
+
"@storybook/react": "^7.3.1",
|
|
72
|
+
"@storybook/react-webpack5": "^7.3.1",
|
|
60
73
|
"@types/react": "16.14.21",
|
|
61
74
|
"@types/react-dom": "16.9.14",
|
|
62
75
|
"@types/react-list": "0.8.7",
|
|
63
76
|
"@typescript-eslint/eslint-plugin": "^5.50.0",
|
|
64
77
|
"copyfiles": "2.4.1",
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"nano-staged": "0.5.0",
|
|
78
|
+
"eslint": "8.47",
|
|
79
|
+
"jest": "^29.6.2",
|
|
80
|
+
"nano-staged": "^0.8.0",
|
|
69
81
|
"npm-run-all": "4.1.5",
|
|
70
|
-
"postcss": "8.4.
|
|
82
|
+
"postcss": "^8.4.28",
|
|
71
83
|
"prettier": "2.5.1",
|
|
72
|
-
"prop-types": "15.8.
|
|
84
|
+
"prop-types": "^15.8.1",
|
|
73
85
|
"react": "16.14.0",
|
|
74
86
|
"react-dom": "16.14.0",
|
|
75
|
-
"
|
|
76
|
-
"sass": "
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"style-loader": "
|
|
87
|
+
"sass": "1.65",
|
|
88
|
+
"sass-loader": "^13.3.2",
|
|
89
|
+
"simple-git-hooks": "2.9",
|
|
90
|
+
"storybook": "^7.3.1",
|
|
91
|
+
"style-loader": "^3.3.3",
|
|
80
92
|
"stylelint": "^14.16.1",
|
|
81
|
-
"ts-jest": "
|
|
82
|
-
"typescript": "
|
|
83
|
-
"webpack": "4.46.0"
|
|
84
|
-
},
|
|
85
|
-
"dependencies": {
|
|
86
|
-
"react-list": "0.8.16"
|
|
93
|
+
"ts-jest": "^29.1.1",
|
|
94
|
+
"typescript": "^5.1.6"
|
|
87
95
|
},
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"stylelint --fix --quiet"
|
|
91
|
-
],
|
|
92
|
-
"*.{js,jsx,ts,tsx}": [
|
|
93
|
-
"eslint --fix --quiet"
|
|
94
|
-
],
|
|
95
|
-
"*.{md,json,yaml,yml}": [
|
|
96
|
-
"prettier --write"
|
|
97
|
-
]
|
|
96
|
+
"peerDependencies": {
|
|
97
|
+
"react": ">=16.14.0"
|
|
98
98
|
},
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"commit-msg": "npx commitlint --edit $1"
|
|
99
|
+
"publishConfig": {
|
|
100
|
+
"access": "public"
|
|
102
101
|
}
|
|
103
102
|
}
|
package/CHANGELOG.md
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
## [1.3.0](https://github.com/gravity-ui/react-data-table/compare/v1.2.0...v1.3.0) (2024-02-28)
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
### Features
|
|
7
|
-
|
|
8
|
-
* add custom colspan for table row ([3316f62](https://github.com/gravity-ui/react-data-table/commit/3316f6283a1f504035c381f1baed6245f086e086))
|
|
9
|
-
|
|
10
|
-
## [1.2.0](https://github.com/gravity-ui/react-data-table/compare/v1.1.0...v1.2.0) (2023-09-05)
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
### Features
|
|
14
|
-
|
|
15
|
-
* migrate to @bem-react/classname ([#32](https://github.com/gravity-ui/react-data-table/issues/32)) ([af0987e](https://github.com/gravity-ui/react-data-table/commit/af0987e65e68766747a7956ff8521014c6037648))
|
|
16
|
-
|
|
17
|
-
## [1.1.0](https://github.com/gravity-ui/react-data-table/compare/v1.0.3...v1.1.0) (2023-05-05)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
### Features
|
|
21
|
-
|
|
22
|
-
* add event in cell click handler ([#26](https://github.com/gravity-ui/react-data-table/issues/26)) ([11e7a00](https://github.com/gravity-ui/react-data-table/commit/11e7a0067d980f6e3a215468d86df9b6a691428f))
|
|
23
|
-
|
|
24
|
-
## [1.0.3](https://github.com/gravity-ui/react-data-table/compare/v1.0.2...v1.0.3) (2023-02-02)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
### Bug Fixes
|
|
28
|
-
|
|
29
|
-
* move to gravity uikit ([#24](https://github.com/gravity-ui/react-data-table/issues/24)) ([98c7fa6](https://github.com/gravity-ui/react-data-table/commit/98c7fa6b89b2253a9f8df9909f017b556295c36b))
|
|
30
|
-
|
|
31
|
-
### [1.0.2](https://www.github.com/yandex-cloud/react-data-table/compare/v1.0.1...v1.0.2) (2022-03-21)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
### chore
|
|
35
|
-
|
|
36
|
-
* freeze direct dependencies ([a842bf4](https://www.github.com/yandex-cloud/react-data-table/commit/a842bf48ccd09c2f8a6158bb1250b5b6643844b5))
|
|
37
|
-
|
|
38
|
-
### [1.0.1](https://www.github.com/yandex-cloud/react-data-table/compare/v1.0.0...v1.0.1) (2022-02-25)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
### Bug Fixes
|
|
42
|
-
|
|
43
|
-
* clarify column width property type ([4b43afe](https://www.github.com/yandex-cloud/react-data-table/commit/4b43afe96ac0fe515b08e492ede12f9ed3299dec))
|
|
44
|
-
|
|
45
|
-
## [1.0.0](https://www.github.com/yandex-cloud/react-data-table/compare/v0.2.2...v1.0.0) (2022-02-03)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
### docs
|
|
49
|
-
|
|
50
|
-
* translate README.md ([160c576](https://www.github.com/yandex-cloud/react-data-table/commit/160c576a9869ea03f4b80ce172c2f537036aeae4))
|
|
51
|
-
|
|
52
|
-
### [0.2.2](https://www.github.com/yandex-cloud/react-data-table/compare/v0.2.1...v0.2.2) (2022-01-13)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
### Bug Fixes
|
|
56
|
-
|
|
57
|
-
* emit a warning when columns with duplicate names are provided ([08d0294](https://www.github.com/yandex-cloud/react-data-table/commit/08d029422cceae9145b3aa65d99b2931ec106441))
|
|
58
|
-
|
|
59
|
-
### [0.2.1](https://www.github.com/yandex-cloud/react-data-table/compare/v0.2.0...v0.2.1) (2022-01-12)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
### Bug Fixes
|
|
63
|
-
|
|
64
|
-
* put back missing styles into package ([c7d3ba0](https://www.github.com/yandex-cloud/react-data-table/commit/c7d3ba0c9b08af7c517249bcca5abef4f1b9fff8))
|
|
65
|
-
* use THEMES type for theme prop ([af0bb33](https://www.github.com/yandex-cloud/react-data-table/commit/af0bb3319a483bd19bab8d503d01611871e8ef31))
|
|
66
|
-
|
|
67
|
-
## [0.2.0](https://www.github.com/yandex-cloud/react-data-table/compare/v0.1.0...v0.2.0) (2022-01-11)
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
### ⚠ BREAKING CHANGES
|
|
71
|
-
|
|
72
|
-
* theme previously known as 'common' is now called 'yandex-cloud' and is a default one, theme previously known as 'internal' is now called 'legacy'.
|
|
73
|
-
|
|
74
|
-
### Bug Fixes
|
|
75
|
-
|
|
76
|
-
* make 'yandex-cloud' theme a new default theme ([ec2ead6](https://www.github.com/yandex-cloud/react-data-table/commit/ec2ead60cb3244a493db12bc5cd8d844e084e4d4))
|
|
77
|
-
|
|
78
|
-
## 0.1.0 (2022-01-04)
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
### Features
|
|
82
|
-
|
|
83
|
-
* initial import of library files ([5d15cab](https://www.github.com/yandex-cloud/react-data-table/commit/5d15cabc78c44eb8e502fe3e74328b456a981710))
|