ducky/web
ducky/web/src/router.jsx
Enable catch-all in our ValidationError component. We're doing this an ugly, hacky way. But it works, and right now, that's what counts. To match our params/fields/headers properties on the ValidationError component, we're going to add the notParams/notFields/notHeaders properties--they match any error _not_ targeting those params/fields/headers. Basically, "any error that wouldn't be caught by these filters". Which is an ugly, but workable, solution for a catch-all ValidationError--just tell it to catch anything but the params/fields/headers that are being handled by the other ValidationErrors. Our implementation of this in the RegisterPage component validates (ha!) that it's at least workable model, if not overly pretty. Also, I anticipate some human error bugs in the future, where one of the field-specific ValidationErrors gets updated and the catch-all ValidationError does not. But whatever. For now, this is Good Enoughâ„¢.
| paddy@0 | 1 import Router from 'ampersand-router' |
| paddy@0 | 2 import React from 'react' |
| paddy@0 | 3 import MessagePage from './pages/message' |
| paddy@0 | 4 import OnboardingPage from './pages/onboard' |
| paddy@0 | 5 import RegisterPage from './pages/register' |
| paddy@2 | 6 import PaymentMethodPage from './pages/payment' |
| paddy@0 | 7 import LoginPage from './pages/login' |
| paddy@0 | 8 |
| paddy@0 | 9 export default Router.extend({ |
| paddy@0 | 10 routes: { |
| paddy@0 | 11 '': 'home', |
| paddy@0 | 12 'register': 'register', |
| paddy@2 | 13 'register/payment': 'payment', |
| paddy@0 | 14 'login': 'login', |
| paddy@0 | 15 'logout': 'logout', |
| paddy@0 | 16 '*404': 'fourOhFour' |
| paddy@0 | 17 }, |
| paddy@0 | 18 |
| paddy@0 | 19 home () { |
| paddy@0 | 20 React.render(<OnboardingPage/>, document.body) |
| paddy@0 | 21 }, |
| paddy@0 | 22 |
| paddy@0 | 23 register () { |
| paddy@0 | 24 React.render(<RegisterPage/>, document.body) |
| paddy@0 | 25 }, |
| paddy@0 | 26 |
| paddy@2 | 27 payment () { |
| paddy@2 | 28 React.render(<PaymentMethodPage/>, document.body) |
| paddy@2 | 29 }, |
| paddy@2 | 30 |
| paddy@0 | 31 login () { |
| paddy@0 | 32 React.render(<LoginPage/>, document.body) |
| paddy@0 | 33 }, |
| paddy@0 | 34 |
| paddy@0 | 35 logout () { |
| paddy@0 | 36 window.localStorage.clear() |
| paddy@0 | 37 window.location = '/' |
| paddy@0 | 38 }, |
| paddy@0 | 39 |
| paddy@0 | 40 fourOhFour () { |
| paddy@0 | 41 this.renderPage(MessagePage, {title: '404', message: 'Oops. Page not found.'}) |
| paddy@0 | 42 } |
| paddy@0 | 43 }) |