Skip to content

Commit b1c4c39

Browse files
committed
Refactor ChatWindow and ChatWindowWrapper: add user display name, enhance avatar handling, and improve message structure; update user fetching in Main component
1 parent 8422d91 commit b1c4c39

6 files changed

Lines changed: 49 additions & 29 deletions

File tree

frontend/src/components/chats/ChatWindow.tsx

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1-
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
1+
import { Avatar, AvatarFallback } from "@/components/ui/avatar";
22
import { Button } from "@/components/ui/button";
33
import { Input } from "@/components/ui/input";
4+
import {
5+
chooseTwoCharsFromName,
6+
randomTailwindBackgroundColor,
7+
} from "@/lib/utils";
8+
import { User } from "@/types/user.type";
49
import { Send } from "lucide-react";
510
import { useState } from "react";
611
import { v4 as uuidv4 } from "uuid";
@@ -12,7 +17,13 @@ interface Message {
1217
timestamp: string;
1318
}
1419

15-
export default function ChatWindow({ messages }: { messages: Message[] }) {
20+
export default function ChatWindow({
21+
withUser,
22+
messages,
23+
}: {
24+
withUser: User;
25+
messages: Message[];
26+
}) {
1627
const [newMessage, setNewMessage] = useState("");
1728

1829
const handleSendMessage = () => {
@@ -35,15 +46,15 @@ export default function ChatWindow({ messages }: { messages: Message[] }) {
3546
<div className="flex-1 flex flex-col">
3647
<div className="border-b border-gray-200 dark:border-slate-800 p-4 flex items-center space-x-4">
3748
<Avatar>
38-
<AvatarImage
39-
src="/placeholder.svg?height=40&width=40"
40-
alt="Alice Johnson"
41-
/>
42-
<AvatarFallback>AJ</AvatarFallback>
49+
<AvatarFallback
50+
className={randomTailwindBackgroundColor(withUser.id)}
51+
>
52+
{chooseTwoCharsFromName(withUser.display_name)}
53+
</AvatarFallback>
4354
</Avatar>
4455
<div>
4556
<h2 className="text-black dark:text-white text-lg font-semibold">
46-
Alice Johnson
57+
{withUser.display_name}
4758
</h2>
4859
<p className="text-sm text-gray-500">Online</p>
4960
</div>

frontend/src/components/chats/ChatWindow_wrapper.tsx

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,30 @@ import { useAppSelector } from "@/statemanagement/store";
22
import ChatWindow from "./ChatWindow";
33

44
export default function ChatWindowWrapper() {
5-
const chatMessages = useAppSelector((state) => {
5+
const { withUser, chatMessages } = useAppSelector((state) => {
66
const ownUser = state.users.ownUser;
77
const chats = state.chats.chats;
88
const chat = chats.find((chat) => chat.id === state.chats.activeChatId);
9-
return (
10-
chat?.messages?.map((message) => {
11-
return {
12-
id: message.id,
13-
content: message.text,
14-
ownMessage: message.user_id === ownUser?.id,
15-
timestamp: "",
16-
};
17-
}) ?? null
18-
);
9+
let otherUserId = chat?.user_ids.find((user) => user !== ownUser?.id);
10+
let withUser = state.users.users.find((user) => user.id === otherUserId);
11+
console.log(state.users);
12+
return {
13+
withUser,
14+
chatMessages:
15+
chat?.messages?.map((message) => {
16+
return {
17+
id: message.id,
18+
content: message.text,
19+
ownMessage: message.user_id === ownUser?.id,
20+
timestamp: "",
21+
};
22+
}) ?? null,
23+
};
1924
});
20-
return <ChatWindow messages={chatMessages ?? []} />;
25+
return (
26+
<ChatWindow
27+
withUser={withUser || { display_name: "", id: "" }}
28+
messages={chatMessages ?? []}
29+
/>
30+
);
2131
}

frontend/src/components/users/usersPanel.tsx

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,8 @@
1-
import { useAppDispatch, useAppSelector } from "@/statemanagement/store";
2-
import { getAllUsers, getOwnUser } from "@/statemanagement/users/usersSlice";
3-
import { useEffect } from "react";
1+
import { useAppSelector } from "@/statemanagement/store";
42
import { SidePanel } from "../SidePanel/SidePanel";
53

64
export const UserPanel = () => {
75
const userState = useAppSelector((state) => state.users);
8-
const dispatch = useAppDispatch();
9-
useEffect(() => {
10-
dispatch(getOwnUser());
11-
dispatch(getAllUsers());
12-
}, []);
136

147
return (
158
<>

frontend/src/lib/utils.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ export function randomTailwindBackgroundColor(uniqueValue: string) {
2525

2626
export function chooseTwoCharsFromName(name: string) {
2727
const [first, second] = name.split(" ");
28+
if (!first || !second) {
29+
return "";
30+
}
2831
if (second) {
2932
return (first[0] + second[0]).toUpperCase();
3033
} else {

frontend/src/pages/main.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { MainPage } from "@/pages/subpages/Main";
33
import { getAllChats } from "@/statemanagement/chats/chatSlice";
44
import { getAllPosts } from "@/statemanagement/posting/postSlice";
55
import { useAppDispatch } from "@/statemanagement/store";
6+
import { getAllUsers, getOwnUser } from "@/statemanagement/users/usersSlice";
67
import { WebsocketProvider } from "@/websocket/websocketProvider";
78
import { useEffect } from "react";
89
import { Route, Routes } from "react-router-dom";
@@ -13,6 +14,8 @@ export const Main = () => {
1314
useEffect(() => {
1415
dispatch(getAllPosts());
1516
dispatch(getAllChats());
17+
dispatch(getOwnUser());
18+
dispatch(getAllUsers());
1619
}, []);
1720
return (
1821
<WebsocketProvider>

frontend/src/types/chatroom.type.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { ChatMessage } from "./chatmessage.type";
33
export interface ChatRoom {
44
id: string;
55
name: string;
6-
users: string[];
6+
user_ids: string[];
77
messages?: ChatMessage[];
88
isLoading?: boolean;
99
}

0 commit comments

Comments
 (0)