File size: 1,920 Bytes
058cd84
452020d
 
058cd84
 
 
 
 
 
452020d
 
058cd84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
452020d
 
058cd84
 
452020d
 
 
058cd84
452020d
 
 
 
 
 
 
 
058cd84
 
 
 
 
452020d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import { Button, Flex, Input, Typography } from 'antd';
import { ChangeEventHandler, useState } from 'react';

import { Message } from '@/interfaces/database/chat';
import classNames from 'classnames';
import { useFetchConversation, useSendMessage } from '../hooks';

import { MessageType } from '@/constants/chat';
import { IClientConversation } from '../interface';
import styles from './index.less';

const { Paragraph } = Typography;

const MessageItem = ({ item }: { item: Message }) => {
  return (
    <div
      className={classNames(styles.messageItem, {
        [styles.messageItemLeft]: item.role === MessageType.Assistant,
        [styles.messageItemRight]: item.role === MessageType.User,
      })}
    >
      <span className={styles.messageItemContent}>
        <Paragraph ellipsis={{ tooltip: item.content, rows: 3 }}>
          {item.content}
        </Paragraph>
      </span>
    </div>
  );
};

const ChatContainer = () => {
  const [value, setValue] = useState('');
  const conversation: IClientConversation = useFetchConversation();
  const { sendMessage } = useSendMessage();

  const handlePressEnter = () => {
    console.info(value);
    sendMessage(value);
  };

  const handleInputChange: ChangeEventHandler<HTMLInputElement> = (e) => {
    setValue(e.target.value);
  };

  return (
    <Flex flex={1} className={styles.chatContainer} vertical>
      <Flex flex={1} vertical>
        {conversation?.message?.map((message) => (
          <MessageItem key={message.id} item={message}></MessageItem>
        ))}
      </Flex>
      <Input
        size="large"
        placeholder="Message Resume Assistant..."
        value={value}
        suffix={
          <Button type="primary" onClick={handlePressEnter}>
            Send
          </Button>
        }
        onPressEnter={handlePressEnter}
        onChange={handleInputChange}
      />
    </Flex>
  );
};

export default ChatContainer;