2023-10-17 13:02:59 +00:00
|
|
|
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";
|
2024-02-07 07:22:28 +00:00
|
|
|
import debug from "debug";
|
|
|
|
|
|
|
|
const log = debug("ErrorPage");
|
2024-01-04 17:01:18 +00:00
|
|
|
|
2023-01-12 15:35:42 +00:00
|
|
|
const ErrorPage = () => {
|
2023-02-07 20:04:50 +00:00
|
|
|
const error = useRouteError();
|
2023-01-12 12:00:44 +00:00
|
|
|
|
2023-02-07 20:04:50 +00:00
|
|
|
console.error(error);
|
2024-02-07 07:22:28 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
};
|
|
|
|
|
2023-02-07 20:04:50 +00:00
|
|
|
return (
|
2024-01-10 12:07:44 +00:00
|
|
|
<div className="p-2">
|
2023-02-11 18:26:51 +00:00
|
|
|
<h4>
|
2023-11-20 11:35:51 +00:00
|
|
|
<FormattedMessage defaultMessage="An error has occured!" id="FfYsOb" />
|
2023-02-11 18:26:51 +00:00
|
|
|
</h4>
|
2024-02-07 07:22:28 +00:00
|
|
|
<AsyncButton onClick={handleClearData}>
|
2023-11-20 11:35:51 +00:00
|
|
|
<FormattedMessage defaultMessage="Clear cache and reload" id="HWbkEK" />
|
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-02-07 20:04:50 +00:00
|
|
|
);
|
2023-01-12 12:00:44 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
export default ErrorPage;
|