diff --git a/src/app/(dashboard)/accounts/page.tsx b/src/app/(dashboard)/accounts/page.tsx index 934ae0a..aa6386c 100644 --- a/src/app/(dashboard)/accounts/page.tsx +++ b/src/app/(dashboard)/accounts/page.tsx @@ -5,9 +5,10 @@ import { PageHeader } from '@/components/ui/PageHeader'; import { ChartCard } from '@/components/ui/ChartCard'; import { Scorecard } from '@/components/ui/Scorecard'; import { formatCurrency, CHART_COLORS, STATUS_COLORS, DISTRICT_SHORT, STAGE_COLORS, TIER_COLORS } from '@/lib/formatters'; -import { useMemo, useState, useCallback } from 'react'; +import { useMemo, useState, useCallback, useEffect } from 'react'; +import { useSearchParams, useRouter } from 'next/navigation'; import { parseISO, format, differenceInDays, eachDayOfInterval, addMonths, addQuarters } from 'date-fns'; -import { AccountRecord, STAGES, FORECAST_CATEGORIES, ACTIVITY_TYPES } from '@/types/data'; +import { AccountRecord, ActivityRecord, STAGES, FORECAST_CATEGORIES, ACTIVITY_TYPES } from '@/types/data'; import { ExportButton } from '@/components/ui/ExportButton'; import { scoreAccountHealth, HEALTH_LEVEL_COLORS } from '@/lib/scoring'; import { AccountNotes } from '@/components/account/AccountNotes'; @@ -113,9 +114,19 @@ export default function AccountExplorer() { const [competitorFilter, setCompetitorFilter] = useState(null); const [cpmFilter, setCpmFilter] = useState(null); const [selectedAccount, setSelectedAccount] = useState(null); + const [selectedActivity, setSelectedActivity] = useState(null); const [showCreateOpp, setShowCreateOpp] = useState(false); const [showAddActivity, setShowAddActivity] = useState(false); const [saving, setSaving] = useState(false); + const searchParams = useSearchParams(); + + useEffect(() => { + const accountParam = searchParams.get('account'); + if (accountParam && accounts.length > 0) { + const found = accounts.find(a => a.Account_Name === accountParam); + if (found) setSelectedAccount(found); + } + }, [searchParams, accounts]); const createOpp = useCallback(async (form: Record) => { setSaving(true); @@ -601,7 +612,11 @@ export default function AccountExplorer() {
{accountActivities.slice(0, 20).map((a, i) => ( -
+
setSelectedActivity(a)} + >
{a.Activity_Type} {format(parseISO(a.Activity_Date), 'MMM d, yyyy')} + {a.Status === 'Planned' && Planned}
{a.Contact_Name &&
with {a.Contact_Name}
} {a.Notes &&
{a.Notes}
}
+
))}
@@ -942,6 +959,80 @@ export default function AccountExplorer() { ); })}
+ + {/* Activity Detail Overlay */} + {selectedActivity && ( +
setSelectedActivity(null)}> +
+
e.stopPropagation()}> +
+
+
+
Activity Detail
+

{selectedActivity.Account_Name}

+
+ +
+
+
+
+
+
+
Type
+ + {selectedActivity.Activity_Type} + +
+
+
Date
+
{format(parseISO(selectedActivity.Activity_Date), 'MMMM d, yyyy')}
+
+
+
Contact
+
{selectedActivity.Contact_Name || '—'}
+
+
+
District
+
{DISTRICT_SHORT[selectedActivity.District_Name] || selectedActivity.District_Name}
+
+ {selectedActivity.Status && ( +
+
Status
+
{selectedActivity.Status}
+
+ )} + {selectedActivity.Outcome && ( +
+
Outcome
+
{selectedActivity.Outcome}
+
+ )} + {selectedActivity.Play && ( +
+
Play
+
{selectedActivity.Play}
+
+ )} + {selectedActivity.Logged_By && ( +
+
Logged By
+
{selectedActivity.Logged_By}
+
+ )} +
+ {selectedActivity.Notes && ( +
+
Notes
+
{selectedActivity.Notes}
+
+ )} +
+
+
+
+ )}
); } diff --git a/src/app/(dashboard)/activity/page.tsx b/src/app/(dashboard)/activity/page.tsx index acc8aca..63e0d89 100644 --- a/src/app/(dashboard)/activity/page.tsx +++ b/src/app/(dashboard)/activity/page.tsx @@ -14,6 +14,7 @@ import { ActivityRecord, ACTIVITY_TYPES } from '@/types/data'; import { ExportButton } from '@/components/ui/ExportButton'; import { AccountNotes } from '@/components/account/AccountNotes'; import { ContactMap } from '@/components/account/ContactMap'; +import Link from 'next/link'; const TYPE_COLORS: Record = { 'Launch Briefing': CHART_COLORS.navy, @@ -547,7 +548,7 @@ export default function ActivityDeepDive() {
Activity Detail
-

{selectedActivity.Account_Name}

+ {selectedActivity.Account_Name}
@@ -309,7 +315,15 @@ export default function PipelineDeepDive() { const risk = scoreDealRisk(deal, activities as Parameters[1], pipeline); return ( setSelectedDeal(deal)}> - {deal.Account_Name} + + e.stopPropagation()} + > + {deal.Account_Name} + + {formatCurrency(deal.Amount_USD, true)} {deal.Stage} diff --git a/src/app/(dashboard)/playbooks/page.tsx b/src/app/(dashboard)/playbooks/page.tsx index 4432980..8d47582 100644 --- a/src/app/(dashboard)/playbooks/page.tsx +++ b/src/app/(dashboard)/playbooks/page.tsx @@ -3,6 +3,7 @@ import { useState, useEffect, useCallback } from 'react'; import { PageHeader } from '@/components/ui/PageHeader'; import { ChartCard } from '@/components/ui/ChartCard'; +import Link from 'next/link'; interface PlaybookStep { step: number; @@ -182,7 +183,7 @@ export default function PlaybooksPage() { return (
-
{p.Account_Name}
+ {p.Account_Name}
diff --git a/src/components/ui/NextBestAction.tsx b/src/components/ui/NextBestAction.tsx index a2d0d50..d24fa23 100644 --- a/src/components/ui/NextBestAction.tsx +++ b/src/components/ui/NextBestAction.tsx @@ -1,6 +1,7 @@ 'use client'; import { useMemo } from 'react'; +import Link from 'next/link'; import { AccountRecord, ActivityRecord, PipelineRecord } from '@/types/data'; import { differenceInDays, parseISO, format } from 'date-fns'; @@ -132,7 +133,7 @@ export function NextBestAction({ accounts, activities, pipeline, limit = 8 }: {
- {action.account} + {action.account} {PRIORITY_LABELS[action.priority].text}