UNPKG

analytica-frontend-lib

Version:

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

146 lines (143 loc) 4.52 kB
// src/hooks/useActivityModels.ts import { useState, useCallback } from "react"; import { z as z2 } from "zod"; import dayjs from "dayjs"; // src/types/activitiesHistory.ts var ActivityDraftType = /* @__PURE__ */ ((ActivityDraftType2) => { ActivityDraftType2["MODELO"] = "MODELO"; ActivityDraftType2["RASCUNHO"] = "RASCUNHO"; return ActivityDraftType2; })(ActivityDraftType || {}); var ACTIVITY_FILTER_STATUS_OPTIONS = [ { id: "A_VENCER" /* A_VENCER */, name: "A Vencer" }, { id: "VENCIDA" /* VENCIDA */, name: "Vencida" }, { id: "CONCLUIDA" /* CONCLUIDA */, name: "Conclu\xEDda" } ]; // src/utils/hookErrorHandler.ts import { z } from "zod"; var createFetchErrorHandler = (validationErrorMessage, genericErrorMessage) => (error) => { if (error instanceof z.ZodError) { console.error(validationErrorMessage, error); return validationErrorMessage; } console.error(genericErrorMessage, error); return genericErrorMessage; }; // src/hooks/useActivityModels.ts var activityDraftFiltersSchema = z2.object({ questionTypes: z2.array(z2.string()).optional(), questionBanks: z2.array(z2.string()).optional(), subjects: z2.array(z2.string()).optional(), topics: z2.array(z2.string()).optional(), subtopics: z2.array(z2.string()).optional(), contents: z2.array(z2.string()).optional() }).nullable(); var activityModelResponseSchema = z2.object({ id: z2.string().uuid(), type: z2.nativeEnum(ActivityDraftType), title: z2.string().nullable(), creatorUserInstitutionId: z2.string().uuid().nullable(), subjectId: z2.string().uuid().nullable(), filters: activityDraftFiltersSchema, createdAt: z2.string(), updatedAt: z2.string() }); var activityModelsApiResponseSchema = z2.object({ message: z2.string(), data: z2.object({ activityDrafts: z2.array(activityModelResponseSchema), total: z2.number() }) }); var DEFAULT_MODELS_PAGINATION = { total: 0, page: 1, limit: 10, totalPages: 0 }; var transformModelToTableItem = (model, subjectsMap) => { const subjectName = model.subjectId ? subjectsMap?.get(model.subjectId) || "" : ""; return { id: model.id, title: model.title || "Sem t\xEDtulo", savedAt: dayjs(model.createdAt).format("DD/MM/YYYY"), subject: subjectName, subjectId: model.subjectId }; }; var handleModelFetchError = createFetchErrorHandler( "Erro ao validar dados de modelos de atividades", "Erro ao carregar modelos de atividades" ); var createUseActivityModels = (fetchActivityModels, deleteActivityModel) => { return () => { const [state, setState] = useState({ models: [], loading: false, error: null, pagination: DEFAULT_MODELS_PAGINATION }); const fetchModels = useCallback( async (filters, subjectsMap) => { setState((prev) => ({ ...prev, loading: true, error: null })); try { const responseData = await fetchActivityModels(filters); const validatedData = activityModelsApiResponseSchema.parse(responseData); const tableItems = validatedData.data.activityDrafts.map( (model) => transformModelToTableItem(model, subjectsMap) ); const limit = filters?.limit || 10; const page = filters?.page || 1; const total = validatedData.data.total; const totalPages = Math.ceil(total / limit); setState({ models: tableItems, loading: false, error: null, pagination: { total, page, limit, totalPages } }); } catch (error) { const errorMessage = handleModelFetchError(error); setState((prev) => ({ ...prev, loading: false, error: errorMessage })); } }, [fetchActivityModels] ); const deleteModel = useCallback( async (id) => { try { await deleteActivityModel(id); return true; } catch (error) { console.error("Erro ao deletar modelo:", error); return false; } }, [deleteActivityModel] ); return { ...state, fetchModels, deleteModel }; }; }; var createActivityModelsHook = createUseActivityModels; export { DEFAULT_MODELS_PAGINATION, activityModelsApiResponseSchema, createActivityModelsHook, createUseActivityModels, handleModelFetchError, transformModelToTableItem }; //# sourceMappingURL=index.mjs.map