add Notifications in conversations context menu

pull/1779/head
Brice-W 4 years ago
parent bf76abacee
commit adab2b4506

@ -66,6 +66,8 @@ const ConversationListItem = (props: Props) => {
type,
lastMessage,
memberAvatars,
notificationForConvo,
currentNotificationSetting,
} = props;
const triggerId: string = `conversation-item-${phoneNumber}-ctxmenu`;
const key: string = `conversation-item-${phoneNumber}`;
@ -119,7 +121,14 @@ const ConversationListItem = (props: Props) => {
</div>
</div>
<Portal>
<ConversationListItemContextMenu id={id} triggerId={triggerId} type={type} isMe={isMe} />
<ConversationListItemContextMenu
id={id}
triggerId={triggerId}
type={type}
isMe={isMe}
notificationForConvo={notificationForConvo}
currentNotificationSetting={currentNotificationSetting}
/>
</Portal>
</div>
);

@ -1,6 +1,9 @@
import React from 'react';
import { animation, Menu } from 'react-contexify';
import { ConversationTypeEnum } from '../../../models/conversation';
import {
ConversationNotificationSettingType,
ConversationTypeEnum,
} from '../../../models/conversation';
import {
getBlockMenuItem,
@ -12,8 +15,10 @@ import {
getInviteContactMenuItem,
getLeaveGroupMenuItem,
getMarkAllReadMenuItem,
getNotificationForConvoMenuItem,
getPinConversationMenuItem,
} from './Menu';
import { NotificationForConvoOption } from '../../conversation/ConversationHeader';
export type PropsContextConversationItem = {
id: string;
@ -26,6 +31,8 @@ export type PropsContextConversationItem = {
isKickedFromGroup?: boolean;
left?: boolean;
theme?: any;
notificationForConvo: Array<NotificationForConvoOption>;
currentNotificationSetting: ConversationNotificationSettingType;
};
export const ConversationListItemContextMenu = (props: PropsContextConversationItem) => {
@ -39,6 +46,8 @@ export const ConversationListItemContextMenu = (props: PropsContextConversationI
type,
left,
isKickedFromGroup,
notificationForConvo,
currentNotificationSetting,
} = props;
const isGroup = type === 'group';
@ -46,6 +55,14 @@ export const ConversationListItemContextMenu = (props: PropsContextConversationI
return (
<>
<Menu id={triggerId} animation={animation.fade}>
{getNotificationForConvoMenuItem(
isKickedFromGroup,
left,
isBlocked,
notificationForConvo,
currentNotificationSetting,
conversationId
)}
{getPinConversationMenuItem(conversationId)}
{getBlockMenuItem(isMe, type === ConversationTypeEnum.PRIVATE, isBlocked, conversationId)}
{getCopyMenuItem(isPublic, isGroup, conversationId)}

@ -408,6 +408,13 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
groupAdmins,
members,
isPinned: this.isPinned(),
notificationForConvo: ConversationNotificationSetting.filter(n =>
this.isPrivate() ? n !== 'mentions_only' : true
).map((n: ConversationNotificationSettingType) => {
// this link to the notificationForConvo_all, notificationForConvo_mentions_only, ...
return { value: n, name: window.i18n(`notificationForConvo_${n}`) };
}),
currentNotificationSetting: this.get('triggerNotificationsFor'),
};
}

@ -5,8 +5,12 @@ import { createAsyncThunk } from '@reduxjs/toolkit';
import { getConversationController } from '../../session/conversations';
import { MessageModel } from '../../models/message';
import { getMessagesByConversation } from '../../data/data';
import { ConversationTypeEnum } from '../../models/conversation';
import {
ConversationNotificationSettingType,
ConversationTypeEnum,
} from '../../models/conversation';
import { MessageDeliveryStatus } from '../../models/messageType';
import { NotificationForConvoOption } from '../../components/conversation/ConversationHeader';
// State
@ -83,6 +87,8 @@ export interface ConversationType {
groupAdmins?: Array<string>; // admins for closed groups and moderators for open groups
members?: Array<string>; // members for closed groups only
isPinned: boolean;
notificationForConvo: Array<NotificationForConvoOption>;
currentNotificationSetting: ConversationNotificationSettingType;
}
export type ConversationLookupType = {

@ -1,5 +1,8 @@
import { assert } from 'chai';
import { ConversationTypeEnum } from '../../../../models/conversation';
import {
ConversationNotificationSetting,
ConversationTypeEnum,
} from '../../../../models/conversation';
import { ConversationLookupType } from '../../../../state/ducks/conversations';
import {
@ -28,6 +31,8 @@ describe('state/selectors/conversations', () => {
isKickedFromGroup: false,
left: false,
isPinned: false,
notificationForConvo: [],
currentNotificationSetting: ConversationNotificationSetting[0],
},
id2: {
id: 'id2',
@ -45,13 +50,14 @@ describe('state/selectors/conversations', () => {
isKickedFromGroup: false,
left: false,
isPinned: false,
notificationForConvo: [],
currentNotificationSetting: ConversationNotificationSetting[0],
},
id3: {
id: 'id3',
activeAt: 20,
name: 'C',
phoneNumber: 'notused',
type: ConversationTypeEnum.PRIVATE,
isMe: false,
unreadCount: 1,
@ -62,6 +68,8 @@ describe('state/selectors/conversations', () => {
isKickedFromGroup: false,
left: false,
isPinned: false,
notificationForConvo: [],
currentNotificationSetting: ConversationNotificationSetting[0],
},
id4: {
id: 'id4',
@ -78,6 +86,8 @@ describe('state/selectors/conversations', () => {
isKickedFromGroup: false,
left: false,
isPinned: false,
notificationForConvo: [],
currentNotificationSetting: ConversationNotificationSetting[0],
},
id5: {
id: 'id5',
@ -94,6 +104,8 @@ describe('state/selectors/conversations', () => {
isKickedFromGroup: false,
left: false,
isPinned: false,
notificationForConvo: [],
currentNotificationSetting: ConversationNotificationSetting[0],
},
};
const comparator = _getConversationComparator(i18n);
@ -126,6 +138,8 @@ describe('state/selectors/conversations', () => {
isKickedFromGroup: false,
left: false,
isPinned: false,
notificationForConvo: [],
currentNotificationSetting: ConversationNotificationSetting[0],
},
id2: {
id: 'id2',
@ -143,6 +157,8 @@ describe('state/selectors/conversations', () => {
isKickedFromGroup: false,
left: false,
isPinned: false,
notificationForConvo: [],
currentNotificationSetting: ConversationNotificationSetting[0],
},
id3: {
id: 'id3',
@ -160,6 +176,8 @@ describe('state/selectors/conversations', () => {
isKickedFromGroup: false,
left: false,
isPinned: true,
notificationForConvo: [],
currentNotificationSetting: ConversationNotificationSetting[0],
},
id4: {
id: 'id4',
@ -176,6 +194,8 @@ describe('state/selectors/conversations', () => {
isKickedFromGroup: false,
left: false,
isPinned: true,
notificationForConvo: [],
currentNotificationSetting: ConversationNotificationSetting[0],
},
id5: {
id: 'id5',
@ -192,6 +212,8 @@ describe('state/selectors/conversations', () => {
isKickedFromGroup: false,
left: false,
isPinned: false,
notificationForConvo: [],
currentNotificationSetting: ConversationNotificationSetting[0],
},
};
const comparator = _getConversationComparator(i18n);

Loading…
Cancel
Save