Files
LiquidCode_Frontend/src/views/home/rightpanel/group/ModalLeave.tsx
Виталий Лавшонок 390f1f52c8 add group chat
2025-11-23 10:30:31 +03:00

105 lines
3.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 {
removeGroupMember,
setGroupsStatus,
} from '../../../../redux/slices/groups';
import ConfirmModal from '../../../../components/modal/ConfirmModal';
import { useNavigate } from 'react-router-dom';
interface ModalLeaveProps {
active: boolean;
setActive: (value: boolean) => void;
groupId: number;
groupName?: string;
userId: number;
}
const ModalLeave: FC<ModalLeaveProps> = ({
active,
setActive,
groupName,
groupId,
userId,
}) => {
const statusLeave = useAppSelector(
(state) => state.groups.removeGroupMember.status,
);
const dispatch = useAppDispatch();
const navigate = useNavigate();
const [modalConfirmActive, setModalConfirmActive] =
useState<boolean>(false);
useEffect(() => {
if (statusLeave == 'successful') {
dispatch(
setGroupsStatus({ key: 'removeGroupMember', status: 'idle' }),
);
setActive(false);
navigate('/home/groups');
}
}, [statusLeave]);
return (
<>
<Modal
className="bg-liquid-background border-liquid-lighter border-[2px] p-[25px] rounded-[20px] text-liquid-white"
onOpenChange={setActive}
open={active}
backdrop="blur"
>
<div className="w-[500px]">
<div className="font-bold text-[30px]">
Вы действительно хотите покинуть группу:
</div>
<div className="font-bold text-[20px] mt-[20px]">
"{groupName}" #{groupId}?
</div>
<div className="flex flex-row w-full items-center justify-end mt-[20px] gap-[20px]">
<PrimaryButton
onClick={() => {
setModalConfirmActive(true);
}}
text={
statusLeave == 'loading'
? 'Покинуть...'
: 'Покинуть'
}
disabled={statusLeave == 'loading'}
color="error"
/>
<SecondaryButton
onClick={() => {
setActive(false);
}}
text="Отмена"
/>
</div>
</div>
<ConfirmModal
active={modalConfirmActive}
setActive={setModalConfirmActive}
title="Подтвердите действия"
message="Вы действительно хотите покинуть группу?"
confirmColor="error"
confirmText="Покинуть"
onConfirmClick={() => {
dispatch(
removeGroupMember({
groupId,
memberId: userId,
}),
);
}}
/>
</Modal>
</>
);
};
export default ModalLeave;