Merge pull request #172 from Hexastack/171-issue-chat-multiple-websocket-connections-issue

fix(frontend):  Websocket connections issue
This commit is contained in:
Mohamed Marrouchi 2024-10-08 08:15:09 +01:00 committed by GitHub
commit d089506579
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 76 additions and 37 deletions

View File

@ -0,0 +1,48 @@
/*
* 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).
*/
import { Avatar, Box } from "@mui/material";
import UiChatWidget from "hexabot-widget/src/UiChatWidget";
import { usePathname } from "next/navigation";
import { getAvatarSrc } from "@/components/inbox/helpers/mapMessages";
import { useConfig } from "@/hooks/useConfig";
import i18n from "@/i18n/config";
import { EntityType, RouterType } from "@/services/types";
import { ChatWidgetHeader } from "./ChatWidgetHeader";
export const ChatWidget = () => {
const pathname = usePathname();
const { apiUrl } = useConfig();
const isVisualEditor = pathname === `/${RouterType.VISUAL_EDITOR}`;
return (
<Box
sx={{
display: isVisualEditor ? "block" : "none",
}}
>
<UiChatWidget
config={{
apiUrl,
channel: "live-chat-tester",
token: "test",
language: i18n.language,
}}
CustomHeader={ChatWidgetHeader}
CustomAvatar={() => (
<Avatar
sx={{ width: "32px", height: "32px", fontSize: ".75rem" }}
src={getAvatarSrc(apiUrl, EntityType.USER, "bot")}
/>
)}
/>
</Box>
);
};

View File

@ -0,0 +1,25 @@
/*
* 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).
*/
import ChatIcon from "@mui/icons-material/Chat";
import { Box, Typography } from "@mui/material";
import { useTranslate } from "@/hooks/useTranslate";
export const ChatWidgetHeader = () => {
const { t } = useTranslate();
return (
<Box display="flex" alignItems="center" ml={2}>
<ChatIcon />
<Typography component="h2" fontSize="1.5rem" ml={2}>
{t("title.live_chat_tester")}
</Typography>
</Box>
);
};

View File

@ -9,6 +9,8 @@
import { BoxProps, Grid } from "@mui/material";
import { useState } from "react";
import { ChatWidget } from "@/app-components/widget/ChatWidget";
import { Content } from "./content";
import { Header } from "./Header";
import { VerticalMenu } from "./VerticalMenu";
@ -42,6 +44,7 @@ export const Layout: React.FC<LayoutProps> = ({
<Content sx={sxContent} {...rest}>
{children}
</Content>
<ChatWidget />
</Grid>
);
};

View File

@ -6,52 +6,15 @@
* 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).
*/
import ChatIcon from "@mui/icons-material/Chat";
import { Avatar, Box, Typography } from "@mui/material";
import UiChatWidget from "hexabot-widget/src/UiChatWidget";
import { ReactElement } from "react";
import { getAvatarSrc } from "@/components/inbox/helpers/mapMessages";
import { VisualEditor } from "@/components/visual-editor";
import { useConfig } from "@/hooks/useConfig";
import { useTranslate } from "@/hooks/useTranslate";
import i18n from "@/i18n/config";
import { Layout } from "@/layout";
import { EntityType } from "@/services/types";
const CustomWidgetHeader = () => {
const { t } = useTranslate();
return (
<Box display="flex" alignItems="center" ml={2}>
<ChatIcon />
<Typography component="h2" fontSize="1.5rem" ml={2}>
{t("title.live_chat_tester")}
</Typography>
</Box>
);
};
const VisualEditorPage = () => {
const { apiUrl } = useConfig();
return (
<>
<VisualEditor />
<UiChatWidget
config={{
apiUrl,
channel: "live-chat-tester",
token: "test",
language: i18n.language,
}}
CustomHeader={CustomWidgetHeader as any}
CustomAvatar={() => (
<Avatar
sx={{ width: "32px", height: "32px", fontSize: ".75rem" }}
src={getAvatarSrc(apiUrl, EntityType.USER, "bot")}
/>
)}
/>
</>
);
};