feat(gmw): public features #7-14 — scam domains, top channels, hourly heatmap, category drill-down, coverage stats, channel culture glossary, term KB, edit history

ALSO fixes: dashboard.repository still JOINed dropped user_reputations table (listUsers/getUserDetail crash).
This commit is contained in:
asepharyana
2026-08-18 20:45:12 +07:00
parent 2a8f6d9062
commit 00e8d68ce5
38 changed files with 1542 additions and 25 deletions
@@ -0,0 +1,20 @@
import { PageTransition } from "@/components/shared";
import { getGlossary } from "@/lib/api/server";
import type { GlossaryRow } from "@/lib/types";
import { GlossaryView } from "./view";
export const dynamic = "force-dynamic";
export default async function GlossaryPage() {
let terms: GlossaryRow[] | undefined;
try {
terms = await getGlossary(100);
} catch {
terms = undefined;
}
return (
<PageTransition>
<GlossaryView initialTerms={terms} />
</PageTransition>
);
}
@@ -0,0 +1,15 @@
"use client";
import { SkeletonPanel } from "@/components/shared";
import { TermGlossary } from "@/components/TermGlossary";
import { useGlossary } from "@/hooks";
import type { GlossaryRow } from "@/lib/types";
export function GlossaryView({
initialTerms,
}: {
initialTerms?: GlossaryRow[];
}) {
const { data: terms } = useGlossary(100, initialTerms);
return terms ? <TermGlossary terms={terms} /> : <SkeletonPanel rows={6} />;
}