Update ChatList.tsx

This commit is contained in:
NotII
2025-03-04 22:52:55 +00:00
parent 75e0b65e11
commit 880613de13

View File

@@ -154,92 +154,75 @@ export default function ChatList() {
}, [router]); }, [router]);
// Fetch chats and unread counts when store is selected // Fetch chats and unread counts when store is selected
useEffect(() => { const fetchChats = async () => {
const fetchChats = async () => { try {
if (!selectedStore) { if (!selectedStore) return;
console.log("No store selected, skipping fetch chats");
setLoading(false); // Get vendor ID from auth token
const authToken = getCookie("Authorization");
if (!authToken) {
console.error("No auth token found");
return; return;
} }
console.log("Fetching chats for store:", selectedStore); // Set up axios with auth token
setLoading(true); const authAxios = axios.create({
try { baseURL: process.env.NEXT_PUBLIC_API_URL,
// Get auth token from cookies headers: {
const authToken = getCookie("Authorization"); Authorization: `Bearer ${authToken}`
if (!authToken) {
console.log("No auth token found");
toast.error("You need to be logged in");
router.push("/auth/login");
setLoading(false);
return;
} }
});
// Set up axios with the auth token
const authAxios = axios.create({ // Get vendor ID from JWT token
baseURL: process.env.NEXT_PUBLIC_API_URL, const tokenParts = authToken.split('.');
headers: { const payload = JSON.parse(atob(tokenParts[1]));
Authorization: `Bearer ${authToken}` const vendorId = payload.id;
}
}); console.log("Fetching chats for vendor:", vendorId, "store:", selectedStore);
// Get vendor ID from profile // Fetch chats for this vendor and filter by selected store
const vendorResponse = await authAxios.get('/auth/me'); const response = await authAxios.get(`/chats/vendor/${vendorId}`);
console.log("Vendor response:", vendorResponse.data); console.log("All chats:", response.data);
// Access correct property - the vendor ID is in vendor._id const filteredChats = response.data.filter((chat: Chat) =>
const vendorId = vendorResponse.data.vendor?._id; chat.storeId === selectedStore
);
if (!vendorId) { console.log("Filtered chats:", filteredChats);
console.error("Vendor ID not found in profile response:", vendorResponse.data);
toast.error("Could not retrieve vendor information"); setChats(filteredChats);
setLoading(false);
return; // Fetch unread counts
} const unreadResponse = await authAxios.get(`/chats/vendor/${vendorId}/unread`);
console.log("Unread counts:", unreadResponse.data);
// Fetch chats
console.log("Fetching chats for vendor:", vendorId); // Check if there are new unread messages and play sound
const chatsResponse = await authAxios.get(`/chats/vendor/${vendorId}`); if (!loading && unreadResponse.data.totalUnread > previousTotalUnread) {
console.log("Chats response:", chatsResponse.data); playNotificationSound();
// Filter chats by selected store
const filteredChats = chatsResponse.data.filter(
(chat: Chat) => chat.storeId === selectedStore
);
console.log("Filtered chats:", filteredChats);
setChats(filteredChats);
// Fetch unread counts
const unreadResponse = await authAxios.get(`/chats/vendor/${vendorId}/unread`);
console.log("Unread counts:", unreadResponse.data);
// Check if there are new unread messages and play sound
if (!loading && unreadResponse.data.totalUnread > previousTotalUnread) {
playNotificationSound();
}
// Update states
setUnreadCounts(unreadResponse.data);
setPreviousTotalUnread(unreadResponse.data.totalUnread);
setLoading(false);
console.log("Chat loading complete");
} catch (error) {
console.error("Error fetching chats:", error);
toast.error("Failed to load chats");
} finally {
console.log("Loading state set to false");
} }
};
// Update states
fetchChats(); setUnreadCounts(unreadResponse.data);
setPreviousTotalUnread(unreadResponse.data.totalUnread);
// Set up polling for updates every 30 seconds setLoading(false);
const intervalId = setInterval(fetchChats, 10000);
console.log("Chat loading complete");
return () => clearInterval(intervalId); } catch (error) {
console.error("Error fetching chats:", error);
toast.error("Failed to load chats");
}
};
// Add polling effect
useEffect(() => {
if (selectedStore) {
fetchChats();
// Poll for updates every 10 seconds
const intervalId = setInterval(fetchChats, 10000);
return () => clearInterval(intervalId);
}
}, [selectedStore]); }, [selectedStore]);
// Handle chat selection // Handle chat selection