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": { "delete": {
"message": "Delete" "message": "Delete"
}, },
"unsend": {
"message": "Unsend"
},
"forwardMessage": { "forwardMessage": {
"message": "Forward", "message": "Forward",
"description": "Text of Forward Message button" "description": "Text of Forward Message button"
}, },
"deletePublicWarning": { "deletePublicWarning": {
"message": "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": { "deleteMultiplePublicWarning": {
"message": "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": { "deleteWarning": {
"message": "message":
@ -1180,6 +1183,16 @@
"description": "description":
"Shown on the drop-down menu for an individual message, deletes single message" "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": { "messages": {
"message": "Messages", "message": "Messages",
"description": "Message search result" "description": "Message search result"
@ -1188,6 +1201,7 @@
"message": "Delete Messages", "message": "Delete Messages",
"description": "Menu item for deleting messages, title case." "description": "Menu item for deleting messages, title case."
}, },
"deletePublicConversationConfirmation": { "deletePublicConversationConfirmation": {
"message": "message":
"Permanently delete the messages locally from this public channel?", "Permanently delete the messages locally from this public channel?",

@ -1313,7 +1313,8 @@
const selected = Array.from(this.model.selectedMessages); const selected = Array.from(this.model.selectedMessages);
const isModerator = this.model.isModerator(ourPubkey); const isModerator = this.model.isModerator(ourPubkey);
const isAllOurs = selected.every( const isAllOurs = selected.every(
message => message.attributes.source === message.OUR_NUMBER message =>
message.propsForMessage.authorPhoneNumber === message.OUR_NUMBER
); );
if (!isAllOurs && !isModerator) { if (!isAllOurs && !isModerator) {
@ -1333,9 +1334,15 @@
deleteMessages(messages, onSuccess) { deleteMessages(messages, onSuccess) {
const multiple = messages.length > 1; 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 = (() => { const warningMessage = (() => {
if (this.model.isPublic()) { if (isPublic) {
return multiple return multiple
? i18n('deleteMultiplePublicWarning') ? i18n('deleteMultiplePublicWarning')
: i18n('deletePublicWarning'); : i18n('deletePublicWarning');
@ -1346,7 +1353,7 @@
const doDelete = async () => { const doDelete = async () => {
let toDeleteLocally; let toDeleteLocally;
if (this.model.isPublic()) { if (isPublic) {
toDeleteLocally = await this.model.deletePublicMessages(messages); toDeleteLocally = await this.model.deletePublicMessages(messages);
if (toDeleteLocally.length === 0) { if (toDeleteLocally.length === 0) {
// Message failed to delete from server, show error? // Message failed to delete from server, show error?
@ -1381,9 +1388,21 @@
return; 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({ window.confirmationDialog({
title,
message: warningMessage, message: warningMessage,
okText: i18n('delete'), okText,
okTheme: 'danger',
resolve: doDelete, resolve: doDelete,
}); });
}, },

@ -356,7 +356,17 @@ export class ConversationHeader extends React.Component<Props> {
} }
public renderSelectionOverlay() { 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 ( return (
<div className="message-selection-overlay"> <div className="message-selection-overlay">
@ -372,7 +382,7 @@ export class ConversationHeader extends React.Component<Props> {
<SessionButton <SessionButton
buttonType={SessionButtonType.Default} buttonType={SessionButtonType.Default}
buttonColor={SessionButtonColor.Danger} buttonColor={SessionButtonColor.Danger}
text={i18n('delete')} text={deleteMessageButtonText}
onClick={onDeleteSelectedMessages} onClick={onDeleteSelectedMessages}
/> />
</div> </div>

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

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

Loading…
Cancel
Save