@qoretechnologies/reqore 0.34.13 → 0.35.0

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 (110) hide show
  1. package/__tests__/helpers/table.test.tsx +47 -0
  2. package/__tests__/table.test.tsx +158 -123
  3. package/dist/components/Button/index.d.ts +2 -0
  4. package/dist/components/Button/index.d.ts.map +1 -1
  5. package/dist/components/Button/index.js +7 -4
  6. package/dist/components/Button/index.js.map +1 -1
  7. package/dist/components/Collection/index.d.ts +2 -1
  8. package/dist/components/Collection/index.d.ts.map +1 -1
  9. package/dist/components/Collection/index.js +5 -11
  10. package/dist/components/Collection/index.js.map +1 -1
  11. package/dist/components/ControlGroup/index.d.ts.map +1 -1
  12. package/dist/components/ControlGroup/index.js +4 -3
  13. package/dist/components/ControlGroup/index.js.map +1 -1
  14. package/dist/components/Dropdown/index.d.ts +4 -1
  15. package/dist/components/Dropdown/index.d.ts.map +1 -1
  16. package/dist/components/Dropdown/index.js +2 -2
  17. package/dist/components/Dropdown/index.js.map +1 -1
  18. package/dist/components/Dropdown/list.d.ts +4 -1
  19. package/dist/components/Dropdown/list.d.ts.map +1 -1
  20. package/dist/components/Dropdown/list.js +10 -5
  21. package/dist/components/Dropdown/list.js.map +1 -1
  22. package/dist/components/Input/index.js +4 -4
  23. package/dist/components/Input/index.js.map +1 -1
  24. package/dist/components/Panel/index.d.ts +4 -1
  25. package/dist/components/Panel/index.d.ts.map +1 -1
  26. package/dist/components/Panel/index.js.map +1 -1
  27. package/dist/components/Table/cell.d.ts +12 -0
  28. package/dist/components/Table/cell.d.ts.map +1 -0
  29. package/dist/components/Table/cell.js +89 -0
  30. package/dist/components/Table/cell.js.map +1 -0
  31. package/dist/components/Table/header.d.ts +15 -2
  32. package/dist/components/Table/header.d.ts.map +1 -1
  33. package/dist/components/Table/header.js +31 -14
  34. package/dist/components/Table/header.js.map +1 -1
  35. package/dist/components/Table/headerCell.d.ts +8 -6
  36. package/dist/components/Table/headerCell.d.ts.map +1 -1
  37. package/dist/components/Table/headerCell.js +60 -51
  38. package/dist/components/Table/headerCell.js.map +1 -1
  39. package/dist/components/Table/helpers.d.ts +39 -1
  40. package/dist/components/Table/helpers.d.ts.map +1 -1
  41. package/dist/components/Table/helpers.js +145 -1
  42. package/dist/components/Table/helpers.js.map +1 -1
  43. package/dist/components/Table/index.d.ts +39 -25
  44. package/dist/components/Table/index.d.ts.map +1 -1
  45. package/dist/components/Table/index.js +139 -52
  46. package/dist/components/Table/index.js.map +1 -1
  47. package/dist/components/Table/row.d.ts +9 -4
  48. package/dist/components/Table/row.d.ts.map +1 -1
  49. package/dist/components/Table/row.js +30 -54
  50. package/dist/components/Table/row.js.map +1 -1
  51. package/dist/hooks/useQueryWithDelay.d.ts +8 -0
  52. package/dist/hooks/useQueryWithDelay.d.ts.map +1 -0
  53. package/dist/hooks/useQueryWithDelay.js +25 -0
  54. package/dist/hooks/useQueryWithDelay.js.map +1 -0
  55. package/dist/index.d.ts +3 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +7 -1
  58. package/dist/index.js.map +1 -1
  59. package/package.json +1 -1
  60. package/src/components/Button/index.tsx +6 -1
  61. package/src/components/Collection/index.tsx +9 -15
  62. package/src/components/ControlGroup/index.tsx +10 -5
  63. package/src/components/Dropdown/index.tsx +9 -0
  64. package/src/components/Dropdown/list.tsx +18 -6
  65. package/src/components/Input/index.tsx +3 -3
  66. package/src/components/Panel/index.tsx +3 -1
  67. package/src/components/Table/cell.tsx +117 -0
  68. package/src/components/Table/header.tsx +102 -45
  69. package/src/components/Table/headerCell.tsx +123 -80
  70. package/src/components/Table/helpers.ts +206 -1
  71. package/src/components/Table/index.tsx +288 -90
  72. package/src/components/Table/row.tsx +47 -125
  73. package/src/hooks/useQueryWithDelay.ts +30 -0
  74. package/src/index.tsx +3 -0
  75. package/src/mock/tableData.ts +40 -20
  76. package/src/stories/Breadcrumbs/Breadcrumbs.stories.tsx +1 -1
  77. package/src/stories/Button/Button.stories.tsx +1 -1
  78. package/src/stories/Checkbox/Checkbox.stories.tsx +1 -1
  79. package/src/stories/Collection/Collection.stories.tsx +19 -1
  80. package/src/stories/Columns/Columns.stories.tsx +1 -1
  81. package/src/stories/Comment/Comment.stories.tsx +1 -1
  82. package/src/stories/ControlGroup/ControlGroup.stories.tsx +1 -1
  83. package/src/stories/Drawer/Drawer.stories.tsx +5 -5
  84. package/src/stories/Dropdown/Dropdown.stories.tsx +11 -1
  85. package/src/stories/Header/Header.stories.tsx +1 -1
  86. package/src/stories/Icon/Icon.stories.tsx +1 -1
  87. package/src/stories/Input/Input.stories.tsx +1 -1
  88. package/src/stories/Menu/Menu.stories.tsx +1 -1
  89. package/src/stories/Message/Message.stories.tsx +1 -1
  90. package/src/stories/Modal/Modal.stories.tsx +1 -1
  91. package/src/stories/MultiSelect/MultiSelect.stories.tsx +1 -1
  92. package/src/stories/Navbar/Navbar.stories.tsx +1 -1
  93. package/src/stories/Notifications/Interactive.stories.tsx +1 -1
  94. package/src/stories/Notifications/Notification.stories.tsx +1 -1
  95. package/src/stories/Notifications/Notifications.stories.tsx +1 -1
  96. package/src/stories/Paging/Paging.stories.tsx +1 -1
  97. package/src/stories/Panel/Panel.stories.tsx +5 -5
  98. package/src/stories/Paragraph/Paragraph.stories.tsx +1 -1
  99. package/src/stories/Popover/Popover.stories.tsx +2 -2
  100. package/src/stories/RadioGroup/RadioGroup.stories.tsx +1 -1
  101. package/src/stories/Sidebar/Sidebar.stories.tsx +2 -2
  102. package/src/stories/Spacer/Spacer.stories.tsx +1 -1
  103. package/src/stories/Spinner/Spinner.stories.tsx +1 -1
  104. package/src/stories/Table/Table.stories.tsx +277 -78
  105. package/src/stories/Tabs/Tabs.stories.tsx +1 -1
  106. package/src/stories/Tag/Tag.stories.tsx +1 -1
  107. package/src/stories/TextArea/TextArea.stories.tsx +2 -2
  108. package/src/stories/Tree/Tree.stories.tsx +2 -2
  109. package/src/stories/utils/args.ts +1 -1
  110. package/tests.json +1 -1
@@ -1,6 +1,5 @@
1
1
  /* @flow */
2
2
  import { isFunction, isString } from 'lodash';
3
- import { lighten, rgba } from 'polished';
4
3
  import React, { ReactElement, useState } from 'react';
5
4
  import styled, { css } from 'styled-components';
6
5
  import {
@@ -10,16 +9,17 @@ import {
10
9
  TReqoreTableColumnContent,
11
10
  } from '.';
12
11
  import { ReqorePopover } from '../..';
13
- import { SIZE_TO_PX, TEXT_FROM_SIZE, TSizes } from '../../constants/sizes';
12
+ import { SIZE_TO_PX, TSizes } from '../../constants/sizes';
14
13
  import { IReqoreTheme, TReqoreIntent } from '../../constants/theme';
15
- import { changeLightness, getReadableColorFrom } from '../../helpers/colors';
16
- import { alignToFlexAlign } from '../../helpers/utils';
17
- import { TReqoreColor, TReqoreHexColor } from '../Effect';
14
+ import { IReqoreTooltip } from '../../types/global';
15
+ import { TReqoreHexColor } from '../Effect';
18
16
  import { ReqoreH4 } from '../Header';
19
17
  import ReqoreIcon from '../Icon';
20
18
  import { ReqoreP } from '../Paragraph';
21
19
  import ReqoreTag from '../Tag';
22
20
  import { TimeAgo } from '../TimeAgo';
21
+ import { IReqoreCustomTableBodyCell, ReqoreTableBodyCell } from './cell';
22
+ import { calculateMinimumCellWidth, getOnlyShownColumns } from './helpers';
23
23
 
24
24
  export interface IReqoreTableRowOptions {
25
25
  columns: IReqoreTableColumn[];
@@ -32,11 +32,13 @@ export interface IReqoreTableRowOptions {
32
32
  selectedRowIntent?: TReqoreIntent;
33
33
  size?: TSizes;
34
34
  flat?: boolean;
35
+ cellComponent?: IReqoreCustomTableBodyCell;
36
+ rowComponent?: IReqoreCustomTableRow;
35
37
  }
36
-
37
- export interface IReqoreTableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {
38
+ export interface IReqoreCustomTableRowProps extends IReqoreTableRowOptions {}
39
+ export interface IReqoreCustomTableRow extends React.FC<IReqoreCustomTableRowProps> {}
40
+ export interface IReqoreTableRowProps extends React.HTMLAttributes<HTMLDivElement> {
38
41
  data: IReqoreTableRowOptions;
39
- style: React.StyleHTMLAttributes<HTMLDivElement>;
40
42
  index: number;
41
43
  }
42
44
 
@@ -76,103 +78,6 @@ export interface IReqoreTableCellStyle {
76
78
  striped?: boolean;
77
79
  }
78
80
 
79
- export const StyledTableCell = styled.div<IReqoreTableCellStyle>`
80
- ${({ width, grow }) =>
81
- css`
82
- width: ${!width || width < 80 ? 80 : width}px;
83
- flex-grow: ${grow || (width ? undefined : 1)};
84
- `}
85
-
86
- ${({
87
- theme,
88
- align,
89
- interactive,
90
- interactiveCell,
91
- intent,
92
- size,
93
- flat,
94
- striped,
95
- even,
96
- selected,
97
- selectedIntent,
98
- disabled,
99
- hovered,
100
- }: IReqoreTableCellStyle) => {
101
- const getBackgroundColor = (): TReqoreColor => {
102
- let color = theme.main;
103
- let opacity = 0;
104
- // Is there any intent
105
- if (intent || (selected && selectedIntent)) {
106
- color = theme.intents[intent || selectedIntent];
107
- opacity += 0.02;
108
- }
109
- // Is the table striped and this row odd
110
- if (striped && !even) {
111
- opacity += 0.05;
112
- }
113
- // Is this row selected
114
- if (selected) {
115
- opacity += 0.02;
116
- }
117
- // Is this row hovered
118
- if (hovered) {
119
- opacity += 0.08;
120
- }
121
-
122
- // Set the color as transparent if opacity is 0
123
- if (opacity === 0) {
124
- return 'transparent';
125
- }
126
-
127
- return changeLightness(color, opacity);
128
- };
129
-
130
- const backgroundColor = getBackgroundColor();
131
-
132
- return css`
133
- display: flex;
134
- align-items: center;
135
- justify-content: ${align ? alignToFlexAlign(align) : 'flex-start'};
136
- flex-shrink: 0;
137
- border-bottom: ${!flat ? '1px solid ' : undefined};
138
-
139
- height: 100%;
140
- padding: 0 10px;
141
- font-size: ${TEXT_FROM_SIZE[size]}px;
142
- background-color: ${backgroundColor === 'transparent'
143
- ? 'transparent'
144
- : rgba(getBackgroundColor(), 0.8)};
145
- color: ${getReadableColorFrom(
146
- backgroundColor === 'transparent' ? theme.main : backgroundColor,
147
- !hovered
148
- )};
149
- border-color: ${changeLightness(
150
- backgroundColor === 'transparent' ? theme.main : backgroundColor,
151
- 0.1
152
- )};
153
- transition: background-color 0.2s ease-out;
154
- opacity: ${disabled ? 0.2 : 1};
155
- pointer-events: ${disabled ? 'none' : undefined};
156
- cursor: ${interactive || interactiveCell ? 'pointer' : 'default'};
157
-
158
- ${interactiveCell &&
159
- css`
160
- &:hover {
161
- background-color: ${lighten(0.2, getBackgroundColor())};
162
- }
163
- `}
164
-
165
- p.reqore-table-text {
166
- overflow: hidden;
167
- white-space: nowrap;
168
- text-overflow: ellipsis;
169
- margin: 0;
170
- padding: 0;
171
- }
172
- `;
173
- }}
174
- `;
175
-
176
81
  const ReqoreTableRow = ({
177
82
  data: {
178
83
  data,
@@ -185,6 +90,8 @@ const ReqoreTableRow = ({
185
90
  size,
186
91
  selectedRowIntent = 'info',
187
92
  flat,
93
+ cellComponent,
94
+ rowComponent,
188
95
  },
189
96
  style,
190
97
  index,
@@ -192,6 +99,9 @@ const ReqoreTableRow = ({
192
99
  const [isHovered, setIsHovered] = useState<boolean>(false);
193
100
  const isSelected = selected.find((selectId) => selectId === data[index]._selectId);
194
101
 
102
+ const CellComponent = cellComponent || ReqoreTableBodyCell;
103
+ const RowComponent = rowComponent || StyledTableRow;
104
+
195
105
  const renderContent = (
196
106
  content: TReqoreTableColumnContent,
197
107
  data: any,
@@ -244,18 +154,29 @@ const ReqoreTableRow = ({
244
154
  };
245
155
 
246
156
  const renderCells = (columns: IReqoreTableColumn[], data: IReqoreTableData) =>
247
- columns.map(
248
- ({ width, grow, dataId, content, columns, align, onCellClick, cellTooltip, intent }) =>
249
- columns ? (
250
- renderCells(columns, data)
251
- ) : (
157
+ getOnlyShownColumns(columns).map(
158
+ ({ width, resizedWidth, grow, dataId, cell, header, align, intent }) => {
159
+ if (header.columns) {
160
+ return renderCells(header.columns, data);
161
+ }
162
+
163
+ // Build the tooltip
164
+ const tooltip: IReqoreTooltip = cell?.tooltip
165
+ ? typeof cell?.tooltip(data[index][dataId]) !== 'object'
166
+ ? {
167
+ content: cell.tooltip(data[index][dataId]) as string,
168
+ }
169
+ : (cell.tooltip(data[index][dataId]) as IReqoreTooltip)
170
+ : {};
171
+
172
+ return (
252
173
  <ReqorePopover
253
174
  key={dataId}
254
- component={StyledTableCell}
175
+ component={CellComponent}
255
176
  isReqoreComponent
256
177
  componentProps={
257
178
  {
258
- width,
179
+ width: resizedWidth || width,
259
180
  grow,
260
181
  align,
261
182
  size,
@@ -265,14 +186,14 @@ const ReqoreTableRow = ({
265
186
  selectedIntent: selectedRowIntent,
266
187
  flat,
267
188
  even: index % 2 === 0 ? true : false,
268
- intent: intent || data[index]._intent,
189
+ intent: cell?.intent || data[index]._intent || intent,
269
190
  hovered: isHovered,
270
- interactive: !!onCellClick || !!onRowClick,
271
- interactiveCell: !!onCellClick,
191
+ interactive: !!cell?.onClick || !!onRowClick,
192
+ interactiveCell: !!cell?.onClick,
272
193
  onClick: (e: React.MouseEvent<HTMLDivElement>) => {
273
- if (onCellClick) {
194
+ if (cell?.onClick) {
274
195
  e.stopPropagation();
275
- onCellClick(data[index]);
196
+ cell.onClick(data[index]);
276
197
  } else if (onRowClick) {
277
198
  e.stopPropagation();
278
199
  onRowClick(data[index]);
@@ -284,15 +205,16 @@ const ReqoreTableRow = ({
284
205
  className: 'reqore-table-cell',
285
206
  } as IReqoreTableCellStyle
286
207
  }
287
- content={cellTooltip ? cellTooltip(data[index]) : undefined}
208
+ {...tooltip}
288
209
  >
289
- {renderContent(content, data[index], dataId)}
210
+ {renderContent(cell?.content, data[index], dataId)}
290
211
  </ReqorePopover>
291
- )
212
+ );
213
+ }
292
214
  );
293
215
 
294
216
  return (
295
- <StyledTableRow
217
+ <RowComponent
296
218
  style={style}
297
219
  className='reqore-table-row'
298
220
  interactive={!!onRowClick}
@@ -307,9 +229,9 @@ const ReqoreTableRow = ({
307
229
  }}
308
230
  >
309
231
  {selectable && (
310
- <StyledTableCell
232
+ <CellComponent
311
233
  align='center'
312
- width={60}
234
+ width={calculateMinimumCellWidth(50, size)}
313
235
  className='reqore-table-cell'
314
236
  {...{
315
237
  size,
@@ -343,10 +265,10 @@ const ReqoreTableRow = ({
343
265
  size={size}
344
266
  style={{ opacity: !data[index]._selectId || !isSelected ? 0.4 : 1 }}
345
267
  />
346
- </StyledTableCell>
268
+ </CellComponent>
347
269
  )}
348
270
  {renderCells(columns, data)}
349
- </StyledTableRow>
271
+ </RowComponent>
350
272
  );
351
273
  };
352
274
 
@@ -0,0 +1,30 @@
1
+ import { useState } from 'react';
2
+ import { useDebounce, useUpdateEffect } from 'react-use';
3
+
4
+ export const useQueryWithDelay = (
5
+ defaultQuery: string = '',
6
+ delay: number = 300,
7
+ onQueryChange?: (query: string | number) => void
8
+ ) => {
9
+ const [query, setQuery] = useState<string>(defaultQuery);
10
+ const [preQuery, setPreQuery] = useState<string>(defaultQuery);
11
+
12
+ useUpdateEffect(() => {
13
+ onQueryChange?.(query);
14
+ }, [query]);
15
+
16
+ useDebounce(
17
+ () => {
18
+ setQuery(preQuery);
19
+ },
20
+ delay,
21
+ [preQuery]
22
+ );
23
+
24
+ return {
25
+ query,
26
+ setQuery,
27
+ setPreQuery,
28
+ preQuery,
29
+ };
30
+ };
package/src/index.tsx CHANGED
@@ -46,6 +46,9 @@ export { default as ReqoreSidebar } from './components/Sidebar';
46
46
  export { ReqoreHorizontalSpacer, ReqoreSpacer, ReqoreVerticalSpacer } from './components/Spacer';
47
47
  export { ReqoreSpinner } from './components/Spinner';
48
48
  export { default as ReqoreTable } from './components/Table';
49
+ export { ReqoreTableBodyCell } from './components/Table/cell';
50
+ export { ReqoreTableHeaderCell } from './components/Table/headerCell';
51
+ export { default as ReqoreTableRow } from './components/Table/row';
49
52
  export { default as ReqoreTabs } from './components/Tabs';
50
53
  export { default as ReqoreTabsContent } from './components/Tabs/content';
51
54
  export { default as ReqoreTabsListItem } from './components/Tabs/item';
@@ -1,29 +1,49 @@
1
- import { IReqoreTableColumn } from '../components/Table';
1
+ import { IReqoreTableProps } from '../components/Table';
2
2
  import data from './data.json';
3
3
 
4
4
  export const tableData = data;
5
- export default {
6
- columns: [
7
- {
8
- dataId: 'id',
9
- header: 'ID',
10
- width: 50,
11
- align: 'center',
5
+ export const testColumns: IReqoreTableProps['columns'] = [
6
+ {
7
+ dataId: 'id',
8
+ header: { label: 'ID' },
9
+ width: 50,
10
+ align: 'center',
11
+ },
12
+ {
13
+ dataId: 'name',
14
+ header: {
15
+ label: 'Name',
16
+ columns: [
17
+ { dataId: 'firstName', header: { label: 'First Name' }, width: 150 },
18
+ { dataId: 'lastName', header: { label: 'Last Name' }, width: 150 },
19
+ ],
12
20
  },
13
- { dataId: 'firstName', header: 'First Name', width: 150 },
14
- { dataId: 'lastName', header: 'Last Name', width: 150 },
15
- { dataId: 'address', header: 'Address', width: 300, grow: 2 },
16
- {
17
- dataId: 'age',
18
- header: 'Really long age header',
19
- width: 50,
20
- align: 'center',
21
+ },
22
+ { dataId: 'address', header: { label: 'Address' }, width: 300, grow: 2 },
23
+ {
24
+ dataId: 'age',
25
+ header: { label: 'Really long age header' },
26
+ width: 50,
27
+ align: 'center',
28
+ cell: {
21
29
  intent: 'success',
22
30
  },
23
- { dataId: 'occupation', header: 'Ocuppation', width: 200 },
24
- { dataId: 'group', header: 'Group', width: 150, intent: 'muted' },
25
- { dataId: 'date', header: 'Date', width: 150, content: 'time-ago' },
26
- ] as IReqoreTableColumn[],
31
+ },
32
+ {
33
+ dataId: 'data',
34
+ header: {
35
+ label: 'Data',
36
+ columns: [
37
+ { dataId: 'occupation', header: { label: 'Ocuppation' }, width: 200 },
38
+ { dataId: 'group', header: { label: 'Group' }, width: 150, intent: 'muted' },
39
+ ],
40
+ },
41
+ },
42
+ { dataId: 'date', header: { label: 'Date' }, width: 150, cell: { content: 'time-ago' } },
43
+ ];
44
+
45
+ export default {
46
+ columns: testColumns,
27
47
  data: data.map((datum) => ({
28
48
  ...datum,
29
49
  date: Date.now(),
@@ -6,7 +6,7 @@ import { buildTemplate } from '../utils';
6
6
  import { SizeArg } from '../utils/args';
7
7
 
8
8
  export default {
9
- title: 'Components/Breadcrumbs',
9
+ title: 'Navigation/Breadcrumbs/Stories',
10
10
  argTypes: {
11
11
  withTabs: {
12
12
  name: 'With tabs',
@@ -6,7 +6,7 @@ import { ReqoreControlGroup } from '../../index';
6
6
  import { IconArg, SizeArg } from '../utils/args';
7
7
 
8
8
  export default {
9
- title: 'Components/Button',
9
+ title: 'Form/Button/Stories',
10
10
  parameters: {
11
11
  jest: ['button.test.tsx'],
12
12
  },
@@ -3,7 +3,7 @@ import Checkbox from '../../components/Checkbox';
3
3
  import { ReqoreCheckbox, ReqoreControlGroup, ReqoreVerticalSpacer } from '../../index';
4
4
 
5
5
  export default {
6
- title: 'Components/Checkbox',
6
+ title: 'Form/Checkbox/Stories',
7
7
  parameters: ['checkbox.test.tsx'],
8
8
  } as ComponentMeta<typeof Checkbox>;
9
9
 
@@ -14,7 +14,7 @@ export interface IColumnsStoryArgs extends IReqoreColumnsProps {
14
14
  const { createArg, disableArgs } = argManager<IReqoreCollectionProps>();
15
15
 
16
16
  export default {
17
- title: 'Components/Collection',
17
+ title: 'Collections/Collection/Stories',
18
18
  component: ReqoreCollection,
19
19
  argTypes: {
20
20
  ...createArg('stacked', {
@@ -225,3 +225,21 @@ CustomFilteringSearchingPaging.args = {
225
225
  fill: true,
226
226
  items: [...bigCollection, ...bigCollection, ...bigCollection, ...bigCollection, ...bigCollection],
227
227
  } as IReqoreCollectionProps;
228
+
229
+ export const DefaultFilter = Template.bind({});
230
+ DefaultFilter.args = {
231
+ inputProps: {
232
+ fluid: true,
233
+ },
234
+ defaultQuery: 'Med',
235
+ paging: {
236
+ itemsPerPage: 55,
237
+ scrollToTopOnPageChange: true,
238
+ },
239
+ inputInTitle: false,
240
+ responsiveTitle: true,
241
+ size: 'small',
242
+ padded: false,
243
+ fill: true,
244
+ items: [...bigCollection, ...bigCollection, ...bigCollection, ...bigCollection, ...bigCollection],
245
+ } as IReqoreCollectionProps;
@@ -18,7 +18,7 @@ export interface IColumnsStoryArgs extends IReqoreColumnsProps {
18
18
  const { createArg, disableArgs } = argManager<IColumnsStoryArgs>();
19
19
 
20
20
  export default {
21
- title: 'Components/Columns',
21
+ title: 'Layout/Columns/Stories',
22
22
  component: ReqoreColumns,
23
23
  argTypes: {
24
24
  ...createArg('multipleColumns', {
@@ -6,7 +6,7 @@ import { argManager } from '../utils/args';
6
6
  const { createArg } = argManager<IReqoreCommentFeedProps>();
7
7
 
8
8
  export default {
9
- title: 'Components/Comments',
9
+ title: 'Other/Comments/Stories',
10
10
  argTypes: {
11
11
  ...createArg('gapSize', {
12
12
  defaultValue: '0',
@@ -14,7 +14,7 @@ import { GapSizeArg, MinimalArg, SizeArg, argManager } from '../utils/args';
14
14
  const { createArg } = argManager<IReqoreControlGroupProps>();
15
15
 
16
16
  export default {
17
- title: 'Components/Control Group',
17
+ title: 'Form/Control Group/Stories',
18
18
  argTypes: {
19
19
  ...SizeArg,
20
20
  ...GapSizeArg,
@@ -15,7 +15,7 @@ import { FlatArg, IntentArg, argManager } from '../utils/args';
15
15
  const { createArg } = argManager<IReqoreDrawerProps>();
16
16
 
17
17
  export default {
18
- title: 'Components/Drawer',
18
+ title: 'Dialogs/Drawer/Stories',
19
19
  parameters: {
20
20
  chromatic: {
21
21
  viewports: [450, 600, 1440],
@@ -170,8 +170,8 @@ const Template: Story<IReqoreDrawerProps> = (args: IReqoreDrawerProps) => {
170
170
  {
171
171
  label: 'More actions',
172
172
  actions: [
173
- { value: 'Sub Test', icon: 'FileDownloadLine' },
174
- { value: 'Sub Test 2', icon: 'FileDownloadLine', intent: 'success' },
173
+ { label: 'Sub Test', icon: 'FileDownloadLine' },
174
+ { label: 'Sub Test 2', icon: 'FileDownloadLine', intent: 'success' },
175
175
  ],
176
176
  intent: 'info',
177
177
  },
@@ -189,8 +189,8 @@ const Template: Story<IReqoreDrawerProps> = (args: IReqoreDrawerProps) => {
189
189
  label: 'More actions',
190
190
  position: 'right',
191
191
  actions: [
192
- { value: 'Sub Test', icon: 'FileDownloadLine', intent: 'success' },
193
- { value: 'Sub Test 2', icon: 'FileDownloadLine' },
192
+ { label: 'Sub Test', icon: 'FileDownloadLine', intent: 'success' },
193
+ { label: 'Sub Test 2', icon: 'FileDownloadLine' },
194
194
  ],
195
195
  },
196
196
  ]}
@@ -7,7 +7,7 @@ import { argManager } from '../utils/args';
7
7
  const { createArg, disableArg } = argManager<IReqoreDropdownProps>();
8
8
 
9
9
  export default {
10
- title: 'Components/Dropdown',
10
+ title: 'Form/Dropdown/Stories',
11
11
  parameters: {
12
12
  chromatic: {
13
13
  delay: 1500,
@@ -225,6 +225,16 @@ ScrollToSelectedItem.args = {
225
225
  scrollToSelected: true,
226
226
  label: 'Dropdown that scrolls to selected item',
227
227
  };
228
+
229
+ export const WithCustomFilter: Story<IReqoreDropdownProps> = Template.bind({});
230
+ WithCustomFilter.args = {
231
+ label: 'Dropdown with custom filter',
232
+ filterPlaceholder: 'Custom filter placeholder',
233
+ filter: 'something',
234
+ onFilterChange: (value) => {
235
+ console.log(value);
236
+ },
237
+ };
228
238
  export const WithPaging: Story<IReqoreDropdownProps> = Template.bind({});
229
239
  WithPaging.args = {
230
240
  paging: {
@@ -4,7 +4,7 @@ import { ReqoreControlGroup, ReqoreHeading } from '../../index';
4
4
  import { IntentArg } from '../utils/args';
5
5
 
6
6
  export default {
7
- title: 'Components/Heading',
7
+ title: 'Other/Heading/Stories',
8
8
  argTypes: {
9
9
  ...IntentArg,
10
10
  },
@@ -3,7 +3,7 @@ import { IReqoreIconProps } from '../../components/Icon';
3
3
  import { ReqoreIcon, ReqorePanel } from '../../index';
4
4
 
5
5
  export default {
6
- title: 'Components/Icon',
6
+ title: 'Other/Icon/Stories',
7
7
  } as Meta;
8
8
 
9
9
  export const Icon: Story<IReqoreIconProps> = () => {
@@ -5,7 +5,7 @@ import { ReqoreControlGroup } from '../../index';
5
5
  import { FlatArg, IconArg, MinimalArg, SizeArg } from '../utils/args';
6
6
 
7
7
  export default {
8
- title: 'Components/Input',
8
+ title: 'Form/Input/Stories',
9
9
  argTypes: {
10
10
  ...MinimalArg,
11
11
  ...FlatArg,
@@ -13,7 +13,7 @@ import { IntentArg, argManager } from '../utils/args';
13
13
  const { createArg } = argManager<IReqoreMenuProps>();
14
14
 
15
15
  export default {
16
- title: 'Components/Menu',
16
+ title: 'Navigation/Menu/Stories',
17
17
  argTypes: {
18
18
  ...createArg('width', {
19
19
  type: 'string',
@@ -6,7 +6,7 @@ import { FlatArg, IntentArg, SizeArg, argManager } from '../utils/args';
6
6
  const { createArg } = argManager<IReqoreMessageProps>();
7
7
 
8
8
  export default {
9
- title: 'Components/Message',
9
+ title: 'Other/Message/Stories',
10
10
  argTypes: {
11
11
  ...SizeArg,
12
12
  ...FlatArg,
@@ -8,7 +8,7 @@ import { FlatArg, IntentArg, argManager } from '../utils/args';
8
8
  const { createArg } = argManager<IReqoreModalProps>();
9
9
 
10
10
  export default {
11
- title: 'Components/Modal',
11
+ title: 'Dialogs/Modal/Stories',
12
12
  argTypes: {
13
13
  ...IntentArg,
14
14
  ...FlatArg,
@@ -8,7 +8,7 @@ import { FlatArg, IconArg, MinimalArg, SizeArg, argManager } from '../utils/args
8
8
  const { createArg } = argManager<IReqoreMultiSelectProps>();
9
9
 
10
10
  export default {
11
- title: 'Components/Multi Select',
11
+ title: 'Form/Multi Select/Stories',
12
12
  parameters: {
13
13
  chromatic: {
14
14
  delay: 500,
@@ -17,7 +17,7 @@ import {
17
17
  import { FlatArg, NoContentArg } from '../utils/args';
18
18
 
19
19
  export default {
20
- title: 'Components/Header - Footer Navbar',
20
+ title: 'Layout/Header & Footer/Stories',
21
21
  argTypes: {
22
22
  ...FlatArg,
23
23
  ...NoContentArg,
@@ -6,7 +6,7 @@ import { IReqoreUIProviderProps } from '../../containers/UIProvider';
6
6
  import { ReqoreUIProvider, useReqoreProperty } from '../../index';
7
7
 
8
8
  export default {
9
- title: 'Components/Notifications/Interactive',
9
+ title: 'Other/Notifications/Interactive/Stories',
10
10
  component: ReqoreNotification,
11
11
  } as Meta;
12
12
 
@@ -9,7 +9,7 @@ import { IReqoreUIProviderProps } from '../../containers/UIProvider';
9
9
  import { ReqoreTag, ReqoreUIProvider } from '../../index';
10
10
 
11
11
  export default {
12
- title: 'Components/Notifications/Item',
12
+ title: 'Other/Notifications/Item/Stories',
13
13
  component: ReqoreNotification,
14
14
  } as Meta;
15
15
 
@@ -10,7 +10,7 @@ import { IReqoreUIProviderProps } from '../../containers/UIProvider';
10
10
  import { ReqoreUIProvider } from '../../index';
11
11
 
12
12
  export default {
13
- title: 'Components/Notifications/Wrapper',
13
+ title: 'Other/Notifications/Wrapper/Stories',
14
14
  component: ReqoreNotification,
15
15
  } as Meta;
16
16
 
@@ -7,7 +7,7 @@ import { ReqoreControlGroup, ReqoreTag, useReqorePaging } from '../../index';
7
7
  import { tableData } from '../../mock/tableData';
8
8
 
9
9
  export default {
10
- title: 'Components/Paging',
10
+ title: 'Collections/Paging/Stories',
11
11
  } as StoryObj<typeof ReqorePagination>;
12
12
 
13
13
  const Template: Story<IReqorePaginationProps<any> & { pagingOptions?: IReqorePagingOptions<any> }> =