import React, { useState } from 'react'; import type { Task, User } from './data'; import { PRIORITY_COLORS } from './data'; import { Avatar, StatusBadge } from './Shared'; export function TeamTasksPage({ tasks, users }: { tasks: Task[]; currentUser: User; users: User[] }) { const [expanded, setExpanded] = useState>({}); return (

Team Tasks

{users.map(m => { const mTasks = tasks.filter(t => t.assignee === m.id); const isOpen = expanded[m.id] !== false; return (
setExpanded(e => ({ ...e, [m.id]: !isOpen }))}> {m.name} ({mTasks.length} tasks) {isOpen ? '▼' : '▶'}
{isOpen && (
{mTasks.map(t => (
{t.title} {new Date(t.dueDate + 'T00:00:00').toLocaleDateString('en-US', { month: 'short', day: 'numeric' })} {t.subtasks.length > 0 && 📋 {t.subtasks.filter(s => s.done).length}/{t.subtasks.length}}
))}
)}
); })}
); } export function MembersPage({ tasks, users }: { tasks: Task[]; users: User[] }) { const [expanded, setExpanded] = useState(null); const [showInvite, setShowInvite] = useState(false); return (

Team Members

{users.map(u => { const ut = tasks.filter(t => t.assignee === u.id); const done = ut.filter(t => t.status === 'done').length; const active = ut.filter(t => t.status !== 'done').length; const roleColors: Record = { ceo: '#eab308', cto: '#818cf8', manager: '#fb923c', tech_lead: '#06b6d4', scrum_master: '#a855f7', product_owner: '#ec4899', designer: '#f43f5e', qa: '#14b8a6', employee: '#22c55e' }; return ( setExpanded(expanded === u.id ? null : u.id)}> {expanded === u.id && ( )} ); })}
AvatarFull NameRoleDeptAssignedDoneActive
{u.name} {u.role.toUpperCase()} {u.dept} {ut.length} {done} {active}
{ut.map(t => (
{t.title}
))} {ut.length === 0 && No tasks assigned}
{showInvite && (
setShowInvite(false)}>
e.stopPropagation()}>

Invite Member

)}
); }