import { useState } from 'react'; import { Plus, Calendar, Clock, AlertCircle } from 'lucide-react'; import { useActivities, useUpcomingActivities, useOverdueActivities, useActivityStats } from '../../../hooks/sales'; import { ActivityForm } from '../../../components/sales/ActivityForm'; import { ActivityType, ActivityStatus } from '../../../services/sales/activities.api'; export default function ActivitiesPage() { const [showForm, setShowForm] = useState(false); const [typeFilter, setTypeFilter] = useState(''); const [statusFilter, setStatusFilter] = useState(''); const [page, setPage] = useState(1); const { data: activities, isLoading } = useActivities({ type: typeFilter || undefined, status: statusFilter || undefined, page, limit: 20, }); const { data: upcoming } = useUpcomingActivities(7); const { data: overdue } = useOverdueActivities(); const { data: stats } = useActivityStats(); const getTypeIcon = (type: ActivityType) => { switch (type) { case 'call': return '📞'; case 'meeting': return '👥'; case 'task': return '✅'; case 'email': return '📧'; case 'note': return '📝'; default: return '📋'; } }; const getStatusColor = (status: ActivityStatus) => { switch (status) { case 'pending': return 'bg-yellow-100 text-yellow-800'; case 'completed': return 'bg-green-100 text-green-800'; case 'cancelled': return 'bg-gray-100 text-gray-800'; default: return 'bg-gray-100 text-gray-800'; } }; return (

Activities

{stats?.total || 0} total activities

{/* Stats Cards */}

Pending

{stats?.pending || 0}

Overdue

{stats?.overdue || 0}

Upcoming (7 days)

{upcoming?.length || 0}

Completed

{stats?.completed || 0}

{/* Filters */}
{/* Activities List */} {isLoading ? (
) : (
{activities?.data.length === 0 ? (
No activities found
) : ( activities?.data.map((activity) => (
{getTypeIcon(activity.type)}

{activity.subject}

{activity.status}
{activity.description && (

{activity.description}

)}
{activity.due_date && ( Due: {new Date(activity.due_date).toLocaleDateString()} )} Created: {new Date(activity.created_at).toLocaleDateString()}
)) )}
)} {/* Pagination */} {activities && activities.totalPages > 1 && (
Page {page} of {activities.totalPages}
)} {/* Activity Form Modal */} {showForm && ( setShowForm(false)} /> )}
); }