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