analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
86 lines • 3.59 kB
TypeScript
import { z } from 'zod';
import { RecommendedClassDraftType } from '../types/recommendedLessons';
import type { RecommendedClassModelResponse, RecommendedClassModelTableItem, RecommendedClassModelFilters, RecommendedClassModelPagination } from '../types/recommendedLessons';
import type { BaseApiClient } from '../types/api';
/**
* Zod schema for recommendedClass models API response validation
*/
export declare const recommendedClassModelsApiResponseSchema: z.ZodObject<{
message: z.ZodString;
data: z.ZodObject<{
drafts: z.ZodArray<z.ZodObject<{
id: z.ZodString;
type: z.ZodEnum<typeof RecommendedClassDraftType>;
title: z.ZodString;
description: z.ZodNullable<z.ZodString>;
creatorUserInstitutionId: z.ZodString;
subjectId: z.ZodNullable<z.ZodString>;
subject: z.ZodOptional<z.ZodNullable<z.ZodObject<{
id: z.ZodString;
name: z.ZodString;
}, z.core.$strip>>>;
startDate: z.ZodNullable<z.ZodString>;
finalDate: z.ZodNullable<z.ZodString>;
createdAt: z.ZodString;
updatedAt: z.ZodString;
activityDrafts: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
activityDraftId: z.ZodUUID;
sequence: z.ZodNumber;
title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
}, z.core.$strip>>>>;
}, z.core.$strip>>;
total: z.ZodNumber;
}, z.core.$strip>;
}, z.core.$strip>;
/**
* Hook state interface
*/
export interface UseRecommendedClassModelsState {
models: RecommendedClassModelTableItem[];
loading: boolean;
error: string | null;
pagination: RecommendedClassModelPagination;
}
/**
* Hook return type
*/
export interface UseRecommendedClassModelsReturn extends UseRecommendedClassModelsState {
fetchModels: (filters?: RecommendedClassModelFilters, subjectsMap?: Map<string, string>) => Promise<void>;
deleteModel: (id: string) => Promise<boolean>;
}
/**
* Default pagination values
*/
export declare const DEFAULT_RECOMMENDED_CLASS_MODELS_PAGINATION: RecommendedClassModelPagination;
/**
* Transform API response to table item format
* @param model - RecommendedClass model from API response
* @param subjectsMap - Map of subject IDs to subject names
* @returns Formatted model for table display
*/
export declare const transformRecommendedClassModelToTableItem: (model: RecommendedClassModelResponse, subjectsMap?: Map<string, string>) => RecommendedClassModelTableItem;
/**
* Handle errors during model fetch
* Uses the generic error handler factory to reduce code duplication
*/
export declare const handleRecommendedClassModelFetchError: (error: unknown) => string;
/**
* Factory function to create useRecommendedClassModels hook
*
* @param apiClient - API client adapter with get and delete methods
* @returns Hook for managing recommendedClass models
*
* @example
* ```tsx
* const useRecommendedClassModels = createUseRecommendedClassModels(apiClientAdapter);
*
* // In your component
* const { models, loading, error, pagination, fetchModels, deleteModel } = useRecommendedClassModels();
* ```
*/
export declare const createUseRecommendedClassModels: (apiClient: BaseApiClient) => () => UseRecommendedClassModelsReturn;
/**
* Alias for createUseRecommendedClassModels
*/
export declare const createRecommendedClassModelsHook: (apiClient: BaseApiClient) => () => UseRecommendedClassModelsReturn;
//# sourceMappingURL=useRecommendedClassModels.d.ts.map