web: People: Added opportunity to change employee type

This commit is contained in:
Alexey Safronov 2019-08-22 17:11:38 +03:00
parent 15b2be66ed
commit fe2ecf4773
5 changed files with 95 additions and 7 deletions

View File

@ -4,8 +4,8 @@ import { connect } from 'react-redux';
import { getSelectedGroup, getSelectionIds } from '../../../../../store/people/selectors';
import { isAdmin } from '../../../../../store/auth/selectors';
import { withTranslation } from 'react-i18next';
import { updateUserStatus } from '../../../../../store/people/actions';
import { EmployeeStatus } from '../../../../../helpers/constants';
import { updateUserStatus, updateUserType } from '../../../../../store/people/actions';
import { EmployeeStatus, EmployeeType } from '../../../../../helpers/constants';
const contextOptions = () => {
return [
@ -38,7 +38,8 @@ const SectionHeaderContent = ({
isAdmin,
t,
selection,
updateUserStatus
updateUserStatus,
updateUserType
}) => {
const selectedUserIds = getSelectionIds(selection);
console.log("SectionHeaderContent render", selection, selectedUserIds);
@ -53,6 +54,16 @@ const SectionHeaderContent = ({
toastr.success("Set disabled action");
}, [selectedUserIds, updateUserStatus]);
const onSetEmployee = useCallback(() => {
updateUserType(EmployeeType.User, selectedUserIds);
toastr.success("Set user(s) as employees");
}, [selectedUserIds, updateUserType]);
const onSetGuest = useCallback(() => {
updateUserType(EmployeeType.Guest, selectedUserIds);
toastr.success("Set user(s) as guests");
}, [selectedUserIds, updateUserType]);
const menuItems = [
{
label: "Select",
@ -70,12 +81,12 @@ const SectionHeaderContent = ({
{
label: "Make employee",
disabled: !selection.length,
onClick: toastr.success.bind(this, "Make employee action")
onClick: onSetEmployee
},
{
label: "Make guest",
disabled: !selection.length,
onClick: toastr.success.bind(this, "Make guest action")
onClick: onSetGuest
},
{
label: "Set active",
@ -147,4 +158,4 @@ const SectionHeaderContent = ({
}
}
export default connect(mapStateToProps, { updateUserStatus })(withTranslation()(SectionHeaderContent));
export default connect(mapStateToProps, { updateUserStatus, updateUserType })(withTranslation()(SectionHeaderContent));

View File

@ -18,4 +18,13 @@ export const EmployeeActivationStatus = Object.freeze({
export const EmployeeStatus = Object.freeze({
Active: 1,
Disabled: 2
});
});
/**
* Enum for employee status.
* @readonly
*/
export const EmployeeType = Object.freeze({
User: 1,
Guest: 2
});

View File

@ -120,6 +120,21 @@ export function updateUserStatus(status, userIds) {
};
}
export function updateUserType(type, userIds) {
return dispatch => {
return api.updateUserType(type, userIds).then(res => {
if (res && res.data && res.data.error && res.data.error.message)
throw res.data.error.message;
const users = res.data.response;
users.forEach(user => {
dispatch(setUser(user));
});
});
};
}
export function resetFilter() {
return (dispatch, getState) => {
const { people } = getState();

View File

@ -80,3 +80,9 @@ export function updateUserStatus(status, userIds) {
? fakeApi.updateUserStatus(status, userIds)
: axios.put(`${API_URL}/people/status/${status}`, { userIds });
}
export function updateUserType(type, userIds) {
return IS_FAKE
? fakeApi.updateUserType(type, userIds)
: axios.put(`${API_URL}/people/type/${type}`, { userIds });
}

View File

@ -312,3 +312,50 @@ export function updateUserStatus(status, userIds) {
}
]);
}
export function updateUserType(type, userIds) {
return fakeResponse([
{
id: userIds[0],
userName: "Mike.Zanyatski",
isVisitor: type === 1 ? false : true,
firstName: "Mike",
lastName: "Zanyatski",
email: "my@gmail.com",
birthday: "2019-08-19T01:39:25.3240031Z",
sex: "male",
status: 1,
activationStatus: 0,
terminated: "2019-08-19T01:39:25.3240031Z",
department: "Marketing",
workFrom: "2019-08-19T01:39:25.3240031Z",
location: "Palo Alto",
notes: "Notes to worker",
displayName: null,
title: "Manager",
contacts: [
{
type: "GTalk",
value: "my@gmail.com"
}
],
groups: [
{
id: "00000000-0000-0000-0000-000000000000",
name: "Group Name",
manager: "Jake.Zazhitski"
}
],
avatarMedium: "url to medium avatar",
avatar: "url to big avatar",
isAdmin: false,
isLDAP: false,
listAdminModules: ["projects", "crm"],
isOwner: false,
cultureName: "en-EN",
isSSO: false,
avatarSmall: "url to small avatar",
profileUrl: ""
}
]);
}