src/components/ui/MicVolumeIndicator/index.tsx (49 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import React, { forwardRef, HTMLAttributes, Ref } from 'react'; import { BaseProps } from '../Base'; import Microphone from '../icons/Microphone'; import { StyledMicVolumeIndicator } from './Styled'; export interface MicVolumeIndicatorProps extends Omit<HTMLAttributes<HTMLDivElement>, 'css'>, BaseProps { /* Whether or not the attendee is muted */ muted?: boolean | undefined; /* The measure of an attendee's network connection on a scale of 0 to 1. A bad connection is .5 or below. */ signalStrength: number | undefined; } export const MicVolumeIndicator = forwardRef( ( { muted = false, signalStrength, className: propClassName, ...rest }: MicVolumeIndicatorProps, bgRef: Ref<HTMLDivElement> ) => { const poorConnection = signalStrength !== undefined && signalStrength <= 0.5; const className = propClassName ? `${propClassName} ch-mic-volume-indicator` : 'ch-mic-volume-indicator'; return ( <StyledMicVolumeIndicator className={className} signalStrength={signalStrength} muted={muted} {...rest} > <Microphone muted={muted} className="ch-mic-icon" poorConnection={poorConnection} /> <div className="ch-bg-volume-wrapper"> <div ref={bgRef} className="ch-bg-volume-fill" data-testid="volume-fill" /> </div> </StyledMicVolumeIndicator> ); } ); export default MicVolumeIndicator;