From c403bbc3477121620dd630bd9b43186301dcdd62 Mon Sep 17 00:00:00 2001 From: lebaudantoine Date: Fri, 27 Sep 2024 15:24:48 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F(frontend)=20extract=20toggle?= =?UTF-8?q?=20device=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Encapsulate toggle logic in a dedicated component. Prepare the introduction of the push to talk feature. --- .../controls/SelectToggleDevice.tsx | 41 ++++------------ .../components/controls/ToggleDevice.tsx | 47 +++++++++++++++++++ 2 files changed, 55 insertions(+), 33 deletions(-) create mode 100644 src/frontend/src/features/rooms/livekit/components/controls/ToggleDevice.tsx diff --git a/src/frontend/src/features/rooms/livekit/components/controls/SelectToggleDevice.tsx b/src/frontend/src/features/rooms/livekit/components/controls/SelectToggleDevice.tsx index e6b1954d..09bf0cc6 100644 --- a/src/frontend/src/features/rooms/livekit/components/controls/SelectToggleDevice.tsx +++ b/src/frontend/src/features/rooms/livekit/components/controls/SelectToggleDevice.tsx @@ -5,7 +5,7 @@ import { UseTrackToggleProps, } from '@livekit/components-react' import { HStack } from '@/styled-system/jsx' -import { Button, Menu, MenuList, ToggleButton } from '@/primitives' +import { Button, Menu, MenuList } from '@/primitives' import { RemixiconComponentType, RiArrowDownSLine, @@ -16,11 +16,9 @@ import { } from '@remixicon/react' import { Track } from 'livekit-client' -import { useMemo } from 'react' - -import { appendShortcutLabel } from '@/features/shortcuts/utils' import { Shortcut } from '@/features/shortcuts/types' -import { useRegisterKeyboardShortcut } from '@/features/shortcuts/useRegisterKeyboardShortcut' + +import { ToggleDevice } from '@/features/rooms/livekit/components/controls/ToggleDevice.tsx' export type ToggleSource = Exclude< Track.Source, @@ -29,7 +27,7 @@ export type ToggleSource = Exclude< type SelectToggleSource = Exclude -type SelectToggleDeviceConfig = { +export type SelectToggleDeviceConfig = { kind: MediaDeviceKind iconOn: RemixiconComponentType iconOff: RemixiconComponentType @@ -75,40 +73,17 @@ export const SelectToggleDevice = ({ if (!config) { throw new Error('Invalid source') } - const { t } = useTranslation('rooms', { keyPrefix: 'join' }) - const { toggle, enabled } = useTrackToggle(props) - - const { kind, iconOn, iconOff } = config + const trackProps = useTrackToggle(props) const { devices, activeDeviceId, setActiveMediaDevice } = - useMediaDeviceSelect({ kind }) + useMediaDeviceSelect({ kind: config.kind }) - useRegisterKeyboardShortcut({ shortcut: config.shortcut, handler: toggle }) - - const toggleLabel = useMemo(() => { - const label = t(enabled ? 'disable' : 'enable', { - keyPrefix: `join.${kind}`, - }) - return config.shortcut ? appendShortcutLabel(label, config.shortcut) : label - }, [enabled, kind, config.shortcut, t]) - - const selectLabel = t('choose', { keyPrefix: `join.${kind}` }) - const Icon = enabled ? iconOn : iconOff + const selectLabel = t('choose', { keyPrefix: `join.${config.kind}` }) return ( - toggle()} - aria-label={toggleLabel} - tooltip={toggleLabel} - groupPosition="left" - > - - +