✨(front) make ToggleDevice work outside of a room
This component is needed on the join screen thus out of a room context.
This commit is contained in:
@@ -6,13 +6,19 @@ import { useTranslation } from 'react-i18next'
|
|||||||
import { SelectToggleDeviceConfig } from './SelectToggleDevice'
|
import { SelectToggleDeviceConfig } from './SelectToggleDevice'
|
||||||
import useLongPress from '@/features/shortcuts/useLongPress'
|
import useLongPress from '@/features/shortcuts/useLongPress'
|
||||||
import { ActiveSpeaker } from '@/features/rooms/components/ActiveSpeaker'
|
import { ActiveSpeaker } from '@/features/rooms/components/ActiveSpeaker'
|
||||||
import { useIsSpeaking, useLocalParticipant } from '@livekit/components-react'
|
import {
|
||||||
|
useIsSpeaking,
|
||||||
|
useLocalParticipant,
|
||||||
|
useMaybeRoomContext,
|
||||||
|
} from '@livekit/components-react'
|
||||||
|
import { ButtonRecipeProps } from '@/primitives/buttonRecipe'
|
||||||
import { ToggleButtonProps } from '@/primitives/ToggleButton'
|
import { ToggleButtonProps } from '@/primitives/ToggleButton'
|
||||||
|
|
||||||
export type ToggleDeviceProps = {
|
export type ToggleDeviceProps = {
|
||||||
enabled: boolean
|
enabled: boolean
|
||||||
toggle: () => void
|
toggle: () => void
|
||||||
config: SelectToggleDeviceConfig
|
config: SelectToggleDeviceConfig
|
||||||
|
variant?: NonNullable<ButtonRecipeProps>['variant']
|
||||||
toggleButtonProps?: Partial<ToggleButtonProps>
|
toggleButtonProps?: Partial<ToggleButtonProps>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,6 +26,7 @@ export const ToggleDevice = ({
|
|||||||
config,
|
config,
|
||||||
enabled,
|
enabled,
|
||||||
toggle,
|
toggle,
|
||||||
|
variant = 'primaryDark',
|
||||||
toggleButtonProps,
|
toggleButtonProps,
|
||||||
}: ToggleDeviceProps) => {
|
}: ToggleDeviceProps) => {
|
||||||
const { t } = useTranslation('rooms', { keyPrefix: 'join' })
|
const { t } = useTranslation('rooms', { keyPrefix: 'join' })
|
||||||
@@ -51,17 +58,15 @@ export const ToggleDevice = ({
|
|||||||
|
|
||||||
const Icon = enabled ? iconOn : iconOff
|
const Icon = enabled ? iconOn : iconOff
|
||||||
|
|
||||||
const { localParticipant } = useLocalParticipant()
|
const context = useMaybeRoomContext()
|
||||||
const isSpeaking = useIsSpeaking(localParticipant)
|
if (kind === 'audioinput' && pushToTalk && context) {
|
||||||
|
return <ActiveSpeakerWrapper />
|
||||||
if (kind === 'audioinput' && pushToTalk) {
|
|
||||||
return <ActiveSpeaker isSpeaking={isSpeaking} pushToTalk />
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ToggleButton
|
<ToggleButton
|
||||||
isSelected={!enabled}
|
isSelected={!enabled}
|
||||||
variant={enabled ? 'primaryDark' : 'error2'}
|
variant={enabled ? variant : 'error2'}
|
||||||
shySelected
|
shySelected
|
||||||
onPress={() => toggle()}
|
onPress={() => toggle()}
|
||||||
aria-label={toggleLabel}
|
aria-label={toggleLabel}
|
||||||
@@ -73,3 +78,9 @@ export const ToggleDevice = ({
|
|||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ActiveSpeakerWrapper = () => {
|
||||||
|
const { localParticipant } = useLocalParticipant()
|
||||||
|
const isSpeaking = useIsSpeaking(localParticipant)
|
||||||
|
return <ActiveSpeaker isSpeaking={isSpeaking} pushToTalk />
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user