@axinom/mosaic-ui 0.69.0-rc.2 → 0.69.0-rc.21

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 (326) hide show
  1. package/dist/components/Buttons/Button/Button.d.ts +3 -3
  2. package/dist/components/Buttons/Button/Button.d.ts.map +1 -1
  3. package/dist/components/Buttons/Button.model.d.ts +2 -1
  4. package/dist/components/Buttons/Button.model.d.ts.map +1 -1
  5. package/dist/components/ConfirmDialog/ConfirmDialog.d.ts.map +1 -1
  6. package/dist/components/ConfirmDialog/ConfirmDialog.models.d.ts +0 -1
  7. package/dist/components/ConfirmDialog/ConfirmDialog.models.d.ts.map +1 -1
  8. package/dist/components/DateTime/TimePicker/ScrollColumn/ScrollColumn.d.ts +2 -2
  9. package/dist/components/DateTime/TimePicker/ScrollColumn/ScrollColumn.d.ts.map +1 -1
  10. package/dist/components/DynamicDataList/DynamicDataList.d.ts +1 -1
  11. package/dist/components/DynamicDataList/DynamicDataList.d.ts.map +1 -1
  12. package/dist/components/DynamicDataList/DynamicDataList.model.d.ts +0 -1
  13. package/dist/components/DynamicDataList/DynamicDataList.model.d.ts.map +1 -1
  14. package/dist/components/DynamicDataList/DynamicListDataEntry/DynamicListDataEntry.d.ts +2 -2
  15. package/dist/components/DynamicDataList/DynamicListDataEntry/DynamicListDataEntry.d.ts.map +1 -1
  16. package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/createInputRenderer/createInputRenderer.d.ts +1 -1
  17. package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/createInputRenderer/createInputRenderer.d.ts.map +1 -1
  18. package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/createSelectRenderer/createSelectRenderer.d.ts +1 -1
  19. package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/createSelectRenderer/createSelectRenderer.d.ts.map +1 -1
  20. package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/renderers.model.d.ts +2 -0
  21. package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/renderers.model.d.ts.map +1 -1
  22. package/dist/components/DynamicDataList/DynamicListHeader/DynamicListHeader.d.ts +2 -2
  23. package/dist/components/DynamicDataList/DynamicListHeader/DynamicListHeader.d.ts.map +1 -1
  24. package/dist/components/DynamicDataList/DynamicListRow/DynamicListRow.d.ts +2 -2
  25. package/dist/components/DynamicDataList/DynamicListRow/DynamicListRow.d.ts.map +1 -1
  26. package/dist/components/DynamicDataList/helpers/DynamicListReducer/DynamicListReducer.actions.d.ts +2 -2
  27. package/dist/components/DynamicDataList/helpers/DynamicListReducer/DynamicListReducer.actions.d.ts.map +1 -1
  28. package/dist/components/DynamicDataList/helpers/DynamicListReducer/DynamicListReducer.d.ts.map +1 -1
  29. package/dist/components/DynamicDataList/helpers/DynamicListReducer/DynamicListReducer.init.d.ts.map +1 -1
  30. package/dist/components/DynamicDataList/helpers/useColumnDefs.d.ts +1 -1
  31. package/dist/components/DynamicDataList/helpers/useColumnDefs.d.ts.map +1 -1
  32. package/dist/components/DynamicDataList/helpers/useDataHandler.d.ts +1 -1
  33. package/dist/components/DynamicDataList/helpers/useDataHandler.d.ts.map +1 -1
  34. package/dist/components/DynamicDataList/helpers/useRowAnimation.d.ts.map +1 -1
  35. package/dist/components/DynamicDataList/helpers/useRowEditing.d.ts.map +1 -1
  36. package/dist/components/EmptyStation/EmptyStation.d.ts.map +1 -1
  37. package/dist/components/Explorer/BulkEdit/FormFieldsConfigConverter.d.ts.map +1 -1
  38. package/dist/components/Explorer/BulkEdit/GenerateMutation.d.ts.map +1 -1
  39. package/dist/components/Explorer/BulkEdit/helpers/FieldWrapper.d.ts.map +1 -1
  40. package/dist/components/Explorer/BulkEdit/useBulkEdit.d.ts.map +1 -1
  41. package/dist/components/Explorer/Explorer.d.ts +1 -1
  42. package/dist/components/Explorer/Explorer.d.ts.map +1 -1
  43. package/dist/components/Explorer/Explorer.model.d.ts +0 -1
  44. package/dist/components/Explorer/Explorer.model.d.ts.map +1 -1
  45. package/dist/components/Explorer/NavigationExplorer/NavigationExplorer.d.ts +1 -1
  46. package/dist/components/Explorer/NavigationExplorer/NavigationExplorer.d.ts.map +1 -1
  47. package/dist/components/Explorer/QuickEdit/useQuickEdit.d.ts.map +1 -1
  48. package/dist/components/Explorer/SelectionExplorer/SelectionExplorer.d.ts +1 -1
  49. package/dist/components/Explorer/SelectionExplorer/SelectionExplorer.d.ts.map +1 -1
  50. package/dist/components/Explorer/helpers/useActions.d.ts +0 -1
  51. package/dist/components/Explorer/helpers/useActions.d.ts.map +1 -1
  52. package/dist/components/Explorer/helpers/useDataProvider.d.ts +0 -1
  53. package/dist/components/Explorer/helpers/useDataProvider.d.ts.map +1 -1
  54. package/dist/components/Explorer/helpers/useFilters.d.ts +0 -1
  55. package/dist/components/Explorer/helpers/useFilters.d.ts.map +1 -1
  56. package/dist/components/FieldSelection/FieldSelection.d.ts +1 -0
  57. package/dist/components/FieldSelection/FieldSelection.d.ts.map +1 -1
  58. package/dist/components/Filters/Filter/Filter.d.ts +2 -2
  59. package/dist/components/Filters/Filter/Filter.d.ts.map +1 -1
  60. package/dist/components/Filters/Filters.d.ts +2 -2
  61. package/dist/components/Filters/Filters.d.ts.map +1 -1
  62. package/dist/components/Filters/Filters.model.d.ts +0 -1
  63. package/dist/components/Filters/Filters.model.d.ts.map +1 -1
  64. package/dist/components/Filters/Validators/DateRangeFilterValidator.d.ts.map +1 -1
  65. package/dist/components/Filters/Validators/NumberRangeFilterValidator.d.ts.map +1 -1
  66. package/dist/components/FormElements/DynamicDataListControl/DynamicDataListControl.d.ts +0 -1
  67. package/dist/components/FormElements/DynamicDataListControl/DynamicDataListControl.d.ts.map +1 -1
  68. package/dist/components/FormElements/DynamicDataListControl/DynamicDataListField.d.ts +2 -2
  69. package/dist/components/FormElements/DynamicDataListControl/DynamicDataListField.d.ts.map +1 -1
  70. package/dist/components/FormElements/FormGroup/FormGroup.d.ts +12 -0
  71. package/dist/components/FormElements/FormGroup/FormGroup.d.ts.map +1 -0
  72. package/dist/components/FormElements/FormGroupTitle/FormGroupTitle.d.ts +5 -0
  73. package/dist/components/FormElements/FormGroupTitle/FormGroupTitle.d.ts.map +1 -1
  74. package/dist/components/FormElements/FormikDebug/FormikDebug.d.ts +0 -1
  75. package/dist/components/FormElements/FormikDebug/FormikDebug.d.ts.map +1 -1
  76. package/dist/components/FormElements/ReadOnly/ReadOnlyField.d.ts +2 -2
  77. package/dist/components/FormElements/ReadOnly/ReadOnlyField.d.ts.map +1 -1
  78. package/dist/components/FormElements/ReadOnlyText/ReadOnlyTextField.d.ts +2 -2
  79. package/dist/components/FormElements/ReadOnlyText/ReadOnlyTextField.d.ts.map +1 -1
  80. package/dist/components/FormElements/Tags/Tags.d.ts +2 -2
  81. package/dist/components/FormElements/Tags/Tags.d.ts.map +1 -1
  82. package/dist/components/FormElements/Tags/TagsField.d.ts +2 -2
  83. package/dist/components/FormElements/Tags/TagsField.d.ts.map +1 -1
  84. package/dist/components/FormElements/formStoryHelper.d.ts.map +1 -1
  85. package/dist/components/FormElements/index.d.ts +1 -0
  86. package/dist/components/FormElements/index.d.ts.map +1 -1
  87. package/dist/components/FormElements/useFormikError.d.ts.map +1 -1
  88. package/dist/components/FormStation/Create/Create.d.ts +2 -2
  89. package/dist/components/FormStation/Create/Create.d.ts.map +1 -1
  90. package/dist/components/FormStation/Details/Details.d.ts +2 -2
  91. package/dist/components/FormStation/Details/Details.d.ts.map +1 -1
  92. package/dist/components/FormStation/FormStation.d.ts +2 -2
  93. package/dist/components/FormStation/FormStation.d.ts.map +1 -1
  94. package/dist/components/FormStation/FormStationActions/FormStationActions.d.ts +1 -1
  95. package/dist/components/FormStation/FormStationActions/FormStationActions.d.ts.map +1 -1
  96. package/dist/components/FormStation/FormStationHeader/FormStationHeader.d.ts.map +1 -1
  97. package/dist/components/FormStation/SaveOnDemand/SaveOnDemand.d.ts +0 -1
  98. package/dist/components/FormStation/SaveOnDemand/SaveOnDemand.d.ts.map +1 -1
  99. package/dist/components/FormStation/SaveOnNavigate/handleNavigationAttempt.d.ts.map +1 -1
  100. package/dist/components/FormStation/helpers/useTitle.d.ts.map +1 -1
  101. package/dist/components/InfoPanel/hooks/useCollapse.d.ts +0 -1
  102. package/dist/components/InfoPanel/hooks/useCollapse.d.ts.map +1 -1
  103. package/dist/components/InlineMenu/InlineMenu.d.ts.map +1 -1
  104. package/dist/components/List/List.d.ts +2 -2
  105. package/dist/components/List/List.d.ts.map +1 -1
  106. package/dist/components/List/List.model.d.ts +0 -1
  107. package/dist/components/List/List.model.d.ts.map +1 -1
  108. package/dist/components/List/List.stories.helper.d.ts.map +1 -1
  109. package/dist/components/List/ListHeader/ColumnLabel/ColumnLabel.d.ts +2 -2
  110. package/dist/components/List/ListHeader/ColumnLabel/ColumnLabel.d.ts.map +1 -1
  111. package/dist/components/List/ListHeader/ListHeader.d.ts +2 -2
  112. package/dist/components/List/ListHeader/ListHeader.d.ts.map +1 -1
  113. package/dist/components/List/ListRow/ListRow.d.ts +2 -4
  114. package/dist/components/List/ListRow/ListRow.d.ts.map +1 -1
  115. package/dist/components/List/ListRow/ListRowCell/ListRowCell.d.ts +0 -1
  116. package/dist/components/List/ListRow/ListRowCell/ListRowCell.d.ts.map +1 -1
  117. package/dist/components/List/ListRow/ListRowCell/renderData.d.ts.map +1 -1
  118. package/dist/components/List/ListRow/ListRowLoader.d.ts +2 -2
  119. package/dist/components/List/ListRow/ListRowLoader.d.ts.map +1 -1
  120. package/dist/components/List/ListRow/Renderers/BooleanDotRenderer/BooleanDotRenderer.d.ts +0 -1
  121. package/dist/components/List/ListRow/Renderers/BooleanDotRenderer/BooleanDotRenderer.d.ts.map +1 -1
  122. package/dist/components/List/ListRow/Renderers/DateRenderer/DateRenderer.d.ts.map +1 -1
  123. package/dist/components/List/ListRow/Renderers/ExternalLinkRenderer/ExternalLinkRenderer.d.ts.map +1 -1
  124. package/dist/components/List/ListRow/Renderers/StateRenderer/StateRenderer.d.ts +1 -1
  125. package/dist/components/List/ListRow/Renderers/StateRenderer/StateRenderer.d.ts.map +1 -1
  126. package/dist/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.d.ts +0 -1
  127. package/dist/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.d.ts.map +1 -1
  128. package/dist/components/List/ListRow/Renderers/TimestampRenderer/TimestampRenderer.d.ts.map +1 -1
  129. package/dist/components/List/ListRowRenderer/ListRowRenderer.d.ts.map +1 -1
  130. package/dist/components/List/helpers.d.ts.map +1 -1
  131. package/dist/components/List/useColumnsSize.d.ts +0 -2
  132. package/dist/components/List/useColumnsSize.d.ts.map +1 -1
  133. package/dist/components/Loaders/skeletons.d.ts +0 -1
  134. package/dist/components/Loaders/skeletons.d.ts.map +1 -1
  135. package/dist/components/Modal/useModal.d.ts.map +1 -1
  136. package/dist/components/PageHeader/PageHeaderActionsGroup/PageHeaderActionsGroupsContext.d.ts +0 -1
  137. package/dist/components/PageHeader/PageHeaderActionsGroup/PageHeaderActionsGroupsContext.d.ts.map +1 -1
  138. package/dist/components/PageHeader/helpers/useElementWidthObserver.d.ts +1 -2
  139. package/dist/components/PageHeader/helpers/useElementWidthObserver.d.ts.map +1 -1
  140. package/dist/components/Tabs/TabList/ScrollContainer/useScroll.d.ts.map +1 -1
  141. package/dist/components/Utils/Postgraphile/FilterTransformer.d.ts.map +1 -1
  142. package/dist/components/Utils/Postgraphile/SortTransformer.d.ts.map +1 -1
  143. package/dist/components/Utils/State/GlobalState.d.ts.map +1 -1
  144. package/dist/helpers/idleCallbackHelpers.d.ts +0 -1
  145. package/dist/helpers/idleCallbackHelpers.d.ts.map +1 -1
  146. package/dist/helpers/storybook.d.ts.map +1 -1
  147. package/dist/helpers/testing.d.ts +6 -21
  148. package/dist/helpers/testing.d.ts.map +1 -1
  149. package/dist/helpers/utils.d.ts +1 -2
  150. package/dist/helpers/utils.d.ts.map +1 -1
  151. package/dist/hooks/useDEBUGDetectChanges/useDEBUGDetectChanges.d.ts.map +1 -1
  152. package/dist/hooks/useDEBUGRenderCount/useDEBUGRenderCount.d.ts.map +1 -1
  153. package/dist/hooks/useDebounce/useDebounce.d.ts +1 -2
  154. package/dist/hooks/useDebounce/useDebounce.d.ts.map +1 -1
  155. package/dist/hooks/useExpand/useExpand.d.ts.map +1 -1
  156. package/dist/hooks/useReactRouterPause/utils.d.ts.map +1 -1
  157. package/dist/hooks/useResize/useResize.d.ts +0 -1
  158. package/dist/hooks/useResize/useResize.d.ts.map +1 -1
  159. package/dist/hooks/useTabTitle/useTabTitle.d.ts.map +1 -1
  160. package/dist/hooks/useValueOrOnDemand/useValueOrOnDemand.d.ts +1 -1
  161. package/dist/hooks/useValueOrOnDemand/useValueOrOnDemand.d.ts.map +1 -1
  162. package/dist/index.es.js +4 -4
  163. package/dist/index.es.js.map +1 -1
  164. package/dist/index.js +4 -4
  165. package/dist/index.js.map +1 -1
  166. package/dist/utils/ErrorMapper/ErrorMapper.d.ts.map +1 -1
  167. package/dist/utils/ErrorTypeToStationError.d.ts.map +1 -1
  168. package/dist/utils/ToolTipHelpers.d.ts.map +1 -1
  169. package/dist/validators/timestamp/timestamp.d.ts.map +1 -1
  170. package/package.json +11 -10
  171. package/src/components/Accordion/Accordion.spec.tsx +1 -1
  172. package/src/components/Accordion/AccordionItem/AccordionItem.spec.tsx +2 -2
  173. package/src/components/Actions/Action/Action.spec.tsx +189 -228
  174. package/src/components/Actions/Actions.spec.tsx +42 -32
  175. package/src/components/Buttons/Button/Button.spec.tsx +110 -115
  176. package/src/components/Buttons/Button/Button.tsx +4 -0
  177. package/src/components/Buttons/Button.model.ts +2 -0
  178. package/src/components/Buttons/CompositeButton/CompositeButton.spec.tsx +122 -121
  179. package/src/components/Buttons/TextButton/TextButton.spec.tsx +85 -90
  180. package/src/components/ConfirmDialog/ConfirmDialog.spec.tsx +75 -79
  181. package/src/components/DateTime/DatePicker/DatePicker.spec.tsx +8 -7
  182. package/src/components/DateTime/DateTimePicker.spec.tsx +43 -62
  183. package/src/components/DateTime/TimePicker/ScrollColumn/ScrollColumn.spec.tsx +19 -16
  184. package/src/components/DateTime/TimePicker/TimePicker.spec.tsx +44 -73
  185. package/src/components/DynamicDataList/DynamicDataList.spec.tsx +112 -107
  186. package/src/components/DynamicDataList/DynamicListDataEntry/DynamicListDataEntry.spec.tsx +91 -144
  187. package/src/components/DynamicDataList/DynamicListDataEntry/DynamicListDataEntry.tsx +38 -20
  188. package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/createInputRenderer/createInputRenderer.spec.tsx +18 -15
  189. package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/createInputRenderer/createInputRenderer.tsx +2 -0
  190. package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/createSelectRenderer/createSelectRenderer.spec.tsx +53 -28
  191. package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/createSelectRenderer/createSelectRenderer.tsx +2 -0
  192. package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/renderers.model.ts +2 -0
  193. package/src/components/DynamicDataList/DynamicListHeader/DynamicListHeader.scss +19 -5
  194. package/src/components/DynamicDataList/DynamicListHeader/DynamicListHeader.spec.tsx +72 -76
  195. package/src/components/DynamicDataList/DynamicListRow/DynamicListRow.scss +9 -2
  196. package/src/components/DynamicDataList/DynamicListRow/DynamicListRow.spec.tsx +86 -113
  197. package/src/components/DynamicDataList/helpers/DynamicListReducer/DynamicListReducer.actions.spec.ts +1 -0
  198. package/src/components/DynamicDataList/helpers/DynamicListReducer/DynamicListReducer.init.spec.ts +1 -0
  199. package/src/components/DynamicDataList/helpers/DynamicListReducer/DynamicListReducer.spec.ts +6 -5
  200. package/src/components/EmptyStation/EmptyStation.spec.tsx +41 -37
  201. package/src/components/Explorer/BulkEdit/FormFieldsConfigConverter.spec.tsx +29 -28
  202. package/src/components/Explorer/BulkEdit/FormFieldsConfigConverter.tsx +1 -0
  203. package/src/components/Explorer/BulkEdit/GenerateMutation.spec.tsx +1 -0
  204. package/src/components/Explorer/BulkEdit/helpers/FieldWrapper.scss +1 -0
  205. package/src/components/Explorer/BulkEdit/helpers/FieldWrapper.tsx +1 -0
  206. package/src/components/Explorer/Explorer.spec.tsx +513 -825
  207. package/src/components/Explorer/NavigationExplorer/NavigationExplorer.spec.tsx +90 -131
  208. package/src/components/Explorer/QuickEdit/useQuickEdit.spec.tsx +36 -56
  209. package/src/components/Explorer/SelectionExplorer/SelectionExplorer.spec.tsx +59 -65
  210. package/src/components/Explorer/helpers/InMemoryDataProvider.spec.ts +1 -0
  211. package/src/components/Explorer/helpers/useFilters.spec.tsx +13 -11
  212. package/src/components/Explorer/helpers/useStationMessage.spec.tsx +4 -3
  213. package/src/components/Explorer/helpers/useSubtitle.spec.tsx +1 -0
  214. package/src/components/FieldSelection/FieldSelection.scss +1 -1
  215. package/src/components/FieldSelection/FieldSelection.spec.tsx +1 -1
  216. package/src/components/FieldSelection/FieldSelection.tsx +6 -2
  217. package/src/components/Filters/Filter/Filter.spec.tsx +78 -47
  218. package/src/components/Filters/Filters.spec.tsx +56 -58
  219. package/src/components/Filters/SelectionTypes/DateTimeFilter/DateTimeFilter.spec.tsx +45 -46
  220. package/src/components/Filters/SelectionTypes/FreeTextFilter/FreeTextFilter.spec.tsx +23 -23
  221. package/src/components/Filters/SelectionTypes/NumericTextFilter/NumericTextFilter.spec.tsx +37 -28
  222. package/src/components/Filters/SelectionTypes/OptionsFilter/OptionsFilter.spec.tsx +14 -12
  223. package/src/components/Filters/Validators/DateRangeFilterValidator.spec.ts +1 -0
  224. package/src/components/Filters/Validators/NumberRangeFilterValidator.spec.ts +1 -0
  225. package/src/components/FormElements/BooleanView/BooleanViewField.spec.tsx +34 -31
  226. package/src/components/FormElements/Checkbox/Checkbox.spec.tsx +129 -128
  227. package/src/components/FormElements/CustomTags/CustomTags.spec.tsx +312 -446
  228. package/src/components/FormElements/DateTimeField/DateTimeText.spec.tsx +61 -52
  229. package/src/components/FormElements/DynamicDataListControl/DynamicDataListControl.spec.tsx +19 -24
  230. package/src/components/FormElements/FileUploadControl/FileUploadControl.spec.tsx +67 -60
  231. package/src/components/FormElements/FormElementContainer/FormElementContainer.spec.tsx +13 -12
  232. package/src/components/FormElements/FormGroup/FormGroup.scss +62 -0
  233. package/src/components/FormElements/FormGroup/FormGroup.stories.tsx +25 -0
  234. package/src/components/FormElements/FormGroup/FormGroup.tsx +60 -0
  235. package/src/components/FormElements/FormGroupTitle/FormGroupTitle.tsx +5 -0
  236. package/src/components/FormElements/Link/LinkField.spec.tsx +24 -23
  237. package/src/components/FormElements/MaskedSingleLineText/MaskedSingleLineText.spec.tsx +4 -3
  238. package/src/components/FormElements/Radio/Radio.spec.tsx +170 -172
  239. package/src/components/FormElements/ReadOnly/ReadOnlyField.spec.tsx +23 -22
  240. package/src/components/FormElements/ReadOnlyText/ReadOnlyTextField.spec.tsx +23 -22
  241. package/src/components/FormElements/Select/Select.spec.tsx +30 -29
  242. package/src/components/FormElements/SingleLineText/SingleLineText.spec.tsx +46 -42
  243. package/src/components/FormElements/Tags/Tags.spec.tsx +59 -53
  244. package/src/components/FormElements/TextArea/TextArea.spec.tsx +44 -29
  245. package/src/components/FormElements/ToggleButton/ToggleButton.spec.tsx +188 -165
  246. package/src/components/FormElements/index.ts +1 -0
  247. package/src/components/FormStation/FormStation.spec.tsx +273 -198
  248. package/src/components/FormStation/FormStation.stories.tsx +15 -13
  249. package/src/components/FormStation/FormStationHeader/FormStationHeader.tsx +5 -3
  250. package/src/components/FormStation/SaveOnNavigate/SaveOnNavigate.spec.tsx +23 -20
  251. package/src/components/FormStation/SaveOnNavigate/handleNavigationAttempt.spec.ts +25 -24
  252. package/src/components/FormStation/helpers/useTitle.spec.ts +9 -7
  253. package/src/components/Hub/Hub.spec.tsx +13 -10
  254. package/src/components/Hub/Tile/Tile.spec.tsx +29 -25
  255. package/src/components/Icons/Icons.spec.tsx +25 -27
  256. package/src/components/Icons/Icons.tsx +1 -1
  257. package/src/components/InfoPanel/InfoImage/InfoImage.spec.tsx +4 -3
  258. package/src/components/InfoPanel/InfoPanel.scss +2 -0
  259. package/src/components/InfoPanel/InfoPanel.spec.tsx +4 -3
  260. package/src/components/InfoPanel/Paragraph/Paragraph.spec.tsx +4 -3
  261. package/src/components/InfoPanel/Section/Section.spec.tsx +39 -46
  262. package/src/components/InfoPanel/hooks/useCollapse.ts +9 -7
  263. package/src/components/InlineMenu/InlineMenu.spec.tsx +24 -23
  264. package/src/components/InlineMenu/InlineMenu.tsx +3 -0
  265. package/src/components/LandingPageHeader/LandingPageHeader.spec.tsx +9 -8
  266. package/src/components/LandingPageTiles/LandingPageTiles.spec.tsx +29 -28
  267. package/src/components/LandingPageTiles/TileLarge/TileLarge.spec.tsx +68 -61
  268. package/src/components/LandingPageTiles/TileSmall/TileSmall.spec.tsx +50 -32
  269. package/src/components/List/List.spec.tsx +337 -241
  270. package/src/components/List/ListCheckBox/ListCheckBox.spec.tsx +54 -48
  271. package/src/components/List/ListHeader/ColumnLabel/ColumnLabel.scss +4 -1
  272. package/src/components/List/ListHeader/ColumnLabel/ColumnLabel.spec.tsx +46 -43
  273. package/src/components/List/ListHeader/ListHeader.spec.tsx +82 -66
  274. package/src/components/List/ListRow/ListRow.spec.tsx +125 -130
  275. package/src/components/List/ListRow/ListRowCell/ListRowCell.spec.tsx +57 -100
  276. package/src/components/List/ListRow/ListRowLoader.spec.tsx +16 -12
  277. package/src/components/List/ListRow/Renderers/BooleanDotRenderer/BooleanDotRenderer.spec.tsx +12 -9
  278. package/src/components/List/ListRow/Renderers/ExternalLinkRenderer/ExternalLinkRenderer.spec.tsx +40 -35
  279. package/src/components/List/ListRow/Renderers/StateRenderer/StateRenderer.spec.tsx +14 -17
  280. package/src/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.spec.tsx +18 -17
  281. package/src/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.tsx +2 -2
  282. package/src/components/List/ListRowRenderer/ListRowRenderer.spec.tsx +82 -68
  283. package/src/components/Loaders/ImageLoader/ImageLoader.spec.tsx +88 -96
  284. package/src/components/Loaders/Loader/Loader.spec.tsx +51 -24
  285. package/src/components/Message/Message.spec.tsx +56 -44
  286. package/src/components/MessageBar/MessageBar.scss +3 -0
  287. package/src/components/MessageBar/MessageBar.spec.tsx +88 -85
  288. package/src/components/Modal/Modal.spec.tsx +92 -87
  289. package/src/components/NavigationAwareStation/NavigationAwareStation.spec.tsx +23 -22
  290. package/src/components/PageHeader/PageHeader.spec.tsx +22 -21
  291. package/src/components/PageHeader/PageHeaderAction/PageHeaderAction.spec.tsx +275 -193
  292. package/src/components/PageHeader/PageHeaderActionsGroup/PageHeaderActionsGroup.spec.tsx +39 -34
  293. package/src/components/ProgressBar/ProgressBar.spec.tsx +18 -15
  294. package/src/components/Utils/Postgraphile/CreateConnectionRenderer.spec.ts +1 -0
  295. package/src/components/Utils/Postgraphile/FilterTransformer.spec.ts +1 -0
  296. package/src/components/Utils/Postgraphile/RangeTransformer.spec.ts +1 -0
  297. package/src/components/Utils/Postgraphile/SortTransformer.spec.ts +1 -0
  298. package/src/components/Utils/Postgraphile/UpdateGQLFragmentGenerator.spec.ts +1 -0
  299. package/src/components/Utils/Postgraphile/generateArrayMutations.spec.ts +1 -0
  300. package/src/components/Utils/Postgraphile/getArrayDiff.spec.ts +1 -0
  301. package/src/components/Utils/Postgraphile/getFormDiff.spec.ts +1 -0
  302. package/src/components/Utils/State/GlobalState.spec.ts +4 -2
  303. package/src/components/Utils/Transformers/Boolean.spec.ts +1 -0
  304. package/src/components/Utils/Transformers/DateTime.spec.ts +2 -1
  305. package/src/components/Utils/Transformers/FileSize.spec.ts +1 -0
  306. package/src/components/Utils/Transformers/SortArray.spec.ts +1 -0
  307. package/src/components/Utils/Transformers/Timestamp.spec.ts +3 -2
  308. package/src/components/Utils/Transformers/TitleCase.spec.ts +1 -0
  309. package/src/components/VisualElements/ImgElement.spec.tsx +34 -35
  310. package/src/components/VisualElements/SvgElement.spec.tsx +72 -69
  311. package/src/helpers/testing.ts +9 -76
  312. package/src/hooks/useBusy/useBusy.spec.tsx +8 -9
  313. package/src/hooks/useClickOutside/useClickOutside.spec.tsx +19 -51
  314. package/src/hooks/useDebounce/useDebounce.spec.tsx +31 -26
  315. package/src/hooks/useExpand/useExpand.spec.tsx +30 -21
  316. package/src/hooks/useTabTitle/useTabTitle.spec.tsx +18 -18
  317. package/src/hooks/useValueOrOnDemand/useValueOrOnDemand.spec.tsx +31 -52
  318. package/src/styles/variables.scss +3 -1
  319. package/src/utils/ErrorMapper/ApolloClient/ApolloErrorMapper.spec.ts +1 -0
  320. package/src/utils/ErrorMapper/ErrorMapper.spec.ts +1 -0
  321. package/src/utils/ErrorTypeToStationError.spec.tsx +12 -11
  322. package/src/utils/ToolTipHelpers.spec.ts +1 -0
  323. package/src/validators/timestamp/timestamp.spec.ts +1 -0
  324. package/dist/helpers/hooksTestingHelpers.d.ts +0 -7
  325. package/dist/helpers/hooksTestingHelpers.d.ts.map +0 -1
  326. package/src/helpers/hooksTestingHelpers.tsx +0 -22
@@ -1,35 +1,36 @@
1
- import { mount, shallow } from 'enzyme';
1
+ import { render } from '@testing-library/react';
2
2
  import React from 'react';
3
+ import { describe, expect, it } from 'vitest';
3
4
  import { SvgElement, SvgElementProps } from './SvgElement';
4
5
 
5
6
  describe('SvgElement', () => {
6
7
  it('renders the component without crashing', () => {
7
- const wrapper = shallow(<SvgElement />);
8
+ const { container } = render(<SvgElement />);
8
9
 
9
- expect(wrapper).toBeTruthy();
10
+ expect(container).toBeTruthy();
10
11
  });
11
12
 
12
13
  it('renders with default viewBox', () => {
13
- const wrapper = mount(<SvgElement />);
14
- const svg = wrapper.find('svg');
14
+ const { container } = render(<SvgElement />);
15
+ const svg = container.querySelector('svg')!;
15
16
 
16
- expect(svg.prop('viewBox')).toBe('0 0 40 40');
17
+ expect(svg).toHaveAttribute('viewBox', '0 0 40 40');
17
18
  });
18
19
 
19
20
  it('renders with custom viewBox', () => {
20
21
  const customViewBox = '0 0 24 24';
21
- const wrapper = mount(<SvgElement viewBox={customViewBox} />);
22
- const svg = wrapper.find('svg');
22
+ const { container } = render(<SvgElement viewBox={customViewBox} />);
23
+ const svg = container.querySelector('svg')!;
23
24
 
24
- expect(svg.prop('viewBox')).toBe(customViewBox);
25
+ expect(svg).toHaveAttribute('viewBox', customViewBox);
25
26
  });
26
27
 
27
28
  it('passes down className to svg element', () => {
28
29
  const testClass = 'custom-icon-class';
29
- const wrapper = mount(<SvgElement className={testClass} />);
30
- const svg = wrapper.find('svg');
30
+ const { container } = render(<SvgElement className={testClass} />);
31
+ const svg = container.querySelector('svg')!;
31
32
 
32
- expect(svg.hasClass(testClass)).toBe(true);
33
+ expect(svg).toHaveClass(testClass);
33
34
  });
34
35
 
35
36
  it('renders children inside svg', () => {
@@ -37,76 +38,77 @@ describe('SvgElement', () => {
37
38
  const cx = 15;
38
39
  const cy = 15;
39
40
  const r = 5;
40
- const wrapper = mount(
41
+ const { container } = render(
41
42
  <SvgElement>
42
43
  <path d={d} />
43
44
  <circle cx={cx} cy={cy} r={r} />
44
45
  </SvgElement>,
45
46
  );
46
- const circle = wrapper.find('circle');
47
-
48
- expect(wrapper.find('path')).toHaveLength(1);
49
- expect(wrapper.find('circle')).toHaveLength(1);
50
- expect(wrapper.find('path').prop('d')).toBe(d);
51
- expect(circle.prop('cx')).toBe(cx);
52
- expect(circle.prop('cy')).toBe(cy);
53
- expect(circle.prop('r')).toBe(r);
47
+
48
+ expect(container.querySelectorAll('path')).toHaveLength(1);
49
+ expect(container.querySelectorAll('circle')).toHaveLength(1);
50
+ expect(container.querySelector('path')).toHaveAttribute('d', d);
51
+ expect(container.querySelector('circle')).toHaveAttribute('cx', String(cx));
52
+ expect(container.querySelector('circle')).toHaveAttribute('cy', String(cy));
53
+ expect(container.querySelector('circle')).toHaveAttribute('r', String(r));
54
54
  });
55
55
 
56
56
  it('renders as decorative icon by default', () => {
57
- const wrapper = mount(<SvgElement />);
58
- const svg = wrapper.find('svg');
57
+ const { container } = render(<SvgElement />);
58
+ const svg = container.querySelector('svg')!;
59
59
 
60
- expect(svg.prop('role')).toBe('presentation');
61
- expect(svg.prop('aria-hidden')).toBe('true');
62
- expect(svg.prop('aria-label')).toBeUndefined();
60
+ expect(svg).toHaveAttribute('role', 'presentation');
61
+ expect(svg).toHaveAttribute('aria-hidden', 'true');
62
+ expect(svg).not.toHaveAttribute('aria-label');
63
63
  });
64
64
 
65
65
  it('renders as semantic icon when aria-label is provided', () => {
66
66
  const ariaLabel = 'Custom icon description';
67
- const wrapper = mount(<SvgElement aria-label={ariaLabel} />);
68
- const svg = wrapper.find('svg');
67
+ const { container } = render(<SvgElement aria-label={ariaLabel} />);
68
+ const svg = container.querySelector('svg')!;
69
69
 
70
- expect(svg.prop('role')).toBe('img');
71
- expect(svg.prop('aria-hidden')).toBeUndefined();
72
- expect(svg.prop('aria-label')).toBe(ariaLabel);
70
+ expect(svg).toHaveAttribute('role', 'img');
71
+ expect(svg).not.toHaveAttribute('aria-hidden');
72
+ expect(svg).toHaveAttribute('aria-label', ariaLabel);
73
73
  });
74
74
 
75
75
  it('renders as semantic icon when title is provided', () => {
76
76
  const title = 'Icon tooltip';
77
- const wrapper = mount(<SvgElement title={title} />);
78
- const svg = wrapper.find('svg');
77
+ const { container } = render(<SvgElement title={title} />);
78
+ const svg = container.querySelector('svg')!;
79
79
 
80
- expect(svg.prop('role')).toBe('img');
81
- expect(svg.prop('aria-hidden')).toBeUndefined();
82
- expect(wrapper.find('title')).toHaveLength(1);
83
- expect(wrapper.find('title').text()).toBe(title);
80
+ expect(svg).toHaveAttribute('role', 'img');
81
+ expect(svg).not.toHaveAttribute('aria-hidden');
82
+ expect(container.querySelectorAll('title')).toHaveLength(1);
83
+ expect(container.querySelector('title')!.textContent).toBe(title);
84
84
  });
85
85
 
86
86
  it('renders as semantic icon when both aria-label and title are provided', () => {
87
87
  const ariaLabel = 'Icon description';
88
88
  const title = 'Icon tooltip';
89
- const wrapper = mount(<SvgElement aria-label={ariaLabel} title={title} />);
90
- const svg = wrapper.find('svg');
91
-
92
- expect(svg.prop('role')).toBe('img');
93
- expect(svg.prop('aria-hidden')).toBeUndefined();
94
- expect(svg.prop('aria-label')).toBe(ariaLabel);
95
- expect(wrapper.find('title')).toHaveLength(1);
96
- expect(wrapper.find('title').text()).toBe(title);
89
+ const { container } = render(
90
+ <SvgElement aria-label={ariaLabel} title={title} />,
91
+ );
92
+ const svg = container.querySelector('svg')!;
93
+
94
+ expect(svg).toHaveAttribute('role', 'img');
95
+ expect(svg).not.toHaveAttribute('aria-hidden');
96
+ expect(svg).toHaveAttribute('aria-label', ariaLabel);
97
+ expect(container.querySelectorAll('title')).toHaveLength(1);
98
+ expect(container.querySelector('title')!.textContent).toBe(title);
97
99
  });
98
100
 
99
101
  it('does not render title element when title prop is not provided', () => {
100
- const wrapper = mount(<SvgElement aria-label="Icon" />);
102
+ const { container } = render(<SvgElement aria-label="Icon" />);
101
103
 
102
- expect(wrapper.find('title')).toHaveLength(0);
104
+ expect(container.querySelectorAll('title')).toHaveLength(0);
103
105
  });
104
106
 
105
107
  it('applies default SVG attributes', () => {
106
- const wrapper = mount(<SvgElement />);
107
- const svg = wrapper.find('svg');
108
+ const { container } = render(<SvgElement />);
109
+ const svg = container.querySelector('svg')!;
108
110
 
109
- expect(svg.prop('focusable')).toBe('false');
111
+ expect(svg).toHaveAttribute('focusable', 'false');
110
112
  });
111
113
 
112
114
  it('passes through additional SVG attributes', () => {
@@ -116,43 +118,44 @@ describe('SvgElement', () => {
116
118
  stroke: 'red',
117
119
  strokeWidth: '2',
118
120
  };
121
+ const { container } = render(<SvgElement {...customProps} />);
122
+ const svg = container.querySelector('svg')!;
119
123
 
120
- const wrapper = mount(<SvgElement {...customProps} />);
121
- const svg = wrapper.find('svg');
122
-
123
- expect(svg.prop('id')).toBe('custom-id');
124
- expect(svg.prop('fill')).toBe('currentColor');
125
- expect(svg.prop('stroke')).toBe('red');
126
- expect(svg.prop('strokeWidth')).toBe('2');
124
+ expect(svg).toHaveAttribute('id', 'custom-id');
125
+ expect(svg).toHaveAttribute('fill', 'currentColor');
126
+ expect(svg).toHaveAttribute('stroke', 'red');
127
+ expect(svg).toHaveAttribute('stroke-width', '2');
127
128
  });
128
129
 
129
130
  it('allows overriding default attributes', () => {
130
- const wrapper = mount(
131
+ const { container } = render(
131
132
  <SvgElement
132
133
  version="2.0"
133
134
  xmlns="http://custom-namespace.com"
134
135
  focusable="true"
135
136
  />,
136
137
  );
137
- const svg = wrapper.find('svg');
138
+ const svg = container.querySelector('svg')!;
138
139
 
139
- expect(svg.prop('version')).toBe('2.0');
140
- expect(svg.prop('xmlns')).toBe('http://custom-namespace.com');
141
- expect(svg.prop('focusable')).toBe('true');
140
+ expect(svg).toHaveAttribute('version', '2.0');
141
+ expect(svg).toHaveAttribute('xmlns', 'http://custom-namespace.com');
142
+ expect(svg).toHaveAttribute('focusable', 'true');
142
143
  });
143
144
 
144
145
  it('prioritizes explicit role over calculated role', () => {
145
- const wrapper = mount(<SvgElement role="button" aria-label="Click me" />);
146
- const svg = wrapper.find('svg');
146
+ const { container } = render(
147
+ <SvgElement role="button" aria-label="Click me" />,
148
+ );
149
+ const svg = container.querySelector('svg')!;
147
150
 
148
- expect(svg.prop('role')).toBe('button');
151
+ expect(svg).toHaveAttribute('role', 'button');
149
152
  });
150
153
 
151
154
  it('prioritizes explicit aria-hidden over calculated value', () => {
152
- const wrapper = mount(<SvgElement aria-hidden="false" />);
153
- const svg = wrapper.find('svg');
155
+ const { container } = render(<SvgElement aria-hidden="false" />);
156
+ const svg = container.querySelector('svg')!;
154
157
 
155
- expect(svg.prop('aria-hidden')).toBe('false');
156
- expect(svg.prop('role')).toBe('presentation'); // Still decorative without label/title
158
+ expect(svg).toHaveAttribute('aria-hidden', 'false');
159
+ expect(svg).toHaveAttribute('role', 'presentation'); // Still decorative without label/title
157
160
  });
158
161
  });
@@ -1,81 +1,16 @@
1
- import { ShallowWrapper } from 'enzyme';
2
1
  import { act } from 'react-dom/test-utils';
3
- /**
4
- * @jest-environment jsdom
5
- */
6
- import { setImmediate } from 'timers';
7
-
8
- /**
9
- * Executes the given callback in an `setImmediate` call and returns a Promise that resolves after the call is finished.
10
- * @param callback The code that should run in the `setImmediate`
11
- */
12
- export const setImmediateAsync = async (
13
- callback: (() => Promise<void>) | (() => void),
14
- ): Promise<void> => {
15
- return new Promise((resolve, reject) => {
16
- setImmediate(async () => {
17
- try {
18
- await callback();
19
- resolve();
20
- } catch (e) {
21
- reject(e);
22
- }
23
- });
24
- });
25
- };
26
-
27
- /**
28
- * Creates a helper function that allows checking the value of a prop on an Enzyme Wrapper
29
- * against a property value of the given `props` object.
30
- * @param props
31
- */
32
- export const createExpectComponentReceivesValue = (props: {
33
- [key: string]: any;
34
- }): ((
35
- wrapper: ShallowWrapper<any>,
36
- prop: string,
37
- internalProp?: string | undefined,
38
- ) => void) => {
39
- /**
40
- * Asserts that a given property on the wrapper is equal to the a property value on the
41
- * `props` object passed to the `createExpectComponentReceivesValue` method.
42
- *
43
- * It assumes that the prop names on the `props` object matches the name of the prop on the wrapper.
44
- * If that's not the case, you can use the `internalProp` parameter to define a different value.
45
- * @param wrapper The wrapper that should contain the prop.
46
- * @param prop The name of the prop that should be checked.
47
- * @param internalProp In case the internal prop name does not match the prop name on the `props`
48
- * object this parameter can be used to specify the prop name on the wrapper.
49
- */
50
- function test(
51
- wrapper: ShallowWrapper<any>,
52
- prop: string,
53
- internalProp?: string,
54
- ): void {
55
- /**
56
- * Test
57
- */
58
- expect(
59
- wrapper.prop(internalProp ?? prop),
60
- `The prop '${internalProp ?? prop}' does not equal the expected property${
61
- internalProp ? ` (Input prop: '${prop}').` : '.'
62
- }`,
63
- ).toEqual(props[prop]);
64
- }
65
-
66
- return test;
67
- };
2
+ import type { MockInstance } from 'vitest';
68
3
 
69
4
  /**
70
5
  * Helper method to that calls the given function inside an `act` function
71
6
  * and returns the return of that function.
72
7
  *
73
- * This is useful to avoid getting `TSS2454: Variable 'wrapper' is used before being assigned.`
74
- * and having to use `wrapper!.` everywhere in your test.
8
+ * This is useful to avoid getting `TSS2454: Variable 'result' is used before being assigned.`
9
+ * and having to use `result!.` everywhere in your test.
75
10
  *
76
11
  * @example
77
- * const wrapper = await actWithReturn(() =>
78
- * mount(
12
+ * const result = await actWithReturn(() =>
13
+ * render(
79
14
  * <Explorer
80
15
  * columns={[{ propertyName: 'id' }]}
81
16
  * dataProvider={provider}
@@ -92,8 +27,8 @@ export async function actWithReturn<T>(
92
27
  w = await render();
93
28
  });
94
29
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
95
- const wrapper = w!;
96
- return wrapper;
30
+ const result = w!;
31
+ return result;
97
32
  }
98
33
 
99
34
  /**
@@ -101,8 +36,6 @@ export async function actWithReturn<T>(
101
36
  * This helper will not mock any thing. It's just converting Typescript types!
102
37
  * @param f the mocked function
103
38
  */
104
- export const asSpy = <T>(
105
- fn: (...args: any) => T,
106
- ): jest.SpyInstance<Partial<T>> => {
107
- return fn as unknown as jest.SpyInstance<Partial<T>>;
39
+ export const asSpy = <T>(fn: (...args: any) => T): MockInstance => {
40
+ return fn as unknown as MockInstance;
108
41
  };
@@ -1,12 +1,13 @@
1
- import { mount } from 'enzyme';
1
+ import { render } from '@testing-library/react';
2
2
  import React from 'react';
3
+ import { describe, expect, it, vi } from 'vitest';
3
4
  import { on } from '../../initialize';
4
5
  import { useBusy } from './useBusy';
5
6
 
6
7
  let callback: (busyState: boolean) => void;
7
8
 
8
- jest.mock('../../initialize', () => ({
9
- on: jest.fn().mockImplementationOnce((event, cb) => {
9
+ vi.mock('../../initialize', () => ({
10
+ on: vi.fn().mockImplementationOnce((event, cb) => {
10
11
  callback = cb;
11
12
  }),
12
13
  }));
@@ -19,16 +20,14 @@ const TestWrapper: React.FC = () => {
19
20
 
20
21
  describe('useBusy', () => {
21
22
  it(`both 'val' and 'debouncedValue' are set to the initial value`, () => {
22
- const wrapper = mount(<TestWrapper />);
23
- const currentValue = wrapper.find('#value');
23
+ const { container } = render(<TestWrapper />);
24
+ const currentValue = container.querySelector('#value');
24
25
 
25
26
  expect(on).toHaveBeenCalled();
26
- expect(currentValue.text()).toBe('false');
27
+ expect(currentValue?.textContent).toBe('false');
27
28
 
28
29
  callback(true);
29
30
 
30
- wrapper.update();
31
-
32
- expect(currentValue.text()).toBe('true');
31
+ expect(container.querySelector('#value')?.textContent).toBe('true');
33
32
  });
34
33
  });
@@ -1,6 +1,6 @@
1
- import { mount } from 'enzyme';
1
+ import { act, fireEvent, render } from '@testing-library/react';
2
2
  import React, { useRef, useState } from 'react';
3
- import { act } from 'react-dom/test-utils';
3
+ import { describe, expect, it } from 'vitest';
4
4
  import { useClickOutside } from './useClickOutside';
5
5
 
6
6
  const TestWrapper: React.FC<{ enabled?: boolean }> = ({ enabled = true }) => {
@@ -28,86 +28,56 @@ const TestWrapper: React.FC<{ enabled?: boolean }> = ({ enabled = true }) => {
28
28
 
29
29
  describe('useClickOutside', () => {
30
30
  it('should call handler when clicking outside the referenced elements', () => {
31
- const wrapper = mount(<TestWrapper />);
32
-
33
- let status = wrapper.find('.status');
34
- expect(status.text()).toBe('not-clicked');
35
-
36
- const outside = wrapper.find('.outside').getDOMNode();
31
+ const { getByText } = render(<TestWrapper />);
32
+ expect(getByText('not-clicked')).toBeInTheDocument();
37
33
 
38
34
  act(() => {
39
- const event = new MouseEvent('mousedown', {
40
- bubbles: true,
41
- cancelable: true,
42
- view: window,
43
- });
44
- Object.defineProperty(event, 'target', {
45
- writable: false,
46
- value: outside,
47
- });
48
- document.dispatchEvent(event);
35
+ fireEvent.mouseDown(getByText('Outside'));
49
36
  });
50
37
 
51
- wrapper.update();
52
- status = wrapper.find('.status');
53
- expect(status.text()).toBe('clicked-outside');
38
+ expect(getByText('clicked-outside')).toBeInTheDocument();
54
39
  });
55
40
 
56
41
  it('should not call handler when clicking inside the first referenced element', () => {
57
- const wrapper = mount(<TestWrapper />);
58
-
59
- const inside1 = wrapper.find('.inside-1');
42
+ const { getByText } = render(<TestWrapper />);
60
43
 
61
44
  act(() => {
62
- inside1.simulate('mousedown');
45
+ fireEvent.mouseDown(getByText('Inside 1'));
63
46
  });
64
47
 
65
- wrapper.update();
66
- const status = wrapper.find('.status');
67
- expect(status.text()).toBe('not-clicked');
48
+ expect(getByText('not-clicked')).toBeInTheDocument();
68
49
  });
69
50
 
70
51
  it('should not call handler when clicking inside the second referenced element', () => {
71
- const wrapper = mount(<TestWrapper />);
72
-
73
- const inside2 = wrapper.find('.inside-2');
52
+ const { getByText } = render(<TestWrapper />);
74
53
 
75
54
  act(() => {
76
- inside2.simulate('mousedown');
55
+ fireEvent.mouseDown(getByText('Inside 2'));
77
56
  });
78
57
 
79
- wrapper.update();
80
- const status = wrapper.find('.status');
81
- expect(status.text()).toBe('not-clicked');
58
+ expect(getByText('not-clicked')).toBeInTheDocument();
82
59
  });
83
60
 
84
61
  it('should not call handler when disabled', () => {
85
- const wrapper = mount(<TestWrapper enabled={false} />);
86
-
87
- const outside = wrapper.find('.outside');
62
+ const { getByText } = render(<TestWrapper enabled={false} />);
88
63
 
89
64
  act(() => {
90
- outside.simulate('mousedown');
65
+ fireEvent.mouseDown(getByText('Outside'));
91
66
  });
92
67
 
93
- wrapper.update();
94
- const status = wrapper.find('.status');
95
- expect(status.text()).toBe('not-clicked');
68
+ expect(getByText('not-clicked')).toBeInTheDocument();
96
69
  });
97
70
 
98
71
  it('should handle touch events', () => {
99
- const wrapper = mount(<TestWrapper />);
100
-
101
- let status = wrapper.find('.status');
102
- expect(status.text()).toBe('not-clicked');
72
+ const { getByText } = render(<TestWrapper />);
73
+ expect(getByText('not-clicked')).toBeInTheDocument();
103
74
 
104
- const outside = wrapper.find('.outside').getDOMNode();
75
+ const outside = getByText('Outside');
105
76
 
106
77
  act(() => {
107
78
  const event = new TouchEvent('touchstart', {
108
79
  bubbles: true,
109
80
  cancelable: true,
110
- view: window,
111
81
  });
112
82
  Object.defineProperty(event, 'target', {
113
83
  writable: false,
@@ -116,8 +86,6 @@ describe('useClickOutside', () => {
116
86
  document.dispatchEvent(event);
117
87
  });
118
88
 
119
- wrapper.update();
120
- status = wrapper.find('.status');
121
- expect(status.text()).toBe('clicked-outside');
89
+ expect(getByText('clicked-outside')).toBeInTheDocument();
122
90
  });
123
91
  });
@@ -1,6 +1,7 @@
1
- import { mount } from 'enzyme';
1
+ import { fireEvent, render } from '@testing-library/react';
2
2
  import React, { FormEvent, useEffect, useState } from 'react';
3
3
  import { act } from 'react-dom/test-utils';
4
+ import { describe, expect, it, vi } from 'vitest';
4
5
  import { useDebounce } from './useDebounce';
5
6
 
6
7
  const mockIntialValue = 'test-value';
@@ -27,49 +28,53 @@ const TestWrapper: React.FC<{ value: string }> = ({ value }) => {
27
28
 
28
29
  describe('useDebounce', () => {
29
30
  it(`both 'val' and 'debouncedValue' are set to the initial value`, () => {
30
- const wrapper = mount(<TestWrapper value={mockIntialValue} />);
31
+ const { container } = render(<TestWrapper value={mockIntialValue} />);
31
32
 
32
- const currentValue = wrapper.find('#value');
33
- const debounced = wrapper.find('#debounced-value');
33
+ const currentValue = container.querySelector('#value');
34
+ const debounced = container.querySelector('#debounced-value');
34
35
 
35
- expect(currentValue.text()).toBe(mockIntialValue);
36
- expect(debounced.text()).toBe(mockIntialValue);
36
+ expect(currentValue?.textContent).toBe(mockIntialValue);
37
+ expect(debounced?.textContent).toBe(mockIntialValue);
37
38
  });
38
39
 
39
- it(`'setVal()' updates both 'val' and 'debouncedValue'`, async () => {
40
+ it(`'setVal()' updates both 'val' and 'debouncedValue'`, () => {
40
41
  const mockNewValue = 'test-new-value';
41
42
 
42
- jest.useFakeTimers();
43
+ vi.useFakeTimers();
43
44
 
44
- const wrapper = mount(<TestWrapper value={mockIntialValue} />);
45
+ const { container } = render(<TestWrapper value={mockIntialValue} />);
45
46
 
46
- let currentValue = wrapper.find('#value');
47
- let debounced = wrapper.find('#debounced-value');
47
+ let currentValue = container.querySelector('#value');
48
+ let debounced = container.querySelector('#debounced-value');
48
49
 
49
- expect(currentValue.text()).toBe(mockIntialValue);
50
- expect(debounced.text()).toBe(mockIntialValue);
50
+ expect(currentValue?.textContent).toBe(mockIntialValue);
51
+ expect(debounced?.textContent).toBe(mockIntialValue);
51
52
 
52
- const input = wrapper.find('input');
53
+ const input = container.querySelector('input') as HTMLInputElement;
53
54
 
54
- await act(async () => {
55
- input.getDOMNode<HTMLInputElement>().value = mockNewValue;
56
- await input.simulate('change', {
55
+ act(() => {
56
+ fireEvent.change(input, {
57
57
  target: { value: mockNewValue },
58
58
  });
59
59
  });
60
60
 
61
- wrapper.update();
61
+ // Check that val is updated immediately
62
+ currentValue = container.querySelector('#value');
63
+ expect(currentValue?.textContent).toBe(mockNewValue);
62
64
 
63
- await act(async () => {
64
- jest.runAllTimers();
65
- });
65
+ // Check that debounced value is still the old value
66
+ debounced = container.querySelector('#debounced-value');
67
+ expect(debounced?.textContent).toBe(mockIntialValue);
66
68
 
67
- wrapper.update();
69
+ // Fast-forward time to trigger debounce
70
+ act(() => {
71
+ vi.runAllTimers();
72
+ });
68
73
 
69
- currentValue = wrapper.find('#value');
70
- debounced = wrapper.find('#debounced-value');
74
+ // Now check that debounced value has updated
75
+ debounced = container.querySelector('#debounced-value');
76
+ expect(debounced?.textContent).toBe(mockNewValue);
71
77
 
72
- expect(currentValue.text()).toBe(mockNewValue);
73
- expect(debounced.text()).toBe(mockNewValue);
78
+ vi.useRealTimers();
74
79
  });
75
80
  });