analytica-frontend-lib 1.4.40 → 1.4.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"useRecommendedLessonsPage.d.ts","sourceRoot":"","sources":["../../src/hooks/useRecommendedLessonsPage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useRecommendedLessonsPage.d.ts","sourceRoot":"","sources":["../../src/hooks/useRecommendedLessonsPage.ts"],"names":[],"mappings":"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"}
@@ -24,7 +24,318 @@ __export(useRecommendedLessonsPage_exports, {
24
24
  createUseRecommendedLessonsPage: () => createUseRecommendedLessonsPage
25
25
  });
26
26
  module.exports = __toCommonJS(useRecommendedLessonsPage_exports);
27
+ var import_react2 = require("react");
28
+
29
+ // src/utils/categoryDataUtils.ts
30
+ async function fetchStudentsByFilters(apiClient, filters) {
31
+ if ((!filters.schoolIds || filters.schoolIds.length === 0) && (!filters.schoolYearIds || filters.schoolYearIds.length === 0) && (!filters.classIds || filters.classIds.length === 0)) {
32
+ return [];
33
+ }
34
+ const response = await apiClient.post("/students/filters", {
35
+ ...filters.schoolIds && filters.schoolIds.length > 0 && {
36
+ schoolIds: filters.schoolIds
37
+ },
38
+ ...filters.schoolYearIds && filters.schoolYearIds.length > 0 && {
39
+ schoolYearIds: filters.schoolYearIds
40
+ },
41
+ ...filters.classIds && filters.classIds.length > 0 && {
42
+ classIds: filters.classIds
43
+ }
44
+ });
45
+ return response.data.data.students || [];
46
+ }
47
+ async function loadCategoriesData(apiClient, existingCategories) {
48
+ if (existingCategories.length > 0) {
49
+ return existingCategories;
50
+ }
51
+ const [schoolsResponse, schoolYearsResponse, classesResponse] = await Promise.all([
52
+ apiClient.get(
53
+ "/school"
54
+ ),
55
+ apiClient.get("/schoolYear"),
56
+ apiClient.get("/classes")
57
+ ]);
58
+ const schools = schoolsResponse.data.data.schools;
59
+ const schoolYears = schoolYearsResponse.data.data.schoolYears;
60
+ const classes = classesResponse.data.data.classes;
61
+ const transformedCategories = [
62
+ {
63
+ key: "escola",
64
+ label: "Escola",
65
+ itens: schools.map((s) => ({ id: s.id, name: s.companyName })),
66
+ selectedIds: []
67
+ },
68
+ {
69
+ key: "serie",
70
+ label: "S\xE9rie",
71
+ dependsOn: ["escola"],
72
+ filteredBy: [{ key: "escola", internalField: "schoolId" }],
73
+ itens: schoolYears.map((sy) => ({
74
+ id: sy.id,
75
+ name: sy.name,
76
+ schoolId: sy.schoolId
77
+ })),
78
+ selectedIds: []
79
+ },
80
+ {
81
+ key: "turma",
82
+ label: "Turma",
83
+ dependsOn: ["serie"],
84
+ filteredBy: [{ key: "serie", internalField: "schoolYearId" }],
85
+ itens: classes.map((c) => ({
86
+ id: c.id,
87
+ name: c.name,
88
+ schoolYearId: c.schoolYearId
89
+ })),
90
+ selectedIds: []
91
+ },
92
+ {
93
+ key: "students",
94
+ label: "Alunos",
95
+ dependsOn: ["turma"],
96
+ filteredBy: [
97
+ { key: "escola", internalField: "escolaId" },
98
+ { key: "serie", internalField: "serieId" },
99
+ { key: "turma", internalField: "turmaId" }
100
+ ],
101
+ // Students will be loaded dynamically based on selections
102
+ itens: [],
103
+ selectedIds: []
104
+ }
105
+ ];
106
+ return transformedCategories;
107
+ }
108
+
109
+ // src/utils/useDynamicStudentFetching.ts
27
110
  var import_react = require("react");
111
+ function extractSelectedIds(updatedCategories) {
112
+ const escolaCategory = updatedCategories.find((c) => c.key === "escola");
113
+ const serieCategory = updatedCategories.find((c) => c.key === "serie");
114
+ const turmaCategory = updatedCategories.find((c) => c.key === "turma");
115
+ const studentsCategory = updatedCategories.find((c) => c.key === "students");
116
+ return {
117
+ schoolIds: escolaCategory?.selectedIds || [],
118
+ schoolYearIds: serieCategory?.selectedIds || [],
119
+ classIds: turmaCategory?.selectedIds || [],
120
+ studentsCategory
121
+ };
122
+ }
123
+ function detectSelectionChanges(previousSelections, currentSelections) {
124
+ const isInitialState = previousSelections.schoolIds.length === 0 && previousSelections.schoolYearIds.length === 0 && previousSelections.classIds.length === 0;
125
+ const arraysEqual = (a, b) => {
126
+ if (a.length !== b.length) return false;
127
+ return a.every((id) => b.includes(id)) && b.every((id) => a.includes(id));
128
+ };
129
+ const schoolIdsChanged = isInitialState || !arraysEqual(previousSelections.schoolIds, currentSelections.schoolIds);
130
+ const schoolYearIdsChanged = isInitialState || !arraysEqual(
131
+ previousSelections.schoolYearIds,
132
+ currentSelections.schoolYearIds
133
+ );
134
+ const classIdsChanged = isInitialState || !arraysEqual(previousSelections.classIds, currentSelections.classIds);
135
+ const shouldFetchStudents = schoolIdsChanged || schoolYearIdsChanged || classIdsChanged;
136
+ return {
137
+ schoolIdsChanged,
138
+ schoolYearIdsChanged,
139
+ classIdsChanged,
140
+ shouldFetchStudents
141
+ };
142
+ }
143
+ function transformStudentsToItems(students) {
144
+ return students.map((s) => ({
145
+ id: `${s.userInstitutionId}-${s.class.id}`,
146
+ name: s.name,
147
+ classId: String(s.class.id),
148
+ schoolId: String(s.school.id),
149
+ schoolYearId: String(s.schoolYear.id),
150
+ studentId: s.id,
151
+ userInstitutionId: s.userInstitutionId,
152
+ escolaId: String(s.school.id),
153
+ serieId: String(s.schoolYear.id),
154
+ turmaId: String(s.class.id)
155
+ }));
156
+ }
157
+ function updateCategoriesWithStudents(updatedCategories, studentItems) {
158
+ return updatedCategories.map(
159
+ (cat) => cat.key === "students" ? { ...cat, itens: studentItems } : cat
160
+ );
161
+ }
162
+ function clearStudentsFromCategories(updatedCategories) {
163
+ return updatedCategories.map(
164
+ (cat) => cat.key === "students" ? { ...cat, itens: [] } : cat
165
+ );
166
+ }
167
+ function useDynamicStudentFetching(setCategories, options = {}) {
168
+ const {
169
+ apiClient,
170
+ fetchStudentsByFilters: customFetchStudents,
171
+ onError
172
+ } = options;
173
+ const previousSelectionsRef = (0, import_react.useRef)({
174
+ schoolIds: [],
175
+ schoolYearIds: [],
176
+ classIds: []
177
+ });
178
+ const fetchRequestId = (0, import_react.useRef)(0);
179
+ const buildStudentFilters = (0, import_react.useCallback)(
180
+ (selectedSchoolIds, selectedSchoolYearIds, selectedClassIds) => ({
181
+ schoolIds: selectedSchoolIds.length > 0 ? selectedSchoolIds : void 0,
182
+ schoolYearIds: selectedSchoolYearIds.length > 0 ? selectedSchoolYearIds : void 0,
183
+ classIds: selectedClassIds.length > 0 ? selectedClassIds : void 0
184
+ }),
185
+ []
186
+ );
187
+ const fetchWithCustomFunction = (0, import_react.useCallback)(
188
+ async (selectedSchoolIds, selectedSchoolYearIds, selectedClassIds, localRequestId) => {
189
+ if (!customFetchStudents) {
190
+ return null;
191
+ }
192
+ const filters = buildStudentFilters(
193
+ selectedSchoolIds,
194
+ selectedSchoolYearIds,
195
+ selectedClassIds
196
+ );
197
+ const students = await customFetchStudents(filters);
198
+ if (localRequestId !== fetchRequestId.current) {
199
+ return null;
200
+ }
201
+ return students;
202
+ },
203
+ [customFetchStudents, buildStudentFilters]
204
+ );
205
+ const fetchWithApiClient = (0, import_react.useCallback)(
206
+ async (selectedSchoolIds, selectedSchoolYearIds, selectedClassIds, localRequestId) => {
207
+ if (!apiClient) {
208
+ return null;
209
+ }
210
+ const filters = buildStudentFilters(
211
+ selectedSchoolIds,
212
+ selectedSchoolYearIds,
213
+ selectedClassIds
214
+ );
215
+ const students = await fetchStudentsByFilters(apiClient, filters);
216
+ if (localRequestId !== fetchRequestId.current) {
217
+ return null;
218
+ }
219
+ return students;
220
+ },
221
+ [apiClient, buildStudentFilters]
222
+ );
223
+ const performStudentFetch = (0, import_react.useCallback)(
224
+ async (selectedSchoolIds, selectedSchoolYearIds, selectedClassIds, localRequestId) => {
225
+ const students = await fetchWithCustomFunction(
226
+ selectedSchoolIds,
227
+ selectedSchoolYearIds,
228
+ selectedClassIds,
229
+ localRequestId
230
+ );
231
+ if (students !== null) {
232
+ return students;
233
+ }
234
+ return fetchWithApiClient(
235
+ selectedSchoolIds,
236
+ selectedSchoolYearIds,
237
+ selectedClassIds,
238
+ localRequestId
239
+ );
240
+ },
241
+ [fetchWithCustomFunction, fetchWithApiClient]
242
+ );
243
+ const handleSuccessfulFetch = (0, import_react.useCallback)(
244
+ (students, updatedCategories, localRequestId) => {
245
+ if (localRequestId !== fetchRequestId.current) {
246
+ return false;
247
+ }
248
+ const studentItems = transformStudentsToItems(students);
249
+ const finalCategories = updateCategoriesWithStudents(
250
+ updatedCategories,
251
+ studentItems
252
+ );
253
+ setCategories(finalCategories);
254
+ return true;
255
+ },
256
+ [setCategories]
257
+ );
258
+ const handleFetchError = (0, import_react.useCallback)(
259
+ (error, updatedCategories, localRequestId) => {
260
+ console.error("Error fetching students:", error);
261
+ if (onError && error instanceof Error) {
262
+ onError(error);
263
+ }
264
+ if (localRequestId !== fetchRequestId.current) {
265
+ return false;
266
+ }
267
+ const finalCategories = clearStudentsFromCategories(updatedCategories);
268
+ setCategories(finalCategories);
269
+ return true;
270
+ },
271
+ [onError, setCategories]
272
+ );
273
+ const handleCategoriesChange = (0, import_react.useCallback)(
274
+ async (updatedCategories) => {
275
+ if (!customFetchStudents && !apiClient) {
276
+ setCategories(updatedCategories);
277
+ return;
278
+ }
279
+ const {
280
+ schoolIds: selectedSchoolIds,
281
+ schoolYearIds: selectedSchoolYearIds,
282
+ classIds: selectedClassIds,
283
+ studentsCategory
284
+ } = extractSelectedIds(updatedCategories);
285
+ const previousSelections = previousSelectionsRef.current;
286
+ const { shouldFetchStudents } = detectSelectionChanges(
287
+ previousSelections,
288
+ {
289
+ schoolIds: selectedSchoolIds,
290
+ schoolYearIds: selectedSchoolYearIds,
291
+ classIds: selectedClassIds
292
+ }
293
+ );
294
+ previousSelectionsRef.current = {
295
+ schoolIds: [...selectedSchoolIds],
296
+ schoolYearIds: [...selectedSchoolYearIds],
297
+ classIds: [...selectedClassIds]
298
+ };
299
+ if (shouldFetchStudents && selectedClassIds.length > 0 && studentsCategory) {
300
+ fetchRequestId.current += 1;
301
+ const localRequestId = fetchRequestId.current;
302
+ try {
303
+ const students = await performStudentFetch(
304
+ selectedSchoolIds,
305
+ selectedSchoolYearIds,
306
+ selectedClassIds,
307
+ localRequestId
308
+ );
309
+ if (students === null) {
310
+ return;
311
+ }
312
+ handleSuccessfulFetch(students, updatedCategories, localRequestId);
313
+ } catch (error) {
314
+ handleFetchError(error, updatedCategories, localRequestId);
315
+ }
316
+ } else if (shouldFetchStudents && studentsCategory) {
317
+ fetchRequestId.current += 1;
318
+ const finalCategories = clearStudentsFromCategories(updatedCategories);
319
+ setCategories(finalCategories);
320
+ } else {
321
+ setCategories(updatedCategories);
322
+ }
323
+ },
324
+ [
325
+ apiClient,
326
+ customFetchStudents,
327
+ setCategories,
328
+ performStudentFetch,
329
+ handleSuccessfulFetch,
330
+ handleFetchError
331
+ ]
332
+ );
333
+ return {
334
+ handleCategoriesChange
335
+ };
336
+ }
337
+
338
+ // src/hooks/useRecommendedLessonsPage.ts
28
339
  var buildQueryParams = (filters) => {
29
340
  if (!filters) return {};
30
341
  const params = {};
@@ -172,8 +483,8 @@ var createUseRecommendedLessonsPage = (config) => {
172
483
  extraFilterCategories
173
484
  } = config;
174
485
  return () => {
175
- const recommendedClassMapRef = (0, import_react.useRef)(/* @__PURE__ */ new Map());
176
- const [historyFilterData, setHistoryFilterData] = (0, import_react.useState)(
486
+ const recommendedClassMapRef = (0, import_react2.useRef)(/* @__PURE__ */ new Map());
487
+ const [historyFilterData, setHistoryFilterData] = (0, import_react2.useState)(
177
488
  {
178
489
  schools: [],
179
490
  classes: [],
@@ -181,11 +492,11 @@ var createUseRecommendedLessonsPage = (config) => {
181
492
  schoolYears: []
182
493
  }
183
494
  );
184
- const [sendModalOpen, setSendModalOpen] = (0, import_react.useState)(false);
185
- const [selectedModel, setSelectedModel] = (0, import_react.useState)(null);
186
- const [sendModalLoading, setSendModalLoading] = (0, import_react.useState)(false);
187
- const [sendModalCategories, setSendModalCategories] = (0, import_react.useState)([]);
188
- const userFilterData = (0, import_react.useMemo)(() => {
495
+ const [sendModalOpen, setSendModalOpen] = (0, import_react2.useState)(false);
496
+ const [selectedModel, setSelectedModel] = (0, import_react2.useState)(null);
497
+ const [sendModalLoading, setSendModalLoading] = (0, import_react2.useState)(false);
498
+ const [sendModalCategories, setSendModalCategories] = (0, import_react2.useState)([]);
499
+ const userFilterData = (0, import_react2.useMemo)(() => {
189
500
  const baseSchools = getSchoolOptions(userData);
190
501
  const baseClasses = getClassOptions(userData);
191
502
  const baseSubjects = getSubjectOptions(userData);
@@ -200,21 +511,21 @@ var createUseRecommendedLessonsPage = (config) => {
200
511
  )
201
512
  };
202
513
  }, [userData, historyFilterData]);
203
- const subjectsMap = (0, import_react.useMemo)(() => {
514
+ const subjectsMap = (0, import_react2.useMemo)(() => {
204
515
  const map = /* @__PURE__ */ new Map();
205
516
  userFilterData.subjects.forEach((s) => {
206
517
  map.set(s.id, s.name);
207
518
  });
208
519
  return map;
209
520
  }, [userFilterData.subjects]);
210
- const extractFilterDataFromHistory = (0, import_react.useCallback)(
521
+ const extractFilterDataFromHistory = (0, import_react2.useCallback)(
211
522
  (items) => {
212
523
  const maps = extractMapsFromItems(items);
213
524
  setHistoryFilterData((prev) => mergeFilterData(prev, maps));
214
525
  },
215
526
  []
216
527
  );
217
- const fetchRecommendedClassHistory = (0, import_react.useCallback)(
528
+ const fetchRecommendedClassHistory = (0, import_react2.useCallback)(
218
529
  async (filters) => {
219
530
  const params = buildQueryParams(filters);
220
531
  const response = await api.get(
@@ -230,7 +541,7 @@ var createUseRecommendedLessonsPage = (config) => {
230
541
  },
231
542
  [api, endpoints.recommendedClassHistory, extractFilterDataFromHistory]
232
543
  );
233
- const fetchRecommendedClassModels = (0, import_react.useCallback)(
544
+ const fetchRecommendedClassModels = (0, import_react2.useCallback)(
234
545
  async (filters) => {
235
546
  const params = buildQueryParams({
236
547
  ...filters,
@@ -253,13 +564,13 @@ var createUseRecommendedLessonsPage = (config) => {
253
564
  },
254
565
  [api, endpoints.recommendedClassDrafts]
255
566
  );
256
- const deleteRecommendedClassModel = (0, import_react.useCallback)(
567
+ const deleteRecommendedClassModel = (0, import_react2.useCallback)(
257
568
  async (id) => {
258
569
  await api.delete(`${endpoints.recommendedClassDrafts}/${id}`);
259
570
  },
260
571
  [api, endpoints.recommendedClassDrafts]
261
572
  );
262
- const fetchRecommendedClassDrafts = (0, import_react.useCallback)(
573
+ const fetchRecommendedClassDrafts = (0, import_react2.useCallback)(
263
574
  async (filters) => {
264
575
  const params = buildQueryParams({
265
576
  ...filters,
@@ -282,67 +593,85 @@ var createUseRecommendedLessonsPage = (config) => {
282
593
  },
283
594
  [api, endpoints.recommendedClassDrafts]
284
595
  );
285
- const deleteRecommendedClassDraft = (0, import_react.useCallback)(
596
+ const deleteRecommendedClassDraft = (0, import_react2.useCallback)(
286
597
  async (id) => {
287
598
  await api.delete(`${endpoints.recommendedClassDrafts}/${id}`);
288
599
  },
289
600
  [api, endpoints.recommendedClassDrafts]
290
601
  );
291
- const handleCreateLesson = (0, import_react.useCallback)(() => {
602
+ const handleCreateLesson = (0, import_react2.useCallback)(() => {
292
603
  navigate(paths.createLesson);
293
604
  }, []);
294
- const handleCreateModel = (0, import_react.useCallback)(() => {
605
+ const handleCreateModel = (0, import_react2.useCallback)(() => {
295
606
  navigate(paths.createModel);
296
607
  }, []);
297
- const handleRowClick = (0, import_react.useCallback)((row) => {
608
+ const handleRowClick = (0, import_react2.useCallback)((row) => {
298
609
  const originalData = recommendedClassMapRef.current.get(row.id);
299
610
  navigate(`${paths.lessonDetails}/${row.id}`, {
300
611
  state: { recommendedClassData: originalData }
301
612
  });
302
613
  }, []);
303
- const handleEditRecommendedClass = (0, import_react.useCallback)((id) => {
614
+ const handleEditRecommendedClass = (0, import_react2.useCallback)((id) => {
304
615
  navigate(`${paths.editLesson}/${id}/editar`);
305
616
  }, []);
306
- const handleEditModel = (0, import_react.useCallback)(
617
+ const handleEditModel = (0, import_react2.useCallback)(
307
618
  (model) => {
308
619
  navigate(`${paths.editModel}${model.id}`);
309
620
  },
310
621
  []
311
622
  );
312
- const handleSendLesson = (0, import_react.useCallback)(
313
- (model) => {
623
+ const handleSendLesson = (0, import_react2.useCallback)(
624
+ async (model) => {
314
625
  setSelectedModel(model);
315
- const classes = getClassOptions(userData);
316
- const categories = [];
317
- if (classes.length > 0) {
318
- categories.push({
319
- key: "students",
320
- label: "Turmas",
321
- selectedIds: [],
322
- itens: classes.map((cls) => ({
323
- id: cls.id,
324
- name: cls.name,
325
- studentId: cls.id,
326
- userInstitutionId: cls.id
327
- }))
328
- });
626
+ try {
627
+ const categories = await loadCategoriesData(
628
+ api,
629
+ []
630
+ );
631
+ setSendModalCategories(categories);
632
+ } catch (error) {
633
+ console.error("Erro ao carregar destinat\xE1rios:", error);
634
+ setSendModalCategories([]);
329
635
  }
330
- setSendModalCategories(categories);
331
636
  setSendModalOpen(true);
332
637
  },
333
- [userData]
638
+ [api]
334
639
  );
335
- const handleSendLessonSubmit = (0, import_react.useCallback)(
640
+ const handleSendLessonSubmit = (0, import_react2.useCallback)(
336
641
  async (formData) => {
337
642
  if (!selectedModel) return;
338
643
  setSendModalLoading(true);
339
644
  try {
645
+ const draftResponse = await api.get(`${endpoints.recommendedClassDrafts}/${selectedModel.id}`);
646
+ const draft = draftResponse.data.data;
647
+ const lessonIds = (draft.lessons ?? []).map((lesson, index) => ({
648
+ lessonId: lesson.lessonId,
649
+ sequence: index + 1
650
+ }));
651
+ const activityDraftIds = (draft.activityDrafts ?? []).map(
652
+ (activity, index) => ({
653
+ activityDraftId: activity.activityDraftId,
654
+ sequence: index + 1
655
+ })
656
+ );
657
+ const hasAttachedActivities = activityDraftIds.length > 0;
340
658
  await api.post(endpoints.submitRecommendedClass, {
341
- draftId: selectedModel.id,
342
- students: formData.students,
343
- startDate: `${formData.startDate}T${formData.startTime}:00`,
344
- finalDate: `${formData.finalDate}T${formData.finalTime}:00`,
345
- canRetry: formData.canRetry ?? false
659
+ title: formData.title || selectedModel.title,
660
+ startDate: (/* @__PURE__ */ new Date(
661
+ `${formData.startDate}T${formData.startTime}`
662
+ )).toISOString(),
663
+ finalDate: (/* @__PURE__ */ new Date(
664
+ `${formData.finalDate}T${formData.finalTime}`
665
+ )).toISOString(),
666
+ lessonIds,
667
+ ...hasAttachedActivities && { activityDraftIds },
668
+ targetStudentIds: formData.students.map((s) => s.userInstitutionId),
669
+ ...formData.notification && {
670
+ notification: formData.notification
671
+ },
672
+ ...hasAttachedActivities && {
673
+ canRetry: formData.canRetry ?? false
674
+ }
346
675
  });
347
676
  setSendModalOpen(false);
348
677
  setSelectedModel(null);
@@ -350,17 +679,20 @@ var createUseRecommendedLessonsPage = (config) => {
350
679
  setSendModalLoading(false);
351
680
  }
352
681
  },
353
- [api, endpoints.submitRecommendedClass, selectedModel]
682
+ [
683
+ api,
684
+ endpoints.recommendedClassDrafts,
685
+ endpoints.submitRecommendedClass,
686
+ selectedModel
687
+ ]
354
688
  );
355
- const handleSendModalClose = (0, import_react.useCallback)(() => {
689
+ const handleSendModalClose = (0, import_react2.useCallback)(() => {
356
690
  setSendModalOpen(false);
357
691
  setSelectedModel(null);
358
692
  }, []);
359
- const handleCategoriesChange = (0, import_react.useCallback)(
360
- (categories) => {
361
- setSendModalCategories(categories);
362
- },
363
- []
693
+ const { handleCategoriesChange } = useDynamicStudentFetching(
694
+ setSendModalCategories,
695
+ { apiClient: api }
364
696
  );
365
697
  return {
366
698
  historyProps: {