import { Link } from "@remix-run/react"; import AppInput from "../AppInput"; import { useState } from "react"; import { useGetUserThreads, useGetStoreThreads, } from "../../requestHandler/use-chat-hooks"; import { ThreadList, ThreadParticipant, UserProfile, } from "../../../src/api/types"; import { useServiceGetProfile } from "../../requestHandler/use-profile-hooks"; import UiProvider from "../UiProvider"; import SellerLogo from "../SellerLogo"; import { Search, User } from "lucide-react"; import ProfilePagesHeader from "../ProfilePagesHeader"; interface ThreadsPageProps { type: "user" | "store"; storeId?: string; } export default function ThreadsPage({ type, storeId }: ThreadsPageProps) { const [searchValue, setSearchValue] = useState(""); // Seller dashboard shows the STORE's inbox; the profile page shows the user's // personal (buyer) chats. Two different endpoints so the two never mix. const userThreads = useGetUserThreads(); const storeThreads = useGetStoreThreads(type === "store" ? storeId : undefined); const { data: threads, isLoading, isError, refetch, } = type === "store" ? storeThreads : userThreads; const sortedThreads = threads?.sort((a, b) => { const dateA = new Date(a.lastMessageTime || "2025-01-18T00:00:00.000Z"); const dateB = new Date(b.lastMessageTime || "2025-01-18T00:00:00.000Z"); return dateB.getTime() - dateA.getTime(); }); const { data: dataProfile, isFetching: isFetchingProfile } = useServiceGetProfile(); return (
) => { const value = e.target.value; setSearchValue(value); }} />
); } const ThreadsList = ({ searchValue, threads, dataProfile, type, storeId, }: { searchValue: string; threads: ThreadList[] | undefined; dataProfile: UserProfile | undefined; type: "user" | "store"; storeId?: string; }) => { const filteredThreads = threads?.filter((thread) => { return thread.participants?.some((participant: ThreadParticipant) => participant.username?.toLowerCase().includes(searchValue.toLowerCase()) ); }); return (
{filteredThreads?.map((thread) => { const otherParticipant = thread.participants?.find( (participant: ThreadParticipant) => participant.username !== dataProfile?.username ); const hasUnread = Number(thread.unreadCount || "0") > 0; // Generate link based on type const linkTo = type === "user" ? `/profile/threads/${thread.id}` : `/store/${storeId}/threads/${thread.id}`; return (
{thread.isCreator ? ( ) : ( )}

{thread.isCreator ? otherParticipant?.storeName || otherParticipant?.username : otherParticipant?.name}

{thread.lastMessageTime && (

{new Date(thread.lastMessageTime).toLocaleTimeString( "fa-IR", { hour: "2-digit", minute: "2-digit", } )}

)} {hasUnread && (
{thread.unreadCount}
)}

{thread.lastMessage?.content || "بدون پیام"}

); })}
); };