import { sortBy } from "lodash-es"; import { ArchiveIcon, BellIcon, InboxIcon } from "lucide-react"; import { observer } from "mobx-react-lite"; import { useEffect, useState } from "react"; import Empty from "@/components/Empty"; import MemoCommentMessage from "@/components/Inbox/MemoCommentMessage"; import MobileHeader from "@/components/MobileHeader"; import useResponsiveWidth from "@/hooks/useResponsiveWidth"; import { cn } from "@/lib/utils"; import { userStore } from "@/store"; import { UserNotification, UserNotification_Status, UserNotification_Type } from "@/types/proto/api/v1/user_service"; import { useTranslate } from "@/utils/i18n"; const Inboxes = observer(() => { const t = useTranslate(); const { md } = useResponsiveWidth(); const [filter, setFilter] = useState<"all" | "unread" | "archived">("all"); const allNotifications = sortBy(userStore.state.notifications, (notification: UserNotification) => { return -(notification.createTime?.getTime() || 0); }); const notifications = allNotifications.filter((notification) => { if (filter === "unread") return notification.status === UserNotification_Status.UNREAD; if (filter === "archived") return notification.status === UserNotification_Status.ARCHIVED; return true; }); const unreadCount = allNotifications.filter((n) => n.status === UserNotification_Status.UNREAD).length; const archivedCount = allNotifications.filter((n) => n.status === UserNotification_Status.ARCHIVED).length; const fetchNotifications = async () => { try { await userStore.fetchNotifications(); } catch (error) { console.error("Failed to fetch notifications:", error); } }; useEffect(() => { fetchNotifications(); }, []); return (
{!md && }
{/* Header */}

{t("common.inbox")}

{unreadCount > 0 && ( {unreadCount} )}
{/* Filter Tabs */}
{/* Notifications List */}
{notifications.length === 0 ? (

{filter === "unread" ? t("inbox.no-unread") : filter === "archived" ? t("inbox.no-archived") : t("message.no-data")}

) : (
{notifications.map((notification: UserNotification) => { if (notification.type === UserNotification_Type.MEMO_COMMENT) { return ; } return null; })}
)}
); }); export default Inboxes;