web: People: Refactoring:

+ Moved checkResponseError to utils.js;
+ Fixed actions after saving group;
+ Re-written fetchPeople action
This commit is contained in:
Alexey Safronov 2019-10-04 09:22:46 +03:00
parent 7bb68bab74
commit 521abaada9
6 changed files with 65 additions and 53 deletions

View File

@ -28,7 +28,7 @@ import {
updateGroup
} from "../../../../../store/group/actions";
import styled from "styled-components";
import { fetchSelectorUsers } from "../../../../../store/people/actions";
import { fetchSelectorUsers, fetchPeople, fetchGroups } from "../../../../../store/people/actions";
import { GUID_EMPTY } from "../../../../../helpers/constants";
import isEqual from "lodash/isEqual";
@ -242,6 +242,9 @@ class SectionBodyContent extends React.Component {
newGroup.id = group.id;
this.save(newGroup)
.then(group => {
toastr.success(`Group '${group.name}' has been saved successfully`);
})
.catch(error => {
toastr.error(error.message);
this.setState({ inLoading: false });
@ -567,11 +570,11 @@ function mapStateToProps(state) {
settings: state.auth.settings,
group: state.group.targetGroup,
groups: convertGroups(state.people.groups),
users: convertUsers(state.people.selector.users) //TODO: replace to api requests with search
users: convertUsers(state.people.selector.users), //TODO: replace to api requests with search
};
}
export default connect(
mapStateToProps,
{ resetGroup, createGroup, updateGroup, fetchSelectorUsers }
{ resetGroup, createGroup, updateGroup, fetchSelectorUsers, fetchPeople, fetchGroups }
)(withRouter(withTranslation()(SectionBodyContent)));

View File

@ -0,0 +1,6 @@
export function checkResponseError(res) {
if (res && res.data && res.data.error) {
console.error(res.data.error);
throw new Error(res.data.error.message);
}
}

View File

@ -1,5 +1,5 @@
import * as api from "../services/api";
import { setGroups, fetchPeopleAsync } from "../people/actions";
import { fetchGroups, fetchPeople } from "../people/actions";
import setAuthorizationToken from "../../store/services/setAuthorizationToken";
import { getFilterByLocation } from "../../helpers/converters";
import config from "../../../package.json";
@ -57,9 +57,7 @@ export async function getUserInfo(dispatch) {
dispatch(setModules(modules));
dispatch(setSettings(newSettings));
const groupResp = await api.getGroupList();
dispatch(setGroups(groupResp.data.response));
await fetchGroups(dispatch);
var re = new RegExp(`${config.homepage}((/?)$|/filter)`, "gm");
const match = window.location.pathname.match(re);
@ -67,7 +65,7 @@ export async function getUserInfo(dispatch) {
if (match && match.length > 0)
{
const newFilter = getFilterByLocation(window.location);
await fetchPeopleAsync(dispatch, newFilter);
await fetchPeople(newFilter, dispatch);
}
return dispatch(setIsLoaded(true));

View File

@ -1,5 +1,7 @@
import * as api from "../../store/services/api";
import { setGroups, fetchPeopleByFilter } from "../people/actions";
import { setGroups, fetchPeople, fetchGroups } from "../people/actions";
import { checkResponseError } from "../../helpers/utils";
import history from "../../history";
export const SET_GROUP = "SET_GROUP";
export const CLEAN_GROUP = "CLEAN_GROUP";
@ -17,13 +19,6 @@ export function resetGroup() {
};
}
export function checkResponseError(res) {
if (res && res.data && res.data.error) {
console.error(res.data.error);
throw new Error(res.data.error.message);
}
}
export function fetchGroup(groupId) {
return dispatch => {
api.getGroup(groupId).then(res => {
@ -36,49 +31,38 @@ export function fetchGroup(groupId) {
export function createGroup(groupName, groupManager, members) {
return (dispatch, getState) => {
const { people } = getState();
const { groups, filter } = people;
const { groups } = people;
return api
.createGroup(groupName, groupManager, members)
.then(res => {
checkResponseError(res);
history.goBack();
const newGroup = res.data.response;
dispatch(setGroups([...groups, newGroup]))
dispatch(resetGroup());
dispatch(setGroups([...groups, newGroup]));
return Promise.resolve(newGroup);
}).then((group) => {
const newFilter = filter.clone();
newFilter.group = group.id;
return fetchPeopleByFilter(dispatch, newFilter);
});;
});
};
}
export function updateGroup(id, groupName, groupManager, members) {
return (dispatch, getState) => {
const { people } = getState();
const { groups, filter } = people;
const { groups } = people;
return api
.updateGroup(id, groupName, groupManager, members)
.then(res => {
checkResponseError(res);
history.goBack();
const newGroup = res.data.response;
dispatch(resetGroup());
const newGroups = groups.map(g =>
g.id === newGroup.id ? newGroup : g
);
dispatch(setGroups(newGroups));
dispatch(resetGroup());
return Promise.resolve(newGroup);
}).then((group) => {
const newFilter = filter.clone();
newFilter.group = group.id;
return fetchPeopleByFilter(dispatch, newFilter);
});
};
}
@ -96,7 +80,7 @@ export function deleteGroup(id) {
})
.then(() => {
const newFilter = filter.clone(true);
return fetchPeopleByFilter(dispatch, newFilter);
return fetchPeople(newFilter, dispatch);
});
};
}

View File

@ -14,6 +14,7 @@ import {
PAGE_COUNT,
EmployeeStatus
} from "../../helpers/constants";
import { checkResponseError } from "../../helpers/utils";
export const SET_GROUPS = "SET_GROUPS";
export const SET_USERS = "SET_USERS";
@ -69,7 +70,7 @@ export function selectGroup(groupId) {
let newFilter = filter.clone();
newFilter.group = groupId;
return fetchPeopleByFilter(dispatch, newFilter);
return fetchPeople(newFilter, dispatch);
};
}
@ -147,14 +148,38 @@ export function fetchSelectorUsers() {
};
}
export function fetchPeople(filter) {
return dispatch => {
return fetchPeopleByFilter(dispatch, filter);
export function fetchGroups(dispatchFunc = null) {
return api.getGroupList()
.then(res => {
checkResponseError(res);
return dispatchFunc
? dispatchFunc(setGroups(res.data.response))
: Promise.resolve(dispatch => dispatch(setGroups(res.data.response)));
});
}
export function fetchPeople(filter, dispatchFunc = null) {
return dispatchFunc ? fetchPeopleByFilter(dispatchFunc, filter)
: (dispatch, getState) => {
if(filter) {
return fetchPeopleByFilter(dispatch, filter);
}
else {
const {people} = getState();
const {filter} = people;
return fetchPeopleByFilter(dispatch, filter);
}
};
}
export function fetchPeopleByFilter(dispatch, filter) {
let filterData = (filter && filter.clone()) || Filter.getDefault();
function fetchPeopleByFilter(dispatch, filter) {
let filterData = (filter && filter.clone());
if(!filterData) {
filterData = Filter.getDefault();
filterData.employeeStatus = EmployeeStatus.Active;
}
return api.getUserList(filterData).then(res => {
filterData.total = res.data.total;
@ -167,7 +192,7 @@ export function fetchPeopleByFilter(dispatch, filter) {
});
}
export async function fetchPeopleAsync(dispatch, filter = null) {
/*export async function fetchPeopleAsync(dispatch, filter = null) {
let filterData = (filter && filter.clone());
if(!filterData) {
@ -185,7 +210,7 @@ export async function fetchPeopleAsync(dispatch, filter = null) {
groupId: filterData.group
});
dispatch(setUsers(usersResp.data.response));
}
}*/
export function updateUserStatus(status, userIds) {
return dispatch => {
@ -224,6 +249,6 @@ export function resetFilter() {
const newFilter = filter.clone(true);
return fetchPeopleByFilter(dispatch, newFilter);
return fetchPeople(newFilter, dispatch);
};
}

View File

@ -1,8 +1,9 @@
import * as api from "../../store/services/api";
import { isMe } from '../auth/selectors';
import { getUserByUserName } from '../people/selectors';
import { fetchPeopleByFilter } from "../people/actions";
import { fetchPeople } from "../people/actions";
import { setCurrentUser } from "../auth/actions";
import { checkResponseError } from "../../helpers/utils";
export const SET_PROFILE = 'SET_PROFILE';
export const CLEAN_PROFILE = 'CLEAN_PROFILE';
@ -20,12 +21,7 @@ export function resetProfile() {
};
};
export function checkResponseError(res) {
if (res && res.data && res.data.error) {
console.error(res.data.error);
throw new Error(res.data.error.message);
}
}
export function employeeWrapperToMemberModel(profile) {
const comment = profile.notes;
@ -67,7 +63,7 @@ export function createProfile(profile) {
result = res.data.response;
return dispatch(setProfile(result));
}).then(() => {
return fetchPeopleByFilter(dispatch, filter);
return fetchPeople(filter, dispatch);
}).then(() => {
return Promise.resolve(result);
});
@ -86,7 +82,7 @@ export function updateProfile(profile) {
result = res.data.response;
return Promise.resolve(dispatch(setProfile(result)));
}).then(() => {
return fetchPeopleByFilter(dispatch, filter);
return fetchPeople(filter, dispatch);
}).then(() => {
return Promise.resolve(result);
});