import { useApp } from "../AppContext"; import "./settings.css"; import { useTranslation } from "react-i18next"; import { useState } from "react"; import { swManager } from "../utils/serviceWorkerManager"; import { RotateCcw, Download } from "lucide-react"; export default function Settings() { const { t, i18n } = useTranslation(); const { theme, setTheme, tableStyle, setTableStyle, mapPositionMode, setMapPositionMode, } = useApp(); const [isCheckingUpdates, setIsCheckingUpdates] = useState(false); const [updateMessage, setUpdateMessage] = useState(null); const handleCheckForUpdates = async () => { setIsCheckingUpdates(true); setUpdateMessage(null); try { // Check if service worker is supported if (!("serviceWorker" in navigator)) { setUpdateMessage(t("about.sw_not_supported", "Service Workers no son compatibles en este navegador")); return; } // Force check for updates await swManager.checkForUpdates(); // Wait a moment for the update check to complete setTimeout(() => { if (swManager.isUpdateAvailable()) { setUpdateMessage(t("about.update_available", "¡Nueva versión disponible! Aparecerá una notificación para actualizar.")); } else { setUpdateMessage(t("about.up_to_date", "Ya tienes la versión más reciente.")); } }, 2000); } catch (error) { console.error("Error checking for updates:", error); setUpdateMessage(t("about.update_error", "Error al comprobar actualizaciones. Intenta recargar la página.")); } finally { setIsCheckingUpdates(false); } }; const handleClearCache = async () => { if (confirm(t("about.clear_cache_confirm", "¿Estás seguro de que quieres limpiar la caché? Esto eliminará todos los datos guardados localmente."))) { try { await swManager.clearCache(); setUpdateMessage(t("about.cache_cleared", "Caché limpiada. La página se recargará para aplicar los cambios.")); setTimeout(() => { window.location.reload(); }, 2000); } catch (error) { console.error("Error clearing cache:", error); setUpdateMessage(t("about.cache_error", "Error al limpiar la caché.")); } } }; const handleResetPWA = async () => { if (confirm(t("about.reset_pwa_confirm", "¿Estás seguro? Esto eliminará TODOS los datos de la aplicación y la reiniciará completamente. Úsalo solo si hay problemas graves de caché."))) { try { await swManager.resetPWA(); } catch (error) { console.error("Error resetting PWA:", error); setUpdateMessage(t("about.reset_pwa_error", "Error al reiniciar la PWA.")); } } }; return (

{t("about.title")}

{t("about.description")}

{t("about.settings")}

{t("about.details_summary")}

{t("about.details_table")}

{t("about.table_style_regular")}
{t("about.details_regular")}
{t("about.table_style_grouped")}
{t("about.details_grouped")}

{t("about.app_updates", "Actualizaciones de la aplicación")}

{updateMessage && (
{updateMessage}
)}

{t("about.update_help", "Si tienes problemas con la aplicación o no ves las últimas funciones, usa estos botones para forzar una actualización o limpiar los datos guardados.")}

{t("about.credits")}

{t("about.github")} {" "} -{t("about.developed_by")}{" "} Ariel Costas

{t("about.data_source_prefix")}{" "} datos.vigo.org {" "} {t("about.data_source_middle")}{" "} Open Data Commons Attribution License

); }