Files
hexabot/widget/src/components/ChatWindow.tsx
Mohamed Marrouchi 30e5766487 feat: initial commit
2024-09-10 10:50:11 +01:00

55 lines
2.2 KiB
TypeScript

/*
* Copyright © 2024 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
* 3. SaaS Restriction: This software, or any derivative of it, may not be used to offer a competing product or service (SaaS) without prior written consent from Hexastack. Offering the software as a service or using it in a commercial cloud environment without express permission is strictly prohibited.
*/
import React, { PropsWithChildren } from 'react';
import ChatHeader from './ChatHeader';
import ConnectionLost from './ConnectionLost';
import Messages from './Messages';
import UserInput from './UserInput';
import Webview from './Webview';
import { useChat } from '../providers/ChatProvider';
import { useWidget } from '../providers/WidgetProvider';
import './ChatWindow.scss';
type ChatWindowProps = PropsWithChildren<{
CustomHeader?: () => JSX.Element;
CustomAvatar?: () => JSX.Element;
PreChat?: React.FC;
PostChat?: React.FC;
}>;
const ChatWindow: React.FC<ChatWindowProps> = ({
CustomHeader,
CustomAvatar,
PreChat,
PostChat,
}) => {
const { connectionState } = useChat();
const { screen, isOpen } = useWidget();
return (
<div className={`sc-chat-window ${isOpen ? 'opened' : 'closed'}`}>
<ChatHeader>{CustomHeader && <CustomHeader />}</ChatHeader>
{screen === 'prechat' && PreChat && <PreChat />}
{['prechat', 'postchat', 'webview'].indexOf(screen) === -1 &&
connectionState === 3 && <Messages Avatar={CustomAvatar} />}
{screen !== 'prechat' &&
screen !== 'postchat' &&
connectionState !== 3 && <ConnectionLost />}
{screen === 'postchat' && PostChat && <PostChat />}
{['prechat', 'postchat', 'webview'].indexOf(screen) === -1 &&
connectionState === 3 && <UserInput />}
{screen === 'webview' && <Webview />}
</div>
);
};
export default ChatWindow;