import { useState, useEffect } from "react" import { getStatuses, logout } from "../../api/connections" import { ServiceType, type ConnectionStatus } from "../../types/connection" import { ServiceCard } from "./ServiceCard" import { ConnectModal } from "./ConnectModal" import "./Dashboard.scss" import { SearchModal } from "../search/SearchModal" const SERVICES = [ { serviceType: ServiceType.HOMEBOX, label: 'Homebox', icon: '📦' }, ] as const export function Dashboard() { const [statuses, setStatuses] = useState([]) const [openConnectionModal, setOpenConnectionModal] = useState(null) const [openSearchModal, setOpenSearchModal] = useState(null) const refresh = () => { getStatuses().then(setStatuses).catch(() => { }) } useEffect(() => { refresh() }, []) const handleDisconnect = (serviceType: ServiceType) => { logout(serviceType).then(refresh).catch(() => { }) } const activeConnectionModal = SERVICES.find(s => s.serviceType === openConnectionModal) const activeSearchModal = SERVICES.find(s => s.serviceType === openSearchModal) const activeSearchStatus = statuses.find(s => s.serviceType === openSearchModal) return (

Vaessl Dashboard

Services

{SERVICES.map(({ serviceType, label, icon }) => ( s.serviceType === serviceType) ?? null} onConnect={() => setOpenConnectionModal(serviceType)} onDisconnect={() => handleDisconnect(serviceType)} onSearch={() => setOpenSearchModal(serviceType)} /> ))}
{activeConnectionModal && ( setOpenConnectionModal(null)} onSuccess={() => { setOpenConnectionModal(null); refresh() }} /> )} {activeSearchModal && ( setOpenSearchModal(null) } /> )}
) }