import Page, {PageBody, PageFlexColumn, PageFlexRow} from "../primitives/page/Page"; import Header, {HeaderTitle} from "../primitives/header/Header"; import {TitleLine} from "../primitives/misc/Misc"; import {Size} from "../models/Shared"; import Blob, {BlobText, BlobTextLine} from "../primitives/blob/Blob"; import {Icon} from "../primitives/Shared"; import {faChevronDown, faPlay, faPlus} from "@fortawesome/free-solid-svg-icons"; import {useContext, useEffect, useMemo} from "react"; import ProgramContext from "../contexts/ProgramContext"; import LoadingPage from "./LoadingPage"; import {subTitleOfProgram} from "../models/Programs"; import {useNavigate} from "react-router"; import DeviceContext from "../contexts/DeviceContext"; import WorkoutContext from "../contexts/WorkoutContext"; import {formatDate, formatTime} from "../helpers/dates"; import {colorOf, WorkoutStatus} from "../models/Workouts"; import {faSpinner} from "@fortawesome/free-solid-svg-icons/faSpinner"; import {useKey} from "../hooks/keyboard"; import {Boi} from "../primitives/boi/Boi"; export default function IndexPage(): JSX.Element { const {devices} = useContext(DeviceContext); const {programs} = useContext(ProgramContext); const {workouts, loadingWorkouts, expanded, showMoreWorkouts, refreshWorkouts} = useContext(WorkoutContext); const navigate = useNavigate(); const isRunning = useMemo(() => workouts.some(w => w.status !== WorkoutStatus.Disconnected), [workouts]); useEffect(() => { refreshWorkouts(); }, [refreshWorkouts]); useKey(["/", "*"], () => navigate("/play"), [navigate]); if (programs === null) { return } else if (devices === null) { return } return (
YKonsole
navigate("/play")} color={isRunning ? "yellow" : "green"}> {isRunning ? "Fortsett" : "Start"} Siste økter ({loadingWorkouts ? : workouts.length}) {workouts.map(w => ( navigate(`/workouts/${w.id}`)}> {formatDate(w.createdAt)} {formatTime(w.createdAt)} {w.program ? w.program.name : (w.device?.name || "Ukjent enhet")} ))} {!expanded && ( showMoreWorkouts()}> {loadingWorkouts && } {!loadingWorkouts && <> Vis flere } )} Programmer ({programs.length}) {programs.map(p => ( navigate(`/programs/${p.id}`)}> {p.name} {subTitleOfProgram(p)} ))} navigate(`/programs/new`)}> Legg til Enheter ({devices.length}) {devices.map(d => ( navigate(`/devices/${d.id}`)}> {d.name} {d.connectionString} ))} navigate("/devices/new")}> Legg til
); }