@qoretechnologies/reqore 0.35.0 → 0.35.2
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/__tests__/helpers/table.test.tsx +20 -0
- package/__tests__/table.test.tsx +199 -2
- package/dist/components/ControlGroup/index.d.ts.map +1 -1
- package/dist/components/ControlGroup/index.js +1 -1
- package/dist/components/ControlGroup/index.js.map +1 -1
- package/dist/components/Dropdown/list.d.ts +1 -0
- package/dist/components/Dropdown/list.d.ts.map +1 -1
- package/dist/components/Dropdown/list.js.map +1 -1
- package/dist/components/Menu/divider.d.ts +1 -0
- package/dist/components/Menu/divider.d.ts.map +1 -1
- package/dist/components/Menu/divider.js +3 -2
- package/dist/components/Menu/divider.js.map +1 -1
- package/dist/components/Spacer/index.d.ts.map +1 -1
- package/dist/components/Spacer/index.js +1 -1
- package/dist/components/Spacer/index.js.map +1 -1
- package/dist/components/Table/body.d.ts +10 -3
- package/dist/components/Table/body.d.ts.map +1 -1
- package/dist/components/Table/body.js +40 -9
- package/dist/components/Table/body.js.map +1 -1
- package/dist/components/Table/cell.d.ts +1 -0
- package/dist/components/Table/cell.d.ts.map +1 -1
- package/dist/components/Table/cell.js +4 -4
- package/dist/components/Table/cell.js.map +1 -1
- package/dist/components/Table/header.d.ts +8 -7
- package/dist/components/Table/header.d.ts.map +1 -1
- package/dist/components/Table/header.js +34 -37
- package/dist/components/Table/header.js.map +1 -1
- package/dist/components/Table/headerCell.d.ts +3 -2
- package/dist/components/Table/headerCell.d.ts.map +1 -1
- package/dist/components/Table/headerCell.js +39 -8
- package/dist/components/Table/headerCell.js.map +1 -1
- package/dist/components/Table/helpers.d.ts +7 -1
- package/dist/components/Table/helpers.d.ts.map +1 -1
- package/dist/components/Table/helpers.js +30 -4
- package/dist/components/Table/helpers.js.map +1 -1
- package/dist/components/Table/index.d.ts +13 -2
- package/dist/components/Table/index.d.ts.map +1 -1
- package/dist/components/Table/index.js +203 -23
- package/dist/components/Table/index.js.map +1 -1
- package/dist/components/Table/row.d.ts +2 -1
- package/dist/components/Table/row.d.ts.map +1 -1
- package/dist/components/Table/row.js +19 -29
- package/dist/components/Table/row.js.map +1 -1
- package/dist/constants/sizes.d.ts +15 -0
- package/dist/constants/sizes.d.ts.map +1 -1
- package/dist/constants/sizes.js +16 -1
- package/dist/constants/sizes.js.map +1 -1
- package/package.json +1 -1
- package/src/components/ControlGroup/index.tsx +1 -0
- package/src/components/Dropdown/list.tsx +1 -0
- package/src/components/Menu/divider.tsx +31 -21
- package/src/components/Spacer/index.tsx +2 -2
- package/src/components/Table/body.tsx +81 -35
- package/src/components/Table/cell.tsx +8 -2
- package/src/components/Table/header.tsx +133 -124
- package/src/components/Table/headerCell.tsx +45 -9
- package/src/components/Table/helpers.ts +48 -3
- package/src/components/Table/index.tsx +266 -53
- package/src/components/Table/row.tsx +38 -55
- package/src/constants/sizes.ts +17 -0
- package/src/stories/Breadcrumbs/Breadcrumbs.stories.tsx +0 -3
- package/src/stories/Table/Table.stories.tsx +99 -1
- package/tests.json +1 -1
|
@@ -13,11 +13,12 @@ import { TColumnsUpdater } from './header';
|
|
|
13
13
|
|
|
14
14
|
export interface IReqoreTableHeaderCellProps
|
|
15
15
|
extends Omit<IReqoreTableColumn, 'cell'>,
|
|
16
|
-
IReqoreButtonProps {
|
|
16
|
+
Omit<IReqoreButtonProps, 'maxWidth'> {
|
|
17
17
|
onSortChange?: (sort: string) => void;
|
|
18
18
|
sortData?: IReqoreTableSort;
|
|
19
19
|
onColumnsUpdate?: TColumnsUpdater;
|
|
20
20
|
onFilterChange?: (dataId: string, filter: string) => void;
|
|
21
|
+
actions?: IReqoreTableColumn['header']['actions'];
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
export interface IReqoreTableHeaderStyle {
|
|
@@ -43,9 +44,12 @@ export const StyledTableHeaderResize = styled.div`
|
|
|
43
44
|
|
|
44
45
|
export const ReqoreTableHeaderCell = ({
|
|
45
46
|
width,
|
|
47
|
+
maxWidth,
|
|
48
|
+
minWidth,
|
|
46
49
|
resizedWidth,
|
|
47
50
|
grow,
|
|
48
51
|
align,
|
|
52
|
+
pin,
|
|
49
53
|
onSortChange,
|
|
50
54
|
dataId,
|
|
51
55
|
sortable,
|
|
@@ -57,19 +61,17 @@ export const ReqoreTableHeaderCell = ({
|
|
|
57
61
|
filterPlaceholder,
|
|
58
62
|
filterable,
|
|
59
63
|
hideable = true,
|
|
64
|
+
pinnable = true,
|
|
60
65
|
filter,
|
|
66
|
+
size,
|
|
61
67
|
onFilterChange,
|
|
68
|
+
actions,
|
|
62
69
|
...rest
|
|
63
70
|
}: IReqoreTableHeaderCellProps) => {
|
|
64
71
|
const items = useMemo(() => {
|
|
65
|
-
|
|
72
|
+
let _items: IReqoreDropdownItem[] = [];
|
|
66
73
|
|
|
67
74
|
if (resizable || hideable) {
|
|
68
|
-
_items.push({
|
|
69
|
-
divider: true,
|
|
70
|
-
label: 'Options',
|
|
71
|
-
});
|
|
72
|
-
|
|
73
75
|
if (resizable) {
|
|
74
76
|
_items.push({
|
|
75
77
|
label: 'Reset size',
|
|
@@ -81,10 +83,37 @@ export const ReqoreTableHeaderCell = ({
|
|
|
81
83
|
});
|
|
82
84
|
}
|
|
83
85
|
|
|
86
|
+
if (pinnable) {
|
|
87
|
+
_items.push({ divider: true, size: 'small', line: true });
|
|
88
|
+
|
|
89
|
+
_items.push({
|
|
90
|
+
label: 'Pin left',
|
|
91
|
+
icon: 'SkipBackLine',
|
|
92
|
+
active: pin === 'left',
|
|
93
|
+
intent: pin === 'left' ? 'info' : undefined,
|
|
94
|
+
onClick: () => {
|
|
95
|
+
onColumnsUpdate?.(dataId, 'pin', pin !== 'left' ? 'left' : undefined);
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
_items.push({
|
|
100
|
+
label: 'Pin Right',
|
|
101
|
+
icon: 'SkipForwardLine',
|
|
102
|
+
active: pin === 'right',
|
|
103
|
+
intent: pin === 'right' ? 'info' : undefined,
|
|
104
|
+
onClick: () => {
|
|
105
|
+
onColumnsUpdate?.(dataId, 'pin', pin !== 'right' ? 'right' : undefined);
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
84
110
|
if (hideable) {
|
|
111
|
+
_items.push({ divider: true, size: 'small', line: true });
|
|
112
|
+
|
|
85
113
|
_items.push({
|
|
86
114
|
label: 'Hide column',
|
|
87
115
|
icon: 'EyeCloseLine',
|
|
116
|
+
className: 'reqore-table-header-hide',
|
|
88
117
|
onClick: () => {
|
|
89
118
|
onColumnsUpdate?.(dataId, 'show', false);
|
|
90
119
|
},
|
|
@@ -92,12 +121,17 @@ export const ReqoreTableHeaderCell = ({
|
|
|
92
121
|
}
|
|
93
122
|
}
|
|
94
123
|
|
|
124
|
+
if (actions) {
|
|
125
|
+
_items = [..._items, { divider: true, label: 'Other' }, ...actions];
|
|
126
|
+
}
|
|
127
|
+
|
|
95
128
|
return _items;
|
|
96
129
|
}, [resizable, hideable, width, resizedWidth, onColumnsUpdate, dataId]);
|
|
97
130
|
|
|
98
131
|
return (
|
|
99
132
|
<Resizable
|
|
100
|
-
minWidth={width}
|
|
133
|
+
minWidth={minWidth || width}
|
|
134
|
+
maxWidth={maxWidth}
|
|
101
135
|
onResize={(_event, _direction, _component) => {
|
|
102
136
|
onColumnsUpdate?.(dataId, 'resizedWidth', parseInt(_component.style.width));
|
|
103
137
|
}}
|
|
@@ -119,6 +153,7 @@ export const ReqoreTableHeaderCell = ({
|
|
|
119
153
|
<ReqoreControlGroup fluid stack rounded={false} fill style={{ height: '100%' }}>
|
|
120
154
|
<ReqoreButton
|
|
121
155
|
{...rest}
|
|
156
|
+
size={size}
|
|
122
157
|
readOnly={!sortable && !onClick}
|
|
123
158
|
className={`${className || ''} reqore-table-header-cell`}
|
|
124
159
|
rounded={false}
|
|
@@ -143,8 +178,9 @@ export const ReqoreTableHeaderCell = ({
|
|
|
143
178
|
icon='MoreLine'
|
|
144
179
|
className='reqore-table-header-cell-options'
|
|
145
180
|
fixed
|
|
181
|
+
size={size}
|
|
146
182
|
rounded={false}
|
|
147
|
-
intent={filter ? 'info' :
|
|
183
|
+
intent={filter ? 'info' : rest.intent}
|
|
148
184
|
filterable={filterable}
|
|
149
185
|
filterPlaceholder={filterPlaceholder || 'Filter by this column...'}
|
|
150
186
|
filter={filter}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { size } from 'lodash';
|
|
2
2
|
import { firstBy } from 'thenby';
|
|
3
3
|
import { IReqoreTableColumn, IReqoreTableSort } from '.';
|
|
4
|
-
import { ICON_FROM_SIZE, SIZE_TO_PX, TSizes } from '../../constants/sizes';
|
|
4
|
+
import { ICON_FROM_SIZE, SIZE_TO_MODIFIER, SIZE_TO_PX, TSizes } from '../../constants/sizes';
|
|
5
5
|
import { IReqoreIconName } from '../../types/icons';
|
|
6
6
|
import { IReqorePanelAction } from '../Panel';
|
|
7
7
|
|
|
@@ -137,6 +137,12 @@ export const getColumnsCount = (columns: IReqoreTableColumn[]): number => {
|
|
|
137
137
|
return count;
|
|
138
138
|
};
|
|
139
139
|
|
|
140
|
+
export const hasGroupedColumns = (columns: IReqoreTableColumn[]): boolean => {
|
|
141
|
+
return columns.some((column) => {
|
|
142
|
+
return !!column.header?.columns;
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
|
|
140
146
|
export const hasHiddenColumns = (columns: IReqoreTableColumn[]): boolean => {
|
|
141
147
|
return columns.some((column) => {
|
|
142
148
|
if (column.header.columns) {
|
|
@@ -147,6 +153,40 @@ export const hasHiddenColumns = (columns: IReqoreTableColumn[]): boolean => {
|
|
|
147
153
|
});
|
|
148
154
|
};
|
|
149
155
|
|
|
156
|
+
export const getColumnsByPinType = (
|
|
157
|
+
columns: IReqoreTableColumn[],
|
|
158
|
+
type: 'left' | 'right' | 'main'
|
|
159
|
+
): IReqoreTableColumn[] => {
|
|
160
|
+
return columns.reduce((newColumns, column) => {
|
|
161
|
+
if (column.header.columns) {
|
|
162
|
+
const subColumns: IReqoreTableColumn[] = getColumnsByPinType(column.header.columns, type);
|
|
163
|
+
|
|
164
|
+
if (!size(subColumns)) {
|
|
165
|
+
return newColumns;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const columnsResult = [
|
|
169
|
+
...newColumns,
|
|
170
|
+
{
|
|
171
|
+
...column,
|
|
172
|
+
header: {
|
|
173
|
+
...column.header,
|
|
174
|
+
columns: subColumns,
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
];
|
|
178
|
+
|
|
179
|
+
return columnsResult;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if ((type === 'main' && !column.pin) || column.pin === type) {
|
|
183
|
+
return [...newColumns, column];
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return newColumns;
|
|
187
|
+
}, []);
|
|
188
|
+
};
|
|
189
|
+
|
|
150
190
|
export const getOnlyShownColumns = (columns: IReqoreTableColumn[]): IReqoreTableColumn[] => {
|
|
151
191
|
return columns.reduce((newColumns, column) => {
|
|
152
192
|
if (column.header.columns) {
|
|
@@ -175,6 +215,7 @@ export const getOnlyShownColumns = (columns: IReqoreTableColumn[]): IReqoreTable
|
|
|
175
215
|
|
|
176
216
|
export const prepareColumns = (
|
|
177
217
|
columns: IReqoreTableColumn[],
|
|
218
|
+
columnModifiers: { [key: string]: { [key: string]: any } },
|
|
178
219
|
size: TSizes = 'normal'
|
|
179
220
|
): IReqoreTableColumn[] => {
|
|
180
221
|
// We need to set the width of each column
|
|
@@ -182,7 +223,10 @@ export const prepareColumns = (
|
|
|
182
223
|
if (column.header.columns) {
|
|
183
224
|
return {
|
|
184
225
|
...column,
|
|
185
|
-
header: {
|
|
226
|
+
header: {
|
|
227
|
+
...column.header,
|
|
228
|
+
columns: prepareColumns(column.header.columns, columnModifiers, size),
|
|
229
|
+
},
|
|
186
230
|
};
|
|
187
231
|
}
|
|
188
232
|
|
|
@@ -198,7 +242,8 @@ export const prepareColumns = (
|
|
|
198
242
|
|
|
199
243
|
return {
|
|
200
244
|
...column,
|
|
201
|
-
width: newWidth,
|
|
245
|
+
width: newWidth * SIZE_TO_MODIFIER[size],
|
|
246
|
+
...(columnModifiers?.[column.dataId] || {}),
|
|
202
247
|
};
|
|
203
248
|
});
|
|
204
249
|
};
|