Skip to content

Commit 2a27856

Browse files
committed
Enhance OrderConfirmationPage to support sharing by adding an optional name input field. Update local storage handling for both X username and share name. Refactor ticket display to improve visual clarity with a new banner style for order status.
1 parent e9855ff commit 2a27856

2 files changed

Lines changed: 49 additions & 60 deletions

File tree

‎devcon/src/pages/tickets/store/order/[code]/[secret].tsx‎

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react'
22
import { useRouter } from 'next/router'
33
import Page from 'components/common/layouts/page'
44
import { Link } from 'components/common/link'
5-
import { Download } from 'lucide-react'
5+
import { Download, CircleUser } from 'lucide-react'
66
import themes from '../../../../themes.module.scss'
77
import css from './confirmation.module.scss'
88

@@ -49,10 +49,13 @@ export default function OrderConfirmationPage() {
4949
const [loading, setLoading] = useState(true)
5050
const [error, setError] = useState<string | null>(null)
5151
const [xUsername, setXUsername] = useState('')
52+
const [shareName, setShareName] = useState('')
5253

5354
useEffect(() => {
54-
const saved = localStorage.getItem('devcon_x_username')
55-
if (saved) setXUsername(saved)
55+
const savedX = localStorage.getItem('devcon_x_username')
56+
if (savedX) setXUsername(savedX)
57+
const savedName = localStorage.getItem('devcon_share_name')
58+
if (savedName) setShareName(savedName)
5659
}, [])
5760

5861
useEffect(() => {
@@ -196,13 +199,10 @@ export default function OrderConfirmationPage() {
196199

197200
{/* Left: Ticket card */}
198201
<div className={css['ticket-card']}>
199-
<div className={css['ticket-image']}>
200-
<img src="/assets/images/dc8-receipt-header.png" alt="Devcon India" />
201-
{isPaid ? (
202-
<span className={css['confirmed-badge']}>Confirmed</span>
203-
) : (
204-
<span className={css['pending-badge']}>{statusLabels[order.status] || order.status}</span>
205-
)}
202+
<div className={`${css['ticket-banner']} ${isPaid ? css['ticket-banner--confirmed'] : css['ticket-banner--pending']}`}>
203+
<span className={css['ticket-banner-text']}>
204+
{isPaid ? 'Order Confirmed' : statusLabels[order.status] || order.status}
205+
</span>
206206
</div>
207207
<div className={css['ticket-body']}>
208208
<div className={css['ticket-data']}>
@@ -254,7 +254,20 @@ export default function OrderConfirmationPage() {
254254
<div className={css['share-input-group']}>
255255
<div className={css['share-text']}>
256256
<h3 className={css['share-title']}>Share on socials</h3>
257-
<p className={css['share-subtitle']}>Enter your X username to personalize</p>
257+
<p className={css['share-subtitle']}>Add name and/or X username to personalize</p>
258+
</div>
259+
<div className={css['share-input-wrap']}>
260+
<CircleUser size={20} />
261+
<input
262+
type="text"
263+
placeholder="Name (optional)"
264+
value={shareName}
265+
onChange={e => {
266+
const val = e.target.value
267+
setShareName(val)
268+
localStorage.setItem('devcon_share_name', val)
269+
}}
270+
/>
258271
</div>
259272
<div className={css['share-input-wrap']}>
260273
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor" aria-hidden>
@@ -273,7 +286,7 @@ export default function OrderConfirmationPage() {
273286
</div>
274287
</div>
275288
<a
276-
href={`/en/ticket/${encodeURIComponent(attendeeName.split(' ')[0].toLowerCase())}/${xUsername ? `?x=${encodeURIComponent(xUsername.replace(/^@/, ''))}` : ''}`}
289+
href={`/en/ticket/${encodeURIComponent((shareName || attendeeName.split(' ')[0]).toLowerCase())}/${xUsername ? `?x=${encodeURIComponent(xUsername.replace(/^@/, ''))}` : ''}`}
277290
target="_blank"
278291
rel="noopener noreferrer"
279292
className={css['share-btn']}

‎devcon/src/pages/tickets/store/order/[code]/confirmation.module.scss‎

Lines changed: 24 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -143,52 +143,28 @@ $order-border: #dddae2;
143143
flex-shrink: 0;
144144
}
145145

146-
.ticket-image {
147-
position: relative;
146+
.ticket-banner {
147+
display: flex;
148+
align-items: center;
149+
justify-content: center;
150+
height: 46px;
148151
width: 100%;
149-
height: 160px;
150-
overflow: hidden;
151-
152-
img {
153-
width: 100%;
154-
height: 100%;
155-
object-fit: cover;
156-
object-position: center 30%;
157-
}
158-
159-
&::after {
160-
content: '';
161-
position: absolute;
162-
inset: 0;
163-
background: rgba(34, 17, 68, 0.08);
164-
}
165152
}
166153

167-
.confirmed-badge {
168-
position: absolute;
169-
top: 1rem;
170-
left: 1rem;
171-
z-index: 1;
172-
background: #fff;
173-
color: #214;
174-
font-size: 0.875rem;
175-
font-weight: 700;
176-
padding: 0.375rem 0.75rem;
177-
border-radius: 360px;
178-
letter-spacing: -0.14px;
154+
.ticket-banner--confirmed {
155+
background: #aaeaba;
179156
}
180157

181-
.pending-badge {
182-
position: absolute;
183-
top: 1rem;
184-
left: 1rem;
185-
z-index: 1;
158+
.ticket-banner--pending {
186159
background: #fef3c7;
187-
color: #92400e;
160+
}
161+
162+
.ticket-banner-text {
188163
font-size: 0.875rem;
189-
font-weight: 700;
190-
padding: 0.375rem 0.75rem;
191-
border-radius: 360px;
164+
font-weight: 600;
165+
text-transform: uppercase;
166+
letter-spacing: 1px;
167+
color: #1a0d33;
192168
}
193169

194170
.ticket-body {
@@ -323,12 +299,11 @@ $order-border: #dddae2;
323299
display: flex;
324300
align-items: center;
325301
gap: 0.5rem;
326-
border: 1px solid #e5e5e5;
302+
border: 1px solid $order-border;
327303
border-radius: 8px;
328-
padding: 7.5px 12px;
304+
padding: 8px 16px;
329305
background: #fff;
330-
min-height: 36px;
331-
box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.05);
306+
min-height: 40px;
332307

333308
svg {
334309
width: 20px;
@@ -345,9 +320,10 @@ $order-border: #dddae2;
345320
font-family: inherit;
346321
color: $order-fg;
347322
background: transparent;
323+
line-height: 1.3;
348324

349325
&::placeholder {
350-
color: #737373;
326+
color: $order-muted;
351327
}
352328
}
353329
}
@@ -456,8 +432,8 @@ $order-border: #dddae2;
456432

457433

458434
.status-badge {
459-
background: #005415;
460-
color: #f9f8fa;
435+
background: #aaeaba;
436+
color: #1a0d33;
461437
font-size: 0.875rem;
462438
font-weight: 600;
463439
padding: 0 0.8125rem;
@@ -466,8 +442,8 @@ $order-border: #dddae2;
466442
}
467443

468444
.status-badge-pending {
469-
background: #92400e;
470-
color: #f9f8fa;
445+
background: #fef3c7;
446+
color: #92400e;
471447
font-size: 0.875rem;
472448
font-weight: 600;
473449
padding: 0 0.8125rem;

0 commit comments

Comments
 (0)