11"use client" ;
22
3+ import { ChatWithMessages } from "@/lib/chatHistory" ;
34import {
45 createContext ,
56 ReactNode ,
@@ -8,15 +9,10 @@ import {
89 useState ,
910} from "react" ;
1011
11- export interface ChatMessage {
12- sender : "user" | "ai" | "error" ;
13- text : string ;
14- }
15-
1612export interface IChatHistoryContext {
17- chatHistories : Record < string , Record < string , ChatMessage [ ] > > ;
18- addChat : ( sectionId : string , messages : ChatMessage [ ] ) => string ;
19- updateChat : ( sectionId : string , chatId : string , message : ChatMessage ) => void ;
13+ chatHistories : ChatWithMessages [ ] ;
14+ addChat : ( chat : ChatWithMessages ) => void ;
15+ // updateChat: (sectionId: string, chatId: string, message: ChatMessage) => void;
2016}
2117const ChatHistoryContext = createContext < IChatHistoryContext | null > ( null ) ;
2218export function useChatHistoryContext ( ) {
@@ -29,65 +25,26 @@ export function useChatHistoryContext() {
2925 return context ;
3026}
3127
32- export function ChatHistoryProvider ( { children } : { children : ReactNode } ) {
33- const [ chatHistories , setChatHistories ] = useState <
34- Record < string , Record < string , ChatMessage [ ] > >
35- > ( { } ) ;
28+ export function ChatHistoryProvider ( {
29+ children,
30+ initialChatHistories,
31+ } : {
32+ children : ReactNode ;
33+ initialChatHistories : ChatWithMessages [ ] ;
34+ } ) {
35+ const [ chatHistories , setChatHistories ] =
36+ useState < ChatWithMessages [ ] > ( initialChatHistories ) ;
3637 useEffect ( ( ) => {
37- // Load chat histories from localStorage on mount
38- const chatHistories : Record < string , Record < string , ChatMessage [ ] > > = { } ;
39- for ( let i = 0 ; i < localStorage . length ; i ++ ) {
40- const key = localStorage . key ( i ) ;
41- if ( key && key . startsWith ( "chat/" ) && key . split ( "/" ) . length === 3 ) {
42- const savedHistory = localStorage . getItem ( key ) ;
43- // eslint-disable-next-line @typescript-eslint/no-unused-vars
44- const [ _ , sectionId , chatId ] = key . split ( "/" ) ;
45- if ( savedHistory ) {
46- if ( ! chatHistories [ sectionId ] ) {
47- chatHistories [ sectionId ] = { } ;
48- }
49- chatHistories [ sectionId ] [ chatId ] = JSON . parse ( savedHistory ) ;
50- }
51- }
52- }
53- setChatHistories ( chatHistories ) ;
54- } , [ ] ) ;
38+ setChatHistories ( initialChatHistories ) ;
39+ } , [ initialChatHistories ] ) ;
5540
56- const addChat = ( sectionId : string , messages : ChatMessage [ ] ) : string => {
57- const chatId = Date . now ( ) . toString ( ) ;
58- const newChatHistories = { ...chatHistories } ;
59- if ( ! newChatHistories [ sectionId ] ) {
60- newChatHistories [ sectionId ] = { } ;
61- }
62- newChatHistories [ sectionId ] [ chatId ] = messages ;
63- setChatHistories ( newChatHistories ) ;
64- localStorage . setItem (
65- `chat/${ sectionId } /${ chatId } ` ,
66- JSON . stringify ( messages )
67- ) ;
68- return chatId ;
69- } ;
70- const updateChat = (
71- sectionId : string ,
72- chatId : string ,
73- message : ChatMessage
74- ) => {
75- const newChatHistories = { ...chatHistories } ;
76- if ( newChatHistories [ sectionId ] && newChatHistories [ sectionId ] [ chatId ] ) {
77- newChatHistories [ sectionId ] [ chatId ] = [
78- ...newChatHistories [ sectionId ] [ chatId ] ,
79- message ,
80- ] ;
81- setChatHistories ( newChatHistories ) ;
82- localStorage . setItem (
83- `chat/${ sectionId } /${ chatId } ` ,
84- JSON . stringify ( newChatHistories [ sectionId ] [ chatId ] )
85- ) ;
86- }
41+ const addChat = ( chat : ChatWithMessages ) => {
42+ // サーバー側で追加された新しいchatをクライアント側にも反映する
43+ setChatHistories ( [ ...chatHistories , chat ] ) ;
8744 } ;
8845
8946 return (
90- < ChatHistoryContext . Provider value = { { chatHistories, addChat, updateChat } } >
47+ < ChatHistoryContext . Provider value = { { chatHistories, addChat } } >
9148 { children }
9249 </ ChatHistoryContext . Provider >
9350 ) ;
0 commit comments