mirror of
https://github.com/hexastack/hexabot
synced 2025-06-26 18:27:28 +00:00
Merge pull request #172 from Hexastack/171-issue-chat-multiple-websocket-connections-issue
fix(frontend): Websocket connections issue
This commit is contained in:
commit
d089506579
48
frontend/src/app-components/widget/ChatWidget.tsx
Normal file
48
frontend/src/app-components/widget/ChatWidget.tsx
Normal 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>
|
||||
);
|
||||
};
|
||||
25
frontend/src/app-components/widget/ChatWidgetHeader.tsx
Normal file
25
frontend/src/app-components/widget/ChatWidgetHeader.tsx
Normal 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>
|
||||
);
|
||||
};
|
||||
@ -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>
|
||||
);
|
||||
};
|
||||
|
||||
@ -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")}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user