| "use client"; | |
| import dynamic from "next/dynamic"; | |
| import AuthInitializer from "@/components/authInitializer"; | |
| import { useAppSelector, EMobileActiveTab, useIsCompactLayout } from "@/common"; | |
| import Header from "@/components/Layout/Header"; | |
| import Action from "@/components/Layout/Action"; | |
| import { cn } from "@/lib/utils"; | |
| import Avatar from "@/components/Agent/AvatarTrulience"; | |
| import React from "react"; | |
| import { IRtcUser, IUserTracks } from "@/manager"; | |
| import { IMicrophoneAudioTrack } from "agora-rtc-sdk-ng"; | |
| const DynamicRTCCard = dynamic(() => import("@/components/Dynamic/RTCCard"), { | |
| ssr: false, | |
| }); | |
| const DynamicChatCard = dynamic(() => import("@/components/Chat/ChatCard"), { | |
| ssr: false, | |
| }); | |
| export default function Home() { | |
| const mobileActiveTab = useAppSelector( | |
| (state) => state.global.mobileActiveTab | |
| ); | |
| const trulienceSettings = useAppSelector((state) => state.global.trulienceSettings); | |
| const isCompactLayout = useIsCompactLayout(); | |
| const useTrulienceAvatar = trulienceSettings.enabled; | |
| const avatarInLargeWindow = trulienceSettings.avatarDesktopLargeWindow; | |
| const [remoteuser, setRemoteUser] = React.useState<IRtcUser>() | |
| React.useEffect(() => { | |
| const { rtcManager } = require("../manager/rtc/rtc"); | |
| rtcManager.on("remoteUserChanged", onRemoteUserChanged); | |
| return () => { | |
| rtcManager.off("remoteUserChanged", onRemoteUserChanged); | |
| }; | |
| }, []); | |
| const onRemoteUserChanged = (user: IRtcUser) => { | |
| if (useTrulienceAvatar) { | |
| user.audioTrack?.stop(); | |
| } | |
| if (user.audioTrack) { | |
| setRemoteUser(user) | |
| } | |
| } | |
| return ( | |
| <AuthInitializer> | |
| <div className="relative mx-auto flex flex-1 min-h-screen flex-col md:h-screen"> | |
| <Header className="h-[60px]" /> | |
| <Action /> | |
| <div className={cn( | |
| "mx-2 mb-2 flex h-full max-h-[calc(100vh-108px-24px)] flex-col md:flex-row md:gap-2 flex-1", | |
| { | |
| ["flex-col-reverse"]: avatarInLargeWindow && isCompactLayout | |
| } | |
| )}> | |
| <DynamicRTCCard | |
| className={cn( | |
| "m-0 w-full rounded-b-lg bg-[#181a1d] md:w-[480px] md:rounded-lg flex-1 flex", | |
| { | |
| ["hidden md:flex"]: mobileActiveTab === EMobileActiveTab.CHAT, | |
| } | |
| )} | |
| /> | |
| {(!useTrulienceAvatar || isCompactLayout || !avatarInLargeWindow) && ( | |
| <DynamicChatCard | |
| className={cn( | |
| "m-0 w-full rounded-b-lg bg-[#181a1d] md:rounded-lg flex-auto", | |
| { | |
| ["hidden md:flex"]: mobileActiveTab === EMobileActiveTab.AGENT, | |
| } | |
| )} | |
| /> | |
| )} | |
| {(useTrulienceAvatar && avatarInLargeWindow) && ( | |
| <div className={cn( | |
| "w-full", | |
| { | |
| ["h-60 flex-auto p-1 bg-[#181a1d]"]: isCompactLayout, | |
| ["hidden md:block"]: mobileActiveTab === EMobileActiveTab.CHAT, | |
| } | |
| )}> | |
| <Avatar audioTrack={remoteuser?.audioTrack} /> | |
| </div> | |
| )} | |
| </div> | |
| </div> | |
| </AuthInitializer> | |
| ); | |
| } | |