import React, { useState } from 'react'
import { Col, Collapse, Row } from 'react-bootstrap'
import { useAppSelector } from '@/app/hooks'
import { AlertMessages } from '@/components/AlertMessages'
import { LocalVideo } from '@/components/Video/LocalVideo'
import { RemoteVideos } from '@/components/Video/RemoteVideos'
import { AspectRatioForm } from './AspectRatioForm'
import { AudioBitRateForm } from './AudioBitRateForm'
import { AudioCodecTypeForm } from './AudioCodecTypeForm'
import { AudioContentHintForm } from './AudioContentHintForm'
import { AudioForm } from './AudioForm'
import { AudioInputForm } from './AudioInputForm'
import { AudioLyraParamsBitrateForm } from './AudioLyraParamsBitrateForm'
import { AudioOutputForm } from './AudioOutputForm'
import { AudioStreamingLanguageCodeForm } from './AudioStreamingLanguageCodeForm'
import { AudioTrackForm } from './AudioTrackForm'
import { AutoGainControlForm } from './AutoGainControlForm'
import { BlurRadiusForm } from './BlurRadiusForm'
import { BundleIdForm } from './BundleIdForm'
import { CameraDeviceForm } from './CameraDeviceForm'
import { ChannelIdForm } from './ChannelIdForm'
import { ClientIdForm } from './ClientIdForm'
import { ConnectButton } from './ConnectButton'
import { DataChannelForm } from './DataChannelForm'
import { DataChannelsForm } from './DataChannelsForm'
import { DisconnectButton } from './DisconnectButton'
import { DisplayResolutionForm } from './DisplayResolutionForm'
import { E2EEForm } from './E2EEForm'
import { EchoCancellationForm } from './EchoCancellationForm'
import { EchoCancellationTypeForm } from './EchoCancellationTypeForm'
import { FacingModeForm } from './FacingModeForm'
import { FakeVolumeForm } from './FakeVolumeForm'
import { ForwardingFilterForm } from './ForwardingFilterForm'
import { FrameRateForm } from './FrameRateForm'
import { LightAdjustmentForm } from './LightAdjustmentForm'
import { MediaProcessorsNoiseSuppressionForm } from './MediaProcessorsNoiseSuppressionForm'
import { MediaTypeForm } from './MediaTypeForm'
import { MetadataForm } from './MetadataForm'
import { MicDeviceForm } from './MicDeviceForm'
import { MultistreamForm } from './MultistreamForm'
import { NoiseSuppressionForm } from './NoiseSuppressionForm'
import { ReconnectForm } from './ReconnectForm'
import { ReloadDevicesButton } from './ReloadDevicesButton'
import { ResizeModeForm } from './ResizeModeForm'
import { ResolutionForm } from './ResolutionForm'
import { RoleForm } from './RoleForm'
import { SignalingNotifyMetadataForm } from './SignalingNotifyMetadataForm'
import { SignalingUrlCandidatesForm } from './SignalingUrlCandidatesForm'
import { SimulcastForm } from './SimulcastForm'
import { SimulcastRidForm } from './SimulcastRidForm'
import { SpotlightFocusRidForm } from './SpotlightFocusRidForm'
import { SpotlightForm } from './SpotlightForm'
import { SpotlightNumberForm } from './SpotlightNumberForm'
import { SpotlightUnfocusRidForm } from './SpotlightUnfocusRidForm'
import { StartRecordingButton } from './StartRecordingButton'
import { StopRecordingButton } from './StopRecordingButton'
import { UpdateMediaStreamButton } from './UpdateMediaStreamButton'
import { VideoAV1ParamsForm } from './VideoAV1ParamsForm'
import { VideoBitRateForm } from './VideoBitRateForm'
import { VideoCodecTypeForm } from './VideoCodecTypeForm'
import { VideoContentHintForm } from './VideoContentHintForm'
import { VideoForm } from './VideoForm'
import { VideoH264ParamsForm } from './VideoH264ParamsForm'
import { VideoInputForm } from './VideoInputForm'
import { VideoTrackForm } from './VideoTrackForm'
import { VideoVP9ParamsForm } from './VideoVP9ParamsForm'
const RowChannelOptions: React.FC = () => {
return (
<>
>
)
}
const RowGetUserMediaConstraints: React.FC = () => {
const role = useAppSelector((state) => state.role)
const multistream = useAppSelector((state) => state.multistream)
const showCodecForms = !(role === 'recvonly' && (multistream === 'true' || multistream === ''))
return (
<>
{showCodecForms && (
<>
>
)}
{showCodecForms && (
<>
>
)}
>
)
}
const RowSimulcastOptions: React.FC = () => {
const simulcast = useAppSelector((state) => state.simulcast)
if (simulcast !== 'true') {
return null
}
return (
)
}
const RowSpotlightOptions: React.FC = () => {
const spotlight = useAppSelector((state) => state.spotlight)
if (spotlight !== 'true') {
return null
}
return (
)
}
const RowSignalingOptions: React.FC = () => {
const [collapsed, setCollapsed] = useState(true)
const e2ee = useAppSelector((state) => state.e2ee)
const enabledBundleId = useAppSelector((state) => state.enabledBundleId)
const enabledClientId = useAppSelector((state) => state.enabledClientId)
const enabledDataChannel = useAppSelector((state) => state.enabledDataChannel)
const enabledDataChannels = useAppSelector((state) => state.enabledDataChannels)
const enabledForwardingFilter = useAppSelector((state) => state.enabledForwardingFilter)
const enabledMetadata = useAppSelector((state) => state.enabledMetadata)
const enabledSignalingNotifyMetadata = useAppSelector(
(state) => state.enabledSignalingNotifyMetadata,
)
const enabledSignalingUrlCandidates = useAppSelector(
(state) => state.enabledSignalingUrlCandidates,
)
const reconnect = useAppSelector((state) => state.reconnect)
const enabledOptions = [
e2ee,
enabledBundleId,
enabledClientId,
enabledDataChannel,
enabledDataChannels,
enabledForwardingFilter,
enabledMetadata,
enabledSignalingNotifyMetadata,
enabledSignalingUrlCandidates,
reconnect,
].some((e) => e)
const linkClassNames = ['btn-collapse-options']
if (collapsed) {
linkClassNames.push('collapsed')
}
if (enabledOptions) {
linkClassNames.push('fw-bold')
}
const onClick = (event: React.MouseEvent): void => {
event.preventDefault()
setCollapsed(!collapsed)
}
return (
Signaling options
)
}
const RowAdvancedSignalingOptions: React.FC = () => {
const [collapsed, setCollapsed] = useState(true)
const audioStreamingLanguageCode = useAppSelector((state) => state.audioStreamingLanguageCode)
const audioLyraParamsBitrate = useAppSelector((state) => state.audioLyraParamsBitrate)
const enabledVideoVP9Params = useAppSelector((state) => state.enabledVideoVP9Params)
const enabledVideoH264Params = useAppSelector((state) => state.enabledVideoH264Params)
const enabledVideoAV1Params = useAppSelector((state) => state.enabledVideoAV1Params)
const enabledOptions = [
audioStreamingLanguageCode !== '',
audioLyraParamsBitrate !== '',
enabledVideoVP9Params,
enabledVideoH264Params,
enabledVideoAV1Params,
].some((e) => e)
const linkClassNames = ['btn-collapse-options']
if (collapsed) {
linkClassNames.push('collapsed')
}
if (enabledOptions) {
linkClassNames.push('fw-bold')
}
const onClick = (event: React.MouseEvent): void => {
event.preventDefault()
setCollapsed(!collapsed)
}
return (
Advanced signaling options
)
}
export const RowMediaType: React.FC = () => {
return (
<>
>
)
}
const RowMediaOptions: React.FC = () => {
const [collapsed, setCollapsed] = useState(true)
const audioContentHint = useAppSelector((state) => state.audioContentHint)
const autoGainControl = useAppSelector((state) => state.autoGainControl)
const noiseSuppression = useAppSelector((state) => state.noiseSuppression)
const echoCancellation = useAppSelector((state) => state.echoCancellation)
const echoCancellationType = useAppSelector((state) => state.echoCancellationType)
const videoContentHint = useAppSelector((state) => state.videoContentHint)
const resolution = useAppSelector((state) => state.resolution)
const frameRate = useAppSelector((state) => state.frameRate)
const blurRadius = useAppSelector((state) => state.blurRadius)
const lightAdjustment = useAppSelector((state) => state.lightAdjustment)
const mediaProcessorsNoiseSuppression = useAppSelector(
(state) => state.mediaProcessorsNoiseSuppression,
)
const enabledOptions = [
audioContentHint !== '',
autoGainControl !== '',
noiseSuppression !== '',
echoCancellation !== '',
echoCancellationType !== '',
videoContentHint !== '',
resolution !== '',
frameRate !== '',
blurRadius !== '',
lightAdjustment !== '',
mediaProcessorsNoiseSuppression,
].some((e) => e)
const linkClassNames = ['btn-collapse-options']
if (collapsed) {
linkClassNames.push('collapsed')
}
if (enabledOptions) {
linkClassNames.push('fw-bold')
}
const onClick = (event: React.MouseEvent): void => {
event.preventDefault()
setCollapsed(!collapsed)
}
return (
Media options
)
}
const RowDevices: React.FC = () => {
const role = useAppSelector((state) => state.role)
return (
{role !== 'recvonly' ? (
<>
>
) : null}
)
}
export const RowMediaDevices: React.FC = () => {
const role = useAppSelector((state) => state.role)
return (
{role !== 'recvonly' ? (
<>
>
) : null}
)
}
export const DevtoolsPane: React.FC = () => {
const debug = useAppSelector((state) => state.debug)
const role = useAppSelector((state) => state.role)
const multistream = useAppSelector((state) => state.multistream)
const showAdvancedSignalingForms = !(
role === 'recvonly' &&
(multistream === 'true' || multistream === '')
)
return (
{showAdvancedSignalingForms &&
}
{role !== 'recvonly' ? (
<>
>
) : null}
{role === 'recvonly' || role === 'sendrecv' ?
: null}
)
}