From f09d87373bdb114474a1997dcce2ed406bc0919d Mon Sep 17 00:00:00 2001 From: Santiago Palenque Date: Fri, 12 Jun 2026 11:38:36 -0300 Subject: [PATCH 01/22] feat: upgrade React 18, MUI v9; fix call sites; apply text-field-props codemod - Bump react/react-dom to ^18.0.0, @types/react* to ^18.0.0 - Bump @testing-library/react to ^13.4.0 (React 18 compat) - Bump @mui/material and @mui/icons-material to ^9.0.0 - Bump @mui/x-date-pickers to ^9.0.0 - Replace ReactDOM.render with createRoot in src/index.js - Replace ReactDOM.render with createRoot in src/components/mui/showConfirmDialog.js - Replace Grid2 imports with Grid as Grid2 across ~60 files (Grid2 removed in v9) - Replace deprecated MailOutline icon with MailOutlined - Apply @mui/codemod deprecations/text-field-props (8 files changed) Co-Authored-By: Claude Sonnet 4.6 --- package.json | 22 +- .../forms/sponsor-settings-form/index.js | 2 +- src/components/mui/RefundForm/index.jsx | 2 +- src/components/mui/showConfirmDialog.js | 10 +- src/index.js | 9 +- .../page-template-document-download-module.js | 2 +- .../modules/page-template-info-module.js | 2 +- .../page-template-media-request-module.js | 2 +- .../badge-scan-settings.js | 2 +- .../sponsor-general-form/extra-questions.js | 2 +- .../sponsor-general-form/sponsor-header.js | 2 +- .../tabs/sponsor-general-form/sponsorship.js | 2 +- .../sponsor-order-details.js | 8 +- .../components/users-table.js | 2 +- yarn.lock | 337 +++++++++--------- 15 files changed, 209 insertions(+), 197 deletions(-) diff --git a/package.json b/package.json index 53f73d565..4aa76347d 100644 --- a/package.json +++ b/package.json @@ -39,11 +39,11 @@ "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", "@fontsource/roboto": "^5.1.1", - "@mui/icons-material": "^6.4.3", - "@mui/material": "^6.4.3", - "@mui/x-data-grid": "^7.29.13", - "@mui/x-date-pickers": "^7.26.0", - "@mui/x-tree-view": "^7.26.0", + "@mui/icons-material": "^9.0.0", + "@mui/material": "^9.0.0", + "@mui/x-data-grid": "^9.0.0", + "@mui/x-date-pickers": "^9.0.0", + "@mui/x-tree-view": "^9.0.0", "@react-pdf/renderer": "^4.4.1", "@sentry/react": "^8.32.0", "@sentry/webpack-plugin": "^2.22.4", @@ -51,7 +51,7 @@ "@stripe/stripe-js": "^8.5.3", "@types/googlemaps": "^3.39.3", "@types/markerclustererplus": "^2.1.29", - "@types/react": "^16.9.32", + "@types/react": "^18.0.0", "@uiw/codemirror-theme-sublime": "^4.21.23", "@uiw/react-codemirror": "^4.21.7", "@uiw/react-color-sketch": "^2.1.0", @@ -95,14 +95,14 @@ "moment-duration-format": "^2.3.2", "moment-timezone": "^0.5.33", "mui-color-input": "^9.0.0", - "openstack-uicore-foundation": "5.0.73-beta.1", + "openstack-uicore-foundation": "6.0.0-beta.8", "p-limit": "^6.1.0", "path-browserify": "^1.0.1", "postcss-loader": "^6.2.1", "process": "^0.11.10", "prop-types": "^15.8.1", "qr-scanner": "^1.4.2", - "react": "^16.13.1", + "react": "^18.0.0", "react-beautiful-dnd": "^13.1.1", "react-bootstrap": "^0.31.5", "react-breadcrumbs": "^2.1.6", @@ -112,7 +112,7 @@ "react-device-detect": "^2.2.2", "react-dnd": "^16.0.0", "react-dnd-html5-backend": "^16.0.0", - "react-dom": "^16.13.1", + "react-dom": "^18.0.0", "react-dropzone": "^4.2.13", "react-final-form": "^6.5.9", "react-google-maps": "^9.4.5", @@ -150,9 +150,9 @@ "@babel/eslint-parser": "^7.24.7", "@testing-library/dom": "^10.1.0", "@testing-library/jest-dom": "^6.4.2", - "@testing-library/react": "12.1.5", + "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.5.2", - "@types/react-dom": "16.9.24", + "@types/react-dom": "^18.0.0", "babel-jest": "^30.3.0", "css-minimizer-webpack-plugin": "^4.2.2", "eslint": "8.2.0", diff --git a/src/components/forms/sponsor-settings-form/index.js b/src/components/forms/sponsor-settings-form/index.js index 8634406ae..cfd0d0009 100644 --- a/src/components/forms/sponsor-settings-form/index.js +++ b/src/components/forms/sponsor-settings-form/index.js @@ -15,7 +15,7 @@ import React from "react"; import T from "i18n-react/dist/i18n-react"; import { useFormik, FormikProvider } from "formik"; import * as yup from "yup"; -import { Box, Button, Grid2 } from "@mui/material"; +import { Box, Button, Grid as Grid2 } from "@mui/material"; import { epochToMomentTimeZone } from "openstack-uicore-foundation/lib/utils/methods"; import MuiFormikDatepicker from "openstack-uicore-foundation/lib/components/mui/formik-inputs/datepicker"; import MuiFormikTextField from "openstack-uicore-foundation/lib/components/mui/formik-inputs/textfield"; diff --git a/src/components/mui/RefundForm/index.jsx b/src/components/mui/RefundForm/index.jsx index 90d53b6fd..b2c202c4e 100644 --- a/src/components/mui/RefundForm/index.jsx +++ b/src/components/mui/RefundForm/index.jsx @@ -15,7 +15,7 @@ import React, { useRef } from "react"; import T from "i18n-react/dist/i18n-react"; import { FormikProvider, useFormik } from "formik"; import * as yup from "yup"; -import { Box, Button, Grid2 } from "@mui/material"; +import { Box, Button, Grid as Grid2 } from "@mui/material"; import MuiFormikTextField from "openstack-uicore-foundation/lib/components/mui/formik-inputs/textfield"; import MuiFormikPriceField from "openstack-uicore-foundation/lib/components/mui/formik-inputs/price-field"; import InfoNote from "openstack-uicore-foundation/lib/components/mui/info-note"; diff --git a/src/components/mui/showConfirmDialog.js b/src/components/mui/showConfirmDialog.js index ee3a368fd..effb06c0a 100644 --- a/src/components/mui/showConfirmDialog.js +++ b/src/components/mui/showConfirmDialog.js @@ -1,4 +1,4 @@ -import ReactDOM from "react-dom"; +import { createRoot } from "react-dom/client"; import React from "react"; import ConfirmDialog from "./confirm-dialog"; @@ -14,9 +14,10 @@ const showConfirmDialog = ({ new Promise((resolve) => { const container = document.createElement("div"); document.body.appendChild(container); + const root = createRoot(container); const close = (answer) => { - ReactDOM.unmountComponentAtNode(container); + root.unmount(); container.remove(); resolve(answer); }; @@ -24,7 +25,7 @@ const showConfirmDialog = ({ const handleConfirm = () => close(true); const handleCancel = () => close(false); - ReactDOM.render( + root.render( , - container + /> ); }); diff --git a/src/index.js b/src/index.js index 0be5b3a68..8f9aa63b0 100644 --- a/src/index.js +++ b/src/index.js @@ -12,7 +12,7 @@ * */ import React from "react"; -import ReactDOM from "react-dom"; +import { createRoot } from "react-dom/client"; import { Provider } from "react-redux"; import { PersistGate } from "redux-persist/es/integration/react"; import { GlobalConfirmDialog } from "openstack-uicore-foundation/lib/components/mui/show-confirm-dialog"; @@ -30,7 +30,9 @@ const onBeforeLift = () => { console.log("reading state ..."); }; -ReactDOM.render( +const container = document.querySelector("#root"); +const root = createRoot(container); +root.render( @@ -40,6 +42,5 @@ ReactDOM.render( - , - document.querySelector("#root") + ); diff --git a/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-document-download-module.js b/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-document-download-module.js index dde31c3e3..ff4eac2f4 100644 --- a/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-document-download-module.js +++ b/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-document-download-module.js @@ -2,7 +2,7 @@ import React from "react"; import PropTypes from "prop-types"; import T from "i18n-react/dist/i18n-react"; import { useField } from "formik"; -import { Divider, Grid2, InputLabel } from "@mui/material"; +import { Divider, Grid as Grid2, InputLabel } from "@mui/material"; import MuiFormikUpload from "openstack-uicore-foundation/lib/components/mui/formik-inputs/upload"; import MuiFormikTextField from "openstack-uicore-foundation/lib/components/mui/formik-inputs/textfield"; import MuiFormikRadioGroup from "openstack-uicore-foundation/lib/components/mui/formik-inputs/radio-group"; diff --git a/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-info-module.js b/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-info-module.js index 0714b52b4..54100d78d 100644 --- a/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-info-module.js +++ b/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-info-module.js @@ -1,7 +1,7 @@ import React from "react"; import PropTypes from "prop-types"; import T from "i18n-react/dist/i18n-react"; -import { Grid2, Box, InputLabel } from "@mui/material"; +import { Grid as Grid2, Box, InputLabel } from "@mui/material"; import FormikTextEditor from "openstack-uicore-foundation/lib/components/mui/formik-inputs/texteditor"; diff --git a/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-media-request-module.js b/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-media-request-module.js index 706ab75b0..2a28eb952 100644 --- a/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-media-request-module.js +++ b/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-media-request-module.js @@ -3,7 +3,7 @@ import PropTypes from "prop-types"; import T from "i18n-react/dist/i18n-react"; import { connect } from "react-redux"; import { getIn, useFormikContext } from "formik"; -import { Divider, Grid2, InputLabel, MenuItem } from "@mui/material"; +import { Divider, Grid as Grid2, InputLabel, MenuItem } from "@mui/material"; import MuiFormikTextField from "openstack-uicore-foundation/lib/components/mui/formik-inputs/textfield"; import MuiFormikRadioGroup from "openstack-uicore-foundation/lib/components/mui/formik-inputs/radio-group"; import MuiFormikFilesizeField from "openstack-uicore-foundation/lib/components/mui/formik-inputs/file-size-field"; diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/badge-scan-settings.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/badge-scan-settings.js index 30b48d6b7..279310c2c 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/badge-scan-settings.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/badge-scan-settings.js @@ -13,7 +13,7 @@ import React from "react"; import T from "i18n-react/dist/i18n-react"; -import { Box, Divider, Grid2, Typography } from "@mui/material"; +import { Box, Divider, Grid as Grid2, Typography } from "@mui/material"; import Member from "../../../../../models/member"; import ChipSelectInput from "../../../../../components/mui/chip-select-input"; import { diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/extra-questions.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/extra-questions.js index 820cf9704..e62c50f34 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/extra-questions.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/extra-questions.js @@ -13,7 +13,7 @@ import React, { useState, useEffect } from "react"; import T from "i18n-react/dist/i18n-react"; -import { Box, Button, Divider, Grid2, Typography } from "@mui/material"; +import { Box, Button, Divider, Grid as Grid2, Typography } from "@mui/material"; import AddIcon from "@mui/icons-material/Add"; import MuiTableSortable from "openstack-uicore-foundation/lib/components/mui/sortable-table"; import { diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsor-header.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsor-header.js index e29b5935c..29327782f 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsor-header.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsor-header.js @@ -18,7 +18,7 @@ import { Button, Checkbox, Divider, - Grid2, + Grid as Grid2, Typography } from "@mui/material"; diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsorship.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsorship.js index 0e3f81c19..7b9b2b963 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsorship.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsorship.js @@ -13,7 +13,7 @@ import React, { useState } from "react"; import T from "i18n-react/dist/i18n-react"; -import { Box, Button, Grid2, Typography } from "@mui/material"; +import { Box, Button, Grid as Grid2, Typography } from "@mui/material"; import AddIcon from "@mui/icons-material/Add"; import MuiTable from "openstack-uicore-foundation/lib/components/mui/table"; import AddTierPopup from "./add-tier-popup"; diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-purchases-tab/sponsor-order-details.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-purchases-tab/sponsor-order-details.js index d5e3b4a74..c71d80f66 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-purchases-tab/sponsor-order-details.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-purchases-tab/sponsor-order-details.js @@ -14,7 +14,13 @@ import React, { useEffect } from "react"; import { connect } from "react-redux"; import T from "i18n-react/dist/i18n-react"; -import { Box, Card, CardContent, Grid2, Typography } from "@mui/material"; +import { + Box, + Card, + CardContent, + Grid as Grid2, + Typography +} from "@mui/material"; import { ListCard } from "openstack-uicore-foundation/lib/components/mui/cards"; import SponsorOrderGrid from "openstack-uicore-foundation/lib/components/mui/sponsor-order-grid"; import { diff --git a/src/pages/sponsors/sponsor-users-list-page/components/users-table.js b/src/pages/sponsors/sponsor-users-list-page/components/users-table.js index a925ffbd2..596e201ae 100644 --- a/src/pages/sponsors/sponsor-users-list-page/components/users-table.js +++ b/src/pages/sponsors/sponsor-users-list-page/components/users-table.js @@ -1,7 +1,7 @@ import React from "react"; import T from "i18n-react"; import { IconButton } from "@mui/material"; -import MailOutlineIcon from "@mui/icons-material/MailOutline"; +import MailOutlineIcon from "@mui/icons-material/MailOutlined"; import MuiTable from "openstack-uicore-foundation/lib/components/mui/table"; import ChipList from "../../../../components/mui/chip-list"; import { titleCase } from "../../../../utils/methods"; diff --git a/yarn.lock b/yarn.lock index 6cc854497..383f79f11 100644 --- a/yarn.lock +++ b/yarn.lock @@ -979,11 +979,16 @@ "@babel/plugin-transform-react-jsx-development" "^7.27.1" "@babel/plugin-transform-react-pure-annotations" "^7.27.1" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0", "@babel/runtime@^7.28.6", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.29.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.2.tgz#9a6e2d05f4b6692e1801cd4fb176ad823930ed5e" integrity sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g== +"@babel/runtime@^7.29.7 || ^8.0.0", "@babel/runtime@^7.29.7 || ^8.0.5": + version "8.1.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-8.1.2.tgz#bd9ea684a4b44d520b50ceb2d5f9180b6b282978" + integrity sha512-Ay6HdEKZJAeGs6KKJ/ezCK5ssjFmkvUiR0TEGv/B1abyjLWrQ2RU+M507Ppk0NikhvVFhlEFC1/rHfCiYqSUcw== + "@babel/template@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.28.6.tgz#0e7e56ecedb78aeef66ce7972b082fce76a23e57" @@ -1014,6 +1019,16 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" +"@base-ui/utils@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@base-ui/utils/-/utils-0.5.0.tgz#0d73b0b4f5bb53d0442b88597ec7f2fbf44ef7f4" + integrity sha512-dYGGcEttjkYiMoa5nHm8vLaJ2UcuTWxo3BFAwOYXeRg/q7UVVvA6cacEIXEs3FgBfK1CGtW1ptElqs7wsx+t9A== + dependencies: + "@babel/runtime" "^7.29.7 || ^8.0.0" + "@floating-ui/utils" "^0.2.12" + reselect "^5.3.0" + use-sync-external-store "^1.7.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1248,7 +1263,7 @@ find-root "^1.1.0" source-map "^0.7.2" -"@emotion/cache@^11.13.5", "@emotion/cache@^11.14.0": +"@emotion/cache@^11.14.0": version "11.14.0" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== @@ -1408,6 +1423,11 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.11.tgz#a269e055e40e2f45873bae9d1a2fdccbd314ea3f" integrity sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg== +"@floating-ui/utils@^0.2.12": + version "0.2.12" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.12.tgz#afefe785949f16ac4cdd1e695935a321572dd56a" + integrity sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww== + "@fontsource/roboto@^5.1.1": version "5.2.10" resolved "https://registry.yarnpkg.com/@fontsource/roboto/-/roboto-5.2.10.tgz#b985d34de475913b41d0fb57e2dcd0b16ab9ecb5" @@ -1977,153 +1997,147 @@ resolved "https://registry.yarnpkg.com/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz#775374306116d51c0c500b8c4face0f9a04752d8" integrity sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g== -"@mui/core-downloads-tracker@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.5.0.tgz#e9f7049d7e7bb1ee05839f7a0ce813755f137432" - integrity sha512-LGb8t8i6M2ZtS3Drn3GbTI1DVhDY6FJ9crEey2lZ0aN2EMZo8IZBZj9wRf4vqbZHaWjsYgtbOnJw5V8UWbmK2Q== +"@mui/core-downloads-tracker@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-9.5.0.tgz#42d07b201a43020a579f448549462d60fe03db82" + integrity sha512-PErEpl3Lp+1ZqWYKI7GQU8XSiciAFmLbUAZ7IoaUL598HLy1UAFuEUMEJu8yAS1v8vkXYzWprMVZzky4UwXoOA== -"@mui/icons-material@^6.4.3": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-6.5.0.tgz#26bfa7c8574cc4e57c2f2835bfd6b1efa7f310fa" - integrity sha512-VPuPqXqbBPlcVSA0BmnoE4knW4/xG6Thazo8vCLWkOKusko6DtwFV6B665MMWJ9j0KFohTIf3yx2zYtYacvG1g== +"@mui/icons-material@^9.0.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-9.5.0.tgz#06bde090e09dec3219e0b1eef31a0e488bd056f0" + integrity sha512-dahtVaqnRUIBgaZ4WC9EdP+LgJ5d2rslASYIX+nDFG6+ssUiM11jQ+Gd1wH8vhUGoNA9ES40MYics5BI8zJFXQ== dependencies: - "@babel/runtime" "^7.26.0" + "@babel/runtime" "^7.29.7 || ^8.0.5" -"@mui/material@^6.4.3": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-6.5.0.tgz#c7eccfe260030433c51b7aec17574bae4504cacc" - integrity sha512-yjvtXoFcrPLGtgKRxFaH6OQPtcLPhkloC0BML6rBG5UeldR0nPULR/2E2BfXdo5JNV7j7lOzrrLX2Qf/iSidow== +"@mui/material@^9.0.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-9.5.0.tgz#914e2ed4013bd33801430d0781bf203263cc3ea7" + integrity sha512-QgqvdVjZoKxP8E8SBxYY6LrdV+kw00moXweZQWBbMMdifPKZAGfUaaXhGKIca6fjKnCL6HJIe/AWWCpqNvyHVw== dependencies: - "@babel/runtime" "^7.26.0" - "@mui/core-downloads-tracker" "^6.5.0" - "@mui/system" "^6.5.0" - "@mui/types" "~7.2.24" - "@mui/utils" "^6.4.9" + "@babel/runtime" "^7.29.7 || ^8.0.5" + "@mui/core-downloads-tracker" "^9.5.0" + "@mui/system" "^9.5.0" + "@mui/types" "^9.5.0" + "@mui/utils" "^9.5.0" "@popperjs/core" "^2.11.8" "@types/react-transition-group" "^4.4.12" clsx "^2.1.1" - csstype "^3.1.3" + csstype "^3.2.3" prop-types "^15.8.1" - react-is "^19.0.0" + react-is "^19.3.0" react-transition-group "^4.4.5" -"@mui/private-theming@^6.4.9": - version "6.4.9" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-6.4.9.tgz#0c1d65a638a1740aad0eb715d79e76471abe8175" - integrity sha512-LktcVmI5X17/Q5SkwjCcdOLBzt1hXuc14jYa7NPShog0GBDCDvKtcnP0V7a2s6EiVRlv7BzbWEJzH6+l/zaCxw== +"@mui/private-theming@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-9.5.0.tgz#fe3f6939fdf269438ab74b4a3696d82f72931c7a" + integrity sha512-UHZKySlr4ZJeA5HEhe/Tq1fhsR5573ViKYn7JV80dCVJtgqRQIplRSer1DHPg2Yi22llX7QRhgM0Vtrx4kZHSA== dependencies: - "@babel/runtime" "^7.26.0" - "@mui/utils" "^6.4.9" + "@babel/runtime" "^7.29.7 || ^8.0.5" + "@mui/utils" "^9.5.0" prop-types "^15.8.1" -"@mui/styled-engine@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.5.0.tgz#cf9b3e706517f5f2989df92d2aea0d2917a77c8a" - integrity sha512-8woC2zAqF4qUDSPIBZ8v3sakj+WgweolpyM/FXf8jAx6FMls+IE4Y8VDZc+zS805J7PRz31vz73n2SovKGaYgw== +"@mui/styled-engine@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-9.5.0.tgz#bd6efd941a86a720845d4d99188c51cd8ee2e1c4" + integrity sha512-IX1ceHnZ0bJgzJRWO/Ayl4ME1rNmpWVYwV28yb089UAMR17rJkV1qfr7ApsWQXXPi1oi+2JapJrWQAiAnTlJHQ== dependencies: - "@babel/runtime" "^7.26.0" - "@emotion/cache" "^11.13.5" + "@babel/runtime" "^7.29.7 || ^8.0.5" + "@emotion/cache" "^11.14.0" "@emotion/serialize" "^1.3.3" "@emotion/sheet" "^1.4.0" - csstype "^3.1.3" + csstype "^3.2.3" prop-types "^15.8.1" -"@mui/system@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.5.0.tgz#52751ac4e3a546f53bc34fd2ef2731c28a824b92" - integrity sha512-XcbBYxDS+h/lgsoGe78ExXFZXtuIlSBpn/KsZq8PtZcIkUNJInkuDqcLd2rVBQrDC1u+rvVovdaWPf2FHKJf3w== +"@mui/system@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-9.5.0.tgz#43db6b26b0cedefe4c0e452713a5150d0c9470ec" + integrity sha512-OZuAwvoiaaHpvn0a540VH1DUwwmojJubGfNmO2g+nb2ybNDP4/gF7t7aA6AMduELSuJ5yxwlzyFvUO3CfLv1Yg== dependencies: - "@babel/runtime" "^7.26.0" - "@mui/private-theming" "^6.4.9" - "@mui/styled-engine" "^6.5.0" - "@mui/types" "~7.2.24" - "@mui/utils" "^6.4.9" + "@babel/runtime" "^7.29.7 || ^8.0.5" + "@mui/private-theming" "^9.5.0" + "@mui/styled-engine" "^9.5.0" + "@mui/types" "^9.5.0" + "@mui/utils" "^9.5.0" clsx "^2.1.1" - csstype "^3.1.3" + csstype "^3.2.3" prop-types "^15.8.1" -"@mui/types@^7.4.12": - version "7.4.12" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.4.12.tgz#e4eba37a7506419ea5c5e0604322ba82b271bf46" - integrity sha512-iKNAF2u9PzSIj40CjvKJWxFXJo122jXVdrmdh0hMYd+FR+NuJMkr/L88XwWLCRiJ5P1j+uyac25+Kp6YC4hu6w== +"@mui/types@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-9.5.0.tgz#a317cd2685505ac6194210b03c2c946f3923b5d1" + integrity sha512-O0S6xS80qEQqW2CYNrd4GlBEQ1xpMOHZ5b4zO/DaLu6NZmtthM6smEg0Gz/u9gX5vL+8NB3EiBIxmxSCcG590Q== dependencies: - "@babel/runtime" "^7.28.6" + "@babel/runtime" "^7.29.7 || ^8.0.5" -"@mui/types@~7.2.24": - version "7.2.24" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.24.tgz#5eff63129d9c29d80bbf2d2e561bd0690314dec2" - integrity sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw== - -"@mui/utils@^5.16.6 || ^6.0.0 || ^7.0.0": - version "7.3.10" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-7.3.10.tgz#b74050131ca9022c0815d16f54f1a6d757ab343d" - integrity sha512-7y2eIfy0h7JPz+Yy4pS+wgV68d46PuuxDqKBN4Q8VlPQSsCAGwroMCV6xWyc7g9dvEp8ZNFsknc59GHWO+r6Ow== +"@mui/utils@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-9.5.0.tgz#984e40fbbf2f17ba98a4d9268c5e855330e7041f" + integrity sha512-8m0LfSgE2pj58znY3kZ+anwRKbnBkcu/7AJPA8L/77wEjN0QnpX4/zRAccyplp1VEUnMsUBADeTRin5Mkf7epA== dependencies: - "@babel/runtime" "^7.28.6" - "@mui/types" "^7.4.12" + "@babel/runtime" "^7.29.7 || ^8.0.5" + "@mui/types" "^9.5.0" "@types/prop-types" "^15.7.15" clsx "^2.1.1" prop-types "^15.8.1" - react-is "^19.2.3" - -"@mui/utils@^6.4.9": - version "6.4.9" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.4.9.tgz#b0df01daa254c7c32a1a30b30a5179e19ef071a7" - integrity sha512-Y12Q9hbK9g+ZY0T3Rxrx9m2m10gaphDuUMgWxyV5kNJevVxXYCLclYUCC9vXaIk1/NdNDTcW2Yfr2OGvNFNmHg== - dependencies: - "@babel/runtime" "^7.26.0" - "@mui/types" "~7.2.24" - "@types/prop-types" "^15.7.14" + react-is "^19.3.0" + +"@mui/x-data-grid@^9.0.0": + version "9.17.0" + resolved "https://registry.yarnpkg.com/@mui/x-data-grid/-/x-data-grid-9.17.0.tgz#f850e6ae3fd0064abc45af5b59d8fe8275184cf7" + integrity sha512-oSETp3t3tEMeuOPzQYpDMJ0/PbKPos4aK6f8ldC7ufpmMIiiZ8VUkQjWOEJ/gw6NAuMWYxDmNtj3Z+B1k3RXNQ== + dependencies: + "@babel/runtime" "^7.29.7 || ^8.0.0" + "@base-ui/utils" "^0.5.0" + "@mui/utils" "^9.5.0" + "@mui/x-internals" "9.17.0" + "@mui/x-virtualizer" "0.7.5" clsx "^2.1.1" prop-types "^15.8.1" - react-is "^19.0.0" + use-sync-external-store "^1.7.0" -"@mui/x-data-grid@^7.29.13": - version "7.29.13" - resolved "https://registry.yarnpkg.com/@mui/x-data-grid/-/x-data-grid-7.29.13.tgz#3bbba18ef29981c324bd0030496abb8e04e8be06" - integrity sha512-XHrZTvpa61eqSgUIevDzXYfYCbI7cbN/aRxSCaw2cZzQZ/USdpECYbnTEhgw5XgUlvkAK0mItKZmgKM4X7zT+Q== +"@mui/x-date-pickers@^9.0.0": + version "9.17.0" + resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-9.17.0.tgz#8ad4e158392e8763a547bb41602add4da436685c" + integrity sha512-pgD3ieXtJGHeOWUHN9tJchRT7FM6eXxqsLLjCzPvXIpN1cgpHxQYQbPZUApRItmASAi6Bxo9/mHwPmIj1yMcUw== dependencies: - "@babel/runtime" "^7.25.7" - "@mui/utils" "^5.16.6 || ^6.0.0 || ^7.0.0" - "@mui/x-internals" "7.29.0" - clsx "^2.1.1" - prop-types "^15.8.1" - reselect "^5.1.1" - use-sync-external-store "^1.0.0" - -"@mui/x-date-pickers@^7.26.0": - version "7.29.4" - resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-7.29.4.tgz#b8808cb8e28c1d4e528b37b336effc8074e65faf" - integrity sha512-wJ3tsqk/y6dp+mXGtT9czciAMEO5Zr3IIAHg9x6IL0Eqanqy0N3chbmQQZv3iq0m2qUpQDLvZ4utZBUTJdjNzw== - dependencies: - "@babel/runtime" "^7.25.7" - "@mui/utils" "^5.16.6 || ^6.0.0 || ^7.0.0" - "@mui/x-internals" "7.29.0" - "@types/react-transition-group" "^4.4.11" + "@babel/runtime" "^7.29.7 || ^8.0.0" + "@mui/utils" "^9.5.0" + "@mui/x-internals" "9.17.0" + "@types/react-transition-group" "^4.4.12" clsx "^2.1.1" prop-types "^15.8.1" react-transition-group "^4.4.5" -"@mui/x-internals@7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@mui/x-internals/-/x-internals-7.29.0.tgz#1f353b697ed1bf5594ac549556ade2e6841f4bf5" - integrity sha512-+Gk6VTZIFD70XreWvdXBwKd8GZ2FlSCuecQFzm6znwqXg1ZsndavrhG9tkxpxo2fM1Zf7Tk8+HcOO0hCbhTQFA== +"@mui/x-internals@9.17.0": + version "9.17.0" + resolved "https://registry.yarnpkg.com/@mui/x-internals/-/x-internals-9.17.0.tgz#6c98a0774659a41a2fdd2b510abe0591e1515a7d" + integrity sha512-rk9yNkDR/ty/zpzdObwqLbax3V1lNqz5inat5IVC3KHWj64K9uEBoHLxMBZNtQd8WtPfHR7RS2KjuAI35rcusg== dependencies: - "@babel/runtime" "^7.25.7" - "@mui/utils" "^5.16.6 || ^6.0.0 || ^7.0.0" + "@babel/runtime" "^7.29.7 || ^8.0.0" + "@base-ui/utils" "^0.5.0" + "@mui/utils" "^9.5.0" -"@mui/x-tree-view@^7.26.0": - version "7.29.10" - resolved "https://registry.yarnpkg.com/@mui/x-tree-view/-/x-tree-view-7.29.10.tgz#aa41547f3cf52a447195a8a2777eca158c630032" - integrity sha512-/ZcM582yIaQN2PmadIlQYRJzc3yXV7bh463J4GHtTmFw+PEjzUfzETBWe3VxmU3EPgIFzVQPjqAAJwylmQSJOg== +"@mui/x-tree-view@^9.0.0": + version "9.17.0" + resolved "https://registry.yarnpkg.com/@mui/x-tree-view/-/x-tree-view-9.17.0.tgz#db098569b3fda98de21045ff2a08889ab996c64d" + integrity sha512-QOZvbWG/ZIa07n53clqT1wQ9bJvlQdUGl28AmOihWh7w7lkBPFtn2WqiBsFmYoDi6N50CmzQ4/RBj291W+6Pjg== dependencies: - "@babel/runtime" "^7.25.7" - "@mui/utils" "^5.16.6 || ^6.0.0 || ^7.0.0" - "@mui/x-internals" "7.29.0" - "@types/react-transition-group" "^4.4.11" + "@babel/runtime" "^7.29.7 || ^8.0.0" + "@base-ui/utils" "^0.5.0" + "@mui/utils" "^9.5.0" + "@mui/x-internals" "9.17.0" clsx "^2.1.1" prop-types "^15.8.1" - react-transition-group "^4.4.5" + +"@mui/x-virtualizer@0.7.5": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@mui/x-virtualizer/-/x-virtualizer-0.7.5.tgz#41ddc2f55eb80dc183dd5ce68a6c843e3f025f6f" + integrity sha512-f7ImV9WshZLi9mqkqMD0cyx+LLhxox32KGWltp0UpgFLL29fhCIa05nserf4oZm6iNdJfHu3kNK6u2zw0uGX5w== + dependencies: + "@babel/runtime" "^7.29.7 || ^8.0.0" + "@base-ui/utils" "^0.5.0" + "@mui/utils" "^9.5.0" + "@mui/x-internals" "9.17.0" "@napi-rs/wasm-runtime@^0.2.11": version "0.2.12" @@ -2668,7 +2682,7 @@ picocolors "1.1.1" pretty-format "^27.0.2" -"@testing-library/dom@^8.0.0": +"@testing-library/dom@^8.5.0": version "8.20.1" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.1.tgz#2e52a32e46fc88369eef7eef634ac2a192decd9f" integrity sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g== @@ -2694,14 +2708,14 @@ picocolors "^1.1.1" redent "^3.0.0" -"@testing-library/react@12.1.5": - version "12.1.5" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-12.1.5.tgz#bb248f72f02a5ac9d949dea07279095fa577963b" - integrity sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg== +"@testing-library/react@^13.4.0": + version "13.4.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.4.0.tgz#6a31e3bf5951615593ad984e96b9e5e2d9380966" + integrity sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw== dependencies: "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^8.0.0" - "@types/react-dom" "<18.0.0" + "@testing-library/dom" "^8.5.0" + "@types/react-dom" "^18.0.0" "@testing-library/user-event@^14.5.2": version "14.6.1" @@ -2990,7 +3004,7 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== -"@types/prop-types@*", "@types/prop-types@^15.7.14", "@types/prop-types@^15.7.15": +"@types/prop-types@*", "@types/prop-types@^15.7.15": version "15.7.15" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== @@ -3005,17 +3019,10 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/react-dom@16.9.24": - version "16.9.24" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.24.tgz#4d193d7d011267fca842e8a10a2d738f92ec5c30" - integrity sha512-Gcmq2JTDheyWn/1eteqyzzWKSqDjYU6KYsIvH7thb7CR5OYInAWOX+7WnKf6PaU/cbdOc4szJItcDEJO7UGmfA== - dependencies: - "@types/react" "^16" - -"@types/react-dom@<18.0.0": - version "17.0.26" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.26.tgz#fa7891ba70fd39ddbaa7e85b6ff9175bb546bc1b" - integrity sha512-Z+2VcYXJwOqQ79HreLU/1fyQ88eXSSFh6I3JdrEHQIfYSI0kCQpTGvOrbE6jFGGYXKsHuwY9tBa/w5Uo6KzrEg== +"@types/react-dom@^18.0.0": + version "18.3.7" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.7.tgz#b89ddf2cd83b4feafcc4e2ea41afdfb95a0d194f" + integrity sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ== "@types/react-redux@^7.1.20": version "7.1.34" @@ -3027,7 +3034,7 @@ hoist-non-react-statics "^3.3.0" redux "^4.0.0" -"@types/react-transition-group@^4.4.11", "@types/react-transition-group@^4.4.12": +"@types/react-transition-group@^4.4.12": version "4.4.12" resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== @@ -3039,13 +3046,12 @@ dependencies: csstype "^3.2.2" -"@types/react@^16", "@types/react@^16.9.32": - version "16.14.69" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.69.tgz#5e4a0a70bdeca9e64498e1a7f2d7f2b06b881b09" - integrity sha512-NdnAamzkxLX9LBssSdt9Q0tQ3LR94hYxotI4/sRUs1vHKFXaDx9xDbK8S4wuw5bwrxiiXbTYyhKeITtFnwDvEA== +"@types/react@^18.0.0": + version "18.3.31" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.31.tgz#b5e95e28ffcceab8d982f33f2eb076e17653c2a4" + integrity sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw== dependencies: "@types/prop-types" "*" - "@types/scheduler" "^0.16" csstype "^3.2.2" "@types/responselike@^1.0.0": @@ -3060,11 +3066,6 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== -"@types/scheduler@^0.16": - version "0.16.8" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" - integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== - "@types/send@*": version "1.2.1" resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" @@ -5110,7 +5111,7 @@ csstype@^2.5.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== -csstype@^3.0.2, csstype@^3.1.3, csstype@^3.2.2: +csstype@^3.0.2, csstype@^3.2.2, csstype@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== @@ -9076,10 +9077,10 @@ open@^10.0.3: is-inside-container "^1.0.0" wsl-utils "^0.1.0" -openstack-uicore-foundation@5.0.73-beta.1: - version "5.0.73-beta.1" - resolved "https://registry.yarnpkg.com/openstack-uicore-foundation/-/openstack-uicore-foundation-5.0.73-beta.1.tgz#95274f8a31004e38d3c201d778f5d7f05928c8e5" - integrity sha512-+UTWgAy7DTZB3bToiASYo1ggtnEsG1MDNTc6Jr43l+HXUbB8NBStHrjR+xwuMKs4YnmSIpCfi8U26yjG029Ggw== +openstack-uicore-foundation@6.0.0-beta.8: + version "6.0.0-beta.8" + resolved "https://registry.yarnpkg.com/openstack-uicore-foundation/-/openstack-uicore-foundation-6.0.0-beta.8.tgz#5c3eb6de20cd9eb1d223baca75b6d709f29b0c46" + integrity sha512-lPvewQDItZxp/CD9iYB+70fGWJ/rPvhgOVXxbj+UMvXRhhjNzdazH7e93CMS89r4F3I3V9hWVH2ox/IzS4BCzQ== dependencies: use-sync-external-store "^1.6.0" @@ -9976,15 +9977,13 @@ react-dnd@^16.0.0: fast-deep-equal "^3.1.3" hoist-non-react-statics "^3.3.2" -react-dom@^16.13.1: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" - integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== +react-dom@^18.0.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" + scheduler "^0.23.2" react-dropzone@^4.2.13: version "4.3.0" @@ -10045,10 +10044,10 @@ react-is@^18.3.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== -react-is@^19.0.0, react-is@^19.2.3: - version "19.2.5" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.2.5.tgz#7e7b54143e9313fed787b23fd4295d5a23872ad9" - integrity sha512-Dn0t8IQhCmeIT3wu+Apm1/YVsJXsGWi6k4sPdnBIdqMVtHtv0IGi6dcpNpNkNac0zB2uUAqNX3MHzN8c+z2rwQ== +react-is@^19.3.0: + version "19.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.3.1.tgz#81f7f7e431fc9b5bd9781b0a9f19997f08dee51b" + integrity sha512-RRieF6IyxQBkcK6pP8xOHprLTPW6QjRkbGdImtqNme+/hYVwCZkLQLdlZGOhUqXwkS9IEynaGvPJtv6XB/cz0Q== react-lifecycles-compat@^3.0.4: version "3.0.4" @@ -10197,7 +10196,7 @@ react-window@^1.8.10: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" -react@^16.1.0, react@^16.13.1: +react@^16.1.0: version "16.14.0" resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== @@ -10206,6 +10205,13 @@ react@^16.1.0, react@^16.13.1: object-assign "^4.1.1" prop-types "^15.6.2" +react@^18.0.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== + dependencies: + loose-envify "^1.1.0" + readable-stream@^2.0.1, readable-stream@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" @@ -10402,7 +10408,7 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -reselect@^5.1.1: +reselect@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.3.0.tgz#0a3e3ed4436bdf2ab7c5e0f392dab2c062595d61" integrity sha512-XGoLeRAVzUTcJ1qkxPQhDJyIZ5d6zzZD9nT7AEZOaaU9UbWclhycElmhO+VD5bFeLuzhPBaOV2oXC8uG35ZSpg== @@ -10599,13 +10605,12 @@ scheduler@0.25.0-rc-603e6108-20241029: resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-603e6108-20241029.tgz#684dd96647e104d23e0d29a37f18937daf82df19" integrity sha512-pFwF6H1XrSdYYNLfOcGlM28/j8CGLu8IvdrxqhjWULe2bPcKiKW4CV+OWqR/9fT52mywx65l7ysNkjLKBda7eA== -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" schema-utils@^2.6.5: version "2.7.1" @@ -11751,16 +11756,16 @@ use-memo-one@^1.1.1: resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== -use-sync-external-store@^1.0.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.7.0.tgz#6dcb66ef569e02f186af6b3d575f414ce746e18f" - integrity sha512-6L+EeigHMQhdaIPNIFUKwfWJSwWFQ8gJbJ2DLOs5sDIegTwR9fRxvnM3uciHKjIZhFz+KAv2emhWMRvDmMcY8A== - use-sync-external-store@^1.6.0: version "1.6.0" resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz#b174bfa65cb2b526732d9f2ac0a408027876f32d" integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w== +use-sync-external-store@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.7.0.tgz#6dcb66ef569e02f186af6b3d575f414ce746e18f" + integrity sha512-6L+EeigHMQhdaIPNIFUKwfWJSwWFQ8gJbJ2DLOs5sDIegTwR9fRxvnM3uciHKjIZhFz+KAv2emhWMRvDmMcY8A== + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" From 7de6373cda92bb9115e2907a4a29d03d21abeb5f Mon Sep 17 00:00:00 2001 From: Santiago Palenque Date: Fri, 12 Jun 2026 11:41:27 -0300 Subject: [PATCH 02/22] chore(codemod): apply @mui/codemod deprecations/autocomplete-props 12 files changed (4 Autocomplete source files + test snapshots). Co-Authored-By: Claude Sonnet 4.6 --- .../mui/formik-inputs/mui-formik-async-select.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/mui/formik-inputs/mui-formik-async-select.js b/src/components/mui/formik-inputs/mui-formik-async-select.js index 54474c7c5..dbd90dd6e 100644 --- a/src/components/mui/formik-inputs/mui-formik-async-select.js +++ b/src/components/mui/formik-inputs/mui-formik-async-select.js @@ -126,15 +126,18 @@ const MuiFormikAsyncAutocomplete = ({ error={Boolean(error)} helperText={error || ""} slotProps={{ + ...params.slotProps, + input: { - ...params.InputProps, + ...params.slotProps.input, endAdornment: ( <> {loading && } - {params.InputProps?.endAdornment} + {params.slotProps.input?.endAdornment} ) }, + inputLabel: { shrink: false } }} sx={{ From 0cd0329eca4414daa119dc3485a39abd847a40d1 Mon Sep 17 00:00:00 2001 From: Santiago Palenque Date: Fri, 12 Jun 2026 11:43:29 -0300 Subject: [PATCH 03/22] chore(codemod): apply @mui/codemod deprecations/tooltip-props MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 0 source file changes — no deprecated Tooltip props (componentsProps/PopperProps) found in src. Codemod ran against 8 test files but only made formatting changes that prettier reverted. Co-Authored-By: Claude Sonnet 4.6 From febebf05db16c7eb5891764123a64edce549b315 Mon Sep 17 00:00:00 2001 From: Santiago Palenque Date: Fri, 12 Jun 2026 12:06:48 -0300 Subject: [PATCH 04/22] chore(codemod): apply @mui/codemod deprecations/list-item-props MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 0 source file changes — no deprecated ListItem props (ContainerComponent/ ContainerProps) found in src. Codemod touched 8 test files with formatting changes only, reverted by prettier. Co-Authored-By: Claude Sonnet 4.6 From 857bf94d5ce061823c971d6f09c2715fa58344dd Mon Sep 17 00:00:00 2001 From: Santiago Palenque Date: Fri, 12 Jun 2026 12:09:48 -0300 Subject: [PATCH 05/22] chore(codemod): apply @mui/codemod deprecations/divider-props MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 0 source file changes — no deprecated Divider props found in src (as expected). Codemod touched 8 test files with formatting changes only, reverted by prettier. Co-Authored-By: Claude Sonnet 4.6 From a6df6c2dfae98b5fbf84f26fb06ac4d0b753b1d5 Mon Sep 17 00:00:00 2001 From: Santiago Palenque Date: Fri, 12 Jun 2026 13:40:36 -0300 Subject: [PATCH 06/22] fix(tests): fix React 18 + testing-library v13 test failures - testSetupFile.js: remove useLazyRipple mock (MUI v9 internal path gone); clean up stale React 16 comments in console suppressors - Multi-line Grid2 imports: fix remaining files where Grid2 was on its own line inside a multi-line import block (missed by earlier sed patterns) - global-template-popup.test.js: remove outer act() wrappers around multi-click blocks so React 18 flushes isSaving between clicks - form-template-popup.test.js: same fix for duplicate-save guard - customized-form-popup.test.js: same fix for duplicate-save guard - process-request-popup.test.js: add explicit microtask flush after render so fetchSponsorByCompany resolves before form submit click Co-Authored-By: Claude Sonnet 4.6 --- .../components/EditAddressDialog.jsx | 2 +- .../components/EditClientDialog.jsx | 2 +- src/components/mui/ClientCard/index.jsx | 2 +- .../mui/formik-inputs/item-price-tiers.js | 2 +- .../select-page-template-dialog/index.js | 2 +- .../components/media-file-type-dialog.js | 2 +- .../add-form-template-item-popup.js | 2 +- .../form-template-from-duplicate-popup.js | 2 +- .../form-templates/form-template-popup.js | 2 +- .../form-templates/sponsor-inventory-popup.js | 2 +- .../page-template-popup/index.js | 2 +- src/pages/sponsors/popup/add-sponsor-popup.js | 2 +- src/pages/sponsors/popup/edit-tier-popup.js | 2 +- ...nsor-form-add-item-from-inventory-popup.js | 2 +- .../__tests__/form-template-popup.test.js | 8 +-- .../form-template/form-template-form.js | 2 +- .../__tests__/global-template-popup.test.js | 25 +++++----- .../select-templates-dialog.js | 2 +- .../edit-badge-scan-popup.js | 2 +- .../components/select-form-dialog/index.js | 2 +- .../add-sponsor-form-template-popup/index.js | 2 +- .../__tests__/customized-form-popup.test.js | 8 +-- .../customized-form/customized-form.js | 2 +- .../add-extra-question-popup.js | 2 +- .../sponsor-general-form/add-tier-popup.js | 2 +- .../manage-tier-addons-popup.js | 2 +- .../add-sponsor-page-template-popup/index.js | 2 +- .../components/sponsor-user-form.js | 2 +- .../__tests__/process-request-popup.test.js | 10 ++-- .../edit-user-popup/sponsor-user-form.js | 2 +- .../components/process-request-form.js | 2 +- .../components/sponsorship-dialog.js | 2 +- testSetupFile.js | 49 ++----------------- 33 files changed, 60 insertions(+), 96 deletions(-) diff --git a/src/components/mui/ClientCard/components/EditAddressDialog.jsx b/src/components/mui/ClientCard/components/EditAddressDialog.jsx index 805fff9c1..16243a921 100644 --- a/src/components/mui/ClientCard/components/EditAddressDialog.jsx +++ b/src/components/mui/ClientCard/components/EditAddressDialog.jsx @@ -22,7 +22,7 @@ import { DialogActions, DialogContent, DialogTitle, - Grid2 + Grid as Grid2 } from "@mui/material"; import MuiFormikTextField from "openstack-uicore-foundation/lib/components/mui/formik-inputs/textfield"; diff --git a/src/components/mui/ClientCard/components/EditClientDialog.jsx b/src/components/mui/ClientCard/components/EditClientDialog.jsx index 9f63190c6..729b12445 100644 --- a/src/components/mui/ClientCard/components/EditClientDialog.jsx +++ b/src/components/mui/ClientCard/components/EditClientDialog.jsx @@ -22,7 +22,7 @@ import { DialogActions, DialogContent, DialogTitle, - Grid2 + Grid as Grid2 } from "@mui/material"; import MuiFormikTextField from "openstack-uicore-foundation/lib/components/mui/formik-inputs/textfield"; diff --git a/src/components/mui/ClientCard/index.jsx b/src/components/mui/ClientCard/index.jsx index bc6ce69be..59af069d5 100644 --- a/src/components/mui/ClientCard/index.jsx +++ b/src/components/mui/ClientCard/index.jsx @@ -18,7 +18,7 @@ import { Card, CardContent, Divider, - Grid2, + Grid as Grid2, IconButton, Typography } from "@mui/material"; diff --git a/src/components/mui/formik-inputs/item-price-tiers.js b/src/components/mui/formik-inputs/item-price-tiers.js index 2a98aec16..875e5c3af 100644 --- a/src/components/mui/formik-inputs/item-price-tiers.js +++ b/src/components/mui/formik-inputs/item-price-tiers.js @@ -5,7 +5,7 @@ import { Box, Checkbox, FormControlLabel, - Grid2, + Grid as Grid2, InputLabel, TextField } from "@mui/material"; diff --git a/src/components/select-page-template-dialog/index.js b/src/components/select-page-template-dialog/index.js index dadac1f65..bfc7e63d5 100644 --- a/src/components/select-page-template-dialog/index.js +++ b/src/components/select-page-template-dialog/index.js @@ -11,7 +11,7 @@ import { DialogTitle, Divider, FormControlLabel, - Grid2, + Grid as Grid2, IconButton, Radio, Typography diff --git a/src/pages/media_file_types/components/media-file-type-dialog.js b/src/pages/media_file_types/components/media-file-type-dialog.js index 7ccfa97de..49afd872f 100644 --- a/src/pages/media_file_types/components/media-file-type-dialog.js +++ b/src/pages/media_file_types/components/media-file-type-dialog.js @@ -13,7 +13,7 @@ import { Box, IconButton, Divider, - Grid2 + Grid as Grid2 } from "@mui/material"; import CloseIcon from "@mui/icons-material/Close"; import MuiFormikTextField from "openstack-uicore-foundation/lib/components/mui/formik-inputs/textfield"; diff --git a/src/pages/sponsors-global/form-templates/add-form-template-item-popup.js b/src/pages/sponsors-global/form-templates/add-form-template-item-popup.js index 0ea3a694f..3d7c65b36 100644 --- a/src/pages/sponsors-global/form-templates/add-form-template-item-popup.js +++ b/src/pages/sponsors-global/form-templates/add-form-template-item-popup.js @@ -12,7 +12,7 @@ import { DialogTitle, Divider, FormControlLabel, - Grid2, + Grid as Grid2, IconButton, Typography } from "@mui/material"; diff --git a/src/pages/sponsors-global/form-templates/form-template-from-duplicate-popup.js b/src/pages/sponsors-global/form-templates/form-template-from-duplicate-popup.js index 9e9ed0f59..f57be35d9 100644 --- a/src/pages/sponsors-global/form-templates/form-template-from-duplicate-popup.js +++ b/src/pages/sponsors-global/form-templates/form-template-from-duplicate-popup.js @@ -11,7 +11,7 @@ import { DialogTitle, Divider, FormControlLabel, - Grid2, + Grid as Grid2, IconButton, Typography } from "@mui/material"; diff --git a/src/pages/sponsors-global/form-templates/form-template-popup.js b/src/pages/sponsors-global/form-templates/form-template-popup.js index a3463bfb8..ac912b1e6 100644 --- a/src/pages/sponsors-global/form-templates/form-template-popup.js +++ b/src/pages/sponsors-global/form-templates/form-template-popup.js @@ -11,7 +11,7 @@ import { Box, IconButton, Divider, - Grid2 + Grid as Grid2 } from "@mui/material"; import CloseIcon from "@mui/icons-material/Close"; import { useFormik, FormikProvider } from "formik"; diff --git a/src/pages/sponsors-global/form-templates/sponsor-inventory-popup.js b/src/pages/sponsors-global/form-templates/sponsor-inventory-popup.js index ad8d2944a..b846b31e6 100644 --- a/src/pages/sponsors-global/form-templates/sponsor-inventory-popup.js +++ b/src/pages/sponsors-global/form-templates/sponsor-inventory-popup.js @@ -14,7 +14,7 @@ import { Box, IconButton, Divider, - Grid2, + Grid as Grid2, FormHelperText } from "@mui/material"; import CloseIcon from "@mui/icons-material/Close"; diff --git a/src/pages/sponsors-global/page-templates/page-template-popup/index.js b/src/pages/sponsors-global/page-templates/page-template-popup/index.js index f2983c195..4e9c91739 100644 --- a/src/pages/sponsors-global/page-templates/page-template-popup/index.js +++ b/src/pages/sponsors-global/page-templates/page-template-popup/index.js @@ -11,7 +11,7 @@ import { Divider, FormControl, FormHelperText, - Grid2, + Grid as Grid2, IconButton, Typography } from "@mui/material"; diff --git a/src/pages/sponsors/popup/add-sponsor-popup.js b/src/pages/sponsors/popup/add-sponsor-popup.js index 0d06b722a..138ff8c64 100644 --- a/src/pages/sponsors/popup/add-sponsor-popup.js +++ b/src/pages/sponsors/popup/add-sponsor-popup.js @@ -11,7 +11,7 @@ import { Button, IconButton, Divider, - Grid2, + Grid as Grid2, InputLabel, Box } from "@mui/material"; diff --git a/src/pages/sponsors/popup/edit-tier-popup.js b/src/pages/sponsors/popup/edit-tier-popup.js index 01aeaa18d..7d1de6d10 100644 --- a/src/pages/sponsors/popup/edit-tier-popup.js +++ b/src/pages/sponsors/popup/edit-tier-popup.js @@ -11,7 +11,7 @@ import { Button, IconButton, Divider, - Grid2, + Grid as Grid2, Typography, MenuItem, InputLabel, diff --git a/src/pages/sponsors/sponsor-form-item-list-page/components/sponsor-form-add-item-from-inventory-popup.js b/src/pages/sponsors/sponsor-form-item-list-page/components/sponsor-form-add-item-from-inventory-popup.js index cd09fa780..c974b0e89 100644 --- a/src/pages/sponsors/sponsor-form-item-list-page/components/sponsor-form-add-item-from-inventory-popup.js +++ b/src/pages/sponsors/sponsor-form-item-list-page/components/sponsor-form-add-item-from-inventory-popup.js @@ -10,7 +10,7 @@ import { DialogTitle, Divider, FormControlLabel, - Grid2, + Grid as Grid2, IconButton, Typography } from "@mui/material"; diff --git a/src/pages/sponsors/sponsor-forms-list-page/components/form-template/__tests__/form-template-popup.test.js b/src/pages/sponsors/sponsor-forms-list-page/components/form-template/__tests__/form-template-popup.test.js index 71c4e2aa5..a5203a9db 100644 --- a/src/pages/sponsors/sponsor-forms-list-page/components/form-template/__tests__/form-template-popup.test.js +++ b/src/pages/sponsors/sponsor-forms-list-page/components/form-template/__tests__/form-template-popup.test.js @@ -81,10 +81,10 @@ describe("FormTemplatePopup", () => { const button = screen.getByRole("button", { name: "submit-form-template" }); - await act(async () => { - await userEvent.click(button); - await userEvent.click(button); - }); + // React 18 auto-batches state updates; remove outer act() so each click + // flushes isSaving before the next click is processed. + await userEvent.click(button); + await userEvent.click(button); expect(saveFormTemplate).toHaveBeenCalledTimes(1); diff --git a/src/pages/sponsors/sponsor-forms-list-page/components/form-template/form-template-form.js b/src/pages/sponsors/sponsor-forms-list-page/components/form-template/form-template-form.js index 148b0a500..504c97a40 100644 --- a/src/pages/sponsors/sponsor-forms-list-page/components/form-template/form-template-form.js +++ b/src/pages/sponsors/sponsor-forms-list-page/components/form-template/form-template-form.js @@ -5,7 +5,7 @@ import { DialogActions, DialogContent, Divider, - Grid2, + Grid as Grid2, InputLabel, Typography } from "@mui/material"; diff --git a/src/pages/sponsors/sponsor-forms-list-page/components/global-template/__tests__/global-template-popup.test.js b/src/pages/sponsors/sponsor-forms-list-page/components/global-template/__tests__/global-template-popup.test.js index 4d043adbf..b03c0c5be 100644 --- a/src/pages/sponsors/sponsor-forms-list-page/components/global-template/__tests__/global-template-popup.test.js +++ b/src/pages/sponsors/sponsor-forms-list-page/components/global-template/__tests__/global-template-popup.test.js @@ -65,15 +65,14 @@ describe("GlobalTemplatePopup", () => { initialState: {} }); - await act(async () => { - await userEvent.click( - screen.getByRole("button", { name: "go-sponsorships" }) - ); - await userEvent.click( - screen.getByRole("button", { name: "apply-sponsorships" }) - ); - await Promise.resolve(); - }); + // React 18 auto-batches state updates; remove outer act() so setStage() + // flushes before the second click queries the DOM for apply-sponsorships. + await userEvent.click( + screen.getByRole("button", { name: "go-sponsorships" }) + ); + await userEvent.click( + screen.getByRole("button", { name: "apply-sponsorships" }) + ); expect(cloneGlobalTemplate).toHaveBeenCalledTimes(1); expect(onClose).not.toHaveBeenCalled(); @@ -129,10 +128,10 @@ describe("GlobalTemplatePopup", () => { const applyButton = screen.getByRole("button", { name: "apply-sponsorships" }); - await act(async () => { - await userEvent.click(applyButton); - await userEvent.click(applyButton); - }); + // React 18 auto-batches state updates; remove outer act() so isSaving + // flushes to true after the first click before the second fires. + await userEvent.click(applyButton); + await userEvent.click(applyButton); expect(cloneGlobalTemplate).toHaveBeenCalledTimes(1); diff --git a/src/pages/sponsors/sponsor-forms-list-page/components/global-template/select-templates-dialog.js b/src/pages/sponsors/sponsor-forms-list-page/components/global-template/select-templates-dialog.js index 908070463..31168d302 100644 --- a/src/pages/sponsors/sponsor-forms-list-page/components/global-template/select-templates-dialog.js +++ b/src/pages/sponsors/sponsor-forms-list-page/components/global-template/select-templates-dialog.js @@ -11,7 +11,7 @@ import { DialogTitle, Divider, FormControlLabel, - Grid2, + Grid as Grid2, IconButton, Typography } from "@mui/material"; diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-badge-scans/edit-badge-scan-popup.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-badge-scans/edit-badge-scan-popup.js index 16e0516cf..7bd7653f1 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-badge-scans/edit-badge-scan-popup.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-badge-scans/edit-badge-scan-popup.js @@ -11,7 +11,7 @@ import { Button, IconButton, Divider, - Grid2, + Grid as Grid2, Typography, InputLabel, Box diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/index.js index b9772abc5..e1355bc70 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/index.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/index.js @@ -11,7 +11,7 @@ import { DialogTitle, Divider, FormControlLabel, - Grid2, + Grid as Grid2, IconButton, Radio, Typography diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/add-sponsor-form-template-popup/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/add-sponsor-form-template-popup/index.js index ac2232962..b98f7d2f5 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/add-sponsor-form-template-popup/index.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/add-sponsor-form-template-popup/index.js @@ -12,7 +12,7 @@ import { DialogTitle, Divider, FormControlLabel, - Grid2, + Grid as Grid2, IconButton, Typography } from "@mui/material"; diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/__tests__/customized-form-popup.test.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/__tests__/customized-form-popup.test.js index 42cacff58..e48eabde4 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/__tests__/customized-form-popup.test.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/__tests__/customized-form-popup.test.js @@ -129,10 +129,10 @@ describe("CustomizedFormPopup", () => { const button = screen.getByRole("button", { name: "submit-customized-form" }); - await act(async () => { - await userEvent.click(button); - await userEvent.click(button); - }); + // React 18 auto-batches state updates; remove outer act() so each click + // flushes isSaving before the next click is processed. + await userEvent.click(button); + await userEvent.click(button); expect(saveSponsorCustomizedForm).toHaveBeenCalledTimes(1); diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form.js index e47e7511d..722c4a8f7 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form.js @@ -5,7 +5,7 @@ import { DialogActions, DialogContent, Divider, - Grid2, + Grid as Grid2, InputLabel, Typography } from "@mui/material"; diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/add-extra-question-popup.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/add-extra-question-popup.js index e09689c70..35ca3c1e8 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/add-extra-question-popup.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/add-extra-question-popup.js @@ -12,7 +12,7 @@ import { Button, IconButton, Divider, - Grid2, + Grid as Grid2, Typography, InputLabel, Box, diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/add-tier-popup.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/add-tier-popup.js index f9e75cafc..d885b2cee 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/add-tier-popup.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/add-tier-popup.js @@ -11,7 +11,7 @@ import { Button, IconButton, Divider, - Grid2, + Grid as Grid2, Typography, InputLabel, Box diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/manage-tier-addons-popup.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/manage-tier-addons-popup.js index 801dbdccc..fcc3be3fa 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/manage-tier-addons-popup.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/manage-tier-addons-popup.js @@ -11,7 +11,7 @@ import { Button, IconButton, Divider, - Grid2, + Grid as Grid2, Typography, InputLabel, Box diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/components/add-sponsor-page-template-popup/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/components/add-sponsor-page-template-popup/index.js index e1149c856..9c2fa2cc1 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/components/add-sponsor-page-template-popup/index.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/components/add-sponsor-page-template-popup/index.js @@ -25,7 +25,7 @@ import { DialogTitle, Divider, FormControlLabel, - Grid2, + Grid as Grid2, IconButton, Typography } from "@mui/material"; diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-users-list-per-sponsor/components/sponsor-user-form.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-users-list-per-sponsor/components/sponsor-user-form.js index 8ae3e81a6..0938743ee 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-users-list-per-sponsor/components/sponsor-user-form.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-users-list-per-sponsor/components/sponsor-user-form.js @@ -5,7 +5,7 @@ import { DialogActions, DialogContent, Divider, - Grid2, + Grid as Grid2, Typography } from "@mui/material"; import T from "i18n-react"; diff --git a/src/pages/sponsors/sponsor-users-list-page/components/__tests__/process-request-popup.test.js b/src/pages/sponsors/sponsor-users-list-page/components/__tests__/process-request-popup.test.js index 2fefdf50a..f80f1c90a 100644 --- a/src/pages/sponsors/sponsor-users-list-page/components/__tests__/process-request-popup.test.js +++ b/src/pages/sponsors/sponsor-users-list-page/components/__tests__/process-request-popup.test.js @@ -121,13 +121,17 @@ describe("ProcessRequestPopup", () => { } ); + // Flush the fetchSponsorByCompany microtask so the form reinitialises with + // sponsor_type=EXISTING before we click submit. + await act(async () => { + await Promise.resolve(); + }); + const processRequestButton = screen.getAllByText( "sponsor_users.process_request.save" )[0]; - await act(async () => { - await userEvent.click(processRequestButton); - }); + await userEvent.click(processRequestButton); expect(sponsorUsersActions.processSponsorUserRequest).toHaveBeenCalled(); expect(onCloseMock).toHaveBeenCalled(); }); diff --git a/src/pages/sponsors/sponsor-users-list-page/components/edit-user-popup/sponsor-user-form.js b/src/pages/sponsors/sponsor-users-list-page/components/edit-user-popup/sponsor-user-form.js index 549ef054e..bb35782ee 100644 --- a/src/pages/sponsors/sponsor-users-list-page/components/edit-user-popup/sponsor-user-form.js +++ b/src/pages/sponsors/sponsor-users-list-page/components/edit-user-popup/sponsor-user-form.js @@ -5,7 +5,7 @@ import { DialogActions, DialogContent, Divider, - Grid2 + Grid as Grid2 } from "@mui/material"; import T from "i18n-react"; import * as yup from "yup"; diff --git a/src/pages/sponsors/sponsor-users-list-page/components/process-request-form.js b/src/pages/sponsors/sponsor-users-list-page/components/process-request-form.js index d9898e442..7b4780ab1 100644 --- a/src/pages/sponsors/sponsor-users-list-page/components/process-request-form.js +++ b/src/pages/sponsors/sponsor-users-list-page/components/process-request-form.js @@ -5,7 +5,7 @@ import { DialogActions, DialogContent, Divider, - Grid2, + Grid as Grid2, InputLabel, Typography } from "@mui/material"; diff --git a/src/pages/sponsorship-types/components/sponsorship-dialog.js b/src/pages/sponsorship-types/components/sponsorship-dialog.js index 737a88aef..4bbde709b 100644 --- a/src/pages/sponsorship-types/components/sponsorship-dialog.js +++ b/src/pages/sponsorship-types/components/sponsorship-dialog.js @@ -13,7 +13,7 @@ import { Box, IconButton, Divider, - Grid2 + Grid as Grid2 } from "@mui/material"; import CloseIcon from "@mui/icons-material/Close"; import MuiFormikTextField from "openstack-uicore-foundation/lib/components/mui/formik-inputs/textfield"; diff --git a/testSetupFile.js b/testSetupFile.js index d4a2d5865..ea616f97c 100644 --- a/testSetupFile.js +++ b/testSetupFile.js @@ -8,30 +8,22 @@ global.TextDecoder = TextDecoder; // stub it to keep that out of test output. window.scrollTo = () => {}; -// Suppress console.error noise from known React 16 + MUI v6 incompatibilities: +// Suppress console.error noise from known jsdom/MUI incompatibilities: // 1. DOM nesting: AccordionSummary renders as