analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
220 lines • 8.53 kB
TypeScript
import { z } from 'zod';
import { ActivityDraftType } from '../types/activitiesHistory';
import type { ActivityModelResponse, ActivityModelTableItem, ActivityModelsApiResponse, ActivityModelFilters, ActivityPagination } from '../types/activitiesHistory';
/**
* Zod schema for activity models API response validation
*/
export declare const activityModelsApiResponseSchema: z.ZodObject<{
message: z.ZodString;
data: z.ZodObject<{
activityDrafts: z.ZodArray<z.ZodObject<{
id: z.ZodString;
type: z.ZodNativeEnum<typeof ActivityDraftType>;
title: z.ZodNullable<z.ZodString>;
creatorUserInstitutionId: z.ZodNullable<z.ZodString>;
subjectId: z.ZodNullable<z.ZodString>;
filters: z.ZodNullable<z.ZodObject<{
questionTypes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
questionBanks: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
subjects: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
topics: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
subtopics: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
contents: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
}, "strip", z.ZodTypeAny, {
contents?: string[] | undefined;
questionTypes?: string[] | undefined;
topics?: string[] | undefined;
subtopics?: string[] | undefined;
subjects?: string[] | undefined;
questionBanks?: string[] | undefined;
}, {
contents?: string[] | undefined;
questionTypes?: string[] | undefined;
topics?: string[] | undefined;
subtopics?: string[] | undefined;
subjects?: string[] | undefined;
questionBanks?: string[] | undefined;
}>>;
createdAt: z.ZodString;
updatedAt: z.ZodString;
}, "strip", z.ZodTypeAny, {
id: string;
type: ActivityDraftType;
title: string | null;
createdAt: string;
filters: {
contents?: string[] | undefined;
questionTypes?: string[] | undefined;
topics?: string[] | undefined;
subtopics?: string[] | undefined;
subjects?: string[] | undefined;
questionBanks?: string[] | undefined;
} | null;
subjectId: string | null;
updatedAt: string;
creatorUserInstitutionId: string | null;
}, {
id: string;
type: ActivityDraftType;
title: string | null;
createdAt: string;
filters: {
contents?: string[] | undefined;
questionTypes?: string[] | undefined;
topics?: string[] | undefined;
subtopics?: string[] | undefined;
subjects?: string[] | undefined;
questionBanks?: string[] | undefined;
} | null;
subjectId: string | null;
updatedAt: string;
creatorUserInstitutionId: string | null;
}>, "many">;
total: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
total: number;
activityDrafts: {
id: string;
type: ActivityDraftType;
title: string | null;
createdAt: string;
filters: {
contents?: string[] | undefined;
questionTypes?: string[] | undefined;
topics?: string[] | undefined;
subtopics?: string[] | undefined;
subjects?: string[] | undefined;
questionBanks?: string[] | undefined;
} | null;
subjectId: string | null;
updatedAt: string;
creatorUserInstitutionId: string | null;
}[];
}, {
total: number;
activityDrafts: {
id: string;
type: ActivityDraftType;
title: string | null;
createdAt: string;
filters: {
contents?: string[] | undefined;
questionTypes?: string[] | undefined;
topics?: string[] | undefined;
subtopics?: string[] | undefined;
subjects?: string[] | undefined;
questionBanks?: string[] | undefined;
} | null;
subjectId: string | null;
updatedAt: string;
creatorUserInstitutionId: string | null;
}[];
}>;
}, "strip", z.ZodTypeAny, {
data: {
total: number;
activityDrafts: {
id: string;
type: ActivityDraftType;
title: string | null;
createdAt: string;
filters: {
contents?: string[] | undefined;
questionTypes?: string[] | undefined;
topics?: string[] | undefined;
subtopics?: string[] | undefined;
subjects?: string[] | undefined;
questionBanks?: string[] | undefined;
} | null;
subjectId: string | null;
updatedAt: string;
creatorUserInstitutionId: string | null;
}[];
};
message: string;
}, {
data: {
total: number;
activityDrafts: {
id: string;
type: ActivityDraftType;
title: string | null;
createdAt: string;
filters: {
contents?: string[] | undefined;
questionTypes?: string[] | undefined;
topics?: string[] | undefined;
subtopics?: string[] | undefined;
subjects?: string[] | undefined;
questionBanks?: string[] | undefined;
} | null;
subjectId: string | null;
updatedAt: string;
creatorUserInstitutionId: string | null;
}[];
};
message: string;
}>;
/**
* Hook state interface
*/
export interface UseActivityModelsState {
models: ActivityModelTableItem[];
loading: boolean;
error: string | null;
pagination: ActivityPagination;
}
/**
* Hook return type
*/
export interface UseActivityModelsReturn extends UseActivityModelsState {
fetchModels: (filters?: ActivityModelFilters, subjectsMap?: Map<string, string>) => Promise<void>;
deleteModel: (id: string) => Promise<boolean>;
}
/**
* Default pagination values
*/
export declare const DEFAULT_MODELS_PAGINATION: ActivityPagination;
/**
* Transform API response to table item format
* @param model - Activity model from API response
* @param subjectsMap - Map of subject IDs to subject names
* @returns Formatted model for table display
*/
export declare const transformModelToTableItem: (model: ActivityModelResponse, subjectsMap?: Map<string, string>) => ActivityModelTableItem;
/**
* Handle errors during model fetch
* Uses the generic error handler factory to reduce code duplication
*/
export declare const handleModelFetchError: (error: unknown) => string;
/**
* Factory function to create useActivityModels hook
*
* @param fetchActivityModels - Function to fetch models from API
* @param deleteActivityModel - Function to delete a model
* @returns Hook for managing activity models
*
* @example
* ```tsx
* // In your app setup
* const fetchActivityModels = async (filters) => {
* const response = await api.get('/activity-drafts', { params: { ...filters, type: 'MODELO' } });
* return response.data;
* };
*
* const deleteActivityModel = async (id) => {
* await api.delete(`/activity-drafts/${id}`);
* };
*
* const useActivityModels = createUseActivityModels(fetchActivityModels, deleteActivityModel);
*
* // In your component
* const { models, loading, error, pagination, fetchModels, deleteModel } = useActivityModels();
* ```
*/
export declare const createUseActivityModels: (fetchActivityModels: (filters?: ActivityModelFilters) => Promise<ActivityModelsApiResponse>, deleteActivityModel: (id: string) => Promise<void>) => () => UseActivityModelsReturn;
/**
* Alias for createUseActivityModels
*/
export declare const createActivityModelsHook: (fetchActivityModels: (filters?: ActivityModelFilters) => Promise<ActivityModelsApiResponse>, deleteActivityModel: (id: string) => Promise<void>) => () => UseActivityModelsReturn;
//# sourceMappingURL=useActivityModels.d.ts.map