roadrecon / frontend /src /lib /csv.ts
k25kar's picture
M8: authority dashboard (MargRakshak) — endpoints + map + worklist + charts + CSV
8935842
Raw
History Blame Contribute Delete
968 Bytes
import { HAZARD_LABEL, type Cluster } from "./api";
export function clustersToCsv(clusters: Cluster[]): string {
const header = [
"rank",
"cluster_id",
"hazard_type",
"severity",
"report_count",
"status",
"lat",
"lon",
"first_seen",
"last_seen",
];
const rows = clusters.map((c, i) => [
i + 1,
c.id,
HAZARD_LABEL[c.hazard_type],
c.severity,
c.report_count,
c.status,
c.centroid_lat.toFixed(6),
c.centroid_lon.toFixed(6),
c.first_seen,
c.last_seen,
]);
return [header, ...rows]
.map((r) => r.map((v) => `"${String(v).replace(/"/g, '""')}"`).join(","))
.join("\n");
}
export function downloadCsv(filename: string, csv: string): void {
const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = filename;
a.click();
URL.revokeObjectURL(url);
}