"use client"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { useRef, type ChangeEvent } from "react"; import { Download, FileText, Printer, RotateCcw, Upload } from "lucide-react"; import { Button } from "@/components/ui/Button"; import { normalizeCVCareerData } from "@/lib/storage"; import type { CVCareerData } from "@/lib/types/cv"; interface CvToolbarProps { onReset: () => void; data: CVCareerData; onImport: (value: CVCareerData) => void; } export function CvToolbar({ onReset, data, onImport }: CvToolbarProps) { const pathname = usePathname(); const fileInputRef = useRef(null); function handleExport() { const blob = new Blob([JSON.stringify(data, null, 2)], { type: "application/json" }); const url = URL.createObjectURL(blob); const link = document.createElement("a"); link.href = url; link.download = "cv-maker.json"; link.click(); URL.revokeObjectURL(url); } function handleImportFile(event: ChangeEvent) { const file = event.target.files?.[0]; event.target.value = ""; if (!file) return; const reader = new FileReader(); reader.onload = () => { try { const parsed: unknown = JSON.parse(String(reader.result)); const value = normalizeCVCareerData(parsed); if (value === null) { window.alert("Fichier invalide : ce n'est pas un CV au format attendu."); return; } if (window.confirm("Importer ce CV ? Le contenu actuel sera remplacé.")) { onImport(value); } } catch { window.alert("Fichier illisible : le JSON est invalide."); } }; reader.readAsText(file); } return (
CV-Maker
); }