Fix schedule

This commit is contained in:
Peter 2023-10-31 16:05:07 -04:00
parent 0976150ebe
commit 4750bb5f00

View File

@ -81,36 +81,17 @@
</tr>
</thead>
<tbody>
<tr v-for="weekNumber in 21" :key="weekNumber">
<tr v-for="week in scheduleWeeks" :key="week.weekNumber">
<td>
<RouterLink
:to="{ name: 'schedule', params: { seasonNumber: seasonNumber, weekNumber: weekNumber } }">
Week {{ weekNumber }}
:to="{ name: 'schedule', params: { seasonNumber: seasonNumber, weekNumber: week.weekNumber } }">
Week {{ week.weekNumber }}
</RouterLink>
</td>
<td>{{ weekStart(weekNumber) }}</td>
<td>{{ weekEnd(weekNumber) }}</td>
<td>{{ weekSpecialInfo(weekNumber) }}</td>
<td>{{ week.weekStart }}</td>
<td>{{ week.weekEnd }}</td>
<td>{{ week.weekSpecialInfo }}</td>
</tr>
<!-- <tr id="week-23">
<td><a href="/schedule?week=23">Week 23</a></td>
<td>06/05/23</td>
<td>06/11/23</td>
<td>Division Series - Best of 5</td>
</tr>
<tr id="week-24">
<td><a href="/schedule?week=24">Week 24</a></td>
<td>06/12/23</td>
<td>06/25/23</td>
<td>League Championship Series - Best of 7</td>
</tr>
<tr id="week-25">
<td><a href="/schedule?week=24">Week 25</a></td>
<td>06/26/23</td>
<td>07/09/23</td>
<td>World Series Best of 7</td>
</tr> -->
</tbody>
</table>
</div>
@ -124,14 +105,23 @@
<script lang="ts">
import type { Game } from '@/services/apiResponseTypes'
import { type LeagueInfo, fetchCurrentLeagueInfo } from '@/services/currentService'
import { CURRENT_SEASON } from '@/services/utilities'
import { CURRENT_SEASON, WEEKS_PER_SEASON } from '@/services/utilities'
import { fetchGamesBySeasonAndWeek } from '@/services/gameService'
import dayjs from 'dayjs'
import customParseFormat from 'dayjs/plugin/customParseFormat'
dayjs.extend(customParseFormat)
// TODO: Annually update this start date or get it from the DB
interface ScheduleWeekRow {
weekNumber: number
weekStart: string
weekEnd: string
weekSpecialInfo: string
}
// TODO: Annually update this start date and holidays with two week series or get it from the DB
const SEASON_START_DATE: dayjs.Dayjs = dayjs('07-31-2023', 'MM/DD/YYYY')
const THANKSGIVING: dayjs.Dayjs = dayjs('11-23-2023', 'MM/DD/YYYY')
const CHRISTMAS: dayjs.Dayjs = dayjs('12-25-2023', 'MM/DD/YYYY')
export default {
name: 'ScheduleView',
@ -168,6 +158,28 @@ export default {
}, {} as { [key: string]: Game[] })
return Object.values(groupedGames)
},
scheduleWeeks(): ScheduleWeekRow[] {
const schedule = []
let currentWeekStartDate = SEASON_START_DATE
for (let week = 1; week <= 21; week++) {
const weekStartDate = currentWeekStartDate
const weekEndDate = this.isLongSeries(week, weekStartDate)
? currentWeekStartDate.add(13, 'd')
: currentWeekStartDate.add(6, 'd')
schedule.push({
weekNumber: week,
weekStart: weekStartDate.format('MM/DD/YYYY'),
weekEnd: weekEndDate.format('MM/DD/YYYY'),
weekSpecialInfo: this.weekSpecialInfo(week)
})
currentWeekStartDate = weekEndDate.add(1, 'd')
}
return schedule
}
},
watch: {
@ -188,6 +200,13 @@ export default {
async fetchData(): Promise<void> {
this.weekGames = await fetchGamesBySeasonAndWeek(this.seasonNumber, this.selectedWeekNumber)
},
isLongSeries(weekNumber: number, weekStartDate: dayjs.Dayjs): boolean {
// current 18-week schedule has 2 week series for LCS and WS (wk 20 & 21 respectively)
// and any game week that falls on the week of Thanksgiving or Christmas becomes a 2 week series
return weekNumber >= WEEKS_PER_SEASON + 2
|| Math.abs(weekStartDate.diff(THANKSGIVING, 'days')) < 6
|| Math.abs(weekStartDate.diff(CHRISTMAS, 'days')) < 6
},
weekStart(weekNumber: number): string {
// Only WS week gets delayed by LCS
if (weekNumber === 21) {