analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
91 lines (90 loc) • 2.84 kB
JavaScript
// 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