From bb6355d9ed6745b4852a52040d880ee1dcc6d797 Mon Sep 17 00:00:00 2001 From: lq64 Date: Sun, 14 Dec 2025 15:10:27 +0100 Subject: [PATCH] feat(ui): FRO-34 Lobby (#21) Started with Lobby Component Co-authored-by: LQ63 Co-authored-by: Janis Reviewed-on: https://git.janis-eccarius.de/KnockOutWhist/KnockOutWhist-Frontend/pulls/21 Reviewed-by: Janis Co-authored-by: lq64 Co-committed-by: lq64 --- 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 | 80 +++++++------ src/components/ingame/PlayedCardsC.vue | 15 ++- src/components/ingame/ScoreboardC.vue | 17 +-- src/components/ingame/TurnC.vue | 23 ++-- src/components/lobby/LobbyComponent.vue | 150 ++++++++++++++++++++++++ src/composables/useIngame.ts | 5 +- src/composables/useUserInfo.ts | 10 +- src/composables/useWebsocket.ts | 2 + src/main.ts | 5 + src/router/index.ts | 10 +- src/runtimeConfig.ts | 7 +- src/services/ws.ts | 20 +++- src/types/GameSubTypes.ts | 4 +- src/views/CreateGame.vue | 3 +- src/views/Game.vue | 34 ++++-- src/views/JoinGameView.vue | 2 +- src/views/LobbyView.vue | 53 +++++++++ src/views/LoginView.vue | 2 +- 24 files changed, 408 insertions(+), 140 deletions(-) create mode 100644 src/components/lobby/LobbyComponent.vue create mode 100644 src/views/LobbyView.vue 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..9a79b2d 100644 --- a/src/components/ingame/HandC.vue +++ b/src/components/ingame/HandC.vue @@ -1,42 +1,40 @@