@@ -3,6 +3,7 @@ import TrophyBadge from "~/components/trophy/TrophyBadge.vue";
33import AvatarUpload from " ~/components/AvatarUpload.vue" ;
44import { Input } from " ~/components/ui/input" ;
55import { Button } from " ~/components/ui/button" ;
6+ import { Switch } from " ~/components/ui/switch" ;
67import { typedGql } from " ~/generated/zeus/typedDocumentNode" ;
78import { $ } from " ~/generated/zeus" ;
89
@@ -19,7 +20,7 @@ const FRAME_CLASSES =
1920 " relative overflow-hidden rounded-lg border border-border px-6 py-6 [background:linear-gradient(180deg,hsl(var(--card)_/_0.7)_0%,hsl(var(--card)_/_0.35)_100%)] [backdrop-filter:blur(6px)] before:pointer-events-none before:absolute before:left-2 before:top-2 before:h-[14px] before:w-[14px] before:border-l-2 before:border-t-2 before:border-[hsl(var(--tac-amber))] before:content-[''] after:pointer-events-none after:absolute after:bottom-2 after:right-2 after:h-[14px] after:w-[14px] after:border-b-2 after:border-r-2 after:border-[hsl(var(--tac-amber))] after:content-['']" ;
2021
2122export default {
22- components: { TrophyBadge , AvatarUpload , Input , Button },
23+ components: { TrophyBadge , AvatarUpload , Input , Button , Switch },
2324 props: {
2425 tournament: {
2526 type: Object ,
@@ -41,6 +42,7 @@ export default {
4142 number ,
4243 boolean
4344 >,
45+ savingEnabled: false ,
4446 };
4547 },
4648 computed: {
@@ -177,6 +179,27 @@ export default {
177179 this .drafts [placement ] = { custom_name: " " , silhouette: null };
178180 this .save (placement );
179181 },
182+ async toggleEnabled(next : boolean ) {
183+ this .savingEnabled = true ;
184+ try {
185+ await this .$apollo .mutate ({
186+ mutation: typedGql (" mutation" )({
187+ update_tournaments_by_pk: [
188+ {
189+ pk_columns: { id: $ (" id" , " uuid!" ) },
190+ _set: { trophies_enabled: $ (" trophies_enabled" , " Boolean!" ) },
191+ },
192+ { id: true , trophies_enabled: true },
193+ ],
194+ }),
195+ variables: { id: this .tournament .id , trophies_enabled: next },
196+ });
197+ } catch (err ) {
198+ console .error (" Failed to toggle trophies_enabled" , err );
199+ } finally {
200+ this .savingEnabled = false ;
201+ }
202+ },
180203 },
181204};
182205 </script >
@@ -207,7 +230,31 @@ export default {
207230 ORGANIZER ACCESS REQUIRED
208231 </div >
209232
210- <div v-else class =" grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4" >
233+ <template v-else >
234+ <div
235+ class =" mb-4 flex items-center justify-between rounded-sm border border-border/60 bg-background/40 px-4 py-3"
236+ >
237+ <div class =" flex flex-col gap-1" >
238+ <span
239+ class =" font-mono text-[0.7rem] font-semibold uppercase tracking-[0.2em]"
240+ >
241+ AWARD TROPHIES
242+ </span >
243+ <span
244+ class =" font-mono text-[0.6rem] uppercase tracking-[0.2em] text-muted-foreground"
245+ >
246+ Disable to skip / clear auto-awarded trophies for this tournament.
247+ Manual awards stay.
248+ </span >
249+ </div >
250+ <Switch
251+ :model-value =" tournament .trophies_enabled !== false "
252+ :disabled =" savingEnabled "
253+ @update :model-value =" toggleEnabled "
254+ />
255+ </div >
256+
257+ <div class =" grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4" >
211258 <div
212259 v-for =" p in placements"
213260 :key =" p"
@@ -352,5 +399,6 @@ export default {
352399 </div >
353400 </div >
354401 </div >
402+ </template >
355403 </section >
356404</template >
0 commit comments