add types and utils for membership gaps
This commit is contained in:
parent
3ec31434aa
commit
c100d6c311
3 changed files with 19 additions and 7 deletions
|
|
@ -22,7 +22,7 @@
|
|||
<span class="event-number">GW #{eventScore.gwEvent.eventNumber}</span>
|
||||
<ElementBadge element={eventScore.gwEvent.element} />
|
||||
</div>
|
||||
<span class="event-score">{formatScore(eventScore.totalScore)}</span>
|
||||
<span class="event-score">{formatScore(eventScore.totalScore ?? 0)}</span>
|
||||
</button>
|
||||
</li>
|
||||
|
||||
|
|
|
|||
|
|
@ -160,13 +160,22 @@ export interface GwEventMinimal {
|
|||
|
||||
export interface EventScoreSummary {
|
||||
gwEvent: GwEventMinimal
|
||||
totalScore: number
|
||||
totalScore: number | null // null = gap (player wasn't in crew during this event)
|
||||
inCrew: boolean // false = gap event, true = player was in crew
|
||||
}
|
||||
|
||||
export interface MembershipPeriod {
|
||||
id: string
|
||||
joinedAt: string | null
|
||||
retiredAt: string | null
|
||||
retired: boolean
|
||||
}
|
||||
|
||||
export interface MemberGwScores {
|
||||
member: CrewMembership
|
||||
eventScores: EventScoreSummary[]
|
||||
grandTotal: number
|
||||
membershipPeriods: MembershipPeriod[] // All membership periods for boomerang players
|
||||
}
|
||||
|
||||
export interface PhantomGwScores {
|
||||
|
|
|
|||
|
|
@ -32,8 +32,9 @@ export interface PlayerRoundScore {
|
|||
export interface HistoryDataPoint {
|
||||
eventNumber: number
|
||||
eventLabel: string // "GW #72"
|
||||
totalScore: number
|
||||
totalScore: number | null // null = gap (player wasn't in crew)
|
||||
date: string // For tooltip
|
||||
isGap: boolean // true if player wasn't in crew during this event
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
|
|
@ -216,24 +217,26 @@ export function toCrewHistoryChartData(
|
|||
eventNumber: e.eventNumber,
|
||||
eventLabel: `GW #${e.eventNumber}`,
|
||||
totalScore: e.crewTotalScore ?? 0,
|
||||
date: formatDate(e.startDate)
|
||||
date: formatDate(e.startDate),
|
||||
isGap: false
|
||||
}))
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform player event scores into history chart data
|
||||
* Includes gap events (when player wasn't in crew) with null scores
|
||||
*/
|
||||
export function toPlayerHistoryChartData(
|
||||
eventScores: EventScoreSummary[],
|
||||
formatDate: (date: string) => string
|
||||
): HistoryDataPoint[] {
|
||||
return eventScores
|
||||
.filter((e) => e.totalScore > 0)
|
||||
.sort((a, b) => a.gwEvent.eventNumber - b.gwEvent.eventNumber)
|
||||
.map((e) => ({
|
||||
eventNumber: e.gwEvent.eventNumber,
|
||||
eventLabel: `GW #${e.gwEvent.eventNumber}`,
|
||||
totalScore: e.totalScore,
|
||||
date: formatDate(e.gwEvent.startDate)
|
||||
totalScore: e.inCrew ? e.totalScore : null,
|
||||
date: formatDate(e.gwEvent.startDate),
|
||||
isGap: !e.inCrew
|
||||
}))
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue