'use client' import React, { createContext, useContext, useEffect, useReducer } from 'react' import { useLHSession } from '@components/Contexts/LHSessionContext' import { getAssignmentTask } from '@services/courses/assignments' import { useAssignments } from './AssignmentContext'; import { mutate } from 'swr'; import { getAPIUrl } from '@services/config/config'; interface State { selectedAssignmentTaskUUID: string | null; assignmentTask: Record; reloadTrigger: number; } interface Action { type: string; payload?: any; } const initialState: State = { selectedAssignmentTaskUUID: null, assignmentTask: {}, reloadTrigger: 0, }; export const AssignmentsTaskContext = createContext(undefined); export const AssignmentsTaskDispatchContext = createContext | undefined>(undefined); export function AssignmentsTaskProvider({ children }: { children: React.ReactNode }) { const session = useLHSession() as any; const access_token = session?.data?.tokens?.access_token; const assignment = useAssignments() as any const [state, dispatch] = useReducer(assignmentstaskReducer, initialState); async function fetchAssignmentTask(assignmentTaskUUID: string) { const res = await getAssignmentTask(assignmentTaskUUID, access_token); if (res.success) { dispatch({ type: 'setAssignmentTask', payload: res.data }); } } useEffect(() => { if (state.selectedAssignmentTaskUUID) { fetchAssignmentTask(state.selectedAssignmentTaskUUID); mutate(`${getAPIUrl()}assignments/${assignment.assignment_object?.assignment_uuid}/tasks`); } }, [state.selectedAssignmentTaskUUID, state.reloadTrigger,assignment]); return ( {children} ); } export function useAssignmentsTask() { const context = useContext(AssignmentsTaskContext); if (context === undefined) { throw new Error('useAssignmentsTask must be used within an AssignmentsTaskProvider'); } return context; } export function useAssignmentsTaskDispatch() { const context = useContext(AssignmentsTaskDispatchContext); if (context === undefined) { throw new Error('useAssignmentsTaskDispatch must be used within an AssignmentsTaskProvider'); } return context; } function assignmentstaskReducer(state: State, action: Action): State { switch (action.type) { case 'setSelectedAssignmentTaskUUID': return { ...state, selectedAssignmentTaskUUID: action.payload }; case 'setAssignmentTask': return { ...state, assignmentTask: action.payload }; case 'reload': return { ...state, reloadTrigger: state.reloadTrigger + 1 }; default: return state; } }