diff --git a/src/actions/__tests__/userManagement.test.js b/src/actions/__tests__/userManagement.test.js index 321926e7a2..3a7d476600 100644 --- a/src/actions/__tests__/userManagement.test.js +++ b/src/actions/__tests__/userManagement.test.js @@ -187,7 +187,7 @@ describe('User Management Actions', () => { { type: 'RECEIVE_USER_PROFILE_BASIC_INFO', payload: mockBasicInfo } ]; - await store.dispatch(actions.getUserProfileBasicInfo({source: mockSource})); + await store.dispatch(actions.getUserProfileBasicInfo({ source: mockSource })); expect(store.getActions()).toEqual(expectedActions); expect(axios.get).toHaveBeenCalledWith(ENDPOINTS.USER_PROFILE_BASIC_INFO(mockSource)); }); diff --git a/src/actions/userManagement.js b/src/actions/userManagement.js index c5f008167b..abb21ea927 100644 --- a/src/actions/userManagement.js +++ b/src/actions/userManagement.js @@ -14,6 +14,7 @@ import { DISABLE_USER_PROFILE_EDIT, CHANGE_USER_PROFILE_PAGE, START_USER_INFO_UPDATE, + CLEAR_USER_INFO_UPDATE } from '../constants/userManagement'; import { ENDPOINTS } from '~/utils/URL'; import { UserStatus, UserStatusOperations, InactiveReason } from '~/utils/enums'; @@ -109,7 +110,9 @@ export const userProfilesBasicInfoFetchCompleteACtion = payload => { export const getAllUserProfile = () => { const userProfilesPromise = axios.get(ENDPOINTS.USER_PROFILES); return async dispatch => { + await dispatch(userProfilesFetchStartAction()); + if (!userProfilesPromise || typeof userProfilesPromise.then !== 'function') { return Promise.resolve([]); } @@ -139,18 +142,18 @@ const resolveEndDate = (user) => { //2) if no lastActivityAt, use createdDate (if present) // format createdDate to real datetime in COMPANY_TZ - if(!user?.lastActivityAt && user?.createdDate) { + if (!user?.lastActivityAt && user?.createdDate) { const created = moment.tz(user.createdDate, 'YYYY-MM-DD', COMPANY_TZ).startOf('day'); return created.toISOString(); } //3) if no createdDate -> endDate will be set as passed - if(user?.endDate) { + if (user?.endDate) { return moment(user.endDate).toISOString(); } // optional: if lastActivityAt is present, use that - if(user?.lastActivityAt) { + if (user?.lastActivityAt) { return moment(user.lastActivityAt).toISOString(); } @@ -159,7 +162,7 @@ const resolveEndDate = (user) => { } export const buildUpdatedUserLifecycleDetails = (user, payload) => { - const {action, endDate, reactivationDate} = payload; + const { action, endDate, reactivationDate } = payload; switch (action) { case UserStatusOperations.ACTIVATE: return { @@ -204,7 +207,7 @@ export const buildUpdatedUserLifecycleDetails = (user, payload) => { const buildBackendPayload = (userDetails, action) => { console.log('Building backend payload with:', { userDetails, action }); - switch (action){ + switch (action) { case UserStatusOperations.ACTIVATE: return { action: action, @@ -406,4 +409,8 @@ export const changePagination = value => dispatch => { export const updateUserInfomation = value => dispatch => { dispatch({ type: START_USER_INFO_UPDATE, payload: value }); +}; + +export const clearUserInformation = () => dispatch => { + dispatch({ type: CLEAR_USER_INFO_UPDATE }); }; \ No newline at end of file diff --git a/src/components/UserManagement/UserTableHeader.jsx b/src/components/UserManagement/UserTableHeader.jsx index 1a03114525..fd2189aa1d 100644 --- a/src/components/UserManagement/UserTableHeader.jsx +++ b/src/components/UserManagement/UserTableHeader.jsx @@ -4,7 +4,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faEdit, faSave } from '@fortawesome/free-solid-svg-icons'; import axios from 'axios'; import { toast } from 'react-toastify'; -import { getAllUserProfile } from '../../actions/userManagement'; +import { getAllUserProfile , clearUserInformation} from '../../actions/userManagement'; import { ENDPOINTS } from '~/utils/URL'; import userTableDataPermissions from '../../utils/userTableDataPermissions'; import PropTypes from 'prop-types'; @@ -29,13 +29,24 @@ import styles from './usermanagement.module.css'; */ const UserTableHeaderComponent = ({ authRole, roleSearchText, darkMode, editUser, enableEditUserInfo, disableEditUserInfo, isMobile, mobileFontSize }) => { const dispatch = useDispatch(); - const [editFlag, setEditFlag] = useState(editUser); + const defaultEditFlags = { + first: 1, + last: 1, + role: 1, + jobTitle: 1, + email: 1, + weeklycommittedHours: 1, + startDate: 1, + endDate: 1, + }; + const [editFlag, setEditFlag] = useState(editUser ? editUser : defaultEditFlags); const updatedUserData = useSelector(state => state.userProfileEdit.newUserData); const saveUserInformation = async updatedData => { try { const response = await axios.patch(ENDPOINTS.USER_PROFILE_UPDATE, updatedData); if (response.status === 200) { const toastId = toast.success(' Saving Data...', { autoClose: false }); + await dispatch(clearUserInformation()); await dispatch(getAllUserProfile()); toast.update(toastId, { render: 'Data Updated successfully !', diff --git a/src/constants/userManagement.js b/src/constants/userManagement.js index 0d93bc4e92..f93da4bca7 100644 --- a/src/constants/userManagement.js +++ b/src/constants/userManagement.js @@ -14,3 +14,4 @@ export const CHANGE_USER_PROFILE_PAGE = 'CHANGE_USER_PROFILE_PAGE'; export const START_USER_INFO_UPDATE = 'START_USER_INFO_UPDATE'; export const FINISH_USER_INFO_UPDATE = 'FINISH_USER_INFO_UPDATE'; export const ERROR_USER_INFO_UPDATE = 'ERROR_USER_INFO_UPDATE'; +export const CLEAR_USER_INFO_UPDATE = 'CLEAR_USER_INFO_UPDATE'; diff --git a/src/reducers/allUserProfilesReducer.js b/src/reducers/allUserProfilesReducer.js index b7c17f9983..ace5e375e5 100644 --- a/src/reducers/allUserProfilesReducer.js +++ b/src/reducers/allUserProfilesReducer.js @@ -85,6 +85,8 @@ export const enableUserInfoEditReducer = (userProfile = userProfilesInitial, act return updateObject(userProfile, { editable: action.payload }); case 'START_USER_INFO_UPDATE': return { ...userProfile, newUserData: userProfile.newUserData.concat(action.payload) }; + case 'CLEAR_USER_INFO_UPDATE': + return { ...userProfile, newUserData: [] }; default: return userProfile; }