import dayjs, { Dayjs } from "dayjs"; import utc from "dayjs/plugin/utc"; import { useEffect, useState } from "react"; import { QueryCell } from "@lib/QueryCell"; import { useLocale } from "@lib/hooks/useLocale"; import { inferQueryOutput, trpc } from "@lib/trpc"; import Loader from "@components/Loader"; import Shell from "@components/Shell"; dayjs.extend(utc); type User = inferQueryOutput<"viewer.me">; const AvailabilityView = ({ user }: { user: User }) => { const { t } = useLocale(); const [loading, setLoading] = useState(true); const [availability, setAvailability] = useState<{ end: string; start: string }[]>([]); const [selectedDate, setSelectedDate] = useState(dayjs()); function convertMinsToHrsMins(mins: number) { let h = Math.floor(mins / 60); let m = mins % 60; h = h < 10 ? 0 + h : h; m = m < 10 ? 0 + m : m; return `${h}:${m}`; } useEffect(() => { const fetchAvailability = (date: Dayjs) => { const dateFrom = date.startOf("day").utc().format(); const dateTo = date.endOf("day").utc().format(); setLoading(true); fetch(`/api/availability/${user.username}?dateFrom=${dateFrom}&dateTo=${dateTo}`) .then((res) => { return res.json(); }) .then((availableIntervals) => { setAvailability(availableIntervals.busy); }) .catch((e) => { console.error(e); }) .finally(() => { setLoading(false); }); }; fetchAvailability(selectedDate); }, [selectedDate]); return (
{t("overview_of_day")}{" "} { setSelectedDate(dayjs(e.target.value)); }} /> {t("hover_over_bold_times_tip")}
{t("your_day_starts_at")} {convertMinsToHrsMins(user.startTime)}
{loading ? ( ) : availability.length > 0 ? ( availability.map((slot) => (
{t("calendar_shows_busy_between")}{" "} {dayjs(slot.start).format("HH:mm")} {" "} {t("and")}{" "} {dayjs(slot.end).format("HH:mm")} {" "} {t("on")} {dayjs(slot.start).format("D")}{" "} {t(dayjs(slot.start).format("MMMM").toLowerCase())} {dayjs(slot.start).format("YYYY")}
)) ) : (
{t("calendar_no_busy_slots")}
)}
{t("your_day_ends_at")} {convertMinsToHrsMins(user.endTime)}
); }; export default function Troubleshoot() { const query = trpc.useQuery(["viewer.me"]); const { t } = useLocale(); return (
} />
); }