in mephisto/client/full/webapp/src/widgets/components/RequesterForm.tsx [21:125]
function RequesterForm({
data,
onFinish,
}: {
data: LaunchOptions;
onFinish: Function;
}) {
const requesterTypes = data.provider_types;
const [selectedProvider, setSelectedProvider] = React.useState<string | null>(
null
);
const requesterTypesAsync = useAxios<Provider>({
url: `/requester/${selectedProvider}/options`,
});
return (
<div style={{ margin: "40px 0 20px" }}>
<h3 className="bp3-heading">Add a New Requester:</h3>
<ProviderSelect
data={requesterTypes}
onUpdate={(requesterType: string) => {
console.log({ requesterType });
setSelectedProvider(requesterType);
}}
/>
{selectedProvider && (
<ProviderParamsAsync
info={requesterTypesAsync}
onLoading={() => <span>Loading...</span>}
onError={() => <span>Error</span>}
onData={({ data: [details] }) => (
<div style={{ margin: "30px 0 20px" }}>
<div
className="bp3-callout bp3-icon-info-sign bp3-intent-primary"
style={{ margin: "10px 0 30px" }}
>
<h4 className="bp3-heading">Details</h4>
<p className="bp3-text bp3-running-text">{details.desc}</p>
</div>
<Formik
initialValues={{}}
onSubmit={(values: Record<string, string>) => {
const results = Object.fromEntries(
Object.entries<ParamDetails>(details.args).map(
([param, paramDetails]) => {
return [
param,
{
option_string: paramDetails.option_string,
value: values[param],
},
];
}
)
);
createRequester(selectedProvider, results).then(() => {
onFinish();
});
}}
>
{({
values,
errors,
touched,
handleChange,
handleBlur,
handleSubmit,
isSubmitting,
}) => (
<div>
{Object.entries(details.args).map(
([param, details]: [any, any]) => {
return (
<FormGroup
key={param}
label={details.help}
labelInfo={details.option_string}
labelFor="test"
>
<InputGroup
id="requester"
placeholder={""}
name={param}
onBlur={handleBlur}
value={(values as any)[param] || ""}
onChange={handleChange}
></InputGroup>
</FormGroup>
);
}
)}
<Button icon="new-person" onClick={() => handleSubmit()}>
Add new requester account...
</Button>
</div>
)}
</Formik>
</div>
)}
/>
)}