UNPKG

office-ui-fabric-react

Version:

Reusable React components for building experiences for Office 365.

94 lines (92 loc) 3.09 kB
"use strict"; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var React = require('react'); var EventGroup_1 = require('../eventGroup/EventGroup'); var Router = (function (_super) { __extends(Router, _super); function Router() { _super.call(this); this.state = { path: location.hash }; this._events = new EventGroup_1.EventGroup(this); } Router.prototype.componentDidUpdate = function (prevProps, prevState) { if (this.state.path !== prevState.path) { window.scrollTo(0, 0); } }; Router.prototype.render = function () { return _getComponent(this.state.path, this.props.children); }; Router.prototype.componentDidMount = function () { var _this = this; this._events.on(window, 'hashchange', function () { if (_this.state.path !== location.hash) { _this.setState({ path: location.hash }, function () { if (_this.props.onNewRouteLoaded) { _this.props.onNewRouteLoaded(); } }); } }); if (this.props.onNewRouteLoaded) { this.props.onNewRouteLoaded(); } }; Router.prototype.componentWillUnmount = function () { this._events.dispose(); }; return Router; }(React.Component)); exports.Router = Router; function _getComponent(matchPath, children) { var path = matchPath; if (children && children.$$typeof) { children = [children]; } // Check if an in page anchor link was passed to the Url #/example/route#inPageAnchorLink if (_hasAnchorLink(path)) { // Extract the base path #/example/route - #inPageAnchorLink path = _extractRoute(path); } for (var i = 0; children && i < children.length; i++) { var currentChild = children[i]; if (_match(path, currentChild)) { var component = currentChild.props.component; var childComponent = _getComponent(path, currentChild.props.children); return React.createElement(component, null, childComponent); } } return null; } function _hasAnchorLink(path) { return (path.match(/#/g) || []).length > 1; } /* Extract the route from the URL minus the in page anchor link Example URL #/example/route#inPageAnchorLink Returns #/example/route */ function _extractRoute(path) { var index = path.lastIndexOf('#'); if (index >= 0) { path = path.substr(0, index); } return path; } function _match(currentPath, child) { if (child.props) { var path = child.props.path; path = path || ''; currentPath = currentPath || ''; return ((!path) || (path.toLowerCase() === currentPath.toLowerCase())); } return false; } //# sourceMappingURL=Router.js.map