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