diff --git a/src-ts/tools/work/work-lib/work-constants/config.json b/src-ts/tools/work/work-lib/work-constants/config.json new file mode 100644 index 000000000..29447a65f --- /dev/null +++ b/src-ts/tools/work/work-lib/work-constants/config.json @@ -0,0 +1,7 @@ +{ + "PHASE_ID_APPEALS": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "PHASE_ID_APPEALS_RESPONSE": "797a6af7-cd3f-4436-9fca-9679f773bee9", + "PHASE_ID_REGISTRATION": "a93544bc-c165-4af4-b55e-18f3593b457a", + "PHASE_ID_REVIEW": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "PHASE_ID_SUBMISSION": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49" +} diff --git a/src-ts/tools/work/work-lib/work-constants/index.ts b/src-ts/tools/work/work-lib/work-constants/index.ts index 05f2a6a0c..a226f139c 100644 --- a/src-ts/tools/work/work-lib/work-constants/index.ts +++ b/src-ts/tools/work/work-lib/work-constants/index.ts @@ -1 +1,2 @@ export { default as WorkStrings } from './strings.json' +export { default as WorkConfigConstants } from './config.json' 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..26e8573d3 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 @@ -1,6 +1,6 @@ import moment from 'moment' -import { WorkStrings } from '../../../work-constants' +import { WorkConfigConstants, WorkStrings } from '../../../work-constants' import { Challenge, ChallengeCreateBody, @@ -10,14 +10,14 @@ import { ChallengePhase, ChallengePhaseName, ChallengeUpdateBody, + PricePackageName, Work, WorkPrice, - WorkPriceBreakdown, WorkPricesType, - WorkPrize, WorkProgress, WorkProgressStep, WorkStatus, + WorkTimelinePhase, WorkType, WorkTypeCategory, WorkTypeConfig, @@ -150,12 +150,21 @@ export function buildUpdateBody(workTypeConfig: WorkTypeConfig, challenge: Chall } // ---- End Build Markdown string ---- // + // If the duration of the Submission phase depends on the package selected (i.e.: Bug Hunt), + // then update the duration for that phase to the correct value + const timeline: Array = workTypeConfig.timeline.map((phase) => { + if (workTypeConfig.submissionPhaseDuration && phase.phaseId === WorkConfigConstants.PHASE_ID_SUBMISSION) { + phase.duration = workTypeConfig.submissionPhaseDuration[formData[ChallengeMetadataName.packageType] as PricePackageName] || 0 + } + return phase + }) + const body: ChallengeUpdateBody = { description: templateString.join(''), id: challenge.id, metadata: intakeMetadata, name: formData.projectTitle, - phases: workTypeConfig.timeline, + phases: timeline, prizeSets: priceConfig.getPrizeSets(priceConfig, formData.packageType), } diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/index.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/index.ts index ee85fcf6a..b6a915fdc 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/index.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/index.ts @@ -20,6 +20,7 @@ export * from './work-progress.model' export * from './work-progress-step.model' export * from './work-status-filter.enum' export * from './work-status.enum' +export * from './work-timeline-phase.model' export { bugHuntConfig as workBugHuntConfig, WorkTypeConfigs diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timeline.model.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timeline.model.ts index 06552d227..64cbafbf2 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timeline.model.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timeline.model.ts @@ -1,5 +1,5 @@ import { WorkTimelinePhase } from './work-timeline-phase.model' export interface WorkTimeline { - [workType: string]: ReadonlyArray + [workType: string]: Array } diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timelines.config.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timelines.config.ts index f0346047d..e1a921add 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timelines.config.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timelines.config.ts @@ -1,3 +1,5 @@ +import { WorkConfigConstants } from '../../../work-constants' + import { WorkTimeline } from './work-timeline.model' import { WorkType } from './work-type.enum' @@ -6,28 +8,28 @@ export const WorkTimelines: WorkTimeline = { [WorkType.bugHunt]: [ { // Registration - duration: 259200, // 3 days - phaseId: 'a93544bc-c165-4af4-b55e-18f3593b457a', + duration: 43200, // 0.5 day + phaseId: WorkConfigConstants.PHASE_ID_REGISTRATION, }, { // Submission - duration: 259200, // 3 days - phaseId: '6950164f-3c5e-4bdc-abc8-22aaf5a1bd49', + duration: 86400, // 1 day, will vary by package + phaseId: WorkConfigConstants.PHASE_ID_SUBMISSION, }, { // Review - duration: 86400, // 1 day - phaseId: 'aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b', + duration: 172800, // 2 days + phaseId: WorkConfigConstants.PHASE_ID_REVIEW, }, { // Appeals - duration: 86400, // 1 day - phaseId: '1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6', + duration: 43200, // 0.5 day + phaseId: WorkConfigConstants.PHASE_ID_APPEALS, }, { // Appeals response - duration: 259200, // 3 days - phaseId: '797a6af7-cd3f-4436-9fca-9679f773bee9', + duration: 43200, // 0.5 day + phaseId: WorkConfigConstants.PHASE_ID_APPEALS_RESPONSE, }, ], } diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.config.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.config.ts index 9e7163239..46bce18bb 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.config.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.config.ts @@ -35,6 +35,11 @@ export const WorkTypeConfigs: { [workType: string]: WorkTypeConfig } = { }, shortDescription: 'Find bugs quickly and vigorously', startRoute: WorkIntakeFormRoutes[WorkType.bugHunt]['basicInfo'], + submissionPhaseDuration: { + 'advanced': 172800, // 2 days + 'premium': 259200, // 3 days + 'standard': 86400, // 1 day + }, subtitle: `Conduct a time based testing bug hunt where Topcoder experts scramble to find bugs or issues in the system`, tags: [ChallengeTag.qa], timeline: WorkTimelines[WorkType.bugHunt], diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.model.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.model.ts index 2623abf26..0cd2776bf 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.model.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.model.ts @@ -1,5 +1,5 @@ import { ChallengeTag } from './challenge-tag.enum' -import { WorkPrice } from './work-price.model' +import { PricePackageName, WorkPrice } from './work-price.model' import { WorkTimelinePhase } from './work-timeline-phase.model' import { WorkType } from './work-type.enum' @@ -21,9 +21,12 @@ export interface WorkTypeConfig { } shortDescription: string, startRoute: string, + submissionPhaseDuration?: { + [key in PricePackageName]?: number + }, subtitle: string, tags: Array, - timeline: ReadonlyArray + timeline: Array timelineTemplateId: string, title: string, trackId: string, diff --git a/src-ts/tools/work/work.routes.tsx b/src-ts/tools/work/work.routes.tsx index 7b1d4a63e..ba6fb8dc3 100644 --- a/src-ts/tools/work/work.routes.tsx +++ b/src-ts/tools/work/work.routes.tsx @@ -64,20 +64,20 @@ export const workRoutes: Array = [ route: `bug-hunt/basic-info/:workId`, title: intakeFormsTitle, }, - // General { - element: , - route: `:workType/login-prompt`, + element: , + route: `bug-hunt/review`, title: intakeFormsTitle, }, { element: , - route: `:workType/review`, + route: `bug-hunt/review/:workId`, title: intakeFormsTitle, }, + // General { - element: , - route: `:workType/review/:workId`, + element: , + route: `:workType/login-prompt`, title: intakeFormsTitle, }, {