fix: onboarding redirect on signup

This commit is contained in:
Shekar Siri 2021-05-19 18:28:38 +05:30
parent 872475f370
commit 8ae57ef66d
3 changed files with 34 additions and 6 deletions

View file

@ -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 &&
<Redirect to={ withSiteId(ONBOARDING_REDIRECT_PATH, siteId)} />
}
{ siteIdList.length === 0 &&
<Redirect to={ routes.client(routes.CLIENT_TABS.SITES) } />
}

View file

@ -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'}
</Button>
@ -53,4 +59,4 @@ const OnboardingNavButton = (props) => {
)
}
export default withRouter(OnboardingNavButton)
export default withRouter(connect(null, { setOnboarding })(OnboardingNavButton))

View file

@ -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
};
}