|
1 | 1 | import React, {useEffect} from 'react'; |
2 | | -import styled, {DefaultTheme} from 'styled-components'; |
| 2 | +import styled from 'styled-components'; |
3 | 3 | import {Message} from '../../types'; |
4 | 4 | import {logger} from '../../utils/logger'; |
| 5 | +import Tabs from '../Tabs'; |
| 6 | +import MessageList from '../MessageList'; |
| 7 | +import InputArea from '../InputArea'; |
5 | 8 |
|
6 | 9 | const ChatContainer = styled.div` |
7 | | - display: flex; |
8 | | - flex-direction: column; |
9 | | - height: 100%; |
| 10 | + display: flex; |
| 11 | + flex-direction: column; |
| 12 | + height: 100%; |
10 | 13 | `; |
11 | 14 |
|
12 | | -const MessageList = styled.div` |
13 | | - flex: 1; |
14 | | - overflow-y: auto; |
15 | | - padding: 1rem; |
16 | | -`; |
17 | | - |
18 | | -const InputArea = styled.div<{ theme: DefaultTheme }>` |
19 | | - padding: 1rem; |
20 | | - border-top: 1px solid ${(props: { theme: DefaultTheme }) => props.theme.colors.border}; |
| 15 | +const TabContent = styled.div` |
| 16 | + flex: 1; |
| 17 | + display: flex; |
| 18 | + flex-direction: column; |
| 19 | + overflow: hidden; |
21 | 20 | `; |
22 | 21 |
|
23 | 22 | interface ChatProps { |
24 | | - messages: Message[]; |
25 | | - onSendMessage: (content: string) => void; |
| 23 | + messages: Message[]; |
| 24 | + onSendMessage: (content: string) => void; |
26 | 25 | } |
27 | 26 |
|
28 | | -const Chat: React.FC<ChatProps> = ({ messages, onSendMessage }) => { |
29 | | - // Log component mount and updates |
30 | | - useEffect(() => { |
31 | | - logger.component('Chat', 'Component mounted'); |
32 | | - logger.component('Chat', 'Initial messages:', messages); |
33 | | - return () => { |
34 | | - logger.component('Chat', 'Component unmounting'); |
35 | | - }; |
36 | | - }, []); |
37 | | - // Log when messages change |
38 | | - useEffect(() => { |
39 | | - console.log('[Chat] Messages updated:', messages); |
40 | | - }, [messages]); |
41 | | - // Wrap onSendMessage to add logging |
42 | | - const handleSendMessage = (content: string) => { |
43 | | - console.log('[Chat] Sending message:', content); |
44 | | - onSendMessage(content); |
45 | | - }; |
46 | | - // Log render |
47 | | - console.log('[Chat] Rendering with', messages.length, 'messages'); |
| 27 | +const Chat: React.FC<ChatProps> = ({messages, onSendMessage}) => { |
| 28 | + const [activeTab, setActiveTab] = React.useState('chat'); |
| 29 | + const tabs = [ |
| 30 | + {id: 'chat', label: 'Chat'}, |
| 31 | + {id: 'files', label: 'Files'}, |
| 32 | + {id: 'settings', label: 'Settings'} |
| 33 | + ]; |
| 34 | + |
| 35 | + // Log component mount and updates |
| 36 | + useEffect(() => { |
| 37 | + logger.component('Chat', 'Component mounted'); |
| 38 | + logger.component('Chat', 'Initial messages:', messages); |
| 39 | + return () => { |
| 40 | + logger.component('Chat', 'Component unmounting'); |
| 41 | + }; |
| 42 | + }, []); |
| 43 | + // Save active tab to localStorage when it changes |
| 44 | + useEffect(() => { |
| 45 | + logger.component('Chat', 'Saved active tab:', activeTab); |
| 46 | + }, [activeTab]); |
| 47 | + |
| 48 | + |
| 49 | + useEffect(() => { |
| 50 | + console.log('[Chat] Messages updated:', messages); |
| 51 | + }, [messages]); |
| 52 | + |
| 53 | + console.log('[Chat] Rendering with', messages.length, 'messages'); |
48 | 54 |
|
49 | | - return ( |
50 | | - <ChatContainer> |
51 | | - <MessageList> |
52 | | - {/* Message components will go here */} |
53 | | - </MessageList> |
54 | | - <InputArea> |
55 | | - {/* Input component will go here */} |
56 | | - </InputArea> |
57 | | - </ChatContainer> |
58 | | - ); |
| 55 | + return ( |
| 56 | + <ChatContainer> |
| 57 | + <Tabs tabs={tabs} activeTab={activeTab} onTabChange={setActiveTab}> |
| 58 | + <TabContent> |
| 59 | + {activeTab === 'chat' && ( |
| 60 | + <> |
| 61 | + <MessageList messages={messages}/> |
| 62 | + <InputArea onSendMessage={onSendMessage}/> |
| 63 | + </> |
| 64 | + )} |
| 65 | + {activeTab === 'files' && ( |
| 66 | + <div className="tab-content" data-tab="files"> |
| 67 | + <h2>Files</h2> |
| 68 | + <p>Browse and manage your chat files here.</p> |
| 69 | + </div> |
| 70 | + )} |
| 71 | + {activeTab === 'settings' && ( |
| 72 | + <div className="tab-content" data-tab="settings"> |
| 73 | + <h2>Settings</h2> |
| 74 | + <p>Configure your chat preferences here.</p> |
| 75 | + </div> |
| 76 | + )} |
| 77 | + </TabContent> |
| 78 | + </Tabs> |
| 79 | + </ChatContainer> |
| 80 | + ); |
59 | 81 | }; |
60 | 82 | // Add display name for better debugging |
61 | 83 | Chat.displayName = 'Chat'; |
|
0 commit comments