UNPKG

react-router

Version:

A complete routing library for React.js

109 lines (84 loc) 3.07 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _React$PropTypes = _react2['default'].PropTypes; var object = _React$PropTypes.object; var string = _React$PropTypes.string; var func = _React$PropTypes.func; function isLeftClickEvent(event) { return event.button === 0; } function isModifiedEvent(event) { return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey); } /** * <Link> components are used to create an <a> element that links to a route. * When that route is active, the link gets an "active" class name (or the * value of its `activeClassName` prop). * * For example, assuming you have the following route: * * <Route name="showPost" path="/posts/:postID" handler={Post}/> * * You could use the following component to link to that route: * * <Link to="showPost" params={{ postID: "123" }} /> * * In addition to params, links may pass along query string parameters * using the `query` prop. * * <Link to="showPost" params={{ postID: "123" }} query={{ show:true }}/> */ var Link = _react2['default'].createClass({ displayName: 'Link', contextTypes: { router: object }, propTypes: { activeStyle: object, activeClassName: string, to: string.isRequired, query: object, state: object, onClick: func }, getDefaultProps: function getDefaultProps() { return { className: '', activeClassName: 'active', style: {} }; }, handleClick: function handleClick(event) { var allowTransition = true; var clickResult; if (this.props.onClick) clickResult = this.props.onClick(event); if (isModifiedEvent(event) || !isLeftClickEvent(event)) return; if (clickResult === false || event.defaultPrevented === true) allowTransition = false; event.preventDefault(); if (allowTransition) this.context.router.transitionTo(this.props.to, this.props.query, this.props.state); }, render: function render() { var router = this.context.router; var _props = this.props; var to = _props.to; var query = _props.query; var props = _extends({}, this.props, { href: router.makeHref(to, query), onClick: this.handleClick }); // ignore if rendered outside of the context of a router, simplifies unit testing if (router && router.isActive(to, query)) { if (props.activeClassName) props.className += ' ' + props.activeClassName; if (props.activeStyle) _extends(props.style, props.activeStyle); } return _react2['default'].createElement('a', props); } }); exports.Link = Link; exports['default'] = Link;