import { GroupedStatuses } from "@/types/noteStatus"; import React, { FC, memo } from "react"; type Props = { statuses: GroupedStatuses; onMouseEnter: (statuses: GroupedStatuses) => void; onMouseLeave: (statuses: GroupedStatuses) => void; hideUnknownStatus?: boolean; unknownStatusConfig?: { icon: string; color: string; }; }; export const FileExplorerIcon: FC = memo( ({ statuses, onMouseLeave, onMouseEnter, hideUnknownStatus, unknownStatusConfig, }) => { const statusEntries = Object.entries(statuses); const totalStatuses = statusEntries.reduce( (acc, [, list]) => acc + list.length, 0, ); if (totalStatuses === 0) { // If hideUnknownStatus is enabled, don't show anything for files without status if (hideUnknownStatus) return null; // Use config passed from integration, with fallbacks const icon = unknownStatusConfig?.icon || "❓"; const color = unknownStatusConfig?.color || "#8b949e"; return (
onMouseEnter({})} onMouseLeave={() => onMouseLeave({})} style={ { "--primary-color": color, } as React.CSSProperties } > {icon}
); } const primaryStatus = statusEntries[0]?.[1]?.[0]; if (!primaryStatus) return null; return (
onMouseEnter(statuses)} onMouseLeave={() => onMouseLeave(statuses)} style={ { "--primary-color": primaryStatus.color || "var(--text-accent)", } as React.CSSProperties } > {primaryStatus.icon} {totalStatuses > 1 && ( {totalStatuses} )}
); }, );