"use client" import { useParams, useRouter } from "next/navigation" import { useMutation, useQuery } from "convex/react" import { api } from "@/convex/_generated/api" import { Badge } from "@/components/ui/badge" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Settings } from "lucide-react" import * as React from "react" import { ProfileSectionEditor, SectionEditor } from "@/components/analysis-section-editor" function formatDate(timestamp?: number) { if (!timestamp) return "Not analyzed yet"; return new Date(timestamp).toLocaleString(); } export default function DataSourceDetailPage() { const params = useParams<{ id: string }>() const router = useRouter() const dataSourceId = params?.id const dataSource = useQuery( api.dataSources.getById, dataSourceId ? { dataSourceId: dataSourceId as any } : "skip" ) const analysis = useQuery( api.analyses.getLatestByDataSource, dataSourceId ? { dataSourceId: dataSourceId as any } : "skip" ) const sections = useQuery( api.analysisSections.listByAnalysis, analysis?._id ? { analysisId: analysis._id as any } : "skip" ) const removeDataSource = useMutation(api.dataSources.remove) const [isDeleting, setIsDeleting] = React.useState(false) const [isDialogOpen, setIsDialogOpen] = React.useState(false) const sectionMap = React.useMemo(() => { const map = new Map() sections?.forEach((section: any) => { map.set(section.sectionKey, section.items) }) return map }, [sections]) if (dataSource === undefined) { return (
Loading data source…
) } if (!dataSource) { return (

Data source not found

This data source may have been removed or you no longer have access.

) } const statusVariant = dataSource.analysisStatus === "completed" ? "secondary" : dataSource.analysisStatus === "failed" ? "destructive" : "outline" return (

{dataSource.name || "Data Source"}

{dataSource.analysisStatus}

{dataSource.url}

Last analyzed: {formatDate(dataSource.lastAnalyzedAt)} {dataSource.lastError && ( Error: {dataSource.lastError} )}
{analysis ? ( <>
Key Features {analysis.features.length} Search Keywords {analysis.keywords.length} Target Users {analysis.personas.length}
Summary
Product:{" "} {analysis.productName}
Tagline:{" "} {analysis.tagline}
Category:{" "} {analysis.category}
Positioning:{" "} {analysis.positioning}
{analysis.description}
Key Features {analysis.features.slice(0, 6).map((feature) => (
{feature.name}
{feature.description}
))}
Problems {analysis.problemsSolved.slice(0, 6).map((problem) => (
{problem.problem}
Severity: {problem.severity} · {problem.emotionalImpact}
))}
Target Users {analysis.personas.slice(0, 4).map((persona) => (
{persona.name} · {persona.role}
{persona.industry} · {persona.companySize}
))}
Search Keywords {analysis.keywords.slice(0, 12).map((keyword) => ( {keyword.term} ))}

Edit Sections

) : ( Full Analysis No analysis available yet. Trigger a new analysis to populate this data source. )} Delete data source This removes the data source and its analyses from the project. This cannot be undone.
) }