function PageStores({pushToast}){
const I = window.Icons;
const D = window.FLUXData;
const [view, setView] = React.useState('grid');
const [selected, setSelected] = React.useState(null);
return (
<>
Tiendas
{D.stores.length} puntos de venta activos en México. Visualización por mapa, grid o tabla.
{view==='grid' && (
{D.stores.map(s=>(
setSelected(s)}>
{s.name}
{s.city} · {s.manager}
{s.alerts>0 ?
{s.alerts} alerta{s.alerts>1?'s':''} :
OK}
Ventas
${(s.sales/1000).toFixed(0)}K
{s.salesDelta}%
Quiebres
{s.breakages}%
{s.breakagesDelta}%
{s.inventory.toLocaleString()} u. inventarioRotación {s.rotation}d
))}
)}
{view==='table' && (
| Tienda | Ciudad | Manager | Ventas | Δ | Quiebres | Inventario | Rotación | Alertas |
{D.stores.map(s=>(
setSelected(s)} style={{cursor:'pointer'}}>
| {s.name} |
{s.city} |
{s.manager} |
${s.sales.toLocaleString()} |
{s.salesDelta}% |
{s.breakages}% |
{s.inventory.toLocaleString()} |
{s.rotation}d |
{s.alerts>0?{s.alerts}:0} |
))}
)}
{view==='map' && (
{/* Stylized Mexico map */}
Cadena nacional
{D.stores.length} tiendas · {D.stores.reduce((a,s)=>a+s.inventory,0).toLocaleString()} u. inventario
)}
{selected && (
setSelected(null)}>
e.stopPropagation()}>
{selected.name}
{selected.city} · Manager: {selected.manager}
Ventas
${selected.sales.toLocaleString()}
{selected.salesDelta}%
Inventario
{selected.inventory.toLocaleString()}
{selected.rotation}d rotación
Alertas
0?'var(--amber-2)':'var(--green)'}}>{selected.alerts}
)}
>
);
}
window.PageStores = PageStores;