UNPKG

analytica-frontend-lib

Version:

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

82 lines 3.84 kB
import type { TableParams, ColumnConfig } from '../../../TableProvider/index'; import type { FilterConfig } from '../../Filter/index'; import type { SubjectEnum } from '../../../enums/SubjectEnum'; import type { BaseModelItem } from './createModelsTableColumnsBase'; import type { BaseApiClient } from '../../../types/api'; /** * Configuration for entity-specific text and labels */ export interface ModelsTabConfig { /** Entity name for messages (e.g., "aula", "atividade") */ entityName: string; /** Plural entity name (e.g., "aulas", "atividades") */ entityNamePlural: string; /** data-testid attribute */ testId: string; /** Empty state title */ emptyStateTitle: string; /** Empty state description */ emptyStateDescription: string; /** Search placeholder */ searchPlaceholder: string; } /** * Return type for the models hook */ export interface UseModelsReturn<T> { models: T[]; loading: boolean; error: string | null; pagination: { total: number; totalPages: number; }; fetchModels: (filters: Record<string, unknown>, subjectsMap?: Map<string, string>) => void; deleteModel: (id: string) => Promise<boolean>; } /** * Props for ModelsTabBase component */ export interface ModelsTabBaseProps<T extends BaseModelItem, TFilters, TResponse, TUserFilterData> { /** Function to fetch models from API */ fetchModels: (filters?: TFilters) => Promise<TResponse>; /** Function to delete a model */ deleteModel: (id: string) => Promise<void>; /** Callback when create model button is clicked */ onCreateModel: () => void; /** Callback when send button is clicked on a model */ onSend?: (model: T) => void; /** Callback when edit model button is clicked */ onEditModel?: (model: T) => void; /** 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; /** User data for populating filter options */ userFilterData?: TUserFilterData; /** * Map of subject IDs to names for models display. * IMPORTANT: This Map should be memoized with useMemo in the parent component * to avoid unnecessary re-fetches. */ subjectsMap?: Map<string, string>; /** Configuration for entity-specific text */ config: ModelsTabConfig; /** Function to create table columns */ createTableColumns: (mapSubjectNameToEnum: ((name: string) => SubjectEnum | null) | undefined, onSend: ((model: T) => void) | undefined, onEdit: ((model: T) => void) | undefined, onDelete: (model: T) => void) => ColumnConfig<T>[]; /** Function to create filter configs */ createFiltersConfig: (userFilterData?: TUserFilterData) => FilterConfig[]; /** Function to build filters from table params */ buildFiltersFromParams: (params: TableParams) => TFilters; /** Hook creator function that receives an API client */ createUseModels: (apiClient: BaseApiClient) => () => UseModelsReturn<T>; } /** * Generic ModelsTab base component that can be used by both * RecommendedClassModels (Lessons) and ActivityModels with type-safe generics. */ export declare const ModelsTabBase: <T extends BaseModelItem, TFilters, TResponse, TUserFilterData>({ fetchModels: fetchModelsProp, deleteModel: deleteModelProp, onCreateModel, onSend, onEditModel, emptyStateImage, noSearchImage, mapSubjectNameToEnum, userFilterData, subjectsMap, config, createTableColumns, createFiltersConfig, buildFiltersFromParams, createUseModels, }: ModelsTabBaseProps<T, TFilters, TResponse, TUserFilterData>) => import("react/jsx-runtime").JSX.Element; export default ModelsTabBase; //# sourceMappingURL=ModelsTabBase.d.ts.map