UNPKG

analytica-frontend-lib

Version:

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

140 lines (139 loc) 4.74 kB
// src/hooks/useComparator.ts import { useState, useCallback } from "react"; function transformKnowledgeAreas(apiData) { if (apiData.length === 0) return []; const areaNames = apiData[0]?.areas.map((a) => a.name) ?? []; return areaNames.map((areaName) => ({ area: areaName, values: apiData.map((item) => { const area = item.areas.find((a) => a.name === areaName); return { itemId: item.itemId, percentage: area?.percentage ?? 0 }; }) })); } function transformCurricularComponents(apiData) { if (apiData.length === 0) return []; const subjectNames = apiData[0]?.subjects.map((s) => s.name) ?? []; return subjectNames.map((subjectName) => ({ component: subjectName, values: apiData.map((item) => { const subject = item.subjects.find((s) => s.name === subjectName); return { itemId: item.itemId, percentage: subject?.percentage ?? 0 }; }) })); } function transformCompetencies(apiData) { if (apiData.length === 0) return []; const competencyNumbers = apiData[0].competencies.map((c) => c.competencyNumber).sort((a, b) => a - b); return competencyNumbers.map((num) => ({ competency: `Compet\xEAncia ${num}`, values: apiData.map((item) => { const comp = item.competencies.find((c) => c.competencyNumber === num); return { itemId: item.itemId, percentage: comp?.averagePercentage ?? 0 }; }) })); } function transformNationalAverages(apiData) { return apiData.map((item) => { const findArea = (name) => item.areas.find((a) => a.name.toLowerCase().includes(name.toLowerCase())); const languages = findArea("linguagens"); const humanities = findArea("humanas"); const essay = findArea("reda\xE7\xE3o") ?? findArea("essay"); const naturalSciences = findArea("natureza"); const mathematics = findArea("matem\xE1tica"); return { itemId: item.itemId, itemName: item.itemName, simulatedProficiency: item.overallTriScore, publicAverage: item.publicSchoolAverage, privateAverage: item.privateSchoolAverage, details: { languages: languages?.triScore ?? 0, humanities: humanities?.triScore ?? 0, essay: essay?.triScore ?? 0, naturalSciences: naturalSciences?.triScore ?? 0, mathematics: mathematics?.triScore ?? 0 }, status: item.status }; }); } var COMPARATOR_ENDPOINT = "/comparator"; function createUseComparator(config) { const { apiClient, endpoint = COMPARATOR_ENDPOINT, defaultPeriod = "1_MONTH" /* ONE_MONTH */ } = config; return function useComparator() { const [data, setData] = useState({ knowledgeAreas: [], curricularComponents: [], competencies: [], nationalAverages: [] }); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const fetchData = useCallback( async (ids, type, tab) => { setLoading(true); setError(null); try { const body = type === "school" ? { type: tab, schoolIds: ids, period: defaultPeriod } : { type: tab, schoolYearIds: ids, period: defaultPeriod }; const response = await apiClient.post(endpoint, body); const apiData = response.data.data; setData((prev) => { const newData = { ...prev }; switch (tab) { case "knowledge-areas" /* KNOWLEDGE_AREAS */: newData.knowledgeAreas = transformKnowledgeAreas( apiData ); break; case "curricular-components" /* CURRICULAR_COMPONENTS */: newData.curricularComponents = transformCurricularComponents( apiData ); break; case "competencies" /* COMPETENCIES */: newData.competencies = transformCompetencies( apiData ); break; case "national-averages" /* NATIONAL_AVERAGES */: newData.nationalAverages = transformNationalAverages( apiData ); break; } return newData; }); } catch (err) { console.error("Erro ao buscar dados do comparador:", err); setError("Erro ao carregar dados de compara\xE7\xE3o"); } finally { setLoading(false); } }, [] ); return { data, loading, error, fetchData }; }; } function createComparatorHook(config) { return createUseComparator(config); } export { createUseComparator, createComparatorHook }; //# sourceMappingURL=chunk-SZ4UPEXQ.mjs.map