// SPDX-License-Identifier: AGPL-3.0-or-later import * as Modal from '@app/features/app/components/dialogs/Modal'; import {CopyLinkSection} from '@app/features/app/components/dialogs/shared/CopyLinkSection'; import selectorStyles from '@app/features/app/components/dialogs/shared/SelectorModalStyles.module.css'; import {FriendSelector} from '@app/features/app/components/shared/FriendSelector'; import {useAddFriendsToGroupModalLogic} from '@app/features/channel/utils/AddFriendsToGroupModalUtils'; import {CREATE_DESCRIPTOR, SEARCH_FRIENDS_DESCRIPTOR} from '@app/features/i18n/utils/CommonMessageDescriptors'; import inviteStyles from '@app/features/invite/components/modals/InviteModal.module.css'; import StreamerMode from '@app/features/streamer_mode/state/StreamerMode'; import {remFromPx} from '@app/features/theme/layout/RemFromPx'; import {Button} from '@app/features/ui/button/Button'; import {Input} from '@app/features/ui/components/form/FormInput'; import {msg} from '@lingui/core/macro'; import {Trans, useLingui} from '@lingui/react/macro'; import {MagnifyingGlassIcon} from '@phosphor-icons/react'; import {observer} from 'mobx-react-lite'; const SELECT_FRIENDS_DESCRIPTOR = msg({ message: 'Select friends', comment: 'Button or menu action label in the add friends to group modal. Keep it concise.', }); const GENERATE_INVITE_LINK_DESCRIPTOR = msg({ message: 'Generate invite link', comment: 'Short label in the add friends to group modal. Keep it concise.', }); const LINK_HIDDEN_WHILE_SHARING_DESCRIPTOR = msg({ message: 'Link hidden while sharing', comment: 'Replacement text for an invite URL while streaming privacy is active.', }); const INVITE_LINK_HIDDEN_LABEL_DESCRIPTOR = msg({ message: 'Invite link is hidden while sharing:', comment: 'Label above a masked invite link while streaming privacy is active.', }); interface AddFriendsToGroupModalProps { channelId: string; } export const AddFriendsToGroupModal = observer((props: AddFriendsToGroupModalProps) => { const {i18n} = useLingui(); const modalLogic = useAddFriendsToGroupModalLogic(props.channelId); const hasSelection = modalLogic.selectedUserIds.length > 0; const canAddFriends = hasSelection && !modalLogic.isAdding; const hideInviteLinks = StreamerMode.shouldHideInviteLinks; const displayedInviteLink = hideInviteLinks && modalLogic.inviteLink ? i18n._(LINK_HIDDEN_WHILE_SHARING_DESCRIPTOR) : (modalLogic.inviteLink ?? ''); return (
modalLogic.setSearchQuery(e.target.value)} placeholder={i18n._(SEARCH_FRIENDS_DESCRIPTOR)} leftIcon={ } className={selectorStyles.headerSearchInput} rightElement={ } data-flx="relationship.add-friends-to-group-modal.input.set-search-query" />
or send an invite to a friend: ) } value={displayedInviteLink} onCopy={modalLogic.inviteLink && !hideInviteLinks ? modalLogic.handleGenerateOrCopyInvite : undefined} copyDisabled={modalLogic.isGeneratingInvite || hideInviteLinks} inputProps={{placeholder: i18n._(GENERATE_INVITE_LINK_DESCRIPTOR)}} rightElement={ !modalLogic.inviteLink ? ( ) : undefined } data-flx="relationship.add-friends-to-group-modal.copy-link-section" >

Your invite expires in 24 hours

); }); AddFriendsToGroupModal.displayName = 'AddFriendsToGroupModal';