@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
package/src/components/List/ListRow/Renderers/ExternalLinkRenderer/ExternalLinkRenderer.spec.tsx
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { render } from '@testing-library/react';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
4
4
|
import {
|
|
5
|
-
createExternalLinkRenderer,
|
|
6
5
|
ExternalLinkResolver,
|
|
6
|
+
createExternalLinkRenderer,
|
|
7
7
|
} from './ExternalLinkRenderer';
|
|
8
8
|
|
|
9
9
|
interface TestData {
|
|
@@ -43,86 +43,91 @@ const RendererWrapper: React.FC<RendererWrapperProps> = ({
|
|
|
43
43
|
|
|
44
44
|
describe('createExternalLinkRenderer', () => {
|
|
45
45
|
it('renders the component without crashing', () => {
|
|
46
|
-
const
|
|
47
|
-
expect(
|
|
46
|
+
const { container } = render(<RendererWrapper {...defaultProps} />);
|
|
47
|
+
expect(container).toBeTruthy();
|
|
48
48
|
});
|
|
49
49
|
|
|
50
50
|
it('generates hyperlink', () => {
|
|
51
51
|
const mockResolver: ExternalLinkResolver<TestData> = (rowData) =>
|
|
52
52
|
`/details/${rowData.id}`;
|
|
53
53
|
|
|
54
|
-
const
|
|
54
|
+
const { container } = render(
|
|
55
55
|
<RendererWrapper {...defaultProps} resolver={mockResolver} />,
|
|
56
56
|
);
|
|
57
57
|
|
|
58
|
-
const link =
|
|
58
|
+
const link = container.querySelector('a') as HTMLAnchorElement;
|
|
59
59
|
|
|
60
|
-
expect(link.
|
|
61
|
-
expect(link.
|
|
62
|
-
expect(link.
|
|
60
|
+
expect(link.href).toContain(`/details/${data.id}`);
|
|
61
|
+
expect(link.target).toBe('_blank');
|
|
62
|
+
expect(link.rel).toBe('noopener noreferrer');
|
|
63
63
|
});
|
|
64
64
|
|
|
65
65
|
it('generates no hyperlink if url is falsy', () => {
|
|
66
66
|
const mockResolver: ExternalLinkResolver<TestData> = (_rowData) =>
|
|
67
67
|
undefined;
|
|
68
68
|
|
|
69
|
-
const
|
|
69
|
+
const { container } = render(
|
|
70
70
|
<RendererWrapper {...defaultProps} resolver={mockResolver} />,
|
|
71
71
|
);
|
|
72
72
|
|
|
73
|
-
const link =
|
|
74
|
-
const paragraph =
|
|
73
|
+
const link = container.querySelector('a');
|
|
74
|
+
const paragraph = container.querySelector('p');
|
|
75
75
|
|
|
76
|
-
expect(link
|
|
77
|
-
expect(paragraph
|
|
78
|
-
expect(paragraph
|
|
76
|
+
expect(link).not.toBeInTheDocument();
|
|
77
|
+
expect(paragraph).toBeInTheDocument();
|
|
78
|
+
expect(paragraph?.title).toBe('test-title');
|
|
79
79
|
});
|
|
80
80
|
|
|
81
81
|
it('renders column value and title attribute', () => {
|
|
82
82
|
const mockValue = 'test';
|
|
83
83
|
|
|
84
|
-
const
|
|
84
|
+
const { container } = render(
|
|
85
85
|
<RendererWrapper {...defaultProps} value={mockValue} />,
|
|
86
86
|
);
|
|
87
87
|
|
|
88
|
-
const value =
|
|
88
|
+
const value = container.querySelector('p');
|
|
89
89
|
|
|
90
|
-
expect(value
|
|
91
|
-
expect(value
|
|
90
|
+
expect(value?.textContent).toBe(mockValue);
|
|
91
|
+
expect(value?.title).toBe(mockValue);
|
|
92
92
|
});
|
|
93
93
|
|
|
94
94
|
it('disables row click event when link is clicked', () => {
|
|
95
|
-
const spy =
|
|
96
|
-
|
|
95
|
+
const spy = vi.fn();
|
|
96
|
+
|
|
97
|
+
const { container } = render(<RendererWrapper {...defaultProps} />);
|
|
97
98
|
|
|
98
|
-
const
|
|
99
|
+
const link = container.querySelector('a') as HTMLAnchorElement;
|
|
99
100
|
|
|
100
|
-
const
|
|
101
|
+
const event = new MouseEvent('click', { bubbles: true });
|
|
102
|
+
Object.defineProperty(event, 'stopPropagation', {
|
|
103
|
+
value: spy,
|
|
104
|
+
writable: true,
|
|
105
|
+
});
|
|
101
106
|
|
|
102
|
-
link.
|
|
107
|
+
link.dispatchEvent(event);
|
|
103
108
|
|
|
104
109
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
105
110
|
});
|
|
106
111
|
|
|
107
112
|
it(`renders 'Icon' by default`, () => {
|
|
108
|
-
const
|
|
113
|
+
const { container } = render(<RendererWrapper {...defaultProps} />);
|
|
109
114
|
|
|
110
|
-
const
|
|
111
|
-
const
|
|
115
|
+
const containerDiv = container.querySelector('.container');
|
|
116
|
+
const icon = container.querySelector('.icons');
|
|
112
117
|
|
|
113
|
-
expect(
|
|
114
|
-
expect(
|
|
118
|
+
expect(containerDiv?.classList.contains('noIcon')).toBe(false);
|
|
119
|
+
expect(icon).toBeInTheDocument();
|
|
115
120
|
});
|
|
116
121
|
|
|
117
122
|
it(`does not render 'Icon' if 'showNewTabIcon' is set to false`, () => {
|
|
118
|
-
const
|
|
123
|
+
const { container } = render(
|
|
119
124
|
<RendererWrapper {...defaultProps} showNewTabIcon={false} />,
|
|
120
125
|
);
|
|
121
126
|
|
|
122
|
-
const
|
|
123
|
-
const
|
|
127
|
+
const containerDiv = container.querySelector('.container');
|
|
128
|
+
const icon = container.querySelector('.icons');
|
|
124
129
|
|
|
125
|
-
expect(
|
|
126
|
-
expect(
|
|
130
|
+
expect(containerDiv?.classList.contains('noIcon')).toBe(true);
|
|
131
|
+
expect(icon).not.toBeInTheDocument();
|
|
127
132
|
});
|
|
128
133
|
});
|
|
@@ -1,5 +1,6 @@
|
|
|
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 { Data } from '../../../../../types/data';
|
|
4
5
|
import { ColumnMap } from '../../../List.model';
|
|
5
6
|
import { createStateRenderer } from './StateRenderer';
|
|
@@ -34,37 +35,33 @@ const RendererWrapper: React.FC<RendererWrapperProps> = ({
|
|
|
34
35
|
|
|
35
36
|
describe('StateRenderer', () => {
|
|
36
37
|
it('renders the component without crashing', () => {
|
|
37
|
-
const
|
|
38
|
-
expect(
|
|
38
|
+
const { container } = render(<RendererWrapper {...defaultProps} />);
|
|
39
|
+
expect(container).toBeTruthy();
|
|
39
40
|
});
|
|
40
41
|
|
|
41
42
|
it('renders a background color', () => {
|
|
42
|
-
const
|
|
43
|
-
const mockState =
|
|
44
|
-
stateValues[Math.floor(Math.random() * stateValues.length)];
|
|
43
|
+
const mockState = 'success';
|
|
45
44
|
|
|
46
|
-
const
|
|
45
|
+
const { container } = render(
|
|
47
46
|
<RendererWrapper {...defaultProps} value={mockState} />,
|
|
48
47
|
);
|
|
49
48
|
|
|
50
|
-
const
|
|
51
|
-
.find('.container')
|
|
52
|
-
.prop('style') as React.CSSProperties;
|
|
49
|
+
const containerDiv = container.querySelector('.container') as HTMLElement;
|
|
53
50
|
|
|
54
|
-
|
|
51
|
+
// Check that background color is set (browsers normalize color values)
|
|
52
|
+
expect(containerDiv.style.backgroundColor).toBeTruthy();
|
|
53
|
+
expect(containerDiv.style.backgroundColor).not.toBe('');
|
|
55
54
|
});
|
|
56
55
|
|
|
57
56
|
it('does not render a background color if mapping fails', () => {
|
|
58
57
|
const mockState = 'pending';
|
|
59
|
-
const
|
|
58
|
+
const { container } = render(
|
|
60
59
|
<RendererWrapper {...defaultProps} value={mockState} />,
|
|
61
60
|
);
|
|
62
|
-
expect(
|
|
61
|
+
expect(container).toBeTruthy();
|
|
63
62
|
|
|
64
|
-
const
|
|
65
|
-
.find('.container')
|
|
66
|
-
.prop('style') as React.CSSProperties;
|
|
63
|
+
const containerDiv = container.querySelector('.container') as HTMLElement;
|
|
67
64
|
|
|
68
|
-
expect(
|
|
65
|
+
expect(containerDiv.style.backgroundColor).toBe('');
|
|
69
66
|
});
|
|
70
67
|
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import '@testing-library/jest-dom';
|
|
2
1
|
import { act, render, screen, waitFor } from '@testing-library/react';
|
|
3
2
|
import React from 'react';
|
|
3
|
+
import type { Mock, MockInstance } from 'vitest';
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
4
5
|
import * as idleCallbackHelpers from '../../../../../helpers/idleCallbackHelpers';
|
|
5
6
|
import { noop } from '../../../../../helpers/utils';
|
|
6
7
|
import { TagsRenderer } from './TagsRenderer';
|
|
@@ -16,7 +17,7 @@ const TagsRendererWrapper: React.FC<TagsRendererWrapperProps> = ({ value }) => {
|
|
|
16
17
|
|
|
17
18
|
// Helper to trigger ResizeObserver callback
|
|
18
19
|
const triggerResizeObserver = (): void => {
|
|
19
|
-
const resizeObserverCallback = (global.ResizeObserver as
|
|
20
|
+
const resizeObserverCallback = (global.ResizeObserver as Mock).mock
|
|
20
21
|
.calls[0]?.[0];
|
|
21
22
|
if (resizeObserverCallback) {
|
|
22
23
|
act(() => {
|
|
@@ -27,27 +28,27 @@ const triggerResizeObserver = (): void => {
|
|
|
27
28
|
|
|
28
29
|
describe('TagsRenderer', () => {
|
|
29
30
|
let mockResizeObserver: {
|
|
30
|
-
observe:
|
|
31
|
-
unobserve:
|
|
32
|
-
disconnect:
|
|
31
|
+
observe: Mock;
|
|
32
|
+
unobserve: Mock;
|
|
33
|
+
disconnect: Mock;
|
|
33
34
|
};
|
|
34
|
-
let mockScheduleIdleCallback:
|
|
35
|
-
let mockCancelScheduledCallback:
|
|
35
|
+
let mockScheduleIdleCallback: MockInstance;
|
|
36
|
+
let mockCancelScheduledCallback: MockInstance;
|
|
36
37
|
|
|
37
38
|
beforeEach(() => {
|
|
38
39
|
// Setup ResizeObserver mock
|
|
39
40
|
mockResizeObserver = {
|
|
40
|
-
observe:
|
|
41
|
-
unobserve:
|
|
42
|
-
disconnect:
|
|
41
|
+
observe: vi.fn(),
|
|
42
|
+
unobserve: vi.fn(),
|
|
43
|
+
disconnect: vi.fn(),
|
|
43
44
|
};
|
|
44
45
|
|
|
45
|
-
global.ResizeObserver =
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
global.ResizeObserver = vi.fn().mockImplementation(function () {
|
|
47
|
+
return mockResizeObserver;
|
|
48
|
+
}) as unknown as typeof ResizeObserver;
|
|
48
49
|
|
|
49
50
|
// Setup scheduleIdleCallback mock
|
|
50
|
-
mockScheduleIdleCallback =
|
|
51
|
+
mockScheduleIdleCallback = vi
|
|
51
52
|
.spyOn(idleCallbackHelpers, 'scheduleIdleCallback')
|
|
52
53
|
.mockImplementation((callback) => {
|
|
53
54
|
callback({
|
|
@@ -58,12 +59,12 @@ describe('TagsRenderer', () => {
|
|
|
58
59
|
});
|
|
59
60
|
|
|
60
61
|
// Setup cancelScheduledCallback mock
|
|
61
|
-
mockCancelScheduledCallback =
|
|
62
|
+
mockCancelScheduledCallback = vi
|
|
62
63
|
.spyOn(idleCallbackHelpers, 'cancelScheduledCallback')
|
|
63
64
|
.mockImplementation(noop);
|
|
64
65
|
|
|
65
66
|
// Mock window.getComputedStyle for font size calculations
|
|
66
|
-
window.getComputedStyle =
|
|
67
|
+
window.getComputedStyle = vi.fn().mockReturnValue({
|
|
67
68
|
fontSize: '14px',
|
|
68
69
|
});
|
|
69
70
|
|
|
@@ -76,7 +77,7 @@ describe('TagsRenderer', () => {
|
|
|
76
77
|
});
|
|
77
78
|
|
|
78
79
|
afterEach(() => {
|
|
79
|
-
// Don't use
|
|
80
|
+
// Don't use vi.clearAllMocks() as it removes mock implementations
|
|
80
81
|
// Instead, manually clear just the mock call history
|
|
81
82
|
mockResizeObserver.observe.mockClear();
|
|
82
83
|
mockResizeObserver.unobserve.mockClear();
|
|
@@ -164,7 +164,7 @@ export const TagsRenderer = (val: unknown): JSX.Element => {
|
|
|
164
164
|
<div
|
|
165
165
|
ref={containerRef}
|
|
166
166
|
className={classes.container}
|
|
167
|
-
data-
|
|
167
|
+
data-test-id="tags-container"
|
|
168
168
|
title={stringArray.join(', ')}
|
|
169
169
|
/>
|
|
170
170
|
);
|
|
@@ -180,7 +180,7 @@ export const TagsRenderer = (val: unknown): JSX.Element => {
|
|
|
180
180
|
<div
|
|
181
181
|
ref={containerRef}
|
|
182
182
|
className={classes.container}
|
|
183
|
-
data-
|
|
183
|
+
data-test-id="tags-container"
|
|
184
184
|
title={stringArray.join(', ')}
|
|
185
185
|
>
|
|
186
186
|
{visibleItems.map((item, index) => (
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { render } from '@testing-library/react';
|
|
2
2
|
import React from 'react';
|
|
3
|
+
import type { Mock } from 'vitest';
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
5
|
import { Column } from '../List.model';
|
|
4
|
-
import { ListRow } from '../ListRow/ListRow';
|
|
5
6
|
import { ListRowRenderer } from './ListRowRenderer';
|
|
6
7
|
|
|
7
8
|
interface TestData {
|
|
@@ -51,59 +52,63 @@ const mockListRowProps = {
|
|
|
51
52
|
showActionButton: false,
|
|
52
53
|
showCheckMark: false,
|
|
53
54
|
showItemCheckbox: false,
|
|
54
|
-
onItemClicked:
|
|
55
|
-
onTriggered:
|
|
56
|
-
onItemSelected:
|
|
55
|
+
onItemClicked: vi.fn(),
|
|
56
|
+
onTriggered: vi.fn(),
|
|
57
|
+
onItemSelected: vi.fn(),
|
|
57
58
|
};
|
|
58
59
|
|
|
59
60
|
describe('ListRowRenderer', () => {
|
|
60
|
-
const
|
|
61
|
+
const renderRowRenderer = (overrideProps = {}) => {
|
|
61
62
|
const defaultProps = {
|
|
62
63
|
listRowProps: mockListRowProps,
|
|
63
64
|
...overrideProps,
|
|
64
65
|
};
|
|
65
66
|
|
|
66
|
-
return
|
|
67
|
+
return render(<ListRowRenderer {...defaultProps} />);
|
|
67
68
|
};
|
|
68
69
|
|
|
69
70
|
afterEach(() => {
|
|
70
|
-
|
|
71
|
+
vi.clearAllMocks();
|
|
71
72
|
});
|
|
72
73
|
|
|
73
74
|
describe('default behavior', () => {
|
|
74
75
|
it('should render default ListRow when no custom renderer provided', () => {
|
|
75
|
-
const
|
|
76
|
+
const { container } = renderRowRenderer();
|
|
76
77
|
|
|
77
|
-
|
|
78
|
-
expect(
|
|
78
|
+
const listRow = container.querySelector('[data-test-id="list-entry"]');
|
|
79
|
+
expect(listRow).toBeInTheDocument();
|
|
79
80
|
});
|
|
80
81
|
|
|
81
82
|
it('should pass all props to default ListRow', () => {
|
|
82
|
-
const
|
|
83
|
-
const listRowProps = wrapper.find(ListRow).props();
|
|
83
|
+
const { container } = renderRowRenderer();
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
const listRow = container.querySelector('[data-test-id="list-entry"]');
|
|
86
|
+
expect(listRow).toBeInTheDocument();
|
|
86
87
|
});
|
|
87
88
|
});
|
|
88
89
|
|
|
89
90
|
describe('custom row renderer', () => {
|
|
90
91
|
it('should use custom renderer when provided', () => {
|
|
91
|
-
const customRenderer =
|
|
92
|
+
const customRenderer = vi.fn(() => (
|
|
92
93
|
<div data-test-id="custom-row">Custom Content</div>
|
|
93
94
|
));
|
|
94
95
|
|
|
95
|
-
const
|
|
96
|
+
const { container } = renderRowRenderer({
|
|
96
97
|
customRowRenderer: customRenderer,
|
|
97
98
|
});
|
|
98
99
|
|
|
99
100
|
expect(customRenderer).toHaveBeenCalledTimes(1);
|
|
100
|
-
expect(
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
expect(
|
|
102
|
+
container.querySelector('[data-test-id="custom-row"]'),
|
|
103
|
+
).toBeInTheDocument();
|
|
104
|
+
expect(
|
|
105
|
+
container.querySelector('[data-test-id="list-entry"]'),
|
|
106
|
+
).not.toBeInTheDocument();
|
|
107
|
+
expect(container.textContent).toContain('Custom Content');
|
|
103
108
|
});
|
|
104
109
|
|
|
105
110
|
it('should pass complete ListRowProps to custom renderer', () => {
|
|
106
|
-
const customRenderer =
|
|
111
|
+
const customRenderer = vi.fn(() => (
|
|
107
112
|
<div data-test-id="custom-row">Custom</div>
|
|
108
113
|
));
|
|
109
114
|
|
|
@@ -113,7 +118,7 @@ describe('ListRowRenderer', () => {
|
|
|
113
118
|
isRowDisabled: true,
|
|
114
119
|
};
|
|
115
120
|
|
|
116
|
-
|
|
121
|
+
renderRowRenderer({
|
|
117
122
|
customRowRenderer: customRenderer,
|
|
118
123
|
listRowProps: customListRowProps,
|
|
119
124
|
});
|
|
@@ -122,65 +127,70 @@ describe('ListRowRenderer', () => {
|
|
|
122
127
|
});
|
|
123
128
|
|
|
124
129
|
it('should fallback to default ListRow when custom renderer returns null', () => {
|
|
125
|
-
const customRenderer =
|
|
130
|
+
const customRenderer = vi.fn(() => null);
|
|
126
131
|
|
|
127
|
-
const
|
|
132
|
+
const { container } = renderRowRenderer({
|
|
128
133
|
customRowRenderer: customRenderer,
|
|
129
134
|
});
|
|
130
135
|
|
|
131
136
|
expect(customRenderer).toHaveBeenCalledTimes(1);
|
|
132
|
-
expect(
|
|
133
|
-
|
|
137
|
+
expect(
|
|
138
|
+
container.querySelector('[data-test-id="list-entry"]'),
|
|
139
|
+
).toBeInTheDocument();
|
|
140
|
+
expect(
|
|
141
|
+
container.querySelector('[data-test-id="custom-row"]'),
|
|
142
|
+
).not.toBeInTheDocument();
|
|
134
143
|
});
|
|
135
144
|
|
|
136
145
|
it('should fallback to default ListRow when custom renderer returns undefined', () => {
|
|
137
|
-
const customRenderer =
|
|
146
|
+
const customRenderer = vi.fn(() => undefined as any);
|
|
138
147
|
|
|
139
|
-
const
|
|
148
|
+
const { container } = renderRowRenderer({
|
|
140
149
|
customRowRenderer: customRenderer,
|
|
141
150
|
});
|
|
142
151
|
|
|
143
152
|
expect(customRenderer).toHaveBeenCalledTimes(1);
|
|
144
|
-
expect(
|
|
153
|
+
expect(
|
|
154
|
+
container.querySelector('[data-test-id="list-entry"]'),
|
|
155
|
+
).toBeInTheDocument();
|
|
145
156
|
});
|
|
146
157
|
});
|
|
147
158
|
|
|
148
159
|
describe('pagination trigger', () => {
|
|
149
160
|
const windowIntersectionObserver = window.IntersectionObserver;
|
|
150
|
-
const observe =
|
|
151
|
-
const disconnect =
|
|
161
|
+
const observe = vi.fn();
|
|
162
|
+
const disconnect = vi.fn();
|
|
152
163
|
|
|
153
164
|
beforeEach(() => {
|
|
154
|
-
window.IntersectionObserver =
|
|
155
|
-
observe,
|
|
156
|
-
|
|
157
|
-
}));
|
|
165
|
+
window.IntersectionObserver = vi.fn().mockImplementation(function () {
|
|
166
|
+
return { observe, disconnect };
|
|
167
|
+
}) as unknown as typeof IntersectionObserver;
|
|
158
168
|
});
|
|
159
169
|
|
|
160
170
|
afterEach(() => {
|
|
161
171
|
window.IntersectionObserver = windowIntersectionObserver;
|
|
162
|
-
|
|
172
|
+
vi.clearAllMocks();
|
|
163
173
|
});
|
|
164
174
|
|
|
165
175
|
describe('default ListRow renderer', () => {
|
|
166
176
|
it('creates the IntersectionObserver when isTrigger===true', () => {
|
|
167
|
-
const onTriggeredSpy =
|
|
177
|
+
const onTriggeredSpy = vi.fn();
|
|
168
178
|
|
|
169
|
-
const
|
|
179
|
+
const { container } = renderRowRenderer({
|
|
170
180
|
listRowProps: mockListRowProps,
|
|
171
181
|
isTrigger: true,
|
|
172
182
|
onTriggered: onTriggeredSpy,
|
|
173
183
|
});
|
|
174
184
|
|
|
175
185
|
expect(window.IntersectionObserver).toHaveBeenCalledTimes(1);
|
|
176
|
-
expect(observe).toHaveBeenCalledWith(
|
|
186
|
+
expect(observe).toHaveBeenCalledWith(container.firstChild);
|
|
177
187
|
expect(onTriggeredSpy).not.toHaveBeenCalled();
|
|
178
188
|
});
|
|
179
189
|
|
|
180
190
|
it('does not create IntersectionObserver when isTrigger===false', () => {
|
|
181
|
-
const onTriggeredSpy =
|
|
191
|
+
const onTriggeredSpy = vi.fn();
|
|
182
192
|
|
|
183
|
-
|
|
193
|
+
renderRowRenderer({
|
|
184
194
|
listRowProps: mockListRowProps,
|
|
185
195
|
isTrigger: false,
|
|
186
196
|
onTriggered: onTriggeredSpy,
|
|
@@ -192,14 +202,14 @@ describe('ListRowRenderer', () => {
|
|
|
192
202
|
|
|
193
203
|
it('triggers onTriggered when IntersectionObserver observes entry', () => {
|
|
194
204
|
let intersectionFn: IntersectionObserverCallback = () => null;
|
|
195
|
-
const onTriggeredSpy =
|
|
205
|
+
const onTriggeredSpy = vi.fn();
|
|
196
206
|
|
|
197
|
-
(window.IntersectionObserver as
|
|
207
|
+
(window.IntersectionObserver as Mock).mockImplementation(function (fn) {
|
|
198
208
|
intersectionFn = fn;
|
|
199
209
|
return { observe, disconnect };
|
|
200
210
|
});
|
|
201
211
|
|
|
202
|
-
|
|
212
|
+
renderRowRenderer({
|
|
203
213
|
listRowProps: mockListRowProps,
|
|
204
214
|
isTrigger: true,
|
|
205
215
|
onTriggered: onTriggeredSpy,
|
|
@@ -216,14 +226,14 @@ describe('ListRowRenderer', () => {
|
|
|
216
226
|
|
|
217
227
|
it('does not trigger when entry is not intersecting', () => {
|
|
218
228
|
let intersectionFn: IntersectionObserverCallback = () => null;
|
|
219
|
-
const onTriggeredSpy =
|
|
229
|
+
const onTriggeredSpy = vi.fn();
|
|
220
230
|
|
|
221
|
-
(window.IntersectionObserver as
|
|
231
|
+
(window.IntersectionObserver as Mock).mockImplementation(function (fn) {
|
|
222
232
|
intersectionFn = fn;
|
|
223
233
|
return { observe, disconnect };
|
|
224
234
|
});
|
|
225
235
|
|
|
226
|
-
|
|
236
|
+
renderRowRenderer({
|
|
227
237
|
listRowProps: mockListRowProps,
|
|
228
238
|
isTrigger: true,
|
|
229
239
|
onTriggered: onTriggeredSpy,
|
|
@@ -243,12 +253,12 @@ describe('ListRowRenderer', () => {
|
|
|
243
253
|
|
|
244
254
|
describe('custom row renderer', () => {
|
|
245
255
|
it('creates the IntersectionObserver when isTrigger===true for custom renderer', () => {
|
|
246
|
-
const customRenderer =
|
|
256
|
+
const customRenderer = vi.fn(() => (
|
|
247
257
|
<div data-test-id="custom-row">Custom Content</div>
|
|
248
258
|
));
|
|
249
|
-
const onTriggeredSpy =
|
|
259
|
+
const onTriggeredSpy = vi.fn();
|
|
250
260
|
|
|
251
|
-
const
|
|
261
|
+
const { container } = renderRowRenderer({
|
|
252
262
|
listRowProps: mockListRowProps,
|
|
253
263
|
isTrigger: true,
|
|
254
264
|
onTriggered: onTriggeredSpy,
|
|
@@ -256,17 +266,17 @@ describe('ListRowRenderer', () => {
|
|
|
256
266
|
});
|
|
257
267
|
|
|
258
268
|
expect(window.IntersectionObserver).toHaveBeenCalledTimes(1);
|
|
259
|
-
expect(observe).toHaveBeenCalledWith(
|
|
269
|
+
expect(observe).toHaveBeenCalledWith(container.firstChild);
|
|
260
270
|
expect(onTriggeredSpy).not.toHaveBeenCalled();
|
|
261
271
|
});
|
|
262
272
|
|
|
263
273
|
it('does not create IntersectionObserver when isTrigger===false for custom renderer', () => {
|
|
264
|
-
const customRenderer =
|
|
274
|
+
const customRenderer = vi.fn(() => (
|
|
265
275
|
<div data-test-id="custom-row">Custom Content</div>
|
|
266
276
|
));
|
|
267
|
-
const onTriggeredSpy =
|
|
277
|
+
const onTriggeredSpy = vi.fn();
|
|
268
278
|
|
|
269
|
-
|
|
279
|
+
renderRowRenderer({
|
|
270
280
|
listRowProps: mockListRowProps,
|
|
271
281
|
isTrigger: false,
|
|
272
282
|
onTriggered: onTriggeredSpy,
|
|
@@ -279,19 +289,19 @@ describe('ListRowRenderer', () => {
|
|
|
279
289
|
|
|
280
290
|
it('triggers onTriggered when IntersectionObserver observes entry for custom renderer', () => {
|
|
281
291
|
let intersectionFn: IntersectionObserverCallback = () => null;
|
|
282
|
-
const customRenderer =
|
|
292
|
+
const customRenderer = vi.fn(() => (
|
|
283
293
|
<div data-test-id="custom-row">Custom Content</div>
|
|
284
294
|
));
|
|
285
|
-
const onTriggeredSpy =
|
|
295
|
+
const onTriggeredSpy = vi.fn();
|
|
286
296
|
|
|
287
|
-
(window.IntersectionObserver as
|
|
297
|
+
(window.IntersectionObserver as Mock).mockImplementation(function (fn) {
|
|
288
298
|
// Remember the callback function
|
|
289
299
|
intersectionFn = fn;
|
|
290
300
|
// Return the mocked object
|
|
291
301
|
return { observe, disconnect };
|
|
292
302
|
});
|
|
293
303
|
|
|
294
|
-
|
|
304
|
+
renderRowRenderer({
|
|
295
305
|
listRowProps: mockListRowProps,
|
|
296
306
|
isTrigger: true,
|
|
297
307
|
onTriggered: onTriggeredSpy,
|
|
@@ -312,9 +322,9 @@ describe('ListRowRenderer', () => {
|
|
|
312
322
|
|
|
313
323
|
describe('observer cleanup', () => {
|
|
314
324
|
it('disconnects observer when isTrigger changes from true to false', () => {
|
|
315
|
-
const onTriggeredSpy =
|
|
325
|
+
const onTriggeredSpy = vi.fn();
|
|
316
326
|
|
|
317
|
-
const
|
|
327
|
+
const { rerender } = renderRowRenderer({
|
|
318
328
|
listRowProps: mockListRowProps,
|
|
319
329
|
isTrigger: true,
|
|
320
330
|
onTriggered: onTriggeredSpy,
|
|
@@ -322,21 +332,25 @@ describe('ListRowRenderer', () => {
|
|
|
322
332
|
|
|
323
333
|
expect(window.IntersectionObserver).toHaveBeenCalledTimes(1);
|
|
324
334
|
|
|
335
|
+
// Clear the disconnect mock to only count calls from the rerender
|
|
336
|
+
disconnect.mockClear();
|
|
337
|
+
|
|
325
338
|
// Change isTrigger to false
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
339
|
+
rerender(
|
|
340
|
+
<ListRowRenderer
|
|
341
|
+
listRowProps={mockListRowProps}
|
|
342
|
+
isTrigger={false}
|
|
343
|
+
onTriggered={onTriggeredSpy}
|
|
344
|
+
/>,
|
|
345
|
+
);
|
|
332
346
|
|
|
333
347
|
expect(disconnect).toHaveBeenCalledTimes(1);
|
|
334
348
|
});
|
|
335
349
|
|
|
336
350
|
it('disconnects observer on component unmount', () => {
|
|
337
|
-
const onTriggeredSpy =
|
|
351
|
+
const onTriggeredSpy = vi.fn();
|
|
338
352
|
|
|
339
|
-
const
|
|
353
|
+
const { unmount } = renderRowRenderer({
|
|
340
354
|
listRowProps: mockListRowProps,
|
|
341
355
|
isTrigger: true,
|
|
342
356
|
onTriggered: onTriggeredSpy,
|
|
@@ -344,7 +358,7 @@ describe('ListRowRenderer', () => {
|
|
|
344
358
|
|
|
345
359
|
expect(window.IntersectionObserver).toHaveBeenCalledTimes(1);
|
|
346
360
|
|
|
347
|
-
|
|
361
|
+
unmount();
|
|
348
362
|
|
|
349
363
|
expect(disconnect).toHaveBeenCalledTimes(1);
|
|
350
364
|
});
|