import { useRef } from 'react';
import { clsm } from '../../../../utils';
import { streamManager as $content } from '../../../../content';
import { useBroadcast } from '../../../../contexts/Broadcast';
import { useModal } from '../../../../contexts/Modal';
import { useStreams } from '../../../../contexts/Streams';
import Button from '../../../../components/Button';
import Spinner from '../../../../components/Spinner';
import Tooltip from '../../../../components/Tooltip';
import PropTypes from 'prop-types';
import { CAMERA_LAYER_NAME } from '../../../../contexts/Broadcast/useLayers';
import { MICROPHONE_AUDIO_INPUT_NAME } from '../../../../contexts/Broadcast/useAudioMixer';
const $webBroadcastContent = $content.stream_manager_web_broadcast;
const {
your_channel_is_already_live: YourChannelIsAlreadyLive,
notifications: {
error: { permissions_denied: PermissionDenied }
}
} = $webBroadcastContent;
const GoLiveStreamButton = ({ tooltipPosition, tooltipCustomTranslate }) => {
const streamButtonRef = useRef();
const {
isBroadcasting,
startBroadcast,
stopBroadcast,
isConnecting,
activeDevices
} = useBroadcast();
const {
[CAMERA_LAYER_NAME]: activeCamera,
[MICROPHONE_AUDIO_INPUT_NAME]: activeMicrophone
} = activeDevices;
const { openModal } = useModal();
const { isLive } = useStreams();
const isDisabled =
(isLive && !isBroadcasting) || !activeCamera || !activeMicrophone;
const handleStartStopBroadcastingAction = () => {
if (isBroadcasting) {
openModal({
content: {
confirmText: $webBroadcastContent.end_stream,
message: $webBroadcastContent.confirm_end_stream,
isDestructive: true
},
onConfirm: stopBroadcast,
lastFocusedElement: streamButtonRef
});
} else startBroadcast();
};
let tooltipMessage;
if (isLive && !isBroadcasting) tooltipMessage = YourChannelIsAlreadyLive;
else if (activeCamera === false || activeMicrophone === false)
tooltipMessage = PermissionDenied;
let buttonTextContent;
if (isConnecting) {
buttonTextContent =
{$webBroadcastContent.end_stream}
; } else { buttonTextContent ={$webBroadcastContent.start_stream}
; } return (