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