Skip to content

Commit b9ccb8e

Browse files
authored
Merge pull request #259 from modelix/fix-tooltips
fix(react): usage of mui.Tooltip caused an exception
2 parents 724ac6d + 728f146 commit b9ccb8e

File tree

3 files changed

+22
-67
lines changed

3 files changed

+22
-67
lines changed

react-ssr-client/src/components/Base.tsx

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, {Attributes} from 'react'
1+
import React from 'react'
22
import {IViewModel} from "../ViewModel.ts";
33

44
export interface IComponent extends IComponentContainer {
@@ -21,21 +21,6 @@ export interface IComponentWrapper {
2121
component: IComponent
2222
}
2323

24-
export abstract class ComponentBase<S = {}, SS = any> extends React.Component<IComponentWrapper, S, SS> {
25-
protected renderChildComponents(): (JSX.Element | string)[] {
26-
return renderChildComponents(this.props.component)
27-
}
28-
}
29-
30-
function convertComponent(component: IComponent): IComponent {
31-
const convertedProps = jsonToProps(component.properties)
32-
if (convertedProps === component.properties) return component
33-
return {
34-
...component,
35-
properties: convertedProps
36-
}
37-
}
38-
3924
function jsonToProps(json: Record<string, any> | undefined): Record<string, any> | undefined {
4025
if (json === undefined) return json;
4126

@@ -63,20 +48,21 @@ function jsonToProps(json: Record<string, any> | undefined): Record<string, any>
6348
return result
6449
}
6550

66-
export function createComponentFromJson(component: IComponent | string) {
51+
export function createComponentFromJson(component: IComponent | string): React.ReactNode {
6752
if (typeof component == "string") {
6853
return component
6954
} else {
7055
const renderer = componentConstructors.get(component.type);
7156
if (renderer) {
72-
return React.createElement(renderer, { component: convertComponent(component), key: component.key } as IComponentWrapper & Attributes)
57+
let convertedProps = jsonToProps(component.properties) ?? {}
58+
return React.createElement(renderer, { ...convertedProps, key: component.key }, ...renderChildComponents(component))
7359
} else {
7460
return (<span>Unknown component type: "{component.type}"</span>);
7561
}
7662
}
7763
}
7864

79-
function renderChildComponents(parent: IComponentContainer) {
65+
function renderChildComponents(parent: IComponentContainer): React.ReactNode[] {
8066
if (parent.children) {
8167
return parent.children.map(componentData => createComponentFromJson(componentData.component ?? componentData.text!!));
8268
} else {
@@ -88,13 +74,6 @@ export function renderViewModel(model: IViewModel) {
8874
return <div>{renderChildComponents(model)}</div>
8975
}
9076

91-
export class ViewModelRenderer extends React.Component<{ model: IViewModel }> {
92-
93-
render() {
94-
return <>{renderChildComponents(this.props.model)}</>;
95-
}
96-
}
97-
9877
export const componentConstructors: Map<string, any> = new Map();
9978

10079
export function registerComponentConstructor(type: string, ctor: any) {

react-ssr-client/src/components/DefaultComponents.ts

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
import {componentConstructors, IComponentWrapper, registerComponentConstructor} from "./Base.tsx";
1+
import {componentConstructors, registerComponentConstructor} from "./Base.tsx";
22
import * as mui from "@mui/material";
33
import * as icons from "@mui/icons-material";
4-
import {GenericComponent} from "./GenericComponent.tsx";
54
import { DataGrid } from '@mui/x-data-grid';
65
import Grid2 from "@mui/material/Unstable_Grid2"
76
import { SimpleTreeView, RichTreeView, TreeItem, TreeItem2 } from '@mui/x-tree-view';
@@ -58,45 +57,37 @@ const svgTagList = [
5857
"view",
5958
]
6059

61-
export function registerGenericComponent(id: string, elementType: any) {
62-
registerComponentConstructor(id, class extends GenericComponent {
63-
constructor(props: IComponentWrapper) {
64-
super(elementType, props);
65-
}
66-
});
67-
}
68-
6960
export function registerDefaultComponents() {
7061
for (const tagName of htmlTagList) {
71-
registerGenericComponent("html." + tagName, tagName)
62+
registerComponentConstructor("html." + tagName, tagName)
7263
}
7364

7465
for (const tagName of svgTagList) {
75-
registerGenericComponent("svg." + tagName, tagName)
66+
registerComponentConstructor("svg." + tagName, tagName)
7667
}
7768

7869
for (const id in mui) {
7970
if (id.charAt(0).toUpperCase() != id.charAt(0)) continue
80-
registerGenericComponent("mui." + id, (mui as any)[id])
71+
registerComponentConstructor("mui." + id, (mui as any)[id])
8172
}
8273

8374
for (const id in icons) {
8475
if (id.charAt(0).toUpperCase() != id.charAt(0)) continue
85-
registerGenericComponent("mui.icons." + id, (icons as any)[id])
76+
registerComponentConstructor("mui.icons." + id, (icons as any)[id])
8677
}
8778

88-
registerGenericComponent("mui.DataGrid", DataGrid)
89-
registerGenericComponent("mui.Grid2", Grid2)
90-
registerGenericComponent("mui.SimpleTreeView", SimpleTreeView)
91-
registerGenericComponent("mui.RichTreeView", RichTreeView)
92-
registerGenericComponent("mui.TreeItem", TreeItem)
93-
registerGenericComponent("mui.TreeItem2", TreeItem2)
94-
registerGenericComponent("modelix.Dropdown", Dropdown)
95-
registerGenericComponent("modelix.ReferenceTargetChooser", ReferenceTargetChooser)
96-
registerGenericComponent("modelix.TextField", ModelixTextField)
97-
registerGenericComponent("modelix.Spreadsheet", ModelixSpreadsheet)
98-
registerGenericComponent("modelix.TextEditor", ModelixTextEditor)
99-
registerGenericComponent("modelix.ImageBasedEditor", ModelixImageBasedEditor)
79+
registerComponentConstructor("mui.DataGrid", DataGrid)
80+
registerComponentConstructor("mui.Grid2", Grid2)
81+
registerComponentConstructor("mui.SimpleTreeView", SimpleTreeView)
82+
registerComponentConstructor("mui.RichTreeView", RichTreeView)
83+
registerComponentConstructor("mui.TreeItem", TreeItem)
84+
registerComponentConstructor("mui.TreeItem2", TreeItem2)
85+
registerComponentConstructor("modelix.Dropdown", Dropdown)
86+
registerComponentConstructor("modelix.ReferenceTargetChooser", ReferenceTargetChooser)
87+
registerComponentConstructor("modelix.TextField", ModelixTextField)
88+
registerComponentConstructor("modelix.Spreadsheet", ModelixSpreadsheet)
89+
registerComponentConstructor("modelix.TextEditor", ModelixTextEditor)
90+
registerComponentConstructor("modelix.ImageBasedEditor", ModelixImageBasedEditor)
10091

10192
const xhr = new XMLHttpRequest();
10293
xhr.open("POST", window.location + "../../../known-components", true);

react-ssr-client/src/components/GenericComponent.tsx

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)