diff --git a/frontend/components/FlashMessage/FlashMessage.jsx b/frontend/components/FlashMessage/FlashMessage.jsx
index 723b3b6afc..4f1e5e58b7 100644
--- a/frontend/components/FlashMessage/FlashMessage.jsx
+++ b/frontend/components/FlashMessage/FlashMessage.jsx
@@ -1,24 +1,12 @@
import React, { PropTypes } from 'react';
-import { hideFlash } from '../../redux/nodes/notifications/actions';
import notificationInterface from '../../interfaces/notification';
const baseClass = 'flash-message';
-const FlashMessage = ({ notification, dispatch }) => {
+const FlashMessage = ({ notification, onRemoveFlash, onUndoActionClick }) => {
const { alertType, isVisible, message, undoAction } = notification;
- const submitUndoAction = () => {
- dispatch(undoAction);
- dispatch(hideFlash);
- return false;
- };
-
- const removeFlashMessage = () => {
- dispatch(hideFlash);
- return false;
- };
-
if (!isVisible) {
return false;
}
@@ -31,13 +19,13 @@ const FlashMessage = ({ notification, dispatch }) => {
@@ -47,8 +35,9 @@ const FlashMessage = ({ notification, dispatch }) => {
};
FlashMessage.propTypes = {
- dispatch: PropTypes.func,
notification: notificationInterface,
+ onRemoveFlash: PropTypes.func,
+ onUndoActionClick: PropTypes.func,
};
export default FlashMessage;
diff --git a/frontend/components/side_panels/SiteNavHeader/SiteNavHeader.jsx b/frontend/components/side_panels/SiteNavHeader/SiteNavHeader.jsx
index 08584876cd..4f5b1c7cb0 100644
--- a/frontend/components/side_panels/SiteNavHeader/SiteNavHeader.jsx
+++ b/frontend/components/side_panels/SiteNavHeader/SiteNavHeader.jsx
@@ -1,19 +1,17 @@
import React, { Component, PropTypes } from 'react';
-import { connect } from 'react-redux';
import classnames from 'classnames';
import configInterface from 'interfaces/config';
-import { logoutUser } from 'redux/nodes/auth/actions';
import userInterface from 'interfaces/user';
import Icon from 'components/Icon';
import kolideLogo from '../../../../assets/images/kolide-logo.svg';
import UserMenu from './UserMenu';
-class SiteNavSidePanel extends Component {
+class SiteNavHeader extends Component {
static propTypes = {
config: configInterface,
- dispatch: PropTypes.func,
+ onLogoutUser: PropTypes.func,
user: userInterface,
};
@@ -31,16 +29,6 @@ class SiteNavSidePanel extends Component {
document.addEventListener('mousedown', closeUserMenu, false);
}
- onLogout = (evt) => {
- evt.preventDefault();
-
- const { dispatch } = this.props;
-
- dispatch(logoutUser());
-
- return false;
- }
-
closeUserMenu = (evt) => {
const { headerNav } = this;
@@ -61,11 +49,12 @@ class SiteNavSidePanel extends Component {
config: {
org_name: orgName,
},
+ onLogoutUser,
user,
} = this.props;
const { userMenuOpened } = this.state;
- const { onLogout, toggleUserMenu } = this;
+ const { toggleUserMenu } = this;
const { enabled, username } = user;
const headerBaseClass = 'site-nav-header';
@@ -99,7 +88,7 @@ class SiteNavSidePanel extends Component {
@@ -108,5 +97,4 @@ class SiteNavSidePanel extends Component {
}
}
-const ConnectedComponent = connect()(SiteNavSidePanel);
-export default ConnectedComponent;
+export default SiteNavHeader;
diff --git a/frontend/components/side_panels/SiteNavSidePanel/SiteNavSidePanel.jsx b/frontend/components/side_panels/SiteNavSidePanel/SiteNavSidePanel.jsx
index 4f06bcc642..6b15aed189 100644
--- a/frontend/components/side_panels/SiteNavSidePanel/SiteNavSidePanel.jsx
+++ b/frontend/components/side_panels/SiteNavSidePanel/SiteNavSidePanel.jsx
@@ -1,19 +1,14 @@
import React, { Component, PropTypes } from 'react';
-import { connect } from 'react-redux';
-import { isEqual } from 'lodash';
-import { push } from 'react-router-redux';
import classnames from 'classnames';
-import { logoutUser } from 'redux/nodes/auth/actions';
import userInterface from 'interfaces/user';
import Icon from 'components/Icon';
-import { activeTabFromPathname, activeSubTabFromPathname } from './helpers';
import navItems from './navItems';
class SiteNavSidePanel extends Component {
static propTypes = {
- dispatch: PropTypes.func,
+ onNavItemClick: PropTypes.func,
pathname: PropTypes.string,
user: userInterface,
};
@@ -21,78 +16,24 @@ class SiteNavSidePanel extends Component {
constructor (props) {
super(props);
- const { pathname, user: { admin } } = this.props;
+ const { user: { admin } } = this.props;
this.userNavItems = navItems(admin);
- const activeTab = activeTabFromPathname(this.userNavItems, pathname);
- const activeSubItem = activeSubTabFromPathname(activeTab, pathname);
-
this.state = {
- activeTab,
- activeSubItem,
showSubItems: false,
userMenuOpened: false,
};
}
- componentWillReceiveProps (nextProps) {
- if (isEqual(nextProps, this.props)) return false;
-
- const { pathname } = nextProps;
-
- const activeTab = activeTabFromPathname(this.userNavItems, pathname);
- const activeSubItem = activeSubTabFromPathname(activeTab, pathname);
-
- this.setState({
- activeTab,
- activeSubItem,
- });
-
- return false;
- }
-
- onLogout = (evt) => {
- evt.preventDefault();
-
- const { dispatch } = this.props;
-
- dispatch(logoutUser());
-
- return false;
- }
-
- setActiveSubItem = (activeSubItem) => {
+ onNavItemClick = (navItem) => {
return (evt) => {
evt.preventDefault();
- if (activeSubItem) {
- const { dispatch } = this.props;
- const { path: { location: tabLocation } } = activeSubItem;
+ const { onNavItemClick: handleNavItemClick } = this.props;
+ const { pathname: navItemPathname } = navItem.location;
- if (!tabLocation) return false;
-
- dispatch(push(tabLocation));
- }
-
- return false;
- };
- }
-
- setActiveTab = (activeTab) => {
- return (evt) => {
- evt.preventDefault();
-
- const { pathname, dispatch } = this.props;
- const activeSubItem = activeSubTabFromPathname(activeTab, pathname);
-
- this.setState({ activeTab, activeSubItem });
-
- const tabLocation = activeSubItem ? activeSubItem.path.location : activeTab.path.location;
-
- dispatch(push(tabLocation));
-
- return false;
+ return handleNavItemClick(navItemPathname);
};
}
@@ -117,10 +58,10 @@ class SiteNavSidePanel extends Component {
}
renderNavItem = (navItem) => {
- const { activeTab = {} } = this.state;
const { icon, name, subItems } = navItem;
- const active = activeTab.name === name;
- const { renderSubItems, setActiveTab } = this;
+ const { pathname } = this.props;
+ const { onNavItemClick, renderSubItems } = this;
+ const active = navItem.location.regex.test(pathname);
const navItemBaseClass = 'site-nav-item';
@@ -133,7 +74,7 @@ class SiteNavSidePanel extends Component {