@@ -54,6 +54,7 @@ function ensureSubmissionEntry(existingEntry, { submissionId, timestamp, timesta
5454 const baseEntry = {
5555 submissionId,
5656 submissionTime : timestamp || null ,
57+ isLatest : null ,
5758 provisionalScore : null ,
5859 finalScore : null ,
5960 status : 'completed' ,
@@ -80,6 +81,7 @@ function ensureSubmissionEntry(existingEntry, { submissionId, timestamp, timesta
8081 ...existingEntry ,
8182 submissionId : existingEntry . submissionId || submissionId ,
8283 submissionTime : existingEntry . submissionTime || baseEntry . submissionTime ,
84+ isLatest : existingEntry . isLatest === undefined ? baseEntry . isLatest : existingEntry . isLatest ,
8385 status : existingEntry . status || 'completed' ,
8486 reviewSummations,
8587 reviewSummation,
@@ -128,6 +130,7 @@ function updateSubmissionEntry(existingEntry, {
128130 normalizedScore,
129131 summation,
130132 isProvisional,
133+ isLatest,
131134} ) {
132135 const baseEntry = ensureSubmissionEntry ( existingEntry , {
133136 submissionId,
@@ -137,10 +140,12 @@ function updateSubmissionEntry(existingEntry, {
137140 const {
138141 submissionTime : baseSubmissionTime ,
139142 latestTimestamp : baseLatestTimestamp ,
143+ isLatest : baseIsLatest ,
140144 } = baseEntry ;
141145
142146 let submissionTime = baseSubmissionTime ;
143147 let latestTimestamp = baseLatestTimestamp ;
148+ let submissionIsLatest = baseIsLatest ;
144149
145150 if ( timestampValue > latestTimestamp ) {
146151 latestTimestamp = timestampValue ;
@@ -149,6 +154,10 @@ function updateSubmissionEntry(existingEntry, {
149154 submissionTime = timestamp ;
150155 }
151156
157+ if ( ! _ . isNil ( isLatest ) ) {
158+ submissionIsLatest = Boolean ( isLatest ) ;
159+ }
160+
152161 const provisionalResult = isProvisional
153162 ? mergeScoreData (
154163 baseEntry . provisionalMeta ,
@@ -173,6 +182,7 @@ function updateSubmissionEntry(existingEntry, {
173182 ...baseEntry ,
174183 submissionTime,
175184 latestTimestamp,
185+ isLatest : submissionIsLatest ,
176186 provisionalMeta : provisionalResult . meta ,
177187 provisionalScore : provisionalResult . value ,
178188 finalMeta : finalResult . meta ,
@@ -278,8 +288,6 @@ export function buildMmSubmissionData(reviewSummations = []) {
278288 memberId : null ,
279289 rating : null ,
280290 submissionsMap : new Map ( ) ,
281- bestProvisionalScore : null ,
282- bestFinalScore : null ,
283291 } ) ;
284292 }
285293
@@ -302,7 +310,7 @@ export function buildMmSubmissionData(reviewSummations = []) {
302310
303311 const normalizedScore = normalizeScoreValue ( _ . get ( summation , 'aggregateScore' ) ) ;
304312 const isProvisional = Boolean ( summation . isProvisional ) ;
305- const isLatest = _ . isNil ( summation . isLatest ) ? true : Boolean ( summation . isLatest ) ;
313+ const isLatest = _ . isNil ( summation . isLatest ) ? null : Boolean ( summation . isLatest ) ;
306314
307315 const updatedEntry = updateSubmissionEntry ( memberEntry . submissionsMap . get ( submissionId ) , {
308316 submissionId,
@@ -311,28 +319,18 @@ export function buildMmSubmissionData(reviewSummations = []) {
311319 normalizedScore,
312320 summation,
313321 isProvisional,
322+ isLatest,
314323 } ) ;
315324
316325 memberEntry . submissionsMap . set ( submissionId , updatedEntry ) ;
317-
318- if ( ! _ . isNil ( normalizedScore ) && isLatest ) {
319- if ( isProvisional ) {
320- memberEntry . bestProvisionalScore = _ . isNil ( memberEntry . bestProvisionalScore )
321- ? normalizedScore
322- : Math . max ( memberEntry . bestProvisionalScore , normalizedScore ) ;
323- } else {
324- memberEntry . bestFinalScore = _ . isNil ( memberEntry . bestFinalScore )
325- ? normalizedScore
326- : Math . max ( memberEntry . bestFinalScore , normalizedScore ) ;
327- }
328- }
329326 } ) ;
330327
331328 const members = Array . from ( membersByHandle . values ( ) ) . map ( ( memberEntry ) => {
332329 const submissions = Array . from ( memberEntry . submissionsMap . values ( ) )
333330 . map ( submission => ( {
334331 submissionId : submission . submissionId ,
335332 submissionTime : submission . submissionTime ,
333+ isLatest : submission . isLatest ,
336334 provisionalScore : _ . isNil ( submission . provisionalScore ) ? null : submission . provisionalScore ,
337335 finalScore : _ . isNil ( submission . finalScore ) ? null : submission . finalScore ,
338336 status : submission . status || 'completed' ,
@@ -341,6 +339,20 @@ export function buildMmSubmissionData(reviewSummations = []) {
341339 } ) )
342340 . sort ( ( a , b ) => toTimestampValue ( b . submissionTime ) - toTimestampValue ( a . submissionTime ) ) ;
343341
342+ const hasLatestFlag = submissions . some ( s => ! _ . isNil ( s . isLatest ) ) ;
343+ const latestSubmissions = hasLatestFlag ? submissions . filter ( s => s . isLatest ) : submissions ;
344+ const candidates = latestSubmissions . length ? latestSubmissions : submissions ;
345+ const bestProvisionalScore = _ . chain ( candidates )
346+ . map ( s => ( _ . isNil ( s . provisionalScore ) ? null : s . provisionalScore ) )
347+ . filter ( s => ! _ . isNil ( s ) )
348+ . max ( )
349+ . value ( ) || null ;
350+ const bestFinalScore = _ . chain ( candidates )
351+ . map ( s => ( _ . isNil ( s . finalScore ) ? null : s . finalScore ) )
352+ . filter ( s => ! _ . isNil ( s ) )
353+ . max ( )
354+ . value ( ) || null ;
355+
344356 const rating = _ . isNil ( memberEntry . rating ) ? null : memberEntry . rating ;
345357 const memberId = memberEntry . memberId ? _ . toString ( memberEntry . memberId ) : null ;
346358
@@ -358,8 +370,8 @@ export function buildMmSubmissionData(reviewSummations = []) {
358370 provisionalRank : null ,
359371 finalRank : null ,
360372 submissions,
361- bestProvisionalScore : memberEntry . bestProvisionalScore ,
362- bestFinalScore : memberEntry . bestFinalScore ,
373+ bestProvisionalScore,
374+ bestFinalScore,
363375 } ;
364376 } ) ;
365377
0 commit comments