@@ -73,6 +73,29 @@ function findMetadata(challenge: Challenge, metadataName: ChallengeMetadataName)
73
73
return challenge . metadata ?. find ( ( item : ChallengeMetadata ) => item . name === metadataName )
74
74
}
75
75
76
+ function findOpenPhase ( challenge : Challenge ) : ChallengePhase | undefined {
77
+
78
+ // sort the phases descending by start date
79
+ const sortedPhases : Array < ChallengePhase > = challenge . phases
80
+ . sort ( ( a , b ) => new Date ( b . actualStartDate ) . getTime ( ) - new Date ( a . actualStartDate ) . getTime ( ) )
81
+
82
+ const now : Date = new Date ( )
83
+ // if we have an open phase, just use that
84
+ const openPhase : ChallengePhase | undefined = sortedPhases . find ( phase => phase . isOpen )
85
+ // otherwise, find the phase that _should_ be open now based on its start/end datetimes
86
+ || sortedPhases
87
+ . find ( phase => {
88
+ return new Date ( phase . actualEndDate ) > now && new Date ( phase . actualStartDate ) < now
89
+ } )
90
+ // otherwise, find the most recently started phase that's in the past
91
+ || sortedPhases
92
+ . find ( phase => {
93
+ return new Date ( phase . actualStartDate ) < now
94
+ } )
95
+
96
+ return openPhase
97
+ }
98
+
76
99
function findPhase ( challenge : Challenge , phases : Array < string > ) : ChallengePhase | undefined {
77
100
let phase : ChallengePhase | undefined
78
101
let index : number = 0
@@ -102,7 +125,7 @@ function getCost(challenge: Challenge, type: WorkType): number | undefined {
102
125
pageCount * ( deviceCount - 1 ) * DesignPrices . PER_PAGE_COST
103
126
104
127
// case WorkType.findData:
105
- // return FindDataPrices.PROMOTIONAL_PRODUCT_PRICE || FindDataPrices.BASE_PRODUCT_PRICE
128
+ // return FindDataPrices.PROMOTIONAL_PRODUCT_PRICE || FindDataPrices.BASE_PRODUCT_PRICE
106
129
}
107
130
}
108
131
@@ -161,9 +184,22 @@ function getProgressStepActive(challenge: Challenge, workStatus: WorkStatus): nu
161
184
switch ( challenge . status ) {
162
185
163
186
case ChallengeStatus . active :
164
- const submissionIsOpen : boolean = ! ! findPhase ( challenge , [ ChallengePhaseName . submission ] ) ?. isOpen
165
- const submissionEndDate : Date | undefined = getProgressStepDateEnd ( challenge , [ ChallengePhaseName . submission ] )
166
- return submissionIsOpen && new Date ( ) > ( submissionEndDate as Date ) ? 1 : 2
187
+ case ChallengeStatus . approved :
188
+
189
+ const openPhase : ChallengePhase | undefined = findOpenPhase ( challenge )
190
+ // if we don't have an open phase, just return submitted
191
+ if ( ! openPhase ) {
192
+ return 0
193
+ }
194
+
195
+ switch ( openPhase . name ) {
196
+ case ChallengePhaseName . registration :
197
+ return 0
198
+ case ChallengePhaseName . submission :
199
+ return 1
200
+ default :
201
+ return 2
202
+ }
167
203
168
204
case ChallengeStatus . completed :
169
205
return workStatus === WorkStatus . ready ? 3 : 4
@@ -239,7 +275,7 @@ function getTypeCategory(type: WorkType): WorkTypeCategory {
239
275
switch ( type ) {
240
276
241
277
case WorkType . data :
242
- // case WorkType.findData:
278
+ // case WorkType.findData:
243
279
return WorkTypeCategory . data
244
280
245
281
case WorkType . design :
0 commit comments