From 5f8cccf336f24b91388f6ace3edbf9618904ee68 Mon Sep 17 00:00:00 2001 From: Kurt Hutten Date: Sat, 10 Oct 2020 06:18:37 +1100 Subject: [PATCH] First commit --- .editorconfig | 10 + .env.defaults | 10 + .env.example | 2 + .gitignore | 11 + .nvmrc | 1 + .vscode/extensions.json | 13 + .vscode/launch.json | 22 + .vscode/settings.json | 11 + LICENSE | 21 + README.md | 24 + api/.babelrc.js | 1 + api/jest.config.js | 6 + api/jsconfig.json | 9 + api/package.json | 8 + api/prisma/schema.prisma | 20 + api/prisma/seeds.js | 26 + api/src/functions/graphql.js | 20 + api/src/graphql/.keep | 0 api/src/lib/db.js | 6 + api/src/services/.keep | 0 babel.config.js | 3 + package.json | 19 + prettier.config.js | 17 + redwood.toml | 14 + web/.babelrc.js | 1 + web/jest.config.js | 6 + web/jsconfig.json | 10 + web/package.json | 23 + web/public/README.md | 36 + web/public/favicon.png | Bin 0 -> 1877 bytes web/public/robots.txt | 2 + web/src/Routes.js | 20 + web/src/components/.keep | 0 web/src/index.css | 0 web/src/index.html | 12 + web/src/index.js | 16 + web/src/layouts/.keep | 0 .../pages/FatalErrorPage/FatalErrorPage.js | 53 + web/src/pages/NotFoundPage/NotFoundPage.js | 44 + yarn.lock | 15424 ++++++++++++++++ 40 files changed, 15921 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.defaults create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 .nvmrc create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 api/.babelrc.js create mode 100644 api/jest.config.js create mode 100644 api/jsconfig.json create mode 100644 api/package.json create mode 100644 api/prisma/schema.prisma create mode 100644 api/prisma/seeds.js create mode 100644 api/src/functions/graphql.js create mode 100644 api/src/graphql/.keep create mode 100644 api/src/lib/db.js create mode 100644 api/src/services/.keep create mode 100644 babel.config.js create mode 100644 package.json create mode 100644 prettier.config.js create mode 100644 redwood.toml create mode 100644 web/.babelrc.js create mode 100644 web/jest.config.js create mode 100644 web/jsconfig.json create mode 100644 web/package.json create mode 100644 web/public/README.md create mode 100644 web/public/favicon.png create mode 100644 web/public/robots.txt create mode 100644 web/src/Routes.js create mode 100644 web/src/components/.keep create mode 100644 web/src/index.css create mode 100644 web/src/index.html create mode 100644 web/src/index.js create mode 100644 web/src/layouts/.keep create mode 100644 web/src/pages/FatalErrorPage/FatalErrorPage.js create mode 100644 web/src/pages/NotFoundPage/NotFoundPage.js create mode 100644 yarn.lock diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..ae10a5c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +# editorconfig.org +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/.env.defaults b/.env.defaults new file mode 100644 index 0000000..bc5fb1d --- /dev/null +++ b/.env.defaults @@ -0,0 +1,10 @@ +# These environment variables will be used by default if you do not create any +# yourself in .env. This file should be safe to check into your version control +# system. Any custom values should go in .env and .env should *not* be checked +# into version control. + +# schema.prisma defaults +DATABASE_URL=file:./dev.db + +# disables Prisma CLI update notifier +PRISMA_HIDE_UPDATE_MESSAGE=true diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..28853d1 --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +# DATABASE_URL=file:./dev.db +# BINARY_TARGET=native \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e7b00eb --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +.idea +.DS_Store +.env +.netlify +.redwood +dev.db +dist +dist-babel +node_modules +yarn-error.log +web/public/mockServiceWorker.js diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..b009dfb --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +lts/* diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..46d93e2 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,13 @@ +{ + "recommendations": [ + "dbaeumer.vscode-eslint", + "eamodio.gitlens", + "ofhumanbondage.react-proptypes-intellisense", + "mgmcdermott.vscode-language-babel", + "wix.vscode-import-cost", + "pflannery.vscode-versionlens", + "editorconfig.editorconfig", + "prisma.prisma" + ], + "unwantedRecommendations": [] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..6530c37 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,22 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "command": "yarn redwood dev", + "name": "launch development", + "request": "launch", + "type": "node-terminal" + }, + { + "type": "pwa-node", + "request": "launch", + "name": "launch api", + "skipFiles": [ + "/**" + ], + "cwd": "${workspaceFolder}/api", + "envFile": "${workspaceFolder}/.env.defaults", + "program": "${workspaceFolder}/node_modules/.bin/dev-server" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..bb0578d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "editor.tabSize": 2, + "files.trimTrailingWhitespace": true, + "editor.formatOnSave": false, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + }, + "[prisma]": { + "editor.formatOnSave": true + } +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f943bbb --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Redwood + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..69cbc06 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# Redwood + +> **WARNING:** RedwoodJS software has not reached a stable version 1.0 and should not be considered suitable for production use. In the "make it work; make it right; make it fast" paradigm, Redwood is in the later stages of the "make it work" phase. + +## Getting Started +- [Tutorial](https://redwoodjs.com/tutorial/welcome-to-redwood): getting started and complete overview guide. +- [Docs](https://redwoodjs.com/docs/introduction): using the Redwood Router, handling assets and files, list of command-line tools, and more. +- [Redwood Community](https://community.redwoodjs.com): get help, share tips and tricks, and collaborate on everything about RedwoodJS. + +### Setup + +We use Yarn as our package manager. To get the dependencies installed, just do this in the root directory: + +```terminal +yarn install +``` + +### Fire it up + +```terminal +yarn redwood dev +``` + +Your browser should open automatically to `http://localhost:8910` to see the web app. Lambda functions run on `http://localhost:8911` and are also proxied to `http://localhost:8910/.redwood/functions/*`. diff --git a/api/.babelrc.js b/api/.babelrc.js new file mode 100644 index 0000000..562431e --- /dev/null +++ b/api/.babelrc.js @@ -0,0 +1 @@ +module.exports = { extends: "../babel.config.js" } diff --git a/api/jest.config.js b/api/jest.config.js new file mode 100644 index 0000000..09205b8 --- /dev/null +++ b/api/jest.config.js @@ -0,0 +1,6 @@ +const { getConfig } = require('@redwoodjs/core') + +const config = getConfig({ type: 'jest', target: 'node' }) +config.displayName.name = 'api' + +module.exports = config diff --git a/api/jsconfig.json b/api/jsconfig.json new file mode 100644 index 0000000..a41e54d --- /dev/null +++ b/api/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "src/*": ["./src/*"] + } + }, + "include": ["src/**/*", "../.redwood/index.d.ts"] +} diff --git a/api/package.json b/api/package.json new file mode 100644 index 0000000..78c2d41 --- /dev/null +++ b/api/package.json @@ -0,0 +1,8 @@ +{ + "name": "api", + "version": "0.0.0", + "private": true, + "dependencies": { + "@redwoodjs/api": "^0.19.2" + } +} diff --git a/api/prisma/schema.prisma b/api/prisma/schema.prisma new file mode 100644 index 0000000..d2cf1e8 --- /dev/null +++ b/api/prisma/schema.prisma @@ -0,0 +1,20 @@ +datasource DS { + // optionally set multiple providers + // example: provider = ["sqlite", "postgresql"] + provider = "sqlite" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" + binaryTargets = "native" +} + +// Define your own datamodels here and run `yarn redwood db save` to create +// migrations for them. +// TODO: Please remove the following example: +model UserExample { + id Int @id @default(autoincrement()) + email String @unique + name String? +} diff --git a/api/prisma/seeds.js b/api/prisma/seeds.js new file mode 100644 index 0000000..51426c5 --- /dev/null +++ b/api/prisma/seeds.js @@ -0,0 +1,26 @@ +/* eslint-disable no-console */ +const { PrismaClient } = require('@prisma/client') +const dotenv = require('dotenv') + +dotenv.config() +const db = new PrismaClient() + +async function main() { + // Seed data is database data that needs to exist for your app to run. + // Ideally this file should be idempotent: running it multiple times + // will result in the same database state (usually by checking for the + // existence of a record before trying to create it). For example: + // + // const existing = await db.user.findMany({ where: { email: 'admin@email.com' }}) + // if (!existing.length) { + // await db.user.create({ data: { name: 'Admin', email: 'admin@email.com' }}) + // } + + console.info('No data to seed. See api/prisma/seeds.js for info.') +} + +main() + .catch((e) => console.error(e)) + .finally(async () => { + await db.$disconnect() + }) diff --git a/api/src/functions/graphql.js b/api/src/functions/graphql.js new file mode 100644 index 0000000..2d3f47b --- /dev/null +++ b/api/src/functions/graphql.js @@ -0,0 +1,20 @@ +import { + createGraphQLHandler, + makeMergedSchema, + makeServices, +} from '@redwoodjs/api' + +import schemas from 'src/graphql/**/*.{js,ts}' +import services from 'src/services/**/*.{js,ts}' +import { db } from 'src/lib/db' + +export const handler = createGraphQLHandler({ + schema: makeMergedSchema({ + schemas, + services: makeServices({ services }), + }), + onException: () => { + // Disconnect from your database with an unhandled exception. + db.$disconnect() + }, +}) diff --git a/api/src/graphql/.keep b/api/src/graphql/.keep new file mode 100644 index 0000000..e69de29 diff --git a/api/src/lib/db.js b/api/src/lib/db.js new file mode 100644 index 0000000..465626a --- /dev/null +++ b/api/src/lib/db.js @@ -0,0 +1,6 @@ +// See https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/constructor +// for options. + +import { PrismaClient } from '@prisma/client' + +export const db = new PrismaClient() diff --git a/api/src/services/.keep b/api/src/services/.keep new file mode 100644 index 0000000..e69de29 diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..0bb758f --- /dev/null +++ b/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['@redwoodjs/core/config/babel-preset'], +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ca2982c --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "private": true, + "workspaces": { + "packages": [ + "api", + "web" + ] + }, + "devDependencies": { + "@redwoodjs/core": "^0.19.2" + }, + "eslintConfig": { + "extends": "@redwoodjs/eslint-config" + }, + "engines": { + "node": ">=12", + "yarn": ">=1.15" + } +} diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..5187cd4 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,17 @@ +// https://prettier.io/docs/en/options.html +module.exports = { + trailingComma: 'es5', + bracketSpacing: true, + tabWidth: 2, + semi: false, + singleQuote: true, + arrowParens: 'always', + overrides: [ + { + files: 'Routes.js', + options: { + printWidth: 200, + }, + }, + ], +} diff --git a/redwood.toml b/redwood.toml new file mode 100644 index 0000000..1001684 --- /dev/null +++ b/redwood.toml @@ -0,0 +1,14 @@ +# This file contains the configuration settings for your Redwood app. +# This file is also what makes your Redwood app a Redwood app. +# If you remove it and try to run `yarn rw dev`, you'll get an error. +# +# For the full list of options, see the "App Configuration: redwood.toml" doc: +# https://redwoodjs.com/docs/app-configuration-redwood-toml + +[web] + port = 8910 + apiProxyPath = "/.redwood/functions" +[api] + port = 8911 +[browser] + open = true diff --git a/web/.babelrc.js b/web/.babelrc.js new file mode 100644 index 0000000..562431e --- /dev/null +++ b/web/.babelrc.js @@ -0,0 +1 @@ +module.exports = { extends: "../babel.config.js" } diff --git a/web/jest.config.js b/web/jest.config.js new file mode 100644 index 0000000..2959538 --- /dev/null +++ b/web/jest.config.js @@ -0,0 +1,6 @@ +const { getConfig } = require('@redwoodjs/core') + +const config = getConfig({ type: 'jest', target: 'browser' }) +config.displayName.name = 'web' + +module.exports = config diff --git a/web/jsconfig.json b/web/jsconfig.json new file mode 100644 index 0000000..9da8404 --- /dev/null +++ b/web/jsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "src/*": ["./src/*"] + }, + "jsx": "preserve" + }, + "include": ["src/**/*", "../.redwood/index.d.ts"] +} diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..094fe55 --- /dev/null +++ b/web/package.json @@ -0,0 +1,23 @@ +{ + "name": "web", + "version": "0.0.0", + "private": true, + "browserslist": { + "development": [ + "last 1 version" + ], + "production": [ + "defaults", + "not IE 11", + "not IE_Mob 11" + ] + }, + "dependencies": { + "@redwoodjs/forms": "^0.19.2", + "@redwoodjs/router": "^0.19.2", + "@redwoodjs/web": "^0.19.2", + "prop-types": "^15.7.2", + "react": "^16.13.1", + "react-dom": "^16.13.1" + } +} diff --git a/web/public/README.md b/web/public/README.md new file mode 100644 index 0000000..6df2fa2 --- /dev/null +++ b/web/public/README.md @@ -0,0 +1,36 @@ +# Static Assets +Use this folder to add static files directly to your app. All included files and folders will be copied directly into the `/dist` folder (created when Webpack builds for production). They will also be available during development when you run `yarn rw dev`. +>Note: files will *not* hot reload while the development server is running. You'll need to manually stop/start to access file changes. + +### Example Use +A file like `favicon.png` will be copied to `/dist/favicon.png`. A folder containing a file such as `static-files/my-logo.jpg` will be copied to `/dist/static-files/my-logo.jpg`. These can be referenced in your code directly without any special handling, e.g. +``` + +``` +and +``` + alt="Logo" /> +``` + +Behind the scenes, we are using Webpack's ["copy-webpack-plugin"](https://github.com/webpack-contrib/copy-webpack-plugin). + +## Best Practices +Because assets in this folder are bypassing the javascript module system, **this folder should be used sparingly** for assets such as favicons, robots.txt, manifests, libraries incompatible with Webpack, etc. + +In general, it's best to import files directly into a template, page, or component. This allows Webpack to include that file in the bundle, which ensures Webpack will correctly process and move assets into the distribution folder, providing error checks and correct paths along the way. + +### Example Asset Import with Webpack +Instead of handling our logo image as a static file per the example above, we can do the following: +``` +import React from "react" +import logo from "./my-logo.jpg" + + +function Header() { + return Logo +} + +export default Header +``` + +Behind the scenes, we are using Webpack's ["file-loader"](https://webpack.js.org/loaders/file-loader/) and ["url-loader](https://webpack.js.org/loaders/url-loader/) (for files smaller than 10kb). diff --git a/web/public/favicon.png b/web/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..f0cdd00c8655692cdd610e596b26d7ddb3708ddd GIT binary patch literal 1877 zcmV-b2demqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$_zez+vR9Fd}R(nuXRTw|#?A--Q zz-&mTl*wHX3m-W+iYDxC>FlnrnR0L{1Cc4Um)7K?$!UhN(H{QeI5}ob8a9oI^#=&c zhRyB*0a@dt#AI18F~WRDA_9Bw>37h3y}K+AJ2SiIobP?U^ZUMgDES}5TWFI={ki9% zx{eakO$hzK>TWtnDdl%-4*J6%!ZAJ4n#&csiEwVwYr^>{c;9Tx%soI03l%+Yu=TJ4 z_+@2=v9tA`JkFI(a58=fgQuy1Y|fsMw|_W+3>g5=$uamkj{Zal<>cB##p6wRxJK zh@?mEStOy~K0Tcy%8q{Yp$L?>4J9J@g9cFLN=d3~@WfbW<<2FHt|ycNa6^txNW5gL zXvuAIrNq>`QW6H!7%%{z)BLQ$m9sq^7aFVUi|lrH^EM-=835bS0S!|6qlvMpc2CQ$ zDyR9$Hib9cRFtzmm&G-ZPQL)eo%@}Zk2xn_;}^#XAE$6q>33Lm#F`S%@XT>D31#o% zjzgMJWCnq4Km}ySNQv!2R_F*_fOaG*=8(^k^0p?gTZDnIHYa^lPe<2&D9zK!XiG{- zfK#^I?he*_=bNWfg?s_#O>UqC_Oj-aURO#cRd^8`r)o;!i*HFnT)w@y;krr=3&86z z*Ml)rWk#JTkr`)et)Ac~dcN0Xew}c#4L^gP9=XOLz6U-WDn0B9kjCFs#(*;%D3tfl z5T^@=axQFA&Q9rVhXr8G%w2^bcIX8n*Eqq>QAzhM6Ic2ZGx|5!0)oWiPCHLEwI?F?v@Y1S`MW53LzNyipR!J zww47B`<#|FA<}zHbuRd*mMl3WpMZ^(){0;WF-eo4bFfbrAZ5(3R5)wJ8on~wWkDFuC*0fyl8xXsftO$z{#Jw{~tm}ZiaMteoeM0GDZqM|4P z1UOQq4K^c)3$cu*X1aq~3m4f%rpBmx%w#lMOB>JhT>+K(Qz}D5M~Rdx_5xgDmPRC@ zZs{el9_F~vHFN9@A*&!)SMKw93j>sogyU=I_pezKGNzA6jz8{mST^|U z_g(WkEqhJ(^@JFsvvIFKs|E&|AyZ?J?#U*95D9qs#$Q)-+3zr~%^ESS=7IRQDU6Y~ zpxeoTN?`+j1&BC3wRDm(y||&r>zFW?lF$yMTe|`XRZ20&CGm+d%GC><#lS(--VXeH z$H$CYCSAN7C(E5BNckLLUkn8HE8)_sHcz0sAt&7=dmCJHGpEYhV9PJf!{eXj==p#Ao>bWFYzEPuhF66ME!bzwKK8j4&yZa6< z=(nx_i)$CJTak$zL5w!Qn?~iXTItAnv#p|e1!Z)LDu)KN3GMZjsv|||N;j#4?4v3# zat1HAO<{fgL-4c!9;ECC?Ej8b(C?9n@gcdlR(yzT?&eKsOgWUX#WqiHi`QwMqsXKh zM}0`I({D}5S!=@7T9vK^km?S0Q$}{GjDcrF5<8cc~|J=j3D zw$tKbS(VWO5CkqsJ8_p?Dl>8hubol)J~2uH$zg-D*fqG8kARPhVGP{{ybj4^_*_T2 za|MEEFAZGcgcj)qfEMv4tYnld;hD+F){5qL7@_fKEL-sTK96#3L&tlM8E+bKEgO^K zW5*)U=Ky=Z-i}xUh@YWD{;Q{JXjF;fL(@w_C&1`HUiTOY-Tk;b*xdIzzJ7EO9wDn> z$^krt>*AdNLOJ8))2vx}Zt*1dFGzg^9ds4tJP)N5Cz(jvoYIz7)t8vVjojwcFP=0y zK89aaYgK$ih@$Ko5@5IWVYHP=mTioLO+-1ChXQT4MYKuMR=P!I$;q&4 zz%y$y%4cwN>-3SGWD??OAoT?>ySPr^s-JVA5;X&Y5joJ3^C7$)feiZ0hRhW_T36dD zg2j HomePage +// 'src/pages/Admin/BooksPage/BooksPage.js' -> AdminBooksPage + +import { Router, Route } from '@redwoodjs/router' + +const Routes = () => { + return ( + + + + ) +} + +export default Routes diff --git a/web/src/components/.keep b/web/src/components/.keep new file mode 100644 index 0000000..e69de29 diff --git a/web/src/index.css b/web/src/index.css new file mode 100644 index 0000000..e69de29 diff --git a/web/src/index.html b/web/src/index.html new file mode 100644 index 0000000..8f69230 --- /dev/null +++ b/web/src/index.html @@ -0,0 +1,12 @@ + + + + + + + <%= htmlWebpackPlugin.options.title %> + + +
+ + diff --git a/web/src/index.js b/web/src/index.js new file mode 100644 index 0000000..63dd948 --- /dev/null +++ b/web/src/index.js @@ -0,0 +1,16 @@ +import ReactDOM from 'react-dom' +import { RedwoodProvider, FatalErrorBoundary } from '@redwoodjs/web' +import FatalErrorPage from 'src/pages/FatalErrorPage' + +import Routes from 'src/Routes' + +import './index.css' + +ReactDOM.render( + + + + + , + document.getElementById('redwood-app') +) diff --git a/web/src/layouts/.keep b/web/src/layouts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/web/src/pages/FatalErrorPage/FatalErrorPage.js b/web/src/pages/FatalErrorPage/FatalErrorPage.js new file mode 100644 index 0000000..b21e3cc --- /dev/null +++ b/web/src/pages/FatalErrorPage/FatalErrorPage.js @@ -0,0 +1,53 @@ +// This page will be rendered when an error makes it all the way to the top of the +// application without being handled by a Javascript catch statement or React error +// boundary. +// +// You can modify this page as you wish, but it is important to keep things simple to +// avoid the possibility that it will cause its own error. If it does, Redwood will +// still render a generic error page, but your users will prefer something a bit more +// thoughtful. =) + +export default () => ( +
+