delete messages needs to be called once the message is selected

pull/1387/head
Audric Ackermann 5 years ago
parent 68e9376c5e
commit a0e5c7386f
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4

@ -617,7 +617,6 @@
onBanUser: () => this.banUser(), onBanUser: () => this.banUser(),
onRetrySend: () => this.retrySend(), onRetrySend: () => this.retrySend(),
onShowDetail: () => this.trigger('show-message-detail', this), onShowDetail: () => this.trigger('show-message-detail', this),
onDelete: () => this.trigger('delete', this),
onClickLinkPreview: url => this.trigger('navigate-to', url), onClickLinkPreview: url => this.trigger('navigate-to', url),
onShowUserDetails: pubkey => onShowUserDetails: pubkey =>

@ -791,7 +791,8 @@ export class Message extends React.PureComponent<Props, State> {
direction, direction,
status, status,
isDeletable, isDeletable,
onDelete, id,
onSelectMessage,
onDownload, onDownload,
onRetrySend, onRetrySend,
onShowDetail, onShowDetail,
@ -828,10 +829,7 @@ export class Message extends React.PureComponent<Props, State> {
}, 100); }, 100);
}; };
const isServerDeletable = !!this.props.isPublic; const selectMessageText = window.i18n('selectMessage');
const deleteMessageCtxText = window.i18n(
isServerDeletable ? 'deleteForEveryone' : 'delete'
);
return ( return (
<Menu <Menu
@ -864,7 +862,14 @@ export class Message extends React.PureComponent<Props, State> {
<Item onClick={wrap(onRetrySend)}>{window.i18n('resend')}</Item> <Item onClick={wrap(onRetrySend)}>{window.i18n('resend')}</Item>
) : null} ) : null}
{isDeletable ? ( {isDeletable ? (
<Item onClick={wrap(onDelete)}>{deleteMessageCtxText}</Item> <Item
onClick={(e: any) => {
e.event.stopPropagation();
onSelectMessage(id);
}}
>
{selectMessageText}
</Item>
) : null} ) : null}
{isModerator && isPublic ? ( {isModerator && isPublic ? (
<Item onClick={wrap(onBanUser)}>{window.i18n('banUser')}</Item> <Item onClick={wrap(onBanUser)}>{window.i18n('banUser')}</Item>

@ -26,6 +26,7 @@ import { AttachmentType, save } from '../../../types/Attachment';
import { ToastUtils } from '../../../session/utils'; import { ToastUtils } from '../../../session/utils';
import * as MIME from '../../../types/MIME'; import * as MIME from '../../../types/MIME';
import { SessionFileDropzone } from './SessionFileDropzone'; import { SessionFileDropzone } from './SessionFileDropzone';
import { PubKey } from '../../../session/types';
interface State { interface State {
conversationKey: string; conversationKey: string;
@ -449,9 +450,7 @@ export class SessionConversation extends React.Component<Props, State> {
onSetDisappearingMessages: (seconds: any) => onSetDisappearingMessages: (seconds: any) =>
conversation.updateExpirationTimer(seconds), conversation.updateExpirationTimer(seconds),
onDeleteMessages: () => null, onDeleteMessages: () => null,
onDeleteSelectedMessages: async () => { onDeleteSelectedMessages: this.deleteSelectedMessages,
await this.deleteSelectedMessages();
},
onCloseOverlay: () => { onCloseOverlay: () => {
this.setState({ selectedMessages: [] }); this.setState({ selectedMessages: [] });
conversation.resetMessageSelection(); conversation.resetMessageSelection();
@ -536,6 +535,7 @@ export class SessionConversation extends React.Component<Props, State> {
onClickAttachment: this.onClickAttachment, onClickAttachment: this.onClickAttachment,
onDownloadAttachment: this.downloadAttachment, onDownloadAttachment: this.downloadAttachment,
messageContainerRef: this.messageContainerRef, messageContainerRef: this.messageContainerRef,
onDeleteSelectedMessages: this.deleteSelectedMessages,
}; };
} }
@ -652,16 +652,15 @@ export class SessionConversation extends React.Component<Props, State> {
public async deleteSelectedMessages() { public async deleteSelectedMessages() {
// Get message objects // Get message objects
const selectedMessages = this.state.messages.filter(message =>
this.state.selectedMessages.find(
selectedMessage => selectedMessage === message.id
)
);
const { conversationKey } = this.state; const { conversationKey } = this.state;
const conversationModel = window.ConversationController.getOrThrow( const conversationModel = window.ConversationController.getOrThrow(
conversationKey conversationKey
); );
const selectedMessages = conversationModel.messageCollection.models.filter(message =>
this.state.selectedMessages.find(
selectedMessage => selectedMessage === message.id
)
);
const multiple = selectedMessages.length > 1; const multiple = selectedMessages.length > 1;
@ -698,9 +697,9 @@ export class SessionConversation extends React.Component<Props, State> {
await MultiDeviceProtocol.getPrimaryDevice(ourDevicePubkey) await MultiDeviceProtocol.getPrimaryDevice(ourDevicePubkey)
).key; ).key;
const isModerator = conversationModel.isModerator(ourPrimaryPubkey); const isModerator = conversationModel.isModerator(ourPrimaryPubkey);
const ourNumbers = (await MultiDeviceProtocol.getOurDevices()).map(m => m.key);
const isAllOurs = selectedMessages.every( const isAllOurs = selectedMessages.every(
message => message => ourNumbers.includes(message.get('source'))
message.propsForMessage.authorPhoneNumber === message.OUR_NUMBER
); );
if (!isAllOurs && !isModerator) { if (!isAllOurs && !isModerator) {
@ -743,13 +742,6 @@ export class SessionConversation extends React.Component<Props, State> {
}); });
}; };
// Only show a warning when at least one messages was successfully
// saved in on the server
if (!selectedMessages.some(m => !m.hasErrors())) {
await doDelete();
return;
}
// If removable from server, we "Unsend" - otherwise "Delete" // If removable from server, we "Unsend" - otherwise "Delete"
const pluralSuffix = multiple ? 's' : ''; const pluralSuffix = multiple ? 's' : '';
const title = window.i18n( const title = window.i18n(

@ -34,6 +34,7 @@ interface Props {
replyToMessage: (messageId: number) => Promise<void>; replyToMessage: (messageId: number) => Promise<void>;
onClickAttachment: (attachment: any, message: any) => void; onClickAttachment: (attachment: any, message: any) => void;
onDownloadAttachment: ({ attachment }: { attachment: any }) => void; onDownloadAttachment: ({ attachment }: { attachment: any }) => void;
onDeleteSelectedMessages: () => Promise<void>;
} }
export class SessionConversationMessagesList extends React.Component< export class SessionConversationMessagesList extends React.Component<

Loading…
Cancel
Save