import React, { Component } from 'react'; import { WithTranslation } from 'react-i18next'; import { translate } from '../../base/i18n/functions'; // eslint-disable-next-line lines-around-comment // @ts-ignore import Audio from '../../base/media/components/Audio.web'; import Button from '../../base/ui/components/web/Button'; import { BUTTON_TYPES } from '../../base/ui/constants.any'; const TEST_SOUND_PATH = 'sounds/ring.mp3'; /** * The type of the React {@code Component} props of {@link AudioOutputPreview}. */ interface IProps extends WithTranslation { /** * Button className. */ className?: string; /** * The device id of the audio output device to use. */ deviceId: string; } /** * React component for playing a test sound through a specified audio device. * * @augments Component */ class AudioOutputPreview extends Component { _audioElement: HTMLAudioElement | null; /** * Initializes a new AudioOutputPreview instance. * * @param {Object} props - The read-only React Component props with which * the new instance is to be initialized. */ constructor(props: IProps) { super(props); this._audioElement = null; this._audioElementReady = this._audioElementReady.bind(this); this._onClick = this._onClick.bind(this); this._onKeyPress = this._onKeyPress.bind(this); } /** * Updates the audio element when the target output device changes and the * audio element has re-rendered. * * @inheritdoc * @returns {void} */ componentDidUpdate() { this._setAudioSink(); } /** * Implements React's {@link Component#render()}. * * @inheritdoc * @returns {ReactElement} */ render() { return ( <>