@qoretechnologies/reqore 0.44.0 → 0.45.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 (222) hide show
  1. package/package.json +1 -1
  2. package/tests.json +1 -1
  3. package/.eslintrc.js +0 -40
  4. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  5. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  6. package/.github/ISSUE_TEMPLATE/new-component.md +0 -20
  7. package/.github/ISSUE_TEMPLATE/visual-bug-report.md +0 -38
  8. package/.github/workflows/beta_release.yml +0 -100
  9. package/.github/workflows/tests.yml +0 -84
  10. package/.gitpod.yml +0 -11
  11. package/.jest-test-results.json +0 -1
  12. package/.prettierrc +0 -7
  13. package/.vscode/settings.json +0 -0
  14. package/__tests__/breadcrumbs.test.tsx +0 -75
  15. package/__tests__/button.test.tsx +0 -218
  16. package/__tests__/checkbox.test.tsx +0 -45
  17. package/__tests__/collection.test.tsx +0 -243
  18. package/__tests__/containers/paging.test.tsx +0 -138
  19. package/__tests__/control_group.test.tsx +0 -32
  20. package/__tests__/drawer.test.tsx +0 -140
  21. package/__tests__/dropdown.test.tsx +0 -381
  22. package/__tests__/effect.test.tsx +0 -70
  23. package/__tests__/heading.test.tsx +0 -58
  24. package/__tests__/helpers/colors.test.tsx +0 -18
  25. package/__tests__/helpers/table.test.tsx +0 -67
  26. package/__tests__/hooks/useLatestZIndex.test.tsx +0 -10
  27. package/__tests__/hooks/useReqorePaging.test.tsx +0 -271
  28. package/__tests__/hooks/useTheme.test.tsx +0 -31
  29. package/__tests__/icon.test.tsx +0 -53
  30. package/__tests__/input.test.tsx +0 -482
  31. package/__tests__/layout.test.tsx +0 -37
  32. package/__tests__/menu.test.tsx +0 -65
  33. package/__tests__/messages.test.tsx +0 -79
  34. package/__tests__/modal.test.tsx +0 -204
  35. package/__tests__/multiselect.test.tsx +0 -458
  36. package/__tests__/navbar.test.tsx +0 -31
  37. package/__tests__/notifications.test.tsx +0 -178
  38. package/__tests__/pagination.test.tsx +0 -437
  39. package/__tests__/panel.test.tsx +0 -243
  40. package/__tests__/popover.test.tsx +0 -282
  41. package/__tests__/radiogroup.test.tsx +0 -47
  42. package/__tests__/setup.js +0 -8
  43. package/__tests__/stories/Collection.stories.tsx +0 -0
  44. package/__tests__/table.test.tsx +0 -647
  45. package/__tests__/tabs.test.tsx +0 -321
  46. package/__tests__/tag.test.tsx +0 -160
  47. package/__tests__/textarea.test.tsx +0 -467
  48. package/__tests__/timeAgo.test.tsx +0 -27
  49. package/__tests__/tree.test.tsx +0 -58
  50. package/build-storybook.log +0 -491
  51. package/chromatic.config.json +0 -1
  52. package/icons.ts +0 -1
  53. package/migration-storybook.log +0 -56
  54. package/public/logo-dark.png +0 -0
  55. package/public/logo.png +0 -0
  56. package/public/q-symbol-small.png +0 -0
  57. package/public/q-symbol.png +0 -0
  58. package/public/qoreLogo-dark.png +0 -0
  59. package/public/qoreLogo.png +0 -0
  60. package/src/components/Breadcrumbs/index.tsx +0 -254
  61. package/src/components/Breadcrumbs/item.tsx +0 -44
  62. package/src/components/Button/index.tsx +0 -633
  63. package/src/components/Checkbox/index.tsx +0 -388
  64. package/src/components/Collection/index.tsx +0 -426
  65. package/src/components/Collection/item.tsx +0 -267
  66. package/src/components/Columns/column.tsx +0 -27
  67. package/src/components/Columns/index.tsx +0 -41
  68. package/src/components/Comment/index.tsx +0 -141
  69. package/src/components/CommentFeed/index.tsx +0 -34
  70. package/src/components/Content/index.tsx +0 -34
  71. package/src/components/Content/wrapper.tsx +0 -36
  72. package/src/components/ControlGroup/index.tsx +0 -523
  73. package/src/components/DatePicker/index.tsx +0 -347
  74. package/src/components/Drawer/backdrop.tsx +0 -54
  75. package/src/components/Drawer/index.tsx +0 -365
  76. package/src/components/Dropdown/index.tsx +0 -153
  77. package/src/components/Dropdown/item.tsx +0 -33
  78. package/src/components/Dropdown/list.tsx +0 -222
  79. package/src/components/Effect/index.tsx +0 -464
  80. package/src/components/ExportModal/index.tsx +0 -99
  81. package/src/components/Header/index.tsx +0 -81
  82. package/src/components/Icon/index.tsx +0 -184
  83. package/src/components/Input/index.tsx +0 -295
  84. package/src/components/InputClearButton/index.tsx +0 -59
  85. package/src/components/InternalPopover/index.tsx +0 -303
  86. package/src/components/KeyValueTable/index.tsx +0 -192
  87. package/src/components/Label/index.tsx +0 -10
  88. package/src/components/Layout/content.tsx +0 -31
  89. package/src/components/Layout/index.tsx +0 -55
  90. package/src/components/Menu/divider.tsx +0 -92
  91. package/src/components/Menu/index.tsx +0 -141
  92. package/src/components/Menu/item.tsx +0 -137
  93. package/src/components/Menu/section.tsx +0 -81
  94. package/src/components/Message/index.tsx +0 -220
  95. package/src/components/Modal/index.tsx +0 -26
  96. package/src/components/MultiSelect/index.tsx +0 -288
  97. package/src/components/Navbar/divider.tsx +0 -50
  98. package/src/components/Navbar/group.tsx +0 -53
  99. package/src/components/Navbar/index.tsx +0 -82
  100. package/src/components/Navbar/item.tsx +0 -92
  101. package/src/components/Notifications/index.tsx +0 -57
  102. package/src/components/Notifications/notification.tsx +0 -362
  103. package/src/components/Paging/index.tsx +0 -321
  104. package/src/components/Panel/LabelEditor.tsx +0 -67
  105. package/src/components/Panel/NonResponsiveActions.tsx +0 -79
  106. package/src/components/Panel/__screenshots__/linux/panel-SomePanel.png +0 -0
  107. package/src/components/Panel/index.tsx +0 -912
  108. package/src/components/Panel/panel.screenshot.tsx +0 -29
  109. package/src/components/Paragraph/index.tsx +0 -43
  110. package/src/components/Popover/index.tsx +0 -68
  111. package/src/components/RadioGroup/index.tsx +0 -71
  112. package/src/components/Slider/index.tsx +0 -358
  113. package/src/components/Spacer/index.tsx +0 -142
  114. package/src/components/Spinner/index.tsx +0 -74
  115. package/src/components/Table/body.tsx +0 -109
  116. package/src/components/Table/cell.tsx +0 -136
  117. package/src/components/Table/header.tsx +0 -236
  118. package/src/components/Table/headerCell.tsx +0 -203
  119. package/src/components/Table/helpers.ts +0 -308
  120. package/src/components/Table/index.tsx +0 -797
  121. package/src/components/Table/row.tsx +0 -288
  122. package/src/components/Table/value.tsx +0 -28
  123. package/src/components/Tabs/content.tsx +0 -68
  124. package/src/components/Tabs/index.tsx +0 -124
  125. package/src/components/Tabs/item.tsx +0 -198
  126. package/src/components/Tabs/list.tsx +0 -381
  127. package/src/components/Tag/group.tsx +0 -73
  128. package/src/components/Tag/index.tsx +0 -463
  129. package/src/components/Textarea/index.tsx +0 -277
  130. package/src/components/TimeAgo/index.tsx +0 -15
  131. package/src/components/Tree/index.tsx +0 -271
  132. package/src/constants/animations.ts +0 -9
  133. package/src/constants/colors.ts +0 -13
  134. package/src/constants/paging.ts +0 -93
  135. package/src/constants/sizes.ts +0 -185
  136. package/src/constants/theme.ts +0 -122
  137. package/src/containers/Paging.tsx +0 -136
  138. package/src/containers/PopoverProvider.tsx +0 -124
  139. package/src/containers/ReqoreProvider.tsx +0 -289
  140. package/src/containers/ThemeProvider.tsx +0 -12
  141. package/src/containers/UIProvider.tsx +0 -101
  142. package/src/context/PopoverContext.tsx +0 -11
  143. package/src/context/ReqoreContext.tsx +0 -47
  144. package/src/context/ThemeContext.tsx +0 -4
  145. package/src/helpers/animations.ts +0 -13
  146. package/src/helpers/colors.ts +0 -335
  147. package/src/helpers/time.ts +0 -21
  148. package/src/helpers/utils.ts +0 -152
  149. package/src/hooks/useAutoFocus.ts +0 -106
  150. package/src/hooks/useCloneThroughFragments.ts +0 -39
  151. package/src/hooks/useCombinedRefs.ts +0 -26
  152. package/src/hooks/useLatestZIndex.ts +0 -13
  153. package/src/hooks/useOutsideClick.ts +0 -29
  154. package/src/hooks/usePaging.ts +0 -128
  155. package/src/hooks/usePopover.tsx +0 -220
  156. package/src/hooks/useQueryWithDelay.ts +0 -30
  157. package/src/hooks/useReqore.ts +0 -12
  158. package/src/hooks/useReqoreContext.ts +0 -16
  159. package/src/hooks/useReqoreEffect.ts +0 -49
  160. package/src/hooks/useTextareaAutoSize.ts +0 -22
  161. package/src/hooks/useTheme.ts +0 -48
  162. package/src/hooks/useTooltip.ts +0 -40
  163. package/src/hooks/useWhyDidYouUpdate.ts +0 -32
  164. package/src/icons.json +0 -2295
  165. package/src/index.tsx +0 -80
  166. package/src/mock/breadcrumbs.ts +0 -146
  167. package/src/mock/collectionData.tsx +0 -380
  168. package/src/mock/data.json +0 -11000
  169. package/src/mock/icons.ts +0 -32
  170. package/src/mock/menu.ts +0 -93
  171. package/src/mock/multiSelect.ts +0 -71
  172. package/src/mock/object.json +0 -317
  173. package/src/mock/styleMock.js +0 -1
  174. package/src/mock/tableData.ts +0 -64
  175. package/src/stories/Breadcrumbs/Breadcrumbs.stories.tsx +0 -27
  176. package/src/stories/Button/Button.stories.tsx +0 -405
  177. package/src/stories/Checkbox/Checkbox.stories.tsx +0 -75
  178. package/src/stories/Collection/Collection.stories.tsx +0 -317
  179. package/src/stories/Columns/Columns.stories.tsx +0 -158
  180. package/src/stories/Comment/Comment.stories.tsx +0 -136
  181. package/src/stories/ControlGroup/ControlGroup.stories.tsx +0 -399
  182. package/src/stories/DatePicker/DatePicker.stories.tsx +0 -348
  183. package/src/stories/Drawer/Drawer.stories.tsx +0 -294
  184. package/src/stories/Dropdown/Dropdown.stories.tsx +0 -375
  185. package/src/stories/Dropdown/DropdownTests.stories.tsx +0 -111
  186. package/src/stories/ExportModal/ExportModal.stories.tsx +0 -18
  187. package/src/stories/Header/Header.stories.tsx +0 -108
  188. package/src/stories/Icon/Icon.stories.tsx +0 -162
  189. package/src/stories/Input/Input.stories.tsx +0 -220
  190. package/src/stories/KeyValueTable/KeyValueTable.stories.tsx +0 -346
  191. package/src/stories/Label/Label.stories.tsx +0 -33
  192. package/src/stories/Menu/Menu.stories.tsx +0 -367
  193. package/src/stories/Message/Message.stories.tsx +0 -167
  194. package/src/stories/Modal/Manager.stories.tsx +0 -192
  195. package/src/stories/Modal/Modal.stories.tsx +0 -252
  196. package/src/stories/MultiSelect/MultiSelect.stories.tsx +0 -140
  197. package/src/stories/Navbar/Navbar.stories.tsx +0 -119
  198. package/src/stories/Notifications/Interactive.stories.tsx +0 -117
  199. package/src/stories/Notifications/Notification.stories.tsx +0 -216
  200. package/src/stories/Notifications/Notifications.stories.tsx +0 -81
  201. package/src/stories/Paging/Paging.stories.tsx +0 -255
  202. package/src/stories/Panel/Panel.stories.tsx +0 -753
  203. package/src/stories/Paragraph/Paragraph.stories.tsx +0 -108
  204. package/src/stories/Popover/Popover.stories.tsx +0 -510
  205. package/src/stories/RadioGroup/RadioGroup.stories.tsx +0 -212
  206. package/src/stories/Slider/Slider.stories.tsx +0 -173
  207. package/src/stories/Spacer/Spacer.stories.tsx +0 -100
  208. package/src/stories/Spinner/Spinner.stories.tsx +0 -82
  209. package/src/stories/Table/Table.stories.tsx +0 -571
  210. package/src/stories/Tabs/Tabs.stories.tsx +0 -346
  211. package/src/stories/Tag/Tag.stories.tsx +0 -381
  212. package/src/stories/Tag/TagGroup.stories.tsx +0 -307
  213. package/src/stories/TextArea/TextArea.stories.tsx +0 -287
  214. package/src/stories/TextArea/TextAreaTests.stories.tsx +0 -108
  215. package/src/stories/Tree/Tree.stories.tsx +0 -124
  216. package/src/stories/Wrapper.tsx +0 -13
  217. package/src/stories/utils/args.ts +0 -151
  218. package/src/stories/utils.ts +0 -39
  219. package/src/styles.ts +0 -124
  220. package/src/types/global.ts +0 -211
  221. package/src/types/icons.ts +0 -2272
  222. package/tsconfig.prod.json +0 -26
@@ -1,204 +0,0 @@
1
- import { act, fireEvent, render, screen } from '@testing-library/react';
2
- import React, { useState } from 'react';
3
- import {
4
- ReqoreButton,
5
- ReqoreContent,
6
- ReqoreLayoutContent,
7
- ReqoreModal,
8
- ReqoreUIProvider,
9
- useReqore,
10
- } from '../src';
11
- import { useReqoreProperty } from '../src/hooks/useReqoreContext';
12
-
13
- test('Renders basic <Modal /> properly', () => {
14
- render(
15
- <ReqoreUIProvider>
16
- <ReqoreLayoutContent>
17
- <ReqoreContent>
18
- <ReqoreModal isOpen>Basic modal</ReqoreModal>
19
- </ReqoreContent>
20
- </ReqoreLayoutContent>
21
- </ReqoreUIProvider>
22
- );
23
-
24
- expect(document.querySelectorAll('.reqore-modal').length).toBe(1);
25
- });
26
-
27
- test('Does not renders <Modal /> if its not open', () => {
28
- render(
29
- <ReqoreUIProvider>
30
- <ReqoreLayoutContent>
31
- <ReqoreContent>
32
- <ReqoreModal>Basic modal</ReqoreModal>
33
- </ReqoreContent>
34
- </ReqoreLayoutContent>
35
- </ReqoreUIProvider>
36
- );
37
-
38
- expect(document.querySelectorAll('.reqore-modal').length).toBe(0);
39
- });
40
-
41
- test('Renders <Modal /> with custom dimensions', () => {
42
- render(
43
- <ReqoreUIProvider>
44
- <ReqoreLayoutContent>
45
- <ReqoreContent>
46
- <ReqoreModal width='700px' height='700px'>
47
- Resized modal
48
- </ReqoreModal>
49
- </ReqoreContent>
50
- </ReqoreLayoutContent>
51
- </ReqoreUIProvider>
52
- );
53
-
54
- expect(document.querySelectorAll('.reqore-modal').length).toBe(0);
55
- });
56
-
57
- const ConfirmButton = ({ confirmFn, cancelFn }) => {
58
- const reqoreContext = useReqore();
59
-
60
- return (
61
- <>
62
- <ReqoreButton
63
- id='custom-confirm'
64
- onClick={() => {
65
- reqoreContext?.confirmAction({
66
- title: 'Are you sure mate?',
67
- description: 'Do you really wanna do this?',
68
- confirmButtonIntent: 'warning',
69
- confirmIcon: 'SunFill',
70
- confirmLabel: 'Yep',
71
- onConfirm: () => confirmFn(),
72
- onCancel: () => cancelFn(),
73
- });
74
- }}
75
- >
76
- {' '}
77
- Custom confirm action{' '}
78
- </ReqoreButton>
79
- <br />
80
- <ReqoreButton
81
- id='confirm'
82
- onClick={() => {
83
- reqoreContext?.confirmAction({
84
- onConfirm: () => confirmFn(),
85
- onCancel: () => cancelFn(),
86
- });
87
- }}
88
- >
89
- {' '}
90
- Confirm action{' '}
91
- </ReqoreButton>
92
- <br />
93
- {status && <p>{status}</p>}
94
- </>
95
- );
96
- };
97
-
98
- const ConfirmButtonFromModal = ({ confirmFn, cancelFn }) => {
99
- const confirmAction = useReqoreProperty('confirmAction');
100
- const [isDialogOpen, setIsDialogOpen] = useState(false);
101
-
102
- return (
103
- <>
104
- <ReqoreButton
105
- id='dialog'
106
- onClick={() => {
107
- setIsDialogOpen(true);
108
- }}
109
- >
110
- Open Dialog
111
- </ReqoreButton>
112
- {isDialogOpen && (
113
- <ReqoreModal
114
- isOpen
115
- id='confirm'
116
- actions={[
117
- {
118
- label: 'Open Confirm',
119
- id: 'open-confirm',
120
- onClick: () => {
121
- confirmAction({
122
- description: 'Do you really wanna do this?',
123
- onConfirm: () => confirmFn(),
124
- onCancel: () => cancelFn(),
125
- });
126
- },
127
- },
128
- ]}
129
- >
130
- Modal
131
- </ReqoreModal>
132
- )}
133
- </>
134
- );
135
- };
136
-
137
- test('Renders confirmation <Modal /> ', () => {
138
- const confirmFn = jest.fn();
139
- const cancelFn = jest.fn();
140
-
141
- act(() => {
142
- render(
143
- <ReqoreUIProvider options={{ animations: { dialogs: false } }}>
144
- <ReqoreLayoutContent>
145
- <ReqoreContent>
146
- <ConfirmButton confirmFn={confirmFn} cancelFn={cancelFn} />
147
- </ReqoreContent>
148
- </ReqoreLayoutContent>
149
- </ReqoreUIProvider>
150
- );
151
- });
152
-
153
- fireEvent.click(document.getElementById('custom-confirm')!);
154
- fireEvent.click(screen.getAllByText('Yep')[0]);
155
-
156
- expect(confirmFn).toHaveBeenCalled();
157
-
158
- fireEvent.click(document.getElementById('confirm')!);
159
- fireEvent.click(screen.getAllByText('Confirm')[0]);
160
-
161
- expect(confirmFn).toHaveBeenCalledTimes(2);
162
-
163
- fireEvent.click(document.getElementById('custom-confirm')!);
164
- fireEvent.click(screen.getAllByText('Cancel')[0]);
165
-
166
- expect(cancelFn).toHaveBeenCalled();
167
-
168
- fireEvent.click(document.getElementById('confirm')!);
169
- fireEvent.click(screen.getAllByText('Cancel')[0]);
170
-
171
- expect(cancelFn).toHaveBeenCalledTimes(2);
172
- });
173
-
174
- test('Always renders confirmation <Modal /> properly above a normal modal', () => {
175
- const confirmFn = jest.fn();
176
- const cancelFn = jest.fn();
177
-
178
- act(() => {
179
- render(
180
- <ReqoreUIProvider options={{ animations: { dialogs: false } }}>
181
- <ReqoreLayoutContent>
182
- <ReqoreContent>
183
- <ConfirmButtonFromModal confirmFn={confirmFn} cancelFn={cancelFn} />
184
- </ReqoreContent>
185
- </ReqoreLayoutContent>
186
- </ReqoreUIProvider>
187
- );
188
- });
189
-
190
- fireEvent.click(document.getElementById('dialog')!);
191
- expect(document.querySelectorAll('.reqore-modal').length).toBe(1);
192
-
193
- fireEvent.click(screen.getAllByText('Open Confirm')[0]);
194
- expect(document.querySelectorAll('.reqore-modal').length).toBe(2);
195
- expect(document.querySelectorAll('.reqore-confirmation-modal').length).toBe(1);
196
-
197
- // @ts-ignore
198
- const zIndex = document.querySelectorAll('.reqore-modal')[0].style.zIndex;
199
- // @ts-ignore
200
- const zIndexConfirmation = document.querySelectorAll('.reqore-confirmation-modal')[0].style
201
- .zIndex;
202
-
203
- expect(parseInt(zIndexConfirmation)).toBeGreaterThan(parseInt(zIndex));
204
- });
@@ -1,458 +0,0 @@
1
- import { act, fireEvent, render, screen } from '@testing-library/react';
2
- import React from 'react';
3
- import { ReqoreMultiSelect, ReqoreUIProvider } from '../src';
4
- import { IReqoreMultiSelectProps } from '../src/components/MultiSelect';
5
- import { MultiSelectItems } from '../src/mock/multiSelect';
6
-
7
- beforeAll(() => {
8
- jest.setTimeout(30000);
9
- jest.useFakeTimers();
10
- });
11
-
12
- const MultiSelectItemsTestComponent = ({
13
- onValueChange,
14
- value,
15
- ...rest
16
- }: Partial<IReqoreMultiSelectProps>) => {
17
- const [selected, setSelected] = React.useState<string[] | undefined>(value);
18
-
19
- return (
20
- <ReqoreUIProvider>
21
- <ReqoreMultiSelect
22
- {...rest}
23
- value={selected}
24
- onValueChange={(value) => {
25
- setSelected(value);
26
- onValueChange?.(value);
27
- }}
28
- />
29
- </ReqoreUIProvider>
30
- );
31
- };
32
-
33
- test('Renders empty <ReqoreMultiSelect />', () => {
34
- act(() => {
35
- render(<MultiSelectItemsTestComponent items={MultiSelectItems} />);
36
- });
37
-
38
- jest.advanceTimersByTime(1);
39
-
40
- expect(screen.getByText('No items selected')).toBeTruthy();
41
- expect(document.querySelectorAll('.reqore-input')?.length).toBe(1);
42
- expect(document.querySelector('.reqore-input')?.getAttribute('disabled')).toBe(null);
43
- expect(document.querySelectorAll('.reqore-popover-content').length).toBe(0);
44
- // No items tag
45
- expect(document.querySelectorAll('.reqore-tag').length).toBe(1);
46
- });
47
-
48
- test('Renders <ReqoreMultiSelect /> with default value', () => {
49
- act(() => {
50
- render(
51
- <MultiSelectItemsTestComponent
52
- items={MultiSelectItems}
53
- value={['Existing item 1', 'Existing item 3']}
54
- />
55
- );
56
- });
57
-
58
- jest.advanceTimersByTime(1);
59
-
60
- expect(document.querySelectorAll('.reqore-tag').length).toBe(2);
61
- expect(screen.getByText('Existing item 1')).toBeTruthy();
62
- expect(screen.getByText('Existing item 3')).toBeTruthy();
63
- });
64
-
65
- test('Renders <ReqoreMultiSelect /> with default value, items can be removed', () => {
66
- act(() => {
67
- render(
68
- <MultiSelectItemsTestComponent
69
- items={MultiSelectItems}
70
- value={['Existing item 1', 'Existing item 3']}
71
- canRemoveItems
72
- />
73
- );
74
- });
75
-
76
- jest.advanceTimersByTime(1);
77
-
78
- fireEvent.click(document.querySelectorAll('.reqore-tag-remove')[0]!);
79
-
80
- expect(document.querySelectorAll('.reqore-tag').length).toBe(1);
81
- expect(screen.getByText('Existing item 3')).toBeTruthy();
82
- });
83
-
84
- test('Renders disabled <ReqoreMultiSelect /> when items are empty and items CANNOT be created', () => {
85
- act(() => {
86
- render(<MultiSelectItemsTestComponent />);
87
- });
88
-
89
- fireEvent.focus(document.querySelector('.reqore-input')!);
90
-
91
- expect(document.querySelector('.reqore-input')?.getAttribute('disabled')).toBe('');
92
- expect(document.querySelectorAll('.reqore-popover-content').length).toBe(0);
93
- });
94
-
95
- test('Renders empty <ReqoreMultiSelect /> when items are empty and items CAN be created', () => {
96
- act(() => {
97
- render(<MultiSelectItemsTestComponent canCreateItems />);
98
- });
99
-
100
- fireEvent.focus(document.querySelector('.reqore-input')!);
101
-
102
- jest.advanceTimersByTime(1);
103
-
104
- expect(document.querySelector('.reqore-input')?.getAttribute('disabled')).toBe(null);
105
- expect(document.querySelectorAll('.reqore-popover-content').length).toBe(1);
106
- expect(screen.getAllByText('No items exist')).toBeTruthy();
107
- });
108
-
109
- test('Renders <ReqoreMultiSelect /> and selects / deselects items from the list', () => {
110
- act(() => {
111
- render(<MultiSelectItemsTestComponent items={MultiSelectItems} />);
112
- });
113
-
114
- fireEvent.focus(document.querySelector('.reqore-input')!);
115
-
116
- jest.advanceTimersByTime(1);
117
-
118
- fireEvent.click(screen.getAllByText('Existing item 3')[1]);
119
-
120
- expect(document.querySelectorAll('.reqore-tag').length).toBe(1);
121
- expect(screen.getAllByText('Existing item 3')).toBeTruthy();
122
- // Keeps the list open
123
- expect(document.querySelectorAll('.reqore-popover-content').length).toBe(1);
124
-
125
- fireEvent.click(screen.getAllByText('Disabled item')[1]);
126
-
127
- expect(document.querySelectorAll('.reqore-tag').length).toBe(1);
128
-
129
- // Deselect an item from the list
130
- fireEvent.click(screen.getAllByText('Existing item 3')[1]);
131
- expect(document.querySelectorAll('.reqore-tag').length).toBe(1);
132
- expect(screen.getAllByText('No items selected')).toBeTruthy();
133
- });
134
-
135
- test('Renders <ReqoreMultiSelect /> and items can be searched, opens up the list', () => {
136
- act(() => {
137
- render(<MultiSelectItemsTestComponent items={MultiSelectItems} />);
138
- });
139
-
140
- expect(document.querySelectorAll('.reqore-popover-content').length).toBe(0);
141
-
142
- fireEvent.change(document.querySelector('.reqore-input')!, {
143
- target: { value: 'Existing item' },
144
- });
145
-
146
- jest.advanceTimersByTime(1);
147
-
148
- expect(document.querySelectorAll('.reqore-popover-content').length).toBe(1);
149
- // 4 items + 1 button for clearable input
150
- expect(document.querySelectorAll('.reqore-button').length).toBe(4);
151
-
152
- fireEvent.change(document.querySelector('.reqore-input')!, {
153
- target: { value: 'Nothing' },
154
- });
155
-
156
- expect(document.querySelectorAll('.reqore-button').length).toBe(1);
157
- expect(screen.getAllByText('No existing items found')).toBeTruthy();
158
- });
159
-
160
- test('Renders <ReqoreMultiSelect /> and items can be searched and created, opens up the list', () => {
161
- act(() => {
162
- render(<MultiSelectItemsTestComponent items={MultiSelectItems} canCreateItems />);
163
- });
164
-
165
- expect(document.querySelectorAll('.reqore-popover-content').length).toBe(0);
166
-
167
- fireEvent.change(document.querySelector('.reqore-input')!, {
168
- target: { value: 'Existing item 1' },
169
- });
170
-
171
- jest.advanceTimersByTime(1);
172
-
173
- expect(document.querySelectorAll('.reqore-popover-content').length).toBe(1);
174
- // 4 items + 1 button for clearable input
175
- expect(document.querySelectorAll('.reqore-button').length).toBe(1);
176
-
177
- fireEvent.change(document.querySelector('.reqore-input')!, {
178
- target: { value: 'Existing item' },
179
- });
180
-
181
- expect(document.querySelectorAll('.reqore-button').length).toBe(5);
182
- expect(screen.getAllByText('Create new "Existing item"')).toBeTruthy();
183
-
184
- // This has to fail because we do not allow creating items with ENTER key
185
- fireEvent.keyDown(document.querySelector('.reqore-input')!, {
186
- key: 'Enter',
187
- });
188
-
189
- expect(screen.getByText('No items selected')).toBeTruthy();
190
-
191
- // Create the item by clicking
192
- fireEvent.click(screen.getAllByText('Create new "Existing item"')[1]);
193
-
194
- expect(document.querySelectorAll('.reqore-tag').length).toBe(1);
195
- expect(screen.getAllByText('Existing item')).toBeTruthy();
196
-
197
- fireEvent.change(document.querySelector('.reqore-input')!, {
198
- target: { value: 'Existing item' },
199
- });
200
-
201
- // 6 again because the item is already created, so the Create button is not there
202
- expect(document.querySelectorAll('.reqore-button').length).toBe(5);
203
- });
204
-
205
- test('Renders <ReqoreMultiSelect /> and items can be searched and created using the ENTER key, opens up the list', () => {
206
- act(() => {
207
- render(
208
- <MultiSelectItemsTestComponent items={MultiSelectItems} canCreateItems enterKeySelects />
209
- );
210
- });
211
-
212
- expect(document.querySelectorAll('.reqore-popover-content').length).toBe(0);
213
-
214
- fireEvent.change(document.querySelector('.reqore-input')!, {
215
- target: { value: 'Existing item 1' },
216
- });
217
-
218
- jest.advanceTimersByTime(1);
219
-
220
- expect(document.querySelectorAll('.reqore-popover-content').length).toBe(1);
221
- // 4 items + 1 button for clearable input
222
- expect(document.querySelectorAll('.reqore-button').length).toBe(1);
223
-
224
- fireEvent.focus(document.querySelector('.reqore-input')!);
225
- fireEvent.change(document.querySelector('.reqore-input')!, {
226
- target: { value: 'Existing item' },
227
- });
228
-
229
- expect(document.querySelectorAll('.reqore-button').length).toBe(5);
230
- expect(screen.getAllByText('Create new "Existing item"')).toBeTruthy();
231
-
232
- // Create the item by pressing ENTER key
233
- fireEvent.keyDown(document.querySelector('.reqore-input')!, {
234
- key: 'Enter',
235
- });
236
-
237
- expect(document.querySelectorAll('.reqore-tag').length).toBe(1);
238
- expect(screen.getAllByText('Existing item')).toBeTruthy();
239
-
240
- fireEvent.focus(document.querySelector('.reqore-input')!);
241
- fireEvent.change(document.querySelector('.reqore-input')!, {
242
- target: { value: 'Existing item' },
243
- });
244
-
245
- // 6 again because the item is already created, so the Create button is not there
246
- expect(document.querySelectorAll('.reqore-button').length).toBe(5);
247
-
248
- fireEvent.focus(document.querySelector('.reqore-input')!);
249
- // Does not create new item if the query is empty
250
- fireEvent.change(document.querySelector('.reqore-input')!, {
251
- target: { value: '' },
252
- });
253
-
254
- fireEvent.keyDown(document.querySelector('.reqore-input')!, {
255
- key: 'Enter',
256
- });
257
-
258
- expect(document.querySelectorAll('.reqore-tag').length).toBe(1);
259
- });
260
-
261
- test('Renders <ReqoreMultiSelect /> and does not create new item on ENTER when not focused', () => {
262
- act(() => {
263
- render(
264
- <MultiSelectItemsTestComponent items={MultiSelectItems} canCreateItems enterKeySelects />
265
- );
266
- });
267
-
268
- expect(document.querySelectorAll('.reqore-popover-content').length).toBe(0);
269
-
270
- fireEvent.focus(document.querySelector('.reqore-input')!);
271
- // Add some text
272
- fireEvent.change(document.querySelector('.reqore-input')!, {
273
- target: { value: 'New item' },
274
- });
275
-
276
- // Blur the input
277
- fireEvent.blur(document.querySelector('.reqore-input')!);
278
-
279
- jest.advanceTimersByTime(1);
280
-
281
- // Try and create the item by pressing ENTER key
282
- fireEvent.keyDown(document.querySelector('.reqore-input')!, {
283
- key: 'Enter',
284
- });
285
-
286
- expect(screen.getByText('No items selected')).toBeTruthy();
287
- });
288
-
289
- test('Renders <ReqoreMultiSelect /> and deselects an item using the ENTER key', () => {
290
- act(() => {
291
- render(
292
- <MultiSelectItemsTestComponent
293
- items={MultiSelectItems}
294
- canCreateItems
295
- enterKeySelects
296
- value={['Existing item 3']}
297
- />
298
- );
299
- });
300
-
301
- // The item is already selected
302
- expect(screen.getAllByText('Existing item 3')).toBeTruthy();
303
- expect(document.querySelectorAll('.reqore-popover-content').length).toBe(0);
304
-
305
- fireEvent.focus(document.querySelector('.reqore-input')!);
306
- fireEvent.change(document.querySelector('.reqore-input')!, {
307
- target: { value: 'Existing item 3' },
308
- });
309
-
310
- jest.advanceTimersByTime(1);
311
-
312
- // Deselect the item by pressing ENTER key
313
- fireEvent.keyDown(document.querySelector('.reqore-input')!, {
314
- key: 'Enter',
315
- });
316
-
317
- expect(document.querySelectorAll('.reqore-tag').length).toBe(1);
318
- expect(screen.getAllByText('No items selected')).toBeTruthy();
319
- });
320
-
321
- test('Renders <ReqoreMultiSelect /> and calls onValueChange when value changes', () => {
322
- const onValueChange = jest.fn();
323
-
324
- act(() => {
325
- render(
326
- <MultiSelectItemsTestComponent
327
- items={MultiSelectItems}
328
- canCreateItems
329
- enterKeySelects
330
- onValueChange={onValueChange}
331
- value={['Existing item 3']}
332
- />
333
- );
334
- });
335
-
336
- // The item is already selected
337
- expect(screen.getAllByText('Existing item 3')).toBeTruthy();
338
- expect(document.querySelectorAll('.reqore-popover-content').length).toBe(0);
339
-
340
- fireEvent.focus(document.querySelector('.reqore-input')!);
341
- fireEvent.change(document.querySelector('.reqore-input')!, {
342
- target: { value: 'Existing item 3' },
343
- });
344
-
345
- jest.advanceTimersByTime(1);
346
-
347
- // Deselect the item by pressing ENTER key
348
- fireEvent.keyDown(document.querySelector('.reqore-input')!, {
349
- key: 'Enter',
350
- });
351
-
352
- expect(document.querySelectorAll('.reqore-tag').length).toBe(1);
353
- expect(screen.getAllByText('No items selected')).toBeTruthy();
354
- expect(onValueChange).toHaveBeenNthCalledWith(1, []);
355
-
356
- fireEvent.click(screen.getAllByText('Existing item 1')[1]);
357
-
358
- expect(document.querySelectorAll('.reqore-tag').length).toBe(1);
359
- expect(screen.getAllByText('Existing item 1')).toBeTruthy();
360
- expect(onValueChange).toHaveBeenNthCalledWith(2, ['Existing item 1']);
361
- });
362
-
363
- test('Renders <ReqoreMultiSelect /> and calls onItemClick when an item is clicked', () => {
364
- const onItemClick = jest.fn();
365
-
366
- act(() => {
367
- render(
368
- <MultiSelectItemsTestComponent
369
- items={MultiSelectItems}
370
- canCreateItems
371
- enterKeySelects
372
- onItemClick={onItemClick}
373
- value={['Existing item 3', 'Disabled item']}
374
- />
375
- );
376
- });
377
-
378
- // The item is already selected
379
- fireEvent.click(screen.getByText('Existing item 3'));
380
-
381
- expect(onItemClick).toHaveBeenNthCalledWith(
382
- 1,
383
- MultiSelectItems.find((item) => item.value === 'Existing item 3')
384
- );
385
-
386
- fireEvent.click(screen.getByText('Disabled item'));
387
-
388
- expect(onItemClick).toHaveBeenCalledTimes(1);
389
- });
390
-
391
- test('Renders <ReqoreMultiSelect /> and calls onItemAdded when an item is added', () => {
392
- const onItemAdd = jest.fn();
393
-
394
- act(() => {
395
- render(
396
- <MultiSelectItemsTestComponent
397
- items={MultiSelectItems}
398
- canCreateItems
399
- enterKeySelects
400
- onItemAdded={onItemAdd}
401
- />
402
- );
403
- });
404
-
405
- const item = MultiSelectItems.find((item) => item.value === 'Existing item 3');
406
-
407
- fireEvent.focus(document.querySelector('.reqore-input')!);
408
- fireEvent.change(document.querySelector('.reqore-input')!, {
409
- target: { value: 'Existing item 3' },
410
- });
411
-
412
- jest.advanceTimersByTime(1);
413
-
414
- // Select the item by pressing ENTER key
415
- fireEvent.keyDown(document.querySelector('.reqore-input')!, {
416
- key: 'Enter',
417
- });
418
-
419
- expect(document.querySelectorAll('.reqore-tag').length).toBe(1);
420
- expect(onItemAdd).toHaveBeenNthCalledWith(1, item!.value);
421
-
422
- // Add completely new item
423
- fireEvent.focus(document.querySelector('.reqore-input')!);
424
- fireEvent.change(document.querySelector('.reqore-input')!, {
425
- target: { value: 'Some new item' },
426
- });
427
-
428
- jest.advanceTimersByTime(1);
429
-
430
- // Create the item by clicking
431
- fireEvent.click(screen.getAllByText('Create new "Some new item"')[1]);
432
-
433
- expect(document.querySelectorAll('.reqore-tag').length).toBe(2);
434
- expect(onItemAdd).toHaveBeenNthCalledWith(2, 'Some new item');
435
- });
436
-
437
- test('Renders <ReqoreMultiSelect /> and calls onItemRemoved when an item is removed', () => {
438
- const onItemRemove = jest.fn();
439
-
440
- act(() => {
441
- render(
442
- <MultiSelectItemsTestComponent
443
- items={MultiSelectItems}
444
- canCreateItems
445
- enterKeySelects
446
- canRemoveItems
447
- onItemRemoved={onItemRemove}
448
- value={['Existing item 3']}
449
- />
450
- );
451
- });
452
-
453
- const item = MultiSelectItems.find((item) => item.value === 'Existing item 3');
454
-
455
- fireEvent.click(document.querySelectorAll('.reqore-tag-remove')[0]!);
456
-
457
- expect(onItemRemove).toHaveBeenNthCalledWith(1, item!.value);
458
- });
@@ -1,31 +0,0 @@
1
- import { render } from "@testing-library/react";
2
- import React from "react";
3
- import {
4
- ReqoreHeader,
5
- ReqoreNavbarDivider,
6
- ReqoreNavbarGroup,
7
- ReqoreNavbarItem,
8
- ReqoreUIProvider,
9
- } from "../src";
10
-
11
- test("Renders Navbar properly", () => {
12
- render(
13
- <ReqoreUIProvider>
14
- <ReqoreHeader>
15
- <ReqoreNavbarGroup>
16
- <ReqoreNavbarItem>Logo</ReqoreNavbarItem>
17
- </ReqoreNavbarGroup>
18
- <ReqoreNavbarGroup position="right">
19
- <ReqoreNavbarItem>Item</ReqoreNavbarItem>
20
- <ReqoreNavbarDivider />
21
- <ReqoreNavbarItem>Item 2</ReqoreNavbarItem>
22
- </ReqoreNavbarGroup>
23
- </ReqoreHeader>
24
- </ReqoreUIProvider>
25
- );
26
-
27
- expect(document.querySelectorAll(".reqore-navbar-header").length).toBe(1);
28
- expect(document.querySelectorAll(".reqore-navbar-group").length).toBe(2);
29
- expect(document.querySelectorAll(".reqore-navbar-divider").length).toBe(1);
30
- expect(document.querySelectorAll(".reqore-navbar-item").length).toBe(3);
31
- });