import { FC, useEffect, useState } from 'react'; import { Modal } from '../../../../components/modal/Modal'; import { PrimaryButton } from '../../../../components/button/PrimaryButton'; import { SecondaryButton } from '../../../../components/button/SecondaryButton'; import { useAppDispatch, useAppSelector } from '../../../../redux/hooks'; import { addGroupMember, fetchGroupById, GroupMember, removeGroupMember, setGroupsStatus, } from '../../../../redux/slices/groups'; import ConfirmModal from '../../../../components/modal/ConfirmModal'; import { DropDownList, DropDownListItem, } from '../../../../components/input/DropDownList'; import { ReverseButton } from '../../../../components/button/ReverseButton'; interface ModalUpdateProps { active: boolean; setActive: (value: boolean) => void; groupId: number; userId: number; user?: GroupMember; adminUser?: GroupMember; groupName?: string; } const ModalUpdate: FC = ({ active, setActive, groupId, user, adminUser, groupName, }) => { const statusLeave = useAppSelector( (state) => state.groups.removeGroupMember.status, ); const statusUpdate = useAppSelector( (state) => state.groups.addGroupMember.status, ); const dispatch = useAppDispatch(); const [modalConfirmDeleteUser, setModalConfirmDeleteUser] = useState(false); const [modalConfirmRoleActive, setModalConfirmRoleActive] = useState(false); const [userRole, setUserRole] = useState(''); useEffect(() => { if (active) { } }, [active]); useEffect(() => { if (statusLeave == 'successful') { dispatch( setGroupsStatus({ key: 'removeGroupMember', status: 'idle' }), ); dispatch(fetchGroupById(groupId)); setActive(false); } }, [statusLeave]); useEffect(() => { if (statusUpdate == 'successful') { dispatch( setGroupsStatus({ key: 'addGroupMember', status: 'idle' }), ); dispatch(fetchGroupById(groupId)); setActive(false); } }, [statusUpdate]); useEffect(() => { if (user) { setUserRole( user?.role.includes('Creator') ? 'Creator' : user?.role, ); } }, [user]); const roles: DropDownListItem[] = [ { value: 'Member', text: 'Участник' }, { value: 'Administrator', text: 'Администратор' }, ]; if (adminUser?.role.includes('Creator')) { roles.push({ value: 'Creator', text: 'Владелец' }); } const casrtRoleMap: Record<'Member' | 'Administrator' | 'Creator', string> = { Member: 'Участник', Administrator: 'Администратор', Creator: 'Владелец', }; return (
Управление участниками группы:
"{groupName}" #{groupId}
Пользователь: {user?.username}
Текущая роль:{' '} {casrtRoleMap[user?.role as keyof typeof casrtRoleMap]}
{ setUserRole(v); }} />
{ setModalConfirmRoleActive(true); }} text={ statusUpdate == 'loading' ? 'Назначить...' : 'Назначить' } disabled={statusUpdate == 'loading'} color="secondary" />
Исключить пользователя?
{ setModalConfirmDeleteUser(true); }} text={ statusLeave == 'loading' ? 'Исключить...' : 'Исключить' } disabled={statusLeave == 'loading'} color="error" />
{ setActive(false); }} text="Отмена" />
{ if (user) { dispatch( removeGroupMember({ groupId, memberId: user.userId, }), ); } }} /> { if (user) { dispatch( addGroupMember({ groupId, userId: user.userId, role: userRole == 'Creator' ? 'Administrator, Creator' : userRole, }), ); } }} />
); }; export default ModalUpdate;