Add order mode reset controls
This commit is contained in:
@@ -10,6 +10,7 @@ import {
|
|||||||
} from "./api.js";
|
} from "./api.js";
|
||||||
|
|
||||||
const queueStatuses = ["new", "making", "ready"];
|
const queueStatuses = ["new", "making", "ready"];
|
||||||
|
const orderIdleTimeoutMs = 90_000;
|
||||||
|
|
||||||
const initialBuilder = (settings) => ({
|
const initialBuilder = (settings) => ({
|
||||||
size: settings.sizeOptions[0]?.name ?? "Regular",
|
size: settings.sizeOptions[0]?.name ?? "Regular",
|
||||||
@@ -44,6 +45,31 @@ export default function App() {
|
|||||||
loadBootstrap();
|
loadBootstrap();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (view !== "order" || !orderMode) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let timeoutId = window.setTimeout(() => {
|
||||||
|
setOrderMode(null);
|
||||||
|
}, orderIdleTimeoutMs);
|
||||||
|
|
||||||
|
function resetIdleTimer() {
|
||||||
|
window.clearTimeout(timeoutId);
|
||||||
|
timeoutId = window.setTimeout(() => {
|
||||||
|
setOrderMode(null);
|
||||||
|
}, orderIdleTimeoutMs);
|
||||||
|
}
|
||||||
|
|
||||||
|
const events = ["pointerdown", "keydown", "touchstart"];
|
||||||
|
events.forEach((eventName) => window.addEventListener(eventName, resetIdleTimer, { passive: true }));
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
window.clearTimeout(timeoutId);
|
||||||
|
events.forEach((eventName) => window.removeEventListener(eventName, resetIdleTimer));
|
||||||
|
};
|
||||||
|
}, [view, orderMode]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!settings) {
|
if (!settings) {
|
||||||
return;
|
return;
|
||||||
@@ -147,6 +173,17 @@ export default function App() {
|
|||||||
|
|
||||||
{view === "order" && (
|
{view === "order" && (
|
||||||
<section className="screen">
|
<section className="screen">
|
||||||
|
{orderMode && (
|
||||||
|
<div className="order-toolbar">
|
||||||
|
<button className="text-btn" onClick={() => setOrderMode(null)}>
|
||||||
|
Back to order options
|
||||||
|
</button>
|
||||||
|
<p className="muted order-toolbar-note">
|
||||||
|
This screen returns to the start menu after 90 seconds of inactivity.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
{!orderMode && (
|
{!orderMode && (
|
||||||
<section className="panel mode-launcher">
|
<section className="panel mode-launcher">
|
||||||
<div className="mode-launcher-copy">
|
<div className="mode-launcher-copy">
|
||||||
|
|||||||
@@ -90,6 +90,19 @@ button {
|
|||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.order-toolbar {
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
gap: 1rem;
|
||||||
|
padding: 0 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-toolbar-note {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.queue-screen,
|
.queue-screen,
|
||||||
.menu-screen {
|
.menu-screen {
|
||||||
display: grid;
|
display: grid;
|
||||||
@@ -354,6 +367,11 @@ select {
|
|||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.order-toolbar {
|
||||||
|
align-items: flex-start;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
.tabs {
|
.tabs {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user