Implement usernames and profile sections

This commit is contained in:
2025-10-20 00:18:34 +03:00
Unverified
parent f0be91c0e7
commit 818b7c1b46
21 changed files with 425 additions and 122 deletions
@@ -7,7 +7,7 @@ import { fetchUserPublicKey } from "@/core/api/dmApi";
import type { Message } from "@/core/types";
import { websocket } from "@/core/websocket";
import { onlineStatusManager } from "@/core/onlineStatusManager";
import { OnlineIndicator } from "../right/OnlineIndicator";
import { OnlineIndicator } from "@/pages/chat/ui/right/OnlineIndicator";
import defaultAvatar from "@/images/default-avatar.png";
interface PublicChat {
@@ -20,6 +20,7 @@ interface PublicChat {
interface DMConversation {
id: number;
username: string;
display_name: string;
profile_picture?: string;
online?: boolean;
type: "dm";
@@ -84,6 +85,7 @@ export function UnifiedChatsList() {
const dmChatItems: ChatItem[] = dmUsers.map((user: DMUser) => ({
id: user.id,
username: user.username,
display_name: user.display_name,
profile_picture: user.profile_picture,
online: user.online,
type: "dm" as const,
@@ -172,13 +174,13 @@ export function UnifiedChatsList() {
};
}, [allChats]);
const formatPublicChatMessage = (chatId: string): string => {
function formatPublicChatMessage(chatId: string): string {
const lastMessage = lastMessages[chatId];
if (!lastMessage) {
return "";
}
const isCurrentUser = lastMessage.username === user.currentUser?.username;
const isCurrentUser = lastMessage.user_id === user.currentUser?.id;
const prefix = isCurrentUser ? "Вы: " : `${lastMessage.username}: `;
const maxContentLength = 50 - prefix.length;
@@ -187,14 +189,13 @@ export function UnifiedChatsList() {
: lastMessage.content;
return prefix + content;
};
}
const handlePublicChatClick = async (chatName: string) => {
async function handlePublicChatClick(chatName: string) {
await switchToPublicChat(chatName);
};
}
const handleDMClick = async (dmConversation: DMConversation) => {
async function handleDMClick(dmConversation: DMConversation) {
if (!dmConversation.publicKey) {
const authToken = useAppState.getState().user.authToken;
if (!authToken) return;
@@ -215,7 +216,7 @@ export function UnifiedChatsList() {
profilePicture: dmConversation.profile_picture,
online: dmConversation.online || false
});
};
}
if (isLoadingUsers) {
return (
@@ -256,7 +257,7 @@ export function UnifiedChatsList() {
return (
<mdui-list-item
key={`dm-${chat.id}`}
headline={chat.username}
headline={chat.display_name}
onClick={() => handleDMClick(chat)}
style={{ cursor: "pointer" }}
>
@@ -266,7 +267,7 @@ export function UnifiedChatsList() {
<div slot="icon" style={{ position: "relative", width: "40px", height: "40px", display: "inline-block" }}>
<img
src={chat.profile_picture || defaultAvatar}
alt={chat.username}
alt={chat.display_name}
style={{
width: "40px",
height: "40px",