analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
1 lines • 9.17 kB
Source Map (JSON)
{"version":3,"sources":["../src/hooks/useComparator.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport {\n ComparatorTabValue,\n type ComparisonType,\n type ComparatorTabType,\n type ComparatorData,\n type KnowledgeAreaData,\n type CurricularComponentData,\n type CompetencyData,\n type NationalAverageData,\n type ComparatorApiClient,\n type KnowledgeAreasApiItem,\n type CurricularComponentsApiItem,\n type CompetenciesApiItem,\n type NationalAveragesApiItem,\n type UseComparatorReturn,\n} from '../types/comparator';\nimport { Period } from '../components/PeriodSelector';\n\n// Transform backend response to frontend format\nfunction transformKnowledgeAreas(\n apiData: KnowledgeAreasApiItem[]\n): KnowledgeAreaData[] {\n if (apiData.length === 0) return [];\n\n const areaNames = apiData[0]?.areas.map((a) => a.name) ?? [];\n\n return areaNames.map((areaName) => ({\n area: areaName,\n values: apiData.map((item) => {\n const area = item.areas.find((a) => a.name === areaName);\n return {\n itemId: item.itemId,\n percentage: area?.percentage ?? 0,\n };\n }),\n }));\n}\n\nfunction transformCurricularComponents(\n apiData: CurricularComponentsApiItem[]\n): CurricularComponentData[] {\n if (apiData.length === 0) return [];\n\n const subjectNames = apiData[0]?.subjects.map((s) => s.name) ?? [];\n\n return subjectNames.map((subjectName) => ({\n component: subjectName,\n values: apiData.map((item) => {\n const subject = item.subjects.find((s) => s.name === subjectName);\n return {\n itemId: item.itemId,\n percentage: subject?.percentage ?? 0,\n };\n }),\n }));\n}\n\nfunction transformCompetencies(\n apiData: CompetenciesApiItem[]\n): CompetencyData[] {\n if (apiData.length === 0) return [];\n\n const competencyNumbers = apiData[0].competencies\n .map((c) => c.competencyNumber)\n .sort((a, b) => a - b);\n\n return competencyNumbers.map((num) => ({\n competency: `Competência ${num}`,\n values: apiData.map((item) => {\n const comp = item.competencies.find((c) => c.competencyNumber === num);\n return {\n itemId: item.itemId,\n percentage: comp?.averagePercentage ?? 0,\n };\n }),\n }));\n}\n\nfunction transformNationalAverages(\n apiData: NationalAveragesApiItem[]\n): NationalAverageData[] {\n return apiData.map((item) => {\n const findArea = (name: string) =>\n item.areas.find((a) => a.name.toLowerCase().includes(name.toLowerCase()));\n\n const languages = findArea('linguagens');\n const humanities = findArea('humanas');\n const essay = findArea('redação') ?? findArea('essay');\n const naturalSciences = findArea('natureza');\n const mathematics = findArea('matemática');\n\n return {\n itemId: item.itemId,\n itemName: item.itemName,\n simulatedProficiency: item.overallTriScore,\n publicAverage: item.publicSchoolAverage,\n privateAverage: item.privateSchoolAverage,\n details: {\n languages: languages?.triScore ?? 0,\n humanities: humanities?.triScore ?? 0,\n essay: essay?.triScore ?? 0,\n naturalSciences: naturalSciences?.triScore ?? 0,\n mathematics: mathematics?.triScore ?? 0,\n },\n status: item.status,\n };\n });\n}\n\n// Unified comparator endpoint\nconst COMPARATOR_ENDPOINT = '/comparator';\n\nexport interface UseComparatorConfig {\n apiClient: ComparatorApiClient;\n endpoint?: string;\n defaultPeriod?: string;\n}\n\nexport function createUseComparator(config: UseComparatorConfig) {\n const {\n apiClient,\n endpoint = COMPARATOR_ENDPOINT,\n defaultPeriod = Period.ONE_MONTH,\n } = config;\n\n return function useComparator(): UseComparatorReturn {\n const [data, setData] = useState<ComparatorData>({\n knowledgeAreas: [],\n curricularComponents: [],\n competencies: [],\n nationalAverages: [],\n });\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchData = useCallback(\n async (ids: string[], type: ComparisonType, tab: ComparatorTabType) => {\n setLoading(true);\n setError(null);\n\n try {\n const body =\n type === 'school'\n ? { type: tab, schoolIds: ids, period: defaultPeriod }\n : { type: tab, schoolYearIds: ids, period: defaultPeriod };\n\n const response = await apiClient.post(endpoint, body);\n const apiData = response.data.data;\n\n setData((prev) => {\n const newData: ComparatorData = { ...prev };\n\n switch (tab) {\n case ComparatorTabValue.KNOWLEDGE_AREAS:\n newData.knowledgeAreas = transformKnowledgeAreas(\n apiData as KnowledgeAreasApiItem[]\n );\n break;\n case ComparatorTabValue.CURRICULAR_COMPONENTS:\n newData.curricularComponents = transformCurricularComponents(\n apiData as CurricularComponentsApiItem[]\n );\n break;\n case ComparatorTabValue.COMPETENCIES:\n newData.competencies = transformCompetencies(\n apiData as CompetenciesApiItem[]\n );\n break;\n case ComparatorTabValue.NATIONAL_AVERAGES:\n newData.nationalAverages = transformNationalAverages(\n apiData as NationalAveragesApiItem[]\n );\n break;\n }\n\n return newData;\n });\n } catch (err) {\n console.error('Erro ao buscar dados do comparador:', err);\n setError('Erro ao carregar dados de comparação');\n } finally {\n setLoading(false);\n }\n },\n []\n );\n\n return { data, loading, error, fetchData };\n };\n}\n\n// Convenience function to create the hook\nexport function createComparatorHook(config: UseComparatorConfig) {\n return createUseComparator(config);\n}\n"],"mappings":";AAAA,SAAS,UAAU,mBAAmB;AAoBtC,SAAS,wBACP,SACqB;AACrB,MAAI,QAAQ,WAAW,EAAG,QAAO,CAAC;AAElC,QAAM,YAAY,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC;AAE3D,SAAO,UAAU,IAAI,CAAC,cAAc;AAAA,IAClC,MAAM;AAAA,IACN,QAAQ,QAAQ,IAAI,CAAC,SAAS;AAC5B,YAAM,OAAO,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,QAAQ;AACvD,aAAO;AAAA,QACL,QAAQ,KAAK;AAAA,QACb,YAAY,MAAM,cAAc;AAAA,MAClC;AAAA,IACF,CAAC;AAAA,EACH,EAAE;AACJ;AAEA,SAAS,8BACP,SAC2B;AAC3B,MAAI,QAAQ,WAAW,EAAG,QAAO,CAAC;AAElC,QAAM,eAAe,QAAQ,CAAC,GAAG,SAAS,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC;AAEjE,SAAO,aAAa,IAAI,CAAC,iBAAiB;AAAA,IACxC,WAAW;AAAA,IACX,QAAQ,QAAQ,IAAI,CAAC,SAAS;AAC5B,YAAM,UAAU,KAAK,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW;AAChE,aAAO;AAAA,QACL,QAAQ,KAAK;AAAA,QACb,YAAY,SAAS,cAAc;AAAA,MACrC;AAAA,IACF,CAAC;AAAA,EACH,EAAE;AACJ;AAEA,SAAS,sBACP,SACkB;AAClB,MAAI,QAAQ,WAAW,EAAG,QAAO,CAAC;AAElC,QAAM,oBAAoB,QAAQ,CAAC,EAAE,aAClC,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAC7B,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAEvB,SAAO,kBAAkB,IAAI,CAAC,SAAS;AAAA,IACrC,YAAY,kBAAe,GAAG;AAAA,IAC9B,QAAQ,QAAQ,IAAI,CAAC,SAAS;AAC5B,YAAM,OAAO,KAAK,aAAa,KAAK,CAAC,MAAM,EAAE,qBAAqB,GAAG;AACrE,aAAO;AAAA,QACL,QAAQ,KAAK;AAAA,QACb,YAAY,MAAM,qBAAqB;AAAA,MACzC;AAAA,IACF,CAAC;AAAA,EACH,EAAE;AACJ;AAEA,SAAS,0BACP,SACuB;AACvB,SAAO,QAAQ,IAAI,CAAC,SAAS;AAC3B,UAAM,WAAW,CAAC,SAChB,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,KAAK,YAAY,EAAE,SAAS,KAAK,YAAY,CAAC,CAAC;AAE1E,UAAM,YAAY,SAAS,YAAY;AACvC,UAAM,aAAa,SAAS,SAAS;AACrC,UAAM,QAAQ,SAAS,eAAS,KAAK,SAAS,OAAO;AACrD,UAAM,kBAAkB,SAAS,UAAU;AAC3C,UAAM,cAAc,SAAS,eAAY;AAEzC,WAAO;AAAA,MACL,QAAQ,KAAK;AAAA,MACb,UAAU,KAAK;AAAA,MACf,sBAAsB,KAAK;AAAA,MAC3B,eAAe,KAAK;AAAA,MACpB,gBAAgB,KAAK;AAAA,MACrB,SAAS;AAAA,QACP,WAAW,WAAW,YAAY;AAAA,QAClC,YAAY,YAAY,YAAY;AAAA,QACpC,OAAO,OAAO,YAAY;AAAA,QAC1B,iBAAiB,iBAAiB,YAAY;AAAA,QAC9C,aAAa,aAAa,YAAY;AAAA,MACxC;AAAA,MACA,QAAQ,KAAK;AAAA,IACf;AAAA,EACF,CAAC;AACH;AAGA,IAAM,sBAAsB;AAQrB,SAAS,oBAAoB,QAA6B;AAC/D,QAAM;AAAA,IACJ;AAAA,IACA,WAAW;AAAA,IACX;AAAA,EACF,IAAI;AAEJ,SAAO,SAAS,gBAAqC;AACnD,UAAM,CAAC,MAAM,OAAO,IAAI,SAAyB;AAAA,MAC/C,gBAAgB,CAAC;AAAA,MACjB,sBAAsB,CAAC;AAAA,MACvB,cAAc,CAAC;AAAA,MACf,kBAAkB,CAAC;AAAA,IACrB,CAAC;AACD,UAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,UAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AAEtD,UAAM,YAAY;AAAA,MAChB,OAAO,KAAe,MAAsB,QAA2B;AACrE,mBAAW,IAAI;AACf,iBAAS,IAAI;AAEb,YAAI;AACF,gBAAM,OACJ,SAAS,WACL,EAAE,MAAM,KAAK,WAAW,KAAK,QAAQ,cAAc,IACnD,EAAE,MAAM,KAAK,eAAe,KAAK,QAAQ,cAAc;AAE7D,gBAAM,WAAW,MAAM,UAAU,KAAK,UAAU,IAAI;AACpD,gBAAM,UAAU,SAAS,KAAK;AAE9B,kBAAQ,CAAC,SAAS;AAChB,kBAAM,UAA0B,EAAE,GAAG,KAAK;AAE1C,oBAAQ,KAAK;AAAA,cACX;AACE,wBAAQ,iBAAiB;AAAA,kBACvB;AAAA,gBACF;AACA;AAAA,cACF;AACE,wBAAQ,uBAAuB;AAAA,kBAC7B;AAAA,gBACF;AACA;AAAA,cACF;AACE,wBAAQ,eAAe;AAAA,kBACrB;AAAA,gBACF;AACA;AAAA,cACF;AACE,wBAAQ,mBAAmB;AAAA,kBACzB;AAAA,gBACF;AACA;AAAA,YACJ;AAEA,mBAAO;AAAA,UACT,CAAC;AAAA,QACH,SAAS,KAAK;AACZ,kBAAQ,MAAM,uCAAuC,GAAG;AACxD,mBAAS,4CAAsC;AAAA,QACjD,UAAE;AACA,qBAAW,KAAK;AAAA,QAClB;AAAA,MACF;AAAA,MACA,CAAC;AAAA,IACH;AAEA,WAAO,EAAE,MAAM,SAAS,OAAO,UAAU;AAAA,EAC3C;AACF;AAGO,SAAS,qBAAqB,QAA6B;AAChE,SAAO,oBAAoB,MAAM;AACnC;","names":[]}