session-desktop/ts/components/session/menu/ConversationHeaderMenu.tsx

89 lines
2.9 KiB
TypeScript
Raw Normal View History

import React, { useState } from 'react';
2020-10-22 07:34:41 +02:00
import { animation, Menu } from 'react-contexify';
import {
getAddModeratorsMenuItem,
getBlockMenuItem,
getChangeNicknameMenuItem,
getClearNicknameMenuItem,
2020-10-22 07:34:41 +02:00
getCopyMenuItem,
getDeleteContactMenuItem,
getDeleteMessagesMenuItem,
getDisappearingMenuItem,
getInviteContactMenuItem,
getLeaveGroupMenuItem,
2021-03-21 23:55:49 +01:00
getMarkAllReadMenuItem,
getNotificationForConvoMenuItem,
2020-10-22 07:34:41 +02:00
getRemoveModeratorsMenuItem,
getUpdateGroupNameMenuItem,
} from './Menu';
import { NotificationForConvoOption } from '../../conversation/ConversationHeader';
import { ConversationNotificationSettingType } from '../../../models/conversation';
import _ from 'lodash';
2020-10-22 07:34:41 +02:00
export type PropsConversationHeaderMenu = {
conversationId: string;
2020-10-22 07:34:41 +02:00
triggerId: string;
isMe: boolean;
isPublic: boolean;
isKickedFromGroup: boolean;
left: boolean;
2020-10-22 07:34:41 +02:00
isGroup: boolean;
weAreAdmin: boolean;
notificationForConvo: Array<NotificationForConvoOption>;
currentNotificationSetting: ConversationNotificationSettingType;
2020-10-22 07:34:41 +02:00
isPrivate: boolean;
isBlocked: boolean;
hasNickname: boolean;
2020-10-22 07:34:41 +02:00
};
const ConversationHeaderMenu = (props: PropsConversationHeaderMenu) => {
2020-10-22 07:34:41 +02:00
const {
conversationId,
2020-10-22 07:34:41 +02:00
triggerId,
isMe,
isPublic,
isGroup,
isKickedFromGroup,
weAreAdmin,
2020-10-22 07:34:41 +02:00
isBlocked,
isPrivate,
left,
hasNickname,
notificationForConvo,
currentNotificationSetting,
2020-10-22 07:34:41 +02:00
} = props;
return (
<Menu id={triggerId} animation={animation.fade}>
{getDisappearingMenuItem(isPublic, isKickedFromGroup, left, isBlocked, conversationId)}
{getNotificationForConvoMenuItem(
isKickedFromGroup,
left,
isBlocked,
notificationForConvo,
currentNotificationSetting,
conversationId
)}
{getBlockMenuItem(isMe, isPrivate, isBlocked, conversationId)}
2020-10-22 07:34:41 +02:00
{getCopyMenuItem(isPublic, isGroup, conversationId)}
{getMarkAllReadMenuItem(conversationId)}
{getChangeNicknameMenuItem(isMe, isGroup, conversationId)}
{getClearNicknameMenuItem(isMe, hasNickname, isGroup, conversationId)}
{getDeleteMessagesMenuItem(isPublic, conversationId)}
{getAddModeratorsMenuItem(weAreAdmin, isKickedFromGroup, conversationId)}
{getRemoveModeratorsMenuItem(weAreAdmin, isKickedFromGroup, conversationId)}
{getUpdateGroupNameMenuItem(weAreAdmin, isKickedFromGroup, left, conversationId)}
{getLeaveGroupMenuItem(isKickedFromGroup, left, isGroup, isPublic, conversationId)}
{/* TODO: add delete group */}
{getInviteContactMenuItem(isGroup, isPublic, conversationId)}
{getDeleteContactMenuItem(isMe, isGroup, isPublic, left, isKickedFromGroup, conversationId)}
</Menu>
2020-10-22 07:34:41 +02:00
);
};
function propsAreEqual(prev: PropsConversationHeaderMenu, next: PropsConversationHeaderMenu) {
return _.isEqual(prev, next);
}
export const MemoConversationHeaderMenu = React.memo(ConversationHeaderMenu, propsAreEqual);