diff --git a/packages/controller/src/routes.ts b/packages/controller/src/routes.ts index 1e2b3b1f..321c1073 100644 --- a/packages/controller/src/routes.ts +++ b/packages/controller/src/routes.ts @@ -690,4 +690,5 @@ export const webRoutes = [ "/roles/:id/view", "/plugins", "/plugins/:name/view", + "/error", ]; diff --git a/packages/web_ui/src/components/ErrorPage.tsx b/packages/web_ui/src/components/ErrorPage.tsx index 8ce7cefb..92876107 100644 --- a/packages/web_ui/src/components/ErrorPage.tsx +++ b/packages/web_ui/src/components/ErrorPage.tsx @@ -1,15 +1,52 @@ import React from "react"; -import { Typography } from "antd"; +import { Button, Card, Flex, Image, Typography } from "antd"; +import example from "../images/console-error-edge.png"; import PageLayout from "./PageLayout"; import type { ErrorProps } from "./App"; const { Paragraph } = Typography; +function SupportLinkCard(props:{ + name: string, + href: string, + image: string, +}) { + return + + + + + ; +} + +export default function ErrorPage(props: ErrorProps & { throw?: boolean }) { + if (props.throw) { + throw props.error; + } -export default function ErrorPage(props: ErrorProps) { return -

An unexpected error occured

- {props.error.stack} +

An Unexpected Error Occurred

+ {props.error.message} + + Further details can found by saving the console log in dev tools + (F12, "Console", "Save as", see example below). + If this is an issue with a plugin then please report it to the plugin creator; + otherwise, please reach out to the Clusterio team via Github or Discord. + + + + + +
+
; }; diff --git a/packages/web_ui/src/images/console-error-edge.png b/packages/web_ui/src/images/console-error-edge.png new file mode 100644 index 00000000..2f3aaa34 Binary files /dev/null and b/packages/web_ui/src/images/console-error-edge.png differ diff --git a/packages/web_ui/src/pages.tsx b/packages/web_ui/src/pages.tsx index c9aa5b87..5235fd51 100644 --- a/packages/web_ui/src/pages.tsx +++ b/packages/web_ui/src/pages.tsx @@ -15,6 +15,7 @@ import RolesPage from "./components/RolesPage"; import RoleViewPage from "./components/RoleViewPage"; import PluginsPage from "./components/PluginsPage"; import PluginViewPage from "./components/PluginViewPage"; +import ErrorPage from "./components/ErrorPage"; export const pages: PluginPage[] = [ { @@ -87,6 +88,10 @@ export const pages: PluginPage[] = [ sidebarPath: "/plugins", content: , }, + { + path: "/error", + content: , + }, ]; export const sidebarPages = [