Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
e370a6e
chore: ui clean up
lukepolo May 15, 2025
6850816
bug: fix ability to invite to match
lukepolo May 15, 2025
aa13a7f
chore: updated translations using Weblate (#137)
lukepolo May 15, 2025
849f09b
chore: add update for panel
lukepolo May 16, 2025
4c33753
chore: updated translations using Weblate (#138)
lukepolo May 16, 2025
ebbde27
feature: show dedicated servers plugin version
lukepolo May 16, 2025
579252b
chore: updated translations using Weblate (#139)
lukepolo May 16, 2025
7e64eb5
chore: clean up quick joining
lukepolo May 20, 2025
75a701a
bug: fix permissions for new roles
lukepolo May 21, 2025
43b303a
feature: adding ability to use steam relay (#140)
lukepolo May 21, 2025
839ba2c
feature: regional steam relay
lukepolo May 22, 2025
8d794db
feature: refator game configs
lukepolo May 22, 2025
907ee0f
chore: updated translations using Weblate (#141)
lukepolo May 22, 2025
8657f60
chore: allow to search for all teams
lukepolo May 27, 2025
c10a0f8
chore: updated translations using Weblate (#142)
lukepolo May 27, 2025
300a5b4
chore: show menus on team pages for admins
lukepolo May 27, 2025
2983c8e
chore: always use cache and network incase things change
lukepolo May 27, 2025
2f34742
chore: update cache mech
lukepolo May 27, 2025
a204e2d
feature: show loading to show that they clicked on the button
lukepolo May 27, 2025
d052c04
chore: update tournament bracket page slightly to make it so you can …
lukepolo May 28, 2025
0db3c8d
tournament minimap
lukepolo Jun 2, 2025
6a4b3d9
bug: tournament teams permissions
lukepolo Jun 5, 2025
6b3bd6d
bug: remove expire so if their pc clock is out of sync with server clock
lukepolo Jun 5, 2025
b3c558a
chore: updated translations using Weblate (#143)
lukepolo Jun 5, 2025
29a4f82
chore: updated translations using Weblate (#144)
lukepolo Jun 5, 2025
ec601cb
bug: sort by start for tournaments
lukepolo Jun 5, 2025
07bf9b9
feature: add alerts for auth errors
lukepolo Jun 26, 2025
5b1e5a2
chore: dont show invalid response form auth hook
lukepolo Jun 26, 2025
7d6bb33
chore: update styles for errors
lukepolo Jun 26, 2025
bdecc48
chore: adding crowdin
lukepolo Jul 2, 2025
6d23d61
chore: fix translation
lukepolo Jul 2, 2025
1bb16b7
Update Crowdin configuration file
lukepolo Jul 2, 2025
1e1994a
chore: ignore en
lukepolo Jul 2, 2025
8a82c7b
chore: crowdin updates (#147)
lukepolo Jul 2, 2025
dccf95e
chore: crowdin updates (#148)
lukepolo Jul 2, 2025
5270e1d
Update Crowdin configuration file
lukepolo Jul 2, 2025
92687e1
chore: crowdin updates (#149)
lukepolo Jul 2, 2025
eb756bc
bug: fix language file locations
lukepolo Jul 2, 2025
4d2663f
chore: update managing matches
lukepolo Jul 2, 2025
9c1df65
chore: update pull request title
lukepolo Jul 3, 2025
c87f97e
chore: update chinese lang files (#152)
lukepolo Jul 3, 2025
62f85b9
chore: update translations (#153)
lukepolo Jul 3, 2025
6d95ffd
Update Crowdin configuration file
lukepolo Jul 8, 2025
ea016e5
chore: update translations (#154)
lukepolo Jul 8, 2025
21cbd1f
chore: update to include swedish
lukepolo Jul 8, 2025
a7f2caf
chore: refactor friends list (#155)
lukepolo Jul 9, 2025
6858b0a
chore: refactor menus (#157)
lukepolo Jul 9, 2025
6d5587d
bug: dont show toggle for left side nav
lukepolo Jul 9, 2025
946a7ce
chore: fix padding issue
lukepolo Jul 9, 2025
77d6ae4
chore: fix padding across main app
lukepolo Jul 9, 2025
99e68c4
bug: fix build with bad casing
lukepolo Jul 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions components/FiveStackToolTip.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@ import { Info } from "lucide-vue-next";
</script>

<template>
<TooltipProvider>
<TooltipProvider
:ignoreNonKeyboardFocus="true"
:delay-duration="delayDuration"
>
<Tooltip>
<TooltipTrigger type="button">
<slot name="trigger">
<Info :size="size" v-bind="$attrs"> </Info>
</slot>
</TooltipTrigger>
<TooltipContent>
<TooltipContent :side="side">
<slot></slot>
</TooltipContent>
</Tooltip>
Expand All @@ -25,6 +28,14 @@ export default {
type: Number,
default: 12,
},
side: {
type: String,
required: false,
},
delayDuration: {
type: Number,
default: 0,
},
},
};
</script>
58 changes: 40 additions & 18 deletions components/InstallPWA.vue
Original file line number Diff line number Diff line change
@@ -1,28 +1,43 @@
<script setup lang="ts">
import { MonitorDown, PlusSquare, Share } from "lucide-vue-next";
import { useSidebar } from "@/components/ui/sidebar";

import FiveStackToolTip from "~/components/FiveStackToolTip.vue";
const { state, isMobile } = useSidebar();
</script>

<template>
<div>
<NuxtPwaManifest />

<SidebarMenuItem
class="mb-1"
:class="{ 'mx-4': isMobile || state === 'expanded' }"
v-if="canInstall"
>
<SidebarMenuButton as-child :tooltip="$t('pwa.install.tooltip')">
<Button @click="installPWA" size="sm">
<MonitorDown />
<span v-if="isMobile || state === 'expanded'">{{
$t("pwa.install.button")
}}</span>
</Button>
</SidebarMenuButton>
</SidebarMenuItem>
<NuxtPwaManifest />
<div v-if="canInstall">
<template v-if="isMenuItem">
<SidebarMenuItem
class="mb-1"
:class="{ 'mx-4': isMobile || state === 'expanded' }"
v-if="canInstall"
>
<SidebarMenuButton as-child :tooltip="$t('pwa.install.tooltip')">
<Button @click="installPWA" size="sm">
<MonitorDown />
<span v-if="isMobile || state === 'expanded'">{{
$t("pwa.install.button")
}}</span>
</Button>
</SidebarMenuButton>
</SidebarMenuItem>
</template>
<template v-else>
<FiveStackToolTip v-if="!isMobile">
<template #trigger>
<Button @click="installPWA" size="sm">
<MonitorDown />
</Button>
</template>
{{ $t("pwa.install.button") }}
</FiveStackToolTip>
<div class="flex items-center gap-2 uppercase font-bold" v-else>
<MonitorDown class="size-5" @click="installPWA" />
{{ $t("pwa.install.button") }}
</div>
</template>

<Drawer
:open="installPWADrawer"
Expand Down Expand Up @@ -75,6 +90,12 @@ const { state, isMobile } = useSidebar();
import type { BeforeInstallPromptEvent } from "@vite-pwa/nuxt/dist/runtime/plugins/types.js";

export default {
props: {
isMenuItem: {
type: Boolean,
default: true,
},
},
created() {
window.addEventListener(
"beforeinstallprompt",
Expand Down Expand Up @@ -118,6 +139,7 @@ export default {
return /iPad|iPhone|iPod/.test(navigator.userAgent);
},
canInstall() {
return true;
if (this.$pwa?.isPWAInstalled) {
return false;
}
Expand Down
118 changes: 98 additions & 20 deletions components/MatchInviteNotification.vue
Original file line number Diff line number Diff line change
@@ -1,36 +1,67 @@
<script lang="ts" setup>
import TimeAgo from "./TimeAgo.vue";
import PlayerDisplay from "./PlayerDisplay.vue";
import { Check, XIcon } from "lucide-vue-next";
</script>

<template>
<div>
<h3 class="text-lg font-semibold mb-2">
{{ $t("notifications.match.title") }}
</h3>
<div class="flex flex-row gap-2 justify-between" v-if="matches_by_pk">
<div class="flex flex-row gap-2 items-center overflow-scroll">
<div class="flex flex-row gap-2 items-center overflow-scroll">
<TooltipProvider>
<Tooltip>
<TooltipTrigger as-child>
<PlayerDisplay
:player="invitedBy"
:showOnline="false"
:showFlag="false"
:showName="false"
:showRole="false"
/>
</TooltipTrigger>
<TooltipContent> {{ invitedBy.name }} </TooltipContent>
</Tooltip>
</TooltipProvider>

{{ $t("notifications.match.description", { match: invite.match_id }) }}

<div class="flex justify-between space-x-2 mt-3">
<p class="text-sm text-muted-foreground mb-2">
{{ $t("notifications.match.invited_by") }}
{{ invite.invited_by.name }}
<TimeAgo :date="invite.created_at" class="text-xs" />
</p>
<template v-for="player in players">
<TooltipProvider>
<Tooltip>
<TooltipTrigger as-child>
<PlayerDisplay
:player="player.player"
:showOnline="false"
:showFlag="false"
:showName="false"
:showRole="false"
/>
</TooltipTrigger>
<TooltipContent> {{ player.player.name }} </TooltipContent>
</Tooltip>
</TooltipProvider>
</template>
</div>

<div class="flex gap-2">
<Button variant="outline" @click="denyInvite(invite.id)">{{
$t("notifications.invite.deny")
}}</Button>
<Button variant="default" @click="acceptInvite(invite.id)">{{
$t("notifications.invite.accept")
}}</Button>
<div
class="border border-gray-200 border-dashed h-full p-4 rounded-md cursor-pointer hover:bg-green-500/20 bg-transparent transition-all duration-200"
@click="acceptInvite(invite.id)"
>
<Check class="h-3 w-3" />
</div>
</div>

<div
class="h-full p-4 rounded-md cursor-pointer hover:bg-red-500/20 bg-transparent transition-all duration-200"
@click="denyInvite(invite.id)"
>
<XIcon class="h-3 w-3" />
</div>
</div>
</template>

<script lang="ts">
import { generateMutation } from "~/graphql/graphqlGen";
import { $ } from "~/generated/zeus";
import { generateMutation, generateSubscription } from "~/graphql/graphqlGen";
import { simpleMatchFields } from "~/graphql/simpleMatchFields";

export default {
props: {
Expand All @@ -43,6 +74,33 @@ export default {
required: true,
},
},
data() {
return {
matches_by_pk: null,
};
},
apollo: {
$subscribe: {
matches_by_pk: {
query: generateSubscription({
matches_by_pk: [
{
id: $("id", "uuid!"),
},
simpleMatchFields,
],
}),
variables() {
return {
id: this.invite.match_id,
};
},
result({ data }: { data: any }) {
this.matches_by_pk = data.matches_by_pk;
},
},
},
},
methods: {
async acceptInvite(inviteId: string) {
await this.$apollo.mutate({
Expand Down Expand Up @@ -77,5 +135,25 @@ export default {
});
},
},
computed: {
allPlayers() {
if (!this.matches_by_pk) {
return [];
}
return this.matches_by_pk.lineup_1.lineup_players.concat(
this.matches_by_pk.lineup_2.lineup_players,
);
},
players() {
return this.allPlayers.filter(
(player) => player.player.steam_id !== this.invite.invited_by.steam_id,
);
},
invitedBy() {
return this.allPlayers.find((player) => {
return player.player.steam_id === this.invite.invited_by.steam_id;
}).player;
},
},
};
</script>
1 change: 1 addition & 0 deletions components/MatchOptions.vue
Original file line number Diff line number Diff line change
Expand Up @@ -815,6 +815,7 @@ export default {
},
apollo: {
e_match_types: {
fetchPolicy: "cache-first",
query: generateQuery({
e_match_types: [
{},
Expand Down
9 changes: 3 additions & 6 deletions components/PlayerChangeName.vue
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@
<AlertDialogHeader>
<AlertDialogTitle>
{{
canUpdate
isAdmin
? $t("player.change_name.title")
: $t("player.change_name.request_title")
}}
</AlertDialogTitle>
<AlertDialogDescription>
{{
canUpdate
isAdmin
? $t("player.change_name.description")
: $t("player.change_name.request_description")
}}
Expand All @@ -42,7 +42,7 @@
{{ $t("common.cancel") }}
</AlertDialogCancel>
<AlertDialogAction
@click="canUpdate ? changeName() : requestNameChange()"
@click="isAdmin ? changeName() : requestNameChange()"
>
{{ $t("common.confirm") }}
</AlertDialogAction>
Expand Down Expand Up @@ -143,9 +143,6 @@ export default {
isAdmin() {
return useAuthStore().isAdmin;
},
canUpdate() {
return !useAuthStore().isUser;
},
canChangeName() {
if (!this.me) {
return false;
Expand Down
2 changes: 2 additions & 0 deletions components/PlayerDisplay.vue
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import FiveStackToolTip from "./FiveStackToolTip.vue";
? { name: 'players-id', params: { id: player?.steam_id } }
: null
"
active-class="player-display-active"
exact-active-class="player-display-active"
class="grid gap-2"
:class="{
'cursor-pointer': linkable,
Expand Down
25 changes: 23 additions & 2 deletions components/PlayerSearch.vue
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,20 @@ import debounce from "~/utilities/debounce";
@click="searchPlayers()"
variant="outline"
:aria-expanded="open"
class="justify-between"
:class="[
{
'justify-between w-full py-8': selected,
'justify-between': !selected,
},
$props.class,
]"
>
{{ label }}
<template v-if="selected">
<PlayerDisplay :player="selected" />
</template>
<template v-else>
{{ label }}
</template>
<CaretSortIcon class="ml-2 h-4 w-4 shrink-0 opacity-50" />
</Button>
</PopoverTrigger>
Expand Down Expand Up @@ -108,6 +119,16 @@ export default {
type: Boolean,
default: false,
},
selected: {
type: Object,
required: false,
default: null,
},
class: {
type: String,
required: false,
default: "",
},
},
data() {
return {
Expand Down
Loading