// Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import React, { useState, useEffect } from 'react';
import MeetingRoster from '../MeetingRoster';
import MeetingChat from '../MeetingChat';
import TranscriptAnalysisPane from '../transcriptions/TranscriptAnalysisPane';
import Navigation from '.';
import { useNavigation } from '../../providers/NavigationProvider';
import { useChatMessagingState } from '../../providers/ChatMessagesProvider';
import { useAudioVideo } from 'amazon-chime-sdk-component-library-react';
import {
Transcript,
TranscriptEvent,
TranscriptResult,
Attendee,
TranscriptItemType,
} from 'amazon-chime-sdk-js';
const MeetingTranscript = ({ transcriptEvent }: any) => {
const { messages } = useChatMessagingState();
const initialTranscripts: any[] = [];
for (let i = 0; i < messages.length; i++) {
if (messages[i].Sender.Name != 'ModeratorBot') {
initialTranscripts.unshift({
startTimeMs: Date.parse(messages[i].CreatedTimestamp),
text: messages[i].Content,
speaker: '(Chat) ' + messages[i].Sender.Name,
});
}
}
const [partialTranscript, setPartialTranscript] = useState(' ');
const [transcripts, setTranscripts] = useState(initialTranscripts);
const addTranscriptChunk = (result: TranscriptResult) => {
// create lines from chunk based on when new speaker starts talking
const lines: any[] = [];
let startTimeMs: number = null;
let content = '';
let attendee: Attendee = null;
for (const item of result.alternatives[0].items) {
if (!startTimeMs) {
content = item.content;
attendee = item.attendee;
startTimeMs = item.startTimeMs;
} else {
if (item.attendee.attendeeId != attendee.attendeeId) {
lines.unshift({
startTimeMs: startTimeMs,
text: content,
speaker: attendee.externalUserId,
});
content = item.content;
attendee = item.attendee;
startTimeMs = item.startTimeMs;
} else {
if (item.type === TranscriptItemType.PUNCTUATION) {
content = content + item.content;
} else {
content = content + ' ' + item.content;
}
}
}
}
lines.unshift({
startTimeMs: startTimeMs,
text: content,
speaker: attendee.externalUserId,
});
if (result.isPartial) {
setPartialTranscript(
lines
.map(
(line) => `${line.speaker ? `${line.speaker} ` : ''}${line.text}`
)
.join(' ')
);
} else {
setPartialTranscript(null);
setTranscripts((t: any) => [...lines, ...t]);
}
};
useEffect(() => {
if (transcriptEvent && transcriptEvent instanceof Transcript) {
for (const result of transcriptEvent.results) {
addTranscriptChunk(result);
}
}
}, [transcriptEvent]);
return (
);
};
const NavigationControl = () => {
const { showNavbar, showRoster, showChat, showTranscript } = useNavigation();
const [meetingtranscriptevent, setMeetingtranscriptevent] = useState<
TranscriptEvent | undefined
>();
const audioVideo = useAudioVideo();
useEffect(() => {
if (audioVideo) {
audioVideo.transcriptionController?.subscribeToTranscriptEvent(
(transcriptEvent: TranscriptEvent) => {
setMeetingtranscriptevent(transcriptEvent);
}
);
}
}, [audioVideo]);
return (
<>
{showNavbar ? : null}
{showChat ? : null}
{showRoster ? : null}
{showTranscript ? (
) : null}
>
);
};
export default NavigationControl;