|
| 1 | +import React from "react"; |
| 2 | +import { addMinutes, format } from "date-fns"; |
| 3 | + |
| 4 | +import { api } from "~/utils/api"; |
| 5 | +import ActivityUpdateModal from "./activity/activityupdatemodal"; |
| 6 | + |
| 7 | +interface Activity { |
| 8 | + name: string; |
| 9 | + id: number; |
| 10 | + day: Date; |
| 11 | + startTime: Date; |
| 12 | + durationMinutes: number; |
| 13 | + leader: string; |
| 14 | + location: string; |
| 15 | +} |
| 16 | + |
| 17 | +interface ScheduleProps { |
| 18 | + selectedDate: Date | undefined; |
| 19 | +} |
| 20 | + |
| 21 | +export default function Schedule(props: ScheduleProps) { |
| 22 | + let dailySchedule; |
| 23 | + const [activities, setActivities] = React.useState<Activity[]>([]); |
| 24 | + |
| 25 | + if (props.selectedDate) { |
| 26 | + ({ data: dailySchedule } = api.activity.getDailySchedule.useQuery({ |
| 27 | + day: props.selectedDate.toISOString().split("T")[0] ?? "", |
| 28 | + })); |
| 29 | + } else { |
| 30 | + ({ data: dailySchedule } = api.activity.getDailySchedule.useQuery({ |
| 31 | + day: new Date().toISOString().split("T")[0] ?? "", |
| 32 | + })); |
| 33 | + } |
| 34 | + |
| 35 | + React.useEffect(() => { |
| 36 | + const sortedActivities = [...(dailySchedule ?? [])].sort( |
| 37 | + (a, b) => a.startTime.getTime() - b.startTime.getTime(), |
| 38 | + ); |
| 39 | + setActivities(sortedActivities ?? []); |
| 40 | + }, [dailySchedule, props.selectedDate]); |
| 41 | + |
| 42 | + return ( |
| 43 | + <div className="pt-[32px]"> |
| 44 | + {props.selectedDate && activities.length > 0 ? ( |
| 45 | + <div>{activities.map((activity: Activity) => Event(activity))}</div> |
| 46 | + ) : ( |
| 47 | + <div className="text-[16px]"> |
| 48 | + {props.selectedDate |
| 49 | + ? "No events are scheduled for today" |
| 50 | + : "Pick a Date to View Events"} |
| 51 | + </div> |
| 52 | + )} |
| 53 | + </div> |
| 54 | + ); |
| 55 | +} |
| 56 | + |
| 57 | +function Event(activity: Activity) { |
| 58 | + return ( |
| 59 | + <div |
| 60 | + key={activity.id} |
| 61 | + className="mb-5 flex flex-row items-center justify-start" |
| 62 | + > |
| 63 | + <div className="w-[100px] font-bold"> |
| 64 | + {`${format(activity.startTime, "h:mm a")} - ${format(addMinutes(activity.startTime, activity.durationMinutes), "h:mm a")}`} |
| 65 | + </div> |
| 66 | + <div className="ml-5 w-full rounded-[10px] bg-[#EFF2FB] p-4"> |
| 67 | + <div className="flex flex-row items-center justify-between"> |
| 68 | + <div className="font-bold">{activity.name}</div> |
| 69 | + <ActivityUpdateModal id={activity.id} /> |
| 70 | + </div> |
| 71 | + </div> |
| 72 | + </div> |
| 73 | + ); |
| 74 | +} |
0 commit comments