REASYNC - API

April 2, 2016 ยท View on GitHub

Docs

resolve(hookName:String, toResolve:{(...attributes):Promise}):void

resolve function is used for decorating of components with data needed. First argument is name of the decoration, second is function which will be triggered when your app need it. Attributes received in toResolve functions are location, params, components and all custom attributes defined in createResolve, respectively createClientResolver

import { resolve } from 'reasync';
import { Component } from 'react';

const toResolve = ({location, analytics}) => analytics.push(location);

//analytics is custom object defined by user
@resolve('MY_ANALYTICS_EVENT', toResolve)
class SomeComponent extends Component {
...

If you want to use es5 syntax, you can use resolve as function. Just don't forget to export it's result

export const someComponentWithResolve = resolve('MY_ANALYTICS_EVENT', toResolve)(SomeComponent);

preResolve(toResolve:{(...attributes):Promise}):void

deferResolve(toResolve:{(...attributes):Promise}):void

preResolve and deferResolve are two out of box created resolve types.

export const preResolve = resolve.bind(undefined, PRE_RESOLVE_HOOK);
export const deferResolve = resolve.bind(undefined, DEFER_RESOLVE_HOOK);

Those are two basic resolve functions, but you can create own. Resolve example reworked:

export const myAnalyticsResolve = resolve.bind(undefined, 'MY_ANALYTICS_EVENT');

//then in another file you import myAnalyticsResolve
const toResolve = ({location, analytics}) => analytics.push(location);
@myAnalyticsResolve(toResolve)
class SomeComponent extends Component {
...

createGlobalHook(action:{(...attributes):Promise}[, hookOptions:HookOptions]):HookObject

Used for creating hook object which will fire global actions. This can be used for showing loader bar or some actions, that must execute on every route transition. Attributes received in action parameter are location, params, components and all custom attributes defined in createResolve, respectively createClientResolver.

createLocalHook(hookName:String[, hookOptions:HookOptions]):HookObject

Used for creating hook object which will fire component resolve actions. hookName attribute must be same as in resolve function defined above.

createTransitionHook([hookOptions:HookOptions]):HookObject

Special hook used for defining when should transition or render (on server) execute.

HookOptions

stopOnException = true

If any promise returned from globalHook action or localHook component action will be rejected, no more hooks layer will be triggered. Only exception are hooks which have executeIfPreviousFailed set to true.

executeIfPreviousFailed = false

If any previous hooks rejected, only hooks defined with executeIfPreviousFailed to true will be fired.

createResolver():Resolver

Creates empty resolver object. It's used for creating hook layers which will be triggered parallelly and chaining them to sequence. Resolver is meant to be used on the server. On the client, you can use createClientResolver, which wrap createResolver and adds more functionality around transitioning

Resolver.addHooks(...attributes:String|Function|HookObject):Object

Creates hook layer for resolver. All attributes in this function will be triggered at the same time, and if any of them return promise, triggering of next layer hooks will be delayed. If promise of hook, which have stopOnException set to true will reject, every next hook layer will trigger only hooks with executeIfPreviousFailed set to true.

addHooks accepts all three of hook types, but you can insert string or function too. String will be transformed to createLocalHook(name) and function to createGlobalHook(action) with options set to default values.

Object returned from addHooks have two methods, addHooks and setErroHandler because we suggest to write them in chain for better readability.

Resolver.setErrorHandler(errorHandler:{(err):void})

If any of the hooks failed, you can create custom error handler. Error handler accept fucntion which have error as it's first argument.

Resolver.triggerHooks(components:ReactComponent[], attributes:Object[, transition:Function]):Promise

Function for triggering transition. It accepts react components from react-router, all attributes you want to pass to resolve functions and global hook's actions. We recommend to insert location, params from renderProps. If you are using redux, you can insert getState and dispatch, but it's up to you what you need and what you don't.

Only single notice, make sure that attributes inserted to all resolver are same. Client resolver is inserting location and params in it's implementation.

createClientResolver(history:History, routes: Routes, initLocation:Location[, attributes:Object]):ClientResolver

Used for creating client resolver object. First attribute must be history object, from react-router or dirrectly fro m history package. Second attributes are routes used in router and third argument is object with you custom attributes. You can read more about attributes in Resolver.triggerHooks method.

Client resolver will trigger hooks on every route transition which change location.pathname or location.search. You can change this with setTransitionRule or trigger hooks with forceTrigger.

ClientResolver.addHooks(...attributes:String|Function|HookObject):Object

Same as Resolver.addHooks

ClientResolver.setErrorHandler(errorHandler:{(err):void}):void

Same as Resolver.setErrorHandler

ClientResolver.forceTrigger():void

If you want to trigger all hooks, withou user changing location, you can call this method and it will run all hooks as defined.

ClientResolver.setTransitionRule(rule:{(oldLocation:Location,newLocation:Location):bool}):void

If you want to change, which transition is transition and which doesn't, use this. By default if oldLocation and newLoation don't have same pathname and search, it's considered to be transition.