diff --git a/src/frontend/src/features/rooms/livekit/components/controls/Device/AudioDevicesControl.tsx b/src/frontend/src/features/rooms/livekit/components/controls/Device/AudioDevicesControl.tsx index f9a055c5..ccff7568 100644 --- a/src/frontend/src/features/rooms/livekit/components/controls/Device/AudioDevicesControl.tsx +++ b/src/frontend/src/features/rooms/livekit/components/controls/Device/AudioDevicesControl.tsx @@ -1,7 +1,7 @@ import { useTranslation } from 'react-i18next' import { useTrackToggle, UseTrackToggleProps } from '@livekit/components-react' import { Button, Popover } from '@/primitives' -import { RiArrowUpSLine, RiMicLine, RiMicOffLine } from '@remixicon/react' +import { RiArrowUpSLine } from '@remixicon/react' import { Track } from 'livekit-client' import { ToggleDevice } from './ToggleDevice' @@ -26,8 +26,6 @@ export const AudioDevicesControl = ({ }: AudioDevicesControlProps) => { const config: ToggleDeviceConfig = { kind: 'audioinput', - iconOn: RiMicLine, - iconOff: RiMicOffLine, shortcut: { key: 'd', ctrlKey: true, diff --git a/src/frontend/src/features/rooms/livekit/components/controls/Device/SelectDevice.tsx b/src/frontend/src/features/rooms/livekit/components/controls/Device/SelectDevice.tsx index b1cb8fe3..980dd94e 100644 --- a/src/frontend/src/features/rooms/livekit/components/controls/Device/SelectDevice.tsx +++ b/src/frontend/src/features/rooms/livekit/components/controls/Device/SelectDevice.tsx @@ -1,22 +1,13 @@ -import { - RemixiconComponentType, - RiMicLine, - RiVideoOnLine, - RiVolumeDownLine, -} from '@remixicon/react' import { useTranslation } from 'react-i18next' import { useMediaDeviceSelect } from '@livekit/components-react' import { useEffect, useMemo } from 'react' -import { Select } from '@/primitives/Select' +import { Select, SelectProps } from '@/primitives/Select' import { Placement } from '@react-types/overlays' import { useCannotUseDevice } from '../../../hooks/useCannotUseDevice' +import { useDeviceIcons } from '@/features/rooms/livekit/hooks/useDeviceIcons' type DeviceItems = Array<{ value: string; label: string }> -type DeviceConfig = { - icon: RemixiconComponentType -} - type SelectDeviceContext = { variant?: 'light' | 'dark' placement?: Placement @@ -29,20 +20,19 @@ type SelectDeviceProps = { context?: 'join' | 'room' } -type SelectDevicePermissionsProps = SelectDeviceProps & { - config: DeviceConfig - contextProps: SelectDeviceContext -} +type SelectDevicePermissionsProps = SelectDeviceProps & + Pick, 'placement' | 'variant'> -const SelectDevicePermissions = ({ +const SelectDevicePermissions = ({ id, kind, - config, onSubmit, - contextProps, -}: SelectDevicePermissionsProps) => { + ...props +}: SelectDevicePermissionsProps) => { const { t } = useTranslation('rooms', { keyPrefix: 'join' }) + const deviceIcons = useDeviceIcons(kind) + const { devices, activeDeviceId, setActiveMediaDevice } = useMediaDeviceSelect({ kind: kind, requestPermissions: true }) @@ -75,7 +65,7 @@ const SelectDevicePermissions = ({ label="" isDisabled={items.length === 0} items={items} - iconComponent={config?.icon} + iconComponent={deviceIcons.select} placeholder={ items.length === 0 ? t('selectDevice.loading') @@ -86,7 +76,7 @@ const SelectDevicePermissions = ({ onSubmit?.(key as string) setActiveMediaDevice(key as string) }} - {...contextProps} + {...props} /> ) } @@ -106,27 +96,9 @@ export const SelectDevice = ({ return {} }, [context]) - const config = useMemo(() => { - switch (kind) { - case 'audioinput': - return { - icon: RiMicLine, - } - case 'audiooutput': - return { - icon: RiVolumeDownLine, - } - case 'videoinput': - return { - icon: RiVideoOnLine, - } - } - }, [kind]) - + const deviceIcons = useDeviceIcons(kind) const cannotUseDevice = useCannotUseDevice(kind) - if (!config) return null - if (cannotUseDevice) { return (