diff --git a/src/main/resources/web/assets/js/metadata/fields.js b/src/main/resources/web/assets/js/metadata/fields.js
index ecbfdee22..cdaef0f5e 100644
--- a/src/main/resources/web/assets/js/metadata/fields.js
+++ b/src/main/resources/web/assets/js/metadata/fields.js
@@ -16,7 +16,7 @@ $(document).ready(() => {
})
$('.J_new-field').on('click', () => {
// eslint-disable-next-line react/jsx-no-undef
- if (wpc.isSuperAdmin) renderRbcomp(
)
+ if (wpc.isSuperAdmin) renderRbcomp18(
)
else RbHighbar.error($L('仅超级管理员可添加字段'))
})
diff --git a/src/main/resources/web/assets/js/rb-components.js b/src/main/resources/web/assets/js/rb-components.js
index f5a99fcbd..7ccff5bbe 100644
--- a/src/main/resources/web/assets/js/rb-components.js
+++ b/src/main/resources/web/assets/js/rb-components.js
@@ -92,7 +92,7 @@ class RbModal extends React.Component {
$keepModalOpen()
if (this.props.disposeOnHide === true) {
$root.modal('dispose')
- $unmount($root.parent())
+ $unmount($root.parent(), 0, null, this.props.__root18)
}
})
}
@@ -1246,7 +1246,7 @@ class CodeViewport extends React.Component {
* @param {*} container id or object of element (or function of callback)
* @param {*} callback callback on mounted
*/
-const renderRbcomp = function (JSX, container, callback) {
+const renderRbcomp = function (JSX, container, callback, v18) {
if (typeof container === 'function') {
callback = container
container = null
@@ -1254,28 +1254,30 @@ const renderRbcomp = function (JSX, container, callback) {
container = container || $random('react-container-', true, 32)
if (typeof container === 'string') {
- // element id
const c = document.getElementById(container)
- if (!c) {
- if (!container.startsWith('react-container-')) throw 'No element found : ' + container
- else container = $(`
`).appendTo(document.body)[0]
- } else {
+ if (c) {
container = c
+ } else {
+ if (container.startsWith('react-container-')) container = $(`
`).appendTo(document.body)[0]
+ else throw 'No element found : ' + container
}
} else if (container instanceof $) {
container = container[0]
}
- // if (rb.env === 'dev') {
- // ReactDOM.render(
{JSX}, container, callback)
- // }
+ if (v18) {
+ const root = ReactDOM.createRoot(container)
+ const JSX2 = React.cloneElement(JSX, { __root18: root })
+ root.render(JSX2)
+ return root
+ }
ReactDOM.render(JSX, container, callback)
return container
}
-const __DLGCOMPS = {}
// 渲染可重用组件
+const __DLGCOMPS = {}
const renderDlgcomp = function (JSX, id) {
if (__DLGCOMPS[id]) {
__DLGCOMPS[id].show()
@@ -1285,3 +1287,8 @@ const renderDlgcomp = function (JSX, id) {
})
}
}
+
+// for: React v18
+const renderRbcomp18 = function (JSX, container) {
+ return renderRbcomp(JSX, container, null, true)
+}
diff --git a/src/main/resources/web/assets/js/rb-page.js b/src/main/resources/web/assets/js/rb-page.js
index 7c9a66562..1aced621c 100644
--- a/src/main/resources/web/assets/js/rb-page.js
+++ b/src/main/resources/web/assets/js/rb-page.js
@@ -745,11 +745,13 @@ var $initUploader = $createUploader
/**
* 卸载 React 组件(顶级组件才能卸载)
*/
-var $unmount = function (container, delay, keepContainer) {
+var $unmount = function (container, delay, keepContainer, root18) {
if (!container) return
var $c = $(container)
setTimeout(function () {
- ReactDOM.unmountComponentAtNode($c[0]) // return is unmounted
+ if (root18) root18.unmount()
+ else ReactDOM.unmountComponentAtNode($c[0]) // return is unmounted
+
if (keepContainer !== true && $c.prop('tagName') !== 'BODY') $c.remove()
}, delay || 1000)
}
diff --git a/src/main/resources/web/assets/js/rebuild-tour.js b/src/main/resources/web/assets/js/rebuild-tour.js
index 402d9cdd2..acbeaf4b9 100644
--- a/src/main/resources/web/assets/js/rebuild-tour.js
+++ b/src/main/resources/web/assets/js/rebuild-tour.js
@@ -19,7 +19,11 @@ const startTour123 = function () {
if (location.href.includes('/dashboard/home')) {
stepName = 'TourEnd-Dashboard'
steps = StepRebuild()
- // StepDashboard().forEach((item) => steps.push(item))
+ // isEnd
+ if ($storage.get(stepName)) {
+ stepName = 'TourEnd-Dashboard2'
+ steps = StepDashboard()
+ }
} else if (location.href.includes('/list') && wpc.type === 'RecordList') {
if ($('.datalist-mode2')[0]) {
stepName = 'TourEnd-RecordList2'
diff --git a/src/main/resources/web/dashboard/chart-design.html b/src/main/resources/web/dashboard/chart-design.html
index eb861495e..479069948 100644
--- a/src/main/resources/web/dashboard/chart-design.html
+++ b/src/main/resources/web/dashboard/chart-design.html
@@ -136,6 +136,14 @@
[[${bundle.L('图表选项')}]]
+