Skip to content

Commit 31bdeb6

Browse files
edloidasalansemenov
authored andcommitted
Enonic UI: Fix rendering of components with hooks #4097
Added proper aliases for react, and replace renderer with react. Upgraded `@enonic-ui` dependency.
1 parent 30c8942 commit 31bdeb6

File tree

7 files changed

+31
-15
lines changed

7 files changed

+31
-15
lines changed

.swcrc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@
88
},
99
"transform": {
1010
"legacyDecorator": true,
11-
"decoratorMetadata": true
11+
"decoratorMetadata": true,
12+
"react": {
13+
"pragma": "createElement",
14+
"pragmaFrag": "Fragment",
15+
"importSource": "react"
16+
}
1217
},
1318
"target": "es5",
1419
"keepClassNames": true,

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"fix": "eslint --fix **/*.ts --cache"
2222
},
2323
"dependencies": {
24-
"@enonic/ui": "^0.2.0",
24+
"@enonic/ui": "^0.3.1",
2525
"@types/dompurify": "=3.0.5",
2626
"@types/mousetrap": "^1.6.15",
2727
"dompurify": "=3.1.7",

src/main/resources/assets/admin/common/js/ui2/ActionButton.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import * as UI from '@enonic/ui';
2-
32
import {unwrap} from '@enonic/ui';
4-
import {h, render} from 'preact';
3+
import {createElement} from 'react';
4+
import {render} from 'react-dom';
5+
56
import {BrowserHelper} from '../BrowserHelper';
67
import {Action} from '../ui/Action';
78
import {LegacyElement} from './LegacyElement';
@@ -55,8 +56,8 @@ export class ActionButton<T extends Action = Action> extends LegacyElement<typeo
5556
}
5657

5758
doRender(): Q.Promise<boolean> {
58-
const actionButton = h(this.component, this.props.get());
59-
const tooltip = h(UI.Tooltip, {
59+
const actionButton = createElement(this.component, this.props.get());
60+
const tooltip = createElement(UI.Tooltip, {
6061
value: unwrap(this.props.get().title),
6162
children: actionButton,
6263
} satisfies UI.TooltipProps);

src/main/resources/assets/admin/common/js/ui2/LegacyElement.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import {map, type MapStore} from 'nanostores';
2-
import type {ComponentProps, ComponentType} from 'preact';
3-
import {h, render} from 'preact';
42
import * as Q from 'q';
3+
import type {ComponentProps, ComponentType} from 'react';
4+
import {createElement} from 'react';
5+
import {render} from 'react-dom';
56

67
import {Element as BaseElement, NewElementBuilder} from '../dom/Element';
78

@@ -26,7 +27,7 @@ export class LegacyElement<C extends ComponentType<object>, P extends ComponentP
2627
}
2728

2829
doRender(): Q.Promise<boolean> {
29-
render(h(this.component, this.props.get()), this.getHTMLElement());
30+
render(createElement(this.component, this.props.get()), this.getHTMLElement());
3031
return super.doRender();
3132
}
3233

tsconfig.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
],
99
"outDir": "build/resources/main/dev/lib-admin-ui/",
1010
"moduleResolution": "bundler",
11+
"baseUrl": ".",
1112
"declaration": true,
1213
"declarationDir": "build/resources/main/dev/lib-admin-ui/",
1314
"allowSyntheticDefaultImports": true,
@@ -24,7 +25,11 @@
2425
"q",
2526
"validator",
2627
"dompurify"
27-
]
28+
],
29+
"paths": {
30+
"react": ["node_modules/preact/compat"],
31+
"react-dom": ["node_modules/preact/compat"]
32+
}
2833
},
2934
"include": [
3035
"src/main/resources/assets/admin/common/js/**/*.ts"

webpack.config.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ module.exports = {
2424
assetModuleFilename: './[file]'
2525
},
2626
resolve: {
27-
extensions: ['.ts', '.js', '.less', '.css']
27+
extensions: ['.ts', '.js', '.less', '.css'],
28+
alias: {
29+
'react': 'preact/compat',
30+
'react-dom': 'preact/compat'
31+
}
2832
},
2933
module: {
3034
rules: [

0 commit comments

Comments
 (0)