// Copyright 2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import React from 'react'; import { ConversationType } from '../../../state/ducks/conversations'; import { ExpirationTimerOptions, TimerOption, } from '../../../util/ExpirationTimerOptions'; import { LocalizerType } from '../../../types/Util'; import { MediaItemType } from '../../LightboxGallery'; import { PanelRow } from './PanelRow'; import { PanelSection } from './PanelSection'; import { ConversationDetailsActions } from './ConversationDetailsActions'; import { ConversationDetailsHeader } from './ConversationDetailsHeader'; import { ConversationDetailsIcon } from './ConversationDetailsIcon'; import { ConversationDetailsMediaList } from './ConversationDetailsMediaList'; import { ConversationDetailsMembershipList } from './ConversationDetailsMembershipList'; export type StateProps = { canEditGroupInfo: boolean; conversation?: ConversationType; hasGroupLink: boolean; i18n: LocalizerType; isAdmin: boolean; loadRecentMediaItems: (limit: number) => void; setDisappearingMessages: (seconds: number) => void; showAllMedia: () => void; showContactModal: (conversationId: string) => void; showGroupLinkManagement: () => void; showGroupV2Permissions: () => void; showPendingInvites: () => void; showLightboxForMedia: ( selectedMediaItem: MediaItemType, media: Array ) => void; onBlockAndDelete: () => void; onDelete: () => void; }; export type Props = StateProps; export const ConversationDetails: React.ComponentType = ({ canEditGroupInfo, conversation, hasGroupLink, i18n, isAdmin, loadRecentMediaItems, setDisappearingMessages, showAllMedia, showContactModal, showGroupLinkManagement, showGroupV2Permissions, showPendingInvites, showLightboxForMedia, onBlockAndDelete, onDelete, }) => { const updateExpireTimer = (event: React.ChangeEvent) => { setDisappearingMessages(parseInt(event.target.value, 10)); }; if (conversation === undefined) { throw new Error('ConversationDetails rendered without a conversation'); } const pendingMemberships = conversation.pendingMemberships || []; const pendingApprovalMemberships = conversation.pendingApprovalMemberships || []; const invitesCount = pendingMemberships.length + pendingApprovalMemberships.length; return (
{canEditGroupInfo ? ( } info={i18n('ConversationDetails--disappearing-messages-info')} label={i18n('ConversationDetails--disappearing-messages-label')} right={
} />
) : null} {isAdmin || hasGroupLink ? ( } label={i18n('ConversationDetails--group-link')} onClick={showGroupLinkManagement} right={hasGroupLink ? i18n('on') : i18n('off')} /> ) : null} } label={i18n('ConversationDetails--requests-and-invites')} onClick={showPendingInvites} right={invitesCount} /> {isAdmin ? ( } label={i18n('permissions')} onClick={showGroupV2Permissions} /> ) : null}
); };