diff --git a/frontend/app/Router.js b/frontend/app/Router.js
index b2024c7d4..2706ca2e4 100644
--- a/frontend/app/Router.js
+++ b/frontend/app/Router.js
@@ -21,6 +21,7 @@ import FunnelIssueDetails from 'Components/Funnels/FunnelIssueDetails';
import APIClient from './api_client';
import * as routes from './routes';
+import { OB_DEFAULT_TAB } from 'App/routes';
import Signup from './components/Signup/Signup';
import { fetchTenants } from 'Duck/user';
@@ -48,6 +49,7 @@ const SIGNUP_PATH = routes.signup();
const FORGOT_PASSWORD = routes.forgotPassword();
const CLIENT_PATH = routes.client();
const ONBOARDING_PATH = routes.onboarding();
+const ONBOARDING_REDIRECT_PATH = routes.onboarding(OB_DEFAULT_TAB);
@withRouter
@connect((state) => {
@@ -67,6 +69,7 @@ const ONBOARDING_PATH = routes.onboarding();
organisation: state.getIn([ 'user', 'client', 'name' ]),
tenantId: state.getIn([ 'user', 'client', 'tenantId' ]),
tenants: state.getIn(['user', 'tenants']),
+ onboarding: state.getIn([ 'user', 'onboarding' ])
};
}, {
fetchUserInfo, fetchTenants
@@ -92,7 +95,7 @@ class Router extends React.Component {
}
render() {
- const { isLoggedIn, jwt, siteId, sites, loading, changePassword, location, tenants } = this.props;
+ const { isLoggedIn, jwt, siteId, sites, loading, changePassword, location, tenants, onboarding } = this.props;
const siteIdList = sites.map(({ id }) => id).toJS();
const hideHeader = location.pathname && location.pathname.includes('/session/');
@@ -121,6 +124,9 @@ class Router extends React.Component {
}
}
/>
+ { onboarding &&
+
+ }
{ siteIdList.length === 0 &&
}
diff --git a/frontend/app/components/Onboarding/components/OnboardingNavButton/OnboardingNavButton.js b/frontend/app/components/Onboarding/components/OnboardingNavButton/OnboardingNavButton.js
index 0a048e3cb..d9d24c7df 100644
--- a/frontend/app/components/Onboarding/components/OnboardingNavButton/OnboardingNavButton.js
+++ b/frontend/app/components/Onboarding/components/OnboardingNavButton/OnboardingNavButton.js
@@ -5,6 +5,7 @@ import { Button } from 'UI'
import { OB_TABS, onboarding as onboardingRoute } from 'App/routes'
import * as routes from '../../../../routes'
import { sessions } from 'App/routes';
+import { setOnboarding } from 'Duck/user';
const withSiteId = routes.withSiteId;
const MENU_ITEMS = [OB_TABS.INSTALLING, OB_TABS.IDENTIFY_USERS, OB_TABS.MANAGE_USERS, OB_TABS.INTEGRATIONS]
@@ -25,9 +26,14 @@ const OnboardingNavButton = (props) => {
const tab = MENU_ITEMS[activeIndex+1]
history.push(withSiteId(onboardingRoute(tab), siteId));
} else {
- history.push(sessions());
+ onDone()
}
}
+
+ const onDone = () => {
+ props.setOnboarding(false);
+ history.push(sessions());
+ }
return (
<>
@@ -35,7 +41,7 @@ const OnboardingNavButton = (props) => {
primary
size="small"
plain
- onClick={() => history.push(sessions())}
+ onClick={onDone}
>
{activeIndex === 0 ? 'Done. See Recorded Sessions' : 'Skip Optional Steps and See Recorded Sessions'}
@@ -53,4 +59,4 @@ const OnboardingNavButton = (props) => {
)
}
-export default withRouter(OnboardingNavButton)
\ No newline at end of file
+export default withRouter(connect(null, { setOnboarding })(OnboardingNavButton))
\ No newline at end of file
diff --git a/frontend/app/duck/user.js b/frontend/app/duck/user.js
index d4e00f0b5..deb41e715 100644
--- a/frontend/app/duck/user.js
+++ b/frontend/app/duck/user.js
@@ -19,6 +19,7 @@ const PUT_CLIENT = new RequestTypes('user/PUT_CLIENT');
const PUSH_NEW_SITE = 'user/PUSH_NEW_SITE';
const SET_SITE_ID = 'user/SET_SITE_ID';
+const SET_ONBOARDING = 'user/SET_ONBOARDING';
const SITE_ID_STORAGE_KEY = "__$user-siteId$__";
const storedSiteId = localStorage.getItem(SITE_ID_STORAGE_KEY);
@@ -29,7 +30,8 @@ const initialState = Map({
siteId: null,
passwordRequestError: false,
passwordErrors: List(),
- tenants: []
+ tenants: [],
+ onboarding: false
});
const setClient = (state, data) => {
@@ -48,12 +50,16 @@ const setClient = (state, data) => {
const reducer = (state = initialState, action = {}) => {
switch (action.type) {
case UPDATE_PASSWORD.SUCCESS:
- case SIGNUP.SUCCESS:
case LOGIN.SUCCESS:
return setClient(
state.set('account', Account(action.data.user)),
action.data.client,
);
+ case SIGNUP.SUCCESS:
+ return setClient(
+ state.set('account', Account(action.data.user)),
+ action.data.client,
+ ).set('onboarding', true);
case REQUEST_RESET_PASSWORD.SUCCESS:
break;
case UPDATE_APPEARANCE.REQUEST: //TODO: failure handling
@@ -77,6 +83,8 @@ const reducer = (state = initialState, action = {}) => {
case PUSH_NEW_SITE:
return state.updateIn([ 'client', 'sites' ], list =>
list.push(action.newSite));
+ case SET_ONBOARDING:
+ return state.set('onboarding', action.state)
}
return state;
};
@@ -187,3 +195,11 @@ export function pushNewSite(newSite) {
newSite,
};
}
+
+export function setOnboarding(state = false) {
+ return {
+ type: SET_ONBOARDING,
+ state
+ };
+}
+