import React, { useEffect, useState } from 'react'; import './IncomingRepliedMessage.scss'; import MessageContentComponent from '../IncomingMessage/MessageContentComponent/MessageContentComponent'; import UiKitTheme from '../../../../themes/UiKitTheme'; import { MessageEntity } from '../../../../../Domain/entity/MessageEntity'; import { FunctionTypeMessageEntityToVoid } from '../../../../../CommonTypes/BaseViewModel'; import { AIMessageWidget } from '../../AIWidgets/AIMessageWidget'; import useQbInitializedDataContext from '../../../../providers/QuickBloxUIKitProvider/useQbInitializedDataContext'; import { AIUtils } from '../../../../../utils/utils'; import { DefaultConfigurations } from '../../../../../Data/DefaultConfigurations'; import ReplyFilled from '../../../../components/UI/svgs/Icons/Actions/ReplyFilled'; import AITranslateComponent from '../../AIComponents/AITranslateComponent/AITranslateComponent'; import AIAssistComponent from '../../AIComponents/AIAssistComponent/AIAssistComponent'; import MessageContextMenu from '../MessageContextMenu/MessageContextMenu'; import AvatarContentIncomingUser, { AvatarContentIncomingUserProps, } from '../IncomingMessage/AvatarContentIncomingUser/AvatarContentIncomingUser'; import LoaderComponent from '../../../../components/UI/Placeholders/LoaderComponent/LoaderComponent'; import { FileType } from '../../../../../Domain/entity/FileTypes'; function IncomingRepliedMessage(props: { theme: UiKitTheme | undefined; // senderNameFct: GetUserNameFct; messages: MessageEntity[]; // eslint-disable-next-line react/no-unused-prop-types date_sent?: string; userIconRenderer?: ( props: AvatarContentIncomingUserProps, ) => React.ReactElement; onReply: FunctionTypeMessageEntityToVoid; onForward: FunctionTypeMessageEntityToVoid; repliedUserName: string; renderOringinalMessage: React.ReactNode; AITranslation?: AIMessageWidget; AIAnswerToMessage?: AIMessageWidget; onStartLoader: () => void; // eslint-disable-next-line react/no-unused-prop-types onStopLoader: () => void; onErrorToast: (messageError: string) => void; currentUserId?: number; messagesToView: MessageEntity[]; enableForwarding: boolean; enableReplying: boolean; // userIconRenderer?: ( // props: AvatarContentIncomingUserProps, // ) => React.ReactElement; // index?: number; // updateData?: (index: number, text: string) => void; // translationDATA?: Record; }) { const currentContext = useQbInitializedDataContext(); const disableMenu = !props.enableForwarding && !props.enableReplying; // const [haveHover, setHaveHover] = useState(false); const [widgetTextContent, setWidgetTextContent] = useState(''); const [originalTextMessage, setOriginalTextMessage] = useState(true); const [waitAITranslateWidget, setWaitAITranslateWidget] = useState(false); const [waitAIWidget, setWaitAIWidget] = useState(false); useEffect(() => { setWaitAIWidget(false); }, [props.AITranslation?.textToContent]); useEffect(() => { setWaitAIWidget(false); }, [props.AIAnswerToMessage?.textToContent]); const maxTokensForAITranslate = currentContext.InitParams.qbConfig.configAIApi.AITranslateWidgetConfig .maxTokens; const maxTokensForAnswerAssist = currentContext.InitParams.qbConfig.configAIApi.AIAnswerAssistWidgetConfig .maxTokens; const sendMessageToAIAssistAnswer = ( message: MessageEntity, messagesToView: MessageEntity[], currentUserId?: number, AIAnswerToMessage?: AIMessageWidget, ) => { if (!waitAIWidget) { // setWaitAIWidget(true); props.onStartLoader(); // eslint-disable-next-line @typescript-eslint/no-unsafe-call AIAnswerToMessage?.textToWidget( message.message, // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call AIUtils.messageEntitiesToIChatMessageCollection( messagesToView, currentUserId, maxTokensForAnswerAssist, ), ) // eslint-disable-next-line promise/always-return .then(() => { props.onStopLoader(); }) .catch(() => { props.onErrorToast('Assist failed.'); props.onStopLoader(); }); } }; const sendMessageToTranslate = async ( message: MessageEntity, messagesToView: MessageEntity[], currentUserId?: number, AITranslation?: AIMessageWidget, selectedLanguage?: string, ) => { if (!waitAITranslateWidget) { setWaitAITranslateWidget(true); await AITranslation?.textToWidget( message.message, // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call AIUtils.messageEntitiesToIChatMessageCollection( messagesToView, currentUserId, maxTokensForAITranslate, ), { language: selectedLanguage || DefaultConfigurations.getDefaultLanguageForAITranslate( currentContext.InitParams.qbConfig.configAIApi .AITranslateWidgetConfig, ), }, ) .then((textTranslate) => { // eslint-disable-next-line promise/always-return setWidgetTextContent(textTranslate || ''); // eslint-disable-next-line promise/always-return if (textTranslate === 'Translation failed.') { props.onErrorToast('Translation failed.'); } setWaitAITranslateWidget(false); setOriginalTextMessage(false); }) .catch(() => { props.onErrorToast('Translation failed.'); setWaitAITranslateWidget(false); setOriginalTextMessage(true); }); } }; return (
{props.messages.map((item) => (
setHaveHover(true)} // onMouseLeave={() => setHaveHover(false)} >
{props.userIconRenderer ? ( props.userIconRenderer({ userId: props.currentUserId as number, }) ) : ( )}
{`Replied to ${props.repliedUserName}`}
{props.AITranslation && !item.attachments ? ( { sendMessageToTranslate( item, props.messagesToView, props.currentUserId, props.AITranslation, language, ); }} onClickOriginalText={() => { setOriginalTextMessage(true); setWidgetTextContent(''); }} originalTextMessage={originalTextMessage} waitAITranslateWidget={waitAITranslateWidget} languagesForAITranslate={DefaultConfigurations.getAdditionalLanguagesForAITranslate( currentContext.InitParams.qbConfig.configAIApi .AITranslateWidgetConfig, )} /> ) : (
)}
{ // haveHover && !disableMenu ? ( ) : null } {waitAITranslateWidget ? (
) : null} {!waitAITranslateWidget && !item.attachments ? props.AIAnswerToMessage && ( { sendMessageToAIAssistAnswer( item, props.messagesToView, props.currentUserId, props.AIAnswerToMessage, ); }} waitAIWidget={waitAIWidget} /> ) : null}
{/* {props.date_sent} */}
))}
{props.renderOringinalMessage}
); } export default IncomingRepliedMessage;