Major refactoring
This commit is contained in:
		
							
								
								
									
										48
									
								
								src/contexts/CASProvider.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/contexts/CASProvider.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
import React, { useState, useEffect } from 'react';
 | 
			
		||||
import { User } from '../types';
 | 
			
		||||
 | 
			
		||||
export interface CASContext {
 | 
			
		||||
  user: User | null;
 | 
			
		||||
  logout: () => void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const CASContext = React.createContext<CASContext | null>(null);
 | 
			
		||||
 | 
			
		||||
export interface CASProviderProps {
 | 
			
		||||
  children: React.ReactNode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const CASProvider = ({ children }: CASProviderProps) => {
 | 
			
		||||
  const [user, setUser] = useState<User | null>(null);
 | 
			
		||||
 | 
			
		||||
  useEffect(() => {
 | 
			
		||||
    login();
 | 
			
		||||
  }, []);
 | 
			
		||||
 | 
			
		||||
  function login() {
 | 
			
		||||
    const urlParams = new URLSearchParams(window.location.search);
 | 
			
		||||
    const ticket = urlParams.get('ticket');
 | 
			
		||||
 | 
			
		||||
    if (!ticket) {
 | 
			
		||||
      redirectToCASLoginService();
 | 
			
		||||
    }
 | 
			
		||||
    if (ticket) {
 | 
			
		||||
      console.log(`Ticket is: ${ticket}`);
 | 
			
		||||
      setUser({ ...user, ticket: ticket });
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function logout() {
 | 
			
		||||
    redirectToCASLogoutService();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function redirectToCASLogoutService() {
 | 
			
		||||
    window.location.replace(`https://cas.amu.edu.pl/cas/logout?service=${window.origin}`);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function redirectToCASLoginService() {
 | 
			
		||||
    window.location.replace(`https://cas.amu.edu.pl/cas/login?service=${window.origin}&locale=pl`);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return <CASContext.Provider value={{ user, logout }}>{children}</CASContext.Provider>;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										32
									
								
								src/contexts/LecturesProvider.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/contexts/LecturesProvider.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
import React, { useState, createContext } from 'react';
 | 
			
		||||
import { Lecture, Group } from '../types';
 | 
			
		||||
 | 
			
		||||
interface LectureContext {
 | 
			
		||||
  lectures: Array<Lecture>;
 | 
			
		||||
  choosenGroups: Array<Group>;
 | 
			
		||||
  addLecture: (lectures: Lecture) => void;
 | 
			
		||||
  addGroup: (group: Group) => void;
 | 
			
		||||
}
 | 
			
		||||
export const LecturesContext = createContext<LectureContext | null>(null);
 | 
			
		||||
 | 
			
		||||
interface LecturesProviderProps {
 | 
			
		||||
  children: React.ReactNode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const LecturesProvider = ({ children }: LecturesProviderProps) => {
 | 
			
		||||
  const [lectures, setLectures] = useState<Array<Lecture>>([]);
 | 
			
		||||
  const [choosenGroups, setChoosenGroups] = useState<Array<Group>>([]);
 | 
			
		||||
 | 
			
		||||
  const addLecture = (lecture: Lecture) => {
 | 
			
		||||
    setLectures([...lectures, lecture]);
 | 
			
		||||
  };
 | 
			
		||||
  const addGroup = (group: Group) => {
 | 
			
		||||
    setChoosenGroups([...choosenGroups, group]);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <LecturesContext.Provider value={{ lectures, choosenGroups, addLecture, addGroup }}>
 | 
			
		||||
      {children}
 | 
			
		||||
    </LecturesContext.Provider>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										8
									
								
								src/contexts/reducers.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/contexts/reducers.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
export enum Types {
 | 
			
		||||
  addLecture = 'ADD_LECTURE',
 | 
			
		||||
  removeLecture = 'REMOVE_LECTURE',
 | 
			
		||||
  addGroup = 'ADD_GROUP',
 | 
			
		||||
  removeGroup = 'ADD_GROUP',
 | 
			
		||||
  addCourse = 'ADD_COURSE',
 | 
			
		||||
  removeCourse = 'REMOVE_COURSE',
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user