import { useMemo } from 'react'; import { useSession } from '../context/SessionContext.jsx'; function StatusBadge({ label, tone = 'muted' }) { const styles = tone === 'success' ? 'bg-emerald-900 text-emerald-100' : tone === 'warn' ? 'bg-amber-900 text-amber-100' : 'bg-slate-800 text-slate-200'; return ( {label} ); } function EntityRow({ entity, connected, onToggle }) { const unavailable = entity.state === 'unavailable' || !entity.available; const isOn = entity.state === 'on'; const statusTone = unavailable ? 'warn' : isOn ? 'success' : 'muted'; const statusLabel = unavailable ? 'Unavailable' : isOn ? 'On' : 'Off'; const disableToggle = !connected || unavailable; const toneStyles = unavailable ? 'border-slate-800 bg-slate-900 text-slate-400 cursor-not-allowed' : isOn ? 'border-emerald-700 bg-emerald-900/80 text-emerald-50 hover:bg-emerald-800' : 'border-rose-800 bg-rose-900/80 text-rose-50 hover:bg-rose-800'; return ( onToggle(entity.id)} disabled={disableToggle} className={`flex w-full items-center justify-between gap-1 rounded px-1 py-0.5 text-left transition-colors ${toneStyles} disabled:opacity-60 disabled:hover:bg-inherit`} > {entity.name || entity.id} {!connected && ยท Offline} {isOn ? 'Turn off' : 'Turn on'} ); } export default function HomeAssistantControls() { const { session, homeAssistantToggle } = useSession(); const ha = session?.homeAssistant; const entities = useMemo(() => ha?.entities || [], [ha?.entities]); if (!ha?.enabled) { return ( Light Controls Not configured on the server. ); } if (entities.length === 0) { return ( Light Controls No lights or switches configured. ); } const connected = Boolean(ha?.connected); return ( Light Controls {entities.length} {entities.map((entity) => ( ))} ); }
Light Controls
Not configured on the server.
No lights or switches configured.