import { useMemo } from 'react'; import { Button } from '@renderer/components/ui/button'; import { Dialog, DialogContent, DialogFooter, DialogHeader } from '@renderer/components/ui/dialog'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@renderer/components/ui/tabs'; import { BarChart3, FileText, ListPlus, MessageSquare } from 'lucide-react'; import { MemberDetailHeader } from './MemberDetailHeader'; import { MemberDetailStats } from './MemberDetailStats'; import { MemberLogsTab } from './MemberLogsTab'; import { MemberMessagesTab } from './MemberMessagesTab'; import { MemberStatsTab } from './MemberStatsTab'; import { MemberTasksTab } from './MemberTasksTab'; import type { InboxMessage, ResolvedTeamMember, TeamTask } from '@shared/types'; interface MemberDetailDialogProps { open: boolean; member: ResolvedTeamMember | null; teamName: string; tasks: TeamTask[]; messages: InboxMessage[]; onClose: () => void; onSendMessage: () => void; onAssignTask: () => void; onTaskClick: (task: TeamTask) => void; } export const MemberDetailDialog = ({ open, member, teamName, tasks, messages, onClose, onSendMessage, onAssignTask, onTaskClick, }: MemberDetailDialogProps): React.JSX.Element | null => { const memberTasks = useMemo( () => (member ? tasks.filter((t) => t.owner === member.name) : []), [tasks, member] ); const memberMessages = useMemo( () => (member ? messages.filter((m) => m.from === member.name || m.to === member.name) : []), [messages, member] ); const inProgressTasks = useMemo( () => memberTasks.filter((t) => t.status === 'in_progress').length, [memberTasks] ); const completedTasks = useMemo( () => memberTasks.filter((t) => t.status === 'completed').length, [memberTasks] ); if (!member) return null; return ( !nextOpen && onClose()}> Tasks {memberTasks.length > 0 && ( {memberTasks.length} )} Messages {memberMessages.length > 0 && ( {memberMessages.length} )} Stats Logs ); };