diff --git a/js/views/conversation_view.js b/js/views/conversation_view.js index 564db2dd6..858cfccee 100644 --- a/js/views/conversation_view.js +++ b/js/views/conversation_view.js @@ -196,6 +196,7 @@ value: item.get('seconds'), })), hasNickname: !!this.model.getNickname(), + isKickedFromGroup: this.model.get('isKickedFromGroup'), onSetDisappearingMessages: seconds => this.setDisappearingMessages(seconds), @@ -294,6 +295,7 @@ amMod: this.model.isModerator( window.storage.get('primaryDevicePubKey') ), + isKickedFromGroup: this.model.get('isKickedFromGroup'), timerOptions: Whisper.ExpirationTimerOptions.map(item => ({ name: item.getName(), diff --git a/js/views/invite_friends_dialog_view.js b/js/views/invite_friends_dialog_view.js index 3d2bde0af..a0be59718 100644 --- a/js/views/invite_friends_dialog_view.js +++ b/js/views/invite_friends_dialog_view.js @@ -14,13 +14,18 @@ const convos = window.getConversations().models; - if(convo.isPublic){ + if (convo.isPublic) { this.friends = convos.filter( d => !!d && d.isFriend() && d.isPrivate() && !d.isMe() ); } else { this.friends = convos.filter( - d => !!d && d.isFriend() && d.isPrivate() && !d.isMe() && !convo.get('members').includes(d.id) + d => + !!d && + d.isFriend() && + d.isPrivate() && + !d.isMe() && + !convo.get('members').includes(d.id) ); } diff --git a/ts/components/conversation/ConversationHeader.tsx b/ts/components/conversation/ConversationHeader.tsx index 227f66246..ad4cd46be 100644 --- a/ts/components/conversation/ConversationHeader.tsx +++ b/ts/components/conversation/ConversationHeader.tsx @@ -62,6 +62,7 @@ interface Props { isOnline?: boolean; selectedMessages: any; + isKickedFromGroup: boolean; onSetDisappearingMessages: (seconds: number) => void; onDeleteMessages: () => void; @@ -145,6 +146,7 @@ export class ConversationHeader extends React.Component { subscriberCount, isFriendRequestPending, isMe, + isKickedFromGroup, name, } = this.props; @@ -179,7 +181,7 @@ export class ConversationHeader extends React.Component { } const textEl = - text === '' ? null : ( + text === '' || isKickedFromGroup ? null : ( {text} ); @@ -298,6 +300,7 @@ export class ConversationHeader extends React.Component { isPublic, isRss, isGroup, + isKickedFromGroup, amMod, onDeleteMessages, onDeleteContact, @@ -320,20 +323,20 @@ export class ConversationHeader extends React.Component { {copyIdLabel} ) : null} {i18n('deleteMessages')} - {amMod ? ( + {amMod && !isKickedFromGroup ? ( {i18n('addModerators')} ) : null} - {amMod ? ( + {amMod && !isKickedFromGroup ? ( {i18n('removeModerators')} ) : null} - {amMod ? ( + {amMod && !isKickedFromGroup ? ( {i18n('editGroupNameOrPicture')} ) : null} - {isPrivateGroup ? ( + {isPrivateGroup && !isKickedFromGroup ? ( {i18n('leaveGroup')} ) : null} {/* TODO: add delete group */} @@ -391,7 +394,7 @@ export class ConversationHeader extends React.Component { } public render() { - const { id } = this.props; + const { id, isKickedFromGroup } = this.props; const triggerId = `conversation-${id}-${Date.now()}`; return ( @@ -407,7 +410,7 @@ export class ConversationHeader extends React.Component { {/*isPrivateGroup ? this.renderMemberCount() : null*/} - {this.renderExpirationLength()} + {!isKickedFromGroup && this.renderExpirationLength()} {!this.props.isRss && this.renderAvatar()} @@ -436,6 +439,8 @@ export class ConversationHeader extends React.Component { isBlocked, isMe, isGroup, + isFriend, + isKickedFromGroup, isArchived, isPublic, isRss, @@ -452,7 +457,6 @@ export class ConversationHeader extends React.Component { // hasNickname, // onClearNickname, // onChangeNickname, - isFriend, } = this.props; if (isPublic || isRss) { @@ -464,20 +468,21 @@ export class ConversationHeader extends React.Component { const blockTitle = isBlocked ? i18n('unblockUser') : i18n('blockUser'); const blockHandler = isBlocked ? onUnblockUser : onBlockUser; - const disappearingMessagesMenuItem = isFriend && ( - - {(timerOptions || []).map(item => ( - { - onSetDisappearingMessages(item.value); - }} - > - {item.name} - - ))} - - ); + const disappearingMessagesMenuItem = isFriend && + !isKickedFromGroup && ( + + {(timerOptions || []).map(item => ( + { + onSetDisappearingMessages(item.value); + }} + > + {item.name} + + ))} + + ); const showMembersMenuItem = isGroup && ( {i18n('showMembers')} ); diff --git a/ts/components/session/SessionGroupSettings.tsx b/ts/components/session/SessionGroupSettings.tsx index 919cf0876..3342f4fa9 100644 --- a/ts/components/session/SessionGroupSettings.tsx +++ b/ts/components/session/SessionGroupSettings.tsx @@ -21,6 +21,7 @@ interface Props { isPublic: boolean; isAdmin: boolean; amMod: boolean; + isKickedFromGroup: boolean; onGoBack: () => void; onInviteFriends: () => void; @@ -212,14 +213,15 @@ export class SessionGroupSettings extends React.Component { onLeaveGroup, isPublic, isAdmin, + isKickedFromGroup, amMod, } = this.props; const { documents, media, onItemClick } = this.state; const showMemberCount = !!(memberCount && memberCount > 0); - const hasDisappearingMessages = !isPublic; + const hasDisappearingMessages = !isPublic && !isKickedFromGroup; const leaveGroupString = isPublic ? window.i18n('leaveOpenGroup') - : window.i18n('leaveClosedGroup'); + : isKickedFromGroup ? window.i18n('youAreKickedFromThisGroup') : window.i18n('leaveClosedGroup'); const disappearingMessagesOptions = timerOptions.map(option => { return { @@ -230,8 +232,8 @@ export class SessionGroupSettings extends React.Component { }; }); - const showUpdateGroupNameButton = isPublic ? amMod : isAdmin; - const showUpdateGroupMembersButton = !isPublic && isAdmin; + const showUpdateGroupNameButton = isPublic && !isKickedFromGroup ? amMod : isAdmin; + const showUpdateGroupMembersButton = !isPublic && !isKickedFromGroup && isAdmin; return (
@@ -292,6 +294,7 @@ export class SessionGroupSettings extends React.Component { buttonColor={SessionButtonColor.Danger} buttonType={SessionButtonType.SquareOutline} onClick={onLeaveGroup} + disabled={isKickedFromGroup} />
); @@ -305,9 +308,10 @@ export class SessionGroupSettings extends React.Component { avatarPath, isAdmin, isPublic, + isKickedFromGroup, } = this.props; - const showInviteFriends = isPublic || isAdmin; + const showInviteFriends = (isPublic || isAdmin) && !isKickedFromGroup; return (