Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .env.prod.example
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# FRONTEND
APP_ENV=PRODUCTION
NEXT_PUBLIC_BACKEND_URL="https://xxxx.codersforcauses.org/api"
NEXT_PUBLIC_BACKEND_URL="https://lonkedin.mythosmc.com/api"


# BACKEND
APP_NAME=DjangoAPI
API_SECRET_KEY= CHANGE THIS TO A RANDOM STRING
API_ALLOWED_HOSTS=".localhost 127.0.0.1 [::1] .codersforcauses.org"
API_ALLOWED_HOSTS=".localhost 127.0.0.1 [::1] .mythosmc.com"

DJANGO_SUPERUSER_PASSWORD= CHANGE THIS TO A RANDOM STRING
DJANGO_SUPERUSER_EMAIL= CHANGE THIS TO A VALID EMAIL
DJANGO_SUPERUSER_USERNAME= CHANGE THIS TO A VALID USERNAME

FRONTEND_URL="https://xxxx.codersforcauses.org/"
FRONTEND_URL="https://lonkedin.mythosmc.com/"
2 changes: 1 addition & 1 deletion client/src/components/timetable_task.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ export function resizeAndPositionTimetableTasks() {
const tasks = document.getElementsByClassName("timetable-task");
for (let i = 0; i < tasks.length; i++) {
const task = tasks[i];
resizeAndPositionTimetableTask(task);
resizeAndPositionTimetableTask(task as HTMLElement);
}
}

Expand Down
4 changes: 2 additions & 2 deletions client/src/components/ui/focus/timeDisplay.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ export default function TimeDisplay({
const [Hours, Mins, Sec] = time.split(":").map(Number);

const d = new Date();
const time_serial = Hours * 60 * 60 + Mins * 60 + Sec;
var day_diff = ((day - d.getDay() + 8) % 8) * 24 * 60 * 60
const time_serial = Hours * 60 * 60 + Mins * 60 + Sec;
const day_diff = ((day - d.getDay() + 8) % 8) * 24 * 60 * 60;

const cur_time =
d.getHours() * 60 * 60 + d.getMinutes() * 60 + d.getSeconds();
Expand Down
22 changes: 15 additions & 7 deletions client/src/components/ui/focus/upcomingTasks.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,15 @@ function serializeTime(time: string) {
return Hours * 60 * 60 + Mins * 60 + Sec;
}

export default function UpcomingTasks({ tasks, times, refresh }: { tasks: Task[], times:Time[], refresh : Boolean}) {
export default function UpcomingTasks({
tasks,
times,
refresh,
}: {
tasks: Task[];
times: Time[];
refresh: boolean;
}) {
const [upcomingTimes, setUpcomingTimes] = useState<Time[]>([]);

useEffect(() => {
Expand Down Expand Up @@ -55,12 +63,12 @@ export default function UpcomingTasks({ tasks, times, refresh }: { tasks: Task[]
<div className="scrollbar h-[285px] w-96 overflow-y-auto overflow-x-hidden">
{upcomingTimes.map((time: Time, index) => (
<>
<TaskDisplay
task={tasks.filter((task) => task.id === time.task)[0]}
time={time}
key={time.id}
current={index===0}
/>
<TaskDisplay
task={tasks.filter((task) => task.id === time.task)[0]}
time={time}
key={time.id}
current={index === 0}
/>
</>
))}
</div>
Expand Down
102 changes: 76 additions & 26 deletions client/src/pages/focus.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { useRouter } from "next/router";
import React, { useEffect, useState } from "react";

import CurrentTaskTitle from "@/components/ui/focus/currentTaskTitle";
import TimeDisplay from "@/components/ui/focus/timeDisplay";
import UpcomingTasks from "@/components/ui/focus/upcomingTasks";
import { useRouter } from "next/router";

interface Time {
id: number;
Expand Down Expand Up @@ -77,7 +77,6 @@ const CountdownTimer = () => {
const result = await tasksFetch.json();
console.log("tasks: ", result);
setTasks(result);

} catch (error) {
console.error(error);
}
Expand All @@ -87,20 +86,7 @@ const CountdownTimer = () => {
}, [router]);

useEffect(() => {
var task_times : Time[] = [];
for (let index = 0; index < tasks.length; index++) {
const task = tasks[index];
for (let i = 0; i < task.times.length; i++) {
task_times = task_times.concat(task.times[i])
console.log("new time: ", task.times[i]);
}
}
setTimes(task_times);
console.log("times: ", task_times);
getCurrentTask(task_times);
}, [tasks])

function getCurrentTask(ts: Time[]) {
function getCurrentTask(ts: Time[]) {
let upcomingTimes: Time[];

const d = new Date();
Expand All @@ -110,15 +96,18 @@ const CountdownTimer = () => {

// filter out finished tasks
upcomingTimes = ts.filter((time) => {
return !(cur_d == time.day && serializeTime(time.end_time) <= cur_time + 10);
return !(
cur_d == time.day && serializeTime(time.end_time) <= cur_time + 10
);
});

// sort by start time
upcomingTimes = upcomingTimes.sort((a, b) => {
return (
serializeTime(a.start_time) +
((a.day + 8 - cur_d) % 8) * 24 * 60 * 60 -
(serializeTime(b.start_time) + ((b.day + 8 - cur_d) % 8) * 24 * 60 * 60)
(serializeTime(b.start_time) +
((b.day + 8 - cur_d) % 8) * 24 * 60 * 60)
);
});

Expand All @@ -129,9 +118,11 @@ const CountdownTimer = () => {
upcomingTimes[0].day == cur_d
) {
setCurrentTime(upcomingTimes[0]);

const cur_task = tasks.filter((task) => task.id === upcomingTimes[0]?.task);
console.log(tasks, cur_task)

const cur_task = tasks.filter(
(task) => task.id === upcomingTimes[0]?.task,
);
console.log(tasks, cur_task);
setCurrentTask(cur_task[0]);
} else {
setCurrentTime(null);
Expand All @@ -144,6 +135,67 @@ const CountdownTimer = () => {
}
}

let task_times: Time[] = [];
for (let index = 0; index < tasks.length; index++) {
const task = tasks[index];
for (let i = 0; i < task.times.length; i++) {
task_times = task_times.concat(task.times[i]);
console.log("new time: ", task.times[i]);
}
}
setTimes(task_times);
console.log("times: ", task_times);
getCurrentTask(task_times);
}, [tasks]);

function getCurrentTask(ts: Time[]) {
let upcomingTimes: Time[];

const d = new Date();
const cur_time =
d.getHours() * 60 * 60 + d.getMinutes() * 60 + d.getSeconds();
const cur_d = d.getDay();

// filter out finished tasks
upcomingTimes = ts.filter((time) => {
return !(
cur_d == time.day && serializeTime(time.end_time) <= cur_time + 10
);
});

// sort by start time
upcomingTimes = upcomingTimes.sort((a, b) => {
return (
serializeTime(a.start_time) +
((a.day + 8 - cur_d) % 8) * 24 * 60 * 60 -
(serializeTime(b.start_time) + ((b.day + 8 - cur_d) % 8) * 24 * 60 * 60)
);
});

// logic for if there are no tasks currently or at all
if (upcomingTimes.length > 0) {
if (
serializeTime(upcomingTimes[0].start_time) < cur_time &&
upcomingTimes[0].day == cur_d
) {
setCurrentTime(upcomingTimes[0]);

const cur_task = tasks.filter(
(task) => task.id === upcomingTimes[0]?.task,
);
console.log(tasks, cur_task);
setCurrentTask(cur_task[0]);
} else {
setCurrentTime(null);
setCurrentTask(null);
setNextTime(upcomingTimes[0]);
}
} else {
setCurrentTime(null);
setNextTime(null);
}
}

function onTaskEnd(status: string) {
if (status == "finished") {
setRefresh(!refresh);
Expand All @@ -152,7 +204,7 @@ const CountdownTimer = () => {
}

return (
<div className="h-[calc(100vh-64px)] bg-slate-800 font-inter flex w-full flex-col items-center justify-center">
<div className="flex h-[calc(100vh-64px)] w-full flex-col items-center justify-center bg-slate-800 font-inter">
<div className="flex flex-col items-center justify-start rounded-xl bg-slate-800 p-8 font-mono text-white">
<p className="p-4 font-inter text-4xl font-semibold">Focus</p>
<div className="flex flex-row justify-center">
Expand Down Expand Up @@ -194,16 +246,14 @@ const CountdownTimer = () => {
<div className="p-4 font-inter text-2xl font-semibold">
tasks
</div>
<UpcomingTasks tasks={tasks} times={times} refresh={refresh}/>
<UpcomingTasks tasks={tasks} times={times} refresh={refresh} />
</div>
) : (
<></>
)}
</div>
</div>
<div className="p-8">

</div>
<div className="p-8"></div>
</div>
</div>
);
Expand Down
9 changes: 4 additions & 5 deletions client/src/pages/tasks.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ export default function TasksPage() {
const router = useRouter();
const [userId, setUserId] = useState<number | null>(null);
const [items, setItems] = useState<Item[]>([]);
const [loading, setLoading] = useState<boolean>(true);
const [availableTopics, setAvailableTopics] = useState<Topic[]>([]);

const [showAddTask, setShowAddTask] = useState(false);
Expand Down Expand Up @@ -78,7 +77,7 @@ export default function TasksPage() {
} catch (err) {
console.error("Failed to load tasks:", err);
} finally {
setLoading(false);
//setLoading(false);
}
}
fetchData();
Expand Down Expand Up @@ -166,9 +165,9 @@ export default function TasksPage() {
<div className="content-container min-w-screen relative flex min-h-[calc(100vh-64px)] flex-row items-center justify-center bg-slate-800">
<div className="task-list-container h-full w-full">
<div className="task-list-content flex h-full w-full flex-col items-center justify-center rounded-lg p-3 text-slate-200">
<h1 className="task-list-title border-b-slate-400 p-3 text-center text-4xl font-bold text-slate-100">
Tasks
</h1>
<h1 className="task-list-title border-b-slate-400 p-3 text-center text-4xl font-bold text-slate-100">
Tasks
</h1>
<div className="task-list-bottom flex w-full flex-row justify-center gap-6">
<div
className="task-list-wrapper flex w-fit flex-row justify-center"
Expand Down
Loading