From 058f0c50d221d3c76c3bbde7b6b9a02617dbf5ab Mon Sep 17 00:00:00 2001 From: Alexander Skvortsov Date: Thu, 25 Mar 2021 13:40:25 -0400 Subject: [PATCH] Use resolver instead of catch-all route for errors --- js/src/{forum => common}/components/ErrorPage.js | 2 +- js/src/common/resolvers/DefaultResolver.ts | 8 ++++++++ js/src/forum/routes.js | 3 --- 3 files changed, 9 insertions(+), 4 deletions(-) rename js/src/{forum => common}/components/ErrorPage.js (80%) diff --git a/js/src/forum/components/ErrorPage.js b/js/src/common/components/ErrorPage.js similarity index 80% rename from js/src/forum/components/ErrorPage.js rename to js/src/common/components/ErrorPage.js index fbd7204ad..3b036e8a6 100644 --- a/js/src/forum/components/ErrorPage.js +++ b/js/src/common/components/ErrorPage.js @@ -1,4 +1,4 @@ -import Page from '../../common/components/Page'; +import Page from './Page'; export default class ErrorPage extends Page { view() { diff --git a/js/src/common/resolvers/DefaultResolver.ts b/js/src/common/resolvers/DefaultResolver.ts index 1e2c3f0dc..ba58e1a1c 100644 --- a/js/src/common/resolvers/DefaultResolver.ts +++ b/js/src/common/resolvers/DefaultResolver.ts @@ -1,4 +1,5 @@ import Mithril from 'mithril'; +import ErrorPage from '../components/ErrorPage'; /** * Generates a route resolver for a given component. @@ -32,6 +33,13 @@ export default class DefaultResolver { } onmatch(args, requestedPath, route) { + const errorCode = app.data.errorCode; + const currRoute = m.route.get(); + if (errorCode) { + delete app.data.errorCode; + return { view: () => ErrorPage.component({ errorCode, currRoute }) }; + } + return this.component; } diff --git a/js/src/forum/routes.js b/js/src/forum/routes.js index 362ac092a..6f10c27c5 100644 --- a/js/src/forum/routes.js +++ b/js/src/forum/routes.js @@ -4,7 +4,6 @@ import PostsUserPage from './components/PostsUserPage'; import DiscussionsUserPage from './components/DiscussionsUserPage'; import SettingsPage from './components/SettingsPage'; import NotificationsPage from './components/NotificationsPage'; -import ErrorPage from './components/ErrorPage'; import DiscussionPageResolver from './resolvers/DiscussionPageResolver'; /** @@ -25,8 +24,6 @@ export default function (app) { settings: { path: '/settings', component: SettingsPage }, notifications: { path: '/notifications', component: NotificationsPage }, - - error: { path: '/:error', component: ErrorPage }, }; /**