22import type { Message , MessageID , SendMessage , UserID } from "common/types" ;
33import type { Content , DMOverview , DMRoom } from "common/zod/types" ;
44import { useRouter } from "next/navigation" ;
5- import { useSnackbar } from "notistack" ;
65import { useCallback , useEffect , useRef , useState } from "react" ;
76import * as chat from "~/api/chat/chat" ;
87import { useMessages } from "~/api/chat/hooks" ;
98import { API_ENDPOINT } from "~/api/internal/endpoints" ;
109import request from "~/api/request" ;
11- import * as user from "~/api/user" ;
1210import { useMyID } from "~/api/user" ;
13- import { getIdToken } from "~/firebase/auth/lib" ;
1411import Dots from "../common/Dots" ;
15- import { socket } from "../data/socket" ;
12+ import { handlers } from "../data/socket" ;
1613import { MessageInput } from "./MessageInput" ;
1714import { RoomHeader } from "./RoomHeader" ;
1815
@@ -48,7 +45,6 @@ export function RoomWindow(props: Props) {
4845 setMessages ( state . data ) ;
4946 } , [ state . data ] ) ;
5047
51- const { enqueueSnackbar } = useSnackbar ( ) ;
5248 const [ editingMessageId , setEditingMessageId ] = useState < number | null > ( null ) ;
5349 const [ editedContent , setEditedContent ] = useState < string > ( "" ) ;
5450
@@ -69,54 +65,35 @@ export function RoomWindow(props: Props) {
6965 } ,
7066 [ write ] ,
7167 ) ;
72- const updateLocalMessage = useCallback ( ( _ : Message ) => reload ( ) , [ reload ] ) ;
68+ // TODO: fix these
69+ const updateLocalMessage = useCallback (
70+ ( _a : MessageID , _ : Message ) => reload ( ) ,
71+ [ reload ] ,
72+ ) ;
7373 const deleteLocalMessage = useCallback ( ( _ : MessageID ) => reload ( ) , [ reload ] ) ;
7474
75+ // メッセージの受取
7576 useEffect ( ( ) => {
76- async function registerSocket ( ) {
77- if ( ! room ) return ;
78- const idToken = await getIdToken ( ) ;
79- socket . emit ( "register" , idToken ) ;
80- socket . on ( "newMessage" , async ( msg : Message ) => {
81- if ( msg . creator === friendId ) {
82- appendLocalMessage ( msg ) ;
83- } else {
84- const creator = await user . get ( msg . creator ) ;
85- if ( creator == null ) return ;
86- enqueueSnackbar (
87- `${ creator . name } さんからのメッセージ : ${ msg . content } ` ,
88- {
89- variant : "info" ,
90- } ,
91- ) ;
92- }
93- } ) ;
94- socket . on ( "updateMessage" , async ( msg : Message ) => {
95- if ( msg . creator === friendId ) {
96- updateLocalMessage ( msg ) ;
97- }
98- } ) ;
99- socket . on ( "deleteMessage" , async ( msgId : number ) => {
100- deleteLocalMessage ( msgId ) ;
101- } ) ;
102- }
103- registerSocket ( ) ;
104- // Clean up
77+ handlers . onCreate = ( msg ) => {
78+ if ( msg . creator === friendId ) {
79+ appendLocalMessage ( msg ) ;
80+ return true ; // caught
81+ }
82+ return false ; // didn't catch
83+ } ;
84+ handlers . onUpdate = ( id , msg ) => {
85+ updateLocalMessage ( id , msg ) ;
86+ } ;
87+ handlers . onDelete = ( id ) => {
88+ deleteLocalMessage ( id ) ;
89+ } ;
10590 return ( ) => {
106- socket . off ( "newMessage" ) ;
107- socket . off ( "updateMessage" ) ;
108- socket . off ( "deleteMessage" ) ;
91+ handlers . onCreate = undefined ;
92+ handlers . onDelete = undefined ;
10993 } ;
110- } , [
111- room ,
112- friendId ,
113- enqueueSnackbar ,
114- appendLocalMessage ,
115- updateLocalMessage ,
116- deleteLocalMessage ,
117- ] ) ;
94+ } , [ friendId , appendLocalMessage , updateLocalMessage , deleteLocalMessage ] ) ;
11895
119- //画面スクロール
96+ // 画面スクロール
12097 const scrollDiv = useRef < HTMLDivElement > ( null ) ;
12198 const scrollToBottom = useCallback ( ( ) => {
12299 if ( scrollDiv . current ) {
@@ -150,7 +127,7 @@ export function RoomWindow(props: Props) {
150127 { content } ,
151128 friendId ,
152129 ) ;
153- updateLocalMessage ( editedMessage ) ;
130+ updateLocalMessage ( editedMessage . id , editedMessage ) ;
154131 } ,
155132 [ updateLocalMessage , friendId ] ,
156133 ) ;
0 commit comments