← back to Open Seo
src/client/features/lighthouse/issues/utils.tsx
43 lines
import { buildCsv, type CsvValue } from "@/client/lib/csv";
import type { CategoryTab, LighthouseIssue } from "./types";
const ISSUE_HEADERS = [
"Category",
"Severity",
"Score",
"Title",
"Display Value",
"Description",
"Impact (ms)",
"Impact (bytes)",
"Affected Items",
];
function issuesToRows(issues: LighthouseIssue[]): CsvValue[][] {
return issues.map((issue) => [
issue.category,
issue.severity,
issue.score ?? "",
issue.title,
issue.displayValue ?? "",
issue.description ?? "",
issue.impactMs ?? "",
issue.impactBytes ?? "",
issue.items.length,
]);
}
export function issuesToTable(issues: LighthouseIssue[]) {
return { headers: ISSUE_HEADERS, rows: issuesToRows(issues) };
}
export function categoryLabel(category: CategoryTab) {
if (category === "best-practices") return "Best practices";
if (category === "all") return "All";
return `${category.charAt(0).toUpperCase()}${category.slice(1)}`;
}
export function issuesToCsv(issues: LighthouseIssue[]) {
return buildCsv(ISSUE_HEADERS, issuesToRows(issues));
}