react-redux-app-header
Version:
A boilerplate app header for your projects, with navigation and login / logout
172 lines (137 loc) • 6.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactRedux = require('react-redux');
var _reactRouter = require('react-router');
var _reactRouterRedux = require('react-router-redux');
var _reactBootstrap = require('react-bootstrap');
var _reactReduxAuth = require('react-redux-auth0');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Logout = _reactReduxAuth.AuthComponents.Logout;
var LoginSignup = _reactReduxAuth.AuthComponents.LoginSignup;
var NavItem = function (_React$Component) {
_inherits(NavItem, _React$Component);
function NavItem() {
_classCallCheck(this, NavItem);
return _possibleConstructorReturn(this, Object.getPrototypeOf(NavItem).apply(this, arguments));
}
_createClass(NavItem, [{
key: 'render',
value: function render() {
var _props = this.props;
var to = _props.to;
var navItemComponent = _props.navItemComponent;
var key = _props.key;
var text = _props.text;
var routing = _props.routing;
var dispatch = _props.dispatch;
var path = routing.location ? routing.location.pathname : routing.locationBeforeTransitions.pathname;
var pathMatch = function pathMatch(match) {
return path == '/' + match || path.indexOf(match) == 1;
};
var active = 'active';
return _react2.default.createElement(
'li',
{ className: pathMatch(to) ? active : '', role: 'presentation', key: key },
_react2.default.createElement(
_reactRouter.Link,
{ href: '#', to: to },
navItemComponent,
text
)
);
}
}]);
return NavItem;
}(_react2.default.Component);
var AppHeader = function (_React$Component2) {
_inherits(AppHeader, _React$Component2);
function AppHeader(props) {
_classCallCheck(this, AppHeader);
return _possibleConstructorReturn(this, Object.getPrototypeOf(AppHeader).call(this, props));
}
_createClass(AppHeader, [{
key: 'render',
value: function render() {
var props = this.props;
var routing = props.routing;
var auth = props.auth;
var dispatch = props.dispatch;
var routes = props.routes;
var addtlComponent = props.addtlComponent;
var signup = props.signup;
var alternateSignup = props.alternateSignup;
var authenticated = auth.token;
var notAuth = _react2.default.createElement(
'div',
{ className: 'auth-login-signup' },
_react2.default.createElement(LoginSignup, { login: true }),
' ',
props.signup && _react2.default.createElement(
'div',
null,
'or ',
_react2.default.createElement(LoginSignup, { signup: true })
),
' ',
alternateSignup && alternateSignup
);
return _react2.default.createElement(
_reactBootstrap.Navbar,
null,
_react2.default.createElement(
_reactBootstrap.Navbar.Header,
null,
_react2.default.createElement(
_reactBootstrap.Navbar.Brand,
null,
_react2.default.createElement(
_reactRouter.Link,
{ to: props.brandLink },
props.appTitle
)
),
authenticated && _react2.default.createElement(_reactBootstrap.Navbar.Toggle, null),
authenticated && _react2.default.createElement(Logout, null),
!authenticated && notAuth,
this.props.children
),
addtlComponent,
authenticated && _react2.default.createElement(
_reactBootstrap.Navbar.Collapse,
null,
_react2.default.createElement(
_reactBootstrap.Nav,
{ id: 'nav-primary' },
Object.keys(routes).map(function (key) {
var route = routes[key];
var args = { routing: routing, dispatch: dispatch, to: route.path, text: route.text, key: key, navItemComponent: route.navItemComponent };
return _react2.default.createElement(NavItem, args);
})
)
)
);
}
}]);
return AppHeader;
}(_react2.default.Component);
exports.default = AppHeader;
AppHeader.defaultProps = {
brandLink: '/',
appTitle: 'app',
routes: {},
signup: true,
alternateSignup: false
};
exports.default = (0, _reactRedux.connect)(function (state) {
var auth = state.auth;
var routing = state.routing;
return { auth: auth, routing: routing };
})(AppHeader);