From 01741ad7813ec392ddfe1ba9147ff949e33bb777 Mon Sep 17 00:00:00 2001 From: LQ63 Date: Thu, 11 Dec 2025 02:05:58 +0100 Subject: [PATCH 1/5] feat(ui): FRO-34 Lobby Started Lobby Component --- src/components/lobby/LobbyComponent.vue | 125 ++++++++++++++++++++++++ src/composables/useUserInfo.ts | 1 + src/main.ts | 4 + src/router/index.ts | 9 +- src/services/ws.ts | 13 ++- src/views/CreateGame.vue | 1 - src/views/LobbyView.vue | 53 ++++++++++ 7 files changed, 202 insertions(+), 4 deletions(-) create mode 100644 src/components/lobby/LobbyComponent.vue create mode 100644 src/views/LobbyView.vue diff --git a/src/components/lobby/LobbyComponent.vue b/src/components/lobby/LobbyComponent.vue new file mode 100644 index 0000000..586adbf --- /dev/null +++ b/src/components/lobby/LobbyComponent.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/src/composables/useUserInfo.ts b/src/composables/useUserInfo.ts index 781ba8a..24c1bd8 100644 --- a/src/composables/useUserInfo.ts +++ b/src/composables/useUserInfo.ts @@ -20,6 +20,7 @@ export const useUserInfo = defineStore('userInfo', () => { function requestState() { axios.get(`${api}/status`, {withCredentials: true}).then((response) => { + console.log("STATUS DATA:" + response.data.status + response.data.inGame) username.value = response.data.username; if (response.data.ingame) { gameId.value = response.data.gameId; diff --git a/src/main.ts b/src/main.ts index a7d595c..1ba1d75 100644 --- a/src/main.ts +++ b/src/main.ts @@ -12,11 +12,15 @@ import { createPinia } from 'pinia' import axios from 'axios' import VueAxios from 'vue-axios' import {useUserInfo} from "@/composables/useUserInfo.ts"; +import {useIngame} from "@/composables/useIngame.ts"; +import {initWebSocket} from "@/services/ws.ts"; const app = createApp(App) const pinia = createPinia() app.use(pinia) +const ingameStore = useIngame(); +initWebSocket(ingameStore) app.use(router) app.use(Quasar, { plugins: { diff --git a/src/router/index.ts b/src/router/index.ts index 908614e..bf54408 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -7,7 +7,8 @@ import defaultMenu from "../components/DefaultMenu.vue" import axios from "axios"; import { useUserInfo } from "@/composables/useUserInfo"; import rulesView from "../components/Rules.vue"; - +import LobbyView from "@/views/LobbyView.vue"; +import GameView from "@/views/Game.vue" const api = window?.__RUNTIME_CONFIG__?.API_URL; const router = createRouter({ @@ -50,6 +51,12 @@ const router = createRouter({ component: LoginView, meta: { requiresAuth: false } }, + { + path: '/lobby', + name: 'lobby', + component: LobbyView, + meta: {requiresAuth: true } + } ], }) diff --git a/src/services/ws.ts b/src/services/ws.ts index 7b59a09..d65f7f1 100644 --- a/src/services/ws.ts +++ b/src/services/ws.ts @@ -33,10 +33,13 @@ let ws: WebSocket | null = null; const pending = new Map(); const handlers = new Map(); -const uState = useIngame(); +let uState: ReturnType | null = null; let heartbeatTimer: ReturnType | null = null; +export function initWebSocket(ingameStore: ReturnType) { + uState = ingameStore; +} let defaultHandler: HandlerFn | null = null; function uuid(): string { @@ -70,6 +73,10 @@ function stopHeartbeat() { } function setupSocketHandlers(socket: WebSocket) { + if (!uState) { + console.error("[WS] WebSocket module not initialized with Pinia store!"); + return; + } socket.onmessage = async (raw) => { console.debug("[WS] MESSAGE:", raw.data); @@ -100,7 +107,9 @@ function setupSocketHandlers(socket: WebSocket) { } if (state && stateData) { - uState.setIngame(state, stateData); + if(uState) { + uState.setIngame(state, stateData); + } } // Server event → handler branch diff --git a/src/views/CreateGame.vue b/src/views/CreateGame.vue index 01a2e73..f34b7b9 100644 --- a/src/views/CreateGame.vue +++ b/src/views/CreateGame.vue @@ -11,7 +11,6 @@ const playerAmount = ref(2); const $q = useQuasar(); const isLoading = ref(false); const router = useRouter(); -const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); const createGameQuasar = async () => { if (!lobbyName.value) { $q.notify({ message: 'Lobby-Name wird benötigt', color: 'red', position: 'top', icon: 'cancel' }); diff --git a/src/views/LobbyView.vue b/src/views/LobbyView.vue new file mode 100644 index 0000000..1637d86 --- /dev/null +++ b/src/views/LobbyView.vue @@ -0,0 +1,53 @@ + + + + + -- 2.52.0 From 0faa04240199dad6e417f173ca9247c487d3d4f7 Mon Sep 17 00:00:00 2001 From: LQ63 Date: Thu, 11 Dec 2025 02:05:58 +0100 Subject: [PATCH 2/5] feat(ui): FRO-34 Lobby Started Lobby Component --- src/components/lobby/LobbyComponent.vue | 125 ++++++++++++++++++++++++ src/composables/useUserInfo.ts | 1 + src/main.ts | 4 + src/router/index.ts | 9 +- src/services/ws.ts | 13 ++- src/views/CreateGame.vue | 1 - src/views/LobbyView.vue | 53 ++++++++++ 7 files changed, 202 insertions(+), 4 deletions(-) create mode 100644 src/components/lobby/LobbyComponent.vue create mode 100644 src/views/LobbyView.vue diff --git a/src/components/lobby/LobbyComponent.vue b/src/components/lobby/LobbyComponent.vue new file mode 100644 index 0000000..586adbf --- /dev/null +++ b/src/components/lobby/LobbyComponent.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/src/composables/useUserInfo.ts b/src/composables/useUserInfo.ts index 781ba8a..24c1bd8 100644 --- a/src/composables/useUserInfo.ts +++ b/src/composables/useUserInfo.ts @@ -20,6 +20,7 @@ export const useUserInfo = defineStore('userInfo', () => { function requestState() { axios.get(`${api}/status`, {withCredentials: true}).then((response) => { + console.log("STATUS DATA:" + response.data.status + response.data.inGame) username.value = response.data.username; if (response.data.ingame) { gameId.value = response.data.gameId; diff --git a/src/main.ts b/src/main.ts index a7d595c..1ba1d75 100644 --- a/src/main.ts +++ b/src/main.ts @@ -12,11 +12,15 @@ import { createPinia } from 'pinia' import axios from 'axios' import VueAxios from 'vue-axios' import {useUserInfo} from "@/composables/useUserInfo.ts"; +import {useIngame} from "@/composables/useIngame.ts"; +import {initWebSocket} from "@/services/ws.ts"; const app = createApp(App) const pinia = createPinia() app.use(pinia) +const ingameStore = useIngame(); +initWebSocket(ingameStore) app.use(router) app.use(Quasar, { plugins: { diff --git a/src/router/index.ts b/src/router/index.ts index 908614e..bf54408 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -7,7 +7,8 @@ import defaultMenu from "../components/DefaultMenu.vue" import axios from "axios"; import { useUserInfo } from "@/composables/useUserInfo"; import rulesView from "../components/Rules.vue"; - +import LobbyView from "@/views/LobbyView.vue"; +import GameView from "@/views/Game.vue" const api = window?.__RUNTIME_CONFIG__?.API_URL; const router = createRouter({ @@ -50,6 +51,12 @@ const router = createRouter({ component: LoginView, meta: { requiresAuth: false } }, + { + path: '/lobby', + name: 'lobby', + component: LobbyView, + meta: {requiresAuth: true } + } ], }) diff --git a/src/services/ws.ts b/src/services/ws.ts index 7b59a09..d65f7f1 100644 --- a/src/services/ws.ts +++ b/src/services/ws.ts @@ -33,10 +33,13 @@ let ws: WebSocket | null = null; const pending = new Map(); const handlers = new Map(); -const uState = useIngame(); +let uState: ReturnType | null = null; let heartbeatTimer: ReturnType | null = null; +export function initWebSocket(ingameStore: ReturnType) { + uState = ingameStore; +} let defaultHandler: HandlerFn | null = null; function uuid(): string { @@ -70,6 +73,10 @@ function stopHeartbeat() { } function setupSocketHandlers(socket: WebSocket) { + if (!uState) { + console.error("[WS] WebSocket module not initialized with Pinia store!"); + return; + } socket.onmessage = async (raw) => { console.debug("[WS] MESSAGE:", raw.data); @@ -100,7 +107,9 @@ function setupSocketHandlers(socket: WebSocket) { } if (state && stateData) { - uState.setIngame(state, stateData); + if(uState) { + uState.setIngame(state, stateData); + } } // Server event → handler branch diff --git a/src/views/CreateGame.vue b/src/views/CreateGame.vue index 01a2e73..f34b7b9 100644 --- a/src/views/CreateGame.vue +++ b/src/views/CreateGame.vue @@ -11,7 +11,6 @@ const playerAmount = ref(2); const $q = useQuasar(); const isLoading = ref(false); const router = useRouter(); -const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); const createGameQuasar = async () => { if (!lobbyName.value) { $q.notify({ message: 'Lobby-Name wird benötigt', color: 'red', position: 'top', icon: 'cancel' }); diff --git a/src/views/LobbyView.vue b/src/views/LobbyView.vue new file mode 100644 index 0000000..1637d86 --- /dev/null +++ b/src/views/LobbyView.vue @@ -0,0 +1,53 @@ + + + + + -- 2.52.0 From 4463144d1b1e7e72a6944c07322b8569fbd50170 Mon Sep 17 00:00:00 2001 From: LQ63 Date: Thu, 11 Dec 2025 02:05:58 +0100 Subject: [PATCH 3/5] feat(ui): FRO-34 Lobby Started Lobby Component --- src/components/lobby/LobbyComponent.vue | 125 ++++++++++++++++++++++++ src/composables/useUserInfo.ts | 1 + src/main.ts | 5 + src/router/index.ts | 9 +- src/services/ws.ts | 13 ++- src/views/CreateGame.vue | 1 - src/views/LobbyView.vue | 53 ++++++++++ 7 files changed, 203 insertions(+), 4 deletions(-) create mode 100644 src/components/lobby/LobbyComponent.vue create mode 100644 src/views/LobbyView.vue diff --git a/src/components/lobby/LobbyComponent.vue b/src/components/lobby/LobbyComponent.vue new file mode 100644 index 0000000..586adbf --- /dev/null +++ b/src/components/lobby/LobbyComponent.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/src/composables/useUserInfo.ts b/src/composables/useUserInfo.ts index 781ba8a..24c1bd8 100644 --- a/src/composables/useUserInfo.ts +++ b/src/composables/useUserInfo.ts @@ -20,6 +20,7 @@ export const useUserInfo = defineStore('userInfo', () => { function requestState() { axios.get(`${api}/status`, {withCredentials: true}).then((response) => { + console.log("STATUS DATA:" + response.data.status + response.data.inGame) username.value = response.data.username; if (response.data.ingame) { gameId.value = response.data.gameId; diff --git a/src/main.ts b/src/main.ts index 03eb752..0b8a651 100644 --- a/src/main.ts +++ b/src/main.ts @@ -13,10 +13,15 @@ import axios from 'axios' import VueAxios from 'vue-axios' import {useUserInfo} from "@/composables/useUserInfo.ts"; import 'animate.css/animate.min.css'; +import {useIngame} from "@/composables/useIngame.ts"; +import {initWebSocket} from "@/services/ws.ts"; + const app = createApp(App) const pinia = createPinia() app.use(pinia) +const ingameStore = useIngame(); +initWebSocket(ingameStore) app.use(router) app.use(Quasar, { plugins: { diff --git a/src/router/index.ts b/src/router/index.ts index 908614e..bf54408 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -7,7 +7,8 @@ import defaultMenu from "../components/DefaultMenu.vue" import axios from "axios"; import { useUserInfo } from "@/composables/useUserInfo"; import rulesView from "../components/Rules.vue"; - +import LobbyView from "@/views/LobbyView.vue"; +import GameView from "@/views/Game.vue" const api = window?.__RUNTIME_CONFIG__?.API_URL; const router = createRouter({ @@ -50,6 +51,12 @@ const router = createRouter({ component: LoginView, meta: { requiresAuth: false } }, + { + path: '/lobby', + name: 'lobby', + component: LobbyView, + meta: {requiresAuth: true } + } ], }) diff --git a/src/services/ws.ts b/src/services/ws.ts index 7b59a09..d65f7f1 100644 --- a/src/services/ws.ts +++ b/src/services/ws.ts @@ -33,10 +33,13 @@ let ws: WebSocket | null = null; const pending = new Map(); const handlers = new Map(); -const uState = useIngame(); +let uState: ReturnType | null = null; let heartbeatTimer: ReturnType | null = null; +export function initWebSocket(ingameStore: ReturnType) { + uState = ingameStore; +} let defaultHandler: HandlerFn | null = null; function uuid(): string { @@ -70,6 +73,10 @@ function stopHeartbeat() { } function setupSocketHandlers(socket: WebSocket) { + if (!uState) { + console.error("[WS] WebSocket module not initialized with Pinia store!"); + return; + } socket.onmessage = async (raw) => { console.debug("[WS] MESSAGE:", raw.data); @@ -100,7 +107,9 @@ function setupSocketHandlers(socket: WebSocket) { } if (state && stateData) { - uState.setIngame(state, stateData); + if(uState) { + uState.setIngame(state, stateData); + } } // Server event → handler branch diff --git a/src/views/CreateGame.vue b/src/views/CreateGame.vue index 01a2e73..f34b7b9 100644 --- a/src/views/CreateGame.vue +++ b/src/views/CreateGame.vue @@ -11,7 +11,6 @@ const playerAmount = ref(2); const $q = useQuasar(); const isLoading = ref(false); const router = useRouter(); -const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); const createGameQuasar = async () => { if (!lobbyName.value) { $q.notify({ message: 'Lobby-Name wird benötigt', color: 'red', position: 'top', icon: 'cancel' }); diff --git a/src/views/LobbyView.vue b/src/views/LobbyView.vue new file mode 100644 index 0000000..1637d86 --- /dev/null +++ b/src/views/LobbyView.vue @@ -0,0 +1,53 @@ + + + + + -- 2.52.0 From 76258b3ca89c1b78a632ad59525b8fb35651bcc0 Mon Sep 17 00:00:00 2001 From: Janis Date: Thu, 11 Dec 2025 10:24:51 +0100 Subject: [PATCH 4/5] feat: Update routing and websocket configuration for game state management --- env.d.ts | 2 +- package-lock.json | 18 ------- public/env.js | 3 +- public/env.template.js | 3 +- src/components/Ingame.vue | 70 ++++++++++++++++--------- src/components/ingame/GameInfoC.vue | 10 ++-- src/components/ingame/HandC.vue | 39 ++++++-------- src/components/ingame/PlayedCardsC.vue | 15 +++--- src/components/ingame/ScoreboardC.vue | 17 +++--- src/components/ingame/TurnC.vue | 23 ++++---- src/components/lobby/LobbyComponent.vue | 40 +++++++------- src/composables/useIngame.ts | 5 +- src/composables/useUserInfo.ts | 9 ++-- src/main.ts | 4 +- src/router/index.ts | 9 ++-- src/runtimeConfig.ts | 7 ++- src/services/ws.ts | 7 ++- src/types/GameSubTypes.ts | 4 +- src/views/CreateGame.vue | 2 +- src/views/Game.vue | 33 ++++++++---- src/views/JoinGameView.vue | 2 +- src/views/LoginView.vue | 2 +- 22 files changed, 173 insertions(+), 151 deletions(-) diff --git a/env.d.ts b/env.d.ts index 70b745d..6b5d34f 100644 --- a/env.d.ts +++ b/env.d.ts @@ -1,7 +1,7 @@ /// declare global { - interface Window { __RUNTIME_CONFIG__?: { API_URL?: string } } + interface Window { __RUNTIME_CONFIG__?: { API_URL?: string; WEBSOCKET_URL?: string } } } export {}; diff --git a/package-lock.json b/package-lock.json index e69b7d2..270da99 100644 --- a/package-lock.json +++ b/package-lock.json @@ -74,7 +74,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2575,7 +2574,6 @@ "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -2626,7 +2624,6 @@ "integrity": "sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.48.1", "@typescript-eslint/types": "8.48.1", @@ -2844,7 +2841,6 @@ "integrity": "sha512-iHmwV3QcVGGvSC1BG5bZ4z6iwa1SOpAPWmnjOErd4Ske+lZua5K9TtAVdx0gMBClJ28DViCbSmZitjWZsWO3LA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rolldown/pluginutils": "1.0.0-beta.50" }, @@ -3231,7 +3227,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3323,7 +3318,6 @@ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "license": "MIT", - "peer": true, "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", @@ -3406,7 +3400,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -3874,7 +3867,6 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3935,7 +3927,6 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -3983,7 +3974,6 @@ "integrity": "sha512-SbR9ZBUFKgvWAbq3RrdCtWaW0IKm6wwUiApxf3BVTNfqUIo4IQQmreMg2iHFJJ6C/0wss3LXURBJ1OwS/MhFcQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "natural-compare": "^1.4.0", @@ -4665,7 +4655,6 @@ "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "jiti": "lib/jiti-cli.mjs" } @@ -5351,7 +5340,6 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -5396,7 +5384,6 @@ "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.18.6.tgz", "integrity": "sha512-ZlK+vJXOBPSFDCNQDBDNwSI+AHoqaFPxK8ve6mhsYLhMKWI5b8zsGY9VU1xYjngO2aBvU4fvGWXy4tTbzrBk8Q==", "license": "MIT", - "peer": true, "engines": { "node": ">= 10.18.1", "npm": ">= 6.13.4", @@ -6157,7 +6144,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -6262,7 +6248,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6393,7 +6378,6 @@ "integrity": "sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -6644,7 +6628,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -6664,7 +6647,6 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.25.tgz", "integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==", "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.25", "@vue/compiler-sfc": "3.5.25", diff --git a/public/env.js b/public/env.js index fc45354..430b3cc 100644 --- a/public/env.js +++ b/public/env.js @@ -1,4 +1,5 @@ window.__RUNTIME_CONFIG__ = { - API_URL: "http://localhost:9000" + API_URL: "http://localhost:9000", + WEBSOCKET_API_URL: "ws://localhost:9000/websocket" }; diff --git a/public/env.template.js b/public/env.template.js index cba0fc7..b9d921c 100644 --- a/public/env.template.js +++ b/public/env.template.js @@ -1,4 +1,5 @@ window.__RUNTIME_CONFIG__ = { - API_URL: "${API_URL}" + API_URL: "${API_URL}", + WEBSOCKET_API_URL: "${WEBSOCKET_API_URL}" }; diff --git a/src/components/Ingame.vue b/src/components/Ingame.vue index 5b139b2..ad6eedf 100644 --- a/src/components/Ingame.vue +++ b/src/components/Ingame.vue @@ -13,38 +13,45 @@ const ig = useIngame() diff --git a/src/components/ingame/GameInfoC.vue b/src/components/ingame/GameInfoC.vue index 4d89704..4f1d96e 100644 --- a/src/components/ingame/GameInfoC.vue +++ b/src/components/ingame/GameInfoC.vue @@ -11,7 +11,7 @@ const {trumpsuit, firstCard} = toRefs(props) const trumpName = computed(() => { - switch (trumpsuit.value.path.charAt(trumpsuit.value.path.length - 1)) { + switch (trumpsuit.value.identifier.charAt(1) as string) { case 'S': return 'Spades' case 'H': @@ -36,14 +36,12 @@ const trumpName = computed(() => {
First Card
-
-
- No image -
+
diff --git a/src/components/ingame/HandC.vue b/src/components/ingame/HandC.vue index 1d13ce0..b13c314 100644 --- a/src/components/ingame/HandC.vue +++ b/src/components/ingame/HandC.vue @@ -1,22 +1,15 @@