@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.
Files changed (63) hide show
  1. package/__tests__/helpers/table.test.tsx +20 -0
  2. package/__tests__/table.test.tsx +199 -2
  3. package/dist/components/ControlGroup/index.d.ts.map +1 -1
  4. package/dist/components/ControlGroup/index.js +1 -1
  5. package/dist/components/ControlGroup/index.js.map +1 -1
  6. package/dist/components/Dropdown/list.d.ts +1 -0
  7. package/dist/components/Dropdown/list.d.ts.map +1 -1
  8. package/dist/components/Dropdown/list.js.map +1 -1
  9. package/dist/components/Menu/divider.d.ts +1 -0
  10. package/dist/components/Menu/divider.d.ts.map +1 -1
  11. package/dist/components/Menu/divider.js +3 -2
  12. package/dist/components/Menu/divider.js.map +1 -1
  13. package/dist/components/Spacer/index.d.ts.map +1 -1
  14. package/dist/components/Spacer/index.js +1 -1
  15. package/dist/components/Spacer/index.js.map +1 -1
  16. package/dist/components/Table/body.d.ts +10 -3
  17. package/dist/components/Table/body.d.ts.map +1 -1
  18. package/dist/components/Table/body.js +40 -9
  19. package/dist/components/Table/body.js.map +1 -1
  20. package/dist/components/Table/cell.d.ts +1 -0
  21. package/dist/components/Table/cell.d.ts.map +1 -1
  22. package/dist/components/Table/cell.js +4 -4
  23. package/dist/components/Table/cell.js.map +1 -1
  24. package/dist/components/Table/header.d.ts +8 -7
  25. package/dist/components/Table/header.d.ts.map +1 -1
  26. package/dist/components/Table/header.js +34 -37
  27. package/dist/components/Table/header.js.map +1 -1
  28. package/dist/components/Table/headerCell.d.ts +3 -2
  29. package/dist/components/Table/headerCell.d.ts.map +1 -1
  30. package/dist/components/Table/headerCell.js +39 -8
  31. package/dist/components/Table/headerCell.js.map +1 -1
  32. package/dist/components/Table/helpers.d.ts +7 -1
  33. package/dist/components/Table/helpers.d.ts.map +1 -1
  34. package/dist/components/Table/helpers.js +30 -4
  35. package/dist/components/Table/helpers.js.map +1 -1
  36. package/dist/components/Table/index.d.ts +13 -2
  37. package/dist/components/Table/index.d.ts.map +1 -1
  38. package/dist/components/Table/index.js +203 -23
  39. package/dist/components/Table/index.js.map +1 -1
  40. package/dist/components/Table/row.d.ts +2 -1
  41. package/dist/components/Table/row.d.ts.map +1 -1
  42. package/dist/components/Table/row.js +19 -29
  43. package/dist/components/Table/row.js.map +1 -1
  44. package/dist/constants/sizes.d.ts +15 -0
  45. package/dist/constants/sizes.d.ts.map +1 -1
  46. package/dist/constants/sizes.js +16 -1
  47. package/dist/constants/sizes.js.map +1 -1
  48. package/package.json +1 -1
  49. package/src/components/ControlGroup/index.tsx +1 -0
  50. package/src/components/Dropdown/list.tsx +1 -0
  51. package/src/components/Menu/divider.tsx +31 -21
  52. package/src/components/Spacer/index.tsx +2 -2
  53. package/src/components/Table/body.tsx +81 -35
  54. package/src/components/Table/cell.tsx +8 -2
  55. package/src/components/Table/header.tsx +133 -124
  56. package/src/components/Table/headerCell.tsx +45 -9
  57. package/src/components/Table/helpers.ts +48 -3
  58. package/src/components/Table/index.tsx +266 -53
  59. package/src/components/Table/row.tsx +38 -55
  60. package/src/constants/sizes.ts +17 -0
  61. package/src/stories/Breadcrumbs/Breadcrumbs.stories.tsx +0 -3
  62. package/src/stories/Table/Table.stories.tsx +99 -1
  63. 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
- const _items: IReqoreDropdownItem[] = [];
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' : undefined}
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: { ...column.header, columns: prepareColumns(column.header.columns) },
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
  };