Skip to content

Commit 9d73b30

Browse files
author
Anonymous Admin
committed
fix: hide payment column in admin participants when payment not required
- Check if challenge requires payment using getPublicPaymentInfo query - Only show Payment column when payment is actually configured - Adjust grid layout to use the extra space when payment column is hidden - Prevents showing 'PAID' status for challenges that don't require payment
1 parent a6b323f commit 9d73b30

1 file changed

Lines changed: 29 additions & 19 deletions

File tree

  • apps/web/app/challenges/[id]/admin/participants

apps/web/app/challenges/[id]/admin/participants/page.tsx

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,20 @@ export default function AdminParticipantsPage() {
4545
limit: 1000, // Get all participants for admin view
4646
});
4747

48-
if (!participants) {
48+
const paymentInfo = useQuery(api.queries.paymentConfig.getPublicPaymentInfo, {
49+
challengeId: challengeId as Id<"challenges">,
50+
});
51+
52+
if (!participants || !paymentInfo) {
4953
return (
5054
<div className="flex items-center justify-center py-20 text-zinc-500">
5155
Loading...
5256
</div>
5357
);
5458
}
5559

60+
const showPaymentColumn = paymentInfo.requiresPayment;
61+
5662
// Filter by search
5763
const filtered = participants.filter((p: (typeof participants)[number]) => {
5864
const searchLower = search.toLowerCase();
@@ -147,19 +153,21 @@ export default function AdminParticipantsPage() {
147153
#
148154
</span>
149155
</div>
150-
<div className="col-span-3">
156+
<div className={showPaymentColumn ? "col-span-3" : "col-span-4"}>
151157
<SortHeader field="name">Participant</SortHeader>
152158
</div>
153159
<div className="col-span-1">
154160
<span className="text-[10px] font-medium uppercase tracking-wider text-zinc-500">
155161
Role
156162
</span>
157163
</div>
158-
<div className="col-span-2">
159-
<span className="text-[10px] font-medium uppercase tracking-wider text-zinc-500">
160-
Payment
161-
</span>
162-
</div>
164+
{showPaymentColumn && (
165+
<div className="col-span-2">
166+
<span className="text-[10px] font-medium uppercase tracking-wider text-zinc-500">
167+
Payment
168+
</span>
169+
</div>
170+
)}
163171
<div className="col-span-2 text-right">
164172
<SortHeader field="points" className="justify-end">
165173
Points
@@ -190,7 +198,7 @@ export default function AdminParticipantsPage() {
190198
{index + 1}
191199
</span>
192200
</div>
193-
<div className="col-span-3 flex items-center gap-2">
201+
<div className={cn("flex items-center gap-2", showPaymentColumn ? "col-span-3" : "col-span-4")}>
194202
<div className="flex h-6 w-6 items-center justify-center rounded-full bg-zinc-800">
195203
{participant.user.avatarUrl ? (
196204
<img
@@ -224,17 +232,19 @@ export default function AdminParticipantsPage() {
224232
{participant.role}
225233
</span>
226234
</div>
227-
<div className="col-span-2">
228-
<span
229-
className={cn(
230-
"inline-flex items-center rounded-full border px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide",
231-
paymentStatusStyles[participant.paymentStatus] ||
232-
"bg-zinc-500/15 text-zinc-300 border-zinc-500/30"
233-
)}
234-
>
235-
{participant.paymentStatus}
236-
</span>
237-
</div>
235+
{showPaymentColumn && (
236+
<div className="col-span-2">
237+
<span
238+
className={cn(
239+
"inline-flex items-center rounded-full border px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide",
240+
paymentStatusStyles[participant.paymentStatus] ||
241+
"bg-zinc-500/15 text-zinc-300 border-zinc-500/30"
242+
)}
243+
>
244+
{participant.paymentStatus}
245+
</span>
246+
</div>
247+
)}
238248
<div className="col-span-2 text-right">
239249
<div className="flex items-center justify-end gap-1">
240250
<Trophy className="h-3 w-3 text-amber-400" />

0 commit comments

Comments
 (0)