Skip to content

Instantly share code, notes, and snippets.

export default function websiteContext(Component) {
class WebsiteContextComponent extends React.Component {
static propTypes = {
dispatch: PropTypes.func.isRequired,
state: PropTypes.object.isRequire,
params: PropTypes.shape({
websiteId: PropTypes.string.isRequired
})
};
const routes = (
<Route path="">
<Route path="/signup" component={SignUp} />
<Route path="/signin" component={SignIn} />
// applied here..
<Route path="/welcome-on-board" component={checkBoarded(Welcome, { withValue: true, redirectTo: '/app/dashboard'}) } />
<Route path="/forgot-password" component={ForgotPassword} />
<Route path="/signout" component={SignOut} />
export default function checkBoarded(Component, { withValue, redirectTo }) {
class CompletedComponent extends React.Component {
static propTypes = {
state: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired
};
componentDidMount() {
this._checkAndRedirect();
}
_checkAndRedirect() {
const { dispatch, user } = this.props;
const { role, redirectTo } = options;
if (!user || !user.role === role) {
dispatch(push(redirectTo || '/signin'));
}
}
<Route path="/app" component={requiresAuth(App, { role: 'user', redirectTo: '/signin' })}>
<Route name="dashboard" path="dashboard" component={Dashboard} />
<Route name="invoices" path="user-profile" component={UserProfile} />
</Route>
<Route path="/config" component={requiresAuth(Config, { role: 'admin', redirectTo: '/app' })}>
<Route name="page" path="page" component={PageConfig} />
</Route>
const routes = (
<Route path="">
<Route path="/signup" component={SignUp} />
<Route path="/signin" component={SignIn} />
<Route path="/welcome-on-board" component={Welcome} />
<Route path="/forgot-password" component={ForgotPassword} />
<Route path="/signout" component={SignOut} /> /* App component is wrapped
with requiresAuth() */
<Route path="/app" component={requiresAuth(App)}>
import React, { PropTypes } from 'react';
import { connect } from 'react-redux';
import { push } from 'react-router-redux';
export default function requiresAuth(Component) {
class AuthenticatedComponent extends React.Component {
static propTypes = {
user: PropTypes.object,
dispatch: PropTypes.func.isRequired,
};
componentDidMount() {
const routes = (
<Route path="">
{' '}
<Route path="/signup" component={SignUp} />{' '}
<Route path="/signin" component={SignIn} />{' '}
<Route path="/welcome-on-board" component={Welcome} />{' '}
<Route path="/forgot-password" component={ForgotPassword} />{' '}
<Route path="/signout" component={SignOut} />{' '}
<Route path="/" component={App}>
{' '}
@alexbeletsky
alexbeletsky / 1.md
Last active May 17, 2017 07:32
Async.js vs Rx

Workflow Description

  1. Read records from database.
  2. For each record issue HTTP GET for a webservice and recieve a response.
  3. Store resonses to corresponding document back.
@alexbeletsky
alexbeletsky / example.js
Created March 8, 2017 19:59
API endpoint as promise chain
import domain from '../../domain';
const Handler = {
getGroups: (request, reply) => {
const groups = domain.groups(request, reply);
return Promise.resolve()
.then(groups.getGroups)
.then(groups.transformMany)
.then(groups.reply);