diff --git a/package.json b/package.json
index 54d565ea..f7c5646c 100644
--- a/package.json
+++ b/package.json
@@ -22,21 +22,21 @@
},
"peerDependencies": {
"angular": "^1.5.0",
- "react": ">=15.0.0"
+ "react": ">=18.0.0"
},
"devDependencies": {
"@rollup/plugin-commonjs": "^18.0.0",
"@rollup/plugin-node-resolve": "^11.2.1",
"@types/angular": "^1.8.2",
"@types/jquery": "^3.5.6",
- "@types/react": "^16.9.43",
+ "@types/react": "^18.0.0",
"@uirouter/publish-scripts": "^2.5.5",
"angular": "^1.8.2",
"husky": "^6.0.0",
"prettier": "^2.3.2",
"pretty-quick": "^3.1.1",
- "react": "^16.14.0",
- "react-dom": "^16.14.0",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0",
"rollup": "^2.55.1",
"rollup-plugin-sourcemaps": "^0.6.3",
"rollup-plugin-terser": "^7.0.2",
diff --git a/src/angularjs/ReactUIViewAdapterComponent.tsx b/src/angularjs/ReactUIViewAdapterComponent.tsx
index ef695161..ce1a0cea 100644
--- a/src/angularjs/ReactUIViewAdapterComponent.tsx
+++ b/src/angularjs/ReactUIViewAdapterComponent.tsx
@@ -1,5 +1,5 @@
import * as React from 'react';
-import * as ReactDOM from 'react-dom';
+import { createRoot } from 'react-dom/client';
import { filter } from '@uirouter/core';
import { IPortalScope } from '../react/AngularUIView';
import { PortalView } from '../react/PortalView';
@@ -8,10 +8,10 @@ import { hybridModule } from './module';
import { debugLog } from '../debug';
// When an angularjs `ui-view` is instantiated, also create an react-ui-view-adapter (which creates a react UIView)
-hybridModule.directive('uiView', function() {
+hybridModule.directive('uiView', function () {
return {
restrict: 'AE',
- compile: function(tElem, tAttrs) {
+ compile: function (tElem, tAttrs) {
let { name, uiView } = tAttrs;
name = name || uiView || '$default';
debugLog('angularjs', 'ui-view', '?', '.compile()', 'Creating react-ui-view-adapter', tElem);
@@ -25,14 +25,15 @@ var id = 0;
// This angularjs adapter (inside an angularjs ui-view) creates the react UIView and provides it the correct context
// It also allows angularjs children created inside the react view (via angular2react or whatever) to access the correct
// context from the react UIView
-hybridModule.directive('reactUiViewAdapter', function() {
+hybridModule.directive('reactUiViewAdapter', function () {
return {
restrict: 'E',
- link: function(scope: IPortalScope, elem, attrs) {
+ link: function (scope: IPortalScope, elem, attrs) {
const debug = (method: string, message: string, ...args) =>
debugLog('angularjs', 'react-ui-view-adapter', `${$id}/${attrs.name}`, method, message, ...args);
const el = elem[0];
+ const root = createRoot(el);
let _ref = null;
let destroyed = false;
const $id = id++;
@@ -99,8 +100,8 @@ hybridModule.directive('reactUiViewAdapter', function() {
debug('.renderReactUIView()', `will createPortalToChildUIView({ name: '${childUIViewProps['name']}' })`, el);
portalView.createPortalToChildUIView($id, { childUIViewProps, portalTarget: el });
} else {
- debug('.renderReactUIView()', `ReactDOM.render()`, el);
- ReactDOM.render(, el as any);
+ debug('.renderReactUIView()', `root.render()`, el);
+ root.render();
}
}
@@ -110,8 +111,8 @@ hybridModule.directive('reactUiViewAdapter', function() {
if (portalView) {
portalView.removePortalToChildUIView($id);
} else {
- const unmounted = ReactDOM.unmountComponentAtNode(el);
- debug('.$on("$destroy")', `unmountComponentAtNode(): ${unmounted}`, el);
+ const unmounted = root.unmount();
+ debug('.$on("$destroy")', `root.unmount(): ${unmounted}`, el);
}
// Remove using jQLite element for cross-browser compatibility.
elem.remove();
diff --git a/yarn.lock b/yarn.lock
index 1cd90682..bb25c7d3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -130,13 +130,14 @@
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
-"@types/react@^16.9.43":
- version "16.9.43"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.43.tgz#c287f23f6189666ee3bebc2eb8d0f84bcb6cdb6b"
- integrity sha512-PxshAFcnJqIWYpJbLPriClH53Z2WlJcVZE+NP2etUtWQs2s7yIMj3/LDKZT/5CHJ/F62iyjVCDu2H3jHEXIxSg==
+"@types/react@^18.0.0":
+ version "18.0.27"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.27.tgz#d9425abe187a00f8a5ec182b010d4fd9da703b71"
+ integrity sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==
dependencies:
"@types/prop-types" "*"
- csstype "^2.2.0"
+ "@types/scheduler" "*"
+ csstype "^3.0.2"
"@types/resolve@1.17.1":
version "1.17.1"
@@ -145,6 +146,11 @@
dependencies:
"@types/node" "*"
+"@types/scheduler@*":
+ version "0.16.2"
+ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
+ integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
+
"@types/sizzle@*":
version "2.3.2"
resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47"
@@ -624,10 +630,10 @@ cross-spawn@^7.0.0:
shebang-command "^2.0.0"
which "^2.0.1"
-csstype@^2.2.0:
- version "2.6.10"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b"
- integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==
+csstype@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
+ integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
currently-unhandled@^0.4.1:
version "0.4.1"
@@ -1717,7 +1723,7 @@ process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-prop-types@^15.6.1, prop-types@^15.6.2:
+prop-types@^15.6.1:
version "15.7.2"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@@ -1756,29 +1762,25 @@ randombytes@^2.1.0:
dependencies:
safe-buffer "^5.1.0"
-react-dom@^16.14.0:
- 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.2.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
+ integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
dependencies:
loose-envify "^1.1.0"
- object-assign "^4.1.1"
- prop-types "^15.6.2"
- scheduler "^0.19.1"
+ scheduler "^0.23.0"
react-is@^16.8.1:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-react@^16.14.0:
- version "16.14.0"
- resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d"
- integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==
+react@^18.0.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
+ integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
dependencies:
loose-envify "^1.1.0"
- object-assign "^4.1.1"
- prop-types "^15.6.2"
read-pkg-up@^1.0.1:
version "1.0.1"
@@ -1965,13 +1967,12 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-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.0:
+ version "0.23.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
+ integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
dependencies:
loose-envify "^1.1.0"
- object-assign "^4.1.1"
"semver@2 || 3 || 4 || 5", semver@^5.5.0:
version "5.7.1"