From b91308ea6c63e72cea32fc5cbdc6f86c15befb11 Mon Sep 17 00:00:00 2001 From: Maria Mattlin Date: Fri, 22 Jul 2022 14:14:43 -0700 Subject: [PATCH 1/2] Fixed routing for new intakes that have a currentStep saved --- .../work-factory/work.factory.ts | 23 +++++++++++++++---- .../work-functions/work-store/work.model.ts | 1 + .../bug-hunt/BugHuntIntakeForm.tsx | 4 ++-- src-ts/tools/work/work-table/WorkTable.tsx | 20 +++++++++------- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-factory/work.factory.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-factory/work.factory.ts index 97547647d..3196890d4 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-factory/work.factory.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-factory/work.factory.ts @@ -57,6 +57,7 @@ export function create(challenge: Challenge, workPrices: WorkPricesType): Work { cost: getCost(challenge, priceConfig, type), created: submittedDate, description: getDescription(challenge, type), + draftStep: getDraftStep(challenge, status), id: challenge.id, messageCount: Number((Math.random() * 10).toFixed(0)), // TODO: real message count participantsCount: challenge.numOfRegistrants, @@ -91,10 +92,16 @@ export function buildCreateBody(workTypeConfig: WorkTypeConfig): ChallengeCreate legacy: { selfService: true, }, - metadata: [{ - name: ChallengeMetadataName.intakeForm, - value: JSON.stringify({ form }), - }], + metadata: [ + { + name: ChallengeMetadataName.intakeForm, + value: JSON.stringify({ form }), + }, + { + name: ChallengeMetadataName.currentStep, + value: 'basicInfo', + }, + ], name: 'new-self-service-project', tags: workTypeConfig.tags, timelineTemplateId: workTypeConfig.timelineTemplateId, @@ -469,6 +476,14 @@ function getDescription(challenge: Challenge, type: WorkType): string | undefine } } +function getDraftStep(challenge: Challenge, status: WorkStatus): string | undefined { + + if (status !== WorkStatus.draft) { return undefined } + + const currentStep: ChallengeMetadata | undefined = findMetadata(challenge, ChallengeMetadataName.currentStep) + return currentStep?.value +} + function getProgress(challenge: Challenge, workStatus: WorkStatus): WorkProgress { const steps: ReadonlyArray = [ diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work.model.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work.model.ts index 9f87037ff..29afa38de 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work.model.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work.model.ts @@ -7,6 +7,7 @@ export interface Work { cost?: number created: Date description?: string + draftStep?: string id: string messageCount?: number participantsCount?: number diff --git a/src-ts/tools/work/work-self-service/intake-forms/bug-hunt/BugHuntIntakeForm.tsx b/src-ts/tools/work/work-self-service/intake-forms/bug-hunt/BugHuntIntakeForm.tsx index 066a695b0..d1d56dd31 100644 --- a/src-ts/tools/work/work-self-service/intake-forms/bug-hunt/BugHuntIntakeForm.tsx +++ b/src-ts/tools/work/work-self-service/intake-forms/bug-hunt/BugHuntIntakeForm.tsx @@ -66,7 +66,7 @@ const BugHuntIntakeForm: React.FC = () => { }) const [selectedPackage, setSelectedPackage]: [PricePackageName, Dispatch>] - = useState(formValues.packageType) + = useState(formValues?.packageType) const formInputs: Array = formGetInputFields(formDef.groups) if (!workId && !challenge) { @@ -90,7 +90,7 @@ const BugHuntIntakeForm: React.FC = () => { setFormValues(formData) - if (formData.form.basicInfo.packageType !== selectedPackage) { + if (formData?.form?.basicInfo.packageType && formData?.form?.basicInfo.packageType !== selectedPackage) { setSelectedPackage(formData.form.basicInfo.packageType) } } diff --git a/src-ts/tools/work/work-table/WorkTable.tsx b/src-ts/tools/work/work-table/WorkTable.tsx index 61342002e..a1bc61202 100644 --- a/src-ts/tools/work/work-table/WorkTable.tsx +++ b/src-ts/tools/work/work-table/WorkTable.tsx @@ -20,7 +20,9 @@ import { workGetStatusFilter, WorkStatus, WorkStatusFilter, + WorkType, } from '../work-lib' +import { WorkIntakeFormRoutes } from '../work-lib/work-provider/work-functions/work-store/work-intake-form-routes.config' import { selfServiceStartRoute, workDetailRoute } from '../work.routes' import { workDashboardTabs } from './work-nav.config' @@ -93,17 +95,19 @@ const WorkTable: FC<{}> = () => { const isDraft: boolean = selectedWork.status === WorkStatus.draft + // TODO: move the tabs definition to src-ts + // so we don't have to hard-code this tab id + let url: string = workDetailRoute(selectedWork.id, selectedWork.status === WorkStatus.ready ? 'solutions' : undefined) + if (isDraft) { - cacheChallengeId(selectedWork.id) + if (selectedWork.draftStep) { + url = `${WorkIntakeFormRoutes[selectedWork.type][selectedWork.draftStep]}/${selectedWork.id}` + } else { + cacheChallengeId(selectedWork.id) + url = selfServiceStartRoute + } } - // TODO: get these routes from an object/function that's not hard-coded - const url: string = isDraft - ? selfServiceStartRoute - // TODO: move the tabs definition to src-ts - // so we don't have to hard-code this tab id - : workDetailRoute(selectedWork.id, selectedWork.status === WorkStatus.ready ? 'solutions' : undefined) - navigate(url) } From d6189e885852b8eb8fe93a2fa1199c3feab721da Mon Sep 17 00:00:00 2001 From: Maria Mattlin Date: Fri, 22 Jul 2022 14:28:26 -0700 Subject: [PATCH 2/2] cleanup --- src-ts/tools/work/work-table/WorkTable.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src-ts/tools/work/work-table/WorkTable.tsx b/src-ts/tools/work/work-table/WorkTable.tsx index a1bc61202..fefd1386d 100644 --- a/src-ts/tools/work/work-table/WorkTable.tsx +++ b/src-ts/tools/work/work-table/WorkTable.tsx @@ -20,7 +20,6 @@ import { workGetStatusFilter, WorkStatus, WorkStatusFilter, - WorkType, } from '../work-lib' import { WorkIntakeFormRoutes } from '../work-lib/work-provider/work-functions/work-store/work-intake-form-routes.config' import { selfServiceStartRoute, workDetailRoute } from '../work.routes'