diff --git a/src/lib/Kickable.svelte b/src/lib/KickablePlayerLabel.svelte similarity index 54% rename from src/lib/Kickable.svelte rename to src/lib/KickablePlayerLabel.svelte index 19c3f45..f15bd75 100644 --- a/src/lib/Kickable.svelte +++ b/src/lib/KickablePlayerLabel.svelte @@ -1,5 +1,10 @@ - +{#if allowKicking && player.id !== currentUserId && !player.isHost} + +{:else} + +{/if} diff --git a/src/lib/PlayerLabel.svelte b/src/lib/PlayerLabel.svelte new file mode 100644 index 0000000..1bd1ea7 --- /dev/null +++ b/src/lib/PlayerLabel.svelte @@ -0,0 +1,52 @@ + + +
+ {name}'s picture + {name} + {#if player.points} - {player.points} points{/if} +
+ + \ No newline at end of file diff --git a/src/lib/get-display-name.ts b/src/lib/get-display-name.ts deleted file mode 100644 index 2955b43..0000000 --- a/src/lib/get-display-name.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default function (user: { id: number; name: string | null }) { - return user.name || "User " + user.id; -} diff --git a/src/lib/types.d.ts b/src/lib/types.d.ts index 15b446c..8083517 100644 --- a/src/lib/types.d.ts +++ b/src/lib/types.d.ts @@ -1,7 +1,8 @@ export type LocalDoor = { svgRef1: number; svgRef2: number }; -export type LeaderboardPlayer = { +export type PlayerLabelProps = { id: number; - name: string; - points: number; - kickable?: boolean; + name: string | null; + picture: string | null; + points?: number; + isHost: boolean; }; diff --git a/src/routes/game/[gameId=id]/end/+page.server.ts b/src/routes/game/[gameId=id]/end/+page.server.ts index 6e0c758..25f7d71 100644 --- a/src/routes/game/[gameId=id]/end/+page.server.ts +++ b/src/routes/game/[gameId=id]/end/+page.server.ts @@ -1,7 +1,7 @@ import prisma from "$lib/server/prisma"; import { error } from "@sveltejs/kit"; import ablyServer from "$lib/server/ably-server"; -import getDisplayName from "$lib/get-display-name"; +import type { PlayerLabelProps } from "$lib/types"; async function endGame(gameId: number) { await prisma.game.update({ @@ -45,6 +45,7 @@ export const load = async ({ params, locals }) => { }, players: { select: { + isHost: true, points: true, user: { select: { id: true, name: true, picture: true } }, currRoom: { select: { svgRef: true } }, @@ -65,12 +66,7 @@ export const load = async ({ params, locals }) => { mapImgURL: string; leaderboardPosition: number; claimedRooms: number[]; - players: { - points: number; - name: string; - picture: string | null; - currSvgRef: number; - }[]; + players: (PlayerLabelProps & { currSvgRef: number })[]; } = { mapImgURL: ret.map.imgURL, leaderboardPosition: ret._count.players + 1, @@ -79,9 +75,8 @@ export const load = async ({ params, locals }) => { ), players: ret.players.map((player) => { return { - points: player.points, - name: getDisplayName(player.user), - picture: player.user.picture, + ...player, + ...player.user, currSvgRef: player.currRoom.svgRef, }; }), diff --git a/src/routes/game/[gameId=id]/end/+page.svelte b/src/routes/game/[gameId=id]/end/+page.svelte index b09dac6..25250b7 100644 --- a/src/routes/game/[gameId=id]/end/+page.svelte +++ b/src/routes/game/[gameId=id]/end/+page.svelte @@ -49,7 +49,7 @@

Game over!

You {getCardinal(data.leaderboardPosition)}!

- +
diff --git a/src/routes/game/[gameId=id]/leaderboard/+page.server.ts b/src/routes/game/[gameId=id]/leaderboard/+page.server.ts index b1ee204..a499d6d 100644 --- a/src/routes/game/[gameId=id]/leaderboard/+page.server.ts +++ b/src/routes/game/[gameId=id]/leaderboard/+page.server.ts @@ -13,7 +13,7 @@ export const load = async ({ params, locals }) => { players: { where: { kicked: false }, select: { - user: { select: { id: true, name: true } }, + user: { select: { id: true, name: true, picture: true } }, points: true, isHost: true, }, @@ -32,11 +32,11 @@ export const load = async ({ params, locals }) => { isHost: ret.isHost, players: ret.game.players.map((player) => { return { - points: player.points, + ...player, + ...player.user, kickable: ret.isHost ? !player.isHost && player.user.id != locals.user.id : undefined, - ...player.user, }; }), }; diff --git a/src/routes/game/[gameId=id]/leaderboard/+page.svelte b/src/routes/game/[gameId=id]/leaderboard/+page.svelte index 95e75c8..711ad42 100644 --- a/src/routes/game/[gameId=id]/leaderboard/+page.svelte +++ b/src/routes/game/[gameId=id]/leaderboard/+page.svelte @@ -3,20 +3,16 @@ import { getChannel } from "$lib/ably-client"; import { page } from "$app/stores"; import "$lib/button.css"; - import getDisplayName from "$lib/get-display-name"; - import type { LeaderboardPlayer } from "$lib/types"; + import type { PlayerLabelProps } from "$lib/types"; export let data; let players = data.players.reduce( (acc, player) => { - acc[player.id] = { - ...player, - name: getDisplayName(player), - }; + acc[player.id] = player; return acc; }, - {} as { [key: number]: LeaderboardPlayer }, + {} as { [key: number]: PlayerLabelProps & { points: number } }, ); $: orderedPlayers = Object.values(players).sort( (a, b) => b.points - a.points, @@ -31,9 +27,8 @@ case "create": players[$pointsMessage.data.userId] = { id: $pointsMessage.data.userId, - name: getDisplayName($pointsMessage.data), + ...$pointsMessage.data, points: 0, - kickable: data.isHost, }; } } @@ -51,7 +46,7 @@ {#if data.isHost}End game{/if} diff --git a/src/routes/game/[gameId=id]/lobby/+page.svelte b/src/routes/game/[gameId=id]/lobby/+page.svelte index 2c509dc..ca37981 100644 --- a/src/routes/game/[gameId=id]/lobby/+page.svelte +++ b/src/routes/game/[gameId=id]/lobby/+page.svelte @@ -1,27 +1,21 @@