"use client"; import { useState } from "react"; import { Sidebar } from "@/components/dashboard/sidebar"; import { useBankingData } from "@/lib/hooks"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "@/components/ui/alert-dialog"; import { Download, Trash2, Upload, RefreshCw, Database, FileJson, Tags, } from "lucide-react"; import type { BankingData } from "@/lib/types"; export default function SettingsPage() { const { data, isLoading, refresh, update } = useBankingData(); const [importing, setImporting] = useState(false); if (isLoading || !data) { return (
); } const exportData = () => { const dataStr = JSON.stringify(data, null, 2); const blob = new Blob([dataStr], { type: "application/json" }); const url = URL.createObjectURL(blob); const a = document.createElement("a"); a.href = url; a.download = `fintrack-backup-${new Date().toISOString().split("T")[0]}.json`; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); }; const importData = () => { const input = document.createElement("input"); input.type = "file"; input.accept = ".json"; input.onchange = async (e) => { const file = (e.target as HTMLInputElement).files?.[0]; if (!file) return; setImporting(true); try { const content = await file.text(); const importedData = JSON.parse(content) as BankingData; // Validate structure if ( !importedData.accounts || !importedData.transactions || !importedData.categories || !importedData.folders ) { alert("Format de fichier invalide"); return; } update(importedData); alert("Données importées avec succès"); } catch (error) { alert("Erreur lors de l'import"); } finally { setImporting(false); } }; input.click(); }; const resetData = () => { localStorage.removeItem("banking-app-data"); window.location.reload(); }; const clearAllCategories = async () => { try { const response = await fetch( "/api/banking/transactions/clear-categories", { method: "POST", }, ); if (!response.ok) throw new Error("Erreur"); refresh(); alert("Catégories supprimées de toutes les opérations"); } catch (error) { console.error(error); alert("Erreur lors de la suppression des catégories"); } }; const categorizedCount = data.transactions.filter((t) => t.categoryId).length; return (

Paramètres

Gérez vos données et préférences

Données Exportez ou importez vos données pour les sauvegarder ou les transférer

Statistiques

{data.accounts.length} comptes, {data.transactions.length}{" "} transactions, {data.categories.length} catégories

Zone dangereuse Actions irréversibles - procédez avec prudence {/* Supprimer catégories des opérations */} Supprimer toutes les catégories ? Cette action va retirer la catégorie de {categorizedCount}{" "} opération{categorizedCount > 1 ? "s" : ""}. Les catégories elles-mêmes ne seront pas supprimées, seulement leur affectation aux opérations. Annuler Supprimer les affectations {/* Réinitialiser toutes les données */} Êtes-vous sûr ? Cette action supprimera définitivement tous vos comptes, transactions, catégories et dossiers. Cette action est irréversible. Annuler Supprimer tout Format OFX Informations sur l'import de fichiers

L'application accepte les fichiers au format OFX (Open Financial Exchange) ou QFX. Ces fichiers sont généralement disponibles depuis l'espace client de votre banque.

Lors de l'import, les transactions sont automatiquement catégorisées selon les mots-clés définis. Les doublons sont détectés et ignorés automatiquement.

); }