Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VE-219 Migrate RUI to MUI v6 #984

Merged
merged 20 commits into from
Dec 5, 2024
Merged

VE-219 Migrate RUI to MUI v6 #984

merged 20 commits into from
Dec 5, 2024

Conversation

m4manjesh
Copy link
Contributor

@m4manjesh m4manjesh commented Nov 25, 2024

Closes VE-219

This PR focuses on migrating RUI from MUI v5 to v6. There are few breaking changes based on this documentation. There will be separate PR's to handle deprecations, migrating to Pigment CSS(if we prefer) etc. Some major changes introduced and updated in this PR are as follows

  1. Introduction of cssVariables flag, to enable access to css variables from the theme.vars object, read more.
  2. Introduction of colorSchemes node to simplify the process to support light and dark mode, read more
  3. Introduction of new API theme.applyStyles() to replace the theme.palette.mode === 'dark' condition. This now solves the dark mode flickering issue when combined with the CSS theme variables feature above.
  4. Grid is deprecated , importing it as Grid2 from '@mui/material/Grid2' or Grid2 as Grid from "@mui/material", read more
  5. The color prop in the Typography component is not a system prop anymore. Updated to use as sx prop now, read more

Changes

Package Updates

  • Updated "@mui/material" and "@mui/icons-material" to 6.0.0

Accessing theme

  • Accessing theme inside sx prop changes in this PR as follows. There is no harm following the old usage but we are updating this for future protection.
    Screenshot 2024-11-26 105327

Accessing mode

  • A new method was added throughout the app to apply styles for dark and light modes
    Screenshot 2024-11-26 105657

Grid Updates

  • As mentioned above Grid is deprecated and we use [Grid2](https://mui.com/material-ui/migration/upgrade-to-v6/#grid2) now and props like xs, sm, md, lg, xl and xsOffset, smOffset, mdOffset, lgOffset, xlOffset renamed as Size and Offset. Usage as follows
    Screenshot 2024-11-26 110151

Removing a few deprecations

  • A few TextField were updated to use slotProps instead of the deprecated inputProps. As this PR grows, I plan to handle all other deprecations separately.
    Screenshot 2024-11-26 110808

Spell checks

  • Spelling mistakes noticed and corrected in PasswordChangeDialog.jsx

Typography

  • Removed using color as system prop, instead using as follows
    Screenshot 2024-11-26 111911

UI/UX

N/A

Testing notes

There are no new visible UI changes, but as this is a major package update, I suggest checking that all components still work fine as before.

Author checklist

Before I request a review:

  • I have reviewed my own code-diff.
  • I have tested the changes in Docker / a deploy-preview.
  • I have assigned the PR to myself or an appropriate delegate.
  • I have added the relevant labels to the PR.
  • I have included appropriate tests.
  • I have checked that the Lint and Test workflows pass on Github.
  • I have populated the deploy-preview with relevant test data.
  • I have tagged a UI/UX designer for review if this PR includes UI/UX changes.

@m4manjesh m4manjesh self-assigned this Nov 25, 2024
Copy link

github-actions bot commented Nov 25, 2024

Coverage Report

Status Category Percentage Covered / Total
🟢 Lines 68.91% (🎯 66%) 9612 / 13948
🟢 Statements 68.91% (🎯 66%) 9612 / 13948
🟢 Functions 72.18% (🎯 70%) 397 / 550
🟢 Branches 86.32% (🎯 80%) 985 / 1141
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
src/ActionDialog/ActionDialog.tsx 98.36% 66.66% 100% 98.36% 64
src/AppHeader/AppHeader.tsx 100% 83.33% 100% 100%
src/AppLauncher/AppLauncher.tsx 98.71% 90.9% 83.33% 98.71% 79-80
src/AppLayout/AppLayout.tsx 100% 100% 85.71% 100%
src/Canvas/SelectionRectangle.jsx 31.03% 100% 0% 31.03% 10-30
src/CanvasItem/ResizeHandle.jsx 10.97% 100% 0% 10.97% 10-89
src/CanvasItem/RotateHandle.jsx 12.76% 100% 0% 12.76% 9-51
src/Card/DetailCard/DetailCard.tsx 0% 0% 0% 0% 1-181
src/Color/Color.jsx 97.67% 96.77% 90% 97.67% 68-69, 82-84
src/ConfirmProvider/ConfirmationDialog.tsx 100% 75% 100% 100%
src/DeletableList/DeletableList.tsx 100% 100% 66.66% 100%
src/DialogTitle/DialogTitle.tsx 100% 100% 100% 100%
src/EditLabelDialog/EditLabelDialog.jsx 91.76% 100% 41.66% 91.76% 42-48, 127-138
src/FileUploader/FileUploader.tsx 99.3% 92.3% 50% 99.3% 98
src/FontPicker/FontPicker.jsx 93.59% 62.5% 66.66% 93.59% 159-165, 173, 205-209
src/LoadErrorMessage/LoadErrorMessage.tsx 0% 0% 0% 0% 1-174
src/LoginForm/LoginForm.jsx 100% 66.66% 50% 100%
src/ModelButton/ModelButton.tsx 97.16% 85.41% 75% 97.16% 119, 166, 168-169, 219-220, 222-223, 261
src/PasswordChangeDialog/PasswordChangeDialog.jsx 95.29% 72.72% 100% 95.29% 102, 140-142, 145-147, 246
src/PasswordChangeForm/PasswordChangeForm.jsx 100% 84.61% 100% 100%
src/PasswordResetForm/PasswordResetForm.jsx 100% 66.66% 100% 100%
src/RegistrationForm/RegistrationForm.jsx 100% 76.47% 100% 100%
src/SearchBar/SearchBar.tsx 100% 100% 100% 100%
src/SelectorButton/SelectorButton.tsx 100% 100% 100% 100%
src/Sidebar/Sidebar.tsx 100% 87.5% 100% 100%
src/Sidebar/SidebarDivider/SidebarDivider.tsx 100% 100% 100% 100%
src/Status/StatusCountTable/StatusCountTable.tsx 100% 100% 100% 100%
src/SurfacePlot/SurfacePlot.tsx 0% 0% 0% 0% 1-156
src/TabPanel/TabPanel.tsx 0% 0% 0% 0% 1-121
src/ToggleColorMode/ToggleColorMode.jsx 100% 100% 100% 100%
src/TransferList/TransferList.tsx 100% 100% 100% 100%
src/Uploader/UploaderHeader.tsx 87.69% 83.33% 100% 87.69% 30-33, 35-38
src/VirtoAppHeader/VirtoAppHeader.tsx 100% 100% 76.92% 100%
Unchanged Files
src/AlignHorizontal/AlignHorizontal.tsx 100% 100% 100% 100%
src/AlignVertical/AlignVertical.tsx 100% 100% 100% 100%
src/Autocomplete/Autocomplete.tsx 93.86% 79.31% 100% 93.86% 64-66, 68, 158-163
src/Breadcrumbs/Breadcrumbs.tsx 98% 66.66% 100% 98% 31
src/BulletGauge/BulletGauge.tsx 0% 0% 0% 0% 1-85
src/BulletGauge/BulletGaugeClientOnly.tsx 0% 0% 0% 0% 1-19
src/Canvas/Canvas.jsx 93% 33.33% 0% 93% 49-51, 59-62
src/Canvas/Grid.jsx 100% 100% 100% 100%
src/Canvas/ResizeHandle.jsx 100% 100% 100% 100%
src/Canvas/useResize.jsx 37.14% 100% 25% 37.14% 18-26, 30-33, 37-45
src/Canvas/useSelectionRectangle.jsx 30.15% 50% 25% 30.15% 36-103
src/CanvasItem/CanvasItem.jsx 44.11% 100% 25% 44.11% 35-58, 71-104, 112-120
src/CanvasItem/Rect.jsx 38.12% 25% 40% 38.12% 37-102, 112-176, 184-232, 260-269
src/CanvasItem/utils.jsx 21.03% 100% 9.09% 21.03% 16-20, 48-59, 69-80, 94-269, 318-322, 330-341
src/Card/SummaryCard/SummaryCard.tsx 0% 0% 0% 0% 1-165
src/Card/TableCard/TableCard.tsx 0% 0% 0% 0% 1-75
src/CardContent/FileDetails/FileDetails.tsx 98.12% 100% 80% 98.12% 43-45
src/CardContent/Infographic/Infographic.tsx 0% 0% 0% 0% 1-116
src/Checkbox/Checkbox.jsx 100% 100% 50% 100%
src/ClientOnly/ClientOnly.tsx 0% 0% 0% 0% 1-17
src/ConditionalDialog/ConditionalDialog.tsx 0% 0% 0% 0% 1-29
src/ConfirmProvider/ConfirmContext.tsx 100% 100% 100% 100%
src/ConfirmProvider/ConfirmProvider.tsx 97.16% 100% 100% 97.16% 93, 112-113
src/ConfirmProvider/useConfirm.tsx 100% 100% 100% 100%
src/Copyright/Copyright.jsx 100% 100% 100% 100%
src/FeedbackForm/FeedbackForm.jsx 98.63% 100% 91.66% 98.63% 67-71
src/Figure/Figure.tsx 0% 0% 0% 0% 1-46
src/Figure/FigureClientOnly.tsx 0% 0% 0% 0% 1-16
src/FileUploader/__data__/uploaderTestFiles.ts 100% 100% 100% 100%
src/Filter/AlwaysOpenAutocomplete.tsx 100% 100% 100% 100%
src/Filter/sortFilterOptions.ts 82.75% 75% 100% 82.75% 13-14, 24-25, 45
src/Filter/CheckboxFilter/CheckboxFilter.tsx 96.29% 78.57% 100% 96.29% 59, 131-133
src/Filter/ClearFilterButton/ClearFilterButton.tsx 100% 100% 100% 100%
src/Filter/LabelFilter/LabelFilter.jsx 96.46% 94.11% 92.85% 96.46% 110-113
src/Filter/RangeFilter/RangeFilter.jsx 100% 83.33% 100% 100%
src/Filter/SetFilterButton/SetFilterButton.tsx 100% 100% 100% 100%
src/Filter/SidebarFilter/SidebarFilter.tsx 100% 100% 75% 100%
src/FontStyle/FontStyle.jsx 100% 100% 50% 100%
src/ImageUploader/ImageUploader.tsx 99.15% 95.45% 100% 99.15% 81
src/ImageUploader/__data__/uploaderTestFiles.ts 100% 100% 100% 100%
src/LabelSelector/LabelSelector.jsx 98.07% 96.15% 77.77% 98.07% 134-138, 259-260
src/LabelSelector/DeleteLabelDialog/DeleteLabelDialog.jsx 89.36% 100% 40% 89.36% 23-29
src/LabelSelector/LabelChip/LabelChip.tsx 100% 100% 100% 100%
src/LabelSelector/LabelChipGroup/LabelChipGroup.tsx 30.87% 83.33% 20% 30.87% 52-79, 94-104, 121-173, 187-229
src/LabelSelector/LabelChipGroup/sortLabelChips.ts 100% 100% 100% 100%
src/LazyLoadImage/LazyLoadImage.tsx 0% 0% 0% 0% 1-97
src/LinePlot/LinePlot.tsx 0% 0% 0% 0% 1-188
src/LinePlot/LinePlotClientOnly.tsx 0% 0% 0% 0% 1-19
src/Loading/Loading.jsx 96.55% 50% 100% 96.55% 29
src/ModelButtonImage/ModelButtonImage.tsx 100% 100% 100% 100%
src/ModelButtonImage/color2filter.ts 95.6% 100% 95.83% 95.6% 60-71
src/MultiColor/MultiColor.jsx 63.15% 80% 25% 63.15% 40, 52-59, 85-88, 92-93, 97-101, 105-109, 113-116, 150-183
src/MultiLabelPopover/MultiLabelPopover.jsx 97.56% 100% 66.66% 97.56% 22-23
src/MultiText/MultiText.jsx 95.55% 100% 71.42% 95.55% 74-77
src/NoWrapTypography/NoWrapTypography.tsx 100% 100% 100% 100%
src/NumberField/NumberField.tsx 96.46% 87.87% 100% 96.46% 112-115
src/PartSelector/PartSelector.tsx 0% 0% 0% 0% 1-103
src/RadioButtons/RadioButtons.jsx 100% 100% 50% 100%
src/RoadMarking/RoadMarking.tsx 0% 0% 0% 0% 1-50
src/RoadMarking/RoadMarkingClientOnly.tsx 0% 0% 0% 0% 1-16
src/RoadPreview/RoadPreview.tsx 100% 85.71% 100% 100%
src/RoadSurface/RoadSurface.tsx 0% 0% 0% 0% 1-20
src/RoadSurface/RoadSurfaceClientOnly.tsx 0% 0% 0% 0% 1-16
src/Select/Select.jsx 100% 100% 50% 100%
src/Sidebar/SidebarItem/SidebarItem.tsx 70.07% 80.95% 66.66% 70.07% 63, 101-136, 149-152
src/Slider/Slider.jsx 92.5% 36.84% 60% 92.5% 55-56, 65-69, 95, 99
src/Snackbar/Snackbar.tsx 100% 90% 85.71% 100%
src/SnackbarProvider/SnackbarContext.tsx 100% 100% 100% 100%
src/SnackbarProvider/SnackbarProvider.tsx 60.46% 100% 50% 60.46% 32-35, 42-55
src/SnackbarProvider/useSnackbar.ts 22.22% 100% 0% 22.22% 7-13
src/Status/statuses.ts 100% 100% 100% 100%
src/Status/StatusCard/StatusCard.tsx 100% 100% 100% 100%
src/Status/StatusCountBar/StatusCountBar.tsx 93.61% 80% 66.66% 93.61% 58-60
src/Status/StatusIcon/StatusIcon.tsx 100% 100% 100% 100%
src/Status/StatusLabel/StatusLabel.tsx 100% 100% 100% 100%
src/SurfacePlot/SurfacePlotClientOnly.tsx 0% 0% 0% 0% 1-19
src/SvgIcons/AsamLogo/AsamLogo.tsx 100% 100% 100% 100%
src/SvgIcons/CarMakerLogo/CarMakerLogo.tsx 100% 100% 100% 100%
src/SvgIcons/IpgLogo/IpgLogo.tsx 100% 100% 100% 100%
src/SvgIcons/VirtoBuild/VirtoBuild.jsx 100% 100% 100% 100%
src/SvgIcons/VirtoData/VirtoData.jsx 100% 100% 100% 100%
src/SvgIcons/VirtoFleet/VirtoFleet.jsx 100% 100% 100% 100%
src/SvgIcons/VirtoID/VirtoID.jsx 100% 100% 100% 100%
src/SvgIcons/VirtoLogo/VirtoLogo.jsx 100% 100% 100% 100%
src/SvgIcons/VirtoMascots/VirtoHeadScratching/VirtoHeadScratching.tsx 11.11% 100% 0% 11.11% 6-32
src/SvgIcons/VirtoMascots/VirtoShrugging/VirtoShrugging.tsx 11.11% 100% 0% 11.11% 6-32
src/SvgIcons/VirtoMascots/VirtoThinking/VirtoThinking.tsx 11.11% 100% 0% 11.11% 6-32
src/SvgIcons/VirtoMascots/VirtoThumbsUpLeft/VirtoThumbsUpLeft.tsx 11.11% 100% 0% 11.11% 6-32
src/SvgIcons/VirtoModel/VirtoModel.jsx 100% 100% 100% 100%
src/SvgIcons/VirtoResult/VirtoResult.jsx 100% 100% 100% 100%
src/SvgIcons/VirtoScene/VirtoScene.jsx 100% 100% 100% 100%
src/SvgIcons/VirtoTest/VirtoTest.jsx 100% 100% 100% 100%
src/SvgIcons/VirtoVehicle/VirtoVehicle.jsx 100% 100% 100% 100%
src/SwitchField/SwitchField.jsx 93.84% 90.9% 100% 93.84% 112-115
src/TextField/TextField.tsx 89.47% 100% 66.66% 89.47% 8-13
src/ThemeProvider/ThemeContext.tsx 100% 100% 100% 100%
src/ThemeProvider/ThemeProvider.tsx 98.68% 93.75% 66.66% 98.68% 102, 189-190
src/ThemeProvider/useTheme.ts 77.77% 50% 100% 77.77% 10-11
src/TrafficLight/TrafficLight.tsx 0% 0% 0% 0% 1-107
src/TrafficLight/TrafficLightClientOnly.tsx 0% 0% 0% 0% 1-16
src/TrafficLight/TrafficLightSelector.tsx 0% 0% 0% 0% 1-780
src/TrafficLight/trafficLightUtils.ts 0% 100% 100% 0% 2-40
src/TrafficSign/TrafficSign.tsx 0% 0% 0% 0% 1-33
src/TrafficSign/TrafficSignClientOnly.tsx 0% 0% 0% 0% 1-16
src/TrafficSign/TrafficSignHelper.ts 0% 0% 0% 0% 1-333
src/TreeViewList/TreeViewList.tsx 0% 0% 0% 0% 1-513
src/TruncatedTooltip/TruncatedTooltip.tsx 91.76% 64.7% 75% 91.76% 61-62, 64-65, 83-84, 86
src/Uploader/useUploader.ts 89.28% 78.26% 100% 89.28% 39-41, 58, 63-67, 103, 174-175
src/UserAvatar/UserAvatar.tsx 100% 90.9% 100% 100%
src/UserAvatar/colorMap.tsx 12.5% 100% 0% 12.5% 15-41
src/UserMenu/UserMenu.tsx 100% 100% 100% 100%
src/VehiclePath/Marker.tsx 0% 0% 0% 0% 1-15
src/VehiclePath/Vehicle.tsx 0% 0% 0% 0% 1-59
src/VehiclePath/VehiclePath.tsx 0% 0% 0% 0% 1-55
src/VehiclePath/VehiclePathClientOnly.tsx 0% 0% 0% 0% 1-16
src/VehicleSelect/VehicleSelect.tsx 52.79% 88.46% 28.57% 52.79% 86-96, 108-118, 131-175, 188-218
src/VehicleSelectDialog/VehicleSelectDialog.tsx 87% 71.42% 40% 87% 40-47, 51-54, 93
src/VehicleSelector/VehicleSelector.tsx 57.14% 92.68% 16.66% 57.14% 96-106, 131-141, 168-224, 257-301
src/VersionChip/VersionChip.tsx 88.7% 70% 100% 88.7% 12, 46, 50, 77-80
src/ViewToggleButton/ViewToggleButton.jsx 100% 100% 66.66% 100%
src/VirtoAppLayout/VirtoAppLayout.tsx 100% 100% 60% 100%
src/Wizard/Wizard.tsx 100% 100% 100% 100%
src/Wizard/WizardActions/WizardActions.tsx 100% 100% 100% 100%
src/Wizard/WizardActions/BackButton/BackButton.tsx 100% 100% 100% 100%
src/Wizard/WizardActions/CancelButton/CancelButton.tsx 100% 100% 100% 100%
src/Wizard/WizardActions/NextButton/NextButton.tsx 100% 100% 100% 100%
src/Wizard/WizardContent/WizardContent.tsx 100% 100% 100% 100%
src/Wizard/WizardSteps/WizardSteps.tsx 100% 75% 100% 100%
src/Wizard/WizardSteps/WizardStep/WizardStep.tsx 92.15% 71.42% 100% 92.15% 49-52
src/hover/useDelayedHover.ts 60% 100% 100% 60% 26-40, 50-54
src/utils/common.ts 100% 83.33% 100% 100%
src/utils/form.jsx 100% 100% 100% 100%
src/utils/plotlyConfig.ts 0% 100% 100% 0% 2-34
src/utils/readAsDataURL.ts 80% 100% 66.66% 80% 20-22
Generated in workflow #3073 for commit b771c62 by the Vitest Coverage Report Action

@m4manjesh m4manjesh changed the title Miagrate RUI to MUI v6 Migrate RUI to MUI v6 Nov 26, 2024
@m4manjesh m4manjesh added the enhancement New feature or request label Nov 26, 2024
@m4manjesh m4manjesh changed the title Migrate RUI to MUI v6 VE-219 Miagrate RUI to MUI v6 Nov 26, 2024
@m4manjesh m4manjesh changed the title VE-219 Miagrate RUI to MUI v6 VE-219 Migrate RUI to MUI v6 Nov 26, 2024
@m4manjesh m4manjesh mentioned this pull request Nov 27, 2024
8 tasks
@nikitharani
Copy link
Contributor

nikitharani commented Nov 28, 2024

  1. We have some components where tests use fireEvent.click(button). No React warnings are being logged during tests. Since it is mentioned as a breaking change in the documentation, In my opinion updating the tests ensures compliance with MUI v6 updated behavior.
    https://mui.com/material-ui/migration/upgrade-to-v6/#breaking-changes-affecting-testing

  2. VirtoAppLayout
    Before
    VirtoAppLayout-Main

After
VirtoAppLayout-after

Apart from the above everything LGTM.

@m4manjesh
Copy link
Contributor Author

  1. We have some components where tests use fireEvent.click(button). No React warnings are being logged during tests. Since it is mentioned as a breaking change in the documentation, In my opinion updating the tests ensures compliance with MUI v6 updated behavior.

No tests are failing now so we dont need to update this, confirmed with @mattcorner

@m4manjesh
Copy link
Contributor Author

2. VirtoAppLayout

I need to combine the current seperate themse variables we have for dark and white into one as MUI suggests here . Also planning to handle this in a seperate PR.

@mattcorner mattcorner self-requested a review December 3, 2024 08:58
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought we agreed to back out of these changes for now and deal with them seperately.

Copy link
Contributor Author

@m4manjesh m4manjesh Dec 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, handling seperality here. I will remove the flags

package.json Outdated
@@ -34,7 +34,7 @@
"devDependencies": {
"@emotion/react": "^11.11.4",
"@emotion/styled": "^11.11.5",
"@mui/material": "^5.16.4",
"@mui/material": "^6.0.0",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why just 6.0.0? Why not 6.1.9 which is latest?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes we can update to 6.1.9, i was following what documentation suggests here

Comment on lines 16 to 18
sx={theme => ({
py: theme.spacing(1)
})}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
sx={theme => ({
py: theme.spacing(1)
})}
sx={{ py: 1 }}

@m4manjesh m4manjesh requested a review from mattcorner December 3, 2024 16:12
Copy link
Contributor

@mattcorner mattcorner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've done no testing, but the code changes look fine to me. @nikitharani to complete the full review.

Copy link
Contributor

@nikitharani nikitharani left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@m4manjesh m4manjesh merged commit f90ab03 into release/v10.0.0 Dec 5, 2024
3 checks passed
@m4manjesh m4manjesh deleted the migrate-to-MUI6 branch December 5, 2024 09:01
This was referenced Jan 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants