UNPKG

analytica-frontend-lib

Version:

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

173 lines 5.84 kB
import type { ActivityFilterOption } from '../types/activitiesHistory'; /** * Generic user institution data structure * Matches the structure from GET /user/me endpoint */ export interface UserInstitutionData { school?: { id: string; name: string; }; schoolYear?: { id: string; name: string; }; class?: { id: string; name: string; }; } /** * Generic subject teacher topic class structure */ export interface SubTeacherTopicClassData { subject?: { id: string; name: string; }; class?: { id: string; name: string; }; } /** * Generic user data structure for filter extraction * Can be extended by consuming projects */ export interface UserFilterSourceData { userInstitutions?: UserInstitutionData[]; subTeacherTopicClasses?: SubTeacherTopicClassData[]; } /** * Extract unique school options from user data * Uses Map for deduplication to handle multiple institutions with same school * * @param userData - User data from /user/me endpoint * @returns Array of unique schools sorted by name * * @example * ```typescript * const userData = useUserStore(state => state.data); * const schools = getSchoolOptionsFromUserData(userData); * // Returns: [{ id: '1', name: 'Escola A' }, { id: '2', name: 'Escola B' }] * ``` */ export declare const getSchoolOptionsFromUserData: (userData: UserFilterSourceData | null | undefined) => ActivityFilterOption[]; /** * Extract unique subject options from user data * Uses Map for deduplication * * @param userData - User data from /user/me endpoint * @returns Array of unique subjects sorted by name * * @example * ```typescript * const userData = useUserStore(state => state.data); * const subjects = getSubjectOptionsFromUserData(userData); * // Returns: [{ id: '1', name: 'Matemática' }, { id: '2', name: 'Português' }] * ``` */ export declare const getSubjectOptionsFromUserData: (userData: UserFilterSourceData | null | undefined) => ActivityFilterOption[]; /** * Extract unique school year (série) options from user data * * @param userData - User data from /user/me endpoint * @returns Array of unique school years sorted by name */ export declare const getSchoolYearOptionsFromUserData: (userData: UserFilterSourceData | null | undefined) => ActivityFilterOption[]; /** * Extract unique class (turma) options from user data * Combines classes from userInstitutions and subTeacherTopicClasses * * @param userData - User data from /user/me endpoint * @returns Array of unique classes sorted by name */ export declare const getClassOptionsFromUserData: (userData: UserFilterSourceData | null | undefined) => ActivityFilterOption[]; /** * Build user filter data object from user data * Convenience function to create ActivityUserFilterData * * @param userData - User data from /user/me endpoint * @returns Object with schools and subjects arrays * * @example * ```typescript * const userData = useUserStore(state => state.data); * const userFilterData = buildUserFilterData(userData); * // Use with ActivitiesHistory component: * <ActivitiesHistory userFilterData={userFilterData} ... /> * ``` */ export declare const buildUserFilterData: (userData: UserFilterSourceData | null | undefined) => { schools: ActivityFilterOption[]; subjects: ActivityFilterOption[]; }; /** * Merge two filter option arrays, deduplicating by ID. * Returns the base array unchanged if extra adds no new items. * * @param base - Base filter options array * @param extra - Additional filter options to merge * @returns Merged and sorted array of unique filter options * * @example * ```typescript * const userSubjects = getSubjectOptionsFromUserData(userData); * const apiSubjects = [{ id: '3', name: 'História' }]; * const allSubjects = mergeFilterOptions(userSubjects, apiSubjects); * // Returns deduplicated and sorted array * ``` */ export declare const mergeFilterOptions: (base: ActivityFilterOption[], extra: ActivityFilterOption[]) => ActivityFilterOption[]; /** * Generic entity reference with id and name. * Used internally for structural typing in extractBreakdownFilterOptions. */ interface EntityRefLike { id: string; name: string; } /** * Structural shape of a single breakdown entry (school/class/schoolYear). * Matches both ActivityBreakdownItem and ExamBreakdownItem. */ interface BreakdownLike { school?: EntityRefLike | null; schoolYear?: EntityRefLike | null; class?: EntityRefLike | null; } /** * Structural shape of a history item that carries subject and breakdown data. * Matches both ActivityHistoryResponse and ExamHistoryResponse. */ interface BreakdownHistoryItem { subject?: EntityRefLike | null; breakdown?: BreakdownLike[]; } /** * Filter options extracted from a list of history items with breakdown data. */ export interface BreakdownFilterOptions { schools: ActivityFilterOption[]; classes: ActivityFilterOption[]; subjects: ActivityFilterOption[]; schoolYears: ActivityFilterOption[]; } /** * Extract unique filter options (schools, classes, subjects, schoolYears) * from a list of history items that carry subject and breakdown data. * * Used by both useActivitiesHistory and useExamsHistory to avoid duplication. * * @param items - Array of history items (activities or exams) from the API * @returns Deduplicated, sorted filter options grouped by dimension * * @example * ```typescript * const options = extractBreakdownFilterOptions(data.activities); * // Returns: { schools: [...], classes: [...], subjects: [...], schoolYears: [...] } * ``` */ export declare const extractBreakdownFilterOptions: (items: BreakdownHistoryItem[]) => BreakdownFilterOptions; export {}; //# sourceMappingURL=filterHelpers.d.ts.map