diff --git a/src/api/classes.ts b/src/api/classes.ts index b1c191d6..c73a168b 100755 --- a/src/api/classes.ts +++ b/src/api/classes.ts @@ -10,7 +10,7 @@ import { ClassPaginationParams } from "@/types/data"; * @returns {Promise<{ data?: { id: string }; error?: string }>} - The response from the server */ export const createClass = async ( - newClass: ClassInfo + newClass: ClassInfo, ): Promise<{ id?: string; error?: string }> => { try { const response = await fetch(`${CLASS_ENDPOINT}/`, { @@ -44,7 +44,7 @@ export const createClass = async ( export const updateClass = async ( classId: string, - updates: Partial + updates: Partial, ): Promise<{ id?: string; error?: string }> => { try { const response = await fetch(`${CLASS_ENDPOINT}/${classId}`, { @@ -77,7 +77,7 @@ export const updateClass = async ( }; export const deleteClass = async ( - classId: string + classId: string, ): Promise<{ success?: boolean; error?: string }> => { try { const response = await fetch(`${CLASS_ENDPOINT}/${classId}`, { @@ -116,7 +116,7 @@ export const deleteClass = async ( */ export const getClassesByInstructor = async ( instructorId: string, - includeStudents: boolean = false + includeStudents: boolean = false, ): Promise<{ data?: ClassData[]; error?: string }> => { try { const url = new URL(`${CLASS_ENDPOINT}/instructor/${instructorId}`); @@ -188,7 +188,7 @@ export async function getClassesbyStudent(studentId: string): Promise<{ */ export const registerUserClass = async ( userId: string, - classId: string + classId: string, ): Promise<{ success: boolean; error?: string }> => { try { const response = await fetch(`${CLASS_ENDPOINT}/register`, { @@ -219,7 +219,7 @@ export const registerUserClass = async ( export const unregisterUserClass = async ( userId: string, - classId: string + classId: string, ): Promise<{ success: boolean; error?: string }> => { try { const response = await fetch(`${CLASS_ENDPOINT}/unregister`, { @@ -252,7 +252,7 @@ export const unregisterUserClass = async ( * @returns {Promise<{ data?: UserActivityLogItem[]; error?: string }>} - The response from the server or an error message. */ export async function getClassActivityByInstructorId( - instructorId: string + instructorId: string, ): Promise<{ data: ActivityLogResponse; error?: string }> { console.log("Fetching class activity for instructor:", instructorId); @@ -279,6 +279,8 @@ export async function getClassActivityByInstructorId( return { data: [] }; } + console.log("Log data", JSON.stringify(logs, null, 2)); + return { data: logs }; } catch (err) { return { @@ -298,7 +300,7 @@ export async function getClassActivityByInstructorId( export const updateStudentEnrollmentStatus = async ( classId: string, studentId: string, - newStatus: EnrollmentStatus + newStatus: EnrollmentStatus, ): Promise<{ success: boolean; error?: string }> => { try { const response = await fetch(`${CLASS_ENDPOINT}/enrollment-status`, { @@ -342,7 +344,7 @@ interface PaginatedClassResponse { } export async function getAllClasses( - params: ClassPaginationParams = {} + params: ClassPaginationParams = {}, ): Promise<{ data?: PaginatedClassResponse; error?: string; @@ -392,7 +394,7 @@ export async function getAllClasses( export async function updateClassStudentsSettings( classId: string, studentIds: string[], - settings: UserSettings + settings: UserSettings, ): Promise<{ data?: boolean; error?: string }> { try { const response = await fetch( @@ -404,7 +406,7 @@ export async function updateClassStudentsSettings( studentIds, settings, }), - } + }, ); const data = await response.json(); @@ -429,7 +431,7 @@ export async function getClassById( includeStudents?: boolean; userId?: string; includeAllStatuses?: boolean; - } + }, ): Promise<{ data?: ClassData; error?: string; @@ -440,7 +442,7 @@ export async function getClassById( if (options?.includeStudents) { searchParams.append( "includeStudents", - options.includeStudents.toString() + options.includeStudents.toString(), ); } @@ -451,7 +453,7 @@ export async function getClassById( if (options?.includeAllStatuses) { searchParams.append( "includeAllStatuses", - options.includeAllStatuses.toString() + options.includeAllStatuses.toString(), ); } diff --git a/src/components/TypingLogsDownloadButton.tsx b/src/components/TypingLogsDownloadButton.tsx index 648db1f5..46f8cd8a 100644 --- a/src/components/TypingLogsDownloadButton.tsx +++ b/src/components/TypingLogsDownloadButton.tsx @@ -20,6 +20,7 @@ type TypingLogData = { correct_line: string | null; incorrect_line: string | null; shown_bug: boolean | null; + bug_percentage: number | null; // Add this field line_suggestions_group?: { filename: string | null; language: string | null; @@ -33,9 +34,6 @@ const TypingLogsDownloadButton = ({ }: TypingLogsDownloadButtonProps) => { const [typingData, setTypingData] = useState([]); const [loading, setLoading] = useState(false); - const [userSettings, setUserSettings] = useState<{ - bug_percentage: number; - } | null>(null); const focusEvents = [ "TYPING", @@ -46,32 +44,6 @@ const TypingLogsDownloadButton = ({ "SUGGESTION_GENERATE", ]; - useEffect(() => { - const fetchUserSettings = async () => { - if (!userId) return; - - try { - const { data, error } = await supabase - .from("user_settings") - .select("bug_percentage") - .eq("user_id", userId) - .single(); - - if (error) { - console.warn("Error fetching user settings:", error); - setUserSettings({ bug_percentage: 40 }); // Default fallback - } else { - setUserSettings(data); - } - } catch (err) { - console.error("Error fetching user settings:", err); - setUserSettings({ bug_percentage: 40 }); // Default fallback - } - }; - - fetchUserSettings(); - }, [userId]); - useEffect(() => { const fetchTypingData = async () => { if (!userId) return; @@ -101,6 +73,7 @@ const TypingLogsDownloadButton = ({ correct_line, incorrect_line, shown_bug, + bug_percentage, line_suggestions_group:group_id ( filename, language @@ -152,7 +125,7 @@ const TypingLogsDownloadButton = ({ "Correct Line": log.line_suggestions?.correct_line || "N/A", "Incorrect Line": log.line_suggestions?.incorrect_line || "N/A", "Bug Shown": log.line_suggestions?.shown_bug ?? "N/A", - "Bug Percentage": userSettings?.bug_percentage ?? "N/A", + "Bug Percentage": log.line_suggestions?.bug_percentage ?? "N/A", // Changed this line Filename: log.line_suggestions?.line_suggestions_group?.filename || "N/A", Language: @@ -168,10 +141,8 @@ const TypingLogsDownloadButton = ({ } }; - if (userSettings !== null) { - fetchTypingData(); - } - }, [userId, user, userSettings]); + fetchTypingData(); + }, [userId, user]); // Removed userSettings dependency const filename = user?.pid ? `typing-logs-${user.firstName}-${user.pid}` diff --git a/src/pages/classes/hooks/useClassData.ts b/src/pages/classes/hooks/useClassData.ts index c124d7a7..b921ff4e 100644 --- a/src/pages/classes/hooks/useClassData.ts +++ b/src/pages/classes/hooks/useClassData.ts @@ -9,7 +9,7 @@ export function useClassData( userId?: string; includeAllStatuses?: boolean; enabled?: boolean; - } + }, ) { return useQuery({ queryKey: ["class", classId, options?.includeStudents, options?.userId], diff --git a/src/pages/dashboard/hooks/useClassActivity.ts b/src/pages/dashboard/hooks/useClassActivity.ts index 4c766fdd..8793629f 100755 --- a/src/pages/dashboard/hooks/useClassActivity.ts +++ b/src/pages/dashboard/hooks/useClassActivity.ts @@ -35,8 +35,6 @@ export const useClassActivity = ( await getClassActivityByInstructorId(instructorId); if (error || !data) throw new Error(error); - console.log("Fetched class activity logs:", data); - return data as ActivityLogResponse; }, enabled: !!instructorId, diff --git a/src/pages/dashboard/ui/views/admin/ClassStatView.tsx b/src/pages/dashboard/ui/views/admin/ClassStatView.tsx index 34b4e394..acdf5223 100644 --- a/src/pages/dashboard/ui/views/admin/ClassStatView.tsx +++ b/src/pages/dashboard/ui/views/admin/ClassStatView.tsx @@ -12,19 +12,19 @@ import { Button } from "@/components/ui/button"; const ClassStatView = ({}) => { const { instructorId, classId } = useParams(); - const { data } = useClassData(classId); - - console.log("Class data", JSON.stringify(data, null, 2)); + const { data } = useClassData(classId, { + includeStudents: true, + includeAllStatuses: false, + }); const [showModel, setShowModel] = useState(false); const { classActivity, progressData, loading } = useClassActivity( instructorId, classId, + UserMode.LINE_BY_LINE, ); - console.log("classActivity", JSON.stringify(classActivity, null, 2)); - const formatDataForDownload = useMemo(() => { return classActivity.map((activity, index) => ({ "No.": index + 1, @@ -40,6 +40,13 @@ const ClassStatView = ({}) => { }, [classActivity, classId]); return (
+
+ +
+

{data?.classTitle} @@ -67,13 +74,6 @@ const ClassStatView = ({}) => { showLearningProgress={false} /> -
- -
- {showModel && data && ( { }; case UserMode.LINE_BY_LINE: return { - accept: ["SUGGESTION_LINE_ACCEPT"], + accept: ["SUGGESTION_LINE_ACCEPT", "SUGGESTION_TAB_ACCEPT"], reject: ["SUGGESTION_LINE_REJECT"], }; case UserMode.CODE_SELECTION: