UNPKG

analytica-frontend-lib

Version:

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

116 lines (114 loc) 3.67 kB
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