Fix chats transition

This commit is contained in:
2025-10-03 14:23:17 +03:00
Unverified
parent de3caf880a
commit d636a1db70
3 changed files with 55 additions and 18 deletions
@@ -89,12 +89,18 @@ export function MessagePanelRenderer({ panel, isChatSwitching }: MessagePanelRen
// Handle chat switching animation // Handle chat switching animation
useEffect(() => { useEffect(() => {
console.log("🎬 [DEBUG] MessagePanelRenderer: isChatSwitching changed to:", isChatSwitching);
if (isChatSwitching) { if (isChatSwitching) {
console.log("🎬 [DEBUG] MessagePanelRenderer: Starting switch-out animation");
setSwitchOut(true); setSwitchOut(true);
setTimeout(() => { setTimeout(() => {
console.log("🎬 [DEBUG] MessagePanelRenderer: Starting switch-in animation");
setSwitchOut(false); setSwitchOut(false);
setSwitchIn(true); setSwitchIn(true);
setTimeout(() => setSwitchIn(false), 200); setTimeout(() => {
console.log("🎬 [DEBUG] MessagePanelRenderer: Ending switch-in animation");
setSwitchIn(false);
}, 200);
}, 250); }, 250);
} }
}, [isChatSwitching]); }, [isChatSwitching]);
+6 -9
View File
@@ -4,7 +4,6 @@ import { request } from "../../core/websocket";
import { API_BASE_URL } from "../../core/config"; import { API_BASE_URL } from "../../core/config";
import type { Message } from "../../core/types"; import type { Message } from "../../core/types";
import { getAuthHeaders } from "../../auth/api"; import { getAuthHeaders } from "../../auth/api";
import { delay } from "../../utils/utils";
export function useChat() { export function useChat() {
const { const {
@@ -82,14 +81,12 @@ export function useChat() {
// Reset messages loaded flag and clear messages when chat changes // Reset messages loaded flag and clear messages when chat changes
useEffect(() => { useEffect(() => {
(async () => { console.log("🔄 [DEBUG] useChat useEffect triggered for chat change:", chat.currentChat);
setIsChatSwitching(true); console.log("📝 [DEBUG] useChat: Resetting messages loaded flag and clearing messages");
await delay(250); messagesLoadedRef.current = false;
messagesLoadedRef.current = false; clearMessages(); // Clear messages when switching chats
clearMessages(); // Clear messages when switching chats console.log("📥 [DEBUG] useChat: Loading messages for new chat");
loadMessages(); loadMessages();
setIsChatSwitching(false);
})();
}, [chat.currentChat, clearMessages]); }, [chat.currentChat, clearMessages]);
return { return {
+42 -8
View File
@@ -72,12 +72,15 @@ export const useAppState = create<AppState>((set, get) => ({
publicChatPanel: null, publicChatPanel: null,
dmPanel: null dmPanel: null
}, },
setIsChatSwitching: (value: boolean) => set((state) => ({ setIsChatSwitching: (value: boolean) => {
chat: { console.log("🎬 [DEBUG] setIsChatSwitching called with:", value);
...state.chat, set((state) => ({
isChatSwitching: value chat: {
} ...state.chat,
})), isChatSwitching: value
}
}));
},
addMessage: (message: Message) => set((state) => { addMessage: (message: Message) => set((state) => {
// Check if message already exists to prevent duplicates // Check if message already exists to prevent duplicates
const messageExists = state.chat.messages.some(msg => msg.id === message.id); const messageExists = state.chat.messages.some(msg => msg.id === message.id);
@@ -257,10 +260,17 @@ export const useAppState = create<AppState>((set, get) => ({
})), })),
switchToPublicChat: async (chatName: string) => { switchToPublicChat: async (chatName: string) => {
console.log("🔄 [DEBUG] switchToPublicChat called with:", chatName);
const state = get(); const state = get();
const { user, chat } = state; const { user, chat } = state;
if (!user.authToken) return; if (!user.authToken) {
console.log("❌ [DEBUG] No auth token, returning early");
return;
}
console.log("🎬 [DEBUG] Starting chat switching animation for:", chatName);
console.log("🎬 [DEBUG] Current isChatSwitching state:", chat.isChatSwitching);
// Start chat switching animation // Start chat switching animation
state.setIsChatSwitching(true); state.setIsChatSwitching(true);
@@ -268,18 +278,23 @@ export const useAppState = create<AppState>((set, get) => ({
// Create or get public chat panel // Create or get public chat panel
let publicChatPanel = chat.publicChatPanel; let publicChatPanel = chat.publicChatPanel;
if (!publicChatPanel) { if (!publicChatPanel) {
console.log("🆕 [DEBUG] Creating new PublicChatPanel for:", chatName);
publicChatPanel = new PublicChatPanel(chatName, user); publicChatPanel = new PublicChatPanel(chatName, user);
} else { } else {
console.log("♻️ [DEBUG] Reusing existing PublicChatPanel, setting chat name to:", chatName);
publicChatPanel.setChatName(chatName); publicChatPanel.setChatName(chatName);
publicChatPanel.setAuthToken(user.authToken); publicChatPanel.setAuthToken(user.authToken);
} }
console.log("⏳ [DEBUG] Waiting 250ms for animation...");
// Wait for animation // Wait for animation
await new Promise(resolve => setTimeout(resolve, 250)); await new Promise(resolve => setTimeout(resolve, 250));
console.log("🚀 [DEBUG] Activating panel...");
// Activate panel // Activate panel
await publicChatPanel.activate(); await publicChatPanel.activate();
console.log("📝 [DEBUG] Updating state with new panel and chat name");
// Update state // Update state
set((state) => ({ set((state) => ({
chat: { chat: {
@@ -291,15 +306,23 @@ export const useAppState = create<AppState>((set, get) => ({
} }
})); }));
console.log("✅ [DEBUG] Ending chat switching animation");
// End animation // End animation
state.setIsChatSwitching(false); state.setIsChatSwitching(false);
}, },
switchToDM: async (dmData: DMPanelData) => { switchToDM: async (dmData: DMPanelData) => {
console.log("🔄 [DEBUG] switchToDM called with:", dmData);
const state = get(); const state = get();
const { user, chat } = state; const { user, chat } = state;
if (!user.authToken) return; if (!user.authToken) {
console.log("❌ [DEBUG] No auth token, returning early");
return;
}
console.log("🎬 [DEBUG] Starting DM switching animation for user:", dmData.username);
console.log("🎬 [DEBUG] Current isChatSwitching state:", chat.isChatSwitching);
// Start chat switching animation // Start chat switching animation
state.setIsChatSwitching(true); state.setIsChatSwitching(true);
@@ -307,20 +330,26 @@ export const useAppState = create<AppState>((set, get) => ({
// Create or get DM panel // Create or get DM panel
let dmPanel = chat.dmPanel; let dmPanel = chat.dmPanel;
if (!dmPanel) { if (!dmPanel) {
console.log("🆕 [DEBUG] Creating new DMPanel for user:", dmData.username);
dmPanel = new DMPanel(user); dmPanel = new DMPanel(user);
} else { } else {
console.log("♻️ [DEBUG] Reusing existing DMPanel, updating auth token");
dmPanel.setAuthToken(user.authToken); dmPanel.setAuthToken(user.authToken);
} }
// Set DM data // Set DM data
console.log("📝 [DEBUG] Setting DM data for user:", dmData.username);
dmPanel.setDMData(dmData); dmPanel.setDMData(dmData);
console.log("⏳ [DEBUG] Waiting 250ms for animation...");
// Wait for animation // Wait for animation
await new Promise(resolve => setTimeout(resolve, 250)); await new Promise(resolve => setTimeout(resolve, 250));
console.log("🚀 [DEBUG] Activating DM panel...");
// Activate panel // Activate panel
await dmPanel.activate(); await dmPanel.activate();
console.log("📝 [DEBUG] Updating state with new DM panel");
// Update state // Update state
set((state) => ({ set((state) => ({
chat: { chat: {
@@ -336,17 +365,22 @@ export const useAppState = create<AppState>((set, get) => ({
} }
})); }));
console.log("✅ [DEBUG] Ending DM switching animation");
// End animation // End animation
state.setIsChatSwitching(false); state.setIsChatSwitching(false);
}, },
switchToTab: async (tab: ChatTabs) => { switchToTab: async (tab: ChatTabs) => {
console.log("🔄 [DEBUG] switchToTab called with:", tab);
const state = get(); const state = get();
console.log("📝 [DEBUG] Setting active tab to:", tab);
state.setActiveTab(tab); state.setActiveTab(tab);
if (tab === "chats") { if (tab === "chats") {
console.log("💬 [DEBUG] Switching to chats tab, calling switchToPublicChat");
await state.switchToPublicChat("Общий чат"); await state.switchToPublicChat("Общий чат");
} else if (tab === "dms") { } else if (tab === "dms") {
console.log("💬 [DEBUG] Switching to DMs tab, clearing active panel");
// DM tab - no specific panel until user is selected // DM tab - no specific panel until user is selected
state.setActivePanel(null); state.setActivePanel(null);
} }