From e9ecc1d11d7dbcb8752c884a004365e394743374 Mon Sep 17 00:00:00 2001
From: Nzt3
Date: Sun, 16 Jun 2024 01:15:01 +0900
Subject: [PATCH 01/18] set enterRoom
---
src/pages/EnterRoom.vue | 58 +++++++++++++++++++++++++++++++++++++++++
src/router/index.ts | 5 ++++
2 files changed, 63 insertions(+)
create mode 100644 src/pages/EnterRoom.vue
diff --git a/src/pages/EnterRoom.vue b/src/pages/EnterRoom.vue
new file mode 100644
index 0000000..f061561
--- /dev/null
+++ b/src/pages/EnterRoom.vue
@@ -0,0 +1,58 @@
+
+
+
+ 部屋名: {{ thisRoomName }}
+
+部屋名: {{ thisRoomName }}
+ユーザー名を設定してください。
+
+
+
+
+
+
+
+{{ userNickName }}として
+
+{{ errMsg }}
+
\ No newline at end of file
diff --git a/src/router/index.ts b/src/router/index.ts
index 2d2ead4..caac579 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -16,6 +16,11 @@ const routes: RouteRecordRaw[] = [
name: 'IndividualRoom',
component: () => import('@/pages/IndividualRoom.vue'),
},
+ {
+ path: '/rooms/:id/enter',
+ name: 'EnterRoom',
+ component: () => import('@/pages/EnterRoom.vue'),
+ },
{
path: '/rooms/create',
name: 'CreateRoom',
From 8b6a3dda044f59c860589ae72baf9bbf1403f554 Mon Sep 17 00:00:00 2001
From: Nzt3
Date: Sun, 16 Jun 2024 09:27:46 +0900
Subject: [PATCH 02/18] =?UTF-8?q?=E7=A7=BB=E5=8B=95=E5=85=88=E3=81=AEURL?=
=?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/pages/CreateRoom.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pages/CreateRoom.vue b/src/pages/CreateRoom.vue
index 4ae77b3..5ecad4a 100644
--- a/src/pages/CreateRoom.vue
+++ b/src/pages/CreateRoom.vue
@@ -28,7 +28,7 @@ const submit = async ()=> {
const resp = await api.apiRoomPost(roomInfo)
const roomId = resp.data.roomId
router.push(
- {path: `/rooms/${roomId}`,query: {password:roomPassword.value}}
+ {path: `/rooms/${roomId}/enter`,query: {password:roomPassword.value}}
)
}catch(e){
console.error(e)
From 1b63357a78ef1a79639d6bac77811467d17f9265 Mon Sep 17 00:00:00 2001
From: Nzt3
Date: Sun, 16 Jun 2024 09:37:37 +0900
Subject: [PATCH 03/18] =?UTF-8?q?add=20=E3=83=91=E3=82=B9=E3=83=91?=
=?UTF-8?q?=E3=83=A9=E3=83=A1=E3=82=BF=E3=80=81=E3=82=AF=E3=82=A8=E3=83=AA?=
=?UTF-8?q?=E3=83=91=E3=83=A9=E3=83=A1=E3=82=BF=E3=81=AE=E5=8F=96=E5=BE=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/pages/EnterRoom.vue | 36 +++++++++++++++++++++++++++---------
1 file changed, 27 insertions(+), 9 deletions(-)
diff --git a/src/pages/EnterRoom.vue b/src/pages/EnterRoom.vue
index f061561..c6de145 100644
--- a/src/pages/EnterRoom.vue
+++ b/src/pages/EnterRoom.vue
@@ -10,7 +10,6 @@ import router from '@/router';
// 名前に被り || 合言葉が不正 -> 失敗を表示して再入力へ
const thisRoomId=ref('')
-const thisRoomName=ref('')
const userNickName=ref('')
const roomPassword=ref('')
const errMsg=ref('')
@@ -22,8 +21,11 @@ const submit = async () => {
try{
// enterRoom を送る
const resp = (await api.apiRoomRoomIdEnterPost(thisRoomId.value,enterInfo)).data
- // ここで resp から userId と RoomId と userName を持たせて IndividualRoom へ
- // userId を持たせておけば password とかは不要そう
+ // ここで resp から userId と userName を持たせて IndividualRoom へ
+ userNickName.value=resp.userName
+ const userId=resp.userId
+ userNickName.value=resp.userName
+ // stores/user に userId と userName を記録して、 /rooms/:id に移動させる
router.push(
{path: `/rooms/${thisRoomId}`}
)
@@ -32,16 +34,32 @@ const submit = async () => {
console.error(e)
}
}
+
+onMounted(
+ ()=>{
+ const roomId=router.currentRoute.value.params.id
+ if(typeof roomId == 'string'){
+ thisRoomId.value=roomId
+ }else{
+ console.error("Invalid RoomId type")
+ }
+ const queryPassword=router.currentRoute.value.query['password']
+ if(typeof queryPassword == 'string'){
+ roomPassword.value=queryPassword
+ }
+ }
+
+)
-
- 部屋名: {{ thisRoomName }}
+
+ 部屋に入る
-
部屋名: {{ thisRoomName }}
-ユーザー名を設定してください。
+部屋ID: {{ thisRoomId }}
+この部屋で使うニックネームを設定してください。
@@ -52,7 +70,7 @@ const submit = async () => {
-{{ userNickName }}として
+
{{ errMsg }}
\ No newline at end of file
From 40447f7a8074eb9fdf8dc585e1c4362c5f27173f Mon Sep 17 00:00:00 2001
From: Nzt3
Date: Sun, 16 Jun 2024 10:11:45 +0900
Subject: [PATCH 04/18] test pinia
---
src/pages/EnterRoom.vue | 36 +++++++++++++++++++++++++-----------
src/stores/room.ts | 13 +++++++++++++
2 files changed, 38 insertions(+), 11 deletions(-)
create mode 100644 src/stores/room.ts
diff --git a/src/pages/EnterRoom.vue b/src/pages/EnterRoom.vue
index c6de145..278ace5 100644
--- a/src/pages/EnterRoom.vue
+++ b/src/pages/EnterRoom.vue
@@ -3,6 +3,8 @@ import { ref,onMounted } from 'vue'
import api,{EnterRoom} from '@/lib/apis'
import router from '@/router';
+import {useRoomStore} from '@/stores/room'
+const store=useRoomStore()
// 部屋に入る前のページ
// 必須: 名前
// private -> 合言葉の入力欄
@@ -12,7 +14,8 @@ import router from '@/router';
const thisRoomId=ref('')
const userNickName=ref('')
const roomPassword=ref('')
-const errMsg=ref('')
+const submitError=ref(false)
+const userSettingError=ref(false)
const submit = async () => {
const enterInfo:EnterRoom={
"userName": userNickName.value,
@@ -20,18 +23,25 @@ const submit = async () => {
}
try{
// enterRoom を送る
- const resp = (await api.apiRoomRoomIdEnterPost(thisRoomId.value,enterInfo)).data
+ const resp = (await api.apiRoomRoomIdEnterPost(thisRoomId.value,enterInfo))
// ここで resp から userId と userName を持たせて IndividualRoom へ
- userNickName.value=resp.userName
- const userId=resp.userId
- userNickName.value=resp.userName
- // stores/user に userId と userName を記録して、 /rooms/:id に移動させる
- router.push(
- {path: `/rooms/${thisRoomId}`}
- )
+ if(resp.status==200){
+ userNickName.value=resp.data.userName
+ const userId=resp.data.userId
+ userNickName.value=resp.userName
+ store.setName(userNickName.value)
+ submitError.value=false
+ // stores/user に userId と userName を記録して、 /rooms/:id に移動させる
+ router.push(
+ {path: `/rooms/${thisRoomId.value}`}
+ )
+ }else{
+ userSettingError.value=true
+ }
}catch (e){
// 通信エラー or userNameエラー or password エラー
console.error(e)
+ submitError.value=true
}
}
@@ -71,6 +81,10 @@ onMounted(
-
-{{ errMsg }}
+
+
ニックネームが使用不可能。もしくは間違った合言葉です。
+
+
+
エラーが発生しました。操作をやり直してください。
+
\ No newline at end of file
diff --git a/src/stores/room.ts b/src/stores/room.ts
new file mode 100644
index 0000000..2818d8b
--- /dev/null
+++ b/src/stores/room.ts
@@ -0,0 +1,13 @@
+import {defineStore} from 'pinia'
+import { ref } from 'vue'
+
+export const useRoomStore= defineStore('room',
+ ()=>{
+ const count=ref(0)
+ const name=ref('')
+ function setName(newName :string){
+ name.value=newName
+ }
+ return {count,name,setName}
+ }
+)
\ No newline at end of file
From 0336681817a1c9ef3faababb0a9e099a04b8c287 Mon Sep 17 00:00:00 2001
From: Nzt3
Date: Sun, 16 Jun 2024 10:13:30 +0900
Subject: [PATCH 05/18] lint
---
src/pages/EnterRoom.vue | 52 ++++++++++++++++++++++-------------------
1 file changed, 28 insertions(+), 24 deletions(-)
diff --git a/src/pages/EnterRoom.vue b/src/pages/EnterRoom.vue
index 278ace5..37a70b9 100644
--- a/src/pages/EnterRoom.vue
+++ b/src/pages/EnterRoom.vue
@@ -62,29 +62,33 @@ onMounted(
)
-
- 部屋に入る
-
-部屋ID: {{ thisRoomId }}
-この部屋で使うニックネームを設定してください。
-
-
-
-
-
-
+
+ 部屋に入る
+
+ 部屋ID: {{ thisRoomId }}
+ この部屋で使うニックネームを設定してください。
+
+
+
+
+
+
-
-
-
ニックネームが使用不可能。もしくは間違った合言葉です。
-
-
-
エラーが発生しました。操作をやり直してください。
-
+
+
+
+
+
ニックネームが使用不可能。もしくは間違った合言葉です。
+
+
+
エラーが発生しました。操作をやり直してください。
+
\ No newline at end of file
From 7a375680ea3f5959eff53b2a163ca71325850ac2 Mon Sep 17 00:00:00 2001
From: Nzt3
Date: Sun, 16 Jun 2024 10:16:46 +0900
Subject: [PATCH 06/18] fix unused value
---
src/pages/EnterRoom.vue | 2 --
1 file changed, 2 deletions(-)
diff --git a/src/pages/EnterRoom.vue b/src/pages/EnterRoom.vue
index 37a70b9..36d86e3 100644
--- a/src/pages/EnterRoom.vue
+++ b/src/pages/EnterRoom.vue
@@ -27,8 +27,6 @@ const submit = async () => {
// ここで resp から userId と userName を持たせて IndividualRoom へ
if(resp.status==200){
userNickName.value=resp.data.userName
- const userId=resp.data.userId
- userNickName.value=resp.userName
store.setName(userNickName.value)
submitError.value=false
// stores/user に userId と userName を記録して、 /rooms/:id に移動させる
From 7ec1cfbb1fb8ef1eaaa798747cd708efca6a0a20 Mon Sep 17 00:00:00 2001
From: Nzt3
Date: Sun, 16 Jun 2024 10:36:41 +0900
Subject: [PATCH 07/18] add User Store
---
src/pages/EnterRoom.vue | 9 +++++----
src/stores/room.ts | 13 -------------
src/stores/user.ts | 12 ++++++++++++
3 files changed, 17 insertions(+), 17 deletions(-)
delete mode 100644 src/stores/room.ts
create mode 100644 src/stores/user.ts
diff --git a/src/pages/EnterRoom.vue b/src/pages/EnterRoom.vue
index 36d86e3..9c13605 100644
--- a/src/pages/EnterRoom.vue
+++ b/src/pages/EnterRoom.vue
@@ -3,8 +3,8 @@ import { ref,onMounted } from 'vue'
import api,{EnterRoom} from '@/lib/apis'
import router from '@/router';
-import {useRoomStore} from '@/stores/room'
-const store=useRoomStore()
+import {userUserStore} from '@/stores/user'
+const store=userUserStore()
// 部屋に入る前のページ
// 必須: 名前
// private -> 合言葉の入力欄
@@ -26,10 +26,11 @@ const submit = async () => {
const resp = (await api.apiRoomRoomIdEnterPost(thisRoomId.value,enterInfo))
// ここで resp から userId と userName を持たせて IndividualRoom へ
if(resp.status==200){
- userNickName.value=resp.data.userName
- store.setName(userNickName.value)
submitError.value=false
// stores/user に userId と userName を記録して、 /rooms/:id に移動させる
+ userNickName.value=resp.data.userName
+ const userId=resp.data.userId
+ store.setUser(userNickName.value,userId)
router.push(
{path: `/rooms/${thisRoomId.value}`}
)
diff --git a/src/stores/room.ts b/src/stores/room.ts
deleted file mode 100644
index 2818d8b..0000000
--- a/src/stores/room.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import {defineStore} from 'pinia'
-import { ref } from 'vue'
-
-export const useRoomStore= defineStore('room',
- ()=>{
- const count=ref(0)
- const name=ref('')
- function setName(newName :string){
- name.value=newName
- }
- return {count,name,setName}
- }
-)
\ No newline at end of file
diff --git a/src/stores/user.ts b/src/stores/user.ts
new file mode 100644
index 0000000..3c7126c
--- /dev/null
+++ b/src/stores/user.ts
@@ -0,0 +1,12 @@
+import {defineStore} from 'pinia'
+import { ref } from 'vue'
+
+export const userUserStore = defineStore('userInfo',() => {
+ const userId=ref('')
+ const userName=ref('')
+ function setUser(newName: string,newId: string){
+ userName.value=newName
+ userId.value=newId
+ }
+ return {userId,userName,setUser}
+})
\ No newline at end of file
From 123ed65ebe5787788007b37c85c02d543989123a Mon Sep 17 00:00:00 2001
From: Nzt3
Date: Sun, 16 Jun 2024 10:43:25 +0900
Subject: [PATCH 08/18] format
---
src/pages/EnterRoom.vue | 60 ++++++++++++++++++++---------------------
1 file changed, 30 insertions(+), 30 deletions(-)
diff --git a/src/pages/EnterRoom.vue b/src/pages/EnterRoom.vue
index 9c13605..9f650aa 100644
--- a/src/pages/EnterRoom.vue
+++ b/src/pages/EnterRoom.vue
@@ -1,60 +1,60 @@
-
- 部屋に入る
-
+ 部屋に入る
部屋ID: {{ thisRoomId }}
この部屋で使うニックネームを設定してください。
-
+
ニックネームが使用不可能。もしくは間違った合言葉です。
@@ -90,4 +81,4 @@ onMounted(
-
\ No newline at end of file
+
From fd4e10a792d4257d3687a74d10291c90171e1b3a Mon Sep 17 00:00:00 2001
From: Nzt3
Date: Sun, 16 Jun 2024 11:22:33 +0900
Subject: [PATCH 14/18] =?UTF-8?q?fix=20=E3=83=A6=E3=83=BC=E3=82=B6?=
=?UTF-8?q?=E3=83=BC=E5=90=8D=E3=81=AE=E8=A8=AD=E5=AE=9A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/pages/EnterRoom.vue | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/pages/EnterRoom.vue b/src/pages/EnterRoom.vue
index a6c1563..0f332d2 100644
--- a/src/pages/EnterRoom.vue
+++ b/src/pages/EnterRoom.vue
@@ -28,9 +28,8 @@ const submit = async () => {
if (resp.status == 200) {
submitError.value = false
// stores/user に userId と userName を記録して、 /rooms/:id に移動させる
- userNickName.value = resp.data.userName
const userId = resp.data.userId
- store.setUser(userNickName.value, userId)
+ store.setUser(resp.data.userName, userId)
router.push({ path: `/rooms/${thisRoomId.value}` })
} else {
userSettingError.value = true
From 2378adc0b191c759955b421b23e32102e33c1d97 Mon Sep 17 00:00:00 2001
From: Rozelin
Date: Sun, 16 Jun 2024 11:55:28 +0900
Subject: [PATCH 15/18] =?UTF-8?q?=E8=87=AA=E5=88=86=E3=81=AE=E6=8A=95?=
=?UTF-8?q?=E7=A8=BF=E3=81=AB=E3=81=84=E3=81=84=E3=81=AD=E3=81=A8=E9=80=9A?=
=?UTF-8?q?=E5=A0=B1=E3=81=8C=E3=81=A7=E3=81=8D=E3=81=AA=E3=81=84=E3=82=88?=
=?UTF-8?q?=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.eslintrc.cjs | 11 ++++++++
src/icons/ReportIcon.vue | 8 +++++-
src/icons/ThumbUpIcon.vue | 8 +++++-
src/pages/IndividualRoom.vue | 32 ++++++++++++++++------
src/stores/individualRoom.ts | 51 +++++++++++++++++++++++++++++-------
5 files changed, 91 insertions(+), 19 deletions(-)
diff --git a/.eslintrc.cjs b/.eslintrc.cjs
index 3a65063..955540c 100644
--- a/.eslintrc.cjs
+++ b/.eslintrc.cjs
@@ -33,6 +33,17 @@ module.exports = {
},
],
'no-case-declarations': 'off',
+ '@typescript-eslint/ban-types': [
+ 'error',
+ {
+ types: {
+ '{}': false,
+ Object: false,
+ Function: false,
+ },
+ extendDefaults: true,
+ },
+ ],
},
parser: 'vue-eslint-parser',
parserOptions: {
diff --git a/src/icons/ReportIcon.vue b/src/icons/ReportIcon.vue
index 0e8052f..85e78f9 100644
--- a/src/icons/ReportIcon.vue
+++ b/src/icons/ReportIcon.vue
@@ -1,3 +1,9 @@
+
+
diff --git a/src/icons/ThumbUpIcon.vue b/src/icons/ThumbUpIcon.vue
index 5fc4ab3..81249b7 100644
--- a/src/icons/ThumbUpIcon.vue
+++ b/src/icons/ThumbUpIcon.vue
@@ -1,3 +1,9 @@
+
+
diff --git a/src/pages/IndividualRoom.vue b/src/pages/IndividualRoom.vue
index 1164e91..eb7487e 100644
--- a/src/pages/IndividualRoom.vue
+++ b/src/pages/IndividualRoom.vue
@@ -1,20 +1,24 @@
@@ -49,10 +53,18 @@ const reportWord = (wordId: number) => {
{{ `基礎点: ${post.basicScore}` }}
- goodWord(post.wordId)" />
+ goodWord(post)"
+ />
{{ post.additionalScore }}
-
reportWord(post.wordId)" />
+ reportWord(post)"
+ />
@@ -138,6 +150,10 @@ const reportWord = (wordId: number) => {
gap: 4px;
}
+.icon-disabled {
+ cursor: not-allowed;
+}
+
.input-container {
width: 100%;
display: flex;
diff --git a/src/stores/individualRoom.ts b/src/stores/individualRoom.ts
index ea2cd7d..680f4cf 100644
--- a/src/stores/individualRoom.ts
+++ b/src/stores/individualRoom.ts
@@ -1,5 +1,6 @@
import { ref } from 'vue'
import { defineStore } from 'pinia'
+import { useStoreUser } from './user'
type IndividualRoomState =
| {
@@ -7,16 +8,18 @@ type IndividualRoomState =
roomId: undefined
posts: []
rejectedPosts: []
+ userScoreMap: {}
}
| {
ws: WebSocket
roomId: string
posts: Post[]
rejectedPosts: RejectedPostResponse[]
+ userScoreMap: Record
}
interface BasicPost {
- wordId: number
+ wordId: string
word: string
reading: string
basicScore: number
@@ -43,7 +46,7 @@ interface PostedWord extends BasicPost {
interface ScoreChangeResponse {
// いいねや通報で得点が変動した時
type: 'score_change'
- wordId: number
+ wordId: string
additionalScore: number
basicScore: number
totalScore: number
@@ -59,15 +62,18 @@ const BASE_URL =
const websocketUrl = (roomId: string) => `${BASE_URL}/api/ws/${roomId}`
export const useIndividualRoom = defineStore('individualRoom', () => {
- const initialState = {
+ const initialState: IndividualRoomState = {
ws: null,
roomId: undefined,
posts: [] as [],
rejectedPosts: [] as [],
+ userScoreMap: {},
}
const state = ref(initialState)
+ const userStore = useStoreUser()
+
const connect = (roomId: string) => {
const ws = new WebSocket(websocketUrl(roomId))
ws.onopen = () => {
@@ -77,6 +83,7 @@ export const useIndividualRoom = defineStore('individualRoom', () => {
roomId,
posts: [],
rejectedPosts: [],
+ userScoreMap: {},
}
}
@@ -100,17 +107,21 @@ export const useIndividualRoom = defineStore('individualRoom', () => {
totalScore: data.basicScore,
isInvalid: false,
})
+ userScoreChange(data.senderId, data.basicScore)
break
case 'post_word_rejected':
state.value.rejectedPosts.push(data)
break
case 'score_change':
const post = state.value.posts.find(
- (post) => post.wordId === data.wordId,
+ (post) => post.wordId === data.wordId
)
if (post === undefined) {
throw new Error('Post not found')
}
+
+ userScoreChange(post.senderId, data.totalScore - post.totalScore)
+
post.additionalScore = data.additionalScore
post.basicScore = data.basicScore
post.totalScore = data.totalScore
@@ -134,28 +145,50 @@ export const useIndividualRoom = defineStore('individualRoom', () => {
throw new Error('WebSocket is not connected')
}
state.value.ws.send(
- JSON.stringify({ type: 'postWord', args: { word, reading } }),
+ JSON.stringify({ type: 'postWord', args: { word, reading } })
)
}
- const reportPost = (wordId: number) => {
+ const reportPost = (post: Post) => {
if (state.value.ws === null) {
throw new Error('WebSocket is not connected')
}
+
+ if (post.senderId === userStore.userId) {
+ return
+ }
+
state.value.ws.send(
- JSON.stringify({ type: 'reportWord', args: { wordId } }),
+ JSON.stringify({ type: 'reportWord', args: { wordId: post.wordId } })
)
}
- const goodPost = (wordId: number, score: number) => {
+ const goodPost = (post: Post, score: number) => {
if (state.value.ws === null) {
throw new Error('WebSocket is not connected')
}
+
+ if (post.senderId === userStore.userId) {
+ retrun
+ }
+
state.value.ws.send(
- JSON.stringify({ type: 'goodWord', args: { wordId, score } }),
+ JSON.stringify({
+ type: 'goodWord',
+ args: { wordId: post.wordId, score },
+ })
)
}
+ const userScoreChange = (userId: string, score: number) => {
+ if (state.value.ws === null) {
+ throw new Error('WebSocket is not connected')
+ }
+
+ const prevScore = state.value.userScoreMap[userId] || 0
+ state.value.userScoreMap[userId] = prevScore + score
+ }
+
return {
state,
connect,
From f5508d2c100ba3498a51c0c41d58c98c627436fe Mon Sep 17 00:00:00 2001
From: Rozelin
Date: Sun, 16 Jun 2024 12:18:32 +0900
Subject: [PATCH 16/18] =?UTF-8?q?=E3=83=A9=E3=83=B3=E3=82=AD=E3=83=B3?=
=?UTF-8?q?=E3=82=B0=E8=A1=A8=E7=A4=BA=E3=81=AE=E5=AE=9F=E8=A3=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/pages/IndividualRoom.vue | 143 +++++++++++++++++++++++++++--------
src/stores/individualRoom.ts | 20 ++---
2 files changed, 120 insertions(+), 43 deletions(-)
diff --git a/src/pages/IndividualRoom.vue b/src/pages/IndividualRoom.vue
index eb7487e..256738a 100644
--- a/src/pages/IndividualRoom.vue
+++ b/src/pages/IndividualRoom.vue
@@ -10,7 +10,7 @@ const router = useRouter()
const roomId = computed(() =>
Array.isArray(router.currentRoute.value.params.id)
? router.currentRoute.value.params.id[0]
- : router.currentRoute.value.params.id
+ : router.currentRoute.value.params.id,
)
const individualRoomStore = useIndividualRoom()
@@ -41,63 +41,110 @@ const goodWord = (post: Post) => {
const reportWord = (post: Post) => {
individualRoomStore.reportPost(post)
}
+
+const ranking = computed(() => {
+ if (individualRoomStore.state.ws === null) {
+ return []
+ }
+
+ const ranking: { name: string; score: number }[] = []
+ for (const userName of Object.keys(individualRoomStore.state.userScoreMap)) {
+ ranking.push({
+ name: userName,
+ score: individualRoomStore.state.userScoreMap[userName],
+ })
+ }
+ ranking.sort((a, b) => b.score - a.score)
+ return ranking
+})
-
-
- {{ post.senderName }}
- {{ `${post.word} (${post.reading})` }}
-