UNPKG

analytica-frontend-lib

Version:

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

428 lines (421 loc) 17 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _chunkZXOYMRH5js = require('./chunk-ZXOYMRH5.js'); // src/hooks/useRecommendedLessonsPage.ts var _react = require('react'); var buildQueryParams = (filters) => { if (!filters) return {}; const params = {}; for (const key in filters) { const value = filters[key]; if (value !== void 0 && value !== null) { if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { params[key] = value; } } } return params; }; var getSchoolOptions = (userData) => { if (!_optionalChain([userData, 'optionalAccess', _ => _.userInstitutions])) return []; const schoolMap = /* @__PURE__ */ new Map(); userData.userInstitutions.forEach((inst) => { if (_optionalChain([inst, 'access', _2 => _2.school, 'optionalAccess', _3 => _3.id]) && _optionalChain([inst, 'access', _4 => _4.school, 'optionalAccess', _5 => _5.name])) { schoolMap.set(inst.school.id, inst.school.name); } }); return Array.from(schoolMap.entries()).map(([id, name]) => ({ id, name })); }; var getClassOptions = (userData) => { if (!_optionalChain([userData, 'optionalAccess', _6 => _6.userInstitutions])) return []; const classMap = /* @__PURE__ */ new Map(); userData.userInstitutions.forEach((inst) => { if (_optionalChain([inst, 'access', _7 => _7.class, 'optionalAccess', _8 => _8.id]) && _optionalChain([inst, 'access', _9 => _9.class, 'optionalAccess', _10 => _10.name])) { classMap.set(inst.class.id, inst.class.name); } }); return Array.from(classMap.entries()).map(([id, name]) => ({ id, name })); }; var getSubjectOptions = (userData) => { if (!_optionalChain([userData, 'optionalAccess', _11 => _11.subTeacherTopicClasses])) return []; const subjectMap = /* @__PURE__ */ new Map(); userData.subTeacherTopicClasses.forEach((stc) => { if (_optionalChain([stc, 'access', _12 => _12.subject, 'optionalAccess', _13 => _13.id]) && _optionalChain([stc, 'access', _14 => _14.subject, 'optionalAccess', _15 => _15.name])) { subjectMap.set(stc.subject.id, stc.subject.name); } }); return Array.from(subjectMap.entries()).map(([id, name]) => ({ id, name })); }; var getSchoolYearOptions = (userData) => { if (!_optionalChain([userData, 'optionalAccess', _16 => _16.userInstitutions])) return []; const yearMap = /* @__PURE__ */ new Map(); userData.userInstitutions.forEach((inst) => { if (_optionalChain([inst, 'access', _17 => _17.schoolYear, 'optionalAccess', _18 => _18.id]) && _optionalChain([inst, 'access', _19 => _19.schoolYear, 'optionalAccess', _20 => _20.name])) { yearMap.set(inst.schoolYear.id, inst.schoolYear.name); } }); return Array.from(yearMap.entries()).map(([id, name]) => ({ id, name })); }; var toFilterArray = (m) => Array.from(m.entries()).map(([id, name]) => ({ id, name })); var collectBreakdownData = (b, schoolMap, classMap, schoolYearMap) => { if (b.schoolId && b.schoolName) { schoolMap.set(b.schoolId, b.schoolName); } if (b.classId && b.className) { classMap.set(b.classId, b.className); } if (b.schoolYearId && b.schoolYearName) { schoolYearMap.set(b.schoolYearId, b.schoolYearName); } }; var extractMapsFromItems = (items) => { const schoolMap = /* @__PURE__ */ new Map(); const classMap = /* @__PURE__ */ new Map(); const subjectMap = /* @__PURE__ */ new Map(); const schoolYearMap = /* @__PURE__ */ new Map(); for (const item of items) { if (_optionalChain([item, 'access', _21 => _21.subject, 'optionalAccess', _22 => _22.id]) && _optionalChain([item, 'access', _23 => _23.subject, 'optionalAccess', _24 => _24.name])) { subjectMap.set(item.subject.id, item.subject.name); } for (const b of item.breakdown) { collectBreakdownData(b, schoolMap, classMap, schoolYearMap); } } return { schoolMap, classMap, subjectMap, schoolYearMap }; }; var extractSubjectsFromDraftItems = (drafts) => { const subjectMap = /* @__PURE__ */ new Map(); for (const draft of drafts) { if (_optionalChain([draft, 'access', _25 => _25.subject, 'optionalAccess', _26 => _26.id]) && _optionalChain([draft, 'access', _27 => _27.subject, 'optionalAccess', _28 => _28.name])) { subjectMap.set(draft.subject.id, draft.subject.name); } } return Array.from(subjectMap.entries()).map(([id, name]) => ({ id, name })); }; var hasMapChanged = (merged, prev) => { if (merged.size !== prev.length) return true; return prev.some((item) => merged.get(item.id) !== item.name); }; var mergeFilterData = (prev, maps) => { const mergedSchools = new Map([ ...prev.schools.map((s) => [s.id, s.name]), ...maps.schoolMap ]); const mergedClasses = new Map([ ...prev.classes.map((c) => [c.id, c.name]), ...maps.classMap ]); const mergedSubjects = new Map([ ...prev.subjects.map((s) => [s.id, s.name]), ...maps.subjectMap ]); const mergedSchoolYears = new Map([ ...prev.schoolYears.map((y) => [y.id, y.name]), ...maps.schoolYearMap ]); if (!hasMapChanged(mergedSchools, prev.schools) && !hasMapChanged(mergedClasses, prev.classes) && !hasMapChanged(mergedSubjects, prev.subjects) && !hasMapChanged(mergedSchoolYears, prev.schoolYears)) { return prev; } return { schools: toFilterArray(mergedSchools), classes: toFilterArray(mergedClasses), subjects: toFilterArray(mergedSubjects), schoolYears: toFilterArray(mergedSchoolYears) }; }; var mergeFilterOptions = (base, extra) => { if (extra.length === 0) return base; const baseIds = new Set(base.map((item) => item.id)); const hasNew = extra.some((item) => !baseIds.has(item.id)); if (!hasNew) return base; const map = new Map(base.map((item) => [item.id, item.name])); extra.forEach((item) => { if (!map.has(item.id)) { map.set(item.id, item.name); } }); return Array.from(map.entries()).map(([id, name]) => ({ id, name })); }; var createUseRecommendedLessonsPage = (config) => { const { api, navigate, userData, paths, endpoints, texts, emptyStateImage, noSearchImage, mapSubjectNameToEnum, extraFilterCategories } = config; return () => { const recommendedClassMapRef = _react.useRef.call(void 0, /* @__PURE__ */ new Map()); const [historyFilterData, setHistoryFilterData] = _react.useState.call(void 0, { schools: [], classes: [], subjects: [], schoolYears: [] } ); const [sendModalOpen, setSendModalOpen] = _react.useState.call(void 0, false); const [selectedModel, setSelectedModel] = _react.useState.call(void 0, null); const [sendModalLoading, setSendModalLoading] = _react.useState.call(void 0, false); const [sendModalCategories, setSendModalCategories] = _react.useState.call(void 0, []); const userFilterData = _react.useMemo.call(void 0, () => { const baseSchools = getSchoolOptions(userData); const baseClasses = getClassOptions(userData); const baseSubjects = getSubjectOptions(userData); const baseSchoolYears = getSchoolYearOptions(userData); return { schools: mergeFilterOptions(baseSchools, historyFilterData.schools), classes: mergeFilterOptions(baseClasses, historyFilterData.classes), subjects: mergeFilterOptions(baseSubjects, historyFilterData.subjects), schoolYears: mergeFilterOptions( baseSchoolYears, historyFilterData.schoolYears ) }; }, [userData, historyFilterData]); const subjectsMap = _react.useMemo.call(void 0, () => { const map = /* @__PURE__ */ new Map(); userFilterData.subjects.forEach((s) => { map.set(s.id, s.name); }); return map; }, [userFilterData.subjects]); const extractFilterDataFromHistory = _react.useCallback.call(void 0, (items) => { const maps = extractMapsFromItems(items); setHistoryFilterData((prev) => mergeFilterData(prev, maps)); }, [] ); const fetchRecommendedClassHistory = _react.useCallback.call(void 0, async (filters) => { const params = buildQueryParams(filters); const response = await api.get( endpoints.recommendedClassHistory, { params } ); const items = response.data.data.recommendedClass; items.forEach((item) => { recommendedClassMapRef.current.set(item.recommendedClass.id, item); }); extractFilterDataFromHistory(items); return response.data; }, [api, endpoints.recommendedClassHistory, extractFilterDataFromHistory] ); const fetchRecommendedClassModels = _react.useCallback.call(void 0, async (filters) => { const params = buildQueryParams({ ...filters, type: "MODELO" /* MODELO */ }); const response = await api.get( endpoints.recommendedClassDrafts, { params } ); const subjects = extractSubjectsFromDraftItems( response.data.data.drafts ); if (subjects.length > 0) { setHistoryFilterData((prev) => ({ ...prev, subjects: mergeFilterOptions(prev.subjects, subjects) })); } return response.data; }, [api, endpoints.recommendedClassDrafts] ); const deleteRecommendedClassModel = _react.useCallback.call(void 0, async (id) => { await api.delete(`${endpoints.recommendedClassDrafts}/${id}`); }, [api, endpoints.recommendedClassDrafts] ); const fetchRecommendedClassDrafts = _react.useCallback.call(void 0, async (filters) => { const params = buildQueryParams({ ...filters, type: "RASCUNHO" /* RASCUNHO */ }); const response = await api.get( endpoints.recommendedClassDrafts, { params } ); const subjects = extractSubjectsFromDraftItems( response.data.data.drafts ); if (subjects.length > 0) { setHistoryFilterData((prev) => ({ ...prev, subjects: mergeFilterOptions(prev.subjects, subjects) })); } return response.data; }, [api, endpoints.recommendedClassDrafts] ); const deleteRecommendedClassDraft = _react.useCallback.call(void 0, async (id) => { await api.delete(`${endpoints.recommendedClassDrafts}/${id}`); }, [api, endpoints.recommendedClassDrafts] ); const handleCreateLesson = _react.useCallback.call(void 0, () => { navigate(paths.createLesson); }, []); const handleCreateModel = _react.useCallback.call(void 0, () => { navigate(paths.createModel); }, []); const handleRowClick = _react.useCallback.call(void 0, (row) => { const originalData = recommendedClassMapRef.current.get(row.id); navigate(`${paths.lessonDetails}/${row.id}`, { state: { recommendedClassData: originalData } }); }, []); const deleteRecommendedClass = _react.useCallback.call(void 0, async (id) => { await api.delete(`${endpoints.submitRecommendedClass}/${id}`); }, [api, endpoints.submitRecommendedClass] ); const updateRecommendedClass = _react.useCallback.call(void 0, async (id, data) => { await api.patch(`${endpoints.submitRecommendedClass}/${id}`, data); }, [api, endpoints.submitRecommendedClass] ); const fetchRecommendedClassById = _react.useCallback.call(void 0, async (id) => { const response = await api.get( `${endpoints.submitRecommendedClass}/${id}` ); return response.data.data; }, [api, endpoints.submitRecommendedClass] ); const handleEditModel = _react.useCallback.call(void 0, (model) => { navigate(`${paths.editModel}${model.id}`); }, [] ); const handleSendLesson = _react.useCallback.call(void 0, async (model) => { setSelectedModel(model); try { const categories = await _chunkZXOYMRH5js.loadCategoriesData.call(void 0, api, []); setSendModalCategories(categories); } catch (error) { console.error("Erro ao carregar destinat\xE1rios:", error); setSendModalCategories([]); } setSendModalOpen(true); }, [api] ); const handleSendLessonSubmit = _react.useCallback.call(void 0, async (formData) => { if (!selectedModel) return; setSendModalLoading(true); try { const draftResponse = await api.get(`${endpoints.recommendedClassDrafts}/${selectedModel.id}`); const draft = draftResponse.data.data; const lessonIds = (_nullishCoalesce(draft.lessons, () => ( []))).map((lesson, index) => ({ lessonId: lesson.lessonId, sequence: index + 1 })); const activityDraftIds = (_nullishCoalesce(draft.activityDrafts, () => ( []))).map( (activity, index) => ({ activityDraftId: activity.activityDraftId, sequence: index + 1 }) ); const hasAttachedActivities = activityDraftIds.length > 0; await api.post(endpoints.submitRecommendedClass, { title: formData.title || selectedModel.title, startDate: (/* @__PURE__ */ new Date( `${formData.startDate}T${formData.startTime}` )).toISOString(), finalDate: (/* @__PURE__ */ new Date( `${formData.finalDate}T${formData.finalTime}` )).toISOString(), lessonIds, ...hasAttachedActivities && { activityDraftIds }, targetStudentIds: formData.students.map((s) => s.userInstitutionId), ...formData.notification && { notification: formData.notification }, ...hasAttachedActivities && { canRetry: _nullishCoalesce(formData.canRetry, () => ( false)) } }); setSendModalOpen(false); setSelectedModel(null); } finally { setSendModalLoading(false); } }, [ api, endpoints.recommendedClassDrafts, endpoints.submitRecommendedClass, selectedModel ] ); const handleSendModalClose = _react.useCallback.call(void 0, () => { setSendModalOpen(false); setSelectedModel(null); }, []); const { handleCategoriesChange } = _chunkZXOYMRH5js.useDynamicStudentFetching.call(void 0, setSendModalCategories, { apiClient: api } ); return { historyProps: { fetchRecommendedClassHistory, fetchRecommendedClassModels, deleteRecommendedClassModel, onCreateLesson: handleCreateLesson, onCreateModel: handleCreateModel, onRowClick: handleRowClick, deleteRecommendedClass, updateRecommendedClass, fetchRecommendedClassById, onEditModel: handleEditModel, onSendLesson: handleSendLesson, fetchRecommendedClassDrafts, deleteRecommendedClassDraft, onSendDraft: handleSendLesson, onEditDraft: handleEditModel, emptyStateImage, noSearchImage, mapSubjectNameToEnum, userFilterData, subjectsMap, title: texts.title, createButtonText: texts.createButtonText, searchPlaceholder: texts.searchPlaceholder, extraFilterCategories }, modalProps: { isOpen: sendModalOpen, onClose: handleSendModalClose, onSubmit: handleSendLessonSubmit, categories: sendModalCategories, onCategoriesChange: handleCategoriesChange, isLoading: sendModalLoading, modalTitle: _optionalChain([selectedModel, 'optionalAccess', _29 => _29.title]), hasAttachedActivities: (_nullishCoalesce(_optionalChain([selectedModel, 'optionalAccess', _30 => _30.activityDraftsCount]), () => ( 0))) > 0 }, navigate }; }; }; var createRecommendedLessonsPageHook = createUseRecommendedLessonsPage; exports.createUseRecommendedLessonsPage = createUseRecommendedLessonsPage; exports.createRecommendedLessonsPageHook = createRecommendedLessonsPageHook; //# sourceMappingURL=chunk-VMWF6DND.js.map