analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
131 lines (130 loc) • 4.3 kB
JavaScript
// src/utils/filterHelpers.ts
var getSchoolOptionsFromUserData = (userData) => {
if (!userData?.userInstitutions) {
return [];
}
const schoolsMap = /* @__PURE__ */ new Map();
for (const userInst of userData.userInstitutions) {
if (userInst.school?.id && userInst.school?.name) {
schoolsMap.set(userInst.school.id, {
id: userInst.school.id,
name: userInst.school.name
});
}
}
return Array.from(schoolsMap.values()).sort(
(a, b) => a.name.localeCompare(b.name, "pt-BR")
);
};
var getSubjectOptionsFromUserData = (userData) => {
if (!userData?.subTeacherTopicClasses) {
return [];
}
const subjectsMap = /* @__PURE__ */ new Map();
for (const subTeacher of userData.subTeacherTopicClasses) {
if (subTeacher.subject?.id && subTeacher.subject?.name) {
subjectsMap.set(subTeacher.subject.id, {
id: subTeacher.subject.id,
name: subTeacher.subject.name
});
}
}
return Array.from(subjectsMap.values()).sort(
(a, b) => a.name.localeCompare(b.name, "pt-BR")
);
};
var getSchoolYearOptionsFromUserData = (userData) => {
if (!userData?.userInstitutions) {
return [];
}
const schoolYearsMap = /* @__PURE__ */ new Map();
for (const userInst of userData.userInstitutions) {
if (userInst.schoolYear?.id && userInst.schoolYear?.name) {
schoolYearsMap.set(userInst.schoolYear.id, {
id: userInst.schoolYear.id,
name: userInst.schoolYear.name
});
}
}
return Array.from(schoolYearsMap.values()).sort(
(a, b) => a.name.localeCompare(b.name, "pt-BR")
);
};
var getClassOptionsFromUserData = (userData) => {
if (!userData) {
return [];
}
const classesMap = /* @__PURE__ */ new Map();
if (userData.userInstitutions) {
for (const userInst of userData.userInstitutions) {
if (userInst.class?.id && userInst.class?.name) {
classesMap.set(userInst.class.id, {
id: userInst.class.id,
name: userInst.class.name
});
}
}
}
if (userData.subTeacherTopicClasses) {
for (const subTeacher of userData.subTeacherTopicClasses) {
if (subTeacher.class?.id && subTeacher.class?.name) {
classesMap.set(subTeacher.class.id, {
id: subTeacher.class.id,
name: subTeacher.class.name
});
}
}
}
return Array.from(classesMap.values()).sort(
(a, b) => a.name.localeCompare(b.name, "pt-BR")
);
};
var buildUserFilterData = (userData) => ({
schools: getSchoolOptionsFromUserData(userData),
subjects: getSubjectOptionsFromUserData(userData)
});
var mergeFilterOptions = (base, extra) => {
if (extra.length === 0) return base;
const baseIds = new Set(base.map((item) => item.id));
const hasNew = extra.some((item) => !baseIds.has(item.id));
if (!hasNew) return base;
const map = new Map(base.map((item) => [item.id, item.name]));
extra.forEach((item) => {
if (!map.has(item.id)) map.set(item.id, item.name);
});
return Array.from(map.entries()).map(([id, name]) => ({ id, name })).sort((a, b) => a.name.localeCompare(b.name, "pt-BR"));
};
var extractBreakdownFilterOptions = (items) => {
const schoolsMap = /* @__PURE__ */ new Map();
const classesMap = /* @__PURE__ */ new Map();
const subjectsMap = /* @__PURE__ */ new Map();
const schoolYearsMap = /* @__PURE__ */ new Map();
const setIfPresent = (map, ref) => {
if (ref?.id && ref?.name) map.set(ref.id, ref.name);
};
for (const item of items) {
setIfPresent(subjectsMap, item.subject);
item.breakdown?.forEach((b) => {
setIfPresent(schoolsMap, b.school);
setIfPresent(classesMap, b.class);
setIfPresent(schoolYearsMap, b.schoolYear);
});
}
const toOptions = (map) => Array.from(map.entries()).map(([id, name]) => ({ id, name })).sort((a, b) => a.name.localeCompare(b.name, "pt-BR"));
return {
schools: toOptions(schoolsMap),
classes: toOptions(classesMap),
subjects: toOptions(subjectsMap),
schoolYears: toOptions(schoolYearsMap)
};
};
export {
getSchoolOptionsFromUserData,
getSubjectOptionsFromUserData,
getSchoolYearOptionsFromUserData,
getClassOptionsFromUserData,
buildUserFilterData,
mergeFilterOptions,
extractBreakdownFilterOptions
};
//# sourceMappingURL=chunk-XRPLT7ML.mjs.map