import { useMemo } from 'react'; import { useQuery } from '@tanstack/react-query'; import { parseAsString, useQueryState } from 'nuqs'; import { ChevronRight, MapPin } from 'lucide-react'; import { PageHeader } from '../components/layout/PageHeader.js'; import { SiteRoomTree } from '../components/locations/SiteRoomTree.js'; import { BinGrid } from '../components/locations/BinGrid.js'; import { listSites } from '../lib/api/sites.js'; import { listRooms } from '../lib/api/rooms.js'; import { queryKeys } from '../lib/queryKeys.js'; import { useAuth } from '../contexts/AuthContext.js'; export default function Locations() { const { user } = useAuth(); const canEdit = user?.role === 'ADMIN'; const [siteId, setSiteId] = useQueryState('site', parseAsString); const [roomId, setRoomId] = useQueryState('room', parseAsString); const handleSite = (id: string) => { void setSiteId(id || null); void setRoomId(null); }; const handleRoom = (id: string) => { void setRoomId(id || null); }; const sites = useQuery({ queryKey: queryKeys.sites.list({ pageSize: 100 }), queryFn: () => listSites({ pageSize: 100 }), }); const rooms = useQuery({ queryKey: queryKeys.rooms.list({ siteId, pageSize: 100 }), queryFn: () => listRooms({ siteId: siteId!, pageSize: 100 }), enabled: Boolean(siteId), }); const siteName = useMemo( () => sites.data?.data.find((s) => s.id === siteId)?.name, [sites.data, siteId], ); const roomName = useMemo( () => rooms.data?.data.find((r) => r.id === roomId)?.name, [rooms.data, roomId], ); return (
{siteSelected ? 'Pick a room' : 'Pick a site and room'}
Bins live inside rooms. Expand a site in the tree and choose a room to manage its bins.