sozsoft-platform/ui/src/views/admin/videoroom/Dashboard.tsx

96 lines
4.1 KiB
TypeScript
Raw Normal View History

2026-05-08 05:34:29 +00:00
import React from 'react'
import { motion } from 'framer-motion'
2026-05-08 08:38:57 +00:00
import { FaEye, FaUsers, FaCrown } from 'react-icons/fa'
2026-05-08 05:34:29 +00:00
import { useStoreActions, useStoreState } from '@/store/store'
import { useNavigate } from 'react-router-dom'
import { ROUTES_ENUM } from '@/routes/route.constant'
import { Helmet } from 'react-helmet'
import { useLocalization } from '@/utils/hooks/useLocalization'
import { Role } from '@/proxy/videoroom/models'
const Dashboard: React.FC = () => {
const navigate = useNavigate()
const { translate } = useLocalization()
const { user } = useStoreState((state) => state.auth)
const { setUser } = useStoreActions((actions) => actions.auth.user)
const handleRoleSelect = (role: Role) => {
setUser({
...user,
role,
})
navigate(ROUTES_ENUM.protected.admin.videoroom.roomList, { replace: true })
}
return (
<>
<Helmet
titleTemplate="%s | Erp Platform"
title={translate('::' + 'App.Videoroom.Dashboard')}
defaultTitle="Erp Platform"
></Helmet>
2026-05-19 20:22:25 +00:00
<div className="flex items-center justify-center p-4 bg-white dark:bg-gray-900 min-h-screen">
2026-05-08 05:34:29 +00:00
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
className="text-center w-full max-w-4xl"
>
2026-05-19 20:22:25 +00:00
<p className="text-lg sm:text-xl text-gray-600 dark:text-gray-300 mb-8 sm:mb-12">
2026-05-08 08:38:57 +00:00
{translate('::' + 'App.Videoroom.RoleSelector')}
</p>
2026-05-08 05:34:29 +00:00
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 sm:gap-8">
<motion.button
whileHover={{ scale: 1.05 }}
whileTap={{ scale: 0.95 }}
onClick={() => handleRoleSelect('teacher')}
2026-05-19 20:22:25 +00:00
className="bg-white dark:bg-gray-800 rounded-lg shadow-lg p-6 sm:p-8 hover:shadow-xl transition-all duration-300 border-2 border-transparent hover:border-blue-500 dark:hover:border-blue-400"
2026-05-08 05:34:29 +00:00
>
2026-05-08 08:38:57 +00:00
<FaCrown size={48} className="mx-auto text-blue-600 mb-4 sm:mb-4" />
2026-05-19 20:22:25 +00:00
<h2 className="text-xl sm:text-2xl font-bold text-gray-800 dark:text-white mb-2">
2026-05-08 08:38:57 +00:00
{translate('::' + 'App.Videoroom.Host')}
</h2>
2026-05-19 20:22:25 +00:00
<p className="text-gray-600 dark:text-gray-300 text-sm sm:text-base">
2026-05-08 08:38:57 +00:00
{translate('::' + 'App.Videoroom.HostDescription')}
2026-05-08 05:34:29 +00:00
</p>
</motion.button>
<motion.button
whileHover={{ scale: 1.05 }}
whileTap={{ scale: 0.95 }}
onClick={() => handleRoleSelect('student')}
2026-05-19 20:22:25 +00:00
className="bg-white dark:bg-gray-800 rounded-lg shadow-lg p-6 sm:p-8 hover:shadow-xl transition-all duration-300 border-2 border-transparent hover:border-green-500 dark:hover:border-green-400"
2026-05-08 05:34:29 +00:00
>
2026-05-08 08:38:57 +00:00
<FaUsers size={48} className="mx-auto text-green-600 mb-4 sm:mb-4" />
2026-05-19 20:22:25 +00:00
<h2 className="text-xl sm:text-2xl font-bold text-gray-800 dark:text-white mb-2">
2026-05-08 08:38:57 +00:00
{translate('::' + 'App.Videoroom.Participant')}
</h2>
2026-05-19 20:22:25 +00:00
<p className="text-gray-600 dark:text-gray-300 text-sm sm:text-base">
2026-05-08 08:38:57 +00:00
{translate('::' + 'App.Videoroom.ParticipantDescription')}
2026-05-08 05:34:29 +00:00
</p>
</motion.button>
<motion.button
whileHover={{ scale: 1.05 }}
whileTap={{ scale: 0.95 }}
onClick={() => handleRoleSelect('observer')}
2026-05-19 20:22:25 +00:00
className="bg-white dark:bg-gray-800 rounded-lg shadow-lg p-6 sm:p-8 hover:shadow-xl transition-all duration-300 border-2 border-transparent hover:border-purple-500 dark:hover:border-purple-400 md:col-span-2 lg:col-span-1"
2026-05-08 05:34:29 +00:00
>
<FaEye size={48} className="mx-auto text-purple-600 mb-4 sm:mb-4" />
2026-05-19 20:22:25 +00:00
<h2 className="text-xl sm:text-2xl font-bold text-gray-800 dark:text-white mb-2">
2026-05-08 08:38:57 +00:00
{translate('::' + 'App.Videoroom.Observer')}
</h2>
2026-05-19 20:22:25 +00:00
<p className="text-gray-600 dark:text-gray-300 text-sm sm:text-base">
2026-05-08 08:38:57 +00:00
{translate('::' + 'App.Videoroom.ObserverDescription')}
2026-05-08 05:34:29 +00:00
</p>
</motion.button>
</div>
</motion.div>
</div>
</>
)
}
export default Dashboard