import { useEffect, useState } from "react"; import { api } from "../api/client"; import type { TodayPlan } from "../api/types"; import { useDialog } from "../dialog/DialogContext"; import { useSession } from "../session/SessionContext"; /** The patient's plan for today; refreshed whenever the dialog moves (a dose answered, a check-in done). */ export function useToday(): { plan: TodayPlan | null; failed: boolean } { const { session } = useSession(); const { pending } = useDialog(); const [plan, setPlan] = useState(null); const [failed, setFailed] = useState(false); useEffect(() => { if (!session) return; let alive = true; api .today(session.token) .then((p) => { if (!alive) return; setPlan(p); setFailed(false); }) .catch(() => alive && setFailed(true)); return () => { alive = false; }; }, [session, pending]); return { plan, failed }; } const MONTHS = ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"]; const WEEKDAYS = ["воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"]; /** "12 марта, вторник" — from an ISO date, no timezone shift. */ export function humanDate(iso: string): string { const [y, m, d] = iso.split("-").map(Number); const wd = new Date(Date.UTC(y, m - 1, d)).getUTCDay(); return `${d} ${MONTHS[m - 1]}, ${WEEKDAYS[wd]}`; } /** "4 октября" — from an ISO date. */ export function dayMonth(iso: string): string { const [, m, d] = iso.split("-").map(Number); return `${d} ${MONTHS[m - 1]}`; }