import { Button, Stack, Text } from "@mantine/core"; import Dexie from "dexie"; import { useState } from "react"; import { useLocation } from "wouter"; import { addLogEntry } from "../../../../modules/logEntries"; interface ClearDataState { isClearingData: boolean; hasClearedData: boolean; } export default function ClearDataButton() { const [state, setState] = useState({ isClearingData: false, hasClearedData: false, }); const [, navigate] = useLocation(); const handleClearDataButtonClick = async () => { const sureToDelete = self.confirm( "Are you sure you want to reset the settings and delete all files in cache?", ); if (!sureToDelete) return; addLogEntry("User initiated data clearing"); setState((prev) => ({ ...prev, isClearingData: true })); self.localStorage.clear(); for (const cacheName of await self.caches.keys()) { await self.caches.delete(cacheName); } try { const dbNames = await Dexie.getDatabaseNames(); for (const dbName of dbNames) { await Dexie.delete(dbName); addLogEntry(`Deleted database: ${dbName}`); } } catch (error) { addLogEntry( `Error deleting databases: ${ error instanceof Error ? error.message : String(error) }`, ); } const { clearWllamaCache } = await import("../../../../modules/wllama"); await clearWllamaCache(); setState((prev) => ({ ...prev, isClearingData: false, hasClearedData: true, })); addLogEntry("All data cleared successfully"); navigate("/", { replace: true }); self.location.reload(); }; return ( Reset settings and delete all files in cache to free up space. ); }