Skip to content

Commit 8bc7d06

Browse files
authored
[!] upgrade webui to React v19, MUI v9, MUI X Data Grid v9 (#1422)
- Bump react/react-dom to 19.2, @mui/* to 9.0.1, x-data-grid to 9.3 - Fix icon rename: RemoveCircleOutline → RemoveCircleOutlined - Migrate componentsProps → slotProps, Box/Typography inline props → sx - Replace JSX.Element with React.ReactNode (React 19 global JSX gone) - Cast yupResolver to Resolver<T> (@hookform/resolvers v5 inference change) - Add showToolbar prop to all DataGrids (v9 no longer infers from slots) - Remove dead code: CustomColumnMenu, useGridColumnVisibility, resetColumnSizes
1 parent b28a3d7 commit 8bc7d06

21 files changed

Lines changed: 167 additions & 251 deletions

File tree

internal/webui/package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,31 +40,31 @@
4040
"@emotion/react": "^11.14.0",
4141
"@emotion/styled": "^11.14.0",
4242
"@hookform/resolvers": "^5.0.1",
43-
"@mui/icons-material": "^6.5.0",
44-
"@mui/material": "^6.5.0",
45-
"@mui/system": "^6.5.0",
46-
"@mui/x-data-grid": "^7.29.8",
43+
"@mui/icons-material": "^9.0.1",
44+
"@mui/material": "^9.0.1",
45+
"@mui/system": "^9.0.1",
46+
"@mui/x-data-grid": "^9.3.0",
4747
"@tanstack/react-query": "^5.75.0",
4848
"axios": "^1.16.0",
4949
"classnames": "^2.5.1",
5050
"form-data": "^4.0.0",
51-
"react": "^18.2.0",
52-
"react-dom": "^18.2.0",
51+
"react": "^19.2.0",
52+
"react-dom": "^19.2.0",
5353
"react-hook-form": "^7.55.0",
5454
"react-markdown": "^10.1.0",
5555
"react-router-dom": "^6.28.1",
5656
"react-syntax-highlighter": "^16.1.1",
5757
"react-use-websocket": "^4.5.0",
58-
"tss-react": "^4.9.6",
58+
"tss-react": "^4.9.21",
5959
"typescript": "^5.7.0",
6060
"yaml": "^2.8.3",
6161
"yup": "^1.4.0"
6262
},
6363
"devDependencies": {
6464
"@eslint/js": "^9.27.0",
6565
"@types/node": "^22.15.0",
66-
"@types/react": "^18.3.28",
67-
"@types/react-dom": "^18.3.7",
66+
"@types/react": "^19.0.0",
67+
"@types/react-dom": "^19.0.0",
6868
"@types/react-syntax-highlighter": "^15.5.13",
6969
"@typescript-eslint/eslint-plugin": "^8.54.0",
7070
"@typescript-eslint/parser": "^8.54.0",

internal/webui/src/QueryClient.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import React from "react";
12
import { QueryClientProvider as ClientProvider, MutationCache, QueryCache, QueryClient } from "@tanstack/react-query";
23
import { isUnauthorized } from "api";
34
import axios from "axios";
@@ -7,7 +8,7 @@ import { logout } from "queries/Auth";
78
import { useAlert } from "utils/AlertContext";
89

910
type Props = {
10-
children: JSX.Element
11+
children: React.ReactNode
1112
};
1213

1314
export const QueryClientProvider = ({ children }: Props) => {

internal/webui/src/components/Autocomplete/Autocomplete.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export const Autocomplete = (props: Props) => {
4646
)}
4747
onChange={(_, value) => field.onChange(value ? value.label : "")}
4848
loading={loading}
49-
componentsProps={{
49+
slotProps={{
5050
popper: {
5151
modifiers: [
5252
{

internal/webui/src/components/CustomColumnMenu/CustomColumnMenu.tsx

Lines changed: 0 additions & 46 deletions
This file was deleted.

internal/webui/src/components/CustomColumnMenu/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

internal/webui/src/components/Error/Error.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export const Error = ({ message }: Props) => {
1010

1111
return (
1212
<div className={classes.root}>
13-
<Typography variant="h3" fontWeight="bold">Oops!</Typography>
13+
<Typography variant="h3" sx={{ fontWeight: "bold" }}>Oops!</Typography>
1414
<Typography variant="h5">Something went wrong...</Typography>
1515
<Typography>{message}</Typography>
1616
</div>

internal/webui/src/containers/MetricFormDialog/MetricFormDialog.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { useEffect, useMemo } from "react";
22
import { yupResolver } from "@hookform/resolvers/yup";
33
import { Button, Dialog, DialogActions, DialogContent } from "@mui/material";
44
import { useMetricFormContext } from "contexts/MetricForm/MetricForm.context";
5-
import { FormProvider, SubmitHandler, useForm } from "react-hook-form";
5+
import { FormProvider, Resolver, SubmitHandler, useForm } from "react-hook-form";
66
import { useFormStyles } from "styles/form";
77
import { useAddMetric, useEditMetric } from "queries/Metric";
88
import { createMetricRequest, getMetricInitialValues } from "./MetricFormDialog.consts";
@@ -13,7 +13,7 @@ import { MetricFormValues } from "./components/MetricForm/MetricForm.types";
1313
export const MetricFormDialog = () => {
1414
const { data, open, handleClose } = useMetricFormContext();
1515
const formMethods = useForm<MetricFormValues>({
16-
resolver: yupResolver(metricFormValuesValidationSchema),
16+
resolver: yupResolver(metricFormValuesValidationSchema) as unknown as Resolver<MetricFormValues>,
1717
});
1818
const { handleSubmit, reset, setError } = formMethods;
1919
const { classes } = useFormStyles();

internal/webui/src/containers/PresetFormDialog/PresetFormDialog.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { useEffect, useMemo } from "react";
22
import { yupResolver } from "@hookform/resolvers/yup";
33
import { Button, Dialog, DialogActions, DialogContent } from "@mui/material";
44
import { usePresetFormContext } from "contexts/PresetForm/PresetForm.context";
5-
import { FormProvider, SubmitHandler, useForm } from "react-hook-form";
5+
import { FormProvider, Resolver, SubmitHandler, useForm } from "react-hook-form";
66
import { useFormStyles } from "styles/form";
77
import { useAddPreset, useEditPreset } from "queries/Preset";
88
import { createPresetRequest, getPresetInitialValues } from "./PresetFormDialog.consts";
@@ -13,7 +13,7 @@ import { PresetFormValues } from "./components/PresetForm/PresetForm.types";
1313
export const PresetFormDialog = () => {
1414
const { data, open, handleClose } = usePresetFormContext();
1515
const formMethods = useForm<PresetFormValues>({
16-
resolver: yupResolver(presetFormValuesValidationSchema)
16+
resolver: yupResolver(presetFormValuesValidationSchema) as unknown as Resolver<PresetFormValues>
1717
});
1818
const { handleSubmit, reset } = formMethods;
1919
const { classes } = useFormStyles();

internal/webui/src/containers/SourceFormDialog/SourceFormDialog.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { yupResolver } from "@hookform/resolvers/yup";
33
import { Button, Dialog, DialogActions, DialogContent } from "@mui/material";
44
import { useSourceFormContext } from "contexts/SourceForm/SourceForm.context";
55
import { SourceFormActions } from "contexts/SourceForm/SourceForm.types";
6-
import { FormProvider, SubmitHandler, useForm } from "react-hook-form";
6+
import { FormProvider, Resolver, SubmitHandler, useForm } from "react-hook-form";
77
import { useFormStyles } from "styles/form";
88
import { useAddSource, useEditSource } from "queries/Source";
99
import { createSourceRequest, getSourceInitialValues } from "./SourceFormDialog.consts";
@@ -16,7 +16,7 @@ export const SourceFormDialog = () => {
1616
const [nameOrig, setnameOrig] = useState<string>("");
1717

1818
const formMethods = useForm<SourceFormValues>({
19-
resolver: yupResolver(sourceFormValuesValidationSchema),
19+
resolver: yupResolver(sourceFormValuesValidationSchema) as unknown as Resolver<SourceFormValues>,
2020
});
2121
const { handleSubmit, reset, setValue } = formMethods;
2222

internal/webui/src/hooks/useGridColumnVisibility.ts

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)