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(),
onRetrySend: () => this.retrySend(),
onShowDetail: () => this.trigger('show-message-detail', this),
onDelete: () => this.trigger('delete', this),
onClickLinkPreview: url => this.trigger('navigate-to', url),
onShowUserDetails: pubkey =>

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

@ -26,6 +26,7 @@ import { AttachmentType, save } from '../../../types/Attachment';
import { ToastUtils } from '../../../session/utils';
import * as MIME from '../../../types/MIME';
import { SessionFileDropzone } from './SessionFileDropzone';
import { PubKey } from '../../../session/types';
interface State {
conversationKey: string;
@ -449,9 +450,7 @@ export class SessionConversation extends React.Component<Props, State> {
onSetDisappearingMessages: (seconds: any) =>
conversation.updateExpirationTimer(seconds),
onDeleteMessages: () => null,
onDeleteSelectedMessages: async () => {
await this.deleteSelectedMessages();
},
onDeleteSelectedMessages: this.deleteSelectedMessages,
onCloseOverlay: () => {
this.setState({ selectedMessages: [] });
conversation.resetMessageSelection();
@ -536,6 +535,7 @@ export class SessionConversation extends React.Component<Props, State> {
onClickAttachment: this.onClickAttachment,
onDownloadAttachment: this.downloadAttachment,
messageContainerRef: this.messageContainerRef,
onDeleteSelectedMessages: this.deleteSelectedMessages,
};
}
@ -652,16 +652,15 @@ export class SessionConversation extends React.Component<Props, State> {
public async deleteSelectedMessages() {
// Get message objects
const selectedMessages = this.state.messages.filter(message =>
this.state.selectedMessages.find(
selectedMessage => selectedMessage === message.id
)
);
const { conversationKey } = this.state;
const conversationModel = window.ConversationController.getOrThrow(
conversationKey
);
const selectedMessages = conversationModel.messageCollection.models.filter(message =>
this.state.selectedMessages.find(
selectedMessage => selectedMessage === message.id
)
);
const multiple = selectedMessages.length > 1;
@ -698,9 +697,9 @@ export class SessionConversation extends React.Component<Props, State> {
await MultiDeviceProtocol.getPrimaryDevice(ourDevicePubkey)
).key;
const isModerator = conversationModel.isModerator(ourPrimaryPubkey);
const ourNumbers = (await MultiDeviceProtocol.getOurDevices()).map(m => m.key);
const isAllOurs = selectedMessages.every(
message =>
message.propsForMessage.authorPhoneNumber === message.OUR_NUMBER
message => ourNumbers.includes(message.get('source'))
);
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"
const pluralSuffix = multiple ? 's' : '';
const title = window.i18n(

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

Loading…
Cancel
Save