Skip to content
This repository was archived by the owner on Aug 2, 2025. It is now read-only.

Commit 2d9730c

Browse files
committed
fix: prevent Timetabl from displaying 'Invalid Duration'
1 parent 30ce632 commit 2d9730c

File tree

5 files changed

+41
-50
lines changed

5 files changed

+41
-50
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "timetabl-app",
3-
"version": "1.0.10-beta",
3+
"version": "1.0.11-beta",
44
"description": "",
55
"main": "index.js",
66
"scripts": {

src/components/DTTPeriod/DTTPeriod.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ export const DTTPeriod = ({
4040
leftContent={period.name}
4141
leftContentSize={"xs"}
4242
transition={
43-
period?.name == "Transition" ||
44-
DateTime.fromISO("15:15") <= DateTime.fromISO(period.time) ||
45-
DateTime.fromISO(period.time) <= DateTime.fromISO("09:00")
43+
period?.name === "Transition" ||
44+
DateTime.fromISO(`${period?.date}T15:15`) <= period.time ||
45+
period.time <= DateTime.fromISO(`${period?.date}T09:00`)
4646
}
4747
isLoaded={isLoaded}
4848
rightContent={
4949
showTimesInsteadOfRooms === "true" ? (
50-
period.time
50+
period?.time?.toLocaleString(DateTime.TIME_SIMPLE)
5151
) : period.room ? (
5252
<chakra.span
5353
bg={period.roomTo && "primary.100"}
@@ -58,12 +58,15 @@ export const DTTPeriod = ({
5858
{period.roomTo ?? period.room}
5959
</chakra.span>
6060
) : (
61-
period.time
61+
period?.time?.toLocaleString(DateTime.TIME_SIMPLE)
6262
)
6363
}
6464
expandedContent={
6565
<>
66-
at {showTimesInsteadOfRooms !== "true" ? period.time : period.room}{" "}
66+
at{" "}
67+
{showTimesInsteadOfRooms !== "true"
68+
? period?.time?.toLocaleString(DateTime.TIME_SIMPLE)
69+
: period.room}{" "}
6770
with{" "}
6871
<chakra.span
6972
bg={period.casual && "primary.100"}

src/hooks/sbhsQuery/use/useDTT.ts

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
import { DateTime } from "luxon";
22
import { fetchDayTimetable } from "../fetch";
3-
import { APIPeriod } from "../fetch/fetchDayTimetable";
3+
import { APIDTT, APIPeriod } from "../fetch/fetchDayTimetable";
44
import { useSBHSQuery } from "./useSBHSQuery";
55

66
export type TimetablPeriod = {
77
name?: string;
88
room?: string;
99
teacher?: string;
10-
time?: string;
11-
endTime?: string;
10+
time?: DateTime;
11+
endTime?: DateTime;
1212
colour?: string;
1313
key?: string;
1414
casual?: string;
1515
roomTo?: string;
16+
date?: string;
1617
};
1718

1819
export type TimetablDTT = {
@@ -39,7 +40,7 @@ const formatCasual = (casual?: string) => {
3940
* @returns Query result for daily timetable.
4041
*/
4142
export const useDTT = (enabled?: boolean, date?: string) =>
42-
useSBHSQuery(
43+
useSBHSQuery<{ date: string }, APIDTT, TimetablDTT>(
4344
"timetable/daytimetable.json",
4445
fetchDayTimetable,
4546
{ date },
@@ -49,7 +50,7 @@ export const useDTT = (enabled?: boolean, date?: string) =>
4950

5051
const result = {
5152
periods: (data?.bells ?? [])
52-
.map((bell, index, bells) => {
53+
.flatMap((bell, index, bells) => {
5354
const timetable = data?.timetable;
5455
const subjects = timetable?.subjects;
5556
const period: APIPeriod =
@@ -86,34 +87,27 @@ export const useDTT = (enabled?: boolean, date?: string) =>
8687
return [
8788
{
8889
name: "Transition",
89-
endTime: DateTime.fromISO(bell?.startTime).toLocaleString(
90-
DateTime.TIME_SIMPLE
91-
),
92-
time: DateTime.fromISO(
93-
bells?.[index - 1]?.endTime ?? "00:00"
94-
).toLocaleString(DateTime.TIME_SIMPLE),
90+
endTime: DateTime.fromISO(`${data?.date}T${bell?.startTime}`),
91+
time: DateTime.fromISO(bells?.[index - 1]?.endTime ?? "00:00"),
92+
date: data?.date,
9593
},
9694
{
9795
name,
9896
room: period?.room,
9997
teacher,
100-
time: DateTime.fromISO(bell?.startTime).toLocaleString(
101-
DateTime.TIME_SIMPLE
102-
),
103-
endTime: DateTime.fromISO(bell?.endTime).toLocaleString(
104-
DateTime.TIME_SIMPLE
105-
),
98+
time: DateTime.fromISO(`${data?.date}T${bell?.startTime}`),
99+
endTime: DateTime.fromISO(`${data?.date}T${bell?.endTime}`),
106100
colour:
107101
subject?.colour && period?.room
108102
? `#${subject?.colour}`
109103
: "transparent",
110104
key: bell?.bell,
111105
casual,
112106
roomTo,
107+
date: data?.date,
113108
},
114109
];
115110
})
116-
.flat()
117111
.filter((period) => period?.time !== period?.endTime),
118112
date: data?.date,
119113
};

src/routes/Main/Home/Home.tsx

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
import "@fontsource/poppins";
1111
import { motion, LayoutGroup, AnimatePresence } from "framer-motion";
1212
import QueriesHandler from "../../../components/QueriesHandler";
13-
import { useEffect, useState } from "react";
13+
import { useState } from "react";
1414
import { ArrowLeft, ArrowRight } from "phosphor-react";
1515
import { DateTime } from "luxon";
1616
import Empty from "./../../../components/Empty";
@@ -54,19 +54,16 @@ const HomeView = ({
5454
room: 605,
5555
});
5656

57-
useEffect(() => {
58-
if (initialDate === date) {
59-
onDateChange();
60-
}
61-
}, [initialDate, date, onDateChange]);
57+
// useEffect(() => {
58+
// if (initialDate === date) {
59+
// onDateChange();
60+
// }
61+
// }, [initialDate, date, onDateChange]);
6262

6363
const [countdown, setCountdown] = useState("");
6464

6565
const activeIndex = periods.findIndex(
66-
({ time, endTime }: { time: string; endTime: string }) =>
67-
(DateTime.fromISO(`${date}T${time}`) < DateTime.now() &&
68-
DateTime.now() < DateTime.fromISO(`${date}T${endTime}`)) ??
69-
false
66+
({ time, endTime }) => (time < DateTime.now() && endTime) ?? false
7067
);
7168

7269
return (
@@ -125,9 +122,10 @@ const HomeView = ({
125122
</Flex>
126123
<Flex
127124
direction={"column"}
128-
bg={
129-
useToken("colors", useColorModeValue("gray.300", "gray.500")) + "33"
130-
}
125+
bg={`${useToken(
126+
"colors",
127+
useColorModeValue("gray.300", "gray.500")
128+
)}33`}
131129
minW={"50vw"}
132130
rounded={10}
133131
as={motion.div}
@@ -160,6 +158,8 @@ const HomeView = ({
160158
export default function Home() {
161159
const [date, setDate] = useState<string | undefined>();
162160

161+
console.log(date);
162+
163163
return (
164164
<QueriesHandler queries={{ dtt: useDTT(true, date), initialDtt: useDTT() }}>
165165
{(

src/routes/Main/Home/NextPeriod.tsx

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,20 @@ type NextPeriodProps = {
1515

1616
export default ({
1717
periods,
18-
date,
1918
countdown,
2019
setCountdown,
2120
isLoaded,
2221
}: NextPeriodProps) => {
2322
const activePeriod = periods.findIndex(
24-
({ time, endTime }: { time: string; endTime: string }) =>
25-
(DateTime.fromISO(`${date}T${time}`) < DateTime.now() &&
26-
DateTime.now() < DateTime.fromISO(`${date}T${endTime}`)) ??
27-
false
23+
({ time, endTime }) =>
24+
(time < DateTime.now() && DateTime.now() < endTime) ?? false
2825
);
2926

3027
const nextPeriod = periods[activePeriod + 1];
3128

3229
useEffect(() => {
3330
const timer = setInterval(() => {
34-
setCountdown(
35-
DateTime.fromISO(`${date}T${nextPeriod.time}`)
36-
.diffNow()
37-
.toFormat("hh:mm:ss")
38-
);
31+
setCountdown(nextPeriod.time.diffNow().toFormat("hh:mm:ss"));
3932
}, 500);
4033

4134
return () => clearInterval(timer);
@@ -58,8 +51,9 @@ export default ({
5851
leftContentSize={"lg"}
5952
rightContent={
6053
showTimesInsteadOfRooms === "true"
61-
? nextPeriod.time
62-
: nextPeriod.room ?? nextPeriod.time
54+
? nextPeriod?.time?.toLocaleString(DateTime.TIME_SIMPLE)
55+
: nextPeriod.room ??
56+
nextPeriod?.time?.toLocaleString(DateTime.TIME_SIMPLE)
6357
}
6458
expandedContent={<>IN {countdown}</>}
6559
expandedSize={"xl"}

0 commit comments

Comments
 (0)