This repository was archived by the owner on Jun 13, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathParametersContainer.tsx
More file actions
117 lines (114 loc) · 4.08 KB
/
ParametersContainer.tsx
File metadata and controls
117 lines (114 loc) · 4.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import { FieldArray, useField } from 'formik';
import ParameterIcon from '../../icons/components/ParameterIcon';
import { ParameterMapping } from '../../../mappings/components/ParameterMapping';
import GenerableMapping from '../../../mappings/GenerableMapping';
import { useStoreActions } from '../../state/Hooks';
import { Button } from '../atoms/Button';
import { Empty } from '../atoms/Empty';
import {
InspectorDefinitionMenu,
InspectorDefinitionMenuNav,
} from '../menus/definitions/InspectorDefinitionMenu';
import { navSubTypeMenu } from '../menus/SubTypeMenu';
const ParameterContainer = (props: {
dataMapping: GenerableMapping;
values: any;
}) => {
const [field] = useField(props.values.parameters);
const navigateTo = useStoreActions((actions) => actions.navigateTo);
const entries: [string, unknown][] =
props.values.parameters && Object.entries(props.values.parameters);
return (
<FieldArray
{...field}
name="parameters"
render={(_) => (
<div className="p-6 flex flex-col">
{entries?.length > 0 ? (
entries.map(([name, parameter]: [string, any], index) => (
<button
key={name}
aria-label="Parameter"
className="p-4 mb-4 w-full border-circle-gray-300 border hover:border-circle-black rounded text-left"
onClick={() => {
navigateTo({
component: InspectorDefinitionMenuNav,
props: {
dataType: ParameterMapping,
passBackKey: 'parameters',
index,
subtype: parameter.type,
editing: true,
values: { name, ...parameter },
source: props.values.parameters
? Object.keys(props.values.parameters)
: [],
},
values: props.values,
});
}}
>
<div className="flex">
<p className="font-bold">{name}</p>
</div>
{parameter.description && (
<p className="text-sm mt-1 leading-4 whitespace-pre-wrap text-circle-gray-500">
{parameter.description}
</p>
)}
{parameter.default ? (
<p className="text-sm mt-1 leading-4 whitespace-pre-wrap text-circle-gray-500">
{parameter.default}
</p>
) : (
<p className="text-sm mt-1 leading-4 whitespace-pre-wrap text-circle-gray-500">
Required
</p>
)}
</button>
))
) : (
<Empty
label="No Parameters Yet"
Logo={ParameterIcon}
description="Add a parameter by clicking the button above
to implement dynamic functionality."
/>
)}
<Button
aria-label="Add Parameter"
type="button"
variant="primary"
className="mx-auto my-4"
onClick={() => {
if (!ParameterMapping.subtypes) {
return;
}
navigateTo(
navSubTypeMenu(
{
typePage: ParameterMapping.subtypes.component,
typeProps: { component: props.dataMapping },
menuPage: InspectorDefinitionMenu,
menuProps: {
dataType: ParameterMapping,
passBackKey: 'parameters',
index: -1,
source: props.values.parameters
? Object.keys(props.values.parameters)
: [],
},
},
props.values,
),
);
}}
>
Add Parameter
</Button>
</div>
)}
/>
);
};
export default ParameterContainer;