NavigatorRoomLinkView.tsx 3.3 Ko
Télécharger le fichier
import { FC, useMemo, useState } from 'react';
import { FaCheck, FaCopy } from 'react-icons/fa';
import { CopyToClipboard, GetConfigurationValue, LocalizeText } from '../../../api';
import { Button, LayoutRoomThumbnailView, OctaneCardContentView, OctaneCardHeaderView, OctaneCardView, Text } from '../../../common';
import { NativeTextTree } from '../../../common/native-text/NativeTextTree';
import { useNavigatorData } from '../../../hooks';
export class NavigatorRoomLinkViewProps {
onCloseClick: () => void;
}
export const NavigatorRoomLinkView: FC<NavigatorRoomLinkViewProps> = (props) => {
const { onCloseClick = null } = props;
const { navigatorData } = useNavigatorData();
const [copied, setCopied] = useState(false);
const roomLink = useMemo(() => {
if (!navigatorData.enteredGuestRoom) return '';
return LocalizeText('navigator.embed.src', ['roomId'], [navigatorData.enteredGuestRoom.roomId.toString()]).replace(
'${url.prefix}',
GetConfigurationValue<string>('url.prefix', '')
);
}, [navigatorData.enteredGuestRoom]);
if (!navigatorData.enteredGuestRoom) return null;
return (
<NativeTextTree>
<OctaneCardView
className="octane-room-link min-w-0 w-[min(430px,calc(100vw-16px))] max-w-[calc(100vw-16px)] max-h-[calc(100vh-16px)]"
theme="primary-slim"
>
<OctaneCardHeaderView headerText={LocalizeText('navigator.embed.title')} onCloseClick={onCloseClick} />
<OctaneCardContentView className="text-black flex items-center max-h-[calc(100vh-72px)]" overflow="auto">
<div className="flex flex-col sm:flex-row gap-2 min-w-0">
<LayoutRoomThumbnailView customUrl={navigatorData.enteredGuestRoom.officialRoomPicRef} roomId={navigatorData.enteredGuestRoom.roomId} />
<div className="flex flex-col min-w-0">
<Text bold fontSize={5}>
{LocalizeText('navigator.embed.headline')}
</Text>
<Text>{LocalizeText('navigator.embed.info')}</Text>
<div className="octane-navigator-air__link-field">
<input
readOnly
className="form-control form-control-sm w-full min-w-0"
type="text"
value={roomLink}
onFocus={(event) => event.target.select()}
/>
<Button
variant="secondary"
title={LocalizeText('generic.copy')}
aria-label={LocalizeText('generic.copy')}
onClick={() => void CopyToClipboard(roomLink).then(setCopied)}
>
{copied ? <FaCheck className="fa-icon" /> : <FaCopy className="fa-icon" />}
</Button>
</div>
</div>
</div>
</OctaneCardContentView>
</OctaneCardView>
</NativeTextTree>
);
};
