fix remove message for public groups

pull/1381/head
Audric Ackermann 4 years ago
parent ff2bd1b7b4
commit f8f15cb9f7
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4

@ -92,6 +92,7 @@ export interface ConversationModel
makeQuote: any;
unblock: any;
deleteContact: any;
removeMessage: (messageId: string) => Promise<void>;
deleteMessages();
endSession: () => Promise<void>;

@ -2239,14 +2239,14 @@
if (message) {
message.trigger('unload');
this.messageCollection.remove(messageId);
window.Signal.Data.removeMessage(message.id, {
Message: Whisper.Message,
});
window.Whisper.events.trigger('messageDeleted', {
conversationKey: this.id,
messageId,
});
}
window.Signal.Data.removeMessage(messageId, {
Message: Whisper.Message,
});
window.Whisper.events.trigger('messageDeleted', {
conversationKey: this.id,
messageId,
});
},
deleteMessages() {

@ -88,9 +88,6 @@ const {
MediaGallery,
} = require('../../ts/components/conversation/media-gallery/MediaGallery');
const { Message } = require('../../ts/components/conversation/Message');
const {
MessageDetail,
} = require('../../ts/components/conversation/MessageDetail');
const { Quote } = require('../../ts/components/conversation/Quote');
const {
TypingBubble,
@ -260,7 +257,6 @@ exports.setup = (options = {}) => {
SessionPasswordPrompt,
MediaGallery,
Message,
MessageDetail,
Quote,
Types: {
Message: MediaGalleryMessage,

@ -451,7 +451,6 @@ window.shortenPubkey = pubkey => {
window.pubkeyPattern = /@[a-fA-F0-9]{64,66}\b/g;
// TODO: activate SealedSender once it is ready on all platforms
window.lokiFeatureFlags = {
multiDeviceUnpairing: true,
privateGroupChats: true,

@ -105,7 +105,7 @@ export interface Props {
onReply?: (messagId: number) => void;
onRetrySend?: () => void;
onDownload?: (attachment: AttachmentType) => void;
onDelete?: () => void;
onDeleteMessage: (messageId: string) => void;
onCopyPubKey?: () => void;
onBanUser?: () => void;
onShowDetail: () => void;
@ -817,6 +817,7 @@ export class Message extends React.PureComponent<Props, State> {
isDeletable,
id,
onSelectMessage,
onDeleteMessage,
onDownload,
onRetrySend,
onShowDetail,
@ -854,6 +855,7 @@ export class Message extends React.PureComponent<Props, State> {
};
const selectMessageText = window.i18n('selectMessage');
const deleteMessageText = window.i18n('deleteMessage');
return (
<Menu
@ -886,14 +888,22 @@ export class Message extends React.PureComponent<Props, State> {
<Item onClick={wrap(onRetrySend)}>{window.i18n('resend')}</Item>
) : null}
{isDeletable ? (
<Item
onClick={(e: any) => {
e.event.stopPropagation();
onSelectMessage(id);
}}
>
{selectMessageText}
</Item>
<>
<Item
onClick={() => {
onSelectMessage(id);
}}
>
{selectMessageText}
</Item>
<Item
onClick={() => {
onDeleteMessage(id);
}}
>
{deleteMessageText}
</Item>
</>
) : null}
{isModerator && isPublic ? (
<Item onClick={wrap(onBanUser)}>{window.i18n('banUser')}</Item>

@ -5,7 +5,6 @@ import moment from 'moment';
import { Avatar } from '../Avatar';
import { ContactName } from './ContactName';
import { Message, Props as MessageProps } from './Message';
import { LocalizerType } from '../../types/Util';
interface Contact {
status: string;
@ -31,12 +30,11 @@ interface Props {
errors: Array<Error>;
contacts: Array<Contact>;
i18n: LocalizerType;
onDeleteMessage: (messageId: string) => void;
}
export class MessageDetail extends React.Component<Props> {
public renderAvatar(contact: Contact) {
const { i18n } = this.props;
const { avatarPath, phoneNumber, name, profileName } = contact;
const userName = name || profileName || phoneNumber;
@ -51,12 +49,16 @@ export class MessageDetail extends React.Component<Props> {
}
public renderDeleteButton() {
const { i18n, message } = this.props;
const { i18n } = window;
const { message } = this.props;
return message.isDeletable ? (
<div className="module-message-detail__delete-button-container">
<button
onClick={message.onDelete}
onClick={() => {
this.props.onDeleteMessage(message.id);
}}
className="module-message-detail__delete-button"
>
{i18n('deleteThisMessage')}
@ -66,7 +68,7 @@ export class MessageDetail extends React.Component<Props> {
}
public renderContact(contact: Contact) {
const { i18n } = this.props;
const { i18n } = window;
const errors = contact.errors || [];
const errorComponent = contact.isOutgoingKeyError ? (
@ -138,7 +140,9 @@ export class MessageDetail extends React.Component<Props> {
}
public render() {
const { errors, message, receivedAt, sentAt, i18n } = this.props;
const { i18n } = window;
const { errors, message, receivedAt, sentAt } = this.props;
return (
<div className="module-message-detail">

@ -28,7 +28,7 @@ import * as MIME from '../../../types/MIME';
import { SessionFileDropzone } from './SessionFileDropzone';
import { ConversationType } from '../../../state/ducks/conversations';
import { MessageView } from '../../MainViewController';
import { getMessageById } from '../../../../js/modules/data';
import { getMessageById, removeMessage } from '../../../../js/modules/data';
import { pushUnblockToSend } from '../../../session/utils/Toast';
interface State {
@ -129,6 +129,7 @@ export class SessionConversation extends React.Component<Props, State> {
this.deleteSelectedMessages = this.deleteSelectedMessages.bind(this);
this.replyToMessage = this.replyToMessage.bind(this);
this.deleteMessage = this.deleteMessage.bind(this);
this.onClickAttachment = this.onClickAttachment.bind(this);
this.downloadAttachment = this.downloadAttachment.bind(this);
@ -492,6 +493,7 @@ export class SessionConversation extends React.Component<Props, State> {
quotedMessageTimestamp,
conversation,
selectMessage: this.selectMessage,
deleteMessage: this.deleteMessage,
fetchMessagesForConversation: actions.fetchMessagesForConversation,
replyToMessage: this.replyToMessage,
onClickAttachment: this.onClickAttachment,
@ -687,13 +689,7 @@ export class SessionConversation extends React.Component<Props, State> {
await Promise.all(
toDeleteLocally.map(async (message: any) => {
await window.Signal.Data.removeMessage(message.id, {
Message: window.Whisper.Message,
});
window.Whisper.events.trigger('messageDeleted', {
conversationKey,
messageId: message.id,
});
await conversationModel.removeMessage(message.id);
})
);
@ -734,6 +730,13 @@ export class SessionConversation extends React.Component<Props, State> {
this.setState({ selectedMessages });
}
public deleteMessage(messageId: string) {
this.setState(
{ selectedMessages: [messageId] },
this.deleteSelectedMessages
);
}
public resetSelection() {
this.setState({ selectedMessages: [] });
}

@ -30,6 +30,7 @@ interface Props {
conversation: ConversationType;
messageContainerRef: React.RefObject<any>;
selectMessage: (messageId: string) => void;
deleteMessage: (messageId: string) => void;
fetchMessagesForConversation: ({
conversationKey,
count,
@ -261,6 +262,9 @@ export class SessionMessagesList extends React.Component<Props, State> {
messageProps.onSelectMessage = (messageId: string) => {
this.selectMessage(messageId);
};
messageProps.onDeleteMessage = (messageId: string) => {
this.deleteMessage(messageId);
};
messageProps.onReply = (messageId: number) => {
void this.props.replyToMessage(messageId);
@ -462,6 +466,10 @@ export class SessionMessagesList extends React.Component<Props, State> {
this.props.selectMessage(messageId);
}
public deleteMessage(messageId: string) {
this.props.deleteMessage(messageId);
}
private async scrollToQuoteMessage(options: any = {}) {
const { quoteAuthor, quoteId, referencedMessageNotFound } = options;

Loading…
Cancel
Save