import React, { useState } from 'react'
import { Head, router } from '@inertiajs/react'
import AdminLayout from '../../../Layouts/AdminLayout'
import AnalyticsNav from './AnalyticsNav'
function SummaryCard({ label, value, description }) {
return (
{label}
{Number(value || 0).toLocaleString()}
{description}
)
}
function RangeControls({ range }) {
const pathname = typeof window !== 'undefined' ? window.location.pathname : ''
const [from, setFrom] = useState(range?.from || '')
const [to, setTo] = useState(range?.to || '')
const visit = (nextRange, nextFrom = from, nextTo = to) => {
router.get(pathname, {
range: nextRange,
...(nextRange === 'custom' ? { from: nextFrom, to: nextTo } : {}),
}, {
preserveScroll: true,
preserveState: true,
replace: true,
})
}
return (
)
}
function Section({ title, description, children }) {
return (
)
}
function EmptyState({ text }) {
return {text}
}
function Badge({ children, tone = 'default' }) {
const tones = {
default: 'border-white/[0.08] bg-white/[0.04] text-slate-200',
high: 'border-rose-300/25 bg-rose-300/10 text-rose-100',
medium: 'border-amber-300/25 bg-amber-300/10 text-amber-100',
low: 'border-emerald-300/25 bg-emerald-300/10 text-emerald-100',
}
return {children}
}
function Table({ columns, children }) {
return (
{columns.map((column) => (
| {column} |
))}
{children}
)
}
function OpportunityHighlights({ items = [] }) {
if (!items.length) {
return
}
return (
{items.map((item, index) => (
{item.title}
{item.priority}
{item.reason}
{item.suggested_action}
))}
)
}
export default function AcademyAnalyticsIntelligence({
nav = [],
range,
contentOpportunities = {},
searchGaps = {},
promptInsights = {},
lessonDropoffs = {},
courseHealth = {},
premiumInterest = {},
editorialRecommendations = {},
}) {
return (
{(contentOpportunities?.cards || []).map((card) => (
))}
{searchGaps?.rows?.length ? (
{searchGaps.rows.map((row) => (
|
{row.query}
{row.issue}
{row.logged_in_searches > 1 ? Logged-in x{row.logged_in_searches} : null}
{row.subscriber_searches > 0 ? Subscribers x{row.subscriber_searches} : null}
|
{row.searches} |
{row.results_count} |
{row.clicks} |
{row.ctr}% |
{row.suggested_action} |
))}
) : }
{promptInsights?.rows?.length ? (
{promptInsights.rows.map((row) => (
|
{row.title}
{row.content_type_label}
|
{row.views} |
{row.prompt_copies} |
{row.copy_rate}% |
{row.saves} |
{row.likes} |
{row.issue} |
{row.suggested_action} |
))}
) : }
{lessonDropoffs?.rows?.length ? (
{lessonDropoffs.rows.map((row) => (
|
{row.title}
Start rate {row.start_rate}%
|
{row.views} |
{row.starts} |
{row.completions} |
{row.completion_rate}% |
{row.issue} |
{row.suggested_action} |
))}
) : }
{courseHealth?.rows?.length ? (
{courseHealth.rows.map((row) => (
|
{row.title}
{row.issue}
{row.learners > 0 ? Learners {row.learners} : null}
|
{row.views} |
{row.starts} |
{row.completions} |
{row.completion_rate}% |
{row.avg_progress}% |
{row.suggested_action} |
))}
) : }
{premiumInterest?.rows?.length ? (
{premiumInterest.rows.map((row) => (
|
{row.title}
{row.issue}
Interest score {row.premium_interest_score}
|
{row.content_type_label} |
{row.premium_preview_views} |
{row.upgrade_clicks} |
{row.upgrade_rate}% |
{row.suggested_action} |
))}
) : }
{editorialRecommendations?.rows?.length ? (
{editorialRecommendations.rows.map((row, index) => (
{row.title}
{row.priority}
{row.description}
Reason
{row.reason}
Suggested Action
{row.suggested_action}
))}
) : }
)
}