analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
116 lines (114 loc) • 3.67 kB
JavaScript
import {
loadCategoriesData,
useDynamicStudentFetching
} from "./chunk-5WLR5TLU.mjs";
// src/hooks/useSendActivity.ts
import { useState, useCallback, useMemo, useRef } from "react";
import dayjs from "dayjs";
function toISODateTime(date, time) {
return dayjs(`${date}T${time}`).toISOString();
}
function useSendActivity(config) {
const { api, onSuccess, onError } = config;
const [isOpen, setIsOpen] = useState(false);
const [selectedModel, setSelectedModel] = useState(
null
);
const [categories, setCategories] = useState([]);
const [isLoading, setIsLoading] = useState(false);
const [isCategoriesLoading, setIsCategoriesLoading] = useState(false);
const categoriesLoadedRef = useRef(false);
const initialData = useMemo(() => {
if (!selectedModel) return void 0;
return {
title: selectedModel.title
};
}, [selectedModel]);
const loadCategories = useCallback(async () => {
if (categoriesLoadedRef.current) return;
setIsCategoriesLoading(true);
try {
const categoryConfig = await loadCategoriesData(api, []);
setCategories(categoryConfig);
categoriesLoadedRef.current = true;
} catch (error) {
console.error("Error loading categories:", error);
onError?.("Erro ao carregar destinat\xE1rios");
} finally {
setIsCategoriesLoading(false);
}
}, [api, onError]);
const openModal = useCallback(
(model) => {
setSelectedModel(model);
setIsOpen(true);
void loadCategories();
},
[loadCategories]
);
const closeModal = useCallback(() => {
setIsOpen(false);
setSelectedModel(null);
}, []);
const { handleCategoriesChange: onCategoriesChange } = useDynamicStudentFetching(setCategories, { apiClient: api });
const handleSubmit = useCallback(
async (data) => {
if (!selectedModel) return;
setIsLoading(true);
try {
let questionIds = null;
try {
const response = await api.get(`/activity-drafts/${selectedModel.id}`);
questionIds = response.data.data.selectedQuestions?.map((q) => q.id) || null;
} catch {
questionIds = null;
}
if (!questionIds || questionIds.length === 0) {
throw new Error("N\xE3o foi poss\xEDvel obter quest\xF5es do modelo");
}
const createResponse = await api.post(
"/activities",
{
title: data.title,
subjectId: selectedModel.subjectId,
questionIds,
subtype: data.subtype,
isDigital: data.subtype === "PROVA" /* PROVA */ ? data.mode !== "PRESENCIAL" /* PRESENCIAL */ : true,
notification: data.notification,
startDate: toISODateTime(data.startDate, data.startTime),
finalDate: toISODateTime(data.finalDate, data.finalTime),
canRetry: data.canRetry
}
);
await api.post("/activities/send-to-students", {
activityId: createResponse.data.data.id,
students: data.students
});
onSuccess?.(`Atividade enviada para ${data.students.length} aluno(s)`);
closeModal();
} catch (error) {
console.error("Error sending activity:", error);
onError?.("Erro ao enviar atividade");
} finally {
setIsLoading(false);
}
},
[selectedModel, api, onSuccess, onError, closeModal]
);
return {
isOpen,
openModal,
closeModal,
selectedModel,
initialData,
categories,
onCategoriesChange,
isLoading,
isCategoriesLoading,
handleSubmit
};
}
export {
useSendActivity
};
//# sourceMappingURL=chunk-PBF56LM5.mjs.map