From f5ae88f9749e568dbaf588f04c8bc31b3585f34a Mon Sep 17 00:00:00 2001 From: Kata Date: Mon, 18 Mar 2019 04:50:30 -0500 Subject: [PATCH] add error page --- ui/pages/_error.js | 143 ++++++++++++++++++++++++++++++++++++++++ ui/pages/_test/error.js | 2 + 2 files changed, 145 insertions(+) create mode 100644 ui/pages/_error.js create mode 100644 ui/pages/_test/error.js diff --git a/ui/pages/_error.js b/ui/pages/_error.js new file mode 100644 index 0000000..9a8535d --- /dev/null +++ b/ui/pages/_error.js @@ -0,0 +1,143 @@ +import * as React from 'react' +import styled from 'styled-components' +import MediaQuery from '../kit/media' + +const Overlay = styled.div` + opacity: 0.6; + pointer-events: none; + position: fixed; + top: 50px; + bottom: 0; + left: 0; + right: 0; + z-index: -1; + background-image: radial-gradient(circle, var(--c-dark), var(--c-dark) 1px, transparent 1px, transparent); + background-size: 27px 27px; +` + +const ResponsiveSplitter = styled.div` + display: flex; + align-items: center; + justify-content: center; + line-height: 1.6; + font-size: 1.3em; + flex-direction: column; + + ${() => MediaQuery({ + md: `flex-direction: row; min-height: 100vh; position: relative; top: -50px;` + })} + + & > div { + margin: 1rem; + } + + & section { + text-align: center; + ${() => MediaQuery({ + md: `text-align: left;` + })} + } +` + +const JapaneseFlair = styled.section` + color: var(--c-3); + font-size: 0.9rem; +` + +const Code = styled.h1` + margin: 0; + padding: 0; + font-size: 4em; + ${() => MediaQuery({ + md: `font-size: 2em;` + })} +` + +export default class CustomErrorPage extends React.Component { + static getInitialProps ({ res, err }) { + const statusCode = res ? res.statusCode : err ? err.statusCode : null + return { statusCode } + } + + render404 () { + return
+ + +
+ 404 +
+
+
+ This page is in another castle. +
+ お探しのページは見つかりませんでした +
+
+
+ } + + render403 () { + return
+ + +
+ 403 +
+
+
+ You weren't allowed to access this. +
+ あなたはこの点に合格しないかもしれません +
+
+
+ } + + render500 () { + return
+ + +
+ 500 +
+
+
+ The server doesn't like you right now. Feed it a cookie. +
+ クッキーを送ってください〜 クッキーを送ってください〜 +
+
+
+ } + + renderDefault () { + return
+ + +
+ Oops. +
+
+
+ Something went bad. How could this happen? +
+ おねがい? +
+
+
+ } + + handlers = { + 403: this.render403, + 404: this.render404, + 500: this.render500 + } + + render () { + if (this.props.statusCode in this.handlers) { + return this.handlers[this.props.statusCode]() + } else { + return this.renderDefault() + } + } +} diff --git a/ui/pages/_test/error.js b/ui/pages/_test/error.js new file mode 100644 index 0000000..0effb82 --- /dev/null +++ b/ui/pages/_test/error.js @@ -0,0 +1,2 @@ +import Error from '../_error' +export default ({ router: { query: { code = 404 } } }) =>