From 1df57140ff424c85a8c598406d764bf3102978b1 Mon Sep 17 00:00:00 2001 From: William Grant Date: Tue, 13 Jun 2023 16:53:55 +1000 Subject: [PATCH] feat: handle closed group admin separately update confirmation action to use leave text, left code for the closed groups rebuild --- ts/interactions/conversationInteractions.ts | 55 +++++++++++++++------ 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/ts/interactions/conversationInteractions.ts b/ts/interactions/conversationInteractions.ts index 00585bb77..b9efae72a 100644 --- a/ts/interactions/conversationInteractions.ts +++ b/ts/interactions/conversationInteractions.ts @@ -24,7 +24,6 @@ import { resetConversationExternal, } from '../state/ducks/conversations'; import { - adminLeaveClosedGroup, changeNickNameModal, updateAddModeratorsModal, updateBanOrUnbanUserModal, @@ -300,9 +299,9 @@ export function showLeaveGroupByConvoId(conversationId: string, name?: string) { const isClosedGroup = conversation.isClosedGroup() || false; const isPublic = conversation.isPublic() || false; - const isAdmin = (conversation.get('groupAdmins') || []).includes( - UserUtils.getOurPubKeyStrFromCache() - ); + const admins = conversation.get('groupAdmins') || []; + const isAdmin = admins.includes(UserUtils.getOurPubKeyStrFromCache()); + const showOnlyGroupAdminWarning = isClosedGroup && isAdmin && admins.length === 1; // if this is a community, or we legacy group are not admin, we can just show a confirmation dialog @@ -341,26 +340,52 @@ export function showLeaveGroupByConvoId(conversationId: string, name?: string) { } }; - // TODO Communities don't need confirmation modal and have different logic - if (isPublic || (isClosedGroup && !isAdmin)) { + if (showOnlyGroupAdminWarning) { + // NOTE For legacy closed groups window?.inboxStore?.dispatch( updateConfirmModal({ - title: isPublic ? window.i18n('leaveCommunity') : window.i18n('leaveGroup'), - message: window.i18n('leaveGroupConfirmation', name ? [name] : undefined), + title: window.i18n('leaveGroup'), + message: window.i18n('leaveGroupConrirmationOnlyAdminLegacy', name ? [name] : undefined), onClickOk, - okText: window.i18n('delete'), + okText: window.i18n('leave'), okTheme: SessionButtonColor.Danger, onClickClose, conversationId, }) ); + // TODO Only to be used after the closed group rebuild + // const onClickOkLastAdmin = () => { // TODO }; + // const onClickCloseLastAdmin = () => { // TODO }; + // window?.inboxStore?.dispatch( + // updateConfirmModal({ + // title: window.i18n('leaveGroup'), + // message: window.i18n('leaveGroupConfirmationOnlyAdmin', name ? [name] : undefined), + // messageSub: window.i18n('leaveGroupConfirmationOnlyAdminWarning'), + // onClickOk: onClickOkLastAdmin, + // okText: window.i18n('addModerator'), + // cancelText: window.i18n('leave'), + // onClickCancel: onClickCloseLastAdmin, + // closeTheme: SessionButtonColor.Danger, + // onClickClose, + // showExitIcon: true, + // headerReverse: true, + // conversationId, + // }) + // ); } else { - // TODO use different admin modal from figma with add another admin option - window.inboxStore?.dispatch( - adminLeaveClosedGroup({ - conversationId, - }) - ); + if (isPublic || (isClosedGroup && !isAdmin)) { + window?.inboxStore?.dispatch( + updateConfirmModal({ + title: isPublic ? window.i18n('leaveCommunity') : window.i18n('leaveGroup'), + message: window.i18n('leaveGroupConfirmation', name ? [name] : undefined), + onClickOk, + okText: window.i18n('leave'), + okTheme: SessionButtonColor.Danger, + onClickClose, + conversationId, + }) + ); + } } }