From 15fc022e23541fa30c6ff494ef08be82f47814db Mon Sep 17 00:00:00 2001 From: RishiRaj Date: Thu, 25 Apr 2019 17:09:47 +0530 Subject: [PATCH 1/2] - bypassed 'Walkthrough' page when customer non-zero count of non-active projects --- src/projects/actions/loadProjects.js | 30 ++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/projects/actions/loadProjects.js b/src/projects/actions/loadProjects.js index 677e3b7cb..77ff7ad18 100644 --- a/src/projects/actions/loadProjects.js +++ b/src/projects/actions/loadProjects.js @@ -4,7 +4,9 @@ import { SET_SEARCH_TERM, SET_PROJECTS_SEARCH_CRITERIA, CLEAR_PROJECT_SUGGESTIONS_SEARCH, PROJECT_SUGGESTIONS_SEARCH_SUCCESS, SET_PROJECTS_INFINITE_AUTOLOAD, - SET_PROJECTS_LIST_VIEW + SET_PROJECTS_LIST_VIEW, + PROJECT_STATUS_ACTIVE, + ROLE_TOPCODER_USER } from '../../config/constants' import { getProjects } from '../../api/projects' import { loadMembers } from '../../actions/members' @@ -12,6 +14,7 @@ import { loadMembers } from '../../actions/members' // ignore action /*eslint-disable no-unused-vars */ const getProjectsWithMembers = (dispatch, getState, criteria, pageNum) => { + const state = getState() return new Promise((resolve, reject) => { dispatch({ type: SET_PROJECTS_SEARCH_CRITERIA, @@ -21,7 +24,30 @@ const getProjectsWithMembers = (dispatch, getState, criteria, pageNum) => { return dispatch({ type: GET_PROJECTS, - payload: getProjects(criteria, pageNum), + payload: getProjects(criteria, pageNum) + .then((data) => { + const retryForCustomer = criteria.status === PROJECT_STATUS_ACTIVE && state.loadUser.user.roles && state.loadUser.user.roles.length === 1 + && state.loadUser.user.roles[0] === ROLE_TOPCODER_USER + if(data.totalCount === 0 && retryForCustomer) { + //retrying for customer if active projects are 0 but there are some projects with other status + //This is to bypass the walkthrough page which we ideally show for customer with zero projects + const newCriteria = { + sort: 'updatedAt desc' + } + return getProjects(newCriteria, pageNum) + .then((data2) => { + //if there no project in any status return original result + if(data2.totalCount === 0) { + return data + } else { + data2.projects.length = 0 + return data2 + } + }) + } else { + return data + } + }), meta: { // keep previous to enable the loading without paginator (infinite scroll) keepPrevious : pageNum !== 1 From d08de8347b352eb1ac284fadbf291966c41edb0d Mon Sep 17 00:00:00 2001 From: RishiRaj Date: Fri, 26 Apr 2019 11:00:42 +0530 Subject: [PATCH 2/2] Created separate variable in redux store to have count of all projects for customers --- src/projects/actions/loadProjects.js | 18 +++++++----------- .../list/components/Projects/Projects.jsx | 8 ++++---- src/projects/reducers/projectSearch.js | 5 +++-- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/projects/actions/loadProjects.js b/src/projects/actions/loadProjects.js index 77ff7ad18..8a1cd137c 100644 --- a/src/projects/actions/loadProjects.js +++ b/src/projects/actions/loadProjects.js @@ -25,27 +25,23 @@ const getProjectsWithMembers = (dispatch, getState, criteria, pageNum) => { return dispatch({ type: GET_PROJECTS, payload: getProjects(criteria, pageNum) - .then((data) => { + .then((originalData) => { const retryForCustomer = criteria.status === PROJECT_STATUS_ACTIVE && state.loadUser.user.roles && state.loadUser.user.roles.length === 1 && state.loadUser.user.roles[0] === ROLE_TOPCODER_USER - if(data.totalCount === 0 && retryForCustomer) { + if(originalData.totalCount === 0 && retryForCustomer) { //retrying for customer if active projects are 0 but there are some projects with other status //This is to bypass the walkthrough page which we ideally show for customer with zero projects const newCriteria = { sort: 'updatedAt desc' } return getProjects(newCriteria, pageNum) - .then((data2) => { - //if there no project in any status return original result - if(data2.totalCount === 0) { - return data - } else { - data2.projects.length = 0 - return data2 - } + .then((allProjectsData) => { + //add allprojects count to be updated to redux store + originalData.allProjectsCount = allProjectsData.totalCount + return originalData }) } else { - return data + return originalData } }), meta: { diff --git a/src/projects/list/components/Projects/Projects.jsx b/src/projects/list/components/Projects/Projects.jsx index 853603993..ab21b37b8 100755 --- a/src/projects/list/components/Projects/Projects.jsx +++ b/src/projects/list/components/Projects/Projects.jsx @@ -189,12 +189,11 @@ class Projects extends Component { } render() { - const { isPowerUser, isCustomer, isLoading, totalCount, criteria, projectsListView, setProjectsListView, setInfiniteAutoload, loadProjects, history, orgConfig } = this.props + const { isPowerUser, isCustomer, isLoading, totalCount, criteria, projectsListView, setProjectsListView, setInfiniteAutoload, loadProjects, history, orgConfig, allProjectsCount } = this.props // show walk through if user is customer and no projects were returned // for default filters - const showWalkThrough = !isLoading && totalCount === 0 && - _.isEqual(criteria, PROJECT_LIST_DEFAULT_CRITERIA) && - !isPowerUser + const showWalkThrough = !isLoading && !isPowerUser && totalCount === 0 && allProjectsCount === 0 && + _.isEqual(criteria, PROJECT_LIST_DEFAULT_CRITERIA) const getStatusCriteriaText = (criteria) => { return (_.find(PROJECT_STATUS, { value: criteria.status }) || { name: ''}).name } @@ -287,6 +286,7 @@ const mapStateToProps = ({ projectSearch, members, loadUser, projectState, templ projects : projectSearch.projects, members : members.members, totalCount : projectSearch.totalCount, + allProjectsCount: projectSearch.allProjectsCount, pageNum : projectSearch.pageNum, criteria : projectSearch.criteria, infiniteAutoload: projectSearch.infiniteAutoload, diff --git a/src/projects/reducers/projectSearch.js b/src/projects/reducers/projectSearch.js index 2c0324038..dd46414bb 100644 --- a/src/projects/reducers/projectSearch.js +++ b/src/projects/reducers/projectSearch.js @@ -15,6 +15,7 @@ export const initialState = { projects: [], error: false, totalCount: 0, + allProjectsCount: 0, pageNum: 1, // make a copy of constant to avoid unintentional modifications criteria: {...PROJECT_LIST_DEFAULT_CRITERIA}, @@ -53,8 +54,8 @@ export default function(state = initialState, action) { }) case GET_PROJECTS_SUCCESS: { const updatedProjects = action.meta.keepPrevious - ? { projects : { $push : action.payload.projects }, totalCount: { $set : action.payload.totalCount} } - : { projects : { $set : action.payload.projects }, totalCount: { $set : action.payload.totalCount} } + ? { projects : { $push : action.payload.projects }, totalCount: { $set : action.payload.totalCount}, allProjectsCount: { $set : action.payload.allProjectsCount} } + : { projects : { $set : action.payload.projects }, totalCount: { $set : action.payload.totalCount}, allProjectsCount: { $set : action.payload.allProjectsCount} } return update(state, updatedProjects) }