UNPKG

analytica-frontend-lib

Version:

Repositório público dos componentes utilizados nas plataformas da Analytica Ensino

168 lines 6.33 kB
import { z } from 'zod'; import type { LessonDetailsData, RecommendedClassApiResponse, RecommendedClassDetailsApiResponse, RecommendedClassHistoryApiResponse } from '../types/recommendedLessons'; /** * Schema for /recommendedClass/{id} API response */ export declare const recommendedClassApiResponseSchema: z.ZodObject<{ message: z.ZodString; data: z.ZodObject<{ id: z.ZodString; title: z.ZodString; startDate: z.ZodString; finalDate: z.ZodString; progress: z.ZodNumber; lessons: z.ZodArray<z.ZodObject<{ recommendedClassId: z.ZodString; supLessonsProgressId: z.ZodString; supLessonsProgress: z.ZodObject<{ id: z.ZodString; userId: z.ZodString; lessonId: z.ZodString; progress: z.ZodNumber; lesson: z.ZodObject<{ id: z.ZodString; content: z.ZodObject<{ id: z.ZodString; name: z.ZodString; }, z.core.$strip>; subtopic: z.ZodObject<{ id: z.ZodString; name: z.ZodString; }, z.core.$strip>; topic: z.ZodObject<{ id: z.ZodString; name: z.ZodString; }, z.core.$strip>; subject: z.ZodObject<{ id: z.ZodString; name: z.ZodString; color: z.ZodString; icon: z.ZodString; }, z.core.$strip>; }, z.core.$strip>; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; }, z.core.$strip>; /** * Schema for /recommendedClass/{id}/details API response */ export declare const recommendedClassDetailsApiResponseSchema: z.ZodObject<{ message: z.ZodString; data: z.ZodObject<{ students: z.ZodArray<z.ZodObject<{ userInstitutionId: z.ZodString; userId: z.ZodString; name: z.ZodString; progress: z.ZodNumber; completedAt: z.ZodNullable<z.ZodString>; avgScore: z.ZodNullable<z.ZodNumber>; daysToComplete: z.ZodNullable<z.ZodNumber>; }, z.core.$strip>>; aggregated: z.ZodObject<{ completionPercentage: z.ZodNumber; avgScore: z.ZodNullable<z.ZodNumber>; }, z.core.$strip>; contentPerformance: z.ZodObject<{ best: z.ZodNullable<z.ZodObject<{ contentId: z.ZodString; contentName: z.ZodString; rate: z.ZodNumber; }, z.core.$strip>>; worst: z.ZodNullable<z.ZodObject<{ contentId: z.ZodString; contentName: z.ZodString; rate: z.ZodNumber; }, z.core.$strip>>; }, z.core.$strip>; }, z.core.$strip>; }, z.core.$strip>; /** * Schema for history API response (partial) */ export declare const historyApiResponseSchema: z.ZodObject<{ message: z.ZodString; data: z.ZodObject<{ recommendedClass: z.ZodArray<z.ZodObject<{ recommendedClass: z.ZodObject<{ id: z.ZodString; }, z.core.$strip>; breakdown: z.ZodArray<z.ZodObject<{ classId: z.ZodString; className: z.ZodString; schoolId: z.ZodString; schoolName: z.ZodString; studentCount: z.ZodNumber; completedCount: z.ZodNumber; }, z.core.$strip>>; }, z.core.$strip>>; total: z.ZodNumber; }, z.core.$strip>; }, z.core.$strip>; /** * Hook state interface */ export interface UseRecommendedLessonDetailsState { data: LessonDetailsData | null; loading: boolean; error: string | null; } /** * Hook return type */ export interface UseRecommendedLessonDetailsReturn extends UseRecommendedLessonDetailsState { refetch: () => Promise<void>; } /** * API client interface for fetching lesson details */ export interface LessonDetailsApiClient { /** Fetch recommendedClass metadata from /recommendedClass/{id} */ fetchRecommendedClass: (id: string) => Promise<RecommendedClassApiResponse>; /** Fetch recommendedClass details from /recommendedClass/{id}/details */ fetchRecommendedClassDetails: (id: string) => Promise<RecommendedClassDetailsApiResponse>; /** Optional: Fetch breakdown from /recommended-class/history */ fetchBreakdown?: (id: string) => Promise<RecommendedClassHistoryApiResponse>; } /** * Handle errors during lesson details fetch * @param error - Error object * @returns Error message for UI display */ export declare const handleLessonDetailsFetchError: (error: unknown) => string; /** * Factory function to create useRecommendedLessonDetails hook * * @param apiClient - Object containing API fetch functions * @returns Hook for managing recommended lesson details * * @example * ```tsx * // In your app setup * const apiClient = { * fetchRecommendedClass: async (id) => { * const response = await api.get(`/recommendedClass/${id}`); * return response.data; * }, * fetchRecommendedClassDetails: async (id) => { * const response = await api.get(`/recommendedClass/${id}/details`); * return response.data; * }, * fetchBreakdown: async (id) => { * const response = await api.get(`/recommended-class/history?search=${id}&limit=1`); * return response.data; * }, * }; * * const useRecommendedClassDetails = createUseRecommendedLessonDetails(apiClient); * * // In your component * const { data, loading, error, refetch } = useRecommendedClassDetails('recommendedClass-id-123'); * ``` */ export declare const createUseRecommendedLessonDetails: (apiClient: LessonDetailsApiClient) => (lessonId: string | undefined, userId?: string) => UseRecommendedLessonDetailsReturn; /** * Alias for createUseRecommendedLessonDetails */ export declare const createRecommendedLessonDetailsHook: (apiClient: LessonDetailsApiClient) => (lessonId: string | undefined, userId?: string) => UseRecommendedLessonDetailsReturn; //# sourceMappingURL=useRecommendedLessonDetails.d.ts.map