From 3efde72524c33086c89143c7c30e7d0647af1424 Mon Sep 17 00:00:00 2001 From: lukas Date: Thu, 1 Oct 2026 11:35:05 +0200 Subject: [PATCH] Make the pickup box button hold-to-open and hold-to-close Adds a reusable HoldButton that fires after an 800ms hold (pointer or Space/Enter) with a fill showing progress, and cancels on early release. The pickup box button now uses it, with extra space above it on mobile. Co-Authored-By: Claude Opus 5.5 --- .../orders/OrderStatusView.module.scss | 1 + src/components/orders/OrderStatusView.tsx | 13 +-- src/components/ui/HoldButton.module.scss | 25 ++++++ src/components/ui/HoldButton.tsx | 79 +++++++++++++++++++ 4 files changed, 112 insertions(+), 6 deletions(-) create mode 100644 src/components/ui/HoldButton.module.scss create mode 100644 src/components/ui/HoldButton.tsx diff --git a/src/components/orders/OrderStatusView.module.scss b/src/components/orders/OrderStatusView.module.scss index 82f4ff4..884d2c1 100644 --- a/src/components/orders/OrderStatusView.module.scss +++ b/src/components/orders/OrderStatusView.module.scss @@ -315,6 +315,7 @@ @media (max-width: $breakpoint-tablet) { flex-basis: 100%; justify-content: center; + margin-top: $space-2; margin-bottom: $space-2; } } diff --git a/src/components/orders/OrderStatusView.tsx b/src/components/orders/OrderStatusView.tsx index b236c91..009c80e 100644 --- a/src/components/orders/OrderStatusView.tsx +++ b/src/components/orders/OrderStatusView.tsx @@ -2,6 +2,7 @@ import { Link, useNavigate, useRouter } from '@tanstack/react-router' import { AnimatePresence, motion, useReducedMotion } from 'framer-motion' import { useState } from 'react' +import { HoldButton } from '#/components/ui/HoldButton.tsx' import type { OrderStatus } from '#/db/schema.ts' import type { OrderItemStatusView } from '#/domain/ordering.ts' import { useBasket } from '#/lib/basket.tsx' @@ -239,6 +240,7 @@ export const OrderStatusView = ({ paddingLeft: 0, paddingRight: 0, borderWidth: 0, + marginTop: 0, marginRight: -8, marginBottom: -8, transition: { @@ -410,21 +412,20 @@ export const OrderStatusView = ({
{item.pickupBox && ( - + onHold={() => void runAction(item.id, () => togglePickupBox(item)) } exit={pickupButtonExit} > {item.pickupBox.isOpen - ? `Close box ${item.pickupBox.number}` - : `Open box ${item.pickupBox.number}`} - + ? `Hold to close box ${item.pickupBox.number}` + : `Hold to open box ${item.pickupBox.number}`} + )}