Skip to content

Commit b77125d

Browse files
authored
add custom form renderer to make forms more compact (#9)
1 parent 0f5052a commit b77125d

File tree

4 files changed

+72
-19
lines changed

4 files changed

+72
-19
lines changed

web-conexs-client/src/components/fdmnes/FdmnesForm.tsx

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@ import { useNavigate } from "react-router-dom";
1212
import { useState } from "react";
1313
import CrystalViewer from "../crystals/CrystalViewer";
1414

15+
import CompactGroupRenderer, {
16+
CompactGroupTester,
17+
} from "../renderers/CompactGroup";
18+
19+
const renderers = [
20+
...materialRenderers,
21+
{ tester: CompactGroupTester, renderer: CompactGroupRenderer },
22+
];
23+
1524
export default function FdmnesForm() {
1625
const [selectedCrystalID, setSelectedCrystalId] = useState<null | number>(
1726
null
@@ -50,13 +59,15 @@ export default function FdmnesForm() {
5059
className="jsonFormsContainer"
5160
direction="row"
5261
justifyContent="space-between"
62+
margin="5px"
63+
spacing="5px"
5364
>
54-
<Box>
65+
<Stack>
5566
{hasData ? (
5667
<JsonForms
5768
schema={schema}
5869
data={data}
59-
renderers={materialRenderers}
70+
renderers={renderers}
6071
uischema={uischema}
6172
cells={materialCells}
6273
onChange={({ data }) => {
@@ -67,13 +78,6 @@ export default function FdmnesForm() {
6778
) : (
6879
<Skeleton animation="wave" width={210} height={118} />
6980
)}
70-
</Box>
71-
<Stack flex={1}>
72-
<Box flex={1}>
73-
{selectedCrystalID != null && (
74-
<CrystalViewer id={selectedCrystalID} />
75-
)}
76-
</Box>
7781
<Button
7882
variant="contained"
7983
onClick={() => {
@@ -84,6 +88,13 @@ export default function FdmnesForm() {
8488
Submit Simulation
8589
</Button>
8690
</Stack>
91+
<Stack flex={1}>
92+
<Box flex={1}>
93+
{selectedCrystalID != null && (
94+
<CrystalViewer id={selectedCrystalID} />
95+
)}
96+
</Box>
97+
</Stack>
8798
</Stack>
8899
// <Grid2 container>
89100
// <Grid2 size={6} className="jsonFormsContainer">

web-conexs-client/src/components/orca/OrcaForm.tsx

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@ import { useNavigate } from "react-router-dom";
1212
import { useState } from "react";
1313
import MoleculeViewer from "../molecules/MoleculeViewer";
1414

15+
import CompactGroupRenderer, {
16+
CompactGroupTester,
17+
} from "../renderers/CompactGroup";
18+
19+
const renderers = [
20+
...materialRenderers,
21+
{ tester: CompactGroupTester, renderer: CompactGroupRenderer },
22+
];
23+
1524
export default function OrcaForm() {
1625
const [selectedMoleculeID, setSelectedMoleculeId] = useState<null | number>(
1726
null
@@ -50,13 +59,15 @@ export default function OrcaForm() {
5059
className="jsonFormsContainer"
5160
direction="row"
5261
justifyContent="space-between"
62+
margin="5px"
63+
spacing="5px"
5364
>
54-
<Box>
65+
<Stack>
5566
{hasData ? (
5667
<JsonForms
5768
schema={schema}
5869
data={data}
59-
renderers={materialRenderers}
70+
renderers={renderers}
6071
uischema={uischema}
6172
cells={materialCells}
6273
onChange={({ data }) => {
@@ -67,13 +78,6 @@ export default function OrcaForm() {
6778
) : (
6879
<Skeleton animation="wave" width={210} height={118} />
6980
)}
70-
</Box>
71-
<Stack flex={1}>
72-
<Box flex={1}>
73-
{selectedMoleculeID != null && (
74-
<MoleculeViewer id={selectedMoleculeID} />
75-
)}
76-
</Box>
7781
<Button
7882
variant="contained"
7983
onClick={() => {
@@ -88,6 +92,13 @@ export default function OrcaForm() {
8892
Submit Simulation
8993
</Button>
9094
</Stack>
95+
<Stack flex={1}>
96+
<Box flex={1}>
97+
{selectedMoleculeID != null && (
98+
<MoleculeViewer id={selectedMoleculeID} />
99+
)}
100+
</Box>
101+
</Stack>
91102
</Stack>
92103
);
93104
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { MaterialLayoutRenderer } from "@jsonforms/material-renderers";
2+
import { Stack, Typography } from "@mui/material";
3+
4+
import { withJsonFormsLayoutProps } from "@jsonforms/react";
5+
6+
import { rankWith, uiTypeIs } from "@jsonforms/core";
7+
8+
export const CompactGroupTester = rankWith(1000, uiTypeIs("Group"));
9+
10+
const CompactGroupRenderer = (props) => {
11+
const { uischema, schema, path, visible, renderers } = props;
12+
13+
const layoutProps = {
14+
elements: uischema.elements,
15+
schema: schema,
16+
path: path,
17+
direction: "column",
18+
visible: visible,
19+
uischema: uischema,
20+
renderers: renderers,
21+
};
22+
return (
23+
<Stack spacing="10px">
24+
<Typography>{uischema.label}</Typography>
25+
26+
<MaterialLayoutRenderer {...layoutProps} />
27+
</Stack>
28+
);
29+
};
30+
31+
export default withJsonFormsLayoutProps(CompactGroupRenderer);

web-conexs-client/src/hooks/useOrcaSchema.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ const uischema = {
191191
},
192192
{
193193
type: "Group",
194-
label: "",
194+
label: "Resources",
195195
elements: [
196196
{
197197
type: "HorizontalLayout",

0 commit comments

Comments
 (0)