analytica-frontend-lib 1.2.85 → 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 (76) 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 +14 -11
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +359 -288
  48. package/dist/index.js.map +1 -1
  49. package/dist/index.mjs +329 -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/lessonAvailability.d.ts +33 -0
  56. package/dist/types/lessonAvailability.d.ts.map +1 -0
  57. package/dist/types/notifications.d.ts +5 -5
  58. package/dist/types/notifications.d.ts.map +1 -1
  59. package/dist/types/recommendedLessons/index.d.ts +112 -112
  60. package/dist/types/recommendedLessons/index.d.ts.map +1 -1
  61. package/dist/types/recommendedLessons/index.js +25 -25
  62. package/dist/types/recommendedLessons/index.js.map +1 -1
  63. package/dist/types/recommendedLessons/index.mjs +17 -17
  64. package/dist/types/recommendedLessons/index.mjs.map +1 -1
  65. package/dist/types/recommendedLessons.d.ts +112 -112
  66. package/dist/types/recommendedLessons.d.ts.map +1 -1
  67. package/dist/utils/lessonAvailabilityUtils.d.ts +45 -0
  68. package/dist/utils/lessonAvailabilityUtils.d.ts.map +1 -0
  69. package/package.json +1 -1
  70. package/dist/hooks/useGoalDrafts/index.d.ts +0 -57
  71. package/dist/hooks/useGoalDrafts/index.d.ts.map +0 -1
  72. package/dist/hooks/useGoalDrafts/index.js.map +0 -1
  73. package/dist/hooks/useGoalDrafts/index.mjs.map +0 -1
  74. package/dist/hooks/useGoalDrafts.d.ts +0 -57
  75. package/dist/hooks/useGoalDrafts.d.ts.map +0 -1
  76. package/dist/hooks/useGoalModels.d.ts.map +0 -1
@@ -1,26 +1,26 @@
1
- // src/hooks/useGoalDrafts.ts
1
+ // src/hooks/useRecommendedClassDrafts.ts
2
2
  import { useState as useState2, useCallback as useCallback2 } from "react";
3
3
 
4
- // src/hooks/useGoalModels.ts
4
+ // src/hooks/useRecommendedClassModels.ts
5
5
  import { useState, useCallback } from "react";
6
6
  import { z as z2 } from "zod";
7
7
  import dayjs from "dayjs";
8
8
 
9
9
  // src/types/recommendedLessons.ts
10
- var GOAL_FILTER_STATUS_OPTIONS = [
10
+ var RECOMMENDED_CLASS_FILTER_STATUS_OPTIONS = [
11
11
  { id: "VENCIDA" /* VENCIDA */, name: "Vencida" },
12
12
  { id: "A_VENCER" /* A_VENCER */, name: "Ativa" }
13
13
  ];
14
- var GOAL_STATUS_OPTIONS = [
14
+ var RECOMMENDED_CLASS_STATUS_OPTIONS = [
15
15
  { id: "A_VENCER" /* A_VENCER */, name: "A Vencer" },
16
16
  { id: "VENCIDA" /* VENCIDA */, name: "Vencida" },
17
17
  { id: "CONCLUIDA" /* CONCLUIDA */, name: "Conclu\xEDda" }
18
18
  ];
19
- var GoalDraftType = /* @__PURE__ */ ((GoalDraftType2) => {
20
- GoalDraftType2["MODELO"] = "MODELO";
21
- GoalDraftType2["RASCUNHO"] = "RASCUNHO";
22
- return GoalDraftType2;
23
- })(GoalDraftType || {});
19
+ var RecommendedClassDraftType = /* @__PURE__ */ ((RecommendedClassDraftType2) => {
20
+ RecommendedClassDraftType2["MODELO"] = "MODELO";
21
+ RecommendedClassDraftType2["RASCUNHO"] = "RASCUNHO";
22
+ return RecommendedClassDraftType2;
23
+ })(RecommendedClassDraftType || {});
24
24
 
25
25
  // src/utils/hookErrorHandler.ts
26
26
  import { z } from "zod";
@@ -33,10 +33,10 @@ var createFetchErrorHandler = (validationErrorMessage, genericErrorMessage) => (
33
33
  return genericErrorMessage;
34
34
  };
35
35
 
36
- // src/hooks/useGoalModels.ts
37
- var goalModelResponseSchema = z2.object({
36
+ // src/hooks/useRecommendedClassModels.ts
37
+ var recommendedClassModelResponseSchema = z2.object({
38
38
  id: z2.string().uuid(),
39
- type: z2.nativeEnum(GoalDraftType),
39
+ type: z2.nativeEnum(RecommendedClassDraftType),
40
40
  title: z2.string(),
41
41
  description: z2.string().nullable(),
42
42
  creatorUserInstitutionId: z2.string().uuid(),
@@ -46,14 +46,14 @@ var goalModelResponseSchema = z2.object({
46
46
  createdAt: z2.string(),
47
47
  updatedAt: z2.string()
48
48
  });
49
- var goalModelsApiResponseSchema = z2.object({
49
+ var recommendedClassModelsApiResponseSchema = z2.object({
50
50
  message: z2.string(),
51
51
  data: z2.object({
52
- drafts: z2.array(goalModelResponseSchema),
52
+ drafts: z2.array(recommendedClassModelResponseSchema),
53
53
  total: z2.number()
54
54
  })
55
55
  });
56
- var transformGoalModelToTableItem = (model, subjectsMap) => {
56
+ var transformRecommendedClassModelToTableItem = (model, subjectsMap) => {
57
57
  const subjectName = model.subjectId ? subjectsMap?.get(model.subjectId) || "" : "";
58
58
  return {
59
59
  id: model.id,
@@ -63,38 +63,38 @@ var transformGoalModelToTableItem = (model, subjectsMap) => {
63
63
  subjectId: model.subjectId
64
64
  };
65
65
  };
66
- var handleGoalModelFetchError = createFetchErrorHandler(
66
+ var handleRecommendedClassModelFetchError = createFetchErrorHandler(
67
67
  "Erro ao validar dados de modelos de aulas",
68
68
  "Erro ao carregar modelos de aulas"
69
69
  );
70
70
 
71
- // src/hooks/useGoalDrafts.ts
72
- var DEFAULT_GOAL_DRAFTS_PAGINATION = {
71
+ // src/hooks/useRecommendedClassDrafts.ts
72
+ var DEFAULT_RECOMMENDED_CLASS_DRAFTS_PAGINATION = {
73
73
  total: 0,
74
74
  page: 1,
75
75
  limit: 10,
76
76
  totalPages: 0
77
77
  };
78
- var handleGoalDraftFetchError = createFetchErrorHandler(
78
+ var handleRecommendedClassDraftFetchError = createFetchErrorHandler(
79
79
  "Erro ao validar dados de rascunhos de aulas",
80
80
  "Erro ao carregar rascunhos de aulas"
81
81
  );
82
- var createUseGoalDrafts = (fetchGoalDrafts, deleteGoalDraft) => {
82
+ var createUseRecommendedClassDrafts = (fetchRecommendedClassDrafts, deleteRecommendedClassDraft) => {
83
83
  return () => {
84
84
  const [state, setState] = useState2({
85
85
  models: [],
86
86
  loading: false,
87
87
  error: null,
88
- pagination: DEFAULT_GOAL_DRAFTS_PAGINATION
88
+ pagination: DEFAULT_RECOMMENDED_CLASS_DRAFTS_PAGINATION
89
89
  });
90
90
  const fetchModels = useCallback2(
91
91
  async (filters, subjectsMap) => {
92
92
  setState((prev) => ({ ...prev, loading: true, error: null }));
93
93
  try {
94
- const responseData = await fetchGoalDrafts(filters);
95
- const validatedData = goalModelsApiResponseSchema.parse(responseData);
94
+ const responseData = await fetchRecommendedClassDrafts(filters);
95
+ const validatedData = recommendedClassModelsApiResponseSchema.parse(responseData);
96
96
  const tableItems = validatedData.data.drafts.map(
97
- (draft) => transformGoalModelToTableItem(draft, subjectsMap)
97
+ (draft) => transformRecommendedClassModelToTableItem(draft, subjectsMap)
98
98
  );
99
99
  const limit = filters?.limit || 10;
100
100
  const page = filters?.page || 1;
@@ -112,7 +112,7 @@ var createUseGoalDrafts = (fetchGoalDrafts, deleteGoalDraft) => {
112
112
  }
113
113
  });
114
114
  } catch (error) {
115
- const errorMessage = handleGoalDraftFetchError(error);
115
+ const errorMessage = handleRecommendedClassDraftFetchError(error);
116
116
  setState((prev) => ({
117
117
  ...prev,
118
118
  loading: false,
@@ -120,19 +120,19 @@ var createUseGoalDrafts = (fetchGoalDrafts, deleteGoalDraft) => {
120
120
  }));
121
121
  }
122
122
  },
123
- [fetchGoalDrafts]
123
+ [fetchRecommendedClassDrafts]
124
124
  );
125
125
  const deleteModel = useCallback2(
126
126
  async (id) => {
127
127
  try {
128
- await deleteGoalDraft(id);
128
+ await deleteRecommendedClassDraft(id);
129
129
  return true;
130
130
  } catch (error) {
131
131
  console.error("Erro ao deletar rascunho:", error);
132
132
  return false;
133
133
  }
134
134
  },
135
- [deleteGoalDraft]
135
+ [deleteRecommendedClassDraft]
136
136
  );
137
137
  return {
138
138
  ...state,
@@ -141,11 +141,11 @@ var createUseGoalDrafts = (fetchGoalDrafts, deleteGoalDraft) => {
141
141
  };
142
142
  };
143
143
  };
144
- var createGoalDraftsHook = createUseGoalDrafts;
144
+ var createRecommendedClassDraftsHook = createUseRecommendedClassDrafts;
145
145
  export {
146
- DEFAULT_GOAL_DRAFTS_PAGINATION,
147
- createGoalDraftsHook,
148
- createUseGoalDrafts,
149
- handleGoalDraftFetchError
146
+ DEFAULT_RECOMMENDED_CLASS_DRAFTS_PAGINATION,
147
+ createRecommendedClassDraftsHook,
148
+ createUseRecommendedClassDrafts,
149
+ handleRecommendedClassDraftFetchError
150
150
  };
151
151
  //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/useRecommendedClassDrafts.ts","../../../src/hooks/useRecommendedClassModels.ts","../../../src/types/recommendedLessons.ts","../../../src/utils/hookErrorHandler.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport {\n recommendedClassModelsApiResponseSchema,\n transformRecommendedClassModelToTableItem,\n} from './useRecommendedClassModels';\nimport { createFetchErrorHandler } from '../utils/hookErrorHandler';\nimport type {\n RecommendedClassModelTableItem,\n RecommendedClassModelsApiResponse,\n RecommendedClassModelFilters,\n RecommendedClassModelPagination,\n} from '../types/recommendedLessons';\n\n/**\n * Hook state interface for recommendedClass drafts\n */\nexport interface UseRecommendedClassDraftsState {\n models: RecommendedClassModelTableItem[];\n loading: boolean;\n error: string | null;\n pagination: RecommendedClassModelPagination;\n}\n\n/**\n * Hook return type for recommendedClass drafts\n */\nexport interface UseRecommendedClassDraftsReturn\n extends UseRecommendedClassDraftsState {\n fetchModels: (\n filters?: RecommendedClassModelFilters,\n subjectsMap?: Map<string, string>\n ) => Promise<void>;\n deleteModel: (id: string) => Promise<boolean>;\n}\n\n/**\n * Default pagination values for drafts\n */\nexport const DEFAULT_RECOMMENDED_CLASS_DRAFTS_PAGINATION: RecommendedClassModelPagination =\n {\n total: 0,\n page: 1,\n limit: 10,\n totalPages: 0,\n };\n\n/**\n * Handle errors during draft fetch\n * Uses the generic error handler factory to reduce code duplication\n */\nexport const handleRecommendedClassDraftFetchError = createFetchErrorHandler(\n 'Erro ao validar dados de rascunhos de aulas',\n 'Erro ao carregar rascunhos de aulas'\n);\n\n/**\n * Factory function to create useRecommendedClassDrafts hook\n *\n * @param fetchRecommendedClassDrafts - Function to fetch drafts from API\n * @param deleteRecommendedClassDraft - Function to delete a draft\n * @returns Hook for managing recommendedClass drafts\n *\n * @example\n * ```tsx\n * // In your app setup\n * const fetchRecommendedClassDrafts = async (filters) => {\n * const response = await api.get('/recommended-class/drafts', { params: { ...filters, type: 'RASCUNHO' } });\n * return response.data;\n * };\n *\n * const deleteRecommendedClassDraft = async (id) => {\n * await api.delete(`/recommended-class/drafts/${id}`);\n * };\n *\n * const useRecommendedClassDrafts = createUseRecommendedClassDrafts(fetchRecommendedClassDrafts, deleteRecommendedClassDraft);\n *\n * // In your component\n * const { models, loading, error, pagination, fetchModels, deleteModel } = useRecommendedClassDrafts();\n * ```\n */\nexport const createUseRecommendedClassDrafts = (\n fetchRecommendedClassDrafts: (\n filters?: RecommendedClassModelFilters\n ) => Promise<RecommendedClassModelsApiResponse>,\n deleteRecommendedClassDraft: (id: string) => Promise<void>\n) => {\n return (): UseRecommendedClassDraftsReturn => {\n const [state, setState] = useState<UseRecommendedClassDraftsState>({\n models: [],\n loading: false,\n error: null,\n pagination: DEFAULT_RECOMMENDED_CLASS_DRAFTS_PAGINATION,\n });\n\n /**\n * Fetch recommendedClass drafts from API\n * @param filters - Optional filters for pagination, search, etc.\n * @param subjectsMap - Map of subject IDs to subject names for display\n */\n const fetchModels = useCallback(\n async (\n filters?: RecommendedClassModelFilters,\n subjectsMap?: Map<string, string>\n ) => {\n setState((prev) => ({ ...prev, loading: true, error: null }));\n\n try {\n // Fetch data from API\n const responseData = await fetchRecommendedClassDrafts(filters);\n\n // Validate response with Zod\n const validatedData =\n recommendedClassModelsApiResponseSchema.parse(responseData);\n\n // Transform drafts to table format\n const tableItems = validatedData.data.drafts.map((draft) =>\n transformRecommendedClassModelToTableItem(draft, subjectsMap)\n );\n\n // Calculate pagination\n const limit = filters?.limit || 10;\n const page = filters?.page || 1;\n const total = validatedData.data.total;\n const totalPages = Math.ceil(total / limit);\n\n // Update state with validated and transformed data\n setState({\n models: tableItems,\n loading: false,\n error: null,\n pagination: {\n total,\n page,\n limit,\n totalPages,\n },\n });\n } catch (error) {\n const errorMessage = handleRecommendedClassDraftFetchError(error);\n setState((prev) => ({\n ...prev,\n loading: false,\n error: errorMessage,\n }));\n }\n },\n [fetchRecommendedClassDrafts]\n );\n\n /**\n * Delete a recommendedClass draft\n * @param id - Draft ID to delete\n * @returns True if deletion was successful\n */\n const deleteModel = useCallback(\n async (id: string): Promise<boolean> => {\n try {\n await deleteRecommendedClassDraft(id);\n return true;\n } catch (error) {\n console.error('Erro ao deletar rascunho:', error);\n return false;\n }\n },\n [deleteRecommendedClassDraft]\n );\n\n return {\n ...state,\n fetchModels,\n deleteModel,\n };\n };\n};\n\n/**\n * Alias for createUseRecommendedClassDrafts\n */\nexport const createRecommendedClassDraftsHook = createUseRecommendedClassDrafts;\n","import { useState, useCallback } from 'react';\nimport { z } from 'zod';\nimport dayjs from 'dayjs';\nimport { RecommendedClassDraftType } from '../types/recommendedLessons';\nimport type {\n RecommendedClassModelResponse,\n RecommendedClassModelTableItem,\n RecommendedClassModelsApiResponse,\n RecommendedClassModelFilters,\n RecommendedClassModelPagination,\n} from '../types/recommendedLessons';\nimport { createFetchErrorHandler } from '../utils/hookErrorHandler';\n\n/**\n * Zod schema for recommendedClass model response validation\n */\nconst recommendedClassModelResponseSchema = z.object({\n id: z.string().uuid(),\n type: z.nativeEnum(RecommendedClassDraftType),\n title: z.string(),\n description: z.string().nullable(),\n creatorUserInstitutionId: z.string().uuid(),\n subjectId: z.string().uuid().nullable(),\n startDate: z.string().nullable(),\n finalDate: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\n/**\n * Zod schema for recommendedClass models API response validation\n */\nexport const recommendedClassModelsApiResponseSchema = z.object({\n message: z.string(),\n data: z.object({\n drafts: z.array(recommendedClassModelResponseSchema),\n total: z.number(),\n }),\n});\n\n/**\n * Hook state interface\n */\nexport interface UseRecommendedClassModelsState {\n models: RecommendedClassModelTableItem[];\n loading: boolean;\n error: string | null;\n pagination: RecommendedClassModelPagination;\n}\n\n/**\n * Hook return type\n */\nexport interface UseRecommendedClassModelsReturn\n extends UseRecommendedClassModelsState {\n fetchModels: (\n filters?: RecommendedClassModelFilters,\n subjectsMap?: Map<string, string>\n ) => Promise<void>;\n deleteModel: (id: string) => Promise<boolean>;\n}\n\n/**\n * Default pagination values\n */\nexport const DEFAULT_RECOMMENDED_CLASS_MODELS_PAGINATION: RecommendedClassModelPagination =\n {\n total: 0,\n page: 1,\n limit: 10,\n totalPages: 0,\n };\n\n/**\n * Transform API response to table item format\n * @param model - RecommendedClass model from API response\n * @param subjectsMap - Map of subject IDs to subject names\n * @returns Formatted model for table display\n */\nexport const transformRecommendedClassModelToTableItem = (\n model: RecommendedClassModelResponse,\n subjectsMap?: Map<string, string>\n): RecommendedClassModelTableItem => {\n const subjectName = model.subjectId\n ? subjectsMap?.get(model.subjectId) || ''\n : '';\n\n return {\n id: model.id,\n title: model.title || 'Sem título',\n savedAt: dayjs(model.createdAt).format('DD/MM/YYYY'),\n subject: subjectName,\n subjectId: model.subjectId,\n };\n};\n\n/**\n * Handle errors during model fetch\n * Uses the generic error handler factory to reduce code duplication\n */\nexport const handleRecommendedClassModelFetchError = createFetchErrorHandler(\n 'Erro ao validar dados de modelos de aulas',\n 'Erro ao carregar modelos de aulas'\n);\n\n/**\n * Factory function to create useRecommendedClassModels hook\n *\n * @param fetchRecommendedClassModels - Function to fetch models from API\n * @param deleteRecommendedClassModel - Function to delete a model\n * @returns Hook for managing recommendedClass models\n *\n * @example\n * ```tsx\n * // In your app setup\n * const fetchRecommendedClassModels = async (filters) => {\n * const response = await api.get('/recommended-class/drafts', { params: { ...filters, type: 'MODELO' } });\n * return response.data;\n * };\n *\n * const deleteRecommendedClassModel = async (id) => {\n * await api.delete(`/recommended-class/drafts/${id}`);\n * };\n *\n * const useRecommendedClassModels = createUseRecommendedClassModels(fetchRecommendedClassModels, deleteRecommendedClassModel);\n *\n * // In your component\n * const { models, loading, error, pagination, fetchModels, deleteModel } = useRecommendedClassModels();\n * ```\n */\nexport const createUseRecommendedClassModels = (\n fetchRecommendedClassModels: (\n filters?: RecommendedClassModelFilters\n ) => Promise<RecommendedClassModelsApiResponse>,\n deleteRecommendedClassModel: (id: string) => Promise<void>\n) => {\n return (): UseRecommendedClassModelsReturn => {\n const [state, setState] = useState<UseRecommendedClassModelsState>({\n models: [],\n loading: false,\n error: null,\n pagination: DEFAULT_RECOMMENDED_CLASS_MODELS_PAGINATION,\n });\n\n /**\n * Fetch recommendedClass models from API\n * @param filters - Optional filters for pagination, search, etc.\n * @param subjectsMap - Map of subject IDs to subject names for display\n */\n const fetchModels = useCallback(\n async (\n filters?: RecommendedClassModelFilters,\n subjectsMap?: Map<string, string>\n ) => {\n setState((prev) => ({ ...prev, loading: true, error: null }));\n\n try {\n // Fetch data from API\n const responseData = await fetchRecommendedClassModels(filters);\n\n // Validate response with Zod\n const validatedData =\n recommendedClassModelsApiResponseSchema.parse(responseData);\n\n // Transform models to table format\n const tableItems = validatedData.data.drafts.map((model) =>\n transformRecommendedClassModelToTableItem(model, subjectsMap)\n );\n\n // Calculate pagination\n const limit = filters?.limit || 10;\n const page = filters?.page || 1;\n const total = validatedData.data.total;\n const totalPages = Math.ceil(total / limit);\n\n // Update state with validated and transformed data\n setState({\n models: tableItems,\n loading: false,\n error: null,\n pagination: {\n total,\n page,\n limit,\n totalPages,\n },\n });\n } catch (error) {\n const errorMessage = handleRecommendedClassModelFetchError(error);\n setState((prev) => ({\n ...prev,\n loading: false,\n error: errorMessage,\n }));\n }\n },\n [fetchRecommendedClassModels]\n );\n\n /**\n * Delete a recommendedClass model\n * @param id - Model ID to delete\n * @returns True if deletion was successful\n */\n const deleteModel = useCallback(\n async (id: string): Promise<boolean> => {\n try {\n await deleteRecommendedClassModel(id);\n return true;\n } catch (error) {\n console.error('Erro ao deletar modelo:', error);\n return false;\n }\n },\n [deleteRecommendedClassModel]\n );\n\n return {\n ...state,\n fetchModels,\n deleteModel,\n };\n };\n};\n\n/**\n * Alias for createUseRecommendedClassModels\n */\nexport const createRecommendedClassModelsHook = createUseRecommendedClassModels;\n","/**\n * Recommended Lessons / Recommended Class (Aulas Recomendadas) Type Definitions\n * Based on /recommended-class/history endpoint\n */\n\nimport {\n GenericApiStatus,\n GenericDisplayStatus,\n BadgeActionType,\n getStatusBadgeAction,\n} from './common';\n\n/**\n * Recommended Class status from backend API\n * Re-exported from common for backward compatibility\n */\nexport { GenericApiStatus as RecommendedClassApiStatus } from './common';\n\n/**\n * Recommended Class status for display in UI (Badge component)\n * Re-exported from common for backward compatibility\n */\nexport { GenericDisplayStatus as RecommendedClassDisplayStatus } from './common';\n\n/**\n * Badge action types for recommended class status visualization\n * Re-exported from common for backward compatibility\n */\nexport { BadgeActionType as RecommendedClassBadgeActionType } from './common';\n\n/**\n * Subject info from API response\n */\nexport interface RecommendedClassSubject {\n id: string;\n name: string;\n}\n\n/**\n * Creator info from API response\n */\nexport interface RecommendedClassCreator {\n id: string;\n name: string;\n}\n\n/**\n * Recommended Class stats from API response\n */\nexport interface RecommendedClassStats {\n totalStudents: number;\n completedCount: number;\n completionPercentage: number;\n}\n\n/**\n * Class breakdown info from API response\n */\nexport interface RecommendedClassBreakdown {\n classId: string;\n className: string;\n schoolId: string;\n schoolName: string;\n studentCount: number;\n completedCount: number;\n}\n\n/**\n * Recommended Class data from API response\n */\nexport interface RecommendedClassData {\n id: string;\n title: string;\n startDate: string | null;\n finalDate: string | null;\n createdAt: string;\n progress: number;\n totalLessons: number;\n}\n\n/**\n * Recommended Class history item from /recommended-class/history endpoint\n */\nexport interface RecommendedClassHistoryItem {\n recommendedClass: RecommendedClassData;\n subject: RecommendedClassSubject | null;\n creator: RecommendedClassCreator | null;\n stats: RecommendedClassStats;\n breakdown: RecommendedClassBreakdown[];\n}\n\n/**\n * Recommended Class table item interface for recommended class list table\n */\nexport interface RecommendedClassTableItem extends Record<string, unknown> {\n id: string;\n startDate: string | null;\n deadline: string | null;\n title: string;\n school: string;\n year: string;\n subject: string;\n class: string;\n status: GenericDisplayStatus;\n completionPercentage: number;\n}\n\n/**\n * Recommended Class history API complete response from /recommended-class/history\n */\nexport interface RecommendedClassHistoryApiResponse {\n message: string;\n data: {\n recommendedClass: RecommendedClassHistoryItem[];\n total: number;\n };\n}\n\n/**\n * Recommended Class history filters for API query parameters\n */\nexport interface RecommendedClassHistoryFilters {\n page?: number;\n limit?: number;\n status?: GenericApiStatus;\n search?: string;\n startDate?: string;\n finalDate?: string;\n subjectId?: string;\n schoolId?: string;\n schoolIds?: string[];\n classId?: string;\n classIds?: string[];\n studentIds?: string[];\n sortBy?: 'createdAt' | 'finalDate' | 'title' | 'completionPercentage';\n sortOrder?: 'asc' | 'desc';\n}\n\n/**\n * Pagination info for recommended class history\n */\nexport interface RecommendedClassHistoryPagination {\n total: number;\n page: number;\n limit: number;\n totalPages: number;\n}\n\n/**\n * Filter option for dropdowns\n * Extends with index signature to be compatible with CheckBoxGroup Item type\n */\nexport interface RecommendedClassFilterOption {\n id: string;\n name: string;\n [key: string]: unknown;\n}\n\n/**\n * User data for filter options (schools, classes, subjects)\n */\nexport interface RecommendedClassUserFilterData {\n schools?: Array<{ id: string; name: string }>;\n classes?: Array<{ id: string; name: string; schoolId?: string }>;\n subjects?: Array<{ id: string; name: string }>;\n schoolYears?: Array<{ id: string; name: string }>;\n}\n\n/**\n * Get status badge action based on recommended class display status\n * @param status - Recommended Class display status\n * @returns Badge action type for styling\n */\nexport const getRecommendedClassStatusBadgeAction = (\n status: GenericDisplayStatus\n): BadgeActionType => getStatusBadgeAction(status);\n\n/**\n * Recommended Class status options for filter (Vencida and Ativa)\n */\nexport const RECOMMENDED_CLASS_FILTER_STATUS_OPTIONS: RecommendedClassFilterOption[] =\n [\n { id: GenericApiStatus.VENCIDA, name: 'Vencida' },\n { id: GenericApiStatus.A_VENCER, name: 'Ativa' },\n ];\n\n/**\n * All recommended class status options\n */\nexport const RECOMMENDED_CLASS_STATUS_OPTIONS: RecommendedClassFilterOption[] =\n [\n { id: GenericApiStatus.A_VENCER, name: 'A Vencer' },\n { id: GenericApiStatus.VENCIDA, name: 'Vencida' },\n { id: GenericApiStatus.CONCLUIDA, name: 'Concluída' },\n ];\n\n// ============================================\n// Recommended Lesson Details Types\n// Based on /recommended class/{id} and /recommended class/{id}/details endpoints\n// ============================================\n\n/**\n * Student status for display in UI\n */\nexport enum StudentLessonStatus {\n A_INICIAR = 'A INICIAR',\n EM_ANDAMENTO = 'EM ANDAMENTO',\n NAO_FINALIZADO = 'NÃO FINALIZADO',\n CONCLUIDO = 'CONCLUÍDO',\n}\n\n/**\n * Badge action type for student status\n */\nexport const getStudentStatusBadgeAction = (\n status: StudentLessonStatus\n): 'success' | 'warning' | 'error' | 'info' => {\n const actionMap: Record<\n StudentLessonStatus,\n 'success' | 'warning' | 'error' | 'info'\n > = {\n [StudentLessonStatus.CONCLUIDO]: 'success',\n [StudentLessonStatus.EM_ANDAMENTO]: 'info',\n [StudentLessonStatus.A_INICIAR]: 'warning',\n [StudentLessonStatus.NAO_FINALIZADO]: 'error',\n };\n return actionMap[status] ?? 'warning';\n};\n\n/**\n * Checks if a deadline has passed\n * @param deadline - ISO date string of the deadline\n * @returns true if deadline has passed, false otherwise\n */\nexport const isDeadlinePassed = (deadline: string | null): boolean => {\n if (!deadline) return false;\n return new Date(deadline) < new Date();\n};\n\n/**\n * Derives student display status from progress, completedAt, and deadline\n * @param progress - Student progress percentage (0-100)\n * @param completedAt - ISO date string when student completed, or null\n * @param deadline - ISO date string of the recommended class deadline, or null\n * @returns The appropriate StudentLessonStatus\n */\nexport const deriveStudentStatus = (\n progress: number,\n completedAt: string | null,\n deadline?: string | null\n): StudentLessonStatus => {\n // If completed (either by completedAt or 100% progress), it's CONCLUIDO\n if (completedAt) return StudentLessonStatus.CONCLUIDO;\n if (progress === 100) return StudentLessonStatus.CONCLUIDO;\n\n // If deadline passed and not completed, it's NAO_FINALIZADO\n if (isDeadlinePassed(deadline ?? null) && progress < 100) {\n return StudentLessonStatus.NAO_FINALIZADO;\n }\n\n // Otherwise, derive from progress\n if (progress === 0) return StudentLessonStatus.A_INICIAR;\n if (progress > 0) return StudentLessonStatus.EM_ANDAMENTO;\n return StudentLessonStatus.A_INICIAR;\n};\n\n/**\n * Formats days to complete as a readable string\n */\nexport const formatDaysToComplete = (\n daysToComplete: number | null\n): string | null => {\n if (daysToComplete === null) return null;\n if (daysToComplete === 1) return '1 dia';\n return `${daysToComplete} dias`;\n};\n\n// ============================================\n// API Response Types - /recommended class/{id}/details\n// ============================================\n\n/**\n * Student data from /recommended class/{id}/details endpoint\n */\nexport interface RecommendedClassDetailStudent {\n userInstitutionId: string;\n userId: string;\n name: string;\n progress: number;\n completedAt: string | null;\n avgScore: number | null;\n daysToComplete: number | null;\n}\n\n/**\n * Aggregated stats from /recommended class/{id}/details endpoint\n */\nexport interface RecommendedClassDetailAggregated {\n completionPercentage: number;\n avgScore: number | null;\n}\n\n/**\n * Content performance item from /recommended class/{id}/details endpoint\n */\nexport interface RecommendedClassDetailContentPerformanceItem {\n contentId: string;\n contentName: string;\n rate: number;\n}\n\n/**\n * Content performance from /recommended class/{id}/details endpoint\n */\nexport interface RecommendedClassDetailContentPerformance {\n best: RecommendedClassDetailContentPerformanceItem | null;\n worst: RecommendedClassDetailContentPerformanceItem | null;\n}\n\n/**\n * Response data from /recommended class/{id}/details endpoint\n */\nexport interface RecommendedClassDetailsData {\n students: RecommendedClassDetailStudent[];\n aggregated: RecommendedClassDetailAggregated;\n contentPerformance: RecommendedClassDetailContentPerformance;\n}\n\n/**\n * Full API response from /recommended class/{id}/details endpoint\n */\nexport interface RecommendedClassDetailsApiResponse {\n message: string;\n data: RecommendedClassDetailsData;\n}\n\n// ============================================\n// Recommended Class Activity Types - /recommended class/{id} activities\n// ============================================\n\n/**\n * Activity status for recommended class activities\n * Used in activitiesRecommendedClass array from /recommended class/{id} endpoint\n */\nexport const RECOMMENDED_CLASS_ACTIVITY_STATUS = {\n PENDENTE: 'PENDENTE',\n CONCLUIDA: 'CONCLUIDA',\n EXPIRADA: 'EXPIRADA',\n} as const;\n\nexport type RecommendedClassActivityStatus =\n (typeof RECOMMENDED_CLASS_ACTIVITY_STATUS)[keyof typeof RECOMMENDED_CLASS_ACTIVITY_STATUS];\n\n/**\n * Activity details within a recommended class\n */\nexport interface RecommendedClassActivity {\n id: string;\n title: string;\n status: RecommendedClassActivityStatus;\n}\n\n/**\n * User activities within a recommended class\n */\nexport interface RecommendedClassSupUsersActivities {\n id: string;\n activity: RecommendedClassActivity;\n userInstitutionId: string;\n answeredAt: string | null;\n timeSpent: number;\n score: number | null;\n lastInteraction: string;\n}\n\n/**\n * Activities associated with a recommended class\n */\nexport interface RecommendedClassActivities {\n recommendedClassId: string;\n supUsersActivitiesId: string;\n supUsersActivities: RecommendedClassSupUsersActivities;\n}\n\n// ============================================\n// API Response Types - /recommended class/{id}\n// ============================================\n\n/**\n * Subject info from lesson in /recommended class/{id} response\n */\nexport interface RecommendedClassLessonSubject {\n id: string;\n name: string;\n color: string;\n icon: string;\n}\n\n/**\n * Lesson info from /recommended class/{id} response\n */\nexport interface RecommendedClassLesson {\n id: string;\n content: { id: string; name: string };\n subtopic: { id: string; name: string };\n topic: { id: string; name: string };\n subject: RecommendedClassLessonSubject;\n}\n\n/**\n * Lesson progress from /recommended class/{id} response\n */\nexport interface RecommendedClassLessonProgress {\n id: string;\n userId: string;\n lessonId: string;\n progress: number;\n lesson: RecommendedClassLesson;\n}\n\n/**\n * Lesson recommended class item from /recommended class/{id} response\n */\nexport interface RecommendedClassLessonsItem {\n recommendedClassId: string;\n supLessonsProgressId: string;\n supLessonsProgress: RecommendedClassLessonProgress;\n}\n\n/**\n * Recommended Class metadata from /recommended class/{id} endpoint\n */\nexport interface RecommendedClassMetadata {\n id: string;\n title: string;\n startDate: string;\n finalDate: string;\n progress: number;\n lessons: RecommendedClassLessonsItem[];\n activities?: RecommendedClassActivities[];\n}\n\n/**\n * Full API response from /recommended class/{id} endpoint\n */\nexport interface RecommendedClassApiResponse {\n message: string;\n data: RecommendedClassMetadata;\n}\n\n// ============================================\n// Combined Data for Component\n// ============================================\n\n/**\n * Combined data structure for RecommendedLessonDetails component\n * Combines data from /recommended class/{id}, /recommended class/{id}/details, and breakdown info\n */\nexport interface LessonDetailsData {\n /** Recommended Class metadata from /recommended class/{id} */\n recommendedClass: RecommendedClassMetadata;\n /** Details from /recommended class/{id}/details */\n details: RecommendedClassDetailsData;\n /** Optional breakdown info from /recommended-class/history */\n breakdown?: RecommendedClassBreakdown;\n}\n\n// ============================================\n// Recommended Class Draft/Model Types\n// Based on /recommended-class/drafts endpoint\n// ============================================\n\n/**\n * Recommended Class draft type enum - matches backend RECOMMENDED_CLASS_DRAFT_TYPE\n */\nexport enum RecommendedClassDraftType {\n MODELO = 'MODELO',\n RASCUNHO = 'RASCUNHO',\n}\n\n/**\n * Recommended Class model response from backend API /recommended-class/drafts\n */\nexport interface RecommendedClassModelResponse {\n id: string;\n type: RecommendedClassDraftType;\n title: string;\n description: string | null;\n creatorUserInstitutionId: string;\n subjectId: string | null;\n startDate: string | null;\n finalDate: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Recommended Class model table item for display in models table\n */\nexport interface RecommendedClassModelTableItem\n extends Record<string, unknown> {\n id: string;\n title: string;\n savedAt: string;\n subject: string;\n subjectId: string | null;\n}\n\n/**\n * Recommended Class models API complete response from /recommended-class/drafts\n */\nexport interface RecommendedClassModelsApiResponse {\n message: string;\n data: {\n drafts: RecommendedClassModelResponse[];\n total: number;\n };\n}\n\n/**\n * Recommended Class model filters for API query parameters\n */\nexport interface RecommendedClassModelFilters {\n page?: number;\n limit?: number;\n search?: string;\n subjectId?: string;\n type?: RecommendedClassDraftType;\n}\n\n/**\n * Pagination info for recommended class models\n */\nexport interface RecommendedClassModelPagination {\n total: number;\n page: number;\n limit: number;\n totalPages: number;\n}\n","import { z } from 'zod';\n\n/**\n * Factory function to create a fetch error handler\n * This reduces code duplication across data fetching hooks\n *\n * @param validationErrorMessage - Message to display for Zod validation errors\n * @param genericErrorMessage - Message to display for other errors\n * @returns Error handler function that returns appropriate error message\n *\n * @example\n * ```typescript\n * const handleFetchError = createFetchErrorHandler(\n * 'Erro ao validar dados',\n * 'Erro ao carregar dados'\n * );\n *\n * try {\n * // fetch data\n * } catch (error) {\n * const errorMessage = handleFetchError(error);\n * }\n * ```\n */\nexport const createFetchErrorHandler =\n (validationErrorMessage: string, genericErrorMessage: string) =>\n (error: unknown): string => {\n if (error instanceof z.ZodError) {\n console.error(validationErrorMessage, error);\n return validationErrorMessage;\n }\n\n console.error(genericErrorMessage, error);\n return genericErrorMessage;\n };\n"],"mappings":"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","names":["useState","useCallback","z","RecommendedClassDraftType","z","useState","useCallback"]}
@@ -0,0 +1,57 @@
1
+ import type { RecommendedClassModelTableItem, RecommendedClassModelsApiResponse, RecommendedClassModelFilters, RecommendedClassModelPagination } from '../types/recommendedLessons';
2
+ /**
3
+ * Hook state interface for recommendedClass drafts
4
+ */
5
+ export interface UseRecommendedClassDraftsState {
6
+ models: RecommendedClassModelTableItem[];
7
+ loading: boolean;
8
+ error: string | null;
9
+ pagination: RecommendedClassModelPagination;
10
+ }
11
+ /**
12
+ * Hook return type for recommendedClass drafts
13
+ */
14
+ export interface UseRecommendedClassDraftsReturn extends UseRecommendedClassDraftsState {
15
+ fetchModels: (filters?: RecommendedClassModelFilters, subjectsMap?: Map<string, string>) => Promise<void>;
16
+ deleteModel: (id: string) => Promise<boolean>;
17
+ }
18
+ /**
19
+ * Default pagination values for drafts
20
+ */
21
+ export declare const DEFAULT_RECOMMENDED_CLASS_DRAFTS_PAGINATION: RecommendedClassModelPagination;
22
+ /**
23
+ * Handle errors during draft fetch
24
+ * Uses the generic error handler factory to reduce code duplication
25
+ */
26
+ export declare const handleRecommendedClassDraftFetchError: (error: unknown) => string;
27
+ /**
28
+ * Factory function to create useRecommendedClassDrafts hook
29
+ *
30
+ * @param fetchRecommendedClassDrafts - Function to fetch drafts from API
31
+ * @param deleteRecommendedClassDraft - Function to delete a draft
32
+ * @returns Hook for managing recommendedClass drafts
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * // In your app setup
37
+ * const fetchRecommendedClassDrafts = async (filters) => {
38
+ * const response = await api.get('/recommended-class/drafts', { params: { ...filters, type: 'RASCUNHO' } });
39
+ * return response.data;
40
+ * };
41
+ *
42
+ * const deleteRecommendedClassDraft = async (id) => {
43
+ * await api.delete(`/recommended-class/drafts/${id}`);
44
+ * };
45
+ *
46
+ * const useRecommendedClassDrafts = createUseRecommendedClassDrafts(fetchRecommendedClassDrafts, deleteRecommendedClassDraft);
47
+ *
48
+ * // In your component
49
+ * const { models, loading, error, pagination, fetchModels, deleteModel } = useRecommendedClassDrafts();
50
+ * ```
51
+ */
52
+ export declare const createUseRecommendedClassDrafts: (fetchRecommendedClassDrafts: (filters?: RecommendedClassModelFilters) => Promise<RecommendedClassModelsApiResponse>, deleteRecommendedClassDraft: (id: string) => Promise<void>) => () => UseRecommendedClassDraftsReturn;
53
+ /**
54
+ * Alias for createUseRecommendedClassDrafts
55
+ */
56
+ export declare const createRecommendedClassDraftsHook: (fetchRecommendedClassDrafts: (filters?: RecommendedClassModelFilters) => Promise<RecommendedClassModelsApiResponse>, deleteRecommendedClassDraft: (id: string) => Promise<void>) => () => UseRecommendedClassDraftsReturn;
57
+ //# sourceMappingURL=useRecommendedClassDrafts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRecommendedClassDrafts.d.ts","sourceRoot":"","sources":["../../src/hooks/useRecommendedClassDrafts.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,8BAA8B,EAC9B,iCAAiC,EACjC,4BAA4B,EAC5B,+BAA+B,EAChC,MAAM,6BAA6B,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,8BAA8B,EAAE,CAAC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,+BAA+B,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,+BACf,SAAQ,8BAA8B;IACtC,WAAW,EAAE,CACX,OAAO,CAAC,EAAE,4BAA4B,EACtC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC9B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,eAAO,MAAM,2CAA2C,EAAE,+BAMvD,CAAC;AAEJ;;;GAGG;AACH,eAAO,MAAM,qCAAqC,4BAGjD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,+BAA+B,GAC1C,6BAA6B,CAC3B,OAAO,CAAC,EAAE,4BAA4B,KACnC,OAAO,CAAC,iCAAiC,CAAC,EAC/C,6BAA6B,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,WAE/C,+BAuFZ,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gCAAgC,gCAjGd,CAC3B,OAAO,CAAC,EAAE,4BAA4B,KACnC,OAAO,CAAC,iCAAiC,CAAC,+BAClB,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,WAE/C,+BA4FkE,CAAC"}
@@ -1,15 +1,15 @@
1
1
  import { z } from 'zod';
2
- import { GoalDraftType } from '../types/recommendedLessons';
3
- import type { GoalModelResponse, GoalModelTableItem, GoalModelsApiResponse, GoalModelFilters, GoalModelPagination } from '../types/recommendedLessons';
2
+ import { RecommendedClassDraftType } from '../types/recommendedLessons';
3
+ import type { RecommendedClassModelResponse, RecommendedClassModelTableItem, RecommendedClassModelsApiResponse, RecommendedClassModelFilters, RecommendedClassModelPagination } from '../types/recommendedLessons';
4
4
  /**
5
- * Zod schema for goal models API response validation
5
+ * Zod schema for recommendedClass models API response validation
6
6
  */
7
- export declare const goalModelsApiResponseSchema: z.ZodObject<{
7
+ export declare const recommendedClassModelsApiResponseSchema: z.ZodObject<{
8
8
  message: z.ZodString;
9
9
  data: z.ZodObject<{
10
10
  drafts: z.ZodArray<z.ZodObject<{
11
11
  id: z.ZodString;
12
- type: z.ZodNativeEnum<typeof GoalDraftType>;
12
+ type: z.ZodNativeEnum<typeof RecommendedClassDraftType>;
13
13
  title: z.ZodString;
14
14
  description: z.ZodNullable<z.ZodString>;
15
15
  creatorUserInstitutionId: z.ZodString;
@@ -20,7 +20,7 @@ export declare const goalModelsApiResponseSchema: z.ZodObject<{
20
20
  updatedAt: z.ZodString;
21
21
  }, "strip", z.ZodTypeAny, {
22
22
  id: string;
23
- type: GoalDraftType;
23
+ type: RecommendedClassDraftType;
24
24
  title: string;
25
25
  description: string | null;
26
26
  createdAt: string;
@@ -31,7 +31,7 @@ export declare const goalModelsApiResponseSchema: z.ZodObject<{
31
31
  creatorUserInstitutionId: string;
32
32
  }, {
33
33
  id: string;
34
- type: GoalDraftType;
34
+ type: RecommendedClassDraftType;
35
35
  title: string;
36
36
  description: string | null;
37
37
  createdAt: string;
@@ -46,7 +46,7 @@ export declare const goalModelsApiResponseSchema: z.ZodObject<{
46
46
  total: number;
47
47
  drafts: {
48
48
  id: string;
49
- type: GoalDraftType;
49
+ type: RecommendedClassDraftType;
50
50
  title: string;
51
51
  description: string | null;
52
52
  createdAt: string;
@@ -60,7 +60,7 @@ export declare const goalModelsApiResponseSchema: z.ZodObject<{
60
60
  total: number;
61
61
  drafts: {
62
62
  id: string;
63
- type: GoalDraftType;
63
+ type: RecommendedClassDraftType;
64
64
  title: string;
65
65
  description: string | null;
66
66
  createdAt: string;
@@ -76,7 +76,7 @@ export declare const goalModelsApiResponseSchema: z.ZodObject<{
76
76
  total: number;
77
77
  drafts: {
78
78
  id: string;
79
- type: GoalDraftType;
79
+ type: RecommendedClassDraftType;
80
80
  title: string;
81
81
  description: string | null;
82
82
  createdAt: string;
@@ -93,7 +93,7 @@ export declare const goalModelsApiResponseSchema: z.ZodObject<{
93
93
  total: number;
94
94
  drafts: {
95
95
  id: string;
96
- type: GoalDraftType;
96
+ type: RecommendedClassDraftType;
97
97
  title: string;
98
98
  description: string | null;
99
99
  createdAt: string;
@@ -109,63 +109,63 @@ export declare const goalModelsApiResponseSchema: z.ZodObject<{
109
109
  /**
110
110
  * Hook state interface
111
111
  */
112
- export interface UseGoalModelsState {
113
- models: GoalModelTableItem[];
112
+ export interface UseRecommendedClassModelsState {
113
+ models: RecommendedClassModelTableItem[];
114
114
  loading: boolean;
115
115
  error: string | null;
116
- pagination: GoalModelPagination;
116
+ pagination: RecommendedClassModelPagination;
117
117
  }
118
118
  /**
119
119
  * Hook return type
120
120
  */
121
- export interface UseGoalModelsReturn extends UseGoalModelsState {
122
- fetchModels: (filters?: GoalModelFilters, subjectsMap?: Map<string, string>) => Promise<void>;
121
+ export interface UseRecommendedClassModelsReturn extends UseRecommendedClassModelsState {
122
+ fetchModels: (filters?: RecommendedClassModelFilters, subjectsMap?: Map<string, string>) => Promise<void>;
123
123
  deleteModel: (id: string) => Promise<boolean>;
124
124
  }
125
125
  /**
126
126
  * Default pagination values
127
127
  */
128
- export declare const DEFAULT_GOAL_MODELS_PAGINATION: GoalModelPagination;
128
+ export declare const DEFAULT_RECOMMENDED_CLASS_MODELS_PAGINATION: RecommendedClassModelPagination;
129
129
  /**
130
130
  * Transform API response to table item format
131
- * @param model - Goal model from API response
131
+ * @param model - RecommendedClass model from API response
132
132
  * @param subjectsMap - Map of subject IDs to subject names
133
133
  * @returns Formatted model for table display
134
134
  */
135
- export declare const transformGoalModelToTableItem: (model: GoalModelResponse, subjectsMap?: Map<string, string>) => GoalModelTableItem;
135
+ export declare const transformRecommendedClassModelToTableItem: (model: RecommendedClassModelResponse, subjectsMap?: Map<string, string>) => RecommendedClassModelTableItem;
136
136
  /**
137
137
  * Handle errors during model fetch
138
138
  * Uses the generic error handler factory to reduce code duplication
139
139
  */
140
- export declare const handleGoalModelFetchError: (error: unknown) => string;
140
+ export declare const handleRecommendedClassModelFetchError: (error: unknown) => string;
141
141
  /**
142
- * Factory function to create useGoalModels hook
142
+ * Factory function to create useRecommendedClassModels hook
143
143
  *
144
- * @param fetchGoalModels - Function to fetch models from API
145
- * @param deleteGoalModel - Function to delete a model
146
- * @returns Hook for managing goal models
144
+ * @param fetchRecommendedClassModels - Function to fetch models from API
145
+ * @param deleteRecommendedClassModel - Function to delete a model
146
+ * @returns Hook for managing recommendedClass models
147
147
  *
148
148
  * @example
149
149
  * ```tsx
150
150
  * // In your app setup
151
- * const fetchGoalModels = async (filters) => {
151
+ * const fetchRecommendedClassModels = async (filters) => {
152
152
  * const response = await api.get('/recommended-class/drafts', { params: { ...filters, type: 'MODELO' } });
153
153
  * return response.data;
154
154
  * };
155
155
  *
156
- * const deleteGoalModel = async (id) => {
156
+ * const deleteRecommendedClassModel = async (id) => {
157
157
  * await api.delete(`/recommended-class/drafts/${id}`);
158
158
  * };
159
159
  *
160
- * const useGoalModels = createUseGoalModels(fetchGoalModels, deleteGoalModel);
160
+ * const useRecommendedClassModels = createUseRecommendedClassModels(fetchRecommendedClassModels, deleteRecommendedClassModel);
161
161
  *
162
162
  * // In your component
163
- * const { models, loading, error, pagination, fetchModels, deleteModel } = useGoalModels();
163
+ * const { models, loading, error, pagination, fetchModels, deleteModel } = useRecommendedClassModels();
164
164
  * ```
165
165
  */
166
- export declare const createUseGoalModels: (fetchGoalModels: (filters?: GoalModelFilters) => Promise<GoalModelsApiResponse>, deleteGoalModel: (id: string) => Promise<void>) => () => UseGoalModelsReturn;
166
+ export declare const createUseRecommendedClassModels: (fetchRecommendedClassModels: (filters?: RecommendedClassModelFilters) => Promise<RecommendedClassModelsApiResponse>, deleteRecommendedClassModel: (id: string) => Promise<void>) => () => UseRecommendedClassModelsReturn;
167
167
  /**
168
- * Alias for createUseGoalModels
168
+ * Alias for createUseRecommendedClassModels
169
169
  */
170
- export declare const createGoalModelsHook: (fetchGoalModels: (filters?: GoalModelFilters) => Promise<GoalModelsApiResponse>, deleteGoalModel: (id: string) => Promise<void>) => () => UseGoalModelsReturn;
171
- //# sourceMappingURL=useGoalModels.d.ts.map
170
+ export declare const createRecommendedClassModelsHook: (fetchRecommendedClassModels: (filters?: RecommendedClassModelFilters) => Promise<RecommendedClassModelsApiResponse>, deleteRecommendedClassModel: (id: string) => Promise<void>) => () => UseRecommendedClassModelsReturn;
171
+ //# sourceMappingURL=useRecommendedClassModels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRecommendedClassModels.d.ts","sourceRoot":"","sources":["../../src/hooks/useRecommendedClassModels.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EACV,6BAA6B,EAC7B,8BAA8B,EAC9B,iCAAiC,EACjC,4BAA4B,EAC5B,+BAA+B,EAChC,MAAM,6BAA6B,CAAC;AAmBrC;;GAEG;AACH,eAAO,MAAM,uCAAuC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMlD,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,8BAA8B,EAAE,CAAC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,+BAA+B,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,+BACf,SAAQ,8BAA8B;IACtC,WAAW,EAAE,CACX,OAAO,CAAC,EAAE,4BAA4B,EACtC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC9B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,eAAO,MAAM,2CAA2C,EAAE,+BAMvD,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,yCAAyC,GACpD,OAAO,6BAA6B,EACpC,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAChC,8BAYF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qCAAqC,4BAGjD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,+BAA+B,GAC1C,6BAA6B,CAC3B,OAAO,CAAC,EAAE,4BAA4B,KACnC,OAAO,CAAC,iCAAiC,CAAC,EAC/C,6BAA6B,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,WAE/C,+BAuFZ,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gCAAgC,gCAjGd,CAC3B,OAAO,CAAC,EAAE,4BAA4B,KACnC,OAAO,CAAC,iCAAiC,CAAC,+BAClB,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,WAE/C,+BA4FkE,CAAC"}