Skip to content
This repository was archived by the owner on Jun 18, 2025. It is now read-only.

Commit c279484

Browse files
feat: allow error recovery on add package page (#195)
This change updates the Add Package Page to allow users to recover from server-side errors that may occur when adding a new package.
1 parent 03e56b0 commit c279484

File tree

1 file changed

+30
-13
lines changed

1 file changed

+30
-13
lines changed

plugins/cad/src/components/AddPackagePage/AddPackagePage.tsx

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import {
2222
SimpleStepper,
2323
SimpleStepperStep,
2424
} from '@backstage/core-components';
25-
import { useApi, useRouteRef } from '@backstage/core-plugin-api';
25+
import { errorApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';
2626
import { makeStyles, TextField, Typography } from '@material-ui/core';
2727
import { Alert } from '@material-ui/lab';
2828
import React, { Fragment, useEffect, useRef, useState } from 'react';
@@ -153,6 +153,8 @@ const getPackageResources = async (
153153

154154
export const AddPackagePage = ({ action }: AddPackagePageProps) => {
155155
const api = useApi(configAsDataApiRef);
156+
const errorApi = useApi(errorApiRef);
157+
156158
const classes = useStyles();
157159
const navigate = useNavigate();
158160

@@ -163,6 +165,7 @@ export const AddPackagePage = ({ action }: AddPackagePageProps) => {
163165

164166
const newPackageRevision = 'v1';
165167

168+
const [activeStep, setActiveStep] = useState<number>(0);
166169
const [addPackageAction, setAddPackageAction] =
167170
useState<AddPackageSelectItem>();
168171
const [addPackageSelectItems, setAddPackageSelectItems] = useState<
@@ -463,19 +466,30 @@ export const AddPackagePage = ({ action }: AddPackagePageProps) => {
463466

464467
setIsCreatingPackage(true);
465468

466-
const newPackageRevisionResource = await api.createPackageRevision(
467-
resourceJson,
468-
);
469-
const newPackageRevisionName = newPackageRevisionResource.metadata.name;
469+
try {
470+
const newPackageRevisionResource = await api.createPackageRevision(
471+
resourceJson,
472+
);
473+
const newPackageRevisionName = newPackageRevisionResource.metadata.name;
470474

471-
await updatePackageResources(newPackageRevisionName);
475+
try {
476+
await updatePackageResources(newPackageRevisionName);
477+
} catch (resourcesError) {
478+
errorApi.post(resourcesError as Error);
479+
}
472480

473-
navigate(
474-
packageRef({
475-
repositoryName: resourceJson.spec.repository,
476-
packageName: newPackageRevisionName,
477-
}),
478-
);
481+
navigate(
482+
packageRef({
483+
repositoryName: resourceJson.spec.repository,
484+
packageName: newPackageRevisionName,
485+
}),
486+
);
487+
} catch (createError) {
488+
errorApi.post(createError as Error);
489+
setActiveStep(stepNumber => stepNumber - 1);
490+
} finally {
491+
setIsCreatingPackage(false);
492+
}
479493
};
480494

481495
if (loading || isCreatingPackage) {
@@ -522,7 +536,10 @@ export const AddPackagePage = ({ action }: AddPackagePageProps) => {
522536
</Fragment>
523537
)}
524538

525-
<SimpleStepper>
539+
<SimpleStepper
540+
activeStep={activeStep}
541+
onStepChange={(_, next) => setActiveStep(next)}
542+
>
526543
<SimpleStepperStep title="Action">
527544
<div className={classes.stepContent}>
528545
{isCloneNamedPackageAction && (

0 commit comments

Comments
 (0)