Skip to content

Commit 1399006

Browse files
Merge branch 'PROD-2321_bug-hunt-intake-form' of https://github.com/topcoder-platform/platform-ui into PROD-2321_bug-hunt-intake-form
2 parents 5879c80 + 7d63ad3 commit 1399006

File tree

6 files changed

+121
-29
lines changed

6 files changed

+121
-29
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { FC, useContext } from 'react'
2+
import { Outlet, Routes } from 'react-router-dom'
3+
4+
import {
5+
ContentLayout,
6+
routeContext,
7+
RouteContextData,
8+
} from '../../../../lib'
9+
10+
export const intakeFormsTitle: string = 'Work Intake Forms'
11+
12+
const IntakeForms: FC<{}> = () => {
13+
14+
const { getChildRoutes }: RouteContextData = useContext(routeContext)
15+
16+
return (
17+
<ContentLayout>
18+
<Outlet />
19+
<Routes>
20+
{getChildRoutes(intakeFormsTitle)}
21+
</Routes>
22+
</ContentLayout>
23+
)
24+
}
25+
26+
export default IntakeForms

src-ts/tools/work/work-self-service/intake-forms/bug-hunt/BugHuntIntakeForm.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import { WorkIntakeFormRoutes } from '../../../work-lib/work-provider/work-funct
2828
import { WorkServicePrice } from '../../../work-service-price'
2929
import { WorkTypeBanner } from '../../../work-type-banner'
3030
import { dashboardRoute } from '../../../work.routes'
31+
import IntakeFormsBreadcrumb from '../intake-forms-breadcrumb/IntakeFormsBreadcrumb'
3132

3233
import { BugHuntFormConfig } from './bug-hunt.form.config'
3334
import styles from './BugHunt.module.scss'
@@ -52,7 +53,7 @@ const BugHuntIntakeForm: React.FC = () => {
5253
const [formDef, setFormDef]: [FormDefinition, Dispatch<SetStateAction<FormDefinition>>]
5354
= useState<FormDefinition>({ ...BugHuntFormConfig })
5455

55-
const [formValues, setFormValues]: [any, Dispatch<any>] = useState({
56+
const [formValues, setFormValues]: [any, Dispatch<any>] = useState({
5657
currentStep: 'basicInfo',
5758
[ChallengeMetadataName.packageType]: 'standard',
5859
})
@@ -151,6 +152,10 @@ const BugHuntIntakeForm: React.FC = () => {
151152

152153
return (
153154
<>
155+
<IntakeFormsBreadcrumb
156+
basicInfoRoute={WorkIntakeFormRoutes[WorkType.bugHunt]['basicInfo']}
157+
workType={workBugHuntConfig.type}
158+
/>
154159
<WorkTypeBanner
155160
title={workBugHuntConfig.title}
156161
subTitle={workBugHuntConfig.subtitle}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import React, { FC } from 'react'
2+
3+
import { Breadcrumb, BreadcrumbItemModel } from '../../../../../lib'
4+
import { WorkType } from '../../../work-lib'
5+
import { dashboardRoute, selfServiceStartRoute } from '../../../work.routes'
6+
7+
interface IntakeFormsBreadcrumbProps {
8+
basicInfoRoute: string,
9+
reviewRoute?: string,
10+
workType: WorkType,
11+
}
12+
13+
const IntakeFormsBreadcrumb: FC<IntakeFormsBreadcrumbProps> = ({ basicInfoRoute, reviewRoute, workType }) => {
14+
const breadcrumbs: Array<BreadcrumbItemModel> = [
15+
{ url: dashboardRoute, name: 'My Work' },
16+
{ url: selfServiceStartRoute, name: 'Start Work' },
17+
{ url: basicInfoRoute, name: workType },
18+
]
19+
20+
if (reviewRoute) {
21+
breadcrumbs.push(
22+
{ url: reviewRoute, name: 'Review & Payment' }
23+
)
24+
}
25+
26+
return (
27+
<Breadcrumb items={breadcrumbs} />
28+
)
29+
}
30+
31+
export default IntakeFormsBreadcrumb

src-ts/tools/work/work-self-service/intake-forms/review/Review.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,12 @@ import { useParams } from 'react-router-dom'
66
import { EnvironmentConfig } from '../../../../../config'
77
import { PaymentForm } from '../../../../../lib'
88
import { WorkDetailDetailsPane } from '../../../work-detail-details'
9-
import {
10-
Challenge,
11-
ChallengeMetadataName,
12-
WorkType,
13-
} from '../../../work-lib'
9+
import { ChallengeMetadataName, WorkType } from '../../../work-lib'
1410
import { ChallengeMetadata, workStoreGetChallengeByWorkId } from '../../../work-lib/work-provider/work-functions/work-store'
1511
import { WorkIntakeFormRoutes } from '../../../work-lib/work-provider/work-functions/work-store/work-intake-form-routes.config'
1612
import { bugHuntConfig } from '../../../work-lib/work-provider/work-functions/work-store/work-type.config'
1713
import { WorkTypeBanner } from '../../../work-type-banner'
14+
import IntakeFormsBreadcrumb from '../intake-forms-breadcrumb/IntakeFormsBreadcrumb'
1815

1916
import styles from './Review.module.scss'
2017

@@ -39,7 +36,7 @@ const Review: React.FC = () => {
3936
useEffect(() => {
4037
const useEffectAsync: () => Promise<void> = async () => {
4138
// fetch challenge using workId
42-
const response: any = await workStoreGetChallengeByWorkId(workId)
39+
const response: any = await workStoreGetChallengeByWorkId(workId || '')
4340
const intakeFormBH: any = response.metadata.find((item: ChallengeMetadata) => item.name === ChallengeMetadataName.intakeForm)
4441
setFormData(JSON.parse(intakeFormBH.value).form)
4542
}
@@ -75,6 +72,13 @@ const Review: React.FC = () => {
7572

7673
return (
7774
<div className={styles['review-container']}>
75+
{/* TODO: We need to not hard code the configs to that of BugHunt and instead
76+
use the challenge data to determine the WorkType */}
77+
<IntakeFormsBreadcrumb
78+
basicInfoRoute={`${WorkIntakeFormRoutes[WorkType.bugHunt]['basicInfo']}/${workId}`}
79+
reviewRoute={WorkIntakeFormRoutes[WorkType.bugHunt]['review']}
80+
workType={bugHuntConfig.type}
81+
/>
7882
<WorkTypeBanner
7983
title={bugHuntConfig.review.title}
8084
subTitle={bugHuntConfig.review.subtitle}

src-ts/tools/work/work.routes.tsx

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import Work, { toolTitle } from './Work'
66
import { WorkLoginPrompt } from './work-login-prompt'
77
import { WorkNotLoggedIn } from './work-not-logged-in'
88
import { BugHuntIntakeForm, Review } from './work-self-service'
9+
import IntakeForms, { intakeFormsTitle } from './work-self-service/intake-forms/IntakeForms'
910
import { WorkTable } from './work-table'
1011
import { WorkThankYou } from './work-thank-you'
1112

@@ -51,28 +52,44 @@ export const workRoutes: Array<PlatformRoute> = [
5152
route: selfServiceRootRoute,
5253
},
5354
{
54-
element: <BugHuntIntakeForm />,
55-
route: `/${selfServiceRootRoute}/work/new/bug-hunt/basic-info`,
56-
},
57-
{
58-
element: <BugHuntIntakeForm />,
59-
route: `/${selfServiceRootRoute}/work/new/bug-hunt/basic-info/:workId`,
60-
},
61-
{
62-
element: <WorkLoginPrompt />,
63-
route: `/${selfServiceRootRoute}${rootRoute}/new/:workType/login-prompt`,
64-
},
65-
{
66-
element: <Review />,
67-
route: `/${selfServiceRootRoute}/work/new/bug-hunt/review`,
68-
},
69-
{
70-
element: <Review />,
71-
route: `/${selfServiceRootRoute}/work/new/bug-hunt/review/:workId`,
72-
},
73-
{
74-
element: <WorkThankYou />,
75-
route: `/${selfServiceRootRoute}${rootRoute}/new/:workType/thank-you`,
55+
children: [
56+
// Bug Hunt
57+
{
58+
element: <BugHuntIntakeForm />,
59+
route: `bug-hunt/basic-info`,
60+
title: intakeFormsTitle,
61+
},
62+
{
63+
element: <BugHuntIntakeForm />,
64+
route: `bug-hunt/basic-info/:workId`,
65+
title: intakeFormsTitle,
66+
},
67+
// General
68+
{
69+
element: <WorkLoginPrompt />,
70+
route: `:workType/login-prompt`,
71+
title: intakeFormsTitle,
72+
},
73+
{
74+
element: <Review />,
75+
route: `:workType/review`,
76+
title: intakeFormsTitle,
77+
},
78+
{
79+
element: <Review />,
80+
route: `:workType/review/:workId`,
81+
title: intakeFormsTitle,
82+
},
83+
{
84+
element: <WorkThankYou />,
85+
route: `:workType/thank-you`,
86+
title: intakeFormsTitle,
87+
},
88+
],
89+
customerOnly: true,
90+
element: <IntakeForms />,
91+
route: `/${selfServiceRootRoute}${rootRoute}/new`,
92+
title: intakeFormsTitle,
7693
},
7794
{
7895
element: <Navigate to={dashboardRoute} />,

yarn.lock

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2476,6 +2476,15 @@
24762476
"@types/scheduler" "*"
24772477
csstype "^3.0.2"
24782478

2479+
"@types/react@^17":
2480+
version "17.0.47"
2481+
resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.47.tgz#4ee71aaf4c5a9e290e03aa4d0d313c5d666b3b78"
2482+
integrity sha512-mk0BL8zBinf2ozNr3qPnlu1oyVTYq+4V7WA76RgxUAtf0Em/Wbid38KN6n4abEkvO4xMTBWmnP1FtQzgkEiJoA==
2483+
dependencies:
2484+
"@types/prop-types" "*"
2485+
"@types/scheduler" "*"
2486+
csstype "^3.0.2"
2487+
24792488
"@types/resolve@1.17.1":
24802489
version "1.17.1"
24812490
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6"

0 commit comments

Comments
 (0)