diff --git a/estore/src/app/admin/page.tsx b/estore/src/app/admin/page.tsx index c6ebfac..a5dce7c 100644 --- a/estore/src/app/admin/page.tsx +++ b/estore/src/app/admin/page.tsx @@ -1756,6 +1756,10 @@ export default function AdminPage() { const [error, setError] = useState('') const [search, setSearch] = useState('') const [tab, setTab] = useState<'items' | 'categories' | 'hours' | 'occasions' | 'delivery' | 'orders'>('items') + const [storeClosed, setStoreClosed] = useState(false) + const [closeMessage, setCloseMessage] = useState('') + const [storeStatusMsg, setStoreStatusMsg] = useState('') + const [savingStatus, setSavingStatus] = useState(false) const [fetchedAt, setFetchedAt] = useState(null) const [refreshing, setRefreshing] = useState(false) const [refreshMsg, setRefreshMsg] = useState('') @@ -1808,7 +1812,26 @@ export default function AdminPage() { } } - useEffect(() => { load() }, [load]) + useEffect(() => { + load() + fetch(BASE + '/api/admin/store-status') + .then(r => r.json()) + .then(s => { setStoreClosed(s.closed ?? false); setCloseMessage(s.message ?? '') }) + .catch(() => {}) + }, [load]) + + async function saveStoreStatus(closed: boolean, message: string) { + setSavingStatus(true) + setStoreStatusMsg('') + const res = await fetch(BASE + '/api/admin/store-status', { + method: 'PUT', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ closed, message }), + }) + setSavingStatus(false) + setStoreStatusMsg(res.ok ? (closed ? 'Store closed' : 'Store open') : 'Save failed') + setTimeout(() => setStoreStatusMsg(''), 3000) + } async function handleLogout() { await fetch(BASE + '/api/admin/logout', { method: 'POST' }) @@ -1950,6 +1973,46 @@ export default function AdminPage() { + {/* Store kill switch */} +
+ + {storeClosed ? '🔴 Store closed' : '🟢 Store open'} + + setCloseMessage(e.target.value)} + onBlur={() => storeClosed && saveStoreStatus(storeClosed, closeMessage)} + style={{ flex: 1, minWidth: 200 }} + disabled={!storeClosed} + /> +
+ + {storeStatusMsg && ( + + {storeStatusMsg} + + )} +
+
+ {/* Tabs */}