|
| 1 | +import { useEffect, useState } from "react"; |
| 2 | + |
| 3 | +import Countdown from "./countdown"; |
| 4 | +import TimeDisplay from "./timeDisplay"; |
| 5 | + |
| 6 | +interface Task { |
| 7 | + id: number; |
| 8 | + start_time: string; |
| 9 | + end_time: string; |
| 10 | +} |
| 11 | + |
| 12 | +interface Tasks { |
| 13 | + tasks: Task[]; |
| 14 | +} |
| 15 | + |
| 16 | +const CurrentTask = ({ tasks }: Tasks) => { |
| 17 | + const [currentTasks, setCurrentTasks] = useState<Task[]>([]); |
| 18 | + const [currentTask, setCurrentTask] = useState<Task>( |
| 19 | + { |
| 20 | + id : 1, |
| 21 | + start_time : "00:00:00", |
| 22 | + end_time : "00:00:00" |
| 23 | + } |
| 24 | + ); |
| 25 | + |
| 26 | + useEffect(() => { |
| 27 | + function getCurrentTask() { |
| 28 | + setCurrentTasks([]); |
| 29 | + tasks.forEach((task) => { |
| 30 | + const [startHours, startMins, startSec] = task.start_time |
| 31 | + .split(":") |
| 32 | + .map(Number); |
| 33 | + const [endHours, endMins, endSec] = task.end_time |
| 34 | + .split(":") |
| 35 | + .map(Number); |
| 36 | + |
| 37 | + const d = new Date(); |
| 38 | + const start_time = startHours * 60 * 60 + startMins * 60 + startSec; |
| 39 | + const end_time = endHours * 60 * 60 + endMins * 60 + endSec; |
| 40 | + const cur_time = |
| 41 | + d.getHours() * 60 * 60 + d.getMinutes() * 60 + d.getSeconds(); |
| 42 | + console.log( |
| 43 | + startHours, |
| 44 | + " ", |
| 45 | + endHours, |
| 46 | + " ", |
| 47 | + endHours, |
| 48 | + " ", |
| 49 | + endMins, |
| 50 | + " ", |
| 51 | + d.getHours(), |
| 52 | + " ", |
| 53 | + d.getMinutes(), |
| 54 | + ); |
| 55 | + console.log(start_time, " ", end_time, " ", cur_time); |
| 56 | + |
| 57 | + if (start_time <= cur_time && end_time >= cur_time) { |
| 58 | + setCurrentTasks((prevTasks) => [...prevTasks, task]); |
| 59 | + } |
| 60 | + }); |
| 61 | + setCurrentTask(currentTasks[0]); |
| 62 | + } |
| 63 | + |
| 64 | + getCurrentTask(); |
| 65 | + }, [tasks]); |
| 66 | + |
| 67 | + const updateTask = (status : string) => { |
| 68 | + if (status == "finished") { |
| 69 | + setCurrentTask(currentTasks[0]); |
| 70 | + } |
| 71 | + } |
| 72 | + |
| 73 | + return ( |
| 74 | + <> |
| 75 | + <ul> |
| 76 | + {currentTasks.length <= 0 ? ( |
| 77 | + <> |
| 78 | + <div className="m-8 flex flex-col items-center justify-center rounded-xl bg-blue-500 p-3 px-10 font-sans text-white shadow-lg shadow-blue-500/50"> |
| 79 | + <h1 className="p-2 font-sans">NO CURRENT TASKS</h1> |
| 80 | + <div>MAKE ONE?</div> |
| 81 | + </div> |
| 82 | + </> |
| 83 | + ) : ( |
| 84 | + <> |
| 85 | + {currentTasks.map((task: Task) => ( |
| 86 | + <li key={task.id}> |
| 87 | + <Countdown taskTime={task.end_time} /> |
| 88 | + </li> |
| 89 | + ))} |
| 90 | + </> |
| 91 | + )} |
| 92 | + </ul> |
| 93 | + <div> |
| 94 | + {currentTasks.length > 0 ? ( |
| 95 | + <TimeDisplay statusSignal={updateTask} end_time={currentTasks[0].end_time} /> |
| 96 | + ):( |
| 97 | + <></> |
| 98 | + )} |
| 99 | + </div> |
| 100 | + </> |
| 101 | + ); |
| 102 | +}; |
| 103 | + |
| 104 | +export default CurrentTask; |
0 commit comments