// Copyright 2022 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import React, { useMemo, useState } from 'react'; import type { ConversationType } from '../state/ducks/conversations'; import type { LocalizerType } from '../types/Util'; import type { StoryDistributionListDataType } from '../state/ducks/storyDistributionLists'; import type { UUIDStringType } from '../types/UUID'; import { Avatar, AvatarSize } from './Avatar'; import { Checkbox } from './Checkbox'; import { MY_STORIES_ID, getStoryDistributionListName } from '../types/Stories'; import { Modal } from './Modal'; import { StoryDistributionListName } from './StoryDistributionListName'; export type PropsType = { distributionLists: Array; i18n: LocalizerType; me: ConversationType; onClose: () => unknown; onSend: (listIds: Array) => unknown; signalConnections: Array; }; function getListViewers( list: StoryDistributionListDataType, i18n: LocalizerType, signalConnections: Array ): string { let memberCount = list.memberUuids.length; if (list.id === MY_STORIES_ID && list.isBlockList) { memberCount = list.isBlockList ? signalConnections.length - list.memberUuids.length : signalConnections.length; } return memberCount === 1 ? i18n('StoriesSettingsModal__viewers--singular', ['1']) : i18n('StoriesSettings__viewers--plural', [String(memberCount)]); } export const SendStoryModal = ({ distributionLists, i18n, me, onClose, onSend, signalConnections, }: PropsType): JSX.Element => { const [selectedListIds, setSelectedListIds] = useState>( new Set() ); const selectedListNames = useMemo( () => distributionLists .filter(list => selectedListIds.has(list.id)) .map(list => list.name), [distributionLists, selectedListIds] ); return ( {distributionLists.map(list => ( { if (value) { setSelectedListIds(listIds => { listIds.add(list.id); return new Set([...listIds]); }); } else { setSelectedListIds(listIds => { listIds.delete(list.id); return new Set([...listIds]); }); } }} > {({ id, checkboxNode }) => ( <> {checkboxNode} )} ))}
{selectedListNames .map(listName => getStoryDistributionListName(i18n, listName, listName) ) .join(', ')}