diff --git a/src/components/VideoConference/Chat/Chat.tsx b/src/components/VideoConference/Chat/Chat.tsx index 8e572f5..52d568f 100644 --- a/src/components/VideoConference/Chat/Chat.tsx +++ b/src/components/VideoConference/Chat/Chat.tsx @@ -1,7 +1,16 @@ import type { ChatMessage, ReceivedChatMessage } from '@livekit/components-core' -import { ChatEntry, MessageFormatter, useMaybeLayoutContext, useRoomContext } from '@livekit/components-react' +import { + ChatEntry, + MessageFormatter, + useLocalParticipant, + useMaybeLayoutContext, + useParticipantPermissions, + useRoomContext +} from '@livekit/components-react' import * as React from 'react' import { cloneSingleChild, setupChat, useObservableState } from './utils' +import { ParticipantPermission } from 'livekit-server-sdk' +import { Participant } from 'livekit-client' export type { ChatMessage, ReceivedChatMessage } @@ -85,6 +94,8 @@ export default function Chat({ messageFormatter, ...props }: ChatProps) { } }, [chatMessages, layoutContext?.widget]) + const localParticipant = useLocalParticipant().localParticipant + return (
-
- - -
+ {localParticipant.permissions?.canPublish && ( +
+ + +
+ )}
) } diff --git a/src/components/VideoConference/Chat/utils.ts b/src/components/VideoConference/Chat/utils.ts index 8d862d7..355b3a9 100644 --- a/src/components/VideoConference/Chat/utils.ts +++ b/src/components/VideoConference/Chat/utils.ts @@ -49,7 +49,12 @@ export function setupChat(room: Room) { const packet = Packet.decode(msg.payload) return { packet, msg } }), - filter(({ packet }) => packet.message?.$case === 'chat'), + filter( + ({ packet }) => + packet.message?.$case === 'chat' && + !packet.message.chat.message.startsWith('␆') /* ping */ && + !packet.message.chat.message.startsWith('␑') /* pong */ + ), map(({ packet, msg }) => { if (packet.message?.$case === 'chat') { const { timestamp, message } = packet.message.chat diff --git a/src/components/VideoConference/Videoconference.tsx b/src/components/VideoConference/Videoconference.tsx index 0f164b3..134fb0e 100644 --- a/src/components/VideoConference/Videoconference.tsx +++ b/src/components/VideoConference/Videoconference.tsx @@ -14,34 +14,13 @@ import { // useParticipants, usePinnedTracks, useTracks, - MessageEncoder, - MessageDecoder + useParticipantContext } from '@livekit/components-react' import { RoomEvent, Track } from 'livekit-client' import ParticipantTile from './ParticipantTile' import type { TrackReferenceOrPlaceholder, WidgetState } from '@livekit/components-core' -import { ChatMessage } from '@livekit/components-react' -import { Packet } from '@dcl/protocol/out-js/decentraland/kernel/comms/rfc4/comms.gen' import Chat from './Chat' -const messageDecoder: MessageDecoder = (message: Uint8Array) => { - const packet = Packet.decode(message) - if (packet.message && packet.message.$case === 'chat') { - const { timestamp, message } = packet.message.chat - return { timestamp, message } - } else if (packet.message?.$case === 'position') { - } - - return { - message: 'Error', - timestamp: 0 - } -} - -const messageEncoder: MessageEncoder = (message: ChatMessage) => { - return new Uint8Array() -} - /** * @public */ @@ -77,11 +56,6 @@ export function VideoConference({ chatMessageFormatter, ...props }: VideoConfere { updateOnlyOn: [RoomEvent.ActiveSpeakersChanged] } ) - // TODO: remove this unused declaration if it's not needed - /* const participants = useParticipants({ - updateOnlyOn: [RoomEvent.ParticipantConnected, RoomEvent.ParticipantDisconnected] - }) */ - const widgetUpdate = (state: WidgetState) => { log.debug('updating widget state', state) setWidgetState(state) @@ -137,12 +111,7 @@ export function VideoConference({ chatMessageFormatter, ...props }: VideoConfere )} - + )}