import { HeaderHelpLabel } from "@/client/features/keywords/components";
import { ArrowLeft, Download, SlidersHorizontal } from "lucide-react";
import {
BacklinksNewLostChart,
BacklinksTrendChart,
} from "./BacklinksPageCharts";
import { BacklinksFilterPanel } from "./BacklinksFilterPanel";
import { BacklinksTable } from "./BacklinksTable";
import { ReferringDomainsTable } from "./ReferringDomainsTable";
import { TopPagesTable } from "./TopPagesTable";
import type {
BacklinksOverviewData,
BacklinksSearchState,
} from "./backlinksPageTypes";
import {
TAB_DESCRIPTIONS,
formatRelativeTimestamp,
} from "./backlinksPageUtils";
import { exportBacklinksTabCsv } from "./export";
import type { BacklinksFiltersState } from "./useBacklinksFilters";
export function BacklinksOverviewPanels({
data,
onShowHistory,
summaryStats,
}: {
data: BacklinksOverviewData;
onShowHistory: () => void;
summaryStats: Array<{ label: string; value: string; description: string }>;
}) {
return (
<>
{data.scope}
Target: {data.displayTarget}
-
Updated {formatRelativeTimestamp(data.fetchedAt)}
{data.scope === "page" ? (
Showing backlinks for this exact page. Enter a bare domain for
site-wide results. Trend charts are only shown for domain-level
lookups.
) : null}
>
);
}
export function BacklinksResultsCard({
activeTab,
filteredData,
filters,
isTabLoading,
tabErrorMessage,
onSetActiveTab,
exportTarget,
}: {
activeTab: BacklinksSearchState["tab"];
filteredData: {
backlinks: BacklinksOverviewData["backlinks"];
referringDomains: BacklinksOverviewData["referringDomains"];
topPages: BacklinksOverviewData["topPages"];
};
filters: BacklinksFiltersState;
isTabLoading: boolean;
tabErrorMessage: string | null;
onSetActiveTab: (tab: BacklinksSearchState["tab"]) => void;
exportTarget: string;
}) {
const currentFilterCount = filters[activeTab].activeFilterCount;
return (
Backlinks
Referring Domains
Top Pages
{TAB_DESCRIPTIONS[activeTab]}
{filters.showFilters ? (
) : null}
{tabErrorMessage ? (
{tabErrorMessage}
) : null}
{activeTab === "backlinks" ? (
) : null}
{activeTab === "domains" && isTabLoading && !tabErrorMessage ? (
) : null}
{activeTab === "domains" && !isTabLoading && !tabErrorMessage ? (
) : null}
{activeTab === "pages" && isTabLoading && !tabErrorMessage ? (
) : null}
{activeTab === "pages" && !isTabLoading && !tabErrorMessage ? (
) : null}
);
}
function OverviewGrid({
data,
summaryStats,
}: {
data: BacklinksOverviewData;
summaryStats: Array<{ label: string; value: string; description: string }>;
}) {
const domainScope = data.scope === "domain";
return (
{domainScope ? : null}
);
}
function SummaryStatsGrid({
data,
summaryStats,
}: {
data: BacklinksOverviewData;
summaryStats: Array<{ label: string; value: string; description: string }>;
}) {
const cardClassName = `card bg-base-100 border border-base-300 ${data.scope === "domain" ? "md:col-span-2 xl:col-span-1" : ""}`;
return (
{summaryStats.map((item) => (
))}
);
}
function TrendPanels({ data }: { data: BacklinksOverviewData }) {
return (
<>
>
);
}
function TrendCard({
children,
description,
title,
}: {
children: React.ReactNode;
description: string;
title: string;
}) {
return (
);
}
function TabButton({
activeTab,
children,
onClick,
tab,
}: {
activeTab: BacklinksSearchState["tab"];
children: string;
onClick: (tab: BacklinksSearchState["tab"]) => void;
tab: BacklinksSearchState["tab"];
}) {
return (
);
}
function TabLoadingState({ label }: { label: string }) {
return (
);
}