1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
interface ScheduleItem {
airingAt: string;
// Add other properties of ScheduleItem if available
}
interface Schedule {
[day: string]: ScheduleItem[];
}
interface FormattedSchedule {
[day: string]: {
[time: string]: ScheduleItem[];
};
}
export const transformSchedule = (schedule: Schedule): FormattedSchedule => {
const formattedSchedule: FormattedSchedule = {};
for (const day of Object.keys(schedule)) {
formattedSchedule[day] = {};
for (const scheduleItem of schedule[day]) {
const time = scheduleItem.airingAt;
if (!formattedSchedule[day][time]) {
formattedSchedule[day][time] = [];
}
formattedSchedule[day][time].push(scheduleItem);
}
}
return formattedSchedule;
};
export const sortScheduleByDay = (
schedule: FormattedSchedule
): FormattedSchedule => {
const daysOfWeek: string[] = [
"Saturday",
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
];
const currentDay: number = new Date().getDay();
const orderedDays: string[] = [
...daysOfWeek.slice(currentDay),
...daysOfWeek.slice(0, currentDay),
];
const sortedSchedule: FormattedSchedule = {};
orderedDays.forEach((day) => {
if (schedule[day]) {
sortedSchedule[day] = schedule[day];
}
});
return sortedSchedule;
};
export const filterScheduleByDay = (
sortedSchedule: FormattedSchedule,
filterDay: string
): FormattedSchedule => {
if (filterDay === "All") return sortedSchedule;
const filteredSchedule: FormattedSchedule = {};
for (const day in sortedSchedule) {
if (day === filterDay) {
filteredSchedule[day] = sortedSchedule[day];
}
}
return filteredSchedule;
};
export const filterFormattedSchedule = (
formattedSchedule: FormattedSchedule,
filterDay: string
): FormattedSchedule => {
if (filterDay === "All") return formattedSchedule;
if (formattedSchedule.hasOwnProperty(filterDay)) {
return {
[filterDay]: formattedSchedule[filterDay],
};
}
return {};
};
|