diff --git a/client/src/tablet/Sale.tsx b/client/src/tablet/Sale.tsx index bcda05f..7bd0fab 100644 --- a/client/src/tablet/Sale.tsx +++ b/client/src/tablet/Sale.tsx @@ -86,6 +86,16 @@ export function Sale({ config, onChangeBar }: Props) { cartUuidRef.current = null; } + // Pointer Events (onPointerDown/Up/Cancel below) only shipped in Safari + // 13/iOS 13 — the exact kind of old-enough-WebKit kiosk device #66/#68 + // are already about never fires them at all, so the long-press timer + // this drives never starts on that class of device even though plain + // clicks (universally supported) keep working, which is why "add one" + // works on the tablet but the long-press count picker doesn't. The + // touch handlers alongside the pointer ones are the broad-support + // fallback; both driving the same start/cancel functions is safe + // because a device that fires both (most modern browsers do, for a + // single touch) just restarts/re-cancels the same idempotent timer. function startLongPress(d: Drink) { longPressFired.current = false; cancelLongPress(); @@ -160,6 +170,9 @@ export function Sale({ config, onChangeBar }: Props) { onPointerUp={cancelLongPress} onPointerLeave={cancelLongPress} onPointerCancel={cancelLongPress} + onTouchStart={() => startLongPress(d)} + onTouchEnd={cancelLongPress} + onTouchCancel={cancelLongPress} onContextMenu={e => e.preventDefault()} onClick={() => handleDrinkClick(d)} >