import { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import { Home, Plus, Thermometer, Droplets, ChevronRight } from 'lucide-react'; import api from '../lib/api'; import { usePermissions } from '../hooks/usePermissions'; import { PageHeader, EmptyState, CardSkeleton } from '../components/ui/LinearPrimitives'; export default function RoomsPage() { const { isManager } = usePermissions(); const [rooms, setRooms] = useState([]); const [isLoading, setIsLoading] = useState(true); useEffect(() => { fetchRooms(); }, []); const fetchRooms = async () => { setIsLoading(true); try { const { data } = await api.get('/rooms'); setRooms(data); } catch (e) { console.error(e); } finally { setIsLoading(false); } }; // Header background colors per room type const getHeaderStyle = (type: string) => { const styles: Record = { VEG: { bg: 'bg-green-500/10', text: 'text-green-600', border: 'border-green-500/20' }, FLOWER: { bg: 'bg-purple-500/10', text: 'text-purple-600', border: 'border-purple-500/20' }, DRY: { bg: 'bg-amber-500/10', text: 'text-amber-600', border: 'border-amber-500/20' }, CURE: { bg: 'bg-orange-500/10', text: 'text-orange-600', border: 'border-orange-500/20' }, MOTHER: { bg: 'bg-pink-500/10', text: 'text-pink-600', border: 'border-pink-500/20' }, TRIM: { bg: 'bg-slate-500/10', text: 'text-slate-600', border: 'border-slate-500/20' }, CLONE: { bg: 'bg-teal-500/10', text: 'text-teal-600', border: 'border-teal-500/20' }, }; return styles[type] || { bg: 'bg-tertiary', text: 'text-secondary', border: 'border-subtle' }; }; return (
Add Room ) } /> {isLoading ? (
{Array.from({ length: 6 }).map((_, i) => )}
) : rooms.length === 0 ? ( Create First Room ) } /> ) : (
{rooms.map(room => { const style = getHeaderStyle(room.type); return ( {/* Color-coded Header */}

{room.name?.replace('[DEMO] ', '')}

{room.sqft?.toLocaleString()} sqft • {room.capacity || '—'} cap
{room.type}
{/* Sensor Data - Prominent */}
{room.targetTemp || '—'} °F
Temp
{room.targetHumidity || '—'} %
Humidity
{/* Batch Count */}
0 ? 'bg-success' : 'bg-subtle'}`} /> {room.batches?.length || 0} {room.batches?.length === 1 ? 'batch' : 'batches'}
View →
); })}
)}
); }