From 8ae57ef66d2e33368dc6b5b5c49137f5b948882e Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Wed, 19 May 2021 18:28:38 +0530 Subject: [PATCH] fix: onboarding redirect on signup --- frontend/app/Router.js | 8 +++++++- .../OnboardingNavButton.js | 12 ++++++++--- frontend/app/duck/user.js | 20 +++++++++++++++++-- 3 files changed, 34 insertions(+), 6 deletions(-) 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 + }; +} +