1- import type {
2- DMOverview ,
3- Message ,
4- MessageID ,
5- SendMessage ,
6- UserID ,
7- } from "common/types" ;
1+ "use client" ;
2+ import type { Message , MessageID , SendMessage , UserID } from "common/types" ;
83import type { Content } from "common/zod/types" ;
9- import { useSearchParams } from "next/navigation" ;
104import { useSnackbar } from "notistack" ;
115import { useCallback , useEffect , useRef , useState } from "react" ;
126import * as chat from "~/api/chat/chat" ;
@@ -19,13 +13,25 @@ import { socket } from "../data/socket";
1913import { MessageInput } from "./MessageInput" ;
2014import { RoomHeader } from "./RoomHeader" ;
2115
22- export function RoomWindow ( ) {
23- // FIXME: React Router が使えなくなったので、一時的に room の情報を URL に載せることで状態管理
24- const searchParams = useSearchParams ( ) ;
25- const roomData = searchParams . get ( "roomData" ) ;
26- const room = roomData
27- ? ( JSON . parse ( decodeURIComponent ( roomData ) ) as DMOverview )
28- : null ;
16+ type Props = {
17+ friendId : UserID ;
18+ room : {
19+ id : number ;
20+ messages : {
21+ id : number ;
22+ creator : number ;
23+ createdAt : Date ;
24+ content : string ;
25+ edited : boolean ;
26+ } [ ] ;
27+ isDM : true ;
28+ } & {
29+ name : string ;
30+ thumbnail : string ;
31+ } ;
32+ } ;
33+ export function RoomWindow ( props : Props ) {
34+ const { friendId, room } = props ;
2935
3036 if ( ! room ) {
3137 return (
@@ -36,7 +42,7 @@ export function RoomWindow() {
3642 const {
3743 state : { data : myId } ,
3844 } = useMyID ( ) ;
39- const { state, reload, write } = useMessages ( room . friendId ) ;
45+ const { state, reload, write } = useMessages ( friendId ) ;
4046 const [ messages , setMessages ] = useState ( state . data ) ;
4147
4248 useEffect ( ( ) => {
@@ -73,7 +79,7 @@ export function RoomWindow() {
7379 const idToken = await getIdToken ( ) ;
7480 socket . emit ( "register" , idToken ) ;
7581 socket . on ( "newMessage" , async ( msg : Message ) => {
76- if ( msg . creator === room . friendId ) {
82+ if ( msg . creator === friendId ) {
7783 appendLocalMessage ( msg ) ;
7884 } else {
7985 const creator = await user . get ( msg . creator ) ;
@@ -87,7 +93,7 @@ export function RoomWindow() {
8793 }
8894 } ) ;
8995 socket . on ( "updateMessage" , async ( msg : Message ) => {
90- if ( msg . creator === room . friendId ) {
96+ if ( msg . creator === friendId ) {
9197 updateLocalMessage ( msg ) ;
9298 }
9399 } ) ;
@@ -104,6 +110,7 @@ export function RoomWindow() {
104110 } ;
105111 } , [
106112 room ,
113+ friendId ,
107114 enqueueSnackbar ,
108115 appendLocalMessage ,
109116 updateLocalMessage ,
@@ -142,11 +149,11 @@ export function RoomWindow() {
142149 const editedMessage = await chat . updateMessage (
143150 message ,
144151 { content } ,
145- room . friendId ,
152+ friendId ,
146153 ) ;
147154 updateLocalMessage ( editedMessage ) ;
148155 } ,
149- [ updateLocalMessage , room . friendId ] ,
156+ [ updateLocalMessage , friendId ] ,
150157 ) ;
151158
152159 const cancelEdit = useCallback ( ( ) => {
@@ -167,7 +174,7 @@ export function RoomWindow() {
167174 < div className = "fixed top-14 z-50 w-full bg-white" >
168175 < RoomHeader room = { room } />
169176 </ div >
170- < div className = "absolute top-14 right-0 bottom-14 left-0 flex flex-col overflow-y-auto" >
177+ < div className = "absolute top-14 right-0 left-0 flex flex-col overflow-y-auto" >
171178 { messages && messages . length > 0 ? (
172179 < div className = "flex-grow overflow-y-auto p-2" ref = { scrollDiv } >
173180 { messages . map ( ( m ) => (
@@ -225,7 +232,7 @@ export function RoomWindow() {
225232 {
226233 label : "削除" ,
227234 color : "red" ,
228- onClick : ( ) => deleteMessage ( m . id , room . friendId ) ,
235+ onClick : ( ) => deleteMessage ( m . id , friendId ) ,
229236 alert : true ,
230237 messages : {
231238 buttonMessage : "削除" ,
@@ -248,8 +255,8 @@ export function RoomWindow() {
248255 </ div >
249256 ) }
250257 </ div >
251- < div className = "fixed bottom-0 w-full bg-white p-0" >
252- < MessageInput send = { sendDMMessage } room = { room } />
258+ < div className = "fixed bottom-12 w-full bg-white p-0" >
259+ < MessageInput send = { sendDMMessage } friendId = { friendId } />
253260 </ div >
254261 </ >
255262 ) ;
0 commit comments