import React, { useState, useEffect } from "react"; import { useLogout, useGetIdentity, useUpdatePassword } from "@refinedev/core"; import { Layout, Button, Space, Typography, Avatar, theme, Dropdown, MenuProps, Tooltip } from "antd"; import { LogoutOutlined, UserOutlined, DownOutlined, SunOutlined, MoonOutlined, CameraOutlined, LockOutlined, GlobalOutlined, MessageOutlined } from "@ant-design/icons"; import { useColorMode, GlobalSearch, ChangePhotoModal, ChangePasswordModal } from "@cundi/refine-xaf"; import { useTranslation } from "react-i18next"; import { useChatPanel } from "./ChatPanel"; const { Text } = Typography; const { useToken } = theme; /** * Custom Header that includes the chat toggle button * This is a modified version of the Header from @cundi/refine-xaf */ export const HeaderWithChat: React.FC = () => { const { mutate: logout } = useLogout(); const { mutate: updatePassword } = useUpdatePassword(); const { data: user } = useGetIdentity(); const { mode, setMode } = useColorMode(); const { token } = useToken(); const { isOpen: isChatOpen, toggle: toggleChat } = useChatPanel(); const { t: translate, i18n } = useTranslation(); const currentLocale = i18n.language; const handleLanguageChange = (lang: string) => { i18n.changeLanguage(lang); }; // Track auth provider const [authProvider, setAuthProvider] = useState(null); useEffect(() => { if (user) { setAuthProvider(localStorage.getItem("auth_provider")); } }, [user]); // Photo Modal State const [isPhotoModalOpen, setIsPhotoModalOpen] = useState(false); // Password Modal State const [isPasswordModalOpen, setIsPasswordModalOpen] = useState(false); const menuItems: MenuProps["items"] = [ { key: "user-info", label: ( {user?.name} ), icon: , disabled: true, style: { cursor: "default", color: token.colorText }, }, { type: "divider", }, { key: "change-photo", label: translate("components.header.menu.changePhoto", "Change Photo"), icon: , onClick: () => { setIsPhotoModalOpen(true); }, }, { key: "change-password", label: authProvider === "keycloak" ? translate("components.header.menu.manageAccount", "Manage Account in Keycloak") : translate("components.header.menu.changePassword", "Change Password"), icon: , onClick: () => { if (authProvider === "keycloak") { const env = (import.meta as any).env; const keycloakUrl = env?.VITE_KEYCLOAK_URL || "http://localhost:8080"; const realm = env?.VITE_KEYCLOAK_REALM || "cundi"; window.open(`${keycloakUrl}/realms/${realm}/account`, "_blank"); } else { setIsPasswordModalOpen(true); } }, }, { type: "divider", }, { key: "theme", label: mode === "light" ? translate("components.header.theme.dark", "Dark Theme") : translate("components.header.theme.light", "Light Theme"), icon: mode === "light" ? : , onClick: () => setMode(mode === "light" ? "dark" : "light"), }, { key: "logout", label: translate("components.header.menu.logout", "Logout"), icon: , onClick: () => logout(), } ]; return (
{/* Chat Toggle Button */}
{/* Photo Modal */} setIsPhotoModalOpen(false)} user={user} /> setIsPasswordModalOpen(false)} />
); };