mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2026-04-02 17:00:19 +00:00
Create separate tabs for Audio and Video in the Settings Dialog Move some settings from the More tab to Audio/ Video tab Implement redesign Convert some files to TS Move some styles from SCSS to JSS Enable device selection on welcome page
104 lines
2.5 KiB
TypeScript
104 lines
2.5 KiB
TypeScript
import React, { useEffect, useState } from 'react';
|
|
import { makeStyles } from 'tss-react/mui';
|
|
|
|
// @ts-ignore
|
|
import JitsiMeetJS from '../../base/lib-jitsi-meet/_.web';
|
|
|
|
const JitsiTrackEvents = JitsiMeetJS.events.track;
|
|
|
|
/**
|
|
* The type of the React {@code Component} props of {@link AudioInputPreview}.
|
|
*/
|
|
interface IProps {
|
|
|
|
/**
|
|
* The JitsiLocalTrack to show an audio level meter for.
|
|
*/
|
|
track: any;
|
|
}
|
|
|
|
const useStyles = makeStyles()(theme => {
|
|
return {
|
|
container: {
|
|
display: 'flex'
|
|
},
|
|
|
|
section: {
|
|
flex: 1,
|
|
height: '4px',
|
|
borderRadius: '1px',
|
|
backgroundColor: theme.palette.ui04,
|
|
marginRight: theme.spacing(1),
|
|
|
|
'&:last-of-type': {
|
|
marginRight: 0
|
|
}
|
|
},
|
|
|
|
activeSection: {
|
|
backgroundColor: theme.palette.success01
|
|
}
|
|
};
|
|
});
|
|
|
|
const NO_OF_PREVIEW_SECTIONS = 11;
|
|
|
|
const AudioInputPreview = (props: IProps) => {
|
|
const [ audioLevel, setAudioLevel ] = useState(0);
|
|
const { classes, cx } = useStyles();
|
|
|
|
/**
|
|
* Starts listening for audio level updates from the library.
|
|
*
|
|
* @param {JitsiLocalTrack} track - The track to listen to for audio level
|
|
* updates.
|
|
* @private
|
|
* @returns {void}
|
|
*/
|
|
function _listenForAudioUpdates(track: any) {
|
|
_stopListeningForAudioUpdates();
|
|
|
|
track?.on(
|
|
JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,
|
|
setAudioLevel);
|
|
}
|
|
|
|
/**
|
|
* Stops listening to further updates from the current track.
|
|
*
|
|
* @private
|
|
* @returns {void}
|
|
*/
|
|
function _stopListeningForAudioUpdates() {
|
|
props.track?.off(
|
|
JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,
|
|
setAudioLevel);
|
|
}
|
|
|
|
useEffect(() => {
|
|
_listenForAudioUpdates(props.track);
|
|
|
|
return _stopListeningForAudioUpdates;
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
_listenForAudioUpdates(props.track);
|
|
setAudioLevel(0);
|
|
}, [ props.track ]);
|
|
|
|
const audioMeterFill = Math.ceil(Math.floor(audioLevel * 100) / (100 / NO_OF_PREVIEW_SECTIONS));
|
|
|
|
return (
|
|
<div className = { classes.container } >
|
|
{new Array(NO_OF_PREVIEW_SECTIONS).fill(0)
|
|
.map((_, idx) =>
|
|
(<div
|
|
className = { cx(classes.section, idx < audioMeterFill && classes.activeSection) }
|
|
key = { idx } />)
|
|
)}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default AudioInputPreview;
|