UNPKG

react-crossroads

Version:

Client side router for web applications built with React and utilizing the Flux architecture. The backing routing engine is CrossroadsJs.

71 lines (65 loc) 2.28 kB
var LocationAttempt, Logger, React, RouterConstants; React = require('react'); RouterConstants = require('../constants/RouterConstants'); Logger = require('../utils/logger'); LocationAttempt = { contextTypes: { router: React.PropTypes.object.isRequired }, getInitialState: function() { return { LocationAttempt: { attemptDispatchToken: this.context.router.dispatcher.register(this.locationAttemptDispatcherHandler) } }; }, componentWillUnmount: function() { if (this.state.LocationAttempt.attemptDispatchToken != null) { return this.context.router.dispatcher.unregister(this.state.LocationAttempt.attemptDispatchToken); } }, locationAttemptDispatcherHandler: function(payload) { var lastAttempt, _ref, _ref1; if (!this.isMounted()) { return; } this.context.router.dispatcher.waitFor([this.context.router.stores.location.dispatchToken]); if (!(this.context.router.stores.location.isBlocked() || (payload != null ? (_ref = payload.action) != null ? _ref.actionType : void 0 : void 0) === RouterConstants.LOCATION_UNBLOCK)) { this.dismissLocationAttempt(); } if ((payload != null ? (_ref1 = payload.action) != null ? _ref1.actionType : void 0 : void 0) !== RouterConstants.LOCATION_ATTEMPT) { return; } lastAttempt = payload.action.originalAction; lastAttempt.fromLocationEvent = false; this.setState({ LocationAttempt: { lastAttempt: lastAttempt } }); if (this.handleLocationAttempt) { return this.handleLocationAttempt(); } }, dismissLocationAttempt: function() { this.setState({ LocationAttempt: { lastAttempt: null } }); if (this.handleLocationAttemptDismissed) { return this.handleLocationAttemptDismissed(); } }, continueLocationAttempt: function() { if (this.state.LocationAttempt.lastAttempt == null) { return; } if (this.context.router.stores.location.isBlocked()) { Logger.development.warn('Continuing transition when the location store is still blocked!'); } this.dismissLocationAttempt(); return this.context.router.actions._dispatch(this.state.LocationAttempt.lastAttempt); } }; module.exports = LocationAttempt;