Skip to content

Commit 2a5ff37

Browse files
committed
improved transaction error case status
1 parent 80fd49a commit 2a5ff37

File tree

2 files changed

+68
-63
lines changed

2 files changed

+68
-63
lines changed

backend/src/handlers/completion.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,10 @@ pub async fn create_completion(
140140
let overlaps = circles_overlap(
141141
challenge_lat,
142142
challenge_lon,
143-
challenge_accuracy_meters,
143+
challenge_accuracy_meters.max(500.0),
144144
payload.user_latitude,
145145
payload.user_longitude,
146-
payload.user_location_accuracy,
146+
payload.user_location_accuracy.max(500.0),
147147
);
148148

149149
if !overlaps {

frontend/src/components/trade/menu.tsx

Lines changed: 66 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ export function TradeMenu({
6565
mutate: redeem,
6666
data: redeemData,
6767
reset: resetRedeem,
68+
isSuccess: isRedeemSuccess,
6869
} = $api.useMutation("post", "/api/transaction");
6970
const { transaction } = redeemData || {
7071
transaction: null,
@@ -129,71 +130,75 @@ export function TradeMenu({
129130
<Drawer.Title className="text-2xl self-center font-bold mt-4">
130131
{adminMode ? "Verify" : "Trade for"} {prize.name}
131132
</Drawer.Title>
132-
{adminMode ? (
133-
<div className="flex flex-col items-center p-4 text-lg mb-4">
134-
<button
135-
type="button"
136-
className={
137-
"self-center card-selected border-4 text-white cursor-pointer w-80 h-20 inline-flex justify-center items-center mb-4 px-4 py-2 text-2xl font-extrabold rounded-2xl disabled:opacity-50 " +
138-
(startScanQR
139-
? " border-red-700 bg-red-500 "
140-
: "border-green-600 bg-green-400")
141-
}
142-
onClick={() => setScanQR(!startScanQR)}
143-
>
144-
{startScanQR ? "Stop Scan" : "Start Scan"}
145-
</button>
146-
<QRScanner
147-
videoRef={videoRef}
148-
canvasRef={canvasRef}
149-
onCancel={handleQRScanCancelled}
150-
/>
151-
{error && (
152-
<div className="text-red-600 text-center mb-4">{error}</div>
153-
)}
154-
{confirmData?.success ? (
133+
<div className="h-full overflow-scroll">
134+
{adminMode ? (
135+
<div className="flex flex-col items-center p-4 text-lg mb-4">
155136
<button
156137
type="button"
157-
disabled
158-
className="w-full py-2 text-lg font-bold rounded-2xl mb-4 bg-gray-200 text-gray-500 cursor-not-allowed flex items-center justify-center gap-2"
159-
onClick={() => {
160-
resetRedeem();
161-
refetchPrizes();
162-
onOpenChange(false);
163-
}}
138+
className={
139+
"self-center card-selected border-4 text-white cursor-pointer w-80 h-20 inline-flex justify-center items-center mb-4 px-4 py-2 text-2xl font-extrabold rounded-2xl disabled:opacity-50 " +
140+
(startScanQR
141+
? " border-red-700 bg-red-500 "
142+
: "border-green-600 bg-green-400")
143+
}
144+
onClick={() => setScanQR(!startScanQR)}
164145
>
165-
<RedeemedCheck className="w-5 h-5" />
166-
Transaction verified
146+
{startScanQR ? "Stop Scan" : "Start Scan"}
167147
</button>
168-
) : (
169-
<div className="text-red-500 text-sm">
170-
{confirmData?.message || "Awaiting Scan..."}
171-
</div>
172-
)}
173-
</div>
174-
) : transaction ? (
175-
<Redeemed
176-
closeDrawer={() => {
177-
resetRedeem();
178-
refetchPrizes();
179-
onOpenChange(false);
180-
}}
181-
prize={{
182-
name: prize.name,
183-
amount: quantity,
184-
transaction_id: transaction.transaction_id,
185-
}}
186-
/>
187-
) : (
188-
<Redeem
189-
prizes={prizes}
190-
prize={prize}
191-
quantity={quantity}
192-
setQuantity={setQuantity}
193-
handleClaim={handleClaim}
194-
hasEnoughCoins={hasEnoughCoins}
195-
/>
196-
)}
148+
<QRScanner
149+
videoRef={videoRef}
150+
canvasRef={canvasRef}
151+
onCancel={handleQRScanCancelled}
152+
/>
153+
{error && (
154+
<div className="text-red-600 text-center mb-4">{error}</div>
155+
)}
156+
{confirmData?.success ? (
157+
<button
158+
type="button"
159+
disabled
160+
className="w-full py-2 text-lg font-bold rounded-2xl mb-4 bg-gray-200 text-gray-500 cursor-not-allowed flex items-center justify-center gap-2"
161+
onClick={() => {
162+
resetRedeem();
163+
refetchPrizes();
164+
onOpenChange(false);
165+
}}
166+
>
167+
<RedeemedCheck className="w-5 h-5" />
168+
Transaction verified
169+
</button>
170+
) : (
171+
<div className="text-red-500 text-sm">
172+
{confirmData?.message || "Awaiting Scan..."}
173+
</div>
174+
)}
175+
</div>
176+
) : transaction ? (
177+
<Redeemed
178+
closeDrawer={() => {
179+
resetRedeem();
180+
refetchPrizes();
181+
onOpenChange(false);
182+
}}
183+
prize={{
184+
name: prize.name,
185+
amount: quantity,
186+
transaction_id: transaction.transaction_id,
187+
}}
188+
/>
189+
) : isRedeemSuccess ? (
190+
<div>Something went wrong! Please retry.</div>
191+
) : (
192+
<Redeem
193+
prizes={prizes}
194+
prize={prize}
195+
quantity={quantity}
196+
setQuantity={setQuantity}
197+
handleClaim={handleClaim}
198+
hasEnoughCoins={hasEnoughCoins}
199+
/>
200+
)}
201+
</div>
197202
</Drawer.Content>
198203
</Drawer.Portal>
199204

0 commit comments

Comments
 (0)