UNPKG

analytica-frontend-lib

Version:

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

91 lines (90 loc) 2.84 kB
// src/hooks/useQuestionsData.ts import { useState, useCallback } from "react"; import { z } from "zod"; var trendDirectionSchema = z.enum(["up", "down", "stable"]); var trendSchema = z.object({ totalQuestions: z.number(), correctPercentage: z.number(), direction: trendDirectionSchema }).nullable(); var questionsDataApiResponseSchema = z.object({ message: z.string(), data: z.object({ totalQuestions: z.number().min(0), correctQuestions: z.number().min(0), incorrectQuestions: z.number().min(0), blankQuestions: z.number().min(0), correctPercentage: z.number().min(0).max(100), incorrectPercentage: z.number().min(0).max(100), blankPercentage: z.number().min(0).max(100), trend: trendSchema }) }); var transformQuestionsData = (apiData) => ({ total: apiData.totalQuestions, corretas: apiData.correctQuestions, incorretas: apiData.incorrectQuestions, emBranco: apiData.blankQuestions, correctPercentage: apiData.correctPercentage, incorrectPercentage: apiData.incorrectPercentage, blankPercentage: apiData.blankPercentage, trend: apiData.trend }); var handleQuestionsDataFetchError = (error) => { if (error instanceof z.ZodError) { console.error("Erro ao validar dados de quest\xF5es:", error); return "Erro ao validar dados de quest\xF5es"; } console.error("Erro ao carregar dados de quest\xF5es:", error); return "Erro ao carregar dados de quest\xF5es"; }; var initialState = { data: null, loading: false, error: null }; var createUseQuestionsData = (fetchQuestionsDataApi) => { return () => { const [state, setState] = useState(initialState); const fetchQuestionsData = useCallback( async (filters) => { setState((prev) => ({ ...prev, loading: true, error: null })); try { const responseData = await fetchQuestionsDataApi(filters); const validatedData = questionsDataApiResponseSchema.parse(responseData); const transformedData = transformQuestionsData(validatedData.data); setState({ data: transformedData, loading: false, error: null }); } catch (error) { const errorMessage = handleQuestionsDataFetchError(error); setState((prev) => ({ ...prev, loading: false, error: errorMessage })); } }, [fetchQuestionsDataApi] ); const reset = useCallback(() => { setState(initialState); }, []); return { ...state, fetchQuestionsData, reset }; }; }; var createQuestionsDataHook = createUseQuestionsData; export { questionsDataApiResponseSchema, transformQuestionsData, handleQuestionsDataFetchError, createUseQuestionsData, createQuestionsDataHook }; //# sourceMappingURL=chunk-S63KGDW4.mjs.map