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>
|
<span class="event-number">GW #{eventScore.gwEvent.eventNumber}</span>
|
||||||
<ElementBadge element={eventScore.gwEvent.element} />
|
<ElementBadge element={eventScore.gwEvent.element} />
|
||||||
</div>
|
</div>
|
||||||
<span class="event-score">{formatScore(eventScore.totalScore)}</span>
|
<span class="event-score">{formatScore(eventScore.totalScore ?? 0)}</span>
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -160,13 +160,22 @@ export interface GwEventMinimal {
|
||||||
|
|
||||||
export interface EventScoreSummary {
|
export interface EventScoreSummary {
|
||||||
gwEvent: GwEventMinimal
|
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 {
|
export interface MemberGwScores {
|
||||||
member: CrewMembership
|
member: CrewMembership
|
||||||
eventScores: EventScoreSummary[]
|
eventScores: EventScoreSummary[]
|
||||||
grandTotal: number
|
grandTotal: number
|
||||||
|
membershipPeriods: MembershipPeriod[] // All membership periods for boomerang players
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PhantomGwScores {
|
export interface PhantomGwScores {
|
||||||
|
|
|
||||||
|
|
@ -32,8 +32,9 @@ export interface PlayerRoundScore {
|
||||||
export interface HistoryDataPoint {
|
export interface HistoryDataPoint {
|
||||||
eventNumber: number
|
eventNumber: number
|
||||||
eventLabel: string // "GW #72"
|
eventLabel: string // "GW #72"
|
||||||
totalScore: number
|
totalScore: number | null // null = gap (player wasn't in crew)
|
||||||
date: string // For tooltip
|
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,
|
eventNumber: e.eventNumber,
|
||||||
eventLabel: `GW #${e.eventNumber}`,
|
eventLabel: `GW #${e.eventNumber}`,
|
||||||
totalScore: e.crewTotalScore ?? 0,
|
totalScore: e.crewTotalScore ?? 0,
|
||||||
date: formatDate(e.startDate)
|
date: formatDate(e.startDate),
|
||||||
|
isGap: false
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transform player event scores into history chart data
|
* Transform player event scores into history chart data
|
||||||
|
* Includes gap events (when player wasn't in crew) with null scores
|
||||||
*/
|
*/
|
||||||
export function toPlayerHistoryChartData(
|
export function toPlayerHistoryChartData(
|
||||||
eventScores: EventScoreSummary[],
|
eventScores: EventScoreSummary[],
|
||||||
formatDate: (date: string) => string
|
formatDate: (date: string) => string
|
||||||
): HistoryDataPoint[] {
|
): HistoryDataPoint[] {
|
||||||
return eventScores
|
return eventScores
|
||||||
.filter((e) => e.totalScore > 0)
|
|
||||||
.sort((a, b) => a.gwEvent.eventNumber - b.gwEvent.eventNumber)
|
.sort((a, b) => a.gwEvent.eventNumber - b.gwEvent.eventNumber)
|
||||||
.map((e) => ({
|
.map((e) => ({
|
||||||
eventNumber: e.gwEvent.eventNumber,
|
eventNumber: e.gwEvent.eventNumber,
|
||||||
eventLabel: `GW #${e.gwEvent.eventNumber}`,
|
eventLabel: `GW #${e.gwEvent.eventNumber}`,
|
||||||
totalScore: e.totalScore,
|
totalScore: e.inCrew ? e.totalScore : null,
|
||||||
date: formatDate(e.gwEvent.startDate)
|
date: formatDate(e.gwEvent.startDate),
|
||||||
|
isGap: !e.inCrew
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue