feat: finished group and community leaving modals

pull/2789/head
William Grant 2 years ago
parent 38c6cb0d7d
commit 40e3a8fa72

@ -30,10 +30,9 @@ import {
ChangeNicknameMenuItem, ChangeNicknameMenuItem,
ClearNicknameMenuItem, ClearNicknameMenuItem,
DeletePrivateContactMenuItem, DeletePrivateContactMenuItem,
DeleteGroupOrCommunityMenuItem,
DeleteMessagesMenuItem, DeleteMessagesMenuItem,
InviteContactMenuItem, InviteContactMenuItem,
LeaveGroupMenuItem, LeaveGroupOrCommunityMenuItem,
MarkAllReadMenuItem, MarkAllReadMenuItem,
RemoveModeratorsMenuItem, RemoveModeratorsMenuItem,
ShowUserDetailsMenuItem, ShowUserDetailsMenuItem,
@ -85,12 +84,11 @@ export const ConversationHeaderMenu = (props: PropsConversationHeaderMenu) => {
<BanMenuItem /> <BanMenuItem />
<UnbanMenuItem /> <UnbanMenuItem />
<UpdateGroupNameMenuItem /> <UpdateGroupNameMenuItem />
<LeaveGroupMenuItem /> <LeaveGroupOrCommunityMenuItem />
<InviteContactMenuItem /> <InviteContactMenuItem />
<DeleteMessagesMenuItem /> <DeleteMessagesMenuItem />
<DeletePrivateConversationMenuItem /> <DeletePrivateConversationMenuItem />
<DeletePrivateContactMenuItem /> <DeletePrivateContactMenuItem />
<DeleteGroupOrCommunityMenuItem />
<ShowUserDetailsMenuItem /> <ShowUserDetailsMenuItem />
</Menu> </Menu>
</SessionContextMenuContainer> </SessionContextMenuContainer>

@ -18,10 +18,9 @@ import {
DeclineAndBlockMsgRequestMenuItem, DeclineAndBlockMsgRequestMenuItem,
DeclineMsgRequestMenuItem, DeclineMsgRequestMenuItem,
DeletePrivateContactMenuItem, DeletePrivateContactMenuItem,
DeleteGroupOrCommunityMenuItem,
DeleteMessagesMenuItem, DeleteMessagesMenuItem,
InviteContactMenuItem, InviteContactMenuItem,
LeaveGroupMenuItem, LeaveGroupOrCommunityMenuItem,
MarkAllReadMenuItem, MarkAllReadMenuItem,
MarkConversationUnreadMenuItem, MarkConversationUnreadMenuItem,
ShowUserDetailsMenuItem, ShowUserDetailsMenuItem,
@ -66,8 +65,7 @@ const ConversationListItemContextMenu = (props: PropsContextConversationItem) =>
<DeleteMessagesMenuItem /> <DeleteMessagesMenuItem />
<DeletePrivateConversationMenuItem /> <DeletePrivateConversationMenuItem />
<DeletePrivateContactMenuItem /> <DeletePrivateContactMenuItem />
<DeleteGroupOrCommunityMenuItem /> <LeaveGroupOrCommunityMenuItem />
<LeaveGroupMenuItem />
<ShowUserDetailsMenuItem /> <ShowUserDetailsMenuItem />
</Menu> </Menu>
</SessionContextMenuContainer> </SessionContextMenuContainer>

@ -127,68 +127,22 @@ export const DeletePrivateContactMenuItem = () => {
return null; return null;
}; };
export const DeleteGroupOrCommunityMenuItem = () => { export const LeaveGroupOrCommunityMenuItem = () => {
const dispatch = useDispatch();
const convoId = useConvoIdFromContext();
const isPublic = useIsPublic(convoId);
const isLeft = useIsLeft(convoId);
const isKickedFromGroup = useIsKickedFromGroup(convoId);
const isPrivate = useIsPrivate(convoId);
const isGroup = !isPrivate && !isPublic;
// You need to have left a closed group first to be able to delete it completely as there is a leaving message to send first.
// A community can just be removed right away.
if (isPublic || (isGroup && (isLeft || isKickedFromGroup))) {
const menuItemText = isPublic ? window.i18n('leaveGroup') : window.i18n('editMenuDeleteGroup');
const onClickClose = () => {
dispatch(updateConfirmModal(null));
};
const showConfirmationModal = () => {
dispatch(
updateConfirmModal({
title: menuItemText,
message: window.i18n('leaveGroupConfirmation'),
onClickClose,
okTheme: SessionButtonColor.Danger,
onClickOk: async () => {
if (isPublic) {
await getConversationController().deleteCommunity(convoId, {
fromSyncMessage: false,
});
} else {
await getConversationController().deleteClosedGroup(convoId, {
fromSyncMessage: false,
sendLeaveMessage: true,
});
}
},
})
);
};
return <Item onClick={showConfirmationModal}>{menuItemText}</Item>;
}
return null;
};
export const LeaveGroupMenuItem = () => {
const convoId = useConvoIdFromContext(); const convoId = useConvoIdFromContext();
const username = useConversationUsername(convoId) || convoId; const username = useConversationUsername(convoId) || convoId;
const isPublic = useIsPublic(convoId);
const isLeft = useIsLeft(convoId); const isLeft = useIsLeft(convoId);
const isKickedFromGroup = useIsKickedFromGroup(convoId); const isKickedFromGroup = useIsKickedFromGroup(convoId);
const isPrivate = useIsPrivate(convoId); const isPrivate = useIsPrivate(convoId);
const isPublic = useIsPublic(convoId);
if (!isKickedFromGroup && !isLeft && !isPrivate && !isPublic) { if (!isKickedFromGroup && !isLeft && !isPrivate) {
return ( return (
<Item <Item
onClick={() => { onClick={() => {
showLeaveGroupByConvoId(convoId, username); showLeaveGroupByConvoId(convoId, username);
}} }}
> >
{window.i18n('leaveGroup')} {isPublic ? window.i18n('leaveCommunity') : window.i18n('leaveGroup')}
</Item> </Item>
); );
} }

Loading…
Cancel
Save