import { Button, Container, Dialog, DialogActions, DialogContent, DialogTitle, IconButton, List, ListItem, ListItemButton, ListItemText, Stack, TextField, Typography, } from '@mui/material'; import { Delete, Edit } from '@mui/icons-material'; import { format } from 'date-fns'; import { useMemo, useState } from 'react'; import { Link as RouterLink } from 'react-router-dom'; import { usePickLists, useAreas } from '../hooks/dataHooks'; import { useDatabase } from '../context/DBProvider'; import { PickList } from '../models/PickList'; export const PickListsScreen = () => { const lists = usePickLists(); const areas = useAreas(); const db = useDatabase(); const [editingList, setEditingList] = useState(null); const [areaId, setAreaId] = useState(''); const [notes, setNotes] = useState(''); const areaNameById = useMemo(() => { const map = new Map(); areas.forEach((area) => map.set(area.id, area.name)); return map; }, [areas]); const sortedLists = useMemo(() => { const locale = new Intl.Collator(undefined, { sensitivity: 'base' }); const normalizeAreaName = (areaId: string) => (areaNameById.get(areaId) ?? 'Unknown area').trim(); return [...lists].sort((a, b) => { const nameComparison = locale.compare( normalizeAreaName(a.area_id), normalizeAreaName(b.area_id), ); if (nameComparison !== 0) return nameComparison; return a.created_at - b.created_at; }); }, [areaNameById, lists]); const getAreaName = (areaId: string) => areaNameById.get(areaId) ?? 'Unknown area'; const openEdit = (list: PickList) => { setEditingList(list); setAreaId(list.area_id); setNotes(list.notes ?? ''); }; const closeEdit = () => { setEditingList(null); setAreaId(''); setNotes(''); }; const saveEdit = async () => { if (!editingList || !areaId) return; const listId = editingList.id; const trimmedNotes = notes.trim() || undefined; closeEdit(); await db.pickLists.update(listId, { area_id: areaId, notes: trimmedNotes, }); }; const deleteList = async (list: PickList) => { const confirmed = window.confirm('Remove this pick list and its items?'); if (!confirmed) return; await db.pickItems.where('pick_list_id').equals(list.id).delete(); await db.pickLists.delete(list.id); }; return ( Pick Lists {sortedLists.map((list) => ( { event.stopPropagation(); event.preventDefault(); openEdit(list); }} > { event.stopPropagation(); event.preventDefault(); deleteList(list); }} > }> {list.notes ? {list.notes} : null} Created {format(list.created_at, 'PPpp')} } secondaryTypographyProps={{ component: 'div' }} /> ))} {editingList ? ( Edit Pick List setAreaId(event.target.value)} > {areas.map((area) => ( ))} setNotes(event.target.value)} multiline minRows={2} /> ) : null} ); };