@material-ui/core#StepContent TypeScript Examples
The following examples show how to use
@material-ui/core#StepContent.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: ImportStepper.tsx From backstage with Apache License 2.0 | 5 votes |
ImportStepper = (props: ImportStepperProps) => {
const {
initialUrl,
generateStepper = defaultGenerateStepper,
variant,
} = props;
const catalogImportApi = useApi(catalogImportApiRef);
const classes = useStyles();
const state = useImportState({ initialUrl });
const states = useMemo<StepperProvider>(
() => generateStepper(state.activeFlow, defaultStepper),
[generateStepper, state.activeFlow],
);
const render = (step: StepConfiguration) => {
return (
<Step>
{step.stepLabel}
<StepContent>{step.content}</StepContent>
</Step>
);
};
return (
<InfoCard variant={variant}>
<Stepper
classes={{ root: classes.stepperRoot }}
activeStep={state.activeStepNumber}
orientation="vertical"
>
{render(
states.analyze(
state as Extract<ImportState, { activeState: 'analyze' }>,
{ apis: { catalogImportApi } },
),
)}
{render(
states.prepare(
state as Extract<ImportState, { activeState: 'prepare' }>,
{ apis: { catalogImportApi } },
),
)}
{render(
states.review(
state as Extract<ImportState, { activeState: 'review' }>,
{ apis: { catalogImportApi } },
),
)}
{render(
states.finish(
state as Extract<ImportState, { activeState: 'finish' }>,
{ apis: { catalogImportApi } },
),
)}
</Stepper>
</InfoCard>
);
}
Example #2
Source File: MultistepJsonForm.tsx From backstage with Apache License 2.0 | 4 votes |
MultistepJsonForm = (props: Props) => {
const {
formData,
onChange,
onReset,
onFinish,
fields,
widgets,
finishButtonLabel,
} = props;
const [activeStep, setActiveStep] = useState(0);
const [disableButtons, setDisableButtons] = useState(false);
const errorApi = useApi(errorApiRef);
const featureFlagApi = useApi(featureFlagsApiRef);
const featureFlagKey = 'backstage:featureFlag';
const filterOutProperties = (step: Step): Step => {
const filteredStep = cloneDeep(step);
const removedPropertyKeys: Array<string> = [];
if (filteredStep.schema.properties) {
filteredStep.schema.properties = Object.fromEntries(
Object.entries(filteredStep.schema.properties).filter(
([key, value]) => {
if (value[featureFlagKey]) {
if (featureFlagApi.isActive(value[featureFlagKey])) {
return true;
}
removedPropertyKeys.push(key);
return false;
}
return true;
},
),
);
// remove the feature flag property key from required if they are not active
filteredStep.schema.required = Array.isArray(filteredStep.schema.required)
? filteredStep.schema.required?.filter(
r => !removedPropertyKeys.includes(r as string),
)
: filteredStep.schema.required;
}
return filteredStep;
};
const steps = props.steps
.filter(step => {
const featureFlag = step.schema[featureFlagKey];
return (
typeof featureFlag !== 'string' || featureFlagApi.isActive(featureFlag)
);
})
.map(filterOutProperties);
const handleReset = () => {
setActiveStep(0);
onReset();
};
const handleNext = () => {
setActiveStep(Math.min(activeStep + 1, steps.length));
};
const handleBack = () => setActiveStep(Math.max(activeStep - 1, 0));
const handleCreate = async () => {
if (!onFinish) {
return;
}
setDisableButtons(true);
try {
await onFinish();
} catch (err) {
errorApi.post(err);
} finally {
setDisableButtons(false);
}
};
return (
<>
<Stepper activeStep={activeStep} orientation="vertical">
{steps.map(({ title, schema, ...formProps }, index) => {
return (
<StepUI key={title}>
<StepLabel
aria-label={`Step ${index + 1} ${title}`}
aria-disabled="false"
tabIndex={0}
>
<Typography variant="h6" component="h3">
{title}
</Typography>
</StepLabel>
<StepContent key={title}>
<Form
showErrorList={false}
fields={{ ...fieldOverrides, ...fields }}
widgets={widgets}
noHtml5Validate
formData={formData}
formContext={{ formData }}
onChange={onChange}
onSubmit={e => {
if (e.errors.length === 0) handleNext();
}}
{...formProps}
{...transformSchemaToProps(schema)}
>
<Button disabled={activeStep === 0} onClick={handleBack}>
Back
</Button>
<Button variant="contained" color="primary" type="submit">
Next step
</Button>
</Form>
</StepContent>
</StepUI>
);
})}
</Stepper>
{activeStep === steps.length && (
<Content>
<Paper square elevation={0}>
<Typography variant="h6">Review and create</Typography>
<StructuredMetadataTable
dense
metadata={getReviewData(formData, steps)}
/>
<Box mb={4} />
<Button onClick={handleBack} disabled={disableButtons}>
Back
</Button>
<Button onClick={handleReset} disabled={disableButtons}>
Reset
</Button>
<Button
variant="contained"
color="primary"
onClick={handleCreate}
disabled={!onFinish || disableButtons}
>
{finishButtonLabel ?? 'Create'}
</Button>
</Paper>
</Content>
)}
</>
);
}