@@ -65,6 +65,7 @@ export function TradeMenu({
65
65
mutate : redeem ,
66
66
data : redeemData ,
67
67
reset : resetRedeem ,
68
+ isSuccess : isRedeemSuccess ,
68
69
} = $api . useMutation ( "post" , "/api/transaction" ) ;
69
70
const { transaction } = redeemData || {
70
71
transaction : null ,
@@ -129,71 +130,75 @@ export function TradeMenu({
129
130
< Drawer . Title className = "text-2xl self-center font-bold mt-4" >
130
131
{ adminMode ? "Verify" : "Trade for" } { prize . name }
131
132
</ 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" >
155
136
< button
156
137
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 ) }
164
145
>
165
- < RedeemedCheck className = "w-5 h-5" />
166
- Transaction verified
146
+ { startScanQR ? "Stop Scan" : "Start Scan" }
167
147
</ 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 >
197
202
</ Drawer . Content >
198
203
</ Drawer . Portal >
199
204
0 commit comments