@qoretechnologies/reqore 0.44.0 → 0.46.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 (226) hide show
  1. package/dist/constants/theme.d.ts +8 -1
  2. package/dist/constants/theme.d.ts.map +1 -1
  3. package/dist/constants/theme.js +16 -2
  4. package/dist/constants/theme.js.map +1 -1
  5. package/package.json +1 -1
  6. package/tests.json +1 -1
  7. package/.eslintrc.js +0 -40
  8. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  9. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  10. package/.github/ISSUE_TEMPLATE/new-component.md +0 -20
  11. package/.github/ISSUE_TEMPLATE/visual-bug-report.md +0 -38
  12. package/.github/workflows/beta_release.yml +0 -100
  13. package/.github/workflows/tests.yml +0 -84
  14. package/.gitpod.yml +0 -11
  15. package/.jest-test-results.json +0 -1
  16. package/.prettierrc +0 -7
  17. package/.vscode/settings.json +0 -0
  18. package/__tests__/breadcrumbs.test.tsx +0 -75
  19. package/__tests__/button.test.tsx +0 -218
  20. package/__tests__/checkbox.test.tsx +0 -45
  21. package/__tests__/collection.test.tsx +0 -243
  22. package/__tests__/containers/paging.test.tsx +0 -138
  23. package/__tests__/control_group.test.tsx +0 -32
  24. package/__tests__/drawer.test.tsx +0 -140
  25. package/__tests__/dropdown.test.tsx +0 -381
  26. package/__tests__/effect.test.tsx +0 -70
  27. package/__tests__/heading.test.tsx +0 -58
  28. package/__tests__/helpers/colors.test.tsx +0 -18
  29. package/__tests__/helpers/table.test.tsx +0 -67
  30. package/__tests__/hooks/useLatestZIndex.test.tsx +0 -10
  31. package/__tests__/hooks/useReqorePaging.test.tsx +0 -271
  32. package/__tests__/hooks/useTheme.test.tsx +0 -31
  33. package/__tests__/icon.test.tsx +0 -53
  34. package/__tests__/input.test.tsx +0 -482
  35. package/__tests__/layout.test.tsx +0 -37
  36. package/__tests__/menu.test.tsx +0 -65
  37. package/__tests__/messages.test.tsx +0 -79
  38. package/__tests__/modal.test.tsx +0 -204
  39. package/__tests__/multiselect.test.tsx +0 -458
  40. package/__tests__/navbar.test.tsx +0 -31
  41. package/__tests__/notifications.test.tsx +0 -178
  42. package/__tests__/pagination.test.tsx +0 -437
  43. package/__tests__/panel.test.tsx +0 -243
  44. package/__tests__/popover.test.tsx +0 -282
  45. package/__tests__/radiogroup.test.tsx +0 -47
  46. package/__tests__/setup.js +0 -8
  47. package/__tests__/stories/Collection.stories.tsx +0 -0
  48. package/__tests__/table.test.tsx +0 -647
  49. package/__tests__/tabs.test.tsx +0 -321
  50. package/__tests__/tag.test.tsx +0 -160
  51. package/__tests__/textarea.test.tsx +0 -467
  52. package/__tests__/timeAgo.test.tsx +0 -27
  53. package/__tests__/tree.test.tsx +0 -58
  54. package/build-storybook.log +0 -491
  55. package/chromatic.config.json +0 -1
  56. package/icons.ts +0 -1
  57. package/migration-storybook.log +0 -56
  58. package/public/logo-dark.png +0 -0
  59. package/public/logo.png +0 -0
  60. package/public/q-symbol-small.png +0 -0
  61. package/public/q-symbol.png +0 -0
  62. package/public/qoreLogo-dark.png +0 -0
  63. package/public/qoreLogo.png +0 -0
  64. package/src/components/Breadcrumbs/index.tsx +0 -254
  65. package/src/components/Breadcrumbs/item.tsx +0 -44
  66. package/src/components/Button/index.tsx +0 -633
  67. package/src/components/Checkbox/index.tsx +0 -388
  68. package/src/components/Collection/index.tsx +0 -426
  69. package/src/components/Collection/item.tsx +0 -267
  70. package/src/components/Columns/column.tsx +0 -27
  71. package/src/components/Columns/index.tsx +0 -41
  72. package/src/components/Comment/index.tsx +0 -141
  73. package/src/components/CommentFeed/index.tsx +0 -34
  74. package/src/components/Content/index.tsx +0 -34
  75. package/src/components/Content/wrapper.tsx +0 -36
  76. package/src/components/ControlGroup/index.tsx +0 -523
  77. package/src/components/DatePicker/index.tsx +0 -347
  78. package/src/components/Drawer/backdrop.tsx +0 -54
  79. package/src/components/Drawer/index.tsx +0 -365
  80. package/src/components/Dropdown/index.tsx +0 -153
  81. package/src/components/Dropdown/item.tsx +0 -33
  82. package/src/components/Dropdown/list.tsx +0 -222
  83. package/src/components/Effect/index.tsx +0 -464
  84. package/src/components/ExportModal/index.tsx +0 -99
  85. package/src/components/Header/index.tsx +0 -81
  86. package/src/components/Icon/index.tsx +0 -184
  87. package/src/components/Input/index.tsx +0 -295
  88. package/src/components/InputClearButton/index.tsx +0 -59
  89. package/src/components/InternalPopover/index.tsx +0 -303
  90. package/src/components/KeyValueTable/index.tsx +0 -192
  91. package/src/components/Label/index.tsx +0 -10
  92. package/src/components/Layout/content.tsx +0 -31
  93. package/src/components/Layout/index.tsx +0 -55
  94. package/src/components/Menu/divider.tsx +0 -92
  95. package/src/components/Menu/index.tsx +0 -141
  96. package/src/components/Menu/item.tsx +0 -137
  97. package/src/components/Menu/section.tsx +0 -81
  98. package/src/components/Message/index.tsx +0 -220
  99. package/src/components/Modal/index.tsx +0 -26
  100. package/src/components/MultiSelect/index.tsx +0 -288
  101. package/src/components/Navbar/divider.tsx +0 -50
  102. package/src/components/Navbar/group.tsx +0 -53
  103. package/src/components/Navbar/index.tsx +0 -82
  104. package/src/components/Navbar/item.tsx +0 -92
  105. package/src/components/Notifications/index.tsx +0 -57
  106. package/src/components/Notifications/notification.tsx +0 -362
  107. package/src/components/Paging/index.tsx +0 -321
  108. package/src/components/Panel/LabelEditor.tsx +0 -67
  109. package/src/components/Panel/NonResponsiveActions.tsx +0 -79
  110. package/src/components/Panel/__screenshots__/linux/panel-SomePanel.png +0 -0
  111. package/src/components/Panel/index.tsx +0 -912
  112. package/src/components/Panel/panel.screenshot.tsx +0 -29
  113. package/src/components/Paragraph/index.tsx +0 -43
  114. package/src/components/Popover/index.tsx +0 -68
  115. package/src/components/RadioGroup/index.tsx +0 -71
  116. package/src/components/Slider/index.tsx +0 -358
  117. package/src/components/Spacer/index.tsx +0 -142
  118. package/src/components/Spinner/index.tsx +0 -74
  119. package/src/components/Table/body.tsx +0 -109
  120. package/src/components/Table/cell.tsx +0 -136
  121. package/src/components/Table/header.tsx +0 -236
  122. package/src/components/Table/headerCell.tsx +0 -203
  123. package/src/components/Table/helpers.ts +0 -308
  124. package/src/components/Table/index.tsx +0 -797
  125. package/src/components/Table/row.tsx +0 -288
  126. package/src/components/Table/value.tsx +0 -28
  127. package/src/components/Tabs/content.tsx +0 -68
  128. package/src/components/Tabs/index.tsx +0 -124
  129. package/src/components/Tabs/item.tsx +0 -198
  130. package/src/components/Tabs/list.tsx +0 -381
  131. package/src/components/Tag/group.tsx +0 -73
  132. package/src/components/Tag/index.tsx +0 -463
  133. package/src/components/Textarea/index.tsx +0 -277
  134. package/src/components/TimeAgo/index.tsx +0 -15
  135. package/src/components/Tree/index.tsx +0 -271
  136. package/src/constants/animations.ts +0 -9
  137. package/src/constants/colors.ts +0 -13
  138. package/src/constants/paging.ts +0 -93
  139. package/src/constants/sizes.ts +0 -185
  140. package/src/constants/theme.ts +0 -122
  141. package/src/containers/Paging.tsx +0 -136
  142. package/src/containers/PopoverProvider.tsx +0 -124
  143. package/src/containers/ReqoreProvider.tsx +0 -289
  144. package/src/containers/ThemeProvider.tsx +0 -12
  145. package/src/containers/UIProvider.tsx +0 -101
  146. package/src/context/PopoverContext.tsx +0 -11
  147. package/src/context/ReqoreContext.tsx +0 -47
  148. package/src/context/ThemeContext.tsx +0 -4
  149. package/src/helpers/animations.ts +0 -13
  150. package/src/helpers/colors.ts +0 -335
  151. package/src/helpers/time.ts +0 -21
  152. package/src/helpers/utils.ts +0 -152
  153. package/src/hooks/useAutoFocus.ts +0 -106
  154. package/src/hooks/useCloneThroughFragments.ts +0 -39
  155. package/src/hooks/useCombinedRefs.ts +0 -26
  156. package/src/hooks/useLatestZIndex.ts +0 -13
  157. package/src/hooks/useOutsideClick.ts +0 -29
  158. package/src/hooks/usePaging.ts +0 -128
  159. package/src/hooks/usePopover.tsx +0 -220
  160. package/src/hooks/useQueryWithDelay.ts +0 -30
  161. package/src/hooks/useReqore.ts +0 -12
  162. package/src/hooks/useReqoreContext.ts +0 -16
  163. package/src/hooks/useReqoreEffect.ts +0 -49
  164. package/src/hooks/useTextareaAutoSize.ts +0 -22
  165. package/src/hooks/useTheme.ts +0 -48
  166. package/src/hooks/useTooltip.ts +0 -40
  167. package/src/hooks/useWhyDidYouUpdate.ts +0 -32
  168. package/src/icons.json +0 -2295
  169. package/src/index.tsx +0 -80
  170. package/src/mock/breadcrumbs.ts +0 -146
  171. package/src/mock/collectionData.tsx +0 -380
  172. package/src/mock/data.json +0 -11000
  173. package/src/mock/icons.ts +0 -32
  174. package/src/mock/menu.ts +0 -93
  175. package/src/mock/multiSelect.ts +0 -71
  176. package/src/mock/object.json +0 -317
  177. package/src/mock/styleMock.js +0 -1
  178. package/src/mock/tableData.ts +0 -64
  179. package/src/stories/Breadcrumbs/Breadcrumbs.stories.tsx +0 -27
  180. package/src/stories/Button/Button.stories.tsx +0 -405
  181. package/src/stories/Checkbox/Checkbox.stories.tsx +0 -75
  182. package/src/stories/Collection/Collection.stories.tsx +0 -317
  183. package/src/stories/Columns/Columns.stories.tsx +0 -158
  184. package/src/stories/Comment/Comment.stories.tsx +0 -136
  185. package/src/stories/ControlGroup/ControlGroup.stories.tsx +0 -399
  186. package/src/stories/DatePicker/DatePicker.stories.tsx +0 -348
  187. package/src/stories/Drawer/Drawer.stories.tsx +0 -294
  188. package/src/stories/Dropdown/Dropdown.stories.tsx +0 -375
  189. package/src/stories/Dropdown/DropdownTests.stories.tsx +0 -111
  190. package/src/stories/ExportModal/ExportModal.stories.tsx +0 -18
  191. package/src/stories/Header/Header.stories.tsx +0 -108
  192. package/src/stories/Icon/Icon.stories.tsx +0 -162
  193. package/src/stories/Input/Input.stories.tsx +0 -220
  194. package/src/stories/KeyValueTable/KeyValueTable.stories.tsx +0 -346
  195. package/src/stories/Label/Label.stories.tsx +0 -33
  196. package/src/stories/Menu/Menu.stories.tsx +0 -367
  197. package/src/stories/Message/Message.stories.tsx +0 -167
  198. package/src/stories/Modal/Manager.stories.tsx +0 -192
  199. package/src/stories/Modal/Modal.stories.tsx +0 -252
  200. package/src/stories/MultiSelect/MultiSelect.stories.tsx +0 -140
  201. package/src/stories/Navbar/Navbar.stories.tsx +0 -119
  202. package/src/stories/Notifications/Interactive.stories.tsx +0 -117
  203. package/src/stories/Notifications/Notification.stories.tsx +0 -216
  204. package/src/stories/Notifications/Notifications.stories.tsx +0 -81
  205. package/src/stories/Paging/Paging.stories.tsx +0 -255
  206. package/src/stories/Panel/Panel.stories.tsx +0 -753
  207. package/src/stories/Paragraph/Paragraph.stories.tsx +0 -108
  208. package/src/stories/Popover/Popover.stories.tsx +0 -510
  209. package/src/stories/RadioGroup/RadioGroup.stories.tsx +0 -212
  210. package/src/stories/Slider/Slider.stories.tsx +0 -173
  211. package/src/stories/Spacer/Spacer.stories.tsx +0 -100
  212. package/src/stories/Spinner/Spinner.stories.tsx +0 -82
  213. package/src/stories/Table/Table.stories.tsx +0 -571
  214. package/src/stories/Tabs/Tabs.stories.tsx +0 -346
  215. package/src/stories/Tag/Tag.stories.tsx +0 -381
  216. package/src/stories/Tag/TagGroup.stories.tsx +0 -307
  217. package/src/stories/TextArea/TextArea.stories.tsx +0 -287
  218. package/src/stories/TextArea/TextAreaTests.stories.tsx +0 -108
  219. package/src/stories/Tree/Tree.stories.tsx +0 -124
  220. package/src/stories/Wrapper.tsx +0 -13
  221. package/src/stories/utils/args.ts +0 -151
  222. package/src/stories/utils.ts +0 -39
  223. package/src/styles.ts +0 -124
  224. package/src/types/global.ts +0 -211
  225. package/src/types/icons.ts +0 -2272
  226. 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
- });