// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import React, { useState } from 'react';
import classNames from 'classnames';
import type { CallHistoryGroup } from '../types/CallDisposition.js';
import type { LocalizerType } from '../types/I18N.js';
import { CallHistoryGroupPanelSection } from './conversation/conversation-details/CallHistoryGroupPanelSection.js';
import { PanelSection } from './conversation/conversation-details/PanelSection.js';
import {
ConversationDetailsIcon,
IconType,
} from './conversation/conversation-details/ConversationDetailsIcon.js';
import { PanelRow } from './conversation/conversation-details/PanelRow.js';
import type { CallLinkRestrictions, CallLinkType } from '../types/CallLink.js';
import { linkCallRoute } from '../util/signalRoutes.js';
import { drop } from '../util/drop.js';
import { Avatar, AvatarSize } from './Avatar.js';
import { Button, ButtonSize, ButtonVariant } from './Button.js';
import { copyCallLink } from '../util/copyLinksWithToast.js';
import { getColorForCallLink } from '../util/getColorForCallLink.js';
import { isCallLinkAdmin } from '../types/CallLink.js';
import { CallLinkRestrictionsSelect } from './CallLinkRestrictionsSelect.js';
import { ConfirmationDialog } from './ConfirmationDialog.js';
import { InAnotherCallTooltip } from './conversation/InAnotherCallTooltip.js';
import { offsetDistanceModifier } from '../util/popperUtil.js';
import { Tooltip, TooltipPlacement } from './Tooltip.js';
function toUrlWithoutProtocol(url: URL): string {
return `${url.hostname}${url.pathname}${url.search}${url.hash}`;
}
export type CallLinkDetailsProps = Readonly<{
callHistoryGroup: CallHistoryGroup;
callLink: CallLinkType | undefined;
isAnybodyInCall: boolean;
isCallActiveOnServer: boolean;
isInCall: boolean;
isInAnotherCall: boolean;
i18n: LocalizerType;
onDeleteCallLink: () => void;
onOpenCallLinkAddNameModal: () => void;
onStartCallLinkLobby: () => void;
onShareCallLinkViaSignal: () => void;
onUpdateCallLinkRestrictions: (restrictions: CallLinkRestrictions) => void;
}>;
export function CallLinkDetails({
callHistoryGroup,
callLink,
i18n,
isAnybodyInCall,
isCallActiveOnServer,
isInCall,
isInAnotherCall,
onDeleteCallLink,
onOpenCallLinkAddNameModal,
onStartCallLinkLobby,
onShareCallLinkViaSignal,
onUpdateCallLinkRestrictions,
}: CallLinkDetailsProps): JSX.Element {
const [isDeleteCallLinkModalOpen, setIsDeleteCallLinkModalOpen] =
useState(false);
if (!callLink) {
return renderMissingCallLink({ callHistoryGroup, i18n });
}
const webUrl = linkCallRoute.toWebUrl({
key: callLink.rootKey,
epoch: callLink.epoch,
});
const joinButton = (
);
const callLinkRestrictionsSelect = (
{toUrlWithoutProtocol(webUrl)}