import { RiDeleteBinLine } from "@remixicon/react"; import Image from "next/image"; import { Button } from "@/shared/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/shared/components/ui/select"; import { resolveLogoSrc } from "@/shared/lib/logo"; import type { InboxItem, InboxStatus } from "./types"; const DEFAULT_INBOX_APP_LOGO = "/avatars/default_icon.png"; function findMatchingLogo( sourceAppName: string | null, appLogoMap: Record, ): string | null { if (!sourceAppName) return null; const appName = sourceAppName.toLowerCase(); if (appLogoMap[appName]) return resolveLogoSrc(appLogoMap[appName]); for (const [name, logo] of Object.entries(appLogoMap)) { if (name.includes(appName) || appName.includes(name)) { return resolveLogoSrc(logo); } } return null; } type InboxBulkActionsProps = { status: InboxStatus; items: InboxItem[]; activeApp: string | null; appFilterOptions: string[]; selectedIds: string[]; allSelected: boolean; appLogoMap: Record; onAppChange: (app: string) => void; onToggleSelectAll: () => void; onSelectionBulkRequest: (status: InboxStatus) => void; onBulkDeleteRequest: (status: "processed" | "discarded") => void; }; export function InboxBulkActions({ status, items, activeApp, appFilterOptions, selectedIds, allSelected, appLogoMap, onAppChange, onToggleSelectAll, onSelectionBulkRequest, onBulkDeleteRequest, }: InboxBulkActionsProps) { const getAppLogo = (appName: string | null) => findMatchingLogo(appName, appLogoMap) ?? DEFAULT_INBOX_APP_LOGO; const appFilter = appFilterOptions.length > 0 ? ( ) : null; return (
{appFilter} {items.length > 0 ? (
{selectedIds.length > 0 && ( )} {(status === "processed" || status === "discarded") && ( )}
) : null}
); }