UNPKG

analytica-frontend-lib

Version:

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

199 lines 7.03 kB
/** * useRecommendedLessonsPage Hook Factory * * Factory function to create a hook for RecommendedLessons, LessonDrafts, and LessonModels pages. * Contains all common state, memos, and callbacks. */ import { type RecommendedClassHistoryFilters, type RecommendedClassHistoryApiResponse, type RecommendedClassTableItem, type RecommendedClassData, type UpdateRecommendedClassData, type RecommendedClassModelFilters, type RecommendedClassModelsApiResponse, type RecommendedClassModelTableItem } from '../../types/recommendedLessons'; import type { SendLessonFormData, CategoryConfig } from '../../components/SendLessonModal/types'; import type { FilterConfig } from '../../components/Filter/index'; import { SubjectEnum } from '../../enums/SubjectEnum'; /** * API client interface */ export interface RecommendedLessonsApiClient { get: <T>(url: string, config?: { params?: Record<string, unknown>; }) => Promise<{ data: T; }>; post: <T>(url: string, data?: unknown) => Promise<{ data: T; }>; patch: <T>(url: string, data?: unknown) => Promise<{ data: T; }>; delete: <T>(url: string) => Promise<{ data: T; }>; } /** * User institution data structure */ export interface UserInstitution { school: { id: string; name: string; }; schoolYear: { id: string; name: string; }; class: { id: string; name: string; }; } /** * Subject teacher class data structure */ export interface SubTeacherTopicClass { subject: { id: string; name: string; }; class: { id: string; name: string; }; } /** * User data structure */ export interface RecommendedLessonsUserData { userInstitutions?: UserInstitution[]; subTeacherTopicClasses?: SubTeacherTopicClass[]; } /** * Navigation paths configuration */ export interface RecommendedLessonsPagePaths { /** Path for creating a new lesson */ createLesson: string; /** Path for creating a new model */ createModel: string; /** Base path for lesson details */ lessonDetails: string; /** Base path for editing a lesson */ editLesson: string; /** Path for editing a model (with id parameter) */ editModel: string; } /** * API endpoints configuration */ export interface RecommendedLessonsPageEndpoints { /** Endpoint for fetching recommendedClass history */ recommendedClassHistory: string; /** Endpoint for fetching recommendedClass models/drafts */ recommendedClassDrafts: string; /** Endpoint for submitting a recommendedClass */ submitRecommendedClass: string; } /** * UI text configuration */ export interface RecommendedLessonsPageTexts { title: string; createButtonText: string; searchPlaceholder: string; } /** * Configuration for createUseRecommendedLessonsPage factory */ export interface UseRecommendedLessonsPageConfig { /** API client for making requests */ api: RecommendedLessonsApiClient; /** Navigation function */ navigate: (path: string, options?: { state?: unknown; }) => void; /** User data for filter options */ userData: RecommendedLessonsUserData | null; /** Navigation paths */ paths: RecommendedLessonsPagePaths; /** API endpoints */ endpoints: RecommendedLessonsPageEndpoints; /** UI text */ texts: RecommendedLessonsPageTexts; /** Image for empty state */ emptyStateImage: string; /** Image for no search results */ noSearchImage: string; /** Function to map subject name to SubjectEnum */ mapSubjectNameToEnum: (subjectName: string) => SubjectEnum | null; /** Extra filter categories to inject (e.g., creatorType for gestors) */ extraFilterCategories?: FilterConfig[]; } /** * Return type for the useRecommendedLessonsPage hook */ export interface UseRecommendedLessonsPageReturn { /** Props for RecommendedLessonsHistory component */ historyProps: { fetchRecommendedClassHistory: (filters?: RecommendedClassHistoryFilters) => Promise<RecommendedClassHistoryApiResponse>; fetchRecommendedClassModels: (filters?: RecommendedClassModelFilters) => Promise<RecommendedClassModelsApiResponse>; deleteRecommendedClassModel: (id: string) => Promise<void>; onCreateLesson: () => void; onCreateModel: () => void; onRowClick: (row: RecommendedClassTableItem) => void; deleteRecommendedClass: (id: string) => Promise<void>; updateRecommendedClass: (id: string, data: UpdateRecommendedClassData) => Promise<void>; fetchRecommendedClassById: (id: string) => Promise<RecommendedClassData>; onEditModel: (model: RecommendedClassModelTableItem) => void; onSendLesson: (model: RecommendedClassModelTableItem) => void; fetchRecommendedClassDrafts: (filters?: RecommendedClassModelFilters) => Promise<RecommendedClassModelsApiResponse>; deleteRecommendedClassDraft: (id: string) => Promise<void>; onSendDraft: (draft: RecommendedClassModelTableItem) => void; onEditDraft: (draft: RecommendedClassModelTableItem) => void; emptyStateImage: string; noSearchImage: string; mapSubjectNameToEnum: (subjectName: string) => SubjectEnum | null; userFilterData: { schools: Array<{ id: string; name: string; }>; classes: Array<{ id: string; name: string; }>; subjects: Array<{ id: string; name: string; }>; schoolYears: Array<{ id: string; name: string; }>; }; subjectsMap: Map<string, string>; title: string; createButtonText: string; searchPlaceholder: string; extraFilterCategories?: FilterConfig[]; }; /** Props for SendLessonModal component */ modalProps: { isOpen: boolean; onClose: () => void; onSubmit: (formData: SendLessonFormData) => Promise<void>; categories: CategoryConfig[]; onCategoriesChange: (categories: CategoryConfig[]) => void; isLoading: boolean; modalTitle: string | undefined; /** Whether the selected model has activity drafts attached, which * controls the visibility of the "Permitir refazer?" field. */ hasAttachedActivities: boolean; }; /** Navigate function for custom tab handlers */ navigate: (path: string, options?: { state?: unknown; }) => void; } export declare const createUseRecommendedLessonsPage: (config: UseRecommendedLessonsPageConfig) => (() => UseRecommendedLessonsPageReturn); /** * Alias for createUseRecommendedLessonsPage */ export declare const createRecommendedLessonsPageHook: (config: UseRecommendedLessonsPageConfig) => (() => UseRecommendedLessonsPageReturn); //# sourceMappingURL=useRecommendedLessonsPage.d.ts.map