@@ -12,6 +12,9 @@ import SanctionPlayer from "~/components/SanctionPlayer.vue";
1212import PlayerSanctions from " ~/components/PlayerSanctions.vue" ;
1313import PlayerChangeName from " ~/components/PlayerChangeName.vue" ;
1414import SteamIcon from " ~/components/icons/SteamIcon.vue" ;
15+ import { Button } from " ~/components/ui/button" ;
16+ import { typedGql } from " ~/generated/zeus/typedDocumentNode" ;
17+ import { generateMutation } from " ~/graphql/graphqlGen" ;
1518 </script >
1619
1720<template >
@@ -45,43 +48,51 @@ import SteamIcon from "~/components/icons/SteamIcon.vue";
4548 </template >
4649
4750 <template #actions >
48- <div class =" flex gap-2" >
49- <template v-if =" player .steam_id !== me .steam_id && ! isUser " >
50- <SanctionPlayer :player =" player" />
51- </template >
51+ <div class =" flex flex-col gap-2" >
52+ <div class =" flex gap-2 items-center" >
53+ <template v-if =" player .steam_id !== me .steam_id && ! isUser " >
54+ <SanctionPlayer :player =" player" />
55+ </template >
56+
57+ <template v-if =" isAdmin && player .steam_id !== me .steam_id " >
58+ <Popover >
59+ <PopoverTrigger as-child >
60+ <Button variant =" outline" >
61+ <span class =" capitalize" >{{
62+ player.role.replace("_", " ")
63+ }}</span >
64+ <ChevronDownIcon class =" ml-2 h-4 w-4 text-muted-foreground" />
65+ </Button >
66+ </PopoverTrigger >
67+ <PopoverContent class =" p-0" align =" end" >
68+ <Command v-model =" memberRole" >
69+ <CommandList >
70+ <CommandGroup >
71+ <CommandItem
72+ :value =" role.value"
73+ class =" flex flex-col items-start px-4 py-2 cursor-pointer"
74+ v-for =" role of roles"
75+ >
76+ <span class =" capitalize" >{{ role.display }}</span >
77+ </CommandItem >
78+ </CommandGroup >
79+ </CommandList >
80+ </Command >
81+ </PopoverContent >
82+ </Popover >
83+ </template >
5284
53- <template v-if =" isAdmin && player .steam_id !== me .steam_id " >
54- <Popover >
55- <PopoverTrigger as-child >
56- <Button variant =" outline" class =" ml-auto" >
57- <span class =" capitalize" >{{
58- player.role.replace("_", " ")
59- }}</span >
60- <ChevronDownIcon class =" ml-2 h-4 w-4 text-muted-foreground" />
61- </Button >
62- </PopoverTrigger >
63- <PopoverContent class =" p-0" align =" end" >
64- <Command v-model =" memberRole" >
65- <CommandList >
66- <CommandGroup >
67- <CommandItem
68- :value =" role.value"
69- class =" flex flex-col items-start px-4 py-2 cursor-pointer"
70- v-for =" role of roles"
71- >
72- <span class =" capitalize" >{{ role.display }}</span >
73- </CommandItem >
74- </CommandGroup >
75- </CommandList >
76- </Command >
77- </PopoverContent >
78- </Popover >
79- </template >
80- <template v-else-if =" player .role !== e_player_roles_enum .user " >
81- <Badge class =" capitalize" >{{
82- player.role.replace("_", " ")
83- }}</Badge >
84- </template >
85+ <template v-if =" player .steam_id !== me .steam_id && isFriend " >
86+ <Button variant =" destructive" class =" ml-auto" @click =" removeFriend" >
87+ {{ $t('matchmaking.friends.remove') }}
88+ </Button >
89+ </template >
90+ <template v-else-if =" player .role !== e_player_roles_enum .user " >
91+ <Badge class =" capitalize" >{{
92+ player.role.replace("_", " ")
93+ }}</Badge >
94+ </template >
95+ </div >
8596 </div >
8697 </template >
8798 </PageHeading >
@@ -369,6 +380,9 @@ export default {
369380 isUser() {
370381 return useAuthStore ().isUser ;
371382 },
383+ isFriend() {
384+ return useMatchmakingStore ().friends .some (friend => friend .steam_id === this .player ?.steam_id );
385+ },
372386 kd() {
373387 if (this .player ?.deaths_aggregate .aggregate .count === 0 ) {
374388 return this .player ?.kills_aggregate .aggregate .count ;
@@ -399,6 +413,24 @@ export default {
399413 }),
400414 });
401415 },
416+ async removeFriend() {
417+ await this .$apollo .mutate ({
418+ mutation: typedGql (" mutation" )({
419+ delete_my_friends: [
420+ {
421+ where: {
422+ steam_id: {
423+ _eq: this .player .steam_id ,
424+ },
425+ },
426+ },
427+ {
428+ __typename: true ,
429+ },
430+ ],
431+ }),
432+ });
433+ },
402434 },
403435};
404436 </script >
0 commit comments