Skip to content

Commit 82bd31f

Browse files
committed
Show points display for past challenges (PM-3238)
1 parent 19ecbcf commit 82bd31f

File tree

1 file changed

+77
-24
lines changed

1 file changed

+77
-24
lines changed

src/apps/review/src/lib/components/ChallengePhaseInfo/ChallengePhaseInfo.tsx

Lines changed: 77 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -157,30 +157,54 @@ export const ChallengePhaseInfo: FC<Props> = (props: Props) => {
157157
return formatCurrency(taskPaymentFromPrizeSets.value, taskPaymentFromPrizeSets.currency)
158158
}, [taskPaymentFromPrizeSets, formatCurrency])
159159

160+
const placementPrizePayment = useMemo(
161+
() => computePlacementPrizePayment({
162+
formatCurrency,
163+
isTask,
164+
isTopgearTask,
165+
loginUserId: loginUserInfo?.userId,
166+
prizeSets: props.challengeInfo?.prizeSets,
167+
variant: props.variant ?? 'active',
168+
winners: props.challengeInfo?.winners,
169+
}),
170+
[
171+
formatCurrency,
172+
isTask,
173+
isTopgearTask,
174+
loginUserInfo?.userId,
175+
props.challengeInfo?.prizeSets,
176+
props.challengeInfo?.winners,
177+
props.variant,
178+
],
179+
)
180+
160181
const walletUrl = useMemo(
161182
() => `https://wallet.${EnvironmentConfig.TC_DOMAIN}`,
162183
[],
163184
)
164185

165186
const formattedNonTaskPayment = useMemo(() => {
166187
const variant = props.variant ?? 'active'
167-
if (!shouldShowPayment(
168-
variant,
169-
hasPayment,
170-
Boolean(paymentAmount),
171-
isLoadingPayment,
172-
isTopgearTask,
173-
)) {
188+
if (variant !== 'past' || isTopgearTask) {
174189
return undefined
175190
}
176191

177-
return paymentAmount
192+
if (hasPayment && paymentAmount && !isLoadingPayment) {
193+
return paymentAmount
194+
}
195+
196+
if (!isLoadingPayment && placementPrizePayment) {
197+
return placementPrizePayment
198+
}
199+
200+
return undefined
178201
}, [
179202
props.variant,
180203
hasPayment,
181204
paymentAmount,
182205
isLoadingPayment,
183206
isTopgearTask,
207+
placementPrizePayment,
184208
])
185209
const {
186210
phaseEndDateString: displayPhaseEndDateString,
@@ -360,6 +384,51 @@ export const ChallengePhaseInfo: FC<Props> = (props: Props) => {
360384

361385
export default ChallengePhaseInfo
362386

387+
interface PlacementPrizePaymentParams {
388+
variant: string
389+
isTask: boolean
390+
isTopgearTask: boolean
391+
prizeSets?: ChallengeInfo['prizeSets']
392+
winners?: ChallengeInfo['winners']
393+
loginUserId?: number
394+
formatCurrency: (amount: number | string, currency?: string) => string
395+
}
396+
397+
function computePlacementPrizePayment(config: PlacementPrizePaymentParams): string | undefined {
398+
if (config.variant !== 'past' || config.isTask || config.isTopgearTask) {
399+
return undefined
400+
}
401+
402+
const placementPrizeSet = config.prizeSets
403+
?.find(prizeSet => (prizeSet?.type || '').toUpperCase() === 'PLACEMENT')
404+
const prizes = placementPrizeSet?.prizes
405+
if (!Array.isArray(prizes) || !prizes.length) {
406+
return undefined
407+
}
408+
409+
const myPlacement = config.loginUserId
410+
? config.winners
411+
?.find(w => Number(w.userId) === Number(config.loginUserId))
412+
?.placement
413+
: undefined
414+
415+
const prize = typeof myPlacement === 'number' && myPlacement > 0
416+
? prizes[myPlacement - 1]
417+
: prizes[0]
418+
419+
if (!prize || typeof prize.value !== 'number') {
420+
return undefined
421+
}
422+
423+
const prizeCurrency = (prize as any)?.type
424+
if ((String(prizeCurrency || ''))
425+
.toUpperCase() !== 'POINT') {
426+
return undefined
427+
}
428+
429+
return config.formatCurrency(prize.value, prizeCurrency)
430+
}
431+
363432
function createPhaseItems(config: {
364433
displayPhaseLabel: string
365434
isTask: boolean
@@ -698,19 +767,3 @@ function getChallengeEndDateValue(data: any): string {
698767

699768
return 'N/A'
700769
}
701-
702-
function shouldShowPayment(
703-
variant: string,
704-
hasPayment: boolean,
705-
hasPaymentAmount: boolean,
706-
isLoadingPayment: boolean,
707-
isTopgearTask: boolean,
708-
): boolean {
709-
return (
710-
variant === 'past'
711-
&& hasPayment
712-
&& hasPaymentAmount
713-
&& !isLoadingPayment
714-
&& !isTopgearTask
715-
)
716-
}

0 commit comments

Comments
 (0)