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