diff --git a/client/src/javascript/app.tsx b/client/src/javascript/app.tsx index e6d330b4..f8b753a5 100644 --- a/client/src/javascript/app.tsx +++ b/client/src/javascript/app.tsx @@ -1,7 +1,7 @@ import {BrowserRouter} from 'react-router-dom'; +import {createRoot} from 'react-dom/client'; import {FC, lazy, Suspense, useEffect} from 'react'; import {observer} from 'mobx-react'; -import ReactDOM from 'react-dom'; import {Route, Routes} from 'react-router'; import {useMedia} from 'react-use'; @@ -82,4 +82,7 @@ const FloodApp: FC = observer(() => { ); }); -ReactDOM.render(, document.getElementById('app')); +const container = document.getElementById('app') as HTMLElement; +const root = createRoot(container); + +root.render(); diff --git a/client/src/javascript/components/general/Tooltip.tsx b/client/src/javascript/components/general/Tooltip.tsx index e5c5e41e..1d497d4f 100644 --- a/client/src/javascript/components/general/Tooltip.tsx +++ b/client/src/javascript/components/general/Tooltip.tsx @@ -18,6 +18,7 @@ type Clearance = Coordinates & { }; interface TooltipProps { + children?: React.ReactNode; align?: Align; anchor?: Align; position?: Position; diff --git a/client/src/javascript/components/modals/Modal.tsx b/client/src/javascript/components/modals/Modal.tsx index d05df5ae..6df5b58f 100644 --- a/client/src/javascript/components/modals/Modal.tsx +++ b/client/src/javascript/components/modals/Modal.tsx @@ -53,7 +53,7 @@ const Modal: FC = (props: ModalProps) => { const activeTab = tabs[activeTabId]; const contentClasses = classnames('modal__content', activeTab.modalContentClasses); - const ModalContentComponent = activeTab.content as FC; + const ModalContentComponent = activeTab.content; const modalContentData = activeTab.props; const modalTabs = ( diff --git a/client/src/javascript/components/modals/ModalTabs.tsx b/client/src/javascript/components/modals/ModalTabs.tsx index 649bf55a..14f130b4 100644 --- a/client/src/javascript/components/modals/ModalTabs.tsx +++ b/client/src/javascript/components/modals/ModalTabs.tsx @@ -4,7 +4,8 @@ import {FC, ReactNode} from 'react'; export interface Tab { id?: string; label: ReactNode; - content: ReactNode | FC; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + content: FC; props?: Record; modalContentClasses?: string; } diff --git a/client/src/javascript/components/modals/settings-modal/UITab.tsx b/client/src/javascript/components/modals/settings-modal/UITab.tsx index 1facd706..6697a78e 100644 --- a/client/src/javascript/components/modals/settings-modal/UITab.tsx +++ b/client/src/javascript/components/modals/settings-modal/UITab.tsx @@ -54,9 +54,7 @@ const UITab: FC = ({onSettingsChange}: UITabProps) => { diff --git a/client/src/javascript/ui/components/Button.tsx b/client/src/javascript/ui/components/Button.tsx index e1e45f1e..fcd52b95 100644 --- a/client/src/javascript/ui/components/Button.tsx +++ b/client/src/javascript/ui/components/Button.tsx @@ -88,7 +88,7 @@ const Button: FC = ({ ); if (wrap) { - const WrapperComponent = wrapper as FC; + const WrapperComponent = wrapper as FC<{children?: React.ReactNode}>; return ( =0.10.0" @@ -14373,17 +14372,16 @@ } }, "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz", + "integrity": "sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==", "dev": true, "dependencies": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.22.0" }, "peerDependencies": { - "react": "17.0.2" + "react": "^18.1.0" } }, "node_modules/react-dropzone": { @@ -15006,13 +15004,12 @@ "dev": true }, "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz", + "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==", "dev": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "node_modules/schema-utils": { @@ -20279,9 +20276,9 @@ "dev": true }, "@types/react": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.45.tgz", - "integrity": "sha512-YfhQ22Lah2e3CHPsb93tRwIGNiSwkuz1/blk4e6QrWS0jQzCSNbGLtOEYhPg02W0yGTTmpajp7dCTbBAMN3qsg==", + "version": "18.0.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz", + "integrity": "sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==", "dev": true, "requires": { "@types/prop-types": "*", @@ -20290,12 +20287,12 @@ } }, "@types/react-dom": { - "version": "17.0.16", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.16.tgz", - "integrity": "sha512-DWcXf8EbMrO/gWnQU7Z88Ws/p16qxGpPyjTKTpmBSFKeE+HveVubqGO1CVK7FrwlWD5MuOcvh8gtd0/XO38NdQ==", + "version": "18.0.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.3.tgz", + "integrity": "sha512-1RRW9kst+67gveJRYPxGmVy8eVJ05O43hg77G2j5m76/RFJtMbcfAs2viQ2UNsvvDg8F7OfQZx8qQcl6ymygaQ==", "dev": true, "requires": { - "@types/react": "^17" + "@types/react": "*" } }, "@types/react-measure": { @@ -27947,13 +27944,12 @@ } }, "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz", + "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==", "dev": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "react-dev-utils": { @@ -27997,14 +27993,13 @@ } }, "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz", + "integrity": "sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==", "dev": true, "requires": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.22.0" } }, "react-dropzone": { @@ -28463,13 +28458,12 @@ "dev": true }, "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz", + "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==", "dev": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "schema-utils": { diff --git a/package.json b/package.json index 4ce57154..56c4d3d9 100644 --- a/package.json +++ b/package.json @@ -106,8 +106,8 @@ "@types/parse-torrent": "^5.8.4", "@types/passport": "^1.0.7", "@types/passport-jwt": "^3.0.6", - "@types/react": "^17.0.45", - "@types/react-dom": "^17.0.16", + "@types/react": "^18.0.9", + "@types/react-dom": "^18.0.3", "@types/react-measure": "^2.0.8", "@types/react-router-dom": "^5.3.3", "@types/react-transition-group": "^4.4.4", @@ -177,9 +177,9 @@ "postcss-loader": "^6.2.1", "prettier": "^2.6.2", "promise": "^8.1.0", - "react": "^17.0.2", + "react": "^18.1.0", "react-dev-utils": "^12.0.1", - "react-dom": "^17.0.2", + "react-dom": "^18.1.0", "react-dropzone": "^14.2.1", "react-measure": "^2.5.2", "react-refresh": "^0.13.0",