analytica-frontend-lib 1.2.51 → 1.2.52

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.
Files changed (91) hide show
  1. package/dist/ActivitiesHistory/index.css +19387 -0
  2. package/dist/ActivitiesHistory/index.css.map +1 -0
  3. package/dist/ActivitiesHistory/index.d.ts +2 -0
  4. package/dist/ActivitiesHistory/index.d.ts.map +1 -0
  5. package/dist/ActivitiesHistory/index.js +7381 -0
  6. package/dist/ActivitiesHistory/index.js.map +1 -0
  7. package/dist/ActivitiesHistory/index.mjs +7424 -0
  8. package/dist/ActivitiesHistory/index.mjs.map +1 -0
  9. package/dist/ActivityCardQuestionBanks/index.css +13 -0
  10. package/dist/ActivityCardQuestionBanks/index.css.map +1 -1
  11. package/dist/ActivityCardQuestionPreview/index.css +13 -0
  12. package/dist/ActivityCardQuestionPreview/index.css.map +1 -1
  13. package/dist/ActivityDetails/index.css +13 -0
  14. package/dist/ActivityDetails/index.css.map +1 -1
  15. package/dist/ActivityFilters/index.css +13 -0
  16. package/dist/ActivityFilters/index.css.map +1 -1
  17. package/dist/ActivityPreview/index.css +13 -0
  18. package/dist/ActivityPreview/index.css.map +1 -1
  19. package/dist/AlertManager/index.css +13 -0
  20. package/dist/AlertManager/index.css.map +1 -1
  21. package/dist/RecommendedLessonsHistory/index.css +13 -0
  22. package/dist/RecommendedLessonsHistory/index.css.map +1 -1
  23. package/dist/RecommendedLessonsHistory/index.js +10 -2
  24. package/dist/RecommendedLessonsHistory/index.js.map +1 -1
  25. package/dist/RecommendedLessonsHistory/index.mjs +10 -2
  26. package/dist/RecommendedLessonsHistory/index.mjs.map +1 -1
  27. package/dist/SendActivityModal/SendActivityModal.css +13 -0
  28. package/dist/SendActivityModal/SendActivityModal.css.map +1 -1
  29. package/dist/SendActivityModal/index.css +13 -0
  30. package/dist/SendActivityModal/index.css.map +1 -1
  31. package/dist/TableProvider/index.css +13 -0
  32. package/dist/TableProvider/index.css.map +1 -1
  33. package/dist/hooks/useActivitiesHistory/index.d.ts +210 -0
  34. package/dist/hooks/useActivitiesHistory/index.d.ts.map +1 -0
  35. package/dist/hooks/useActivitiesHistory/index.js +181 -0
  36. package/dist/hooks/useActivitiesHistory/index.js.map +1 -0
  37. package/dist/hooks/useActivitiesHistory/index.mjs +141 -0
  38. package/dist/hooks/useActivitiesHistory/index.mjs.map +1 -0
  39. package/dist/hooks/useActivitiesHistory.d.ts +210 -0
  40. package/dist/hooks/useActivitiesHistory.d.ts.map +1 -0
  41. package/dist/hooks/useActivityModels/index.d.ts +220 -0
  42. package/dist/hooks/useActivityModels/index.d.ts.map +1 -0
  43. package/dist/hooks/useActivityModels/index.js +186 -0
  44. package/dist/hooks/useActivityModels/index.js.map +1 -0
  45. package/dist/hooks/useActivityModels/index.mjs +146 -0
  46. package/dist/hooks/useActivityModels/index.mjs.map +1 -0
  47. package/dist/hooks/useActivityModels.d.ts +220 -0
  48. package/dist/hooks/useActivityModels.d.ts.map +1 -0
  49. package/dist/index.css +13 -0
  50. package/dist/index.css.map +1 -1
  51. package/dist/index.d.ts +8 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +1069 -23
  54. package/dist/index.js.map +1 -1
  55. package/dist/index.mjs +1049 -23
  56. package/dist/index.mjs.map +1 -1
  57. package/dist/styles.css +13 -0
  58. package/dist/styles.css.map +1 -1
  59. package/dist/types/activitiesHistory/index.d.ts +196 -0
  60. package/dist/types/activitiesHistory/index.d.ts.map +1 -0
  61. package/dist/types/activitiesHistory/index.js +92 -0
  62. package/dist/types/activitiesHistory/index.js.map +1 -0
  63. package/dist/types/activitiesHistory/index.mjs +59 -0
  64. package/dist/types/activitiesHistory/index.mjs.map +1 -0
  65. package/dist/types/activitiesHistory.d.ts +196 -0
  66. package/dist/types/activitiesHistory.d.ts.map +1 -0
  67. package/dist/types/common.d.ts +44 -0
  68. package/dist/types/common.d.ts.map +1 -0
  69. package/dist/types/recommendedLessons/index.d.ts +10 -18
  70. package/dist/types/recommendedLessons/index.d.ts.map +1 -1
  71. package/dist/types/recommendedLessons/index.js +27 -22
  72. package/dist/types/recommendedLessons/index.js.map +1 -1
  73. package/dist/types/recommendedLessons/index.mjs +26 -23
  74. package/dist/types/recommendedLessons/index.mjs.map +1 -1
  75. package/dist/types/recommendedLessons.d.ts +10 -18
  76. package/dist/types/recommendedLessons.d.ts.map +1 -1
  77. package/dist/utils/hookErrorHandler.d.ts +24 -0
  78. package/dist/utils/hookErrorHandler.d.ts.map +1 -0
  79. package/package.json +7 -1
  80. package/dist/RecommendedLessonDetails/index.d.ts +0 -5
  81. package/dist/RecommendedLessonDetails/index.d.ts.map +0 -1
  82. package/dist/RecommendedLessonDetails/index.js +0 -4854
  83. package/dist/RecommendedLessonDetails/index.js.map +0 -1
  84. package/dist/RecommendedLessonDetails/index.mjs +0 -4872
  85. package/dist/RecommendedLessonDetails/index.mjs.map +0 -1
  86. package/dist/hooks/useRecommendedLessonDetails/index.d.ts +0 -780
  87. package/dist/hooks/useRecommendedLessonDetails/index.d.ts.map +0 -1
  88. package/dist/hooks/useRecommendedLessonDetails/index.js +0 -204
  89. package/dist/hooks/useRecommendedLessonDetails/index.js.map +0 -1
  90. package/dist/hooks/useRecommendedLessonDetails/index.mjs +0 -174
  91. package/dist/hooks/useRecommendedLessonDetails/index.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"useRecommendedLessonDetails.d.ts","sourceRoot":"","sources":["../../src/hooks/useRecommendedLessonDetails.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACV,iBAAiB,EAIjB,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAmErC;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGhC,CAAC;AAmDH;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGvC,CAAC;AAsBH;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMnC,CAAC;AAMH;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,iCACf,SAAQ,gCAAgC;IACxC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,2CAA2C;IAC3C,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACpD,kDAAkD;IAClD,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAClE,gEAAgE;IAChE,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;CACnE;AAMD;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,GAAI,OAAO,OAAO,KAAG,MAQ9D,CAAC;AAMF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,iCAAiC,GAC5C,WAAW,sBAAsB,MAEzB,UAAU,MAAM,GAAG,SAAS,KAAG,iCAwFxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kCAAkC,cA/FlC,sBAAsB,MAEzB,UAAU,MAAM,GAAG,SAAS,KAAG,iCA8FN,CAAC"}
@@ -1,204 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/hooks/useRecommendedLessonDetails.ts
21
- var useRecommendedLessonDetails_exports = {};
22
- __export(useRecommendedLessonDetails_exports, {
23
- createRecommendedLessonDetailsHook: () => createRecommendedLessonDetailsHook,
24
- createUseRecommendedLessonDetails: () => createUseRecommendedLessonDetails,
25
- goalApiResponseSchema: () => goalApiResponseSchema,
26
- goalDetailsApiResponseSchema: () => goalDetailsApiResponseSchema,
27
- handleLessonDetailsFetchError: () => handleLessonDetailsFetchError,
28
- historyApiResponseSchema: () => historyApiResponseSchema
29
- });
30
- module.exports = __toCommonJS(useRecommendedLessonDetails_exports);
31
- var import_react = require("react");
32
- var import_zod = require("zod");
33
- var goalLessonSubjectSchema = import_zod.z.object({
34
- id: import_zod.z.string(),
35
- name: import_zod.z.string(),
36
- color: import_zod.z.string(),
37
- icon: import_zod.z.string()
38
- });
39
- var lessonContentSchema = import_zod.z.object({
40
- id: import_zod.z.string(),
41
- name: import_zod.z.string()
42
- });
43
- var goalLessonSchema = import_zod.z.object({
44
- id: import_zod.z.string(),
45
- content: lessonContentSchema,
46
- subtopic: lessonContentSchema,
47
- topic: lessonContentSchema,
48
- subject: goalLessonSubjectSchema
49
- });
50
- var goalLessonProgressSchema = import_zod.z.object({
51
- id: import_zod.z.string(),
52
- userId: import_zod.z.string(),
53
- lessonId: import_zod.z.string(),
54
- progress: import_zod.z.number(),
55
- lesson: goalLessonSchema
56
- });
57
- var goalLessonGoalItemSchema = import_zod.z.object({
58
- goalId: import_zod.z.string(),
59
- supLessonsProgressId: import_zod.z.string(),
60
- supLessonsProgress: goalLessonProgressSchema
61
- });
62
- var goalMetadataSchema = import_zod.z.object({
63
- id: import_zod.z.string(),
64
- title: import_zod.z.string(),
65
- startDate: import_zod.z.string(),
66
- finalDate: import_zod.z.string(),
67
- progress: import_zod.z.number(),
68
- lessonsGoals: import_zod.z.array(goalLessonGoalItemSchema)
69
- });
70
- var goalApiResponseSchema = import_zod.z.object({
71
- message: import_zod.z.string(),
72
- data: goalMetadataSchema
73
- });
74
- var goalDetailStudentSchema = import_zod.z.object({
75
- userInstitutionId: import_zod.z.string(),
76
- userId: import_zod.z.string(),
77
- name: import_zod.z.string(),
78
- progress: import_zod.z.number(),
79
- completedAt: import_zod.z.string().nullable(),
80
- avgScore: import_zod.z.number().nullable(),
81
- daysToComplete: import_zod.z.number().nullable()
82
- });
83
- var goalDetailAggregatedSchema = import_zod.z.object({
84
- completionPercentage: import_zod.z.number(),
85
- avgScore: import_zod.z.number().nullable()
86
- });
87
- var goalDetailContentPerformanceItemSchema = import_zod.z.object({
88
- contentId: import_zod.z.string(),
89
- contentName: import_zod.z.string(),
90
- rate: import_zod.z.number()
91
- }).nullable();
92
- var goalDetailContentPerformanceSchema = import_zod.z.object({
93
- best: goalDetailContentPerformanceItemSchema,
94
- worst: goalDetailContentPerformanceItemSchema
95
- });
96
- var goalDetailsDataSchema = import_zod.z.object({
97
- students: import_zod.z.array(goalDetailStudentSchema),
98
- aggregated: goalDetailAggregatedSchema,
99
- contentPerformance: goalDetailContentPerformanceSchema
100
- });
101
- var goalDetailsApiResponseSchema = import_zod.z.object({
102
- message: import_zod.z.string(),
103
- data: goalDetailsDataSchema
104
- });
105
- var goalBreakdownSchema = import_zod.z.object({
106
- classId: import_zod.z.string().uuid(),
107
- className: import_zod.z.string(),
108
- schoolId: import_zod.z.string(),
109
- schoolName: import_zod.z.string(),
110
- studentCount: import_zod.z.number(),
111
- completedCount: import_zod.z.number()
112
- });
113
- var historyGoalItemSchema = import_zod.z.object({
114
- goal: import_zod.z.object({ id: import_zod.z.string().uuid() }),
115
- breakdown: import_zod.z.array(goalBreakdownSchema)
116
- });
117
- var historyApiResponseSchema = import_zod.z.object({
118
- message: import_zod.z.string(),
119
- data: import_zod.z.object({
120
- goals: import_zod.z.array(historyGoalItemSchema),
121
- total: import_zod.z.number()
122
- })
123
- });
124
- var handleLessonDetailsFetchError = (error) => {
125
- if (error instanceof import_zod.z.ZodError) {
126
- console.error("Erro ao validar dados dos detalhes da aula:", error);
127
- return "Erro ao validar dados dos detalhes da aula";
128
- }
129
- console.error("Erro ao carregar detalhes da aula:", error);
130
- return "Erro ao carregar detalhes da aula";
131
- };
132
- var createUseRecommendedLessonDetails = (apiClient) => {
133
- return (lessonId) => {
134
- const [state, setState] = (0, import_react.useState)({
135
- data: null,
136
- loading: true,
137
- error: null
138
- });
139
- const fetchLessonDetails = (0, import_react.useCallback)(async () => {
140
- if (!lessonId) {
141
- setState({
142
- data: null,
143
- loading: false,
144
- error: "ID da aula n\xE3o encontrado"
145
- });
146
- return;
147
- }
148
- setState((prev) => ({ ...prev, loading: true, error: null }));
149
- try {
150
- const promises = [
151
- apiClient.fetchGoal(lessonId),
152
- apiClient.fetchGoalDetails(lessonId),
153
- apiClient.fetchBreakdown ? apiClient.fetchBreakdown(lessonId) : Promise.resolve(null)
154
- ];
155
- const [goalResponse, detailsResponse, historyResponse] = await Promise.all(promises);
156
- const validatedGoal = goalApiResponseSchema.parse(goalResponse);
157
- const validatedDetails = goalDetailsApiResponseSchema.parse(detailsResponse);
158
- let breakdown;
159
- if (historyResponse) {
160
- const validatedHistory = historyApiResponseSchema.parse(historyResponse);
161
- const historyItem = validatedHistory.data.goals.find(
162
- (g) => g.goal.id === lessonId
163
- );
164
- breakdown = historyItem?.breakdown[0];
165
- }
166
- const lessonData = {
167
- goal: validatedGoal.data,
168
- details: validatedDetails.data,
169
- breakdown
170
- };
171
- setState({
172
- data: lessonData,
173
- loading: false,
174
- error: null
175
- });
176
- } catch (error) {
177
- const errorMessage = handleLessonDetailsFetchError(error);
178
- setState({
179
- data: null,
180
- loading: false,
181
- error: errorMessage
182
- });
183
- }
184
- }, [lessonId]);
185
- (0, import_react.useEffect)(() => {
186
- fetchLessonDetails();
187
- }, [fetchLessonDetails]);
188
- return {
189
- ...state,
190
- refetch: fetchLessonDetails
191
- };
192
- };
193
- };
194
- var createRecommendedLessonDetailsHook = createUseRecommendedLessonDetails;
195
- // Annotate the CommonJS export names for ESM import in node:
196
- 0 && (module.exports = {
197
- createRecommendedLessonDetailsHook,
198
- createUseRecommendedLessonDetails,
199
- goalApiResponseSchema,
200
- goalDetailsApiResponseSchema,
201
- handleLessonDetailsFetchError,
202
- historyApiResponseSchema
203
- });
204
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/hooks/useRecommendedLessonDetails.ts"],"sourcesContent":["import { useState, useCallback, useEffect } from 'react';\nimport { z } from 'zod';\nimport type {\n LessonDetailsData,\n GoalMetadata,\n GoalDetailsData,\n GoalBreakdown,\n GoalApiResponse,\n GoalDetailsApiResponse,\n GoalsHistoryApiResponse,\n} from '../types/recommendedLessons';\n\n// ============================================\n// Zod Schemas for API Response Validation\n// ============================================\n\n/**\n * Schema for subject in lesson\n */\nconst goalLessonSubjectSchema = z.object({\n id: z.string(),\n name: z.string(),\n color: z.string(),\n icon: z.string(),\n});\n\n/**\n * Schema for lesson content/subtopic/topic\n */\nconst lessonContentSchema = z.object({\n id: z.string(),\n name: z.string(),\n});\n\n/**\n * Schema for lesson in goal\n */\nconst goalLessonSchema = z.object({\n id: z.string(),\n content: lessonContentSchema,\n subtopic: lessonContentSchema,\n topic: lessonContentSchema,\n subject: goalLessonSubjectSchema,\n});\n\n/**\n * Schema for lesson progress\n */\nconst goalLessonProgressSchema = z.object({\n id: z.string(),\n userId: z.string(),\n lessonId: z.string(),\n progress: z.number(),\n lesson: goalLessonSchema,\n});\n\n/**\n * Schema for lesson goal item\n */\nconst goalLessonGoalItemSchema = z.object({\n goalId: z.string(),\n supLessonsProgressId: z.string(),\n supLessonsProgress: goalLessonProgressSchema,\n});\n\n/**\n * Schema for goal metadata from /goals/{id}\n */\nconst goalMetadataSchema = z.object({\n id: z.string(),\n title: z.string(),\n startDate: z.string(),\n finalDate: z.string(),\n progress: z.number(),\n lessonsGoals: z.array(goalLessonGoalItemSchema),\n});\n\n/**\n * Schema for /goals/{id} API response\n */\nexport const goalApiResponseSchema = z.object({\n message: z.string(),\n data: goalMetadataSchema,\n});\n\n/**\n * Schema for student in details\n */\nconst goalDetailStudentSchema = z.object({\n userInstitutionId: z.string(),\n userId: z.string(),\n name: z.string(),\n progress: z.number(),\n completedAt: z.string().nullable(),\n avgScore: z.number().nullable(),\n daysToComplete: z.number().nullable(),\n});\n\n/**\n * Schema for aggregated stats\n */\nconst goalDetailAggregatedSchema = z.object({\n completionPercentage: z.number(),\n avgScore: z.number().nullable(),\n});\n\n/**\n * Schema for content performance item\n */\nconst goalDetailContentPerformanceItemSchema = z\n .object({\n contentId: z.string(),\n contentName: z.string(),\n rate: z.number(),\n })\n .nullable();\n\n/**\n * Schema for content performance\n */\nconst goalDetailContentPerformanceSchema = z.object({\n best: goalDetailContentPerformanceItemSchema,\n worst: goalDetailContentPerformanceItemSchema,\n});\n\n/**\n * Schema for details data from /goals/{id}/details\n */\nconst goalDetailsDataSchema = z.object({\n students: z.array(goalDetailStudentSchema),\n aggregated: goalDetailAggregatedSchema,\n contentPerformance: goalDetailContentPerformanceSchema,\n});\n\n/**\n * Schema for /goals/{id}/details API response\n */\nexport const goalDetailsApiResponseSchema = z.object({\n message: z.string(),\n data: goalDetailsDataSchema,\n});\n\n/**\n * Schema for breakdown item from history\n */\nconst goalBreakdownSchema = z.object({\n classId: z.string().uuid(),\n className: z.string(),\n schoolId: z.string(),\n schoolName: z.string(),\n studentCount: z.number(),\n completedCount: z.number(),\n});\n\n/**\n * Schema for history goal item (partial, only what we need)\n */\nconst historyGoalItemSchema = z.object({\n goal: z.object({ id: z.string().uuid() }),\n breakdown: z.array(goalBreakdownSchema),\n});\n\n/**\n * Schema for history API response (partial)\n */\nexport const historyApiResponseSchema = z.object({\n message: z.string(),\n data: z.object({\n goals: z.array(historyGoalItemSchema),\n total: z.number(),\n }),\n});\n\n// ============================================\n// Hook Types\n// ============================================\n\n/**\n * Hook state interface\n */\nexport interface UseRecommendedLessonDetailsState {\n data: LessonDetailsData | null;\n loading: boolean;\n error: string | null;\n}\n\n/**\n * Hook return type\n */\nexport interface UseRecommendedLessonDetailsReturn\n extends UseRecommendedLessonDetailsState {\n refetch: () => Promise<void>;\n}\n\n/**\n * API client interface for fetching lesson details\n */\nexport interface LessonDetailsApiClient {\n /** Fetch goal metadata from /goals/{id} */\n fetchGoal: (id: string) => Promise<GoalApiResponse>;\n /** Fetch goal details from /goals/{id}/details */\n fetchGoalDetails: (id: string) => Promise<GoalDetailsApiResponse>;\n /** Optional: Fetch breakdown from /recommended-class/history */\n fetchBreakdown?: (id: string) => Promise<GoalsHistoryApiResponse>;\n}\n\n// ============================================\n// Error Handling\n// ============================================\n\n/**\n * Handle errors during lesson details fetch\n * @param error - Error object\n * @returns Error message for UI display\n */\nexport const handleLessonDetailsFetchError = (error: unknown): string => {\n if (error instanceof z.ZodError) {\n console.error('Erro ao validar dados dos detalhes da aula:', error);\n return 'Erro ao validar dados dos detalhes da aula';\n }\n\n console.error('Erro ao carregar detalhes da aula:', error);\n return 'Erro ao carregar detalhes da aula';\n};\n\n// ============================================\n// Hook Factory\n// ============================================\n\n/**\n * Factory function to create useRecommendedLessonDetails hook\n *\n * @param apiClient - Object containing API fetch functions\n * @returns Hook for managing recommended lesson details\n *\n * @example\n * ```tsx\n * // In your app setup\n * const apiClient = {\n * fetchGoal: async (id) => {\n * const response = await api.get(`/goals/${id}`);\n * return response.data;\n * },\n * fetchGoalDetails: async (id) => {\n * const response = await api.get(`/goals/${id}/details`);\n * return response.data;\n * },\n * fetchBreakdown: async (id) => {\n * const response = await api.get(`/recommended-class/history?search=${id}&limit=1`);\n * return response.data;\n * },\n * };\n *\n * const useGoalDetails = createUseRecommendedLessonDetails(apiClient);\n *\n * // In your component\n * const { data, loading, error, refetch } = useGoalDetails('goal-id-123');\n * ```\n */\nexport const createUseRecommendedLessonDetails = (\n apiClient: LessonDetailsApiClient\n) => {\n return (lessonId: string | undefined): UseRecommendedLessonDetailsReturn => {\n const [state, setState] = useState<UseRecommendedLessonDetailsState>({\n data: null,\n loading: true,\n error: null,\n });\n\n /**\n * Fetch lesson details from multiple API endpoints\n */\n const fetchLessonDetails = useCallback(async () => {\n if (!lessonId) {\n setState({\n data: null,\n loading: false,\n error: 'ID da aula não encontrado',\n });\n return;\n }\n\n setState((prev) => ({ ...prev, loading: true, error: null }));\n\n try {\n // Fetch goal metadata and details in parallel\n // Breakdown is optional\n const promises: [\n Promise<GoalApiResponse>,\n Promise<GoalDetailsApiResponse>,\n Promise<GoalsHistoryApiResponse | null>,\n ] = [\n apiClient.fetchGoal(lessonId),\n apiClient.fetchGoalDetails(lessonId),\n apiClient.fetchBreakdown\n ? apiClient.fetchBreakdown(lessonId)\n : Promise.resolve(null),\n ];\n\n const [goalResponse, detailsResponse, historyResponse] =\n await Promise.all(promises);\n\n // Validate responses with Zod\n const validatedGoal = goalApiResponseSchema.parse(goalResponse);\n const validatedDetails =\n goalDetailsApiResponseSchema.parse(detailsResponse);\n\n // Extract and validate breakdown if available\n let breakdown: GoalBreakdown | undefined;\n if (historyResponse) {\n const validatedHistory =\n historyApiResponseSchema.parse(historyResponse);\n const historyItem = validatedHistory.data.goals.find(\n (g) => g.goal.id === lessonId\n );\n breakdown = historyItem?.breakdown[0];\n }\n\n // Combine data\n const lessonData: LessonDetailsData = {\n goal: validatedGoal.data as GoalMetadata,\n details: validatedDetails.data as GoalDetailsData,\n breakdown,\n };\n\n setState({\n data: lessonData,\n loading: false,\n error: null,\n });\n } catch (error) {\n const errorMessage = handleLessonDetailsFetchError(error);\n setState({\n data: null,\n loading: false,\n error: errorMessage,\n });\n }\n }, [lessonId]);\n\n // Fetch on mount and when lessonId changes\n useEffect(() => {\n fetchLessonDetails();\n }, [fetchLessonDetails]);\n\n return {\n ...state,\n refetch: fetchLessonDetails,\n };\n };\n};\n\n/**\n * Alias for createUseRecommendedLessonDetails\n */\nexport const createRecommendedLessonDetailsHook =\n createUseRecommendedLessonDetails;\n"],"mappings":"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","names":[]}
@@ -1,174 +0,0 @@
1
- // src/hooks/useRecommendedLessonDetails.ts
2
- import { useState, useCallback, useEffect } from "react";
3
- import { z } from "zod";
4
- var goalLessonSubjectSchema = z.object({
5
- id: z.string(),
6
- name: z.string(),
7
- color: z.string(),
8
- icon: z.string()
9
- });
10
- var lessonContentSchema = z.object({
11
- id: z.string(),
12
- name: z.string()
13
- });
14
- var goalLessonSchema = z.object({
15
- id: z.string(),
16
- content: lessonContentSchema,
17
- subtopic: lessonContentSchema,
18
- topic: lessonContentSchema,
19
- subject: goalLessonSubjectSchema
20
- });
21
- var goalLessonProgressSchema = z.object({
22
- id: z.string(),
23
- userId: z.string(),
24
- lessonId: z.string(),
25
- progress: z.number(),
26
- lesson: goalLessonSchema
27
- });
28
- var goalLessonGoalItemSchema = z.object({
29
- goalId: z.string(),
30
- supLessonsProgressId: z.string(),
31
- supLessonsProgress: goalLessonProgressSchema
32
- });
33
- var goalMetadataSchema = z.object({
34
- id: z.string(),
35
- title: z.string(),
36
- startDate: z.string(),
37
- finalDate: z.string(),
38
- progress: z.number(),
39
- lessonsGoals: z.array(goalLessonGoalItemSchema)
40
- });
41
- var goalApiResponseSchema = z.object({
42
- message: z.string(),
43
- data: goalMetadataSchema
44
- });
45
- var goalDetailStudentSchema = z.object({
46
- userInstitutionId: z.string(),
47
- userId: z.string(),
48
- name: z.string(),
49
- progress: z.number(),
50
- completedAt: z.string().nullable(),
51
- avgScore: z.number().nullable(),
52
- daysToComplete: z.number().nullable()
53
- });
54
- var goalDetailAggregatedSchema = z.object({
55
- completionPercentage: z.number(),
56
- avgScore: z.number().nullable()
57
- });
58
- var goalDetailContentPerformanceItemSchema = z.object({
59
- contentId: z.string(),
60
- contentName: z.string(),
61
- rate: z.number()
62
- }).nullable();
63
- var goalDetailContentPerformanceSchema = z.object({
64
- best: goalDetailContentPerformanceItemSchema,
65
- worst: goalDetailContentPerformanceItemSchema
66
- });
67
- var goalDetailsDataSchema = z.object({
68
- students: z.array(goalDetailStudentSchema),
69
- aggregated: goalDetailAggregatedSchema,
70
- contentPerformance: goalDetailContentPerformanceSchema
71
- });
72
- var goalDetailsApiResponseSchema = z.object({
73
- message: z.string(),
74
- data: goalDetailsDataSchema
75
- });
76
- var goalBreakdownSchema = z.object({
77
- classId: z.string().uuid(),
78
- className: z.string(),
79
- schoolId: z.string(),
80
- schoolName: z.string(),
81
- studentCount: z.number(),
82
- completedCount: z.number()
83
- });
84
- var historyGoalItemSchema = z.object({
85
- goal: z.object({ id: z.string().uuid() }),
86
- breakdown: z.array(goalBreakdownSchema)
87
- });
88
- var historyApiResponseSchema = z.object({
89
- message: z.string(),
90
- data: z.object({
91
- goals: z.array(historyGoalItemSchema),
92
- total: z.number()
93
- })
94
- });
95
- var handleLessonDetailsFetchError = (error) => {
96
- if (error instanceof z.ZodError) {
97
- console.error("Erro ao validar dados dos detalhes da aula:", error);
98
- return "Erro ao validar dados dos detalhes da aula";
99
- }
100
- console.error("Erro ao carregar detalhes da aula:", error);
101
- return "Erro ao carregar detalhes da aula";
102
- };
103
- var createUseRecommendedLessonDetails = (apiClient) => {
104
- return (lessonId) => {
105
- const [state, setState] = useState({
106
- data: null,
107
- loading: true,
108
- error: null
109
- });
110
- const fetchLessonDetails = useCallback(async () => {
111
- if (!lessonId) {
112
- setState({
113
- data: null,
114
- loading: false,
115
- error: "ID da aula n\xE3o encontrado"
116
- });
117
- return;
118
- }
119
- setState((prev) => ({ ...prev, loading: true, error: null }));
120
- try {
121
- const promises = [
122
- apiClient.fetchGoal(lessonId),
123
- apiClient.fetchGoalDetails(lessonId),
124
- apiClient.fetchBreakdown ? apiClient.fetchBreakdown(lessonId) : Promise.resolve(null)
125
- ];
126
- const [goalResponse, detailsResponse, historyResponse] = await Promise.all(promises);
127
- const validatedGoal = goalApiResponseSchema.parse(goalResponse);
128
- const validatedDetails = goalDetailsApiResponseSchema.parse(detailsResponse);
129
- let breakdown;
130
- if (historyResponse) {
131
- const validatedHistory = historyApiResponseSchema.parse(historyResponse);
132
- const historyItem = validatedHistory.data.goals.find(
133
- (g) => g.goal.id === lessonId
134
- );
135
- breakdown = historyItem?.breakdown[0];
136
- }
137
- const lessonData = {
138
- goal: validatedGoal.data,
139
- details: validatedDetails.data,
140
- breakdown
141
- };
142
- setState({
143
- data: lessonData,
144
- loading: false,
145
- error: null
146
- });
147
- } catch (error) {
148
- const errorMessage = handleLessonDetailsFetchError(error);
149
- setState({
150
- data: null,
151
- loading: false,
152
- error: errorMessage
153
- });
154
- }
155
- }, [lessonId]);
156
- useEffect(() => {
157
- fetchLessonDetails();
158
- }, [fetchLessonDetails]);
159
- return {
160
- ...state,
161
- refetch: fetchLessonDetails
162
- };
163
- };
164
- };
165
- var createRecommendedLessonDetailsHook = createUseRecommendedLessonDetails;
166
- export {
167
- createRecommendedLessonDetailsHook,
168
- createUseRecommendedLessonDetails,
169
- goalApiResponseSchema,
170
- goalDetailsApiResponseSchema,
171
- handleLessonDetailsFetchError,
172
- historyApiResponseSchema
173
- };
174
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/hooks/useRecommendedLessonDetails.ts"],"sourcesContent":["import { useState, useCallback, useEffect } from 'react';\nimport { z } from 'zod';\nimport type {\n LessonDetailsData,\n GoalMetadata,\n GoalDetailsData,\n GoalBreakdown,\n GoalApiResponse,\n GoalDetailsApiResponse,\n GoalsHistoryApiResponse,\n} from '../types/recommendedLessons';\n\n// ============================================\n// Zod Schemas for API Response Validation\n// ============================================\n\n/**\n * Schema for subject in lesson\n */\nconst goalLessonSubjectSchema = z.object({\n id: z.string(),\n name: z.string(),\n color: z.string(),\n icon: z.string(),\n});\n\n/**\n * Schema for lesson content/subtopic/topic\n */\nconst lessonContentSchema = z.object({\n id: z.string(),\n name: z.string(),\n});\n\n/**\n * Schema for lesson in goal\n */\nconst goalLessonSchema = z.object({\n id: z.string(),\n content: lessonContentSchema,\n subtopic: lessonContentSchema,\n topic: lessonContentSchema,\n subject: goalLessonSubjectSchema,\n});\n\n/**\n * Schema for lesson progress\n */\nconst goalLessonProgressSchema = z.object({\n id: z.string(),\n userId: z.string(),\n lessonId: z.string(),\n progress: z.number(),\n lesson: goalLessonSchema,\n});\n\n/**\n * Schema for lesson goal item\n */\nconst goalLessonGoalItemSchema = z.object({\n goalId: z.string(),\n supLessonsProgressId: z.string(),\n supLessonsProgress: goalLessonProgressSchema,\n});\n\n/**\n * Schema for goal metadata from /goals/{id}\n */\nconst goalMetadataSchema = z.object({\n id: z.string(),\n title: z.string(),\n startDate: z.string(),\n finalDate: z.string(),\n progress: z.number(),\n lessonsGoals: z.array(goalLessonGoalItemSchema),\n});\n\n/**\n * Schema for /goals/{id} API response\n */\nexport const goalApiResponseSchema = z.object({\n message: z.string(),\n data: goalMetadataSchema,\n});\n\n/**\n * Schema for student in details\n */\nconst goalDetailStudentSchema = z.object({\n userInstitutionId: z.string(),\n userId: z.string(),\n name: z.string(),\n progress: z.number(),\n completedAt: z.string().nullable(),\n avgScore: z.number().nullable(),\n daysToComplete: z.number().nullable(),\n});\n\n/**\n * Schema for aggregated stats\n */\nconst goalDetailAggregatedSchema = z.object({\n completionPercentage: z.number(),\n avgScore: z.number().nullable(),\n});\n\n/**\n * Schema for content performance item\n */\nconst goalDetailContentPerformanceItemSchema = z\n .object({\n contentId: z.string(),\n contentName: z.string(),\n rate: z.number(),\n })\n .nullable();\n\n/**\n * Schema for content performance\n */\nconst goalDetailContentPerformanceSchema = z.object({\n best: goalDetailContentPerformanceItemSchema,\n worst: goalDetailContentPerformanceItemSchema,\n});\n\n/**\n * Schema for details data from /goals/{id}/details\n */\nconst goalDetailsDataSchema = z.object({\n students: z.array(goalDetailStudentSchema),\n aggregated: goalDetailAggregatedSchema,\n contentPerformance: goalDetailContentPerformanceSchema,\n});\n\n/**\n * Schema for /goals/{id}/details API response\n */\nexport const goalDetailsApiResponseSchema = z.object({\n message: z.string(),\n data: goalDetailsDataSchema,\n});\n\n/**\n * Schema for breakdown item from history\n */\nconst goalBreakdownSchema = z.object({\n classId: z.string().uuid(),\n className: z.string(),\n schoolId: z.string(),\n schoolName: z.string(),\n studentCount: z.number(),\n completedCount: z.number(),\n});\n\n/**\n * Schema for history goal item (partial, only what we need)\n */\nconst historyGoalItemSchema = z.object({\n goal: z.object({ id: z.string().uuid() }),\n breakdown: z.array(goalBreakdownSchema),\n});\n\n/**\n * Schema for history API response (partial)\n */\nexport const historyApiResponseSchema = z.object({\n message: z.string(),\n data: z.object({\n goals: z.array(historyGoalItemSchema),\n total: z.number(),\n }),\n});\n\n// ============================================\n// Hook Types\n// ============================================\n\n/**\n * Hook state interface\n */\nexport interface UseRecommendedLessonDetailsState {\n data: LessonDetailsData | null;\n loading: boolean;\n error: string | null;\n}\n\n/**\n * Hook return type\n */\nexport interface UseRecommendedLessonDetailsReturn\n extends UseRecommendedLessonDetailsState {\n refetch: () => Promise<void>;\n}\n\n/**\n * API client interface for fetching lesson details\n */\nexport interface LessonDetailsApiClient {\n /** Fetch goal metadata from /goals/{id} */\n fetchGoal: (id: string) => Promise<GoalApiResponse>;\n /** Fetch goal details from /goals/{id}/details */\n fetchGoalDetails: (id: string) => Promise<GoalDetailsApiResponse>;\n /** Optional: Fetch breakdown from /recommended-class/history */\n fetchBreakdown?: (id: string) => Promise<GoalsHistoryApiResponse>;\n}\n\n// ============================================\n// Error Handling\n// ============================================\n\n/**\n * Handle errors during lesson details fetch\n * @param error - Error object\n * @returns Error message for UI display\n */\nexport const handleLessonDetailsFetchError = (error: unknown): string => {\n if (error instanceof z.ZodError) {\n console.error('Erro ao validar dados dos detalhes da aula:', error);\n return 'Erro ao validar dados dos detalhes da aula';\n }\n\n console.error('Erro ao carregar detalhes da aula:', error);\n return 'Erro ao carregar detalhes da aula';\n};\n\n// ============================================\n// Hook Factory\n// ============================================\n\n/**\n * Factory function to create useRecommendedLessonDetails hook\n *\n * @param apiClient - Object containing API fetch functions\n * @returns Hook for managing recommended lesson details\n *\n * @example\n * ```tsx\n * // In your app setup\n * const apiClient = {\n * fetchGoal: async (id) => {\n * const response = await api.get(`/goals/${id}`);\n * return response.data;\n * },\n * fetchGoalDetails: async (id) => {\n * const response = await api.get(`/goals/${id}/details`);\n * return response.data;\n * },\n * fetchBreakdown: async (id) => {\n * const response = await api.get(`/recommended-class/history?search=${id}&limit=1`);\n * return response.data;\n * },\n * };\n *\n * const useGoalDetails = createUseRecommendedLessonDetails(apiClient);\n *\n * // In your component\n * const { data, loading, error, refetch } = useGoalDetails('goal-id-123');\n * ```\n */\nexport const createUseRecommendedLessonDetails = (\n apiClient: LessonDetailsApiClient\n) => {\n return (lessonId: string | undefined): UseRecommendedLessonDetailsReturn => {\n const [state, setState] = useState<UseRecommendedLessonDetailsState>({\n data: null,\n loading: true,\n error: null,\n });\n\n /**\n * Fetch lesson details from multiple API endpoints\n */\n const fetchLessonDetails = useCallback(async () => {\n if (!lessonId) {\n setState({\n data: null,\n loading: false,\n error: 'ID da aula não encontrado',\n });\n return;\n }\n\n setState((prev) => ({ ...prev, loading: true, error: null }));\n\n try {\n // Fetch goal metadata and details in parallel\n // Breakdown is optional\n const promises: [\n Promise<GoalApiResponse>,\n Promise<GoalDetailsApiResponse>,\n Promise<GoalsHistoryApiResponse | null>,\n ] = [\n apiClient.fetchGoal(lessonId),\n apiClient.fetchGoalDetails(lessonId),\n apiClient.fetchBreakdown\n ? apiClient.fetchBreakdown(lessonId)\n : Promise.resolve(null),\n ];\n\n const [goalResponse, detailsResponse, historyResponse] =\n await Promise.all(promises);\n\n // Validate responses with Zod\n const validatedGoal = goalApiResponseSchema.parse(goalResponse);\n const validatedDetails =\n goalDetailsApiResponseSchema.parse(detailsResponse);\n\n // Extract and validate breakdown if available\n let breakdown: GoalBreakdown | undefined;\n if (historyResponse) {\n const validatedHistory =\n historyApiResponseSchema.parse(historyResponse);\n const historyItem = validatedHistory.data.goals.find(\n (g) => g.goal.id === lessonId\n );\n breakdown = historyItem?.breakdown[0];\n }\n\n // Combine data\n const lessonData: LessonDetailsData = {\n goal: validatedGoal.data as GoalMetadata,\n details: validatedDetails.data as GoalDetailsData,\n breakdown,\n };\n\n setState({\n data: lessonData,\n loading: false,\n error: null,\n });\n } catch (error) {\n const errorMessage = handleLessonDetailsFetchError(error);\n setState({\n data: null,\n loading: false,\n error: errorMessage,\n });\n }\n }, [lessonId]);\n\n // Fetch on mount and when lessonId changes\n useEffect(() => {\n fetchLessonDetails();\n }, [fetchLessonDetails]);\n\n return {\n ...state,\n refetch: fetchLessonDetails,\n };\n };\n};\n\n/**\n * Alias for createUseRecommendedLessonDetails\n */\nexport const createRecommendedLessonDetailsHook =\n createUseRecommendedLessonDetails;\n"],"mappings":"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","names":[]}