@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.
- package/dist/components/Buttons/Button/Button.d.ts +3 -3
- package/dist/components/Buttons/Button/Button.d.ts.map +1 -1
- package/dist/components/Buttons/Button.model.d.ts +2 -1
- package/dist/components/Buttons/Button.model.d.ts.map +1 -1
- package/dist/components/ConfirmDialog/ConfirmDialog.d.ts.map +1 -1
- package/dist/components/ConfirmDialog/ConfirmDialog.models.d.ts +0 -1
- package/dist/components/ConfirmDialog/ConfirmDialog.models.d.ts.map +1 -1
- package/dist/components/DateTime/TimePicker/ScrollColumn/ScrollColumn.d.ts +2 -2
- package/dist/components/DateTime/TimePicker/ScrollColumn/ScrollColumn.d.ts.map +1 -1
- package/dist/components/DynamicDataList/DynamicDataList.d.ts +1 -1
- package/dist/components/DynamicDataList/DynamicDataList.d.ts.map +1 -1
- package/dist/components/DynamicDataList/DynamicDataList.model.d.ts +0 -1
- package/dist/components/DynamicDataList/DynamicDataList.model.d.ts.map +1 -1
- package/dist/components/DynamicDataList/DynamicListDataEntry/DynamicListDataEntry.d.ts +2 -2
- package/dist/components/DynamicDataList/DynamicListDataEntry/DynamicListDataEntry.d.ts.map +1 -1
- package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/createInputRenderer/createInputRenderer.d.ts +1 -1
- package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/createInputRenderer/createInputRenderer.d.ts.map +1 -1
- package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/createSelectRenderer/createSelectRenderer.d.ts +1 -1
- package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/createSelectRenderer/createSelectRenderer.d.ts.map +1 -1
- package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/renderers.model.d.ts +2 -0
- package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/renderers.model.d.ts.map +1 -1
- package/dist/components/DynamicDataList/DynamicListHeader/DynamicListHeader.d.ts +2 -2
- package/dist/components/DynamicDataList/DynamicListHeader/DynamicListHeader.d.ts.map +1 -1
- package/dist/components/DynamicDataList/DynamicListRow/DynamicListRow.d.ts +2 -2
- package/dist/components/DynamicDataList/DynamicListRow/DynamicListRow.d.ts.map +1 -1
- package/dist/components/DynamicDataList/helpers/DynamicListReducer/DynamicListReducer.actions.d.ts +2 -2
- package/dist/components/DynamicDataList/helpers/DynamicListReducer/DynamicListReducer.actions.d.ts.map +1 -1
- package/dist/components/DynamicDataList/helpers/DynamicListReducer/DynamicListReducer.d.ts.map +1 -1
- package/dist/components/DynamicDataList/helpers/DynamicListReducer/DynamicListReducer.init.d.ts.map +1 -1
- package/dist/components/DynamicDataList/helpers/useColumnDefs.d.ts +1 -1
- package/dist/components/DynamicDataList/helpers/useColumnDefs.d.ts.map +1 -1
- package/dist/components/DynamicDataList/helpers/useDataHandler.d.ts +1 -1
- package/dist/components/DynamicDataList/helpers/useDataHandler.d.ts.map +1 -1
- package/dist/components/DynamicDataList/helpers/useRowAnimation.d.ts.map +1 -1
- package/dist/components/DynamicDataList/helpers/useRowEditing.d.ts.map +1 -1
- package/dist/components/EmptyStation/EmptyStation.d.ts.map +1 -1
- package/dist/components/Explorer/BulkEdit/FormFieldsConfigConverter.d.ts.map +1 -1
- package/dist/components/Explorer/BulkEdit/GenerateMutation.d.ts.map +1 -1
- package/dist/components/Explorer/BulkEdit/helpers/FieldWrapper.d.ts.map +1 -1
- package/dist/components/Explorer/BulkEdit/useBulkEdit.d.ts.map +1 -1
- package/dist/components/Explorer/Explorer.d.ts +1 -1
- package/dist/components/Explorer/Explorer.d.ts.map +1 -1
- package/dist/components/Explorer/Explorer.model.d.ts +0 -1
- package/dist/components/Explorer/Explorer.model.d.ts.map +1 -1
- package/dist/components/Explorer/NavigationExplorer/NavigationExplorer.d.ts +1 -1
- package/dist/components/Explorer/NavigationExplorer/NavigationExplorer.d.ts.map +1 -1
- package/dist/components/Explorer/QuickEdit/useQuickEdit.d.ts.map +1 -1
- package/dist/components/Explorer/SelectionExplorer/SelectionExplorer.d.ts +1 -1
- package/dist/components/Explorer/SelectionExplorer/SelectionExplorer.d.ts.map +1 -1
- package/dist/components/Explorer/helpers/useActions.d.ts +0 -1
- package/dist/components/Explorer/helpers/useActions.d.ts.map +1 -1
- package/dist/components/Explorer/helpers/useDataProvider.d.ts +0 -1
- package/dist/components/Explorer/helpers/useDataProvider.d.ts.map +1 -1
- package/dist/components/Explorer/helpers/useFilters.d.ts +0 -1
- package/dist/components/Explorer/helpers/useFilters.d.ts.map +1 -1
- package/dist/components/FieldSelection/FieldSelection.d.ts +1 -0
- package/dist/components/FieldSelection/FieldSelection.d.ts.map +1 -1
- package/dist/components/Filters/Filter/Filter.d.ts +2 -2
- package/dist/components/Filters/Filter/Filter.d.ts.map +1 -1
- package/dist/components/Filters/Filters.d.ts +2 -2
- package/dist/components/Filters/Filters.d.ts.map +1 -1
- package/dist/components/Filters/Filters.model.d.ts +0 -1
- package/dist/components/Filters/Filters.model.d.ts.map +1 -1
- package/dist/components/Filters/Validators/DateRangeFilterValidator.d.ts.map +1 -1
- package/dist/components/Filters/Validators/NumberRangeFilterValidator.d.ts.map +1 -1
- package/dist/components/FormElements/DynamicDataListControl/DynamicDataListControl.d.ts +0 -1
- package/dist/components/FormElements/DynamicDataListControl/DynamicDataListControl.d.ts.map +1 -1
- package/dist/components/FormElements/DynamicDataListControl/DynamicDataListField.d.ts +2 -2
- package/dist/components/FormElements/DynamicDataListControl/DynamicDataListField.d.ts.map +1 -1
- package/dist/components/FormElements/FormGroup/FormGroup.d.ts +12 -0
- package/dist/components/FormElements/FormGroup/FormGroup.d.ts.map +1 -0
- package/dist/components/FormElements/FormGroupTitle/FormGroupTitle.d.ts +5 -0
- package/dist/components/FormElements/FormGroupTitle/FormGroupTitle.d.ts.map +1 -1
- package/dist/components/FormElements/FormikDebug/FormikDebug.d.ts +0 -1
- package/dist/components/FormElements/FormikDebug/FormikDebug.d.ts.map +1 -1
- package/dist/components/FormElements/ReadOnly/ReadOnlyField.d.ts +2 -2
- package/dist/components/FormElements/ReadOnly/ReadOnlyField.d.ts.map +1 -1
- package/dist/components/FormElements/ReadOnlyText/ReadOnlyTextField.d.ts +2 -2
- package/dist/components/FormElements/ReadOnlyText/ReadOnlyTextField.d.ts.map +1 -1
- package/dist/components/FormElements/Tags/Tags.d.ts +2 -2
- package/dist/components/FormElements/Tags/Tags.d.ts.map +1 -1
- package/dist/components/FormElements/Tags/TagsField.d.ts +2 -2
- package/dist/components/FormElements/Tags/TagsField.d.ts.map +1 -1
- package/dist/components/FormElements/formStoryHelper.d.ts.map +1 -1
- package/dist/components/FormElements/index.d.ts +1 -0
- package/dist/components/FormElements/index.d.ts.map +1 -1
- package/dist/components/FormElements/useFormikError.d.ts.map +1 -1
- package/dist/components/FormStation/Create/Create.d.ts +2 -2
- package/dist/components/FormStation/Create/Create.d.ts.map +1 -1
- package/dist/components/FormStation/Details/Details.d.ts +2 -2
- package/dist/components/FormStation/Details/Details.d.ts.map +1 -1
- package/dist/components/FormStation/FormStation.d.ts +2 -2
- package/dist/components/FormStation/FormStation.d.ts.map +1 -1
- package/dist/components/FormStation/FormStationActions/FormStationActions.d.ts +1 -1
- package/dist/components/FormStation/FormStationActions/FormStationActions.d.ts.map +1 -1
- package/dist/components/FormStation/FormStationHeader/FormStationHeader.d.ts.map +1 -1
- package/dist/components/FormStation/SaveOnDemand/SaveOnDemand.d.ts +0 -1
- package/dist/components/FormStation/SaveOnDemand/SaveOnDemand.d.ts.map +1 -1
- package/dist/components/FormStation/SaveOnNavigate/handleNavigationAttempt.d.ts.map +1 -1
- package/dist/components/FormStation/helpers/useTitle.d.ts.map +1 -1
- package/dist/components/InfoPanel/hooks/useCollapse.d.ts +0 -1
- package/dist/components/InfoPanel/hooks/useCollapse.d.ts.map +1 -1
- package/dist/components/InlineMenu/InlineMenu.d.ts.map +1 -1
- package/dist/components/List/List.d.ts +2 -2
- package/dist/components/List/List.d.ts.map +1 -1
- package/dist/components/List/List.model.d.ts +0 -1
- package/dist/components/List/List.model.d.ts.map +1 -1
- package/dist/components/List/List.stories.helper.d.ts.map +1 -1
- package/dist/components/List/ListHeader/ColumnLabel/ColumnLabel.d.ts +2 -2
- package/dist/components/List/ListHeader/ColumnLabel/ColumnLabel.d.ts.map +1 -1
- package/dist/components/List/ListHeader/ListHeader.d.ts +2 -2
- package/dist/components/List/ListHeader/ListHeader.d.ts.map +1 -1
- package/dist/components/List/ListRow/ListRow.d.ts +2 -4
- package/dist/components/List/ListRow/ListRow.d.ts.map +1 -1
- package/dist/components/List/ListRow/ListRowCell/ListRowCell.d.ts +0 -1
- package/dist/components/List/ListRow/ListRowCell/ListRowCell.d.ts.map +1 -1
- package/dist/components/List/ListRow/ListRowCell/renderData.d.ts.map +1 -1
- package/dist/components/List/ListRow/ListRowLoader.d.ts +2 -2
- package/dist/components/List/ListRow/ListRowLoader.d.ts.map +1 -1
- package/dist/components/List/ListRow/Renderers/BooleanDotRenderer/BooleanDotRenderer.d.ts +0 -1
- package/dist/components/List/ListRow/Renderers/BooleanDotRenderer/BooleanDotRenderer.d.ts.map +1 -1
- package/dist/components/List/ListRow/Renderers/DateRenderer/DateRenderer.d.ts.map +1 -1
- package/dist/components/List/ListRow/Renderers/ExternalLinkRenderer/ExternalLinkRenderer.d.ts.map +1 -1
- package/dist/components/List/ListRow/Renderers/StateRenderer/StateRenderer.d.ts +1 -1
- package/dist/components/List/ListRow/Renderers/StateRenderer/StateRenderer.d.ts.map +1 -1
- package/dist/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.d.ts +0 -1
- package/dist/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.d.ts.map +1 -1
- package/dist/components/List/ListRow/Renderers/TimestampRenderer/TimestampRenderer.d.ts.map +1 -1
- package/dist/components/List/ListRowRenderer/ListRowRenderer.d.ts.map +1 -1
- package/dist/components/List/helpers.d.ts.map +1 -1
- package/dist/components/List/useColumnsSize.d.ts +0 -2
- package/dist/components/List/useColumnsSize.d.ts.map +1 -1
- package/dist/components/Loaders/skeletons.d.ts +0 -1
- package/dist/components/Loaders/skeletons.d.ts.map +1 -1
- package/dist/components/Modal/useModal.d.ts.map +1 -1
- package/dist/components/PageHeader/PageHeaderActionsGroup/PageHeaderActionsGroupsContext.d.ts +0 -1
- package/dist/components/PageHeader/PageHeaderActionsGroup/PageHeaderActionsGroupsContext.d.ts.map +1 -1
- package/dist/components/PageHeader/helpers/useElementWidthObserver.d.ts +1 -2
- package/dist/components/PageHeader/helpers/useElementWidthObserver.d.ts.map +1 -1
- package/dist/components/Tabs/TabList/ScrollContainer/useScroll.d.ts.map +1 -1
- package/dist/components/Utils/Postgraphile/FilterTransformer.d.ts.map +1 -1
- package/dist/components/Utils/Postgraphile/SortTransformer.d.ts.map +1 -1
- package/dist/components/Utils/State/GlobalState.d.ts.map +1 -1
- package/dist/helpers/idleCallbackHelpers.d.ts +0 -1
- package/dist/helpers/idleCallbackHelpers.d.ts.map +1 -1
- package/dist/helpers/storybook.d.ts.map +1 -1
- package/dist/helpers/testing.d.ts +6 -21
- package/dist/helpers/testing.d.ts.map +1 -1
- package/dist/helpers/utils.d.ts +1 -2
- package/dist/helpers/utils.d.ts.map +1 -1
- package/dist/hooks/useDEBUGDetectChanges/useDEBUGDetectChanges.d.ts.map +1 -1
- package/dist/hooks/useDEBUGRenderCount/useDEBUGRenderCount.d.ts.map +1 -1
- package/dist/hooks/useDebounce/useDebounce.d.ts +1 -2
- package/dist/hooks/useDebounce/useDebounce.d.ts.map +1 -1
- package/dist/hooks/useExpand/useExpand.d.ts.map +1 -1
- package/dist/hooks/useReactRouterPause/utils.d.ts.map +1 -1
- package/dist/hooks/useResize/useResize.d.ts +0 -1
- package/dist/hooks/useResize/useResize.d.ts.map +1 -1
- package/dist/hooks/useTabTitle/useTabTitle.d.ts.map +1 -1
- package/dist/hooks/useValueOrOnDemand/useValueOrOnDemand.d.ts +1 -1
- package/dist/hooks/useValueOrOnDemand/useValueOrOnDemand.d.ts.map +1 -1
- package/dist/index.es.js +4 -4
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/utils/ErrorMapper/ErrorMapper.d.ts.map +1 -1
- package/dist/utils/ErrorTypeToStationError.d.ts.map +1 -1
- package/dist/utils/ToolTipHelpers.d.ts.map +1 -1
- package/dist/validators/timestamp/timestamp.d.ts.map +1 -1
- package/package.json +11 -10
- package/src/components/Accordion/Accordion.spec.tsx +1 -1
- package/src/components/Accordion/AccordionItem/AccordionItem.spec.tsx +2 -2
- package/src/components/Actions/Action/Action.spec.tsx +189 -228
- package/src/components/Actions/Actions.spec.tsx +42 -32
- package/src/components/Buttons/Button/Button.spec.tsx +110 -115
- package/src/components/Buttons/Button/Button.tsx +4 -0
- package/src/components/Buttons/Button.model.ts +2 -0
- package/src/components/Buttons/CompositeButton/CompositeButton.spec.tsx +122 -121
- package/src/components/Buttons/TextButton/TextButton.spec.tsx +85 -90
- package/src/components/ConfirmDialog/ConfirmDialog.spec.tsx +75 -79
- package/src/components/DateTime/DatePicker/DatePicker.spec.tsx +8 -7
- package/src/components/DateTime/DateTimePicker.spec.tsx +43 -62
- package/src/components/DateTime/TimePicker/ScrollColumn/ScrollColumn.spec.tsx +19 -16
- package/src/components/DateTime/TimePicker/TimePicker.spec.tsx +44 -73
- package/src/components/DynamicDataList/DynamicDataList.spec.tsx +112 -107
- package/src/components/DynamicDataList/DynamicListDataEntry/DynamicListDataEntry.spec.tsx +91 -144
- package/src/components/DynamicDataList/DynamicListDataEntry/DynamicListDataEntry.tsx +38 -20
- package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/createInputRenderer/createInputRenderer.spec.tsx +18 -15
- package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/createInputRenderer/createInputRenderer.tsx +2 -0
- package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/createSelectRenderer/createSelectRenderer.spec.tsx +53 -28
- package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/createSelectRenderer/createSelectRenderer.tsx +2 -0
- package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/renderers.model.ts +2 -0
- package/src/components/DynamicDataList/DynamicListHeader/DynamicListHeader.scss +19 -5
- package/src/components/DynamicDataList/DynamicListHeader/DynamicListHeader.spec.tsx +72 -76
- package/src/components/DynamicDataList/DynamicListRow/DynamicListRow.scss +9 -2
- package/src/components/DynamicDataList/DynamicListRow/DynamicListRow.spec.tsx +86 -113
- package/src/components/DynamicDataList/helpers/DynamicListReducer/DynamicListReducer.actions.spec.ts +1 -0
- package/src/components/DynamicDataList/helpers/DynamicListReducer/DynamicListReducer.init.spec.ts +1 -0
- package/src/components/DynamicDataList/helpers/DynamicListReducer/DynamicListReducer.spec.ts +6 -5
- package/src/components/EmptyStation/EmptyStation.spec.tsx +41 -37
- package/src/components/Explorer/BulkEdit/FormFieldsConfigConverter.spec.tsx +29 -28
- package/src/components/Explorer/BulkEdit/FormFieldsConfigConverter.tsx +1 -0
- package/src/components/Explorer/BulkEdit/GenerateMutation.spec.tsx +1 -0
- package/src/components/Explorer/BulkEdit/helpers/FieldWrapper.scss +1 -0
- package/src/components/Explorer/BulkEdit/helpers/FieldWrapper.tsx +1 -0
- package/src/components/Explorer/Explorer.spec.tsx +513 -825
- package/src/components/Explorer/NavigationExplorer/NavigationExplorer.spec.tsx +90 -131
- package/src/components/Explorer/QuickEdit/useQuickEdit.spec.tsx +36 -56
- package/src/components/Explorer/SelectionExplorer/SelectionExplorer.spec.tsx +59 -65
- package/src/components/Explorer/helpers/InMemoryDataProvider.spec.ts +1 -0
- package/src/components/Explorer/helpers/useFilters.spec.tsx +13 -11
- package/src/components/Explorer/helpers/useStationMessage.spec.tsx +4 -3
- package/src/components/Explorer/helpers/useSubtitle.spec.tsx +1 -0
- package/src/components/FieldSelection/FieldSelection.scss +1 -1
- package/src/components/FieldSelection/FieldSelection.spec.tsx +1 -1
- package/src/components/FieldSelection/FieldSelection.tsx +6 -2
- package/src/components/Filters/Filter/Filter.spec.tsx +78 -47
- package/src/components/Filters/Filters.spec.tsx +56 -58
- package/src/components/Filters/SelectionTypes/DateTimeFilter/DateTimeFilter.spec.tsx +45 -46
- package/src/components/Filters/SelectionTypes/FreeTextFilter/FreeTextFilter.spec.tsx +23 -23
- package/src/components/Filters/SelectionTypes/NumericTextFilter/NumericTextFilter.spec.tsx +37 -28
- package/src/components/Filters/SelectionTypes/OptionsFilter/OptionsFilter.spec.tsx +14 -12
- package/src/components/Filters/Validators/DateRangeFilterValidator.spec.ts +1 -0
- package/src/components/Filters/Validators/NumberRangeFilterValidator.spec.ts +1 -0
- package/src/components/FormElements/BooleanView/BooleanViewField.spec.tsx +34 -31
- package/src/components/FormElements/Checkbox/Checkbox.spec.tsx +129 -128
- package/src/components/FormElements/CustomTags/CustomTags.spec.tsx +312 -446
- package/src/components/FormElements/DateTimeField/DateTimeText.spec.tsx +61 -52
- package/src/components/FormElements/DynamicDataListControl/DynamicDataListControl.spec.tsx +19 -24
- package/src/components/FormElements/FileUploadControl/FileUploadControl.spec.tsx +67 -60
- package/src/components/FormElements/FormElementContainer/FormElementContainer.spec.tsx +13 -12
- package/src/components/FormElements/FormGroup/FormGroup.scss +62 -0
- package/src/components/FormElements/FormGroup/FormGroup.stories.tsx +25 -0
- package/src/components/FormElements/FormGroup/FormGroup.tsx +60 -0
- package/src/components/FormElements/FormGroupTitle/FormGroupTitle.tsx +5 -0
- package/src/components/FormElements/Link/LinkField.spec.tsx +24 -23
- package/src/components/FormElements/MaskedSingleLineText/MaskedSingleLineText.spec.tsx +4 -3
- package/src/components/FormElements/Radio/Radio.spec.tsx +170 -172
- package/src/components/FormElements/ReadOnly/ReadOnlyField.spec.tsx +23 -22
- package/src/components/FormElements/ReadOnlyText/ReadOnlyTextField.spec.tsx +23 -22
- package/src/components/FormElements/Select/Select.spec.tsx +30 -29
- package/src/components/FormElements/SingleLineText/SingleLineText.spec.tsx +46 -42
- package/src/components/FormElements/Tags/Tags.spec.tsx +59 -53
- package/src/components/FormElements/TextArea/TextArea.spec.tsx +44 -29
- package/src/components/FormElements/ToggleButton/ToggleButton.spec.tsx +188 -165
- package/src/components/FormElements/index.ts +1 -0
- package/src/components/FormStation/FormStation.spec.tsx +273 -198
- package/src/components/FormStation/FormStation.stories.tsx +15 -13
- package/src/components/FormStation/FormStationHeader/FormStationHeader.tsx +5 -3
- package/src/components/FormStation/SaveOnNavigate/SaveOnNavigate.spec.tsx +23 -20
- package/src/components/FormStation/SaveOnNavigate/handleNavigationAttempt.spec.ts +25 -24
- package/src/components/FormStation/helpers/useTitle.spec.ts +9 -7
- package/src/components/Hub/Hub.spec.tsx +13 -10
- package/src/components/Hub/Tile/Tile.spec.tsx +29 -25
- package/src/components/Icons/Icons.spec.tsx +25 -27
- package/src/components/Icons/Icons.tsx +1 -1
- package/src/components/InfoPanel/InfoImage/InfoImage.spec.tsx +4 -3
- package/src/components/InfoPanel/InfoPanel.scss +2 -0
- package/src/components/InfoPanel/InfoPanel.spec.tsx +4 -3
- package/src/components/InfoPanel/Paragraph/Paragraph.spec.tsx +4 -3
- package/src/components/InfoPanel/Section/Section.spec.tsx +39 -46
- package/src/components/InfoPanel/hooks/useCollapse.ts +9 -7
- package/src/components/InlineMenu/InlineMenu.spec.tsx +24 -23
- package/src/components/InlineMenu/InlineMenu.tsx +3 -0
- package/src/components/LandingPageHeader/LandingPageHeader.spec.tsx +9 -8
- package/src/components/LandingPageTiles/LandingPageTiles.spec.tsx +29 -28
- package/src/components/LandingPageTiles/TileLarge/TileLarge.spec.tsx +68 -61
- package/src/components/LandingPageTiles/TileSmall/TileSmall.spec.tsx +50 -32
- package/src/components/List/List.spec.tsx +337 -241
- package/src/components/List/ListCheckBox/ListCheckBox.spec.tsx +54 -48
- package/src/components/List/ListHeader/ColumnLabel/ColumnLabel.scss +4 -1
- package/src/components/List/ListHeader/ColumnLabel/ColumnLabel.spec.tsx +46 -43
- package/src/components/List/ListHeader/ListHeader.spec.tsx +82 -66
- package/src/components/List/ListRow/ListRow.spec.tsx +125 -130
- package/src/components/List/ListRow/ListRowCell/ListRowCell.spec.tsx +57 -100
- package/src/components/List/ListRow/ListRowLoader.spec.tsx +16 -12
- package/src/components/List/ListRow/Renderers/BooleanDotRenderer/BooleanDotRenderer.spec.tsx +12 -9
- package/src/components/List/ListRow/Renderers/ExternalLinkRenderer/ExternalLinkRenderer.spec.tsx +40 -35
- package/src/components/List/ListRow/Renderers/StateRenderer/StateRenderer.spec.tsx +14 -17
- package/src/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.spec.tsx +18 -17
- package/src/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.tsx +2 -2
- package/src/components/List/ListRowRenderer/ListRowRenderer.spec.tsx +82 -68
- package/src/components/Loaders/ImageLoader/ImageLoader.spec.tsx +88 -96
- package/src/components/Loaders/Loader/Loader.spec.tsx +51 -24
- package/src/components/Message/Message.spec.tsx +56 -44
- package/src/components/MessageBar/MessageBar.scss +3 -0
- package/src/components/MessageBar/MessageBar.spec.tsx +88 -85
- package/src/components/Modal/Modal.spec.tsx +92 -87
- package/src/components/NavigationAwareStation/NavigationAwareStation.spec.tsx +23 -22
- package/src/components/PageHeader/PageHeader.spec.tsx +22 -21
- package/src/components/PageHeader/PageHeaderAction/PageHeaderAction.spec.tsx +275 -193
- package/src/components/PageHeader/PageHeaderActionsGroup/PageHeaderActionsGroup.spec.tsx +39 -34
- package/src/components/ProgressBar/ProgressBar.spec.tsx +18 -15
- package/src/components/Utils/Postgraphile/CreateConnectionRenderer.spec.ts +1 -0
- package/src/components/Utils/Postgraphile/FilterTransformer.spec.ts +1 -0
- package/src/components/Utils/Postgraphile/RangeTransformer.spec.ts +1 -0
- package/src/components/Utils/Postgraphile/SortTransformer.spec.ts +1 -0
- package/src/components/Utils/Postgraphile/UpdateGQLFragmentGenerator.spec.ts +1 -0
- package/src/components/Utils/Postgraphile/generateArrayMutations.spec.ts +1 -0
- package/src/components/Utils/Postgraphile/getArrayDiff.spec.ts +1 -0
- package/src/components/Utils/Postgraphile/getFormDiff.spec.ts +1 -0
- package/src/components/Utils/State/GlobalState.spec.ts +4 -2
- package/src/components/Utils/Transformers/Boolean.spec.ts +1 -0
- package/src/components/Utils/Transformers/DateTime.spec.ts +2 -1
- package/src/components/Utils/Transformers/FileSize.spec.ts +1 -0
- package/src/components/Utils/Transformers/SortArray.spec.ts +1 -0
- package/src/components/Utils/Transformers/Timestamp.spec.ts +3 -2
- package/src/components/Utils/Transformers/TitleCase.spec.ts +1 -0
- package/src/components/VisualElements/ImgElement.spec.tsx +34 -35
- package/src/components/VisualElements/SvgElement.spec.tsx +72 -69
- package/src/helpers/testing.ts +9 -76
- package/src/hooks/useBusy/useBusy.spec.tsx +8 -9
- package/src/hooks/useClickOutside/useClickOutside.spec.tsx +19 -51
- package/src/hooks/useDebounce/useDebounce.spec.tsx +31 -26
- package/src/hooks/useExpand/useExpand.spec.tsx +30 -21
- package/src/hooks/useTabTitle/useTabTitle.spec.tsx +18 -18
- package/src/hooks/useValueOrOnDemand/useValueOrOnDemand.spec.tsx +31 -52
- package/src/styles/variables.scss +3 -1
- package/src/utils/ErrorMapper/ApolloClient/ApolloErrorMapper.spec.ts +1 -0
- package/src/utils/ErrorMapper/ErrorMapper.spec.ts +1 -0
- package/src/utils/ErrorTypeToStationError.spec.tsx +12 -11
- package/src/utils/ToolTipHelpers.spec.ts +1 -0
- package/src/validators/timestamp/timestamp.spec.ts +1 -0
- package/dist/helpers/hooksTestingHelpers.d.ts +0 -7
- package/dist/helpers/hooksTestingHelpers.d.ts.map +0 -1
- package/src/helpers/hooksTestingHelpers.tsx +0 -22
|
@@ -1,35 +1,36 @@
|
|
|
1
|
-
import {
|
|
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
|
|
8
|
+
const { container } = render(<SvgElement />);
|
|
8
9
|
|
|
9
|
-
expect(
|
|
10
|
+
expect(container).toBeTruthy();
|
|
10
11
|
});
|
|
11
12
|
|
|
12
13
|
it('renders with default viewBox', () => {
|
|
13
|
-
const
|
|
14
|
-
const svg =
|
|
14
|
+
const { container } = render(<SvgElement />);
|
|
15
|
+
const svg = container.querySelector('svg')!;
|
|
15
16
|
|
|
16
|
-
expect(svg.
|
|
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
|
|
22
|
-
const svg =
|
|
22
|
+
const { container } = render(<SvgElement viewBox={customViewBox} />);
|
|
23
|
+
const svg = container.querySelector('svg')!;
|
|
23
24
|
|
|
24
|
-
expect(svg.
|
|
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
|
|
30
|
-
const svg =
|
|
30
|
+
const { container } = render(<SvgElement className={testClass} />);
|
|
31
|
+
const svg = container.querySelector('svg')!;
|
|
31
32
|
|
|
32
|
-
expect(svg.
|
|
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
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
expect(
|
|
49
|
-
expect(
|
|
50
|
-
expect(
|
|
51
|
-
expect(
|
|
52
|
-
expect(
|
|
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
|
|
58
|
-
const svg =
|
|
57
|
+
const { container } = render(<SvgElement />);
|
|
58
|
+
const svg = container.querySelector('svg')!;
|
|
59
59
|
|
|
60
|
-
expect(svg.
|
|
61
|
-
expect(svg.
|
|
62
|
-
expect(svg.
|
|
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
|
|
68
|
-
const svg =
|
|
67
|
+
const { container } = render(<SvgElement aria-label={ariaLabel} />);
|
|
68
|
+
const svg = container.querySelector('svg')!;
|
|
69
69
|
|
|
70
|
-
expect(svg.
|
|
71
|
-
expect(svg.
|
|
72
|
-
expect(svg.
|
|
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
|
|
78
|
-
const svg =
|
|
77
|
+
const { container } = render(<SvgElement title={title} />);
|
|
78
|
+
const svg = container.querySelector('svg')!;
|
|
79
79
|
|
|
80
|
-
expect(svg.
|
|
81
|
-
expect(svg.
|
|
82
|
-
expect(
|
|
83
|
-
expect(
|
|
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
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
expect(svg.
|
|
95
|
-
expect(
|
|
96
|
-
expect(
|
|
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
|
|
102
|
+
const { container } = render(<SvgElement aria-label="Icon" />);
|
|
101
103
|
|
|
102
|
-
expect(
|
|
104
|
+
expect(container.querySelectorAll('title')).toHaveLength(0);
|
|
103
105
|
});
|
|
104
106
|
|
|
105
107
|
it('applies default SVG attributes', () => {
|
|
106
|
-
const
|
|
107
|
-
const svg =
|
|
108
|
+
const { container } = render(<SvgElement />);
|
|
109
|
+
const svg = container.querySelector('svg')!;
|
|
108
110
|
|
|
109
|
-
expect(svg.
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
expect(svg
|
|
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
|
|
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 =
|
|
138
|
+
const svg = container.querySelector('svg')!;
|
|
138
139
|
|
|
139
|
-
expect(svg.
|
|
140
|
-
expect(svg.
|
|
141
|
-
expect(svg.
|
|
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
|
|
146
|
-
|
|
146
|
+
const { container } = render(
|
|
147
|
+
<SvgElement role="button" aria-label="Click me" />,
|
|
148
|
+
);
|
|
149
|
+
const svg = container.querySelector('svg')!;
|
|
147
150
|
|
|
148
|
-
expect(svg.
|
|
151
|
+
expect(svg).toHaveAttribute('role', 'button');
|
|
149
152
|
});
|
|
150
153
|
|
|
151
154
|
it('prioritizes explicit aria-hidden over calculated value', () => {
|
|
152
|
-
const
|
|
153
|
-
const svg =
|
|
155
|
+
const { container } = render(<SvgElement aria-hidden="false" />);
|
|
156
|
+
const svg = container.querySelector('svg')!;
|
|
154
157
|
|
|
155
|
-
expect(svg.
|
|
156
|
-
expect(svg.
|
|
158
|
+
expect(svg).toHaveAttribute('aria-hidden', 'false');
|
|
159
|
+
expect(svg).toHaveAttribute('role', 'presentation'); // Still decorative without label/title
|
|
157
160
|
});
|
|
158
161
|
});
|
package/src/helpers/testing.ts
CHANGED
|
@@ -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 '
|
|
74
|
-
* and having to use `
|
|
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
|
|
78
|
-
*
|
|
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
|
|
96
|
-
return
|
|
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
|
|
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 {
|
|
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
|
-
|
|
9
|
-
on:
|
|
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
|
|
23
|
-
const currentValue =
|
|
23
|
+
const { container } = render(<TestWrapper />);
|
|
24
|
+
const currentValue = container.querySelector('#value');
|
|
24
25
|
|
|
25
26
|
expect(on).toHaveBeenCalled();
|
|
26
|
-
expect(currentValue
|
|
27
|
+
expect(currentValue?.textContent).toBe('false');
|
|
27
28
|
|
|
28
29
|
callback(true);
|
|
29
30
|
|
|
30
|
-
|
|
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 {
|
|
1
|
+
import { act, fireEvent, render } from '@testing-library/react';
|
|
2
2
|
import React, { useRef, useState } from 'react';
|
|
3
|
-
import {
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
58
|
-
|
|
59
|
-
const inside1 = wrapper.find('.inside-1');
|
|
42
|
+
const { getByText } = render(<TestWrapper />);
|
|
60
43
|
|
|
61
44
|
act(() => {
|
|
62
|
-
|
|
45
|
+
fireEvent.mouseDown(getByText('Inside 1'));
|
|
63
46
|
});
|
|
64
47
|
|
|
65
|
-
|
|
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
|
|
72
|
-
|
|
73
|
-
const inside2 = wrapper.find('.inside-2');
|
|
52
|
+
const { getByText } = render(<TestWrapper />);
|
|
74
53
|
|
|
75
54
|
act(() => {
|
|
76
|
-
|
|
55
|
+
fireEvent.mouseDown(getByText('Inside 2'));
|
|
77
56
|
});
|
|
78
57
|
|
|
79
|
-
|
|
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
|
|
86
|
-
|
|
87
|
-
const outside = wrapper.find('.outside');
|
|
62
|
+
const { getByText } = render(<TestWrapper enabled={false} />);
|
|
88
63
|
|
|
89
64
|
act(() => {
|
|
90
|
-
|
|
65
|
+
fireEvent.mouseDown(getByText('Outside'));
|
|
91
66
|
});
|
|
92
67
|
|
|
93
|
-
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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 {
|
|
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
|
|
31
|
+
const { container } = render(<TestWrapper value={mockIntialValue} />);
|
|
31
32
|
|
|
32
|
-
const currentValue =
|
|
33
|
-
const debounced =
|
|
33
|
+
const currentValue = container.querySelector('#value');
|
|
34
|
+
const debounced = container.querySelector('#debounced-value');
|
|
34
35
|
|
|
35
|
-
expect(currentValue
|
|
36
|
-
expect(debounced
|
|
36
|
+
expect(currentValue?.textContent).toBe(mockIntialValue);
|
|
37
|
+
expect(debounced?.textContent).toBe(mockIntialValue);
|
|
37
38
|
});
|
|
38
39
|
|
|
39
|
-
it(`'setVal()' updates both 'val' and 'debouncedValue'`,
|
|
40
|
+
it(`'setVal()' updates both 'val' and 'debouncedValue'`, () => {
|
|
40
41
|
const mockNewValue = 'test-new-value';
|
|
41
42
|
|
|
42
|
-
|
|
43
|
+
vi.useFakeTimers();
|
|
43
44
|
|
|
44
|
-
const
|
|
45
|
+
const { container } = render(<TestWrapper value={mockIntialValue} />);
|
|
45
46
|
|
|
46
|
-
let currentValue =
|
|
47
|
-
let debounced =
|
|
47
|
+
let currentValue = container.querySelector('#value');
|
|
48
|
+
let debounced = container.querySelector('#debounced-value');
|
|
48
49
|
|
|
49
|
-
expect(currentValue
|
|
50
|
-
expect(debounced
|
|
50
|
+
expect(currentValue?.textContent).toBe(mockIntialValue);
|
|
51
|
+
expect(debounced?.textContent).toBe(mockIntialValue);
|
|
51
52
|
|
|
52
|
-
const input =
|
|
53
|
+
const input = container.querySelector('input') as HTMLInputElement;
|
|
53
54
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
await input.simulate('change', {
|
|
55
|
+
act(() => {
|
|
56
|
+
fireEvent.change(input, {
|
|
57
57
|
target: { value: mockNewValue },
|
|
58
58
|
});
|
|
59
59
|
});
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
// Check that val is updated immediately
|
|
62
|
+
currentValue = container.querySelector('#value');
|
|
63
|
+
expect(currentValue?.textContent).toBe(mockNewValue);
|
|
62
64
|
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
69
|
+
// Fast-forward time to trigger debounce
|
|
70
|
+
act(() => {
|
|
71
|
+
vi.runAllTimers();
|
|
72
|
+
});
|
|
68
73
|
|
|
69
|
-
|
|
70
|
-
debounced =
|
|
74
|
+
// Now check that debounced value has updated
|
|
75
|
+
debounced = container.querySelector('#debounced-value');
|
|
76
|
+
expect(debounced?.textContent).toBe(mockNewValue);
|
|
71
77
|
|
|
72
|
-
|
|
73
|
-
expect(debounced.text()).toBe(mockNewValue);
|
|
78
|
+
vi.useRealTimers();
|
|
74
79
|
});
|
|
75
80
|
});
|