twilioflex/agent-assist-plugin/src/components/Transcript/Transcript.tsx (70 lines of code) (raw):
/**
* Copyright 2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
//@ts-nocheck
import React, { useEffect } from 'react';
import * as Flex from '@twilio/flex-ui'; // eslint-disable-line node/no-unpublished-import
import { useScript } from '../../../../../third_party/twilioflex/hooks/useScript';
import {
ChatMessage,
ChatBubble,
ChatMessageMeta,
ChatMessageMetaItem,
useChatLogger,
ChatLogger,
} from '@twilio-paste/chat-log';
import { Box } from '@twilio-paste/core/box';
type messageVariant = 'inbound' | 'outbound';
const transcriptFactory = (
variant: messageVariant,
message: string,
metaLabel: string
) => {
const time = new Date().toLocaleString('en-US', {
hour: 'numeric',
minute: 'numeric',
hour12: true,
});
return {
variant,
content: (
<ChatMessage variant={variant}>
<ChatBubble>{message}</ChatBubble>
<ChatMessageMeta aria-label={metaLabel + time}>
<ChatMessageMetaItem>{time}</ChatMessageMetaItem>
</ChatMessageMeta>
</ChatMessage>
),
};
};
export const Transcript = (): JSX.Element | null => {
const { chats, push } = useChatLogger();
useEffect(()=>{
// Create IE + others compatible event handler
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
// Listen to message from child window
function newMessageReceievedHandler(e){
switch (e.data.type) {
case 'new-message-received':
let userRole = e.data.detail.participantRole;
let message = e.data.detail.content;
let variant = userRole === 'END_USER' ? 'inbound' : 'outbound';
let metaLabel =
userRole === 'END_USER' ? 'said by customer at ' : 'said by agent at ';
push(transcriptFactory(variant, message, metaLabel));
break;
}
}
eventer(messageEvent, newMessageReceievedHandler, false);
return () => {
const removeEventMethod = window.removeEventListener ? "removeEventListener" : "detachEvent";
const removeEventer = window[removeEventMethod];
const removeMessageEvent = removeEventMethod == "detachEvent" ? "onmessage" : "message";
removeEventer(removeMessageEvent, newMessageReceievedHandler)
}
},[]);
return <div style={{
display: 'flex',
flex: '1 1 auto',
overflow: 'auto',
padding: '1.25rem 1rem',
lineHeight: '1rem',
color: 'rgb(18, 28, 45)'}
}>
<div style={{ width: '100%' }}><ChatLogger chats={chats} /></div></div>;
};
Transcript.displayName = 'Transcript';