// Main ops dashboard layout
const { Avatar, Card, Btn, Icon } = window.OpsUI;
const { KpiCard, ProgressBar, TablesOverview, HourlyRevenueCard, ReservationsCard } = window.OpsCards;
const { ShiftsCard, MessagesCard, ComposeModal, EndDayModal } = window.OpsCards2;
const { OPS_DATA } = window;
function TopBar({ onEndDay }) {
const b = OPS_DATA.business;
return (
TS
{b.date} · started at {b.dayStartedAt} · {Math.floor(b.dayDurationMins/60)}h {b.dayDurationMins%60}m running
Reports
End day
);
}
// Compact tablet top bar
function TabletTopBar({ onEndDay }) {
const b = OPS_DATA.business;
return (
{b.date} · {b.dayStartedAt} · {Math.floor(b.dayDurationMins/60)}h {b.dayDurationMins%60}m
End day
);
}
// KPI strip — 3 cards
function KpiStrip({ compact }) {
const k = OPS_DATA.kpis;
const revPct = (k.revenue / k.revenueGoal) * 100;
const covPct = (k.covers / k.coversGoal) * 100;
const tablesOpenPct = (k.tablesOpen / k.tablesTotal) * 100;
const revDelta = ((k.revenue - k.revenueLastWeek) / k.revenueLastWeek) * 100;
const covDelta = ((k.covers - k.coversLastWeek) / k.coversLastWeek) * 100;
return (
);
}
// ---------------------------------------------------------------- DESKTOP LAYOUT
function DesktopDashboard() {
const [composeOpen, setComposeOpen] = React.useState(false);
const [composeText, setComposeText] = React.useState('');
const [composeTo, setComposeTo] = React.useState('Everyone');
const [endDayOpen, setEndDayOpen] = React.useState(false);
const openCompose = (preset, to) => {
setComposeText(preset || '');
setComposeTo(to || 'Everyone');
setComposeOpen(true);
};
return (
setEndDayOpen(true)} />
Today at a glance
Updated 19:08 · auto-refresh
openCompose('', s.name)} />
setComposeOpen(false)} />
setEndDayOpen(false)} onConfirm={() => setEndDayOpen(false)} />
);
}
// ---------------------------------------------------------------- TABLET LAYOUT
function TabletDashboard() {
const [composeOpen, setComposeOpen] = React.useState(false);
const [composeText, setComposeText] = React.useState('');
const [composeTo, setComposeTo] = React.useState('Everyone');
const [endDayOpen, setEndDayOpen] = React.useState(false);
const openCompose = (preset, to) => {
setComposeText(preset || '');
setComposeTo(to || 'Everyone');
setComposeOpen(true);
};
return (
setEndDayOpen(true)} />
openCompose('', s.name)} />
setComposeOpen(false)} />
setEndDayOpen(false)} onConfirm={() => setEndDayOpen(false)} />
);
}
window.OpsLayouts = { DesktopDashboard, TabletDashboard };