analytica-frontend-lib 1.2.86 → 1.2.88
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.
- package/dist/ActivitiesHistory/index.js.map +1 -1
- package/dist/ActivitiesHistory/index.mjs.map +1 -1
- package/dist/NotificationCard/index.js +1 -1
- package/dist/NotificationCard/index.js.map +1 -1
- package/dist/NotificationCard/index.mjs +1 -1
- package/dist/NotificationCard/index.mjs.map +1 -1
- package/dist/QuestionsData/index.d.ts +26 -1
- package/dist/QuestionsData/index.d.ts.map +1 -1
- package/dist/QuestionsData/index.js.map +1 -1
- package/dist/QuestionsData/index.mjs.map +1 -1
- package/dist/RecommendedLessonsHistory/index.d.ts +1 -1
- package/dist/RecommendedLessonsHistory/index.d.ts.map +1 -1
- package/dist/RecommendedLessonsHistory/index.js +148 -142
- package/dist/RecommendedLessonsHistory/index.js.map +1 -1
- package/dist/RecommendedLessonsHistory/index.mjs +147 -141
- package/dist/RecommendedLessonsHistory/index.mjs.map +1 -1
- package/dist/StudentRanking/index.d.ts +33 -9
- package/dist/StudentRanking/index.d.ts.map +1 -1
- package/dist/StudentRanking/index.js.map +1 -1
- package/dist/StudentRanking/index.mjs.map +1 -1
- package/dist/hooks/useActivitiesHistory/index.js.map +1 -1
- package/dist/hooks/useActivitiesHistory/index.mjs.map +1 -1
- package/dist/hooks/useNotifications.d.ts +2 -2
- package/dist/hooks/useNotifications.d.ts.map +1 -1
- package/dist/hooks/useQuestionsData.d.ts +218 -0
- package/dist/hooks/useQuestionsData.d.ts.map +1 -0
- package/dist/hooks/useRecommendedClassDrafts/index.d.ts +57 -0
- package/dist/hooks/useRecommendedClassDrafts/index.d.ts.map +1 -0
- package/dist/hooks/{useGoalDrafts → useRecommendedClassDrafts}/index.js +40 -40
- package/dist/hooks/useRecommendedClassDrafts/index.js.map +1 -0
- package/dist/hooks/{useGoalDrafts → useRecommendedClassDrafts}/index.mjs +33 -33
- package/dist/hooks/useRecommendedClassDrafts/index.mjs.map +1 -0
- package/dist/hooks/useRecommendedClassDrafts.d.ts +57 -0
- package/dist/hooks/useRecommendedClassDrafts.d.ts.map +1 -0
- package/dist/hooks/{useGoalModels.d.ts → useRecommendedClassModels.d.ts} +32 -32
- package/dist/hooks/useRecommendedClassModels.d.ts.map +1 -0
- package/dist/hooks/useRecommendedLessonDetails.d.ts +44 -44
- package/dist/hooks/useRecommendedLessonDetails.d.ts.map +1 -1
- package/dist/hooks/useRecommendedLessons/index.d.ts +35 -35
- package/dist/hooks/useRecommendedLessons/index.d.ts.map +1 -1
- package/dist/hooks/useRecommendedLessons/index.js +41 -41
- package/dist/hooks/useRecommendedLessons/index.js.map +1 -1
- package/dist/hooks/useRecommendedLessons/index.mjs +37 -37
- package/dist/hooks/useRecommendedLessons/index.mjs.map +1 -1
- package/dist/hooks/useRecommendedLessons.d.ts +35 -35
- package/dist/hooks/useRecommendedLessons.d.ts.map +1 -1
- package/dist/hooks/useRecommendedLessonsPage/index.d.ts +21 -21
- package/dist/hooks/useRecommendedLessonsPage/index.d.ts.map +1 -1
- package/dist/hooks/useRecommendedLessonsPage/index.js +39 -33
- package/dist/hooks/useRecommendedLessonsPage/index.js.map +1 -1
- package/dist/hooks/useRecommendedLessonsPage/index.mjs +39 -33
- package/dist/hooks/useRecommendedLessonsPage/index.mjs.map +1 -1
- package/dist/hooks/useRecommendedLessonsPage.d.ts +21 -21
- package/dist/hooks/useRecommendedLessonsPage.d.ts.map +1 -1
- package/dist/hooks/useStudentsHighlight.d.ts +275 -0
- package/dist/hooks/useStudentsHighlight.d.ts.map +1 -0
- package/dist/index.d.ts +15 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +570 -351
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +516 -308
- package/dist/index.mjs.map +1 -1
- package/dist/store/notificationStore.d.ts.map +1 -1
- package/dist/types/activitiesHistory/index.js.map +1 -1
- package/dist/types/activitiesHistory/index.mjs.map +1 -1
- package/dist/types/common.d.ts +2 -2
- package/dist/types/notifications.d.ts +5 -5
- package/dist/types/notifications.d.ts.map +1 -1
- package/dist/types/recommendedLessons/index.d.ts +112 -112
- package/dist/types/recommendedLessons/index.d.ts.map +1 -1
- package/dist/types/recommendedLessons/index.js +25 -25
- package/dist/types/recommendedLessons/index.js.map +1 -1
- package/dist/types/recommendedLessons/index.mjs +17 -17
- package/dist/types/recommendedLessons/index.mjs.map +1 -1
- package/dist/types/recommendedLessons.d.ts +112 -112
- package/dist/types/recommendedLessons.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/hooks/useGoalDrafts/index.d.ts +0 -57
- package/dist/hooks/useGoalDrafts/index.d.ts.map +0 -1
- package/dist/hooks/useGoalDrafts/index.js.map +0 -1
- package/dist/hooks/useGoalDrafts/index.mjs.map +0 -1
- package/dist/hooks/useGoalDrafts.d.ts +0 -57
- package/dist/hooks/useGoalDrafts.d.ts.map +0 -1
- package/dist/hooks/useGoalModels.d.ts.map +0 -1
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
// src/hooks/
|
|
1
|
+
// src/hooks/useRecommendedClassDrafts.ts
|
|
2
2
|
import { useState as useState2, useCallback as useCallback2 } from "react";
|
|
3
3
|
|
|
4
|
-
// src/hooks/
|
|
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
|
|
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
|
|
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
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return
|
|
23
|
-
})(
|
|
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/
|
|
37
|
-
var
|
|
36
|
+
// src/hooks/useRecommendedClassModels.ts
|
|
37
|
+
var recommendedClassModelResponseSchema = z2.object({
|
|
38
38
|
id: z2.string().uuid(),
|
|
39
|
-
type: z2.nativeEnum(
|
|
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
|
|
49
|
+
var recommendedClassModelsApiResponseSchema = z2.object({
|
|
50
50
|
message: z2.string(),
|
|
51
51
|
data: z2.object({
|
|
52
|
-
drafts: z2.array(
|
|
52
|
+
drafts: z2.array(recommendedClassModelResponseSchema),
|
|
53
53
|
total: z2.number()
|
|
54
54
|
})
|
|
55
55
|
});
|
|
56
|
-
var
|
|
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
|
|
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/
|
|
72
|
-
var
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
95
|
-
const validatedData =
|
|
94
|
+
const responseData = await fetchRecommendedClassDrafts(filters);
|
|
95
|
+
const validatedData = recommendedClassModelsApiResponseSchema.parse(responseData);
|
|
96
96
|
const tableItems = validatedData.data.drafts.map(
|
|
97
|
-
(draft) =>
|
|
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 =
|
|
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
|
-
[
|
|
123
|
+
[fetchRecommendedClassDrafts]
|
|
124
124
|
);
|
|
125
125
|
const deleteModel = useCallback2(
|
|
126
126
|
async (id) => {
|
|
127
127
|
try {
|
|
128
|
-
await
|
|
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
|
-
[
|
|
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
|
|
144
|
+
var createRecommendedClassDraftsHook = createUseRecommendedClassDrafts;
|
|
145
145
|
export {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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 {
|
|
3
|
-
import type {
|
|
2
|
+
import { RecommendedClassDraftType } from '../types/recommendedLessons';
|
|
3
|
+
import type { RecommendedClassModelResponse, RecommendedClassModelTableItem, RecommendedClassModelsApiResponse, RecommendedClassModelFilters, RecommendedClassModelPagination } from '../types/recommendedLessons';
|
|
4
4
|
/**
|
|
5
|
-
* Zod schema for
|
|
5
|
+
* Zod schema for recommendedClass models API response validation
|
|
6
6
|
*/
|
|
7
|
-
export declare const
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
113
|
-
models:
|
|
112
|
+
export interface UseRecommendedClassModelsState {
|
|
113
|
+
models: RecommendedClassModelTableItem[];
|
|
114
114
|
loading: boolean;
|
|
115
115
|
error: string | null;
|
|
116
|
-
pagination:
|
|
116
|
+
pagination: RecommendedClassModelPagination;
|
|
117
117
|
}
|
|
118
118
|
/**
|
|
119
119
|
* Hook return type
|
|
120
120
|
*/
|
|
121
|
-
export interface
|
|
122
|
-
fetchModels: (filters?:
|
|
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
|
|
128
|
+
export declare const DEFAULT_RECOMMENDED_CLASS_MODELS_PAGINATION: RecommendedClassModelPagination;
|
|
129
129
|
/**
|
|
130
130
|
* Transform API response to table item format
|
|
131
|
-
* @param model -
|
|
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
|
|
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
|
|
140
|
+
export declare const handleRecommendedClassModelFetchError: (error: unknown) => string;
|
|
141
141
|
/**
|
|
142
|
-
* Factory function to create
|
|
142
|
+
* Factory function to create useRecommendedClassModels hook
|
|
143
143
|
*
|
|
144
|
-
* @param
|
|
145
|
-
* @param
|
|
146
|
-
* @returns Hook for managing
|
|
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
|
|
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
|
|
156
|
+
* const deleteRecommendedClassModel = async (id) => {
|
|
157
157
|
* await api.delete(`/recommended-class/drafts/${id}`);
|
|
158
158
|
* };
|
|
159
159
|
*
|
|
160
|
-
* const
|
|
160
|
+
* const useRecommendedClassModels = createUseRecommendedClassModels(fetchRecommendedClassModels, deleteRecommendedClassModel);
|
|
161
161
|
*
|
|
162
162
|
* // In your component
|
|
163
|
-
* const { models, loading, error, pagination, fetchModels, deleteModel } =
|
|
163
|
+
* const { models, loading, error, pagination, fetchModels, deleteModel } = useRecommendedClassModels();
|
|
164
164
|
* ```
|
|
165
165
|
*/
|
|
166
|
-
export declare const
|
|
166
|
+
export declare const createUseRecommendedClassModels: (fetchRecommendedClassModels: (filters?: RecommendedClassModelFilters) => Promise<RecommendedClassModelsApiResponse>, deleteRecommendedClassModel: (id: string) => Promise<void>) => () => UseRecommendedClassModelsReturn;
|
|
167
167
|
/**
|
|
168
|
-
* Alias for
|
|
168
|
+
* Alias for createUseRecommendedClassModels
|
|
169
169
|
*/
|
|
170
|
-
export declare const
|
|
171
|
-
//# sourceMappingURL=
|
|
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"}
|