analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
168 lines • 6.33 kB
TypeScript
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