aboutsummaryrefslogtreecommitdiff
path: root/utils/schedulesUtils.ts
blob: 606e3fa7147951e167cd23c63390b0903685a685 (plain) (blame)
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 {};
};