🚸(frontend) enhance muted mic indicator

Users' feedbacks. Design is inspired from Whereby, a webinars
product. I am not a huge fan of having the indicator on the
left of the participant's name. It causes a shift of the name
when the participant unmute herself.

This should be discussed with the UX designer.
This commit is contained in:
lebaudantoine
2024-09-06 14:53:21 +02:00
committed by aleb_the_flash
parent 4e175a8361
commit 634f1924be
2 changed files with 66 additions and 43 deletions

View File

@@ -0,0 +1,26 @@
import { useTrackMutedIndicator } from '@livekit/components-react'
import { Participant, Track } from 'livekit-client'
import Source = Track.Source
import { Div } from '@/primitives'
import { RiMicOffFill } from '@remixicon/react'
export const MutedMicIndicator = ({
participant,
}: {
participant: Participant
}) => {
const { isMuted } = useTrackMutedIndicator({
participant: participant,
source: Source.Microphone,
})
if (!isMuted) {
return null
}
return (
<Div padding={0.25} backgroundColor="red" borderRadius="4px">
<RiMicOffFill size={16} color="white" />
</Div>
)
}

View File

@@ -6,7 +6,6 @@ import {
ParticipantName, ParticipantName,
ParticipantTileProps, ParticipantTileProps,
ScreenShareIcon, ScreenShareIcon,
TrackMutedIndicator,
useEnsureTrackRef, useEnsureTrackRef,
useFeatureContext, useFeatureContext,
useIsEncrypted, useIsEncrypted,
@@ -27,6 +26,8 @@ import { Track } from 'livekit-client'
import { ParticipantPlaceholder } from '@/features/rooms/livekit/components/ParticipantPlaceholder' import { ParticipantPlaceholder } from '@/features/rooms/livekit/components/ParticipantPlaceholder'
import { RiHand } from '@remixicon/react' import { RiHand } from '@remixicon/react'
import { useRaisedHand } from '@/features/rooms/livekit/hooks/useRaisedHand' import { useRaisedHand } from '@/features/rooms/livekit/hooks/useRaisedHand'
import { HStack } from '@/styled-system/jsx'
import { MutedMicIndicator } from '@/features/rooms/livekit/components/MutedMicIndicator'
export function TrackRefContextIfNeeded( export function TrackRefContextIfNeeded(
props: React.PropsWithChildren<{ props: React.PropsWithChildren<{
@@ -119,6 +120,8 @@ export const ParticipantTile: (
/> />
</div> </div>
<div className="lk-participant-metadata"> <div className="lk-participant-metadata">
<HStack gap={0.25}>
<MutedMicIndicator participant={trackReference.participant} />
<div <div
className="lk-participant-metadata-item" className="lk-participant-metadata-item"
style={{ style={{
@@ -145,13 +148,6 @@ export const ParticipantTile: (
{isEncrypted && ( {isEncrypted && (
<LockLockedIcon style={{ marginRight: '0.25rem' }} /> <LockLockedIcon style={{ marginRight: '0.25rem' }} />
)} )}
<TrackMutedIndicator
trackRef={{
participant: trackReference.participant,
source: Track.Source.Microphone,
}}
show={'muted'}
></TrackMutedIndicator>
<ParticipantName /> <ParticipantName />
</> </>
) : ( ) : (
@@ -161,6 +157,7 @@ export const ParticipantTile: (
</> </>
)} )}
</div> </div>
</HStack>
<ConnectionQualityIndicator className="lk-participant-metadata-item" /> <ConnectionQualityIndicator className="lk-participant-metadata-item" />
</div> </div>
</> </>