/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
import React, { useCallback, useMemo } from 'react';
import PropTypes from 'prop-types';
import { useDispatch, useSelector } from 'react-redux';
import { useTranslation } from 'react-i18next';
import { Menu } from 'semantic-ui-react';
import { Popup } from '../../../../lib/custom-ui';
import selectors from '../../../../selectors';
import entryActions from '../../../../entry-actions';
import { useSteps } from '../../../../hooks';
import SelectRoleStep from './SelectRoleStep';
import ConfirmationStep from '../../ConfirmationStep';
import EditUserInformationStep from '../../../users/EditUserInformationStep';
import EditUserUsernameStep from '../../../users/EditUserUsernameStep';
import EditUserEmailStep from '../../../users/EditUserEmailStep';
import EditUserPasswordStep from '../../../users/EditUserPasswordStep';
import styles from './ActionsStep.module.scss';
const StepTypes = {
EDIT_INFORMATION: 'EDIT_INFORMATION',
EDIT_USERNAME: 'EDIT_USERNAME',
EDIT_EMAIL: 'EDIT_EMAIL',
EDIT_PASSWORD: 'EDIT_PASSWORD',
EDIT_ROLE: 'EDIT_ROLE',
ACTIVATE: 'ACTIVATE',
DEACTIVATE: 'DEACTIVATE',
DELETE: 'DELETE',
};
const ActionsStep = React.memo(({ userId, onClose }) => {
const selectUserById = useMemo(() => selectors.makeSelectUserById(), []);
const activeUsersLimit = useSelector(selectors.selectActiveUsersLimit);
const activeUsersTotal = useSelector(selectors.selectActiveUsersTotal);
const user = useSelector((state) => selectUserById(state, userId));
const dispatch = useDispatch();
const [t] = useTranslation();
const [step, openStep, handleBack] = useSteps();
const handleRoleSelect = useCallback(
(role) => {
dispatch(
entryActions.updateUser(userId, {
role,
}),
);
},
[userId, dispatch],
);
const handleActivateConfirm = useCallback(() => {
dispatch(
entryActions.updateUser(userId, {
isDeactivated: false,
}),
);
onClose();
}, [userId, onClose, dispatch]);
const handleDeactivateConfirm = useCallback(() => {
dispatch(
entryActions.updateUser(userId, {
isDeactivated: true,
}),
);
onClose();
}, [userId, onClose, dispatch]);
const handleDeleteConfirm = useCallback(() => {
dispatch(entryActions.deleteUser(userId));
}, [userId, dispatch]);
const handleEditInformationClick = useCallback(() => {
openStep(StepTypes.EDIT_INFORMATION);
}, [openStep]);
const handleEditUsernameClick = useCallback(() => {
openStep(StepTypes.EDIT_USERNAME);
}, [openStep]);
const handleEditEmailClick = useCallback(() => {
openStep(StepTypes.EDIT_EMAIL);
}, [openStep]);
const handleEditPasswordClick = useCallback(() => {
openStep(StepTypes.EDIT_PASSWORD);
}, [openStep]);
const handleEditRoleClick = useCallback(() => {
openStep(StepTypes.EDIT_ROLE);
}, [openStep]);
const handleActivateClick = useCallback(() => {
openStep(StepTypes.ACTIVATE);
}, [openStep]);
const handleDeactivateClick = useCallback(() => {
openStep(StepTypes.DEACTIVATE);
}, [openStep]);
const handleDeleteClick = useCallback(() => {
openStep(StepTypes.DELETE);
}, [openStep]);
if (step) {
switch (step.type) {
case StepTypes.EDIT_INFORMATION:
return ;
case StepTypes.EDIT_USERNAME:
return ;
case StepTypes.EDIT_EMAIL:
return ;
case StepTypes.EDIT_PASSWORD:
return ;
case StepTypes.EDIT_ROLE:
return (
);
case StepTypes.ACTIVATE:
return (
);
case StepTypes.DEACTIVATE:
return (
);
case StepTypes.DELETE:
return (
);
default:
}
}
return (
<>
{t('common.userActions', {
context: 'title',
})}
>
);
});
ActionsStep.propTypes = {
userId: PropTypes.string.isRequired,
onClose: PropTypes.func.isRequired,
};
export default ActionsStep;