analytica-frontend-lib 1.2.86 → 1.2.87

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 (72) hide show
  1. package/dist/ActivitiesHistory/index.js.map +1 -1
  2. package/dist/ActivitiesHistory/index.mjs.map +1 -1
  3. package/dist/NotificationCard/index.js +1 -1
  4. package/dist/NotificationCard/index.js.map +1 -1
  5. package/dist/NotificationCard/index.mjs +1 -1
  6. package/dist/NotificationCard/index.mjs.map +1 -1
  7. package/dist/RecommendedLessonsHistory/index.d.ts +1 -1
  8. package/dist/RecommendedLessonsHistory/index.d.ts.map +1 -1
  9. package/dist/RecommendedLessonsHistory/index.js +148 -142
  10. package/dist/RecommendedLessonsHistory/index.js.map +1 -1
  11. package/dist/RecommendedLessonsHistory/index.mjs +147 -141
  12. package/dist/RecommendedLessonsHistory/index.mjs.map +1 -1
  13. package/dist/hooks/useActivitiesHistory/index.js.map +1 -1
  14. package/dist/hooks/useActivitiesHistory/index.mjs.map +1 -1
  15. package/dist/hooks/useNotifications.d.ts +2 -2
  16. package/dist/hooks/useNotifications.d.ts.map +1 -1
  17. package/dist/hooks/useRecommendedClassDrafts/index.d.ts +57 -0
  18. package/dist/hooks/useRecommendedClassDrafts/index.d.ts.map +1 -0
  19. package/dist/hooks/{useGoalDrafts → useRecommendedClassDrafts}/index.js +40 -40
  20. package/dist/hooks/useRecommendedClassDrafts/index.js.map +1 -0
  21. package/dist/hooks/{useGoalDrafts → useRecommendedClassDrafts}/index.mjs +33 -33
  22. package/dist/hooks/useRecommendedClassDrafts/index.mjs.map +1 -0
  23. package/dist/hooks/useRecommendedClassDrafts.d.ts +57 -0
  24. package/dist/hooks/useRecommendedClassDrafts.d.ts.map +1 -0
  25. package/dist/hooks/{useGoalModels.d.ts → useRecommendedClassModels.d.ts} +32 -32
  26. package/dist/hooks/useRecommendedClassModels.d.ts.map +1 -0
  27. package/dist/hooks/useRecommendedLessonDetails.d.ts +44 -44
  28. package/dist/hooks/useRecommendedLessonDetails.d.ts.map +1 -1
  29. package/dist/hooks/useRecommendedLessons/index.d.ts +35 -35
  30. package/dist/hooks/useRecommendedLessons/index.d.ts.map +1 -1
  31. package/dist/hooks/useRecommendedLessons/index.js +41 -41
  32. package/dist/hooks/useRecommendedLessons/index.js.map +1 -1
  33. package/dist/hooks/useRecommendedLessons/index.mjs +37 -37
  34. package/dist/hooks/useRecommendedLessons/index.mjs.map +1 -1
  35. package/dist/hooks/useRecommendedLessons.d.ts +35 -35
  36. package/dist/hooks/useRecommendedLessons.d.ts.map +1 -1
  37. package/dist/hooks/useRecommendedLessonsPage/index.d.ts +21 -21
  38. package/dist/hooks/useRecommendedLessonsPage/index.d.ts.map +1 -1
  39. package/dist/hooks/useRecommendedLessonsPage/index.js +39 -33
  40. package/dist/hooks/useRecommendedLessonsPage/index.js.map +1 -1
  41. package/dist/hooks/useRecommendedLessonsPage/index.mjs +39 -33
  42. package/dist/hooks/useRecommendedLessonsPage/index.mjs.map +1 -1
  43. package/dist/hooks/useRecommendedLessonsPage.d.ts +21 -21
  44. package/dist/hooks/useRecommendedLessonsPage.d.ts.map +1 -1
  45. package/dist/index.d.ts +11 -11
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +304 -288
  48. package/dist/index.js.map +1 -1
  49. package/dist/index.mjs +278 -262
  50. package/dist/index.mjs.map +1 -1
  51. package/dist/store/notificationStore.d.ts.map +1 -1
  52. package/dist/types/activitiesHistory/index.js.map +1 -1
  53. package/dist/types/activitiesHistory/index.mjs.map +1 -1
  54. package/dist/types/common.d.ts +2 -2
  55. package/dist/types/notifications.d.ts +5 -5
  56. package/dist/types/notifications.d.ts.map +1 -1
  57. package/dist/types/recommendedLessons/index.d.ts +112 -112
  58. package/dist/types/recommendedLessons/index.d.ts.map +1 -1
  59. package/dist/types/recommendedLessons/index.js +25 -25
  60. package/dist/types/recommendedLessons/index.js.map +1 -1
  61. package/dist/types/recommendedLessons/index.mjs +17 -17
  62. package/dist/types/recommendedLessons/index.mjs.map +1 -1
  63. package/dist/types/recommendedLessons.d.ts +112 -112
  64. package/dist/types/recommendedLessons.d.ts.map +1 -1
  65. package/package.json +1 -1
  66. package/dist/hooks/useGoalDrafts/index.d.ts +0 -57
  67. package/dist/hooks/useGoalDrafts/index.d.ts.map +0 -1
  68. package/dist/hooks/useGoalDrafts/index.js.map +0 -1
  69. package/dist/hooks/useGoalDrafts/index.mjs.map +0 -1
  70. package/dist/hooks/useGoalDrafts.d.ts +0 -57
  71. package/dist/hooks/useGoalDrafts.d.ts.map +0 -1
  72. package/dist/hooks/useGoalModels.d.ts.map +0 -1
@@ -81,7 +81,7 @@ var createUseRecommendedLessonsPage = (config) => {
81
81
  mapSubjectNameToEnum
82
82
  } = config;
83
83
  return () => {
84
- const goalsMapRef = (0, import_react.useRef)(/* @__PURE__ */ new Map());
84
+ const recommendedClassMapRef = (0, import_react.useRef)(/* @__PURE__ */ new Map());
85
85
  const [sendModalOpen, setSendModalOpen] = (0, import_react.useState)(false);
86
86
  const [selectedModel, setSelectedModel] = (0, import_react.useState)(null);
87
87
  const [sendModalLoading, setSendModalLoading] = (0, import_react.useState)(false);
@@ -100,60 +100,63 @@ var createUseRecommendedLessonsPage = (config) => {
100
100
  subjects.forEach((s) => map.set(s.id, s.name));
101
101
  return map;
102
102
  }, [userData]);
103
- const fetchGoalsHistory = (0, import_react.useCallback)(
103
+ const fetchRecommendedClassHistory = (0, import_react.useCallback)(
104
104
  async (filters) => {
105
105
  const params = buildQueryParams(filters);
106
106
  const response = await api.get(
107
- endpoints.goalsHistory,
107
+ endpoints.recommendedClassHistory,
108
108
  { params }
109
109
  );
110
- const goals = response.data.data.goals;
111
- goals.forEach((goal) => {
112
- goalsMapRef.current.set(goal.goal.id, goal);
110
+ const recommendedClass = response.data.data.recommendedClass;
111
+ recommendedClass.forEach((recommendedClass2) => {
112
+ recommendedClassMapRef.current.set(
113
+ recommendedClass2.recommendedClass.id,
114
+ recommendedClass2
115
+ );
113
116
  });
114
117
  return response.data;
115
118
  },
116
- [api, endpoints.goalsHistory]
119
+ [api, endpoints.recommendedClassHistory]
117
120
  );
118
- const fetchGoalModels = (0, import_react.useCallback)(
121
+ const fetchRecommendedClassModels = (0, import_react.useCallback)(
119
122
  async (filters) => {
120
123
  const params = buildQueryParams({
121
124
  ...filters,
122
125
  type: "MODELO" /* MODELO */
123
126
  });
124
127
  const response = await api.get(
125
- endpoints.goalDrafts,
128
+ endpoints.recommendedClassDrafts,
126
129
  { params }
127
130
  );
128
131
  return response.data;
129
132
  },
130
- [api, endpoints.goalDrafts]
133
+ [api, endpoints.recommendedClassDrafts]
131
134
  );
132
- const deleteGoalModel = (0, import_react.useCallback)(
135
+ const deleteRecommendedClassModel = (0, import_react.useCallback)(
133
136
  async (id) => {
134
- await api.delete(`${endpoints.goalDrafts}/${id}`);
137
+ await api.delete(`${endpoints.recommendedClassDrafts}/${id}`);
135
138
  },
136
- [api, endpoints.goalDrafts]
139
+ [api, endpoints.recommendedClassDrafts]
137
140
  );
138
- const fetchGoalDrafts = (0, import_react.useCallback)(
141
+ const fetchRecommendedClassDrafts = (0, import_react.useCallback)(
139
142
  async (filters) => {
140
143
  const params = buildQueryParams({
141
144
  ...filters,
142
145
  type: "RASCUNHO" /* RASCUNHO */
143
146
  });
144
147
  const response = await api.get(
145
- endpoints.goalDrafts,
148
+ endpoints.recommendedClassDrafts,
146
149
  { params }
147
150
  );
148
151
  return response.data;
149
152
  },
150
- [api, endpoints.goalDrafts]
153
+ [api, endpoints.recommendedClassDrafts]
151
154
  );
152
- const deleteGoalDraft = (0, import_react.useCallback)(
155
+ const deleteRecommendedClassDraft = (0, import_react.useCallback)(
153
156
  async (id) => {
154
- await api.delete(`${endpoints.goalDrafts}/${id}`);
157
+ await api.delete(`${endpoints.recommendedClassDrafts}/${id}`);
155
158
  },
156
- [api, endpoints.goalDrafts]
159
+ [api, endpoints.recommendedClassDrafts]
157
160
  );
158
161
  const handleCreateLesson = (0, import_react.useCallback)(() => {
159
162
  navigate(paths.createLesson);
@@ -162,17 +165,20 @@ var createUseRecommendedLessonsPage = (config) => {
162
165
  navigate(paths.createModel);
163
166
  }, []);
164
167
  const handleRowClick = (0, import_react.useCallback)((row) => {
165
- const originalData = goalsMapRef.current.get(row.id);
168
+ const originalData = recommendedClassMapRef.current.get(row.id);
166
169
  navigate(`${paths.lessonDetails}/${row.id}`, {
167
- state: { goalData: originalData }
170
+ state: { recommendedClassData: originalData }
168
171
  });
169
172
  }, []);
170
- const handleEditGoal = (0, import_react.useCallback)((id) => {
173
+ const handleEditRecommendedClass = (0, import_react.useCallback)((id) => {
171
174
  navigate(`${paths.editLesson}/${id}/editar`);
172
175
  }, []);
173
- const handleEditModel = (0, import_react.useCallback)((model) => {
174
- navigate(`${paths.editModel}${model.id}`);
175
- }, []);
176
+ const handleEditModel = (0, import_react.useCallback)(
177
+ (model) => {
178
+ navigate(`${paths.editModel}${model.id}`);
179
+ },
180
+ []
181
+ );
176
182
  const handleSendLesson = (0, import_react.useCallback)(
177
183
  (model) => {
178
184
  setSelectedModel(model);
@@ -201,7 +207,7 @@ var createUseRecommendedLessonsPage = (config) => {
201
207
  if (!selectedModel) return;
202
208
  setSendModalLoading(true);
203
209
  try {
204
- await api.post(endpoints.submitGoal, {
210
+ await api.post(endpoints.submitRecommendedClass, {
205
211
  draftId: selectedModel.id,
206
212
  students: formData.students,
207
213
  startDate: `${formData.startDate}T${formData.startTime}:00`,
@@ -213,7 +219,7 @@ var createUseRecommendedLessonsPage = (config) => {
213
219
  setSendModalLoading(false);
214
220
  }
215
221
  },
216
- [api, endpoints.submitGoal, selectedModel]
222
+ [api, endpoints.submitRecommendedClass, selectedModel]
217
223
  );
218
224
  const handleSendModalClose = (0, import_react.useCallback)(() => {
219
225
  setSendModalOpen(false);
@@ -227,17 +233,17 @@ var createUseRecommendedLessonsPage = (config) => {
227
233
  );
228
234
  return {
229
235
  historyProps: {
230
- fetchGoalsHistory,
231
- fetchGoalModels,
232
- deleteGoalModel,
236
+ fetchRecommendedClassHistory,
237
+ fetchRecommendedClassModels,
238
+ deleteRecommendedClassModel,
233
239
  onCreateLesson: handleCreateLesson,
234
240
  onCreateModel: handleCreateModel,
235
241
  onRowClick: handleRowClick,
236
- onEditGoal: handleEditGoal,
242
+ onEditRecommendedClass: handleEditRecommendedClass,
237
243
  onEditModel: handleEditModel,
238
244
  onSendLesson: handleSendLesson,
239
- fetchGoalDrafts,
240
- deleteGoalDraft,
245
+ fetchRecommendedClassDrafts,
246
+ deleteRecommendedClassDraft,
241
247
  onSendDraft: handleSendLesson,
242
248
  onEditDraft: handleEditModel,
243
249
  emptyStateImage,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/useRecommendedLessonsPage.ts"],"sourcesContent":["/**\n * useRecommendedLessonsPage Hook Factory\n *\n * Factory function to create a hook for RecommendedLessons, LessonDrafts, and LessonModels pages.\n * Contains all common state, memos, and callbacks.\n */\n\nimport { useCallback, useRef, useMemo, useState } from 'react';\nimport {\n GoalDraftType,\n type GoalHistoryFilters,\n type GoalsHistoryApiResponse,\n type GoalTableItem,\n type GoalHistoryItem,\n type GoalModelFilters,\n type GoalModelsApiResponse,\n type GoalModelTableItem,\n} from '../types/recommendedLessons';\nimport type {\n SendLessonFormData,\n CategoryConfig,\n} from '../components/SendLessonModal/types';\nimport { SubjectEnum } from '../enums/SubjectEnum';\n\n/**\n * API client interface\n */\nexport interface RecommendedLessonsApiClient {\n get: <T>(\n url: string,\n config?: { params?: Record<string, unknown> }\n ) => Promise<{ data: T }>;\n post: <T>(url: string, data?: unknown) => Promise<{ data: T }>;\n delete: <T>(url: string) => Promise<{ data: T }>;\n}\n\n/**\n * User institution data structure\n */\nexport interface UserInstitution {\n school: { id: string; name: string };\n schoolYear: { id: string; name: string };\n class: { id: string; name: string };\n}\n\n/**\n * Subject teacher class data structure\n */\nexport interface SubTeacherTopicClass {\n subject: { id: string; name: string };\n class: { id: string; name: string };\n}\n\n/**\n * User data structure\n */\nexport interface RecommendedLessonsUserData {\n userInstitutions?: UserInstitution[];\n subTeacherTopicClasses?: SubTeacherTopicClass[];\n}\n\n/**\n * Navigation paths configuration\n */\nexport interface RecommendedLessonsPagePaths {\n /** Path for creating a new lesson */\n createLesson: string;\n /** Path for creating a new model */\n createModel: string;\n /** Base path for lesson details */\n lessonDetails: string;\n /** Base path for editing a lesson */\n editLesson: string;\n /** Path for editing a model (with id parameter) */\n editModel: string;\n}\n\n/**\n * API endpoints configuration\n */\nexport interface RecommendedLessonsPageEndpoints {\n /** Endpoint for fetching goals history */\n goalsHistory: string;\n /** Endpoint for fetching goal models/drafts */\n goalDrafts: string;\n /** Endpoint for submitting a goal */\n submitGoal: string;\n}\n\n/**\n * UI text configuration\n */\nexport interface RecommendedLessonsPageTexts {\n title: string;\n createButtonText: string;\n searchPlaceholder: string;\n}\n\n/**\n * Configuration for createUseRecommendedLessonsPage factory\n */\nexport interface UseRecommendedLessonsPageConfig {\n /** API client for making requests */\n api: RecommendedLessonsApiClient;\n /** Navigation function */\n navigate: (path: string, options?: { state?: unknown }) => void;\n /** User data for filter options */\n userData: RecommendedLessonsUserData | null;\n /** Navigation paths */\n paths: RecommendedLessonsPagePaths;\n /** API endpoints */\n endpoints: RecommendedLessonsPageEndpoints;\n /** UI text */\n texts: RecommendedLessonsPageTexts;\n /** Image for empty state */\n emptyStateImage: string;\n /** Image for no search results */\n noSearchImage: string;\n /** Function to map subject name to SubjectEnum */\n mapSubjectNameToEnum: (subjectName: string) => SubjectEnum | null;\n}\n\n/**\n * Return type for the useRecommendedLessonsPage hook\n */\nexport interface UseRecommendedLessonsPageReturn {\n /** Props for RecommendedLessonsHistory component */\n historyProps: {\n fetchGoalsHistory: (\n filters?: GoalHistoryFilters\n ) => Promise<GoalsHistoryApiResponse>;\n fetchGoalModels: (\n filters?: GoalModelFilters\n ) => Promise<GoalModelsApiResponse>;\n deleteGoalModel: (id: string) => Promise<void>;\n onCreateLesson: () => void;\n onCreateModel: () => void;\n onRowClick: (row: GoalTableItem) => void;\n onEditGoal: (id: string) => void;\n onEditModel: (model: GoalModelTableItem) => void;\n onSendLesson: (model: GoalModelTableItem) => void;\n fetchGoalDrafts: (\n filters?: GoalModelFilters\n ) => Promise<GoalModelsApiResponse>;\n deleteGoalDraft: (id: string) => Promise<void>;\n onSendDraft: (draft: GoalModelTableItem) => void;\n onEditDraft: (draft: GoalModelTableItem) => void;\n emptyStateImage: string;\n noSearchImage: string;\n mapSubjectNameToEnum: (subjectName: string) => SubjectEnum | null;\n userFilterData: {\n schools: Array<{ id: string; name: string }>;\n classes: Array<{ id: string; name: string }>;\n subjects: Array<{ id: string; name: string }>;\n };\n subjectsMap: Map<string, string>;\n title: string;\n createButtonText: string;\n searchPlaceholder: string;\n };\n /** Props for SendLessonModal component */\n modalProps: {\n isOpen: boolean;\n onClose: () => void;\n onSubmit: (formData: SendLessonFormData) => Promise<void>;\n categories: CategoryConfig[];\n onCategoriesChange: (categories: CategoryConfig[]) => void;\n isLoading: boolean;\n modalTitle: string | undefined;\n };\n /** Navigate function for custom tab handlers */\n navigate: (path: string, options?: { state?: unknown }) => void;\n}\n\n/**\n * Build query parameters from filter object\n */\nconst buildQueryParams = (\n filters?: Record<string, unknown>\n): Record<string, unknown> => {\n if (!filters) return {};\n\n const params: Record<string, unknown> = {};\n for (const key in filters) {\n const value = filters[key];\n if (value !== undefined && value !== null) {\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n params[key] = value;\n }\n }\n }\n return params;\n};\n\n/**\n * Get school options from user data\n */\nconst getSchoolOptions = (\n userData: RecommendedLessonsUserData | null\n): Array<{ id: string; name: string }> => {\n if (!userData?.userInstitutions) return [];\n\n const schoolMap = new Map<string, string>();\n userData.userInstitutions.forEach((inst) => {\n if (inst.school?.id && inst.school?.name) {\n schoolMap.set(inst.school.id, inst.school.name);\n }\n });\n\n return Array.from(schoolMap.entries()).map(([id, name]) => ({ id, name }));\n};\n\n/**\n * Get class options from user data\n */\nconst getClassOptions = (\n userData: RecommendedLessonsUserData | null\n): Array<{ id: string; name: string }> => {\n if (!userData?.userInstitutions) return [];\n\n const classMap = new Map<string, string>();\n userData.userInstitutions.forEach((inst) => {\n if (inst.class?.id && inst.class?.name) {\n classMap.set(inst.class.id, inst.class.name);\n }\n });\n\n return Array.from(classMap.entries()).map(([id, name]) => ({ id, name }));\n};\n\n/**\n * Get subject options from user data\n */\nconst getSubjectOptions = (\n userData: RecommendedLessonsUserData | null\n): Array<{ id: string; name: string }> => {\n if (!userData?.subTeacherTopicClasses) return [];\n\n const subjectMap = new Map<string, string>();\n userData.subTeacherTopicClasses.forEach((stc) => {\n if (stc.subject?.id && stc.subject?.name) {\n subjectMap.set(stc.subject.id, stc.subject.name);\n }\n });\n\n return Array.from(subjectMap.entries()).map(([id, name]) => ({ id, name }));\n};\n\n/**\n * Factory function to create useRecommendedLessonsPage hook\n *\n * @param config - Configuration object with API client, navigation, user data, paths, etc.\n * @returns Hook function that returns historyProps, modalProps, and navigate\n *\n * @example\n * ```tsx\n * // In your app setup\n * const useRecommendedLessonsPage = createUseRecommendedLessonsPage({\n * api,\n * navigate,\n * userData,\n * paths: {\n * createLesson: '/criar-aula',\n * createModel: '/criar-aula?mode=model',\n * lessonDetails: '/aulas-recomendadas',\n * editLesson: '/aulas-recomendadas',\n * editModel: '/criar-aula?mode=model&id=',\n * },\n * endpoints: {\n * goalsHistory: '/recommended-class/history',\n * goalDrafts: '/recommended-class/drafts',\n * submitGoal: '/goals',\n * },\n * texts: {\n * title: 'Histórico de aulas recomendadas',\n * createButtonText: 'Criar aula',\n * searchPlaceholder: 'Buscar aula',\n * },\n * emptyStateImage,\n * noSearchImage,\n * mapSubjectNameToEnum,\n * });\n *\n * // In your component\n * const { historyProps, modalProps, navigate } = useRecommendedLessonsPage();\n * ```\n */\nexport const createUseRecommendedLessonsPage = (\n config: UseRecommendedLessonsPageConfig\n): (() => UseRecommendedLessonsPageReturn) => {\n const {\n api,\n navigate,\n userData,\n paths,\n endpoints,\n texts,\n emptyStateImage,\n noSearchImage,\n mapSubjectNameToEnum,\n } = config;\n\n return (): UseRecommendedLessonsPageReturn => {\n // Store original goal data for navigation\n const goalsMapRef = useRef<Map<string, GoalHistoryItem>>(new Map());\n\n // SendLessonModal state\n const [sendModalOpen, setSendModalOpen] = useState(false);\n const [selectedModel, setSelectedModel] =\n useState<GoalModelTableItem | null>(null);\n const [sendModalLoading, setSendModalLoading] = useState(false);\n const [sendModalCategories, setSendModalCategories] = useState<\n CategoryConfig[]\n >([]);\n\n // Build user filter data from user data\n const userFilterData = useMemo(\n () => ({\n schools: getSchoolOptions(userData),\n classes: getClassOptions(userData),\n subjects: getSubjectOptions(userData),\n }),\n [userData]\n );\n\n // Memoized subjects map for models display\n const subjectsMap = useMemo(() => {\n const map = new Map<string, string>();\n const subjects = getSubjectOptions(userData);\n subjects.forEach((s) => map.set(s.id, s.name));\n return map;\n }, [userData]);\n\n /**\n * Fetch goals history from API\n */\n const fetchGoalsHistory = useCallback(\n async (\n filters?: GoalHistoryFilters\n ): Promise<GoalsHistoryApiResponse> => {\n const params = buildQueryParams(filters as Record<string, unknown>);\n const response = await api.get<GoalsHistoryApiResponse>(\n endpoints.goalsHistory,\n { params }\n );\n\n // Store original goal data for later use in navigation\n const goals = response.data.data.goals;\n goals.forEach((goal) => {\n goalsMapRef.current.set(goal.goal.id, goal);\n });\n\n return response.data;\n },\n [api, endpoints.goalsHistory]\n );\n\n /**\n * Fetch goal models from API\n */\n const fetchGoalModels = useCallback(\n async (filters?: GoalModelFilters): Promise<GoalModelsApiResponse> => {\n const params = buildQueryParams({\n ...filters,\n type: GoalDraftType.MODELO,\n } as Record<string, unknown>);\n const response = await api.get<GoalModelsApiResponse>(\n endpoints.goalDrafts,\n { params }\n );\n return response.data;\n },\n [api, endpoints.goalDrafts]\n );\n\n /**\n * Delete a goal model\n */\n const deleteGoalModel = useCallback(\n async (id: string): Promise<void> => {\n await api.delete(`${endpoints.goalDrafts}/${id}`);\n },\n [api, endpoints.goalDrafts]\n );\n\n /**\n * Fetch goal drafts from API\n */\n const fetchGoalDrafts = useCallback(\n async (filters?: GoalModelFilters): Promise<GoalModelsApiResponse> => {\n const params = buildQueryParams({\n ...filters,\n type: GoalDraftType.RASCUNHO,\n } as Record<string, unknown>);\n const response = await api.get<GoalModelsApiResponse>(\n endpoints.goalDrafts,\n { params }\n );\n return response.data;\n },\n [api, endpoints.goalDrafts]\n );\n\n /**\n * Delete a goal draft\n */\n const deleteGoalDraft = useCallback(\n async (id: string): Promise<void> => {\n await api.delete(`${endpoints.goalDrafts}/${id}`);\n },\n [api, endpoints.goalDrafts]\n );\n\n /**\n * Handle create lesson button click\n */\n const handleCreateLesson = useCallback(() => {\n navigate(paths.createLesson);\n }, []);\n\n /**\n * Handle create model button click\n */\n const handleCreateModel = useCallback(() => {\n navigate(paths.createModel);\n }, []);\n\n /**\n * Handle row click - navigate to goal details\n */\n const handleRowClick = useCallback((row: GoalTableItem) => {\n const originalData = goalsMapRef.current.get(row.id);\n navigate(`${paths.lessonDetails}/${row.id}`, {\n state: { goalData: originalData },\n });\n }, []);\n\n /**\n * Handle edit goal action\n */\n const handleEditGoal = useCallback((id: string) => {\n navigate(`${paths.editLesson}/${id}/editar`);\n }, []);\n\n /**\n * Handle edit model action\n */\n const handleEditModel = useCallback((model: GoalModelTableItem) => {\n navigate(`${paths.editModel}${model.id}`);\n }, []);\n\n /**\n * Handle send lesson button click - opens modal\n */\n const handleSendLesson = useCallback(\n (model: GoalModelTableItem) => {\n setSelectedModel(model);\n\n // Build categories from user data for CheckboxGroup\n const classes = getClassOptions(userData);\n const categories: CategoryConfig[] = [];\n\n if (classes.length > 0) {\n categories.push({\n key: 'students',\n label: 'Turmas',\n selectedIds: [],\n itens: classes.map((cls) => ({\n id: cls.id,\n name: cls.name,\n studentId: cls.id,\n userInstitutionId: cls.id,\n })),\n });\n }\n\n setSendModalCategories(categories);\n setSendModalOpen(true);\n },\n [userData]\n );\n\n /**\n * Handle send lesson modal submit\n */\n const handleSendLessonSubmit = useCallback(\n async (formData: SendLessonFormData) => {\n if (!selectedModel) return;\n\n setSendModalLoading(true);\n try {\n await api.post(endpoints.submitGoal, {\n draftId: selectedModel.id,\n students: formData.students,\n startDate: `${formData.startDate}T${formData.startTime}:00`,\n finalDate: `${formData.finalDate}T${formData.finalTime}:00`,\n });\n\n setSendModalOpen(false);\n setSelectedModel(null);\n } finally {\n setSendModalLoading(false);\n }\n },\n [api, endpoints.submitGoal, selectedModel]\n );\n\n /**\n * Handle send lesson modal close\n */\n const handleSendModalClose = useCallback(() => {\n setSendModalOpen(false);\n setSelectedModel(null);\n }, []);\n\n /**\n * Handle categories change in send modal\n */\n const handleCategoriesChange = useCallback(\n (categories: CategoryConfig[]) => {\n setSendModalCategories(categories);\n },\n []\n );\n\n return {\n historyProps: {\n fetchGoalsHistory,\n fetchGoalModels,\n deleteGoalModel,\n onCreateLesson: handleCreateLesson,\n onCreateModel: handleCreateModel,\n onRowClick: handleRowClick,\n onEditGoal: handleEditGoal,\n onEditModel: handleEditModel,\n onSendLesson: handleSendLesson,\n fetchGoalDrafts,\n deleteGoalDraft,\n onSendDraft: handleSendLesson,\n onEditDraft: handleEditModel,\n emptyStateImage,\n noSearchImage,\n mapSubjectNameToEnum,\n userFilterData,\n subjectsMap,\n title: texts.title,\n createButtonText: texts.createButtonText,\n searchPlaceholder: texts.searchPlaceholder,\n },\n modalProps: {\n isOpen: sendModalOpen,\n onClose: handleSendModalClose,\n onSubmit: handleSendLessonSubmit,\n categories: sendModalCategories,\n onCategoriesChange: handleCategoriesChange,\n isLoading: sendModalLoading,\n modalTitle: selectedModel?.title,\n },\n navigate,\n };\n };\n};\n\n/**\n * Alias for createUseRecommendedLessonsPage\n */\nexport const createRecommendedLessonsPageHook = createUseRecommendedLessonsPage;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/hooks/useRecommendedLessonsPage.ts"],"sourcesContent":["/**\n * useRecommendedLessonsPage Hook Factory\n *\n * Factory function to create a hook for RecommendedLessons, LessonDrafts, and LessonModels pages.\n * Contains all common state, memos, and callbacks.\n */\n\nimport { useCallback, useRef, useMemo, useState } from 'react';\nimport {\n RecommendedClassDraftType,\n type RecommendedClassHistoryFilters,\n type RecommendedClassHistoryApiResponse,\n type RecommendedClassTableItem,\n type RecommendedClassHistoryItem,\n type RecommendedClassModelFilters,\n type RecommendedClassModelsApiResponse,\n type RecommendedClassModelTableItem,\n} from '../types/recommendedLessons';\nimport type {\n SendLessonFormData,\n CategoryConfig,\n} from '../components/SendLessonModal/types';\nimport { SubjectEnum } from '../enums/SubjectEnum';\n\n/**\n * API client interface\n */\nexport interface RecommendedLessonsApiClient {\n get: <T>(\n url: string,\n config?: { params?: Record<string, unknown> }\n ) => Promise<{ data: T }>;\n post: <T>(url: string, data?: unknown) => Promise<{ data: T }>;\n delete: <T>(url: string) => Promise<{ data: T }>;\n}\n\n/**\n * User institution data structure\n */\nexport interface UserInstitution {\n school: { id: string; name: string };\n schoolYear: { id: string; name: string };\n class: { id: string; name: string };\n}\n\n/**\n * Subject teacher class data structure\n */\nexport interface SubTeacherTopicClass {\n subject: { id: string; name: string };\n class: { id: string; name: string };\n}\n\n/**\n * User data structure\n */\nexport interface RecommendedLessonsUserData {\n userInstitutions?: UserInstitution[];\n subTeacherTopicClasses?: SubTeacherTopicClass[];\n}\n\n/**\n * Navigation paths configuration\n */\nexport interface RecommendedLessonsPagePaths {\n /** Path for creating a new lesson */\n createLesson: string;\n /** Path for creating a new model */\n createModel: string;\n /** Base path for lesson details */\n lessonDetails: string;\n /** Base path for editing a lesson */\n editLesson: string;\n /** Path for editing a model (with id parameter) */\n editModel: string;\n}\n\n/**\n * API endpoints configuration\n */\nexport interface RecommendedLessonsPageEndpoints {\n /** Endpoint for fetching recommendedClass history */\n recommendedClassHistory: string;\n /** Endpoint for fetching recommendedClass models/drafts */\n recommendedClassDrafts: string;\n /** Endpoint for submitting a recommendedClass */\n submitRecommendedClass: string;\n}\n\n/**\n * UI text configuration\n */\nexport interface RecommendedLessonsPageTexts {\n title: string;\n createButtonText: string;\n searchPlaceholder: string;\n}\n\n/**\n * Configuration for createUseRecommendedLessonsPage factory\n */\nexport interface UseRecommendedLessonsPageConfig {\n /** API client for making requests */\n api: RecommendedLessonsApiClient;\n /** Navigation function */\n navigate: (path: string, options?: { state?: unknown }) => void;\n /** User data for filter options */\n userData: RecommendedLessonsUserData | null;\n /** Navigation paths */\n paths: RecommendedLessonsPagePaths;\n /** API endpoints */\n endpoints: RecommendedLessonsPageEndpoints;\n /** UI text */\n texts: RecommendedLessonsPageTexts;\n /** Image for empty state */\n emptyStateImage: string;\n /** Image for no search results */\n noSearchImage: string;\n /** Function to map subject name to SubjectEnum */\n mapSubjectNameToEnum: (subjectName: string) => SubjectEnum | null;\n}\n\n/**\n * Return type for the useRecommendedLessonsPage hook\n */\nexport interface UseRecommendedLessonsPageReturn {\n /** Props for RecommendedLessonsHistory component */\n historyProps: {\n fetchRecommendedClassHistory: (\n filters?: RecommendedClassHistoryFilters\n ) => Promise<RecommendedClassHistoryApiResponse>;\n fetchRecommendedClassModels: (\n filters?: RecommendedClassModelFilters\n ) => Promise<RecommendedClassModelsApiResponse>;\n deleteRecommendedClassModel: (id: string) => Promise<void>;\n onCreateLesson: () => void;\n onCreateModel: () => void;\n onRowClick: (row: RecommendedClassTableItem) => void;\n onEditRecommendedClass: (id: string) => void;\n onEditModel: (model: RecommendedClassModelTableItem) => void;\n onSendLesson: (model: RecommendedClassModelTableItem) => void;\n fetchRecommendedClassDrafts: (\n filters?: RecommendedClassModelFilters\n ) => Promise<RecommendedClassModelsApiResponse>;\n deleteRecommendedClassDraft: (id: string) => Promise<void>;\n onSendDraft: (draft: RecommendedClassModelTableItem) => void;\n onEditDraft: (draft: RecommendedClassModelTableItem) => void;\n emptyStateImage: string;\n noSearchImage: string;\n mapSubjectNameToEnum: (subjectName: string) => SubjectEnum | null;\n userFilterData: {\n schools: Array<{ id: string; name: string }>;\n classes: Array<{ id: string; name: string }>;\n subjects: Array<{ id: string; name: string }>;\n };\n subjectsMap: Map<string, string>;\n title: string;\n createButtonText: string;\n searchPlaceholder: string;\n };\n /** Props for SendLessonModal component */\n modalProps: {\n isOpen: boolean;\n onClose: () => void;\n onSubmit: (formData: SendLessonFormData) => Promise<void>;\n categories: CategoryConfig[];\n onCategoriesChange: (categories: CategoryConfig[]) => void;\n isLoading: boolean;\n modalTitle: string | undefined;\n };\n /** Navigate function for custom tab handlers */\n navigate: (path: string, options?: { state?: unknown }) => void;\n}\n\n/**\n * Build query parameters from filter object\n */\nconst buildQueryParams = (\n filters?: Record<string, unknown>\n): Record<string, unknown> => {\n if (!filters) return {};\n\n const params: Record<string, unknown> = {};\n for (const key in filters) {\n const value = filters[key];\n if (value !== undefined && value !== null) {\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n params[key] = value;\n }\n }\n }\n return params;\n};\n\n/**\n * Get school options from user data\n */\nconst getSchoolOptions = (\n userData: RecommendedLessonsUserData | null\n): Array<{ id: string; name: string }> => {\n if (!userData?.userInstitutions) return [];\n\n const schoolMap = new Map<string, string>();\n userData.userInstitutions.forEach((inst) => {\n if (inst.school?.id && inst.school?.name) {\n schoolMap.set(inst.school.id, inst.school.name);\n }\n });\n\n return Array.from(schoolMap.entries()).map(([id, name]) => ({ id, name }));\n};\n\n/**\n * Get class options from user data\n */\nconst getClassOptions = (\n userData: RecommendedLessonsUserData | null\n): Array<{ id: string; name: string }> => {\n if (!userData?.userInstitutions) return [];\n\n const classMap = new Map<string, string>();\n userData.userInstitutions.forEach((inst) => {\n if (inst.class?.id && inst.class?.name) {\n classMap.set(inst.class.id, inst.class.name);\n }\n });\n\n return Array.from(classMap.entries()).map(([id, name]) => ({ id, name }));\n};\n\n/**\n * Get subject options from user data\n */\nconst getSubjectOptions = (\n userData: RecommendedLessonsUserData | null\n): Array<{ id: string; name: string }> => {\n if (!userData?.subTeacherTopicClasses) return [];\n\n const subjectMap = new Map<string, string>();\n userData.subTeacherTopicClasses.forEach((stc) => {\n if (stc.subject?.id && stc.subject?.name) {\n subjectMap.set(stc.subject.id, stc.subject.name);\n }\n });\n\n return Array.from(subjectMap.entries()).map(([id, name]) => ({ id, name }));\n};\n\n/**\n * Factory function to create useRecommendedLessonsPage hook\n *\n * @param config - Configuration object with API client, navigation, user data, paths, etc.\n * @returns Hook function that returns historyProps, modalProps, and navigate\n *\n * @example\n * ```tsx\n * // In your app setup\n * const useRecommendedLessonsPage = createUseRecommendedLessonsPage({\n * api,\n * navigate,\n * userData,\n * paths: {\n * createLesson: '/criar-aula',\n * createModel: '/criar-aula?mode=model',\n * lessonDetails: '/aulas-recomendadas',\n * editLesson: '/aulas-recomendadas',\n * editModel: '/criar-aula?mode=model&id=',\n * },\n * endpoints: {\n * recommendedClassHistory: '/recommended-class/history',\n * recommendedClassDrafts: '/recommended-class/drafts',\n * submitRecommendedClass: '/recommendedClass',\n * },\n * texts: {\n * title: 'Histórico de aulas recomendadas',\n * createButtonText: 'Criar aula',\n * searchPlaceholder: 'Buscar aula',\n * },\n * emptyStateImage,\n * noSearchImage,\n * mapSubjectNameToEnum,\n * });\n *\n * // In your component\n * const { historyProps, modalProps, navigate } = useRecommendedLessonsPage();\n * ```\n */\nexport const createUseRecommendedLessonsPage = (\n config: UseRecommendedLessonsPageConfig\n): (() => UseRecommendedLessonsPageReturn) => {\n const {\n api,\n navigate,\n userData,\n paths,\n endpoints,\n texts,\n emptyStateImage,\n noSearchImage,\n mapSubjectNameToEnum,\n } = config;\n\n return (): UseRecommendedLessonsPageReturn => {\n // Store original recommendedClass data for navigation\n const recommendedClassMapRef = useRef<\n Map<string, RecommendedClassHistoryItem>\n >(new Map());\n\n // SendLessonModal state\n const [sendModalOpen, setSendModalOpen] = useState(false);\n const [selectedModel, setSelectedModel] =\n useState<RecommendedClassModelTableItem | null>(null);\n const [sendModalLoading, setSendModalLoading] = useState(false);\n const [sendModalCategories, setSendModalCategories] = useState<\n CategoryConfig[]\n >([]);\n\n // Build user filter data from user data\n const userFilterData = useMemo(\n () => ({\n schools: getSchoolOptions(userData),\n classes: getClassOptions(userData),\n subjects: getSubjectOptions(userData),\n }),\n [userData]\n );\n\n // Memoized subjects map for models display\n const subjectsMap = useMemo(() => {\n const map = new Map<string, string>();\n const subjects = getSubjectOptions(userData);\n subjects.forEach((s) => map.set(s.id, s.name));\n return map;\n }, [userData]);\n\n /**\n * Fetch recommendedClass history from API\n */\n const fetchRecommendedClassHistory = useCallback(\n async (\n filters?: RecommendedClassHistoryFilters\n ): Promise<RecommendedClassHistoryApiResponse> => {\n const params = buildQueryParams(filters as Record<string, unknown>);\n const response = await api.get<RecommendedClassHistoryApiResponse>(\n endpoints.recommendedClassHistory,\n { params }\n );\n\n // Store original recommendedClass data for later use in navigation\n const recommendedClass = response.data.data.recommendedClass;\n recommendedClass.forEach((recommendedClass) => {\n recommendedClassMapRef.current.set(\n recommendedClass.recommendedClass.id,\n recommendedClass\n );\n });\n\n return response.data;\n },\n [api, endpoints.recommendedClassHistory]\n );\n\n /**\n * Fetch recommendedClass models from API\n */\n const fetchRecommendedClassModels = useCallback(\n async (\n filters?: RecommendedClassModelFilters\n ): Promise<RecommendedClassModelsApiResponse> => {\n const params = buildQueryParams({\n ...filters,\n type: RecommendedClassDraftType.MODELO,\n } as Record<string, unknown>);\n const response = await api.get<RecommendedClassModelsApiResponse>(\n endpoints.recommendedClassDrafts,\n { params }\n );\n return response.data;\n },\n [api, endpoints.recommendedClassDrafts]\n );\n\n /**\n * Delete a recommendedClass model\n */\n const deleteRecommendedClassModel = useCallback(\n async (id: string): Promise<void> => {\n await api.delete(`${endpoints.recommendedClassDrafts}/${id}`);\n },\n [api, endpoints.recommendedClassDrafts]\n );\n\n /**\n * Fetch recommendedClass drafts from API\n */\n const fetchRecommendedClassDrafts = useCallback(\n async (\n filters?: RecommendedClassModelFilters\n ): Promise<RecommendedClassModelsApiResponse> => {\n const params = buildQueryParams({\n ...filters,\n type: RecommendedClassDraftType.RASCUNHO,\n } as Record<string, unknown>);\n const response = await api.get<RecommendedClassModelsApiResponse>(\n endpoints.recommendedClassDrafts,\n { params }\n );\n return response.data;\n },\n [api, endpoints.recommendedClassDrafts]\n );\n\n /**\n * Delete a recommendedClass draft\n */\n const deleteRecommendedClassDraft = useCallback(\n async (id: string): Promise<void> => {\n await api.delete(`${endpoints.recommendedClassDrafts}/${id}`);\n },\n [api, endpoints.recommendedClassDrafts]\n );\n\n /**\n * Handle create lesson button click\n */\n const handleCreateLesson = useCallback(() => {\n navigate(paths.createLesson);\n }, []);\n\n /**\n * Handle create model button click\n */\n const handleCreateModel = useCallback(() => {\n navigate(paths.createModel);\n }, []);\n\n /**\n * Handle row click - navigate to recommendedClass details\n */\n const handleRowClick = useCallback((row: RecommendedClassTableItem) => {\n const originalData = recommendedClassMapRef.current.get(row.id);\n navigate(`${paths.lessonDetails}/${row.id}`, {\n state: { recommendedClassData: originalData },\n });\n }, []);\n\n /**\n * Handle edit recommendedClass action\n */\n const handleEditRecommendedClass = useCallback((id: string) => {\n navigate(`${paths.editLesson}/${id}/editar`);\n }, []);\n\n /**\n * Handle edit model action\n */\n const handleEditModel = useCallback(\n (model: RecommendedClassModelTableItem) => {\n navigate(`${paths.editModel}${model.id}`);\n },\n []\n );\n\n /**\n * Handle send lesson button click - opens modal\n */\n const handleSendLesson = useCallback(\n (model: RecommendedClassModelTableItem) => {\n setSelectedModel(model);\n\n // Build categories from user data for CheckboxGroup\n const classes = getClassOptions(userData);\n const categories: CategoryConfig[] = [];\n\n if (classes.length > 0) {\n categories.push({\n key: 'students',\n label: 'Turmas',\n selectedIds: [],\n itens: classes.map((cls) => ({\n id: cls.id,\n name: cls.name,\n studentId: cls.id,\n userInstitutionId: cls.id,\n })),\n });\n }\n\n setSendModalCategories(categories);\n setSendModalOpen(true);\n },\n [userData]\n );\n\n /**\n * Handle send lesson modal submit\n */\n const handleSendLessonSubmit = useCallback(\n async (formData: SendLessonFormData) => {\n if (!selectedModel) return;\n\n setSendModalLoading(true);\n try {\n await api.post(endpoints.submitRecommendedClass, {\n draftId: selectedModel.id,\n students: formData.students,\n startDate: `${formData.startDate}T${formData.startTime}:00`,\n finalDate: `${formData.finalDate}T${formData.finalTime}:00`,\n });\n\n setSendModalOpen(false);\n setSelectedModel(null);\n } finally {\n setSendModalLoading(false);\n }\n },\n [api, endpoints.submitRecommendedClass, selectedModel]\n );\n\n /**\n * Handle send lesson modal close\n */\n const handleSendModalClose = useCallback(() => {\n setSendModalOpen(false);\n setSelectedModel(null);\n }, []);\n\n /**\n * Handle categories change in send modal\n */\n const handleCategoriesChange = useCallback(\n (categories: CategoryConfig[]) => {\n setSendModalCategories(categories);\n },\n []\n );\n\n return {\n historyProps: {\n fetchRecommendedClassHistory,\n fetchRecommendedClassModels,\n deleteRecommendedClassModel,\n onCreateLesson: handleCreateLesson,\n onCreateModel: handleCreateModel,\n onRowClick: handleRowClick,\n onEditRecommendedClass: handleEditRecommendedClass,\n onEditModel: handleEditModel,\n onSendLesson: handleSendLesson,\n fetchRecommendedClassDrafts,\n deleteRecommendedClassDraft,\n onSendDraft: handleSendLesson,\n onEditDraft: handleEditModel,\n emptyStateImage,\n noSearchImage,\n mapSubjectNameToEnum,\n userFilterData,\n subjectsMap,\n title: texts.title,\n createButtonText: texts.createButtonText,\n searchPlaceholder: texts.searchPlaceholder,\n },\n modalProps: {\n isOpen: sendModalOpen,\n onClose: handleSendModalClose,\n onSubmit: handleSendLessonSubmit,\n categories: sendModalCategories,\n onCategoriesChange: handleCategoriesChange,\n isLoading: sendModalLoading,\n modalTitle: selectedModel?.title,\n },\n navigate,\n };\n };\n};\n\n/**\n * Alias for createUseRecommendedLessonsPage\n */\nexport const createRecommendedLessonsPageHook = createUseRecommendedLessonsPage;\n"],"mappings":"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","names":["recommendedClass"]}
@@ -56,7 +56,7 @@ var createUseRecommendedLessonsPage = (config) => {
56
56
  mapSubjectNameToEnum
57
57
  } = config;
58
58
  return () => {
59
- const goalsMapRef = useRef(/* @__PURE__ */ new Map());
59
+ const recommendedClassMapRef = useRef(/* @__PURE__ */ new Map());
60
60
  const [sendModalOpen, setSendModalOpen] = useState(false);
61
61
  const [selectedModel, setSelectedModel] = useState(null);
62
62
  const [sendModalLoading, setSendModalLoading] = useState(false);
@@ -75,60 +75,63 @@ var createUseRecommendedLessonsPage = (config) => {
75
75
  subjects.forEach((s) => map.set(s.id, s.name));
76
76
  return map;
77
77
  }, [userData]);
78
- const fetchGoalsHistory = useCallback(
78
+ const fetchRecommendedClassHistory = useCallback(
79
79
  async (filters) => {
80
80
  const params = buildQueryParams(filters);
81
81
  const response = await api.get(
82
- endpoints.goalsHistory,
82
+ endpoints.recommendedClassHistory,
83
83
  { params }
84
84
  );
85
- const goals = response.data.data.goals;
86
- goals.forEach((goal) => {
87
- goalsMapRef.current.set(goal.goal.id, goal);
85
+ const recommendedClass = response.data.data.recommendedClass;
86
+ recommendedClass.forEach((recommendedClass2) => {
87
+ recommendedClassMapRef.current.set(
88
+ recommendedClass2.recommendedClass.id,
89
+ recommendedClass2
90
+ );
88
91
  });
89
92
  return response.data;
90
93
  },
91
- [api, endpoints.goalsHistory]
94
+ [api, endpoints.recommendedClassHistory]
92
95
  );
93
- const fetchGoalModels = useCallback(
96
+ const fetchRecommendedClassModels = useCallback(
94
97
  async (filters) => {
95
98
  const params = buildQueryParams({
96
99
  ...filters,
97
100
  type: "MODELO" /* MODELO */
98
101
  });
99
102
  const response = await api.get(
100
- endpoints.goalDrafts,
103
+ endpoints.recommendedClassDrafts,
101
104
  { params }
102
105
  );
103
106
  return response.data;
104
107
  },
105
- [api, endpoints.goalDrafts]
108
+ [api, endpoints.recommendedClassDrafts]
106
109
  );
107
- const deleteGoalModel = useCallback(
110
+ const deleteRecommendedClassModel = useCallback(
108
111
  async (id) => {
109
- await api.delete(`${endpoints.goalDrafts}/${id}`);
112
+ await api.delete(`${endpoints.recommendedClassDrafts}/${id}`);
110
113
  },
111
- [api, endpoints.goalDrafts]
114
+ [api, endpoints.recommendedClassDrafts]
112
115
  );
113
- const fetchGoalDrafts = useCallback(
116
+ const fetchRecommendedClassDrafts = useCallback(
114
117
  async (filters) => {
115
118
  const params = buildQueryParams({
116
119
  ...filters,
117
120
  type: "RASCUNHO" /* RASCUNHO */
118
121
  });
119
122
  const response = await api.get(
120
- endpoints.goalDrafts,
123
+ endpoints.recommendedClassDrafts,
121
124
  { params }
122
125
  );
123
126
  return response.data;
124
127
  },
125
- [api, endpoints.goalDrafts]
128
+ [api, endpoints.recommendedClassDrafts]
126
129
  );
127
- const deleteGoalDraft = useCallback(
130
+ const deleteRecommendedClassDraft = useCallback(
128
131
  async (id) => {
129
- await api.delete(`${endpoints.goalDrafts}/${id}`);
132
+ await api.delete(`${endpoints.recommendedClassDrafts}/${id}`);
130
133
  },
131
- [api, endpoints.goalDrafts]
134
+ [api, endpoints.recommendedClassDrafts]
132
135
  );
133
136
  const handleCreateLesson = useCallback(() => {
134
137
  navigate(paths.createLesson);
@@ -137,17 +140,20 @@ var createUseRecommendedLessonsPage = (config) => {
137
140
  navigate(paths.createModel);
138
141
  }, []);
139
142
  const handleRowClick = useCallback((row) => {
140
- const originalData = goalsMapRef.current.get(row.id);
143
+ const originalData = recommendedClassMapRef.current.get(row.id);
141
144
  navigate(`${paths.lessonDetails}/${row.id}`, {
142
- state: { goalData: originalData }
145
+ state: { recommendedClassData: originalData }
143
146
  });
144
147
  }, []);
145
- const handleEditGoal = useCallback((id) => {
148
+ const handleEditRecommendedClass = useCallback((id) => {
146
149
  navigate(`${paths.editLesson}/${id}/editar`);
147
150
  }, []);
148
- const handleEditModel = useCallback((model) => {
149
- navigate(`${paths.editModel}${model.id}`);
150
- }, []);
151
+ const handleEditModel = useCallback(
152
+ (model) => {
153
+ navigate(`${paths.editModel}${model.id}`);
154
+ },
155
+ []
156
+ );
151
157
  const handleSendLesson = useCallback(
152
158
  (model) => {
153
159
  setSelectedModel(model);
@@ -176,7 +182,7 @@ var createUseRecommendedLessonsPage = (config) => {
176
182
  if (!selectedModel) return;
177
183
  setSendModalLoading(true);
178
184
  try {
179
- await api.post(endpoints.submitGoal, {
185
+ await api.post(endpoints.submitRecommendedClass, {
180
186
  draftId: selectedModel.id,
181
187
  students: formData.students,
182
188
  startDate: `${formData.startDate}T${formData.startTime}:00`,
@@ -188,7 +194,7 @@ var createUseRecommendedLessonsPage = (config) => {
188
194
  setSendModalLoading(false);
189
195
  }
190
196
  },
191
- [api, endpoints.submitGoal, selectedModel]
197
+ [api, endpoints.submitRecommendedClass, selectedModel]
192
198
  );
193
199
  const handleSendModalClose = useCallback(() => {
194
200
  setSendModalOpen(false);
@@ -202,17 +208,17 @@ var createUseRecommendedLessonsPage = (config) => {
202
208
  );
203
209
  return {
204
210
  historyProps: {
205
- fetchGoalsHistory,
206
- fetchGoalModels,
207
- deleteGoalModel,
211
+ fetchRecommendedClassHistory,
212
+ fetchRecommendedClassModels,
213
+ deleteRecommendedClassModel,
208
214
  onCreateLesson: handleCreateLesson,
209
215
  onCreateModel: handleCreateModel,
210
216
  onRowClick: handleRowClick,
211
- onEditGoal: handleEditGoal,
217
+ onEditRecommendedClass: handleEditRecommendedClass,
212
218
  onEditModel: handleEditModel,
213
219
  onSendLesson: handleSendLesson,
214
- fetchGoalDrafts,
215
- deleteGoalDraft,
220
+ fetchRecommendedClassDrafts,
221
+ deleteRecommendedClassDraft,
216
222
  onSendDraft: handleSendLesson,
217
223
  onEditDraft: handleEditModel,
218
224
  emptyStateImage,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/useRecommendedLessonsPage.ts"],"sourcesContent":["/**\n * useRecommendedLessonsPage Hook Factory\n *\n * Factory function to create a hook for RecommendedLessons, LessonDrafts, and LessonModels pages.\n * Contains all common state, memos, and callbacks.\n */\n\nimport { useCallback, useRef, useMemo, useState } from 'react';\nimport {\n GoalDraftType,\n type GoalHistoryFilters,\n type GoalsHistoryApiResponse,\n type GoalTableItem,\n type GoalHistoryItem,\n type GoalModelFilters,\n type GoalModelsApiResponse,\n type GoalModelTableItem,\n} from '../types/recommendedLessons';\nimport type {\n SendLessonFormData,\n CategoryConfig,\n} from '../components/SendLessonModal/types';\nimport { SubjectEnum } from '../enums/SubjectEnum';\n\n/**\n * API client interface\n */\nexport interface RecommendedLessonsApiClient {\n get: <T>(\n url: string,\n config?: { params?: Record<string, unknown> }\n ) => Promise<{ data: T }>;\n post: <T>(url: string, data?: unknown) => Promise<{ data: T }>;\n delete: <T>(url: string) => Promise<{ data: T }>;\n}\n\n/**\n * User institution data structure\n */\nexport interface UserInstitution {\n school: { id: string; name: string };\n schoolYear: { id: string; name: string };\n class: { id: string; name: string };\n}\n\n/**\n * Subject teacher class data structure\n */\nexport interface SubTeacherTopicClass {\n subject: { id: string; name: string };\n class: { id: string; name: string };\n}\n\n/**\n * User data structure\n */\nexport interface RecommendedLessonsUserData {\n userInstitutions?: UserInstitution[];\n subTeacherTopicClasses?: SubTeacherTopicClass[];\n}\n\n/**\n * Navigation paths configuration\n */\nexport interface RecommendedLessonsPagePaths {\n /** Path for creating a new lesson */\n createLesson: string;\n /** Path for creating a new model */\n createModel: string;\n /** Base path for lesson details */\n lessonDetails: string;\n /** Base path for editing a lesson */\n editLesson: string;\n /** Path for editing a model (with id parameter) */\n editModel: string;\n}\n\n/**\n * API endpoints configuration\n */\nexport interface RecommendedLessonsPageEndpoints {\n /** Endpoint for fetching goals history */\n goalsHistory: string;\n /** Endpoint for fetching goal models/drafts */\n goalDrafts: string;\n /** Endpoint for submitting a goal */\n submitGoal: string;\n}\n\n/**\n * UI text configuration\n */\nexport interface RecommendedLessonsPageTexts {\n title: string;\n createButtonText: string;\n searchPlaceholder: string;\n}\n\n/**\n * Configuration for createUseRecommendedLessonsPage factory\n */\nexport interface UseRecommendedLessonsPageConfig {\n /** API client for making requests */\n api: RecommendedLessonsApiClient;\n /** Navigation function */\n navigate: (path: string, options?: { state?: unknown }) => void;\n /** User data for filter options */\n userData: RecommendedLessonsUserData | null;\n /** Navigation paths */\n paths: RecommendedLessonsPagePaths;\n /** API endpoints */\n endpoints: RecommendedLessonsPageEndpoints;\n /** UI text */\n texts: RecommendedLessonsPageTexts;\n /** Image for empty state */\n emptyStateImage: string;\n /** Image for no search results */\n noSearchImage: string;\n /** Function to map subject name to SubjectEnum */\n mapSubjectNameToEnum: (subjectName: string) => SubjectEnum | null;\n}\n\n/**\n * Return type for the useRecommendedLessonsPage hook\n */\nexport interface UseRecommendedLessonsPageReturn {\n /** Props for RecommendedLessonsHistory component */\n historyProps: {\n fetchGoalsHistory: (\n filters?: GoalHistoryFilters\n ) => Promise<GoalsHistoryApiResponse>;\n fetchGoalModels: (\n filters?: GoalModelFilters\n ) => Promise<GoalModelsApiResponse>;\n deleteGoalModel: (id: string) => Promise<void>;\n onCreateLesson: () => void;\n onCreateModel: () => void;\n onRowClick: (row: GoalTableItem) => void;\n onEditGoal: (id: string) => void;\n onEditModel: (model: GoalModelTableItem) => void;\n onSendLesson: (model: GoalModelTableItem) => void;\n fetchGoalDrafts: (\n filters?: GoalModelFilters\n ) => Promise<GoalModelsApiResponse>;\n deleteGoalDraft: (id: string) => Promise<void>;\n onSendDraft: (draft: GoalModelTableItem) => void;\n onEditDraft: (draft: GoalModelTableItem) => void;\n emptyStateImage: string;\n noSearchImage: string;\n mapSubjectNameToEnum: (subjectName: string) => SubjectEnum | null;\n userFilterData: {\n schools: Array<{ id: string; name: string }>;\n classes: Array<{ id: string; name: string }>;\n subjects: Array<{ id: string; name: string }>;\n };\n subjectsMap: Map<string, string>;\n title: string;\n createButtonText: string;\n searchPlaceholder: string;\n };\n /** Props for SendLessonModal component */\n modalProps: {\n isOpen: boolean;\n onClose: () => void;\n onSubmit: (formData: SendLessonFormData) => Promise<void>;\n categories: CategoryConfig[];\n onCategoriesChange: (categories: CategoryConfig[]) => void;\n isLoading: boolean;\n modalTitle: string | undefined;\n };\n /** Navigate function for custom tab handlers */\n navigate: (path: string, options?: { state?: unknown }) => void;\n}\n\n/**\n * Build query parameters from filter object\n */\nconst buildQueryParams = (\n filters?: Record<string, unknown>\n): Record<string, unknown> => {\n if (!filters) return {};\n\n const params: Record<string, unknown> = {};\n for (const key in filters) {\n const value = filters[key];\n if (value !== undefined && value !== null) {\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n params[key] = value;\n }\n }\n }\n return params;\n};\n\n/**\n * Get school options from user data\n */\nconst getSchoolOptions = (\n userData: RecommendedLessonsUserData | null\n): Array<{ id: string; name: string }> => {\n if (!userData?.userInstitutions) return [];\n\n const schoolMap = new Map<string, string>();\n userData.userInstitutions.forEach((inst) => {\n if (inst.school?.id && inst.school?.name) {\n schoolMap.set(inst.school.id, inst.school.name);\n }\n });\n\n return Array.from(schoolMap.entries()).map(([id, name]) => ({ id, name }));\n};\n\n/**\n * Get class options from user data\n */\nconst getClassOptions = (\n userData: RecommendedLessonsUserData | null\n): Array<{ id: string; name: string }> => {\n if (!userData?.userInstitutions) return [];\n\n const classMap = new Map<string, string>();\n userData.userInstitutions.forEach((inst) => {\n if (inst.class?.id && inst.class?.name) {\n classMap.set(inst.class.id, inst.class.name);\n }\n });\n\n return Array.from(classMap.entries()).map(([id, name]) => ({ id, name }));\n};\n\n/**\n * Get subject options from user data\n */\nconst getSubjectOptions = (\n userData: RecommendedLessonsUserData | null\n): Array<{ id: string; name: string }> => {\n if (!userData?.subTeacherTopicClasses) return [];\n\n const subjectMap = new Map<string, string>();\n userData.subTeacherTopicClasses.forEach((stc) => {\n if (stc.subject?.id && stc.subject?.name) {\n subjectMap.set(stc.subject.id, stc.subject.name);\n }\n });\n\n return Array.from(subjectMap.entries()).map(([id, name]) => ({ id, name }));\n};\n\n/**\n * Factory function to create useRecommendedLessonsPage hook\n *\n * @param config - Configuration object with API client, navigation, user data, paths, etc.\n * @returns Hook function that returns historyProps, modalProps, and navigate\n *\n * @example\n * ```tsx\n * // In your app setup\n * const useRecommendedLessonsPage = createUseRecommendedLessonsPage({\n * api,\n * navigate,\n * userData,\n * paths: {\n * createLesson: '/criar-aula',\n * createModel: '/criar-aula?mode=model',\n * lessonDetails: '/aulas-recomendadas',\n * editLesson: '/aulas-recomendadas',\n * editModel: '/criar-aula?mode=model&id=',\n * },\n * endpoints: {\n * goalsHistory: '/recommended-class/history',\n * goalDrafts: '/recommended-class/drafts',\n * submitGoal: '/goals',\n * },\n * texts: {\n * title: 'Histórico de aulas recomendadas',\n * createButtonText: 'Criar aula',\n * searchPlaceholder: 'Buscar aula',\n * },\n * emptyStateImage,\n * noSearchImage,\n * mapSubjectNameToEnum,\n * });\n *\n * // In your component\n * const { historyProps, modalProps, navigate } = useRecommendedLessonsPage();\n * ```\n */\nexport const createUseRecommendedLessonsPage = (\n config: UseRecommendedLessonsPageConfig\n): (() => UseRecommendedLessonsPageReturn) => {\n const {\n api,\n navigate,\n userData,\n paths,\n endpoints,\n texts,\n emptyStateImage,\n noSearchImage,\n mapSubjectNameToEnum,\n } = config;\n\n return (): UseRecommendedLessonsPageReturn => {\n // Store original goal data for navigation\n const goalsMapRef = useRef<Map<string, GoalHistoryItem>>(new Map());\n\n // SendLessonModal state\n const [sendModalOpen, setSendModalOpen] = useState(false);\n const [selectedModel, setSelectedModel] =\n useState<GoalModelTableItem | null>(null);\n const [sendModalLoading, setSendModalLoading] = useState(false);\n const [sendModalCategories, setSendModalCategories] = useState<\n CategoryConfig[]\n >([]);\n\n // Build user filter data from user data\n const userFilterData = useMemo(\n () => ({\n schools: getSchoolOptions(userData),\n classes: getClassOptions(userData),\n subjects: getSubjectOptions(userData),\n }),\n [userData]\n );\n\n // Memoized subjects map for models display\n const subjectsMap = useMemo(() => {\n const map = new Map<string, string>();\n const subjects = getSubjectOptions(userData);\n subjects.forEach((s) => map.set(s.id, s.name));\n return map;\n }, [userData]);\n\n /**\n * Fetch goals history from API\n */\n const fetchGoalsHistory = useCallback(\n async (\n filters?: GoalHistoryFilters\n ): Promise<GoalsHistoryApiResponse> => {\n const params = buildQueryParams(filters as Record<string, unknown>);\n const response = await api.get<GoalsHistoryApiResponse>(\n endpoints.goalsHistory,\n { params }\n );\n\n // Store original goal data for later use in navigation\n const goals = response.data.data.goals;\n goals.forEach((goal) => {\n goalsMapRef.current.set(goal.goal.id, goal);\n });\n\n return response.data;\n },\n [api, endpoints.goalsHistory]\n );\n\n /**\n * Fetch goal models from API\n */\n const fetchGoalModels = useCallback(\n async (filters?: GoalModelFilters): Promise<GoalModelsApiResponse> => {\n const params = buildQueryParams({\n ...filters,\n type: GoalDraftType.MODELO,\n } as Record<string, unknown>);\n const response = await api.get<GoalModelsApiResponse>(\n endpoints.goalDrafts,\n { params }\n );\n return response.data;\n },\n [api, endpoints.goalDrafts]\n );\n\n /**\n * Delete a goal model\n */\n const deleteGoalModel = useCallback(\n async (id: string): Promise<void> => {\n await api.delete(`${endpoints.goalDrafts}/${id}`);\n },\n [api, endpoints.goalDrafts]\n );\n\n /**\n * Fetch goal drafts from API\n */\n const fetchGoalDrafts = useCallback(\n async (filters?: GoalModelFilters): Promise<GoalModelsApiResponse> => {\n const params = buildQueryParams({\n ...filters,\n type: GoalDraftType.RASCUNHO,\n } as Record<string, unknown>);\n const response = await api.get<GoalModelsApiResponse>(\n endpoints.goalDrafts,\n { params }\n );\n return response.data;\n },\n [api, endpoints.goalDrafts]\n );\n\n /**\n * Delete a goal draft\n */\n const deleteGoalDraft = useCallback(\n async (id: string): Promise<void> => {\n await api.delete(`${endpoints.goalDrafts}/${id}`);\n },\n [api, endpoints.goalDrafts]\n );\n\n /**\n * Handle create lesson button click\n */\n const handleCreateLesson = useCallback(() => {\n navigate(paths.createLesson);\n }, []);\n\n /**\n * Handle create model button click\n */\n const handleCreateModel = useCallback(() => {\n navigate(paths.createModel);\n }, []);\n\n /**\n * Handle row click - navigate to goal details\n */\n const handleRowClick = useCallback((row: GoalTableItem) => {\n const originalData = goalsMapRef.current.get(row.id);\n navigate(`${paths.lessonDetails}/${row.id}`, {\n state: { goalData: originalData },\n });\n }, []);\n\n /**\n * Handle edit goal action\n */\n const handleEditGoal = useCallback((id: string) => {\n navigate(`${paths.editLesson}/${id}/editar`);\n }, []);\n\n /**\n * Handle edit model action\n */\n const handleEditModel = useCallback((model: GoalModelTableItem) => {\n navigate(`${paths.editModel}${model.id}`);\n }, []);\n\n /**\n * Handle send lesson button click - opens modal\n */\n const handleSendLesson = useCallback(\n (model: GoalModelTableItem) => {\n setSelectedModel(model);\n\n // Build categories from user data for CheckboxGroup\n const classes = getClassOptions(userData);\n const categories: CategoryConfig[] = [];\n\n if (classes.length > 0) {\n categories.push({\n key: 'students',\n label: 'Turmas',\n selectedIds: [],\n itens: classes.map((cls) => ({\n id: cls.id,\n name: cls.name,\n studentId: cls.id,\n userInstitutionId: cls.id,\n })),\n });\n }\n\n setSendModalCategories(categories);\n setSendModalOpen(true);\n },\n [userData]\n );\n\n /**\n * Handle send lesson modal submit\n */\n const handleSendLessonSubmit = useCallback(\n async (formData: SendLessonFormData) => {\n if (!selectedModel) return;\n\n setSendModalLoading(true);\n try {\n await api.post(endpoints.submitGoal, {\n draftId: selectedModel.id,\n students: formData.students,\n startDate: `${formData.startDate}T${formData.startTime}:00`,\n finalDate: `${formData.finalDate}T${formData.finalTime}:00`,\n });\n\n setSendModalOpen(false);\n setSelectedModel(null);\n } finally {\n setSendModalLoading(false);\n }\n },\n [api, endpoints.submitGoal, selectedModel]\n );\n\n /**\n * Handle send lesson modal close\n */\n const handleSendModalClose = useCallback(() => {\n setSendModalOpen(false);\n setSelectedModel(null);\n }, []);\n\n /**\n * Handle categories change in send modal\n */\n const handleCategoriesChange = useCallback(\n (categories: CategoryConfig[]) => {\n setSendModalCategories(categories);\n },\n []\n );\n\n return {\n historyProps: {\n fetchGoalsHistory,\n fetchGoalModels,\n deleteGoalModel,\n onCreateLesson: handleCreateLesson,\n onCreateModel: handleCreateModel,\n onRowClick: handleRowClick,\n onEditGoal: handleEditGoal,\n onEditModel: handleEditModel,\n onSendLesson: handleSendLesson,\n fetchGoalDrafts,\n deleteGoalDraft,\n onSendDraft: handleSendLesson,\n onEditDraft: handleEditModel,\n emptyStateImage,\n noSearchImage,\n mapSubjectNameToEnum,\n userFilterData,\n subjectsMap,\n title: texts.title,\n createButtonText: texts.createButtonText,\n searchPlaceholder: texts.searchPlaceholder,\n },\n modalProps: {\n isOpen: sendModalOpen,\n onClose: handleSendModalClose,\n onSubmit: handleSendLessonSubmit,\n categories: sendModalCategories,\n onCategoriesChange: handleCategoriesChange,\n isLoading: sendModalLoading,\n modalTitle: selectedModel?.title,\n },\n navigate,\n };\n };\n};\n\n/**\n * Alias for createUseRecommendedLessonsPage\n */\nexport const createRecommendedLessonsPageHook = createUseRecommendedLessonsPage;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/hooks/useRecommendedLessonsPage.ts"],"sourcesContent":["/**\n * useRecommendedLessonsPage Hook Factory\n *\n * Factory function to create a hook for RecommendedLessons, LessonDrafts, and LessonModels pages.\n * Contains all common state, memos, and callbacks.\n */\n\nimport { useCallback, useRef, useMemo, useState } from 'react';\nimport {\n RecommendedClassDraftType,\n type RecommendedClassHistoryFilters,\n type RecommendedClassHistoryApiResponse,\n type RecommendedClassTableItem,\n type RecommendedClassHistoryItem,\n type RecommendedClassModelFilters,\n type RecommendedClassModelsApiResponse,\n type RecommendedClassModelTableItem,\n} from '../types/recommendedLessons';\nimport type {\n SendLessonFormData,\n CategoryConfig,\n} from '../components/SendLessonModal/types';\nimport { SubjectEnum } from '../enums/SubjectEnum';\n\n/**\n * API client interface\n */\nexport interface RecommendedLessonsApiClient {\n get: <T>(\n url: string,\n config?: { params?: Record<string, unknown> }\n ) => Promise<{ data: T }>;\n post: <T>(url: string, data?: unknown) => Promise<{ data: T }>;\n delete: <T>(url: string) => Promise<{ data: T }>;\n}\n\n/**\n * User institution data structure\n */\nexport interface UserInstitution {\n school: { id: string; name: string };\n schoolYear: { id: string; name: string };\n class: { id: string; name: string };\n}\n\n/**\n * Subject teacher class data structure\n */\nexport interface SubTeacherTopicClass {\n subject: { id: string; name: string };\n class: { id: string; name: string };\n}\n\n/**\n * User data structure\n */\nexport interface RecommendedLessonsUserData {\n userInstitutions?: UserInstitution[];\n subTeacherTopicClasses?: SubTeacherTopicClass[];\n}\n\n/**\n * Navigation paths configuration\n */\nexport interface RecommendedLessonsPagePaths {\n /** Path for creating a new lesson */\n createLesson: string;\n /** Path for creating a new model */\n createModel: string;\n /** Base path for lesson details */\n lessonDetails: string;\n /** Base path for editing a lesson */\n editLesson: string;\n /** Path for editing a model (with id parameter) */\n editModel: string;\n}\n\n/**\n * API endpoints configuration\n */\nexport interface RecommendedLessonsPageEndpoints {\n /** Endpoint for fetching recommendedClass history */\n recommendedClassHistory: string;\n /** Endpoint for fetching recommendedClass models/drafts */\n recommendedClassDrafts: string;\n /** Endpoint for submitting a recommendedClass */\n submitRecommendedClass: string;\n}\n\n/**\n * UI text configuration\n */\nexport interface RecommendedLessonsPageTexts {\n title: string;\n createButtonText: string;\n searchPlaceholder: string;\n}\n\n/**\n * Configuration for createUseRecommendedLessonsPage factory\n */\nexport interface UseRecommendedLessonsPageConfig {\n /** API client for making requests */\n api: RecommendedLessonsApiClient;\n /** Navigation function */\n navigate: (path: string, options?: { state?: unknown }) => void;\n /** User data for filter options */\n userData: RecommendedLessonsUserData | null;\n /** Navigation paths */\n paths: RecommendedLessonsPagePaths;\n /** API endpoints */\n endpoints: RecommendedLessonsPageEndpoints;\n /** UI text */\n texts: RecommendedLessonsPageTexts;\n /** Image for empty state */\n emptyStateImage: string;\n /** Image for no search results */\n noSearchImage: string;\n /** Function to map subject name to SubjectEnum */\n mapSubjectNameToEnum: (subjectName: string) => SubjectEnum | null;\n}\n\n/**\n * Return type for the useRecommendedLessonsPage hook\n */\nexport interface UseRecommendedLessonsPageReturn {\n /** Props for RecommendedLessonsHistory component */\n historyProps: {\n fetchRecommendedClassHistory: (\n filters?: RecommendedClassHistoryFilters\n ) => Promise<RecommendedClassHistoryApiResponse>;\n fetchRecommendedClassModels: (\n filters?: RecommendedClassModelFilters\n ) => Promise<RecommendedClassModelsApiResponse>;\n deleteRecommendedClassModel: (id: string) => Promise<void>;\n onCreateLesson: () => void;\n onCreateModel: () => void;\n onRowClick: (row: RecommendedClassTableItem) => void;\n onEditRecommendedClass: (id: string) => void;\n onEditModel: (model: RecommendedClassModelTableItem) => void;\n onSendLesson: (model: RecommendedClassModelTableItem) => void;\n fetchRecommendedClassDrafts: (\n filters?: RecommendedClassModelFilters\n ) => Promise<RecommendedClassModelsApiResponse>;\n deleteRecommendedClassDraft: (id: string) => Promise<void>;\n onSendDraft: (draft: RecommendedClassModelTableItem) => void;\n onEditDraft: (draft: RecommendedClassModelTableItem) => void;\n emptyStateImage: string;\n noSearchImage: string;\n mapSubjectNameToEnum: (subjectName: string) => SubjectEnum | null;\n userFilterData: {\n schools: Array<{ id: string; name: string }>;\n classes: Array<{ id: string; name: string }>;\n subjects: Array<{ id: string; name: string }>;\n };\n subjectsMap: Map<string, string>;\n title: string;\n createButtonText: string;\n searchPlaceholder: string;\n };\n /** Props for SendLessonModal component */\n modalProps: {\n isOpen: boolean;\n onClose: () => void;\n onSubmit: (formData: SendLessonFormData) => Promise<void>;\n categories: CategoryConfig[];\n onCategoriesChange: (categories: CategoryConfig[]) => void;\n isLoading: boolean;\n modalTitle: string | undefined;\n };\n /** Navigate function for custom tab handlers */\n navigate: (path: string, options?: { state?: unknown }) => void;\n}\n\n/**\n * Build query parameters from filter object\n */\nconst buildQueryParams = (\n filters?: Record<string, unknown>\n): Record<string, unknown> => {\n if (!filters) return {};\n\n const params: Record<string, unknown> = {};\n for (const key in filters) {\n const value = filters[key];\n if (value !== undefined && value !== null) {\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n params[key] = value;\n }\n }\n }\n return params;\n};\n\n/**\n * Get school options from user data\n */\nconst getSchoolOptions = (\n userData: RecommendedLessonsUserData | null\n): Array<{ id: string; name: string }> => {\n if (!userData?.userInstitutions) return [];\n\n const schoolMap = new Map<string, string>();\n userData.userInstitutions.forEach((inst) => {\n if (inst.school?.id && inst.school?.name) {\n schoolMap.set(inst.school.id, inst.school.name);\n }\n });\n\n return Array.from(schoolMap.entries()).map(([id, name]) => ({ id, name }));\n};\n\n/**\n * Get class options from user data\n */\nconst getClassOptions = (\n userData: RecommendedLessonsUserData | null\n): Array<{ id: string; name: string }> => {\n if (!userData?.userInstitutions) return [];\n\n const classMap = new Map<string, string>();\n userData.userInstitutions.forEach((inst) => {\n if (inst.class?.id && inst.class?.name) {\n classMap.set(inst.class.id, inst.class.name);\n }\n });\n\n return Array.from(classMap.entries()).map(([id, name]) => ({ id, name }));\n};\n\n/**\n * Get subject options from user data\n */\nconst getSubjectOptions = (\n userData: RecommendedLessonsUserData | null\n): Array<{ id: string; name: string }> => {\n if (!userData?.subTeacherTopicClasses) return [];\n\n const subjectMap = new Map<string, string>();\n userData.subTeacherTopicClasses.forEach((stc) => {\n if (stc.subject?.id && stc.subject?.name) {\n subjectMap.set(stc.subject.id, stc.subject.name);\n }\n });\n\n return Array.from(subjectMap.entries()).map(([id, name]) => ({ id, name }));\n};\n\n/**\n * Factory function to create useRecommendedLessonsPage hook\n *\n * @param config - Configuration object with API client, navigation, user data, paths, etc.\n * @returns Hook function that returns historyProps, modalProps, and navigate\n *\n * @example\n * ```tsx\n * // In your app setup\n * const useRecommendedLessonsPage = createUseRecommendedLessonsPage({\n * api,\n * navigate,\n * userData,\n * paths: {\n * createLesson: '/criar-aula',\n * createModel: '/criar-aula?mode=model',\n * lessonDetails: '/aulas-recomendadas',\n * editLesson: '/aulas-recomendadas',\n * editModel: '/criar-aula?mode=model&id=',\n * },\n * endpoints: {\n * recommendedClassHistory: '/recommended-class/history',\n * recommendedClassDrafts: '/recommended-class/drafts',\n * submitRecommendedClass: '/recommendedClass',\n * },\n * texts: {\n * title: 'Histórico de aulas recomendadas',\n * createButtonText: 'Criar aula',\n * searchPlaceholder: 'Buscar aula',\n * },\n * emptyStateImage,\n * noSearchImage,\n * mapSubjectNameToEnum,\n * });\n *\n * // In your component\n * const { historyProps, modalProps, navigate } = useRecommendedLessonsPage();\n * ```\n */\nexport const createUseRecommendedLessonsPage = (\n config: UseRecommendedLessonsPageConfig\n): (() => UseRecommendedLessonsPageReturn) => {\n const {\n api,\n navigate,\n userData,\n paths,\n endpoints,\n texts,\n emptyStateImage,\n noSearchImage,\n mapSubjectNameToEnum,\n } = config;\n\n return (): UseRecommendedLessonsPageReturn => {\n // Store original recommendedClass data for navigation\n const recommendedClassMapRef = useRef<\n Map<string, RecommendedClassHistoryItem>\n >(new Map());\n\n // SendLessonModal state\n const [sendModalOpen, setSendModalOpen] = useState(false);\n const [selectedModel, setSelectedModel] =\n useState<RecommendedClassModelTableItem | null>(null);\n const [sendModalLoading, setSendModalLoading] = useState(false);\n const [sendModalCategories, setSendModalCategories] = useState<\n CategoryConfig[]\n >([]);\n\n // Build user filter data from user data\n const userFilterData = useMemo(\n () => ({\n schools: getSchoolOptions(userData),\n classes: getClassOptions(userData),\n subjects: getSubjectOptions(userData),\n }),\n [userData]\n );\n\n // Memoized subjects map for models display\n const subjectsMap = useMemo(() => {\n const map = new Map<string, string>();\n const subjects = getSubjectOptions(userData);\n subjects.forEach((s) => map.set(s.id, s.name));\n return map;\n }, [userData]);\n\n /**\n * Fetch recommendedClass history from API\n */\n const fetchRecommendedClassHistory = useCallback(\n async (\n filters?: RecommendedClassHistoryFilters\n ): Promise<RecommendedClassHistoryApiResponse> => {\n const params = buildQueryParams(filters as Record<string, unknown>);\n const response = await api.get<RecommendedClassHistoryApiResponse>(\n endpoints.recommendedClassHistory,\n { params }\n );\n\n // Store original recommendedClass data for later use in navigation\n const recommendedClass = response.data.data.recommendedClass;\n recommendedClass.forEach((recommendedClass) => {\n recommendedClassMapRef.current.set(\n recommendedClass.recommendedClass.id,\n recommendedClass\n );\n });\n\n return response.data;\n },\n [api, endpoints.recommendedClassHistory]\n );\n\n /**\n * Fetch recommendedClass models from API\n */\n const fetchRecommendedClassModels = useCallback(\n async (\n filters?: RecommendedClassModelFilters\n ): Promise<RecommendedClassModelsApiResponse> => {\n const params = buildQueryParams({\n ...filters,\n type: RecommendedClassDraftType.MODELO,\n } as Record<string, unknown>);\n const response = await api.get<RecommendedClassModelsApiResponse>(\n endpoints.recommendedClassDrafts,\n { params }\n );\n return response.data;\n },\n [api, endpoints.recommendedClassDrafts]\n );\n\n /**\n * Delete a recommendedClass model\n */\n const deleteRecommendedClassModel = useCallback(\n async (id: string): Promise<void> => {\n await api.delete(`${endpoints.recommendedClassDrafts}/${id}`);\n },\n [api, endpoints.recommendedClassDrafts]\n );\n\n /**\n * Fetch recommendedClass drafts from API\n */\n const fetchRecommendedClassDrafts = useCallback(\n async (\n filters?: RecommendedClassModelFilters\n ): Promise<RecommendedClassModelsApiResponse> => {\n const params = buildQueryParams({\n ...filters,\n type: RecommendedClassDraftType.RASCUNHO,\n } as Record<string, unknown>);\n const response = await api.get<RecommendedClassModelsApiResponse>(\n endpoints.recommendedClassDrafts,\n { params }\n );\n return response.data;\n },\n [api, endpoints.recommendedClassDrafts]\n );\n\n /**\n * Delete a recommendedClass draft\n */\n const deleteRecommendedClassDraft = useCallback(\n async (id: string): Promise<void> => {\n await api.delete(`${endpoints.recommendedClassDrafts}/${id}`);\n },\n [api, endpoints.recommendedClassDrafts]\n );\n\n /**\n * Handle create lesson button click\n */\n const handleCreateLesson = useCallback(() => {\n navigate(paths.createLesson);\n }, []);\n\n /**\n * Handle create model button click\n */\n const handleCreateModel = useCallback(() => {\n navigate(paths.createModel);\n }, []);\n\n /**\n * Handle row click - navigate to recommendedClass details\n */\n const handleRowClick = useCallback((row: RecommendedClassTableItem) => {\n const originalData = recommendedClassMapRef.current.get(row.id);\n navigate(`${paths.lessonDetails}/${row.id}`, {\n state: { recommendedClassData: originalData },\n });\n }, []);\n\n /**\n * Handle edit recommendedClass action\n */\n const handleEditRecommendedClass = useCallback((id: string) => {\n navigate(`${paths.editLesson}/${id}/editar`);\n }, []);\n\n /**\n * Handle edit model action\n */\n const handleEditModel = useCallback(\n (model: RecommendedClassModelTableItem) => {\n navigate(`${paths.editModel}${model.id}`);\n },\n []\n );\n\n /**\n * Handle send lesson button click - opens modal\n */\n const handleSendLesson = useCallback(\n (model: RecommendedClassModelTableItem) => {\n setSelectedModel(model);\n\n // Build categories from user data for CheckboxGroup\n const classes = getClassOptions(userData);\n const categories: CategoryConfig[] = [];\n\n if (classes.length > 0) {\n categories.push({\n key: 'students',\n label: 'Turmas',\n selectedIds: [],\n itens: classes.map((cls) => ({\n id: cls.id,\n name: cls.name,\n studentId: cls.id,\n userInstitutionId: cls.id,\n })),\n });\n }\n\n setSendModalCategories(categories);\n setSendModalOpen(true);\n },\n [userData]\n );\n\n /**\n * Handle send lesson modal submit\n */\n const handleSendLessonSubmit = useCallback(\n async (formData: SendLessonFormData) => {\n if (!selectedModel) return;\n\n setSendModalLoading(true);\n try {\n await api.post(endpoints.submitRecommendedClass, {\n draftId: selectedModel.id,\n students: formData.students,\n startDate: `${formData.startDate}T${formData.startTime}:00`,\n finalDate: `${formData.finalDate}T${formData.finalTime}:00`,\n });\n\n setSendModalOpen(false);\n setSelectedModel(null);\n } finally {\n setSendModalLoading(false);\n }\n },\n [api, endpoints.submitRecommendedClass, selectedModel]\n );\n\n /**\n * Handle send lesson modal close\n */\n const handleSendModalClose = useCallback(() => {\n setSendModalOpen(false);\n setSelectedModel(null);\n }, []);\n\n /**\n * Handle categories change in send modal\n */\n const handleCategoriesChange = useCallback(\n (categories: CategoryConfig[]) => {\n setSendModalCategories(categories);\n },\n []\n );\n\n return {\n historyProps: {\n fetchRecommendedClassHistory,\n fetchRecommendedClassModels,\n deleteRecommendedClassModel,\n onCreateLesson: handleCreateLesson,\n onCreateModel: handleCreateModel,\n onRowClick: handleRowClick,\n onEditRecommendedClass: handleEditRecommendedClass,\n onEditModel: handleEditModel,\n onSendLesson: handleSendLesson,\n fetchRecommendedClassDrafts,\n deleteRecommendedClassDraft,\n onSendDraft: handleSendLesson,\n onEditDraft: handleEditModel,\n emptyStateImage,\n noSearchImage,\n mapSubjectNameToEnum,\n userFilterData,\n subjectsMap,\n title: texts.title,\n createButtonText: texts.createButtonText,\n searchPlaceholder: texts.searchPlaceholder,\n },\n modalProps: {\n isOpen: sendModalOpen,\n onClose: handleSendModalClose,\n onSubmit: handleSendLessonSubmit,\n categories: sendModalCategories,\n onCategoriesChange: handleCategoriesChange,\n isLoading: sendModalLoading,\n modalTitle: selectedModel?.title,\n },\n navigate,\n };\n };\n};\n\n/**\n * Alias for createUseRecommendedLessonsPage\n */\nexport const createRecommendedLessonsPageHook = createUseRecommendedLessonsPage;\n"],"mappings":"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","names":["recommendedClass"]}
@@ -4,7 +4,7 @@
4
4
  * Factory function to create a hook for RecommendedLessons, LessonDrafts, and LessonModels pages.
5
5
  * Contains all common state, memos, and callbacks.
6
6
  */
7
- import { type GoalHistoryFilters, type GoalsHistoryApiResponse, type GoalTableItem, type GoalModelFilters, type GoalModelsApiResponse, type GoalModelTableItem } from '../types/recommendedLessons';
7
+ import { type RecommendedClassHistoryFilters, type RecommendedClassHistoryApiResponse, type RecommendedClassTableItem, type RecommendedClassModelFilters, type RecommendedClassModelsApiResponse, type RecommendedClassModelTableItem } from '../types/recommendedLessons';
8
8
  import type { SendLessonFormData, CategoryConfig } from '../components/SendLessonModal/types';
9
9
  import { SubjectEnum } from '../enums/SubjectEnum';
10
10
  /**
@@ -79,12 +79,12 @@ export interface RecommendedLessonsPagePaths {
79
79
  * API endpoints configuration
80
80
  */
81
81
  export interface RecommendedLessonsPageEndpoints {
82
- /** Endpoint for fetching goals history */
83
- goalsHistory: string;
84
- /** Endpoint for fetching goal models/drafts */
85
- goalDrafts: string;
86
- /** Endpoint for submitting a goal */
87
- submitGoal: string;
82
+ /** Endpoint for fetching recommendedClass history */
83
+ recommendedClassHistory: string;
84
+ /** Endpoint for fetching recommendedClass models/drafts */
85
+ recommendedClassDrafts: string;
86
+ /** Endpoint for submitting a recommendedClass */
87
+ submitRecommendedClass: string;
88
88
  }
89
89
  /**
90
90
  * UI text configuration
@@ -125,19 +125,19 @@ export interface UseRecommendedLessonsPageConfig {
125
125
  export interface UseRecommendedLessonsPageReturn {
126
126
  /** Props for RecommendedLessonsHistory component */
127
127
  historyProps: {
128
- fetchGoalsHistory: (filters?: GoalHistoryFilters) => Promise<GoalsHistoryApiResponse>;
129
- fetchGoalModels: (filters?: GoalModelFilters) => Promise<GoalModelsApiResponse>;
130
- deleteGoalModel: (id: string) => Promise<void>;
128
+ fetchRecommendedClassHistory: (filters?: RecommendedClassHistoryFilters) => Promise<RecommendedClassHistoryApiResponse>;
129
+ fetchRecommendedClassModels: (filters?: RecommendedClassModelFilters) => Promise<RecommendedClassModelsApiResponse>;
130
+ deleteRecommendedClassModel: (id: string) => Promise<void>;
131
131
  onCreateLesson: () => void;
132
132
  onCreateModel: () => void;
133
- onRowClick: (row: GoalTableItem) => void;
134
- onEditGoal: (id: string) => void;
135
- onEditModel: (model: GoalModelTableItem) => void;
136
- onSendLesson: (model: GoalModelTableItem) => void;
137
- fetchGoalDrafts: (filters?: GoalModelFilters) => Promise<GoalModelsApiResponse>;
138
- deleteGoalDraft: (id: string) => Promise<void>;
139
- onSendDraft: (draft: GoalModelTableItem) => void;
140
- onEditDraft: (draft: GoalModelTableItem) => void;
133
+ onRowClick: (row: RecommendedClassTableItem) => void;
134
+ onEditRecommendedClass: (id: string) => void;
135
+ onEditModel: (model: RecommendedClassModelTableItem) => void;
136
+ onSendLesson: (model: RecommendedClassModelTableItem) => void;
137
+ fetchRecommendedClassDrafts: (filters?: RecommendedClassModelFilters) => Promise<RecommendedClassModelsApiResponse>;
138
+ deleteRecommendedClassDraft: (id: string) => Promise<void>;
139
+ onSendDraft: (draft: RecommendedClassModelTableItem) => void;
140
+ onEditDraft: (draft: RecommendedClassModelTableItem) => void;
141
141
  emptyStateImage: string;
142
142
  noSearchImage: string;
143
143
  mapSubjectNameToEnum: (subjectName: string) => SubjectEnum | null;
@@ -196,9 +196,9 @@ export interface UseRecommendedLessonsPageReturn {
196
196
  * editModel: '/criar-aula?mode=model&id=',
197
197
  * },
198
198
  * endpoints: {
199
- * goalsHistory: '/recommended-class/history',
200
- * goalDrafts: '/recommended-class/drafts',
201
- * submitGoal: '/goals',
199
+ * recommendedClassHistory: '/recommended-class/history',
200
+ * recommendedClassDrafts: '/recommended-class/drafts',
201
+ * submitRecommendedClass: '/recommendedClass',
202
202
  * },
203
203
  * texts: {
204
204
  * title: 'Histórico de aulas recomendadas',