diff --git a/frontend/src/ui/components/chat/ChatMain.tsx b/frontend/src/ui/components/chat/ChatMain.tsx
deleted file mode 100644
index 1f83969..0000000
--- a/frontend/src/ui/components/chat/ChatMain.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import { ChatMainHeader } from "./ChatMainHeader";
-import { ChatMessages } from "./ChatMessages";
-import { ChatInputWrapper } from "./ChatInputWrapper";
-
-export function ChatMain() {
- return (
-
@@ -22,7 +15,6 @@ export function ChatMainHeader() {
Онлайн
-
-
+
);
}
diff --git a/frontend/src/ui/hooks/useChat.ts b/frontend/src/ui/hooks/useChat.ts
index d2238df..78370ff 100644
--- a/frontend/src/ui/hooks/useChat.ts
+++ b/frontend/src/ui/hooks/useChat.ts
@@ -4,6 +4,7 @@ import { request, websocket } from "../../websocket";
import { API_BASE_URL } from "../../core/config";
import type { Message, WebSocketMessage } from "../../core/types";
import { getAuthHeaders } from "../../auth/api";
+import { delay } from "../../utils/utils";
export function useChat() {
const {
@@ -16,6 +17,7 @@ export function useChat() {
setActiveTab,
setDmUsers,
setActiveDm,
+ setIsChatSwitching,
user
} = useAppState();
@@ -112,9 +114,14 @@ export function useChat() {
// Reset messages loaded flag and clear messages when chat changes
useEffect(() => {
- messagesLoadedRef.current = false;
- clearMessages(); // Clear messages when switching chats
- loadMessages();
+ (async () => {
+ setIsChatSwitching(true);
+ await delay(250);
+ messagesLoadedRef.current = false;
+ clearMessages(); // Clear messages when switching chats
+ loadMessages();
+ setIsChatSwitching(false);
+ })();
}, [chat.currentChat, clearMessages]);
return {
@@ -123,6 +130,8 @@ export function useChat() {
activeTab: chat.activeTab,
dmUsers: chat.dmUsers,
activeDm: chat.activeDm,
+ isChatSwitching: chat.isChatSwitching,
+ setIsChatSwitching,
sendMessage,
updateMessage,
removeMessage,
diff --git a/frontend/src/ui/state.ts b/frontend/src/ui/state.ts
index 2cafd3b..cd67cdd 100644
--- a/frontend/src/ui/state.ts
+++ b/frontend/src/ui/state.ts
@@ -4,12 +4,19 @@ import { request } from "../websocket";
type Page = "login" | "register" | "chat"
+interface ActiveDM {
+ userId: number;
+ username: string;
+ publicKey: string | null
+}
+
interface ChatState {
messages: Message[];
currentChat: string;
activeTab: "chats" | "channels" | "contacts" | "dms";
dmUsers: User[];
- activeDm: { userId: number; username: string; publicKey: string | null } | null;
+ activeDm: ActiveDM | null;
+ isChatSwitching: boolean;
}
interface UserState {
@@ -31,6 +38,7 @@ interface AppState {
setDmUsers: (users: User[]) => void;
setActiveDm: (dm: ChatState["activeDm"]) => void;
clearMessages: () => void;
+ setIsChatSwitching: (value: boolean) => void;
// User state
user: UserState;
@@ -48,8 +56,15 @@ export const useAppState = create
((set, get) => ({
currentChat: "Общий чат",
activeTab: "chats",
dmUsers: [],
- activeDm: null
+ activeDm: null,
+ isChatSwitching: false
},
+ setIsChatSwitching: (value: boolean) => set((state) => ({
+ chat: {
+ ...state.chat,
+ isChatSwitching: value
+ }
+ })),
addMessage: (message: Message) => set((state) => {
// Check if message already exists to prevent duplicates
const messageExists = state.chat.messages.some(msg => msg.id === message.id);