2025-08-26 08:59:57 +00:00
|
|
|
import { ClassroomDto, Role, RoleState } from '@/proxy/classroom/models'
|
2025-08-26 08:39:09 +00:00
|
|
|
import { useStoreActions, useStoreState } from '@/store/store'
|
|
|
|
|
import { useState } from 'react'
|
|
|
|
|
|
|
|
|
|
export function useClassroomLogic() {
|
|
|
|
|
const { user } = useStoreState((state) => state.auth)
|
|
|
|
|
const { setUser } = useStoreActions((actions) => actions.auth.user)
|
|
|
|
|
|
|
|
|
|
const [roleState, setRoleState] = useState<RoleState>('role-selection')
|
|
|
|
|
const [currentClass, setCurrentClass] = useState<ClassroomDto | null>(null)
|
|
|
|
|
const [allClasses, setAllClasses] = useState<ClassroomDto[]>([])
|
|
|
|
|
|
2025-08-26 08:59:57 +00:00
|
|
|
const handleRoleSelect = (role: Role) => {
|
2025-08-26 08:39:09 +00:00
|
|
|
setUser({
|
|
|
|
|
...user,
|
|
|
|
|
role,
|
|
|
|
|
})
|
|
|
|
|
setRoleState('dashboard')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleCreateClass = (classData: Partial<ClassroomDto>) => {
|
|
|
|
|
const newClass = {
|
|
|
|
|
...classData,
|
|
|
|
|
id: `class-${Date.now()}`,
|
|
|
|
|
teacherId: '',
|
|
|
|
|
teacherName: '',
|
|
|
|
|
isActive: false,
|
|
|
|
|
isScheduled: true,
|
|
|
|
|
participantCount: 0,
|
|
|
|
|
} as ClassroomDto
|
|
|
|
|
setAllClasses((prev) => [...prev, newClass])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleEditClass = (classId: string, classData: Partial<ClassroomDto>) => {
|
|
|
|
|
setAllClasses((prev) => prev.map((c) => (c.id === classId ? { ...c, ...classData } : c)))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleDeleteClass = (classId: string) => {
|
|
|
|
|
setAllClasses((prev) => prev.filter((c) => c.id !== classId))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
2025-08-26 08:59:57 +00:00
|
|
|
roleState,
|
|
|
|
|
setRoleState,
|
2025-08-26 08:39:09 +00:00
|
|
|
currentClass,
|
|
|
|
|
setCurrentClass,
|
|
|
|
|
allClasses,
|
|
|
|
|
setAllClasses,
|
|
|
|
|
handleRoleSelect,
|
|
|
|
|
handleCreateClass,
|
|
|
|
|
handleEditClass,
|
|
|
|
|
handleDeleteClass,
|
|
|
|
|
}
|
|
|
|
|
}
|