From bc81da43c2969f0833018841ed2b388c5409cd24 Mon Sep 17 00:00:00 2001 From: Timo K Date: Mon, 18 May 2026 19:28:53 +0200 Subject: [PATCH] use previous device selection logic --- locales/en/app.json | 1 - src/components/MediaMuteAndSwitchButton.tsx | 24 ++++--- src/settings/DeviceSelection.tsx | 69 ++++++++++++++------- 3 files changed, 61 insertions(+), 33 deletions(-) diff --git a/locales/en/app.json b/locales/en/app.json index 82aca385..a14663e9 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -204,7 +204,6 @@ "change_device_button": "Change audio device", "default": "Default", "default_named": "Default <2>({{name}})", - "default_numbered": "Default {{n}}", "handset": "Handset", "loudspeaker": "Loudspeaker", "microphone": "Microphone", diff --git a/src/components/MediaMuteAndSwitchButton.tsx b/src/components/MediaMuteAndSwitchButton.tsx index 4d4e7147..a04185ba 100644 --- a/src/components/MediaMuteAndSwitchButton.tsx +++ b/src/components/MediaMuteAndSwitchButton.tsx @@ -114,14 +114,19 @@ export const MediaMuteAndSwitchButton: FC = ({ let IconOptions: ComponentType> | undefined; let optionsButtonLabel: string; + let numberedLabel: (number: number) => string; switch (iconsAndLabels) { case "video": IconOptions = VideoCallIcon; optionsButtonLabel = t("settings.devices.camera"); + numberedLabel = (n): string => + t("settings.devices.microphone_numbered", { n }); break; case "audio": IconOptions = MicOnIcon; optionsButtonLabel = t("settings.devices.microphone"); + numberedLabel = (n): string => + t("settings.devices.camera_numbered", { n }); break; } return ( @@ -154,16 +159,15 @@ export const MediaMuteAndSwitchButton: FC = ({ } > {options?.map(({ label, id }) => { - const labelText = ((): string => { - switch (label.type) { - case "name": - return label.name; - case "number": - return t("settings.devices.default_numbered", { - n: label.number, - }); - } - })(); + let labelText: string; + switch (label.type) { + case "name": + labelText = label.name; + break; + case "number": + labelText = numberedLabel(label.number); + break; + } return ( string; } -export const DeviceSelection: FC = ({ device, title }) => { +export const DeviceSelection: FC = ({ + device, + title, + numberedLabel, +}) => { + const { t } = useTranslation(); const groupId = useId(); const available = useObservableEagerState(device.available$); const selectedId = useObservableEagerState(device.selected$)?.id; - const { t } = useTranslation(); const onChange = useCallback( (e: ChangeEvent) => { device.select(e.target.value); @@ -59,24 +70,38 @@ export const DeviceSelection: FC = ({ device, title }) => {
{[...available].map(([id, label]) => { - const labelText = ((): string => { - switch (label.type) { - case "name": - return label.name; - case "number": - return t("settings.devices.default_numbered", { - n: label.number, - }); - case "default": - return label.name === null - ? t("settings.devices.default") - : t("settings.devices.default_named", label.name); - case "speaker": - return t("settings.devices.loudspeaker"); - case "earpiece": - return t("settings.devices.handset"); - } - })(); + let labelText: ReactNode; + switch (label.type) { + case "name": + labelText = label.name; + break; + case "number": + labelText = numberedLabel(label.number); + break; + case "default": + labelText = + label.name === null ? ( + t("settings.devices.default") + ) : ( + + Default{" "} + + ({{ name: label.name } as unknown as ReactElement}) + + + ); + break; + case "speaker": + labelText = t("settings.devices.loudspeaker"); + break; + case "earpiece": + labelText = t("settings.devices.handset"); + break; + } + return (