Merge pull request #1062 from vincentbavitz/message-closed-group-deletion

Message Deletion and Unsending
pull/1064/head
Vince 5 years ago committed by GitHub
commit a5961ded1e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1060,17 +1060,20 @@
"delete": {
"message": "Delete"
},
"unsend": {
"message": "Unsend"
},
"forwardMessage": {
"message": "Forward",
"description": "Text of Forward Message button"
},
"deletePublicWarning": {
"message":
"Are you sure? Clicking 'delete' will permanently remove this message for everyone in this channel."
"Are you sure? Clicking 'unsend' will permanently remove this message for everyone in this channel."
},
"deleteMultiplePublicWarning": {
"message":
"Are you sure? Clicking 'delete' will permanently remove these messages for everyone in this channel."
"Are you sure? Clicking 'unsend' will permanently remove these messages for everyone in this channel."
},
"deleteWarning": {
"message":
@ -1180,6 +1183,16 @@
"description":
"Shown on the drop-down menu for an individual message, deletes single message"
},
"unsendMessage": {
"message": "Unsend Message",
"description":
"Shown on the drop-down menu for an individual message being removed from the server"
},
"unsendMessages": {
"message": "Unsend Messages",
"description":
"Tiitle for prompt and header button for messages being removed from the server"
},
"messages": {
"message": "Messages",
"description": "Message search result"
@ -1188,6 +1201,7 @@
"message": "Delete Messages",
"description": "Menu item for deleting messages, title case."
},
"deletePublicConversationConfirmation": {
"message":
"Permanently delete the messages locally from this public channel?",

@ -1313,7 +1313,8 @@
const selected = Array.from(this.model.selectedMessages);
const isModerator = this.model.isModerator(ourPubkey);
const isAllOurs = selected.every(
message => message.attributes.source === message.OUR_NUMBER
message =>
message.propsForMessage.authorPhoneNumber === message.OUR_NUMBER
);
if (!isAllOurs && !isModerator) {
@ -1333,9 +1334,15 @@
deleteMessages(messages, onSuccess) {
const multiple = messages.length > 1;
const isPublic = this.model.isPublic();
// In future, we may be able to unsend private messages also
// isServerDeletable also defined in ConversationHeader.tsx for
// future reference
const isServerDeletable = isPublic;
const warningMessage = (() => {
if (this.model.isPublic()) {
if (isPublic) {
return multiple
? i18n('deleteMultiplePublicWarning')
: i18n('deletePublicWarning');
@ -1346,7 +1353,7 @@
const doDelete = async () => {
let toDeleteLocally;
if (this.model.isPublic()) {
if (isPublic) {
toDeleteLocally = await this.model.deletePublicMessages(messages);
if (toDeleteLocally.length === 0) {
// Message failed to delete from server, show error?
@ -1381,9 +1388,21 @@
return;
}
// If removable from server, we "Unsend" - otherwise "Delete"
const pluralSuffix = multiple ? 's' : '';
const title = i18n(
isPublic
? `unsendMessage${pluralSuffix}`
: `deleteMessage${pluralSuffix}`
);
const okText = i18n(isServerDeletable ? 'unsend' : 'delete');
window.confirmationDialog({
title,
message: warningMessage,
okText: i18n('delete'),
okText,
okTheme: 'danger',
resolve: doDelete,
});
},

@ -356,7 +356,17 @@ export class ConversationHeader extends React.Component<Props> {
}
public renderSelectionOverlay() {
const { onDeleteSelectedMessages, onCloseOverlay, i18n } = this.props;
const {
onDeleteSelectedMessages,
onCloseOverlay,
isPublic,
i18n,
} = this.props;
const isServerDeletable = isPublic;
const deleteMessageButtonText = i18n(
isServerDeletable ? 'unsend' : 'delete'
);
return (
<div className="message-selection-overlay">
@ -372,7 +382,7 @@ export class ConversationHeader extends React.Component<Props> {
<SessionButton
buttonType={SessionButtonType.Default}
buttonColor={SessionButtonColor.Danger}
text={i18n('delete')}
text={deleteMessageButtonText}
onClick={onDeleteSelectedMessages}
/>
</div>

@ -907,6 +907,9 @@ export class Message extends React.PureComponent<Props, State> {
}, 100);
};
const isServerDeletable = !!this.props.isPublic;
const deleteMessageCtxText = i18n(isServerDeletable ? 'unsend' : 'delete');
// CONTEXT MENU "Select Message" does not work
return (
@ -968,7 +971,7 @@ export class Message extends React.PureComponent<Props, State> {
}}
onClick={wrap(onDelete)}
>
{i18n('deleteMessage')}
{deleteMessageCtxText}
</MenuItem>
) : null}
{isPublic ? (

@ -69,8 +69,6 @@ export class SessionConfirm extends React.Component<Props> {
)}
</div>
<div className="spacer-lg" />
<div className="session-modal__button-group">
<SessionButton
text={okText}

Loading…
Cancel
Save