Skip to content

Commit da5cf03

Browse files
committed
Feat: 최근 채팅내역 페이지 API 연결
1 parent 48e9fa2 commit da5cf03

File tree

2 files changed

+24
-39
lines changed

2 files changed

+24
-39
lines changed

src/components/friends/ChatLogs.tsx

+20-35
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,27 @@ import { css } from '@emotion/react';
22
import TimeStamp from '@/components/common/timeStamp/TimeStamp';
33
import { useEffect, useState } from 'react';
44
import { recentChatAPI } from '@/utils/api/chats';
5+
import { CharacterInfo } from '@/types/characterInfo';
56
import FriendWrapper from './friend/FriendWrapper';
67
import FriendInfo from './friend/FriendInfo';
78
import ChatBadge from './friend/ChatBadge';
89

10+
interface recentMessageWithCharacterInfo {
11+
characterInfo: CharacterInfo;
12+
lastMessage: {
13+
content: string;
14+
createdAt: number;
15+
fromUser: boolean;
16+
};
17+
}
18+
919
const ChatLogs = () => {
1020
// TODO: 데이터셋을 한 번에 API로 받아오면 더 편하게 작업할 수 있을 것 같음
11-
const [chatLogDataSet, setchatLogDataSet] = useState(chatLogDataSample);
21+
const [recentChatList, setRecentChatList] = useState<recentMessageWithCharacterInfo[]>([]);
1222

1323
const callRecentAPI = async () => {
14-
const recentData = await recentChatAPI();
15-
console.log(recentData);
16-
const tempDataSet = chatLogDataSet.map((chatLog, index) => ({
17-
...chatLog,
18-
message: recentData[index].lastMessage.content,
19-
timestamp: recentData[index].lastMessage.createdAt,
20-
}));
21-
setchatLogDataSet([...tempDataSet]);
24+
const recentChatData = await recentChatAPI();
25+
setRecentChatList([...recentChatData]);
2226
};
2327

2428
useEffect(() => {
@@ -27,21 +31,20 @@ const ChatLogs = () => {
2731

2832
return (
2933
<section css={chatLogsWrapperCSS}>
30-
{chatLogDataSet.map((data, index) => (
31-
// TODO: 여러 캐릭터가 있을 때 스크롤이 가능한지 확인하기 위함
34+
{recentChatList.map(({ characterInfo, lastMessage }, index) => (
3235
<FriendWrapper
3336
// eslint-disable-next-line react/no-array-index-key
3437
key={index}
35-
linkUrl={`/chats/${data.characterId}`}
38+
linkUrl={`/chats/${characterInfo.characterId}`}
3639
>
3740
<FriendInfo
38-
characterName={data.characterName}
39-
message={data.message}
40-
imageUrl={data.imageUrl}
41+
characterName={characterInfo.characterName}
42+
message={lastMessage.content}
43+
imageUrl={characterInfo.profileImageUrl}
4144
/>
4245
<div css={subInfoWrapperCSS}>
43-
<TimeStamp timestamp={data.timestamp} />
44-
<ChatBadge unreadCount={data.unreadCount} />
46+
<TimeStamp timestamp={lastMessage.createdAt} />
47+
<ChatBadge unreadCount={lastMessage.fromUser} />
4548
</div>
4649
</FriendWrapper>
4750
))}
@@ -65,21 +68,3 @@ const subInfoWrapperCSS = css`
6568
align-items: flex-end;
6669
margin-right: 0.625rem;
6770
`;
68-
69-
const chatLogDataSample = [
70-
{
71-
characterId: '0',
72-
characterName: '이영준',
73-
imageUrl: '/leeyj.png',
74-
message: '.',
75-
timestamp: 123123,
76-
unreadCount: 1,
77-
}, {
78-
characterId: '1',
79-
characterName: '김미소',
80-
imageUrl: '/kimms.png',
81-
message: '.',
82-
timestamp: 123123,
83-
unreadCount: 0,
84-
},
85-
];

src/components/friends/friend/ChatBadge.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ import { css } from '@emotion/react';
33
import color from '@/styles/color';
44

55
interface ChatBadgeProps {
6-
unreadCount: number
6+
unreadCount: boolean
77
}
88

99
const ChatBadge: FC<ChatBadgeProps> = ({ unreadCount }) => (
10-
<div css={countCSS(unreadCount)}>{unreadCount}</div>
10+
<div css={countCSS(unreadCount)}>{unreadCount ? '0' : '1'}</div>
1111
);
1212

1313
export default ChatBadge;
1414

15-
const countCSS = (unreadCount : number) => css`
16-
visibility : ${unreadCount ? 'visible' : 'hidden'};
15+
const countCSS = (unreadCount : boolean) => css`
16+
visibility : ${unreadCount ? 'hidden' : 'visible'};
1717
background-color: #F04A4C;
1818
border-radius: 50%;
1919
height: 1rem;

0 commit comments

Comments
 (0)