2
0

ClassroomProvider.tsx 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import React, { useState, useEffect, useRef, createContext, useContext } from 'react';
  2. import { useParams } from 'react-router';
  3. import { useClassroom , Role } from './useClassroom.ts';
  4. type ClassroomContextType = ReturnType<typeof useClassroom>;
  5. const ClassroomContext = createContext<ClassroomContextType | null>(null);
  6. export const ClassroomProvider: React.FC<{children: React.ReactNode}> = ({ children }) => {
  7. const classroom = useClassroom();
  8. const { id: classId, role: pathRole } = useParams();
  9. useEffect(() => {
  10. if (classId) {
  11. classroom.setClassId(classId);
  12. }
  13. if (pathRole && ['teacher', 'student'].includes(pathRole)) {
  14. classroom.setRole(pathRole === 'teacher' ? Role.Teacher : Role.Student);
  15. }
  16. }, [classId, pathRole]);
  17. return (
  18. <ClassroomContext.Provider value={classroom}>
  19. {children}
  20. </ClassroomContext.Provider>
  21. );
  22. };
  23. export const useClassroomContext = () => {
  24. const context = useContext(ClassroomContext);
  25. if (!context) {
  26. throw new Error('useClassroomContext must be used within a ClassroomProvider');
  27. }
  28. return context;
  29. };