import React, { ReactNode } from 'react';
import { Role } from './useClassroom.ts';
import { useClassroomContext } from './ClassroomProvider.tsx';
import {
VideoCameraIcon,
CameraIcon,
MicrophoneIcon,
ShareIcon,
ClipboardDocumentIcon,
PaperAirplaneIcon
} from '@heroicons/react/24/outline';
interface ClassroomLayoutProps {
children: ReactNode;
role: Role;
}
export const ClassroomLayout = ({ children, role }: ClassroomLayoutProps) => {
const [showVideo, setShowVideo] = React.useState(role !== Role.Teacher);
const [showShareLink, setShowShareLink] = React.useState(false);
const {
remoteScreenContainer,
remoteCameraContainer,
isCameraOn,
isAudioOn,
isScreenSharing,
toggleCamera,
toggleAudio,
toggleScreenShare,
messageList,
msgText,
setMsgText,
sendMessage,
handUpList,
questions,
classStatus,
shareLink,
showCameraOverlay,
setShowCameraOverlay
} = useClassroomContext();
return (
{/* 视频区域 */}
{showVideo && (
{/* 主屏幕共享容器 */}
{/* 屏幕共享视频将在这里动态添加 */}
{/* 摄像头小窗容器 - 固定在右上角 */}
{/* 摄像头视频将在这里动态添加 */}
{/* 摄像头小窗开关按钮 */}
)}
{/* 消息和控制面板列 */}
{/* 消息区域 */}
{/* 消息列表 - 填充剩余空间 */}
{messageList.map((msg, i) => (
{msg}
))}
{/* 底部固定区域 */}
{/* 控制面板 */}
{role === Role.Teacher && (
)}
{role === Role.Teacher && (
)}
{role === Role.Teacher && shareLink && (
)}
{showShareLink && shareLink && (
)}
{/* 角色特定内容 */}
{children}
{/* 消息输入框 */}
);
};