snort/packages/app/src/Pages/ErrorPage.tsx

60 lines
1.7 KiB
TypeScript
Raw Normal View History

2024-02-07 08:36:17 +00:00
import debug from "debug";
import { FormattedMessage } from "react-intl";
2023-01-12 12:00:44 +00:00
import { useRouteError } from "react-router-dom";
2024-01-04 17:01:18 +00:00
import AsyncButton from "@/Components/Button/AsyncButton";
import { db } from "@/Db";
const log = debug("ErrorPage");
2024-01-04 17:01:18 +00:00
2023-01-12 15:35:42 +00:00
const ErrorPage = () => {
const error = useRouteError();
2023-01-12 12:00:44 +00:00
console.error(error);
const clearOPFSData = async () => {
if ("showDirectoryPicker" in window) {
try {
// Request access to the root directory
const rootDirectoryHandle = await window.showDirectoryPicker();
// Recursively delete contents
for await (const entry of rootDirectoryHandle.values()) {
if (entry.kind === "file") {
await entry.remove();
} else if (entry.kind === "directory") {
await entry.removeRecursively();
}
}
log("OPFS data cleared successfully.");
} catch (e) {
log("Error clearing OPFS data:", e);
}
} else {
log("File System Access API is not supported in this browser.");
}
};
const handleClearData = async () => {
await db.delete(); // Delete IndexedDB
globalThis.localStorage.clear(); // Clear localStorage
await clearOPFSData(); // Attempt to clear OPFS data
globalThis.location.href = "/"; // Redirect to home
};
return (
2024-01-10 12:07:44 +00:00
<div className="p-2">
2023-02-11 18:26:51 +00:00
<h4>
<FormattedMessage defaultMessage="An error has occured!" />
2023-02-11 18:26:51 +00:00
</h4>
<AsyncButton onClick={handleClearData}>
<FormattedMessage defaultMessage="Clear cache and reload" />
2023-05-17 10:37:48 +00:00
</AsyncButton>
2024-01-10 12:07:44 +00:00
<h5>{error.message}</h5>
<div className="my-2">{error.message}</div>
2024-01-10 13:40:40 +00:00
<pre className="my-2 whitespace-pre-wrap">{error.stack}</pre>
2023-05-17 10:37:48 +00:00
</div>
);
2023-01-12 12:00:44 +00:00
};
export default ErrorPage;