// Copyright 2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import React from 'react'; import type { ConversationType } from '../../../state/ducks/conversations'; import type { LocalizerType } from '../../../types/Util'; import { getAccessControlOptions } from '../../../util/getAccessControlOptions'; import { SignalService as Proto } from '../../../protobuf'; import { PanelRow } from './PanelRow'; import { PanelSection } from './PanelSection'; import { Select } from '../../Select'; import { useUniqueId } from '../../../hooks/useUniqueId'; export type PropsDataType = { conversation?: ConversationType; i18n: LocalizerType; }; type PropsActionType = { setAccessControlAttributesSetting: (id: string, value: number) => void; setAccessControlMembersSetting: (id: string, value: number) => void; setAnnouncementsOnly: (id: string, value: boolean) => void; }; export type PropsType = PropsDataType & PropsActionType; export function GroupV2Permissions({ conversation, i18n, setAccessControlAttributesSetting, setAccessControlMembersSetting, setAnnouncementsOnly, }: PropsType): JSX.Element { const addMembersSelectId = useUniqueId(); const groupInfoSelectId = useUniqueId(); const announcementSelectId = useUniqueId(); if (conversation === undefined) { throw new Error('GroupV2Permissions rendered without a conversation'); } const updateAccessControlAttributes = (value: string) => { setAccessControlAttributesSetting(conversation.id, Number(value)); }; const updateAccessControlMembers = (value: string) => { setAccessControlMembersSetting(conversation.id, Number(value)); }; const AccessControlEnum = Proto.AccessControl.AccessRequired; const updateAnnouncementsOnly = (value: string) => { setAnnouncementsOnly( conversation.id, Number(value) === AccessControlEnum.ADMINISTRATOR ); }; const accessControlOptions = getAccessControlOptions(i18n); const announcementsOnlyValue = String( conversation.announcementsOnly ? AccessControlEnum.ADMINISTRATOR : AccessControlEnum.MEMBER ); const showAnnouncementsOnlyPermission = conversation.areWeAdmin && (conversation.announcementsOnly || conversation.announcementsOnlyReady); return ( {i18n('icu:ConversationDetails--add-members-label')} } info={i18n('icu:ConversationDetails--add-members-info')} right={ } /> {showAnnouncementsOnlyPermission && ( {i18n('icu:ConversationDetails--announcement-label')} } info={i18n('icu:ConversationDetails--announcement-info')} right={