UNPKG

analytica-frontend-lib

Version:

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

156 lines 4.84 kB
import { z } from 'zod'; /** * Period filter options for questions data */ export type QuestionsDataPeriod = '7_DAYS' | '1_MONTH' | '3_MONTHS' | '6_MONTHS' | '1_YEAR'; /** * Trend direction for questions data */ export type QuestionsDataTrendDirection = 'up' | 'down' | 'stable'; /** * Filters for questions data API request */ export interface QuestionsDataFilters { period?: QuestionsDataPeriod; subjectId?: string; schoolYearId?: string; classId?: string; schoolId?: string; } /** * Trend information from API response */ export interface QuestionsDataTrend { totalQuestions: number; correctPercentage: number; direction: QuestionsDataTrendDirection; } /** * API response data structure */ export interface QuestionsDataApiData { totalQuestions: number; correctQuestions: number; incorrectQuestions: number; blankQuestions: number; correctPercentage: number; incorrectPercentage: number; blankPercentage: number; trend: QuestionsDataTrend | null; } /** * API response structure for questions data endpoint */ export interface QuestionsDataApiResponse { message: string; data: QuestionsDataApiData; } /** * Transformed data for UI display. * Extends the basic QuestionsDataItem from component with additional API fields. * Can be passed directly to QuestionsData component (extra fields are ignored). */ export interface QuestionsDataHookResult { /** Total number of questions answered */ total: number; /** Number of correct answers */ corretas: number; /** Number of incorrect answers */ incorretas: number; /** Number of blank (unanswered) questions */ emBranco: number; /** Percentage of correct answers */ correctPercentage: number; /** Percentage of incorrect answers */ incorrectPercentage: number; /** Percentage of blank answers */ blankPercentage: number; /** Trend information */ trend: QuestionsDataTrend | null; } /** * Zod schema for questions data API response validation */ export declare const questionsDataApiResponseSchema: z.ZodObject<{ message: z.ZodString; data: z.ZodObject<{ totalQuestions: z.ZodNumber; correctQuestions: z.ZodNumber; incorrectQuestions: z.ZodNumber; blankQuestions: z.ZodNumber; correctPercentage: z.ZodNumber; incorrectPercentage: z.ZodNumber; blankPercentage: z.ZodNumber; trend: z.ZodNullable<z.ZodObject<{ totalQuestions: z.ZodNumber; correctPercentage: z.ZodNumber; direction: z.ZodEnum<{ stable: "stable"; up: "up"; down: "down"; }>; }, z.core.$strip>>; }, z.core.$strip>; }, z.core.$strip>; /** * Hook state interface */ export interface UseQuestionsDataState { data: QuestionsDataHookResult | null; loading: boolean; error: string | null; } /** * Hook return type */ export interface UseQuestionsDataReturn extends UseQuestionsDataState { fetchQuestionsData: (filters?: QuestionsDataFilters) => Promise<void>; reset: () => void; } /** * Transform API response data to component format * @param apiData - Data from API response * @returns Transformed data for QuestionsData component */ export declare const transformQuestionsData: (apiData: QuestionsDataApiData) => QuestionsDataHookResult; /** * Handle errors during questions data fetch * @param error - Error object * @returns Error message for UI display */ export declare const handleQuestionsDataFetchError: (error: unknown) => string; /** * Factory function to create useQuestionsData hook * * @param fetchQuestionsDataApi - Function to fetch questions data from API * @returns Hook for managing questions data * * @example * ```tsx * // In your app setup * const fetchQuestionsDataApi = async (filters) => { * const response = await api.get('/performance/questions-data', { params: filters }); * return response.data; * }; * * const useQuestionsData = createUseQuestionsData(fetchQuestionsDataApi); * * // In your component * const { data, loading, error, fetchQuestionsData } = useQuestionsData(); * * useEffect(() => { * fetchQuestionsData({ period: '1_MONTH' }); * }, []); * * if (loading) return <Skeleton />; * if (!data) return null; * * return <QuestionsData data={data} />; * ``` */ export declare const createUseQuestionsData: (fetchQuestionsDataApi: (filters?: QuestionsDataFilters) => Promise<QuestionsDataApiResponse>) => () => UseQuestionsDataReturn; /** * Alias for createUseQuestionsData */ export declare const createQuestionsDataHook: (fetchQuestionsDataApi: (filters?: QuestionsDataFilters) => Promise<QuestionsDataApiResponse>) => () => UseQuestionsDataReturn; //# sourceMappingURL=useQuestionsData.d.ts.map