diff --git a/src/components/TeamFieldingTable.vue b/src/components/TeamFieldingTable.vue
index b54d663..8768007 100644
--- a/src/components/TeamFieldingTable.vue
+++ b/src/components/TeamFieldingTable.vue
@@ -5,22 +5,23 @@
- | Season |
- Pos |
- XCh |
- XH |
- E |
- PB |
- SBa |
- CSc |
- CS% |
- wF% |
+ Player |
+ Pos |
+ XCh |
+ XH |
+ E |
+ PB |
+ SBa |
+ CSc |
+ CS% |
+ wF% |
|
-
+
{{ stat.player.name }}
|
@@ -57,6 +58,10 @@
import { aggregateFieldingStats, fetchFieldingStatsBySeasonAndTeamId, totaledFieldingStats, type FieldingStat } from '@/services/fieldingStatsService'
import { POS_MAP } from '@/services/utilities'
+interface ExtendedFieldingStat extends FieldingStat {
+ playerName: string
+}
+
export default {
name: 'TeamFieldingTable',
props: {
@@ -66,7 +71,9 @@ export default {
},
data() {
return {
- fieldingStats: [] as FieldingStat[]
+ fieldingStats: [] as ExtendedFieldingStat[],
+ sortKey: 'xCheckCount' as keyof ExtendedFieldingStat,
+ sortOrder: -1
}
},
computed: {
@@ -97,7 +104,9 @@ export default {
methods: {
async fetchData(): Promise {
const unsortedFieldingStats: FieldingStat[] = await fetchFieldingStatsBySeasonAndTeamId(this.seasonNumber, this.teamId, this.isRegularSeason)
- this.fieldingStats = unsortedFieldingStats.sort((s1, s2) => s2.xCheckCount - s1.xCheckCount)
+ this.fieldingStats = unsortedFieldingStats
+ .map(s => ({ ...s, playerName: s.player.name }))
+ .sort((s1, s2) => s2.xCheckCount - s1.xCheckCount)
},
formatCaughtStealingPercent(stat: FieldingStat): string {
if (stat.stolenBaseCheckCount === 0 || Number.isNaN(stat.caughtStealingPercent)) {
@@ -108,7 +117,41 @@ export default {
},
formatWeightedFieldingPercent(stat: FieldingStat): string {
return stat.weightedFieldingPercent.toFixed(3)
+ },
+ sortBy(stat: keyof ExtendedFieldingStat): void {
+ this.setKey(stat)
+
+ this.fieldingStats.sort((s1, s2) => s2[stat] < s1[stat] ? this.sortOrder : -1 * this.sortOrder)
+ },
+ setKey(stat: keyof ExtendedFieldingStat): void {
+ if (this.sortKey === stat) {
+ // if key currently selected, flip sort order
+ this.sortOrder *= -1
+ } else {
+ this.sortKey = stat
+ this.sortOrder = stat === 'playerName' ? 1 : -1
+ }
+ },
+ getArrow(stat: keyof ExtendedFieldingStat): string {
+ if (this.sortKey !== stat) return 'faux-arrow'
+
+ return this.sortOrder > 0 ? 'up' : 'down'
}
}
}
+
+