content: import warning from './routerWarning';
  import React from 'react';
  import invariant from 'invariant';
  
  var object = React.PropTypes.object;
  
  /**
   * The Lifecycle mixin adds the routerWillLeave lifecycle method to a
   * component that may be used to cancel a transition or prompt the user
   * for confirmation.
   *
   * On standard transitions, routerWillLeave receives a single argument: the
   * location we're transitioning to. To cancel the transition, return false.
   * To prompt the user for confirmation, return a prompt message (string).
   *
   * During the beforeunload event (assuming you're using the useBeforeUnload
   * history enhancer), routerWillLeave does not receive a location object
   * because it isn't possible for us to know the location we're transitioning
   * to. In this case routerWillLeave must return a prompt message to prevent
   * the user from closing the window/tab.
   */
  
  var Lifecycle = {
  
    contextTypes: {
      history: object.isRequired,
      // Nested children receive the route as context, either
      // set by the route component using the RouteContext mixin
      // or by some other ancestor.
      route: object
    },
  
    propTypes: {
      // Route components receive the route object as a prop.
      route: object
    },
  
    componentDidMount: function componentDidMount() {
      process.env.NODE_ENV !== 'production' ? warning(false, 'the `Lifecycle` mixin is deprecated, please use `context.router.setRouteLeaveHook(route, hook)`. http://tiny.cc/router-lifecyclemixin') : void 0;
      !this.routerWillLeave ? process.env.NODE_ENV !== 'production' ? invariant(false, 'The Lifecycle mixin requires you to define a routerWillLeave method') : invariant(false) : void 0;
  
      var route = this.props.route || this.context.route;
  
      !route ? process.env.NODE_ENV !== 'production' ? invariant(false, 'The Lifecycle mixin must be used on either a) a <Route component> or ' + 'b) a descendant of a <Route component> that uses the RouteContext mixin') : invariant(false) : void 0;
  
      this._unlistenBeforeLeavingRoute = this.context.history.listenBeforeLeavingRoute(route, this.routerWillLeave);
    },
    componentWillUnmount: function componentWillUnmount() {
      if (this._unlistenBeforeLeavingRoute) this._unlistenBeforeLeavingRoute();
    }
  };
  
  export default Lifecycle;