/* Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ import React, { useEffect, useState } from "react"; import MediaDeviceHandler, { MediaDeviceKindEnum } from "../../../MediaDeviceHandler"; import IconizedContextMenu, { IconizedContextMenuOptionList, IconizedContextMenuRadio } from "./IconizedContextMenu"; import { IProps as IContextMenuProps } from "../../structures/ContextMenu"; import { _t, _td, TranslationKey } from "../../../languageHandler"; const SECTION_NAMES: Record = { [MediaDeviceKindEnum.AudioInput]: _td("voip|input_devices"), [MediaDeviceKindEnum.AudioOutput]: _td("voip|output_devices"), [MediaDeviceKindEnum.VideoInput]: _td("common|cameras"), }; interface IDeviceContextMenuDeviceProps { label: string; selected: boolean; onClick: () => void; } const DeviceContextMenuDevice: React.FC = ({ label, selected, onClick }) => { return ( ); }; interface IDeviceContextMenuSectionProps { deviceKind: MediaDeviceKindEnum; } const DeviceContextMenuSection: React.FC = ({ deviceKind }) => { const [devices, setDevices] = useState([]); const [selectedDevice, setSelectedDevice] = useState(MediaDeviceHandler.getDevice(deviceKind)); useEffect(() => { const getDevices = async (): Promise => { return setDevices((await MediaDeviceHandler.getDevices())?.[deviceKind] ?? []); }; getDevices(); }, [deviceKind]); const onDeviceClick = (deviceId: string): void => { MediaDeviceHandler.instance.setDevice(deviceId, deviceKind); setSelectedDevice(deviceId); }; return ( {devices.map(({ label, deviceId }) => { return ( onDeviceClick(deviceId)} /> ); })} ); }; interface IProps extends IContextMenuProps { deviceKinds: MediaDeviceKind[]; } const DeviceContextMenu: React.FC = ({ deviceKinds, ...props }) => { return ( {deviceKinds.map((kind) => { return ; })} ); }; export default DeviceContextMenu;