"use client"; import { useEffect } from "react"; import { useRouter } from "next/navigation"; import { useUser } from "@/hooks/use-user-context"; import { UserEvaluation, Team } from "@/lib/types"; import { updateSkillLevel as updateSkillLevelAction, updateSkillMentorStatus as updateSkillMentorStatusAction, updateSkillLearningStatus as updateSkillLearningStatusAction, addSkillToEvaluation as addSkillToEvaluationAction, removeSkillFromEvaluation as removeSkillFromEvaluationAction, } from "@/lib/evaluation-actions"; interface EvaluationClientWrapperProps { userEvaluation: UserEvaluation; teams: Team[]; children: React.ReactNode; } export function EvaluationClientWrapper({ userEvaluation, teams, children, }: EvaluationClientWrapperProps) { const { setUserInfo } = useUser(); const router = useRouter(); // Wrapper functions that refresh the page after API calls const updateSkillLevel = async ( category: string, skillId: string, level: any ) => { await updateSkillLevelAction(category, skillId, level); router.refresh(); }; const updateSkillMentorStatus = async ( category: string, skillId: string, canMentor: boolean ) => { await updateSkillMentorStatusAction(category, skillId, canMentor); router.refresh(); }; const updateSkillLearningStatus = async ( category: string, skillId: string, wantsToLearn: boolean ) => { await updateSkillLearningStatusAction(category, skillId, wantsToLearn); router.refresh(); }; const addSkillToEvaluation = async (category: string, skillId: string) => { await addSkillToEvaluationAction(category, skillId); router.refresh(); }; const removeSkillFromEvaluation = async ( category: string, skillId: string ) => { await removeSkillFromEvaluationAction(category, skillId); router.refresh(); }; // Update user info in navigation when user evaluation is loaded useEffect(() => { if (userEvaluation) { const teamName = teams.find((t) => t.id === userEvaluation.profile.teamId)?.name || ""; setUserInfo({ firstName: userEvaluation.profile.firstName, lastName: userEvaluation.profile.lastName, teamName, }); } else { setUserInfo(null); } }, [userEvaluation, teams, setUserInfo]); // Provide evaluation functions to children through React context or props return ( {children} ); } // Simple context provider for evaluation functions import { createContext, useContext } from "react"; interface EvaluationContextType { updateSkillLevel: (categoryId: string, skillId: string, level: any) => void; updateSkillMentorStatus: ( categoryId: string, skillId: string, canMentor: boolean ) => void; updateSkillLearningStatus: ( categoryId: string, skillId: string, wantsToLearn: boolean ) => void; addSkillToEvaluation: (categoryId: string, skillId: string) => void; removeSkillFromEvaluation: (categoryId: string, skillId: string) => void; } const EvaluationContext = createContext( undefined ); function EvaluationProvider({ children, updateSkillLevel, updateSkillMentorStatus, updateSkillLearningStatus, addSkillToEvaluation, removeSkillFromEvaluation, }: { children: React.ReactNode; } & EvaluationContextType) { return ( {children} ); } export function useEvaluationContext() { const context = useContext(EvaluationContext); if (context === undefined) { throw new Error( "useEvaluationContext must be used within an EvaluationProvider" ); } return context; }