Skip to content

Commit 728f146

Browse files
committed
fix(react): usage of mui.Tooltip caused an exception
There was this unnecessary GenericComponent wrapper around each component that weren't creating any own elements, but just returning the element created by the wrapped component.
1 parent 9f00a65 commit 728f146

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)