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 26e8573d3..74f8d204e 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, @@ -478,6 +485,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..fefd1386d 100644 --- a/src-ts/tools/work/work-table/WorkTable.tsx +++ b/src-ts/tools/work/work-table/WorkTable.tsx @@ -21,6 +21,7 @@ import { WorkStatus, WorkStatusFilter, } 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 +94,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) }