analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
199 lines • 7.02 kB
TypeScript
/**
* 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