analytica-frontend-lib 1.2.86 → 1.2.87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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/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/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/index.d.ts +11 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +304 -288
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +278 -262
- 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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/useRecommendedLessons.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { z } from 'zod';\nimport dayjs from 'dayjs';\nimport { GoalDisplayStatus } from '../types/recommendedLessons';\nimport type {\n GoalHistoryItem,\n GoalTableItem,\n GoalsHistoryApiResponse,\n GoalHistoryFilters,\n GoalHistoryPagination,\n} from '../types/recommendedLessons';\n\n/**\n * Zod schema for goal history API response validation\n * Based on /recommended-class/history endpoint\n */\nconst goalSubjectSchema = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n })\n .nullable();\n\nconst goalCreatorSchema = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n })\n .nullable();\n\nconst goalStatsSchema = z.object({\n totalStudents: z.number(),\n completedCount: z.number(),\n completionPercentage: z.number(),\n});\n\nconst goalBreakdownSchema = z.object({\n classId: z.string().uuid(),\n className: z.string(),\n schoolId: z.string(),\n schoolName: z.string(),\n studentCount: z.number(),\n completedCount: z.number(),\n});\n\nconst goalDataSchema = z.object({\n id: z.string().uuid(),\n title: z.string(),\n startDate: z.string().nullable(),\n finalDate: z.string().nullable(),\n createdAt: z.string(),\n progress: z.number(),\n totalLessons: z.number(),\n});\n\nconst goalHistoryItemSchema = z.object({\n goal: goalDataSchema,\n subject: goalSubjectSchema,\n creator: goalCreatorSchema,\n stats: goalStatsSchema,\n breakdown: z.array(goalBreakdownSchema),\n});\n\nexport const goalsHistoryApiResponseSchema = z.object({\n message: z.string(),\n data: z.object({\n goals: z.array(goalHistoryItemSchema),\n total: z.number(),\n }),\n});\n\n/**\n * Hook state interface\n */\nexport interface UseRecommendedLessonsHistoryState {\n goals: GoalTableItem[];\n loading: boolean;\n error: string | null;\n pagination: GoalHistoryPagination;\n}\n\n/**\n * Hook return type\n */\nexport interface UseRecommendedLessonsHistoryReturn\n extends UseRecommendedLessonsHistoryState {\n fetchGoals: (filters?: GoalHistoryFilters) => Promise<void>;\n}\n\n/**\n * Determine status based on dates and completion\n * @param finalDate - Goal final date\n * @param completionPercentage - Completion percentage\n * @returns Display status for UI\n */\nexport const determineGoalStatus = (\n finalDate: string | null,\n completionPercentage: number\n): GoalDisplayStatus => {\n if (completionPercentage === 100) {\n return GoalDisplayStatus.CONCLUIDA;\n }\n\n if (finalDate) {\n const now = dayjs();\n const deadline = dayjs(finalDate);\n if (deadline.isBefore(now)) {\n return GoalDisplayStatus.VENCIDA;\n }\n }\n\n return GoalDisplayStatus.ATIVA;\n};\n\n/**\n * Transform API response to table item format\n * @param item - Goal history item from API response\n * @returns Formatted goal for table display\n */\nexport const transformGoalToTableItem = (\n item: GoalHistoryItem\n): GoalTableItem => {\n // Get first breakdown for school/class info (or aggregate)\n const firstBreakdown = item.breakdown[0];\n const schoolName = firstBreakdown?.schoolName || '-';\n const className = firstBreakdown?.className || '-';\n\n // If multiple classes, show count\n const classDisplay =\n item.breakdown.length > 1 ? `${item.breakdown.length} turmas` : className;\n\n return {\n id: item.goal.id,\n startDate: item.goal.startDate\n ? dayjs(item.goal.startDate).format('DD/MM')\n : '-',\n deadline: item.goal.finalDate\n ? dayjs(item.goal.finalDate).format('DD/MM')\n : '-',\n title: item.goal.title,\n school: schoolName,\n year: '-', // API doesn't provide year directly\n subject: item.subject?.name || '-',\n class: classDisplay,\n status: determineGoalStatus(\n item.goal.finalDate,\n item.stats.completionPercentage\n ),\n completionPercentage: item.stats.completionPercentage,\n };\n};\n\n/**\n * Handle errors during goal fetch\n * @param error - Error object\n * @returns Error message for UI display\n */\nexport const handleGoalFetchError = (error: unknown): string => {\n if (error instanceof z.ZodError) {\n console.error('Erro ao validar dados de histórico de aulas:', error);\n return 'Erro ao validar dados de histórico de aulas';\n }\n\n console.error('Erro ao carregar histórico de aulas:', error);\n return 'Erro ao carregar histórico de aulas';\n};\n\n/**\n * Factory function to create useRecommendedLessonsHistory hook\n *\n * @param fetchGoalsHistory - Function to fetch goals from API\n * @returns Hook for managing recommended lessons history\n *\n * @example\n * ```tsx\n * // In your app setup\n * const fetchGoalsHistory = async (filters) => {\n * const response = await api.get('/recommended-class/history', { params: filters });\n * return response.data;\n * };\n *\n * const useGoalsHistory = createUseRecommendedLessonsHistory(fetchGoalsHistory);\n *\n * // In your component\n * const { goals, loading, error, pagination, fetchGoals } = useGoalsHistory();\n * ```\n */\nexport const createUseRecommendedLessonsHistory = (\n fetchGoalsHistory: (\n filters?: GoalHistoryFilters\n ) => Promise<GoalsHistoryApiResponse>\n) => {\n return (): UseRecommendedLessonsHistoryReturn => {\n const [state, setState] = useState<UseRecommendedLessonsHistoryState>({\n goals: [],\n loading: false,\n error: null,\n pagination: {\n total: 0,\n page: 1,\n limit: 10,\n totalPages: 0,\n },\n });\n\n /**\n * Fetch goals history from API\n * @param filters - Optional filters for pagination, search, sorting, etc.\n */\n const fetchGoals = useCallback(\n async (filters?: GoalHistoryFilters) => {\n setState((prev) => ({ ...prev, loading: true, error: null }));\n\n try {\n // Fetch data from API\n const responseData = await fetchGoalsHistory(filters);\n\n // Validate response with Zod\n const validatedData =\n goalsHistoryApiResponseSchema.parse(responseData);\n\n // Transform goals to table format\n const tableItems = validatedData.data.goals.map(\n transformGoalToTableItem\n );\n\n // Calculate pagination from total\n const page = filters?.page || 1;\n const limit = filters?.limit || 10;\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 goals: 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 = handleGoalFetchError(error);\n setState((prev) => ({\n ...prev,\n loading: false,\n error: errorMessage,\n }));\n }\n },\n [fetchGoalsHistory]\n );\n\n return {\n ...state,\n fetchGoals,\n };\n };\n};\n\n/**\n * Alias for createUseRecommendedLessonsHistory\n */\nexport const createRecommendedLessonsHistoryHook =\n createUseRecommendedLessonsHistory;\n"],"mappings":"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","names":["dayjs"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/useRecommendedLessons.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { z } from 'zod';\nimport dayjs from 'dayjs';\nimport { RecommendedClassDisplayStatus } from '../types/recommendedLessons';\nimport type {\n RecommendedClassHistoryItem,\n RecommendedClassTableItem,\n RecommendedClassHistoryApiResponse,\n RecommendedClassHistoryFilters,\n RecommendedClassHistoryPagination,\n} from '../types/recommendedLessons';\n\n/**\n * Zod schema for recommendedClass history API response validation\n * Based on /recommended-class/history endpoint\n */\nconst recommendedClassSubjectSchema = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n })\n .nullable();\n\nconst recommendedClassCreatorSchema = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n })\n .nullable();\n\nconst recommendedClassStatsSchema = z.object({\n totalStudents: z.number(),\n completedCount: z.number(),\n completionPercentage: z.number(),\n});\n\nconst recommendedClassBreakdownSchema = z.object({\n classId: z.string().uuid(),\n className: z.string(),\n schoolId: z.string(),\n schoolName: z.string(),\n studentCount: z.number(),\n completedCount: z.number(),\n});\n\nconst recommendedClassDataSchema = z.object({\n id: z.string().uuid(),\n title: z.string(),\n startDate: z.string().nullable(),\n finalDate: z.string().nullable(),\n createdAt: z.string(),\n progress: z.number(),\n totalLessons: z.number(),\n});\n\nconst recommendedClassHistoryItemSchema = z.object({\n recommendedClass: recommendedClassDataSchema,\n subject: recommendedClassSubjectSchema,\n creator: recommendedClassCreatorSchema,\n stats: recommendedClassStatsSchema,\n breakdown: z.array(recommendedClassBreakdownSchema),\n});\n\nexport const recommendedClassHistoryApiResponseSchema = z.object({\n message: z.string(),\n data: z.object({\n recommendedClass: z.array(recommendedClassHistoryItemSchema),\n total: z.number(),\n }),\n});\n\n/**\n * Hook state interface\n */\nexport interface UseRecommendedLessonsHistoryState {\n recommendedClass: RecommendedClassTableItem[];\n loading: boolean;\n error: string | null;\n pagination: RecommendedClassHistoryPagination;\n}\n\n/**\n * Hook return type\n */\nexport interface UseRecommendedLessonsHistoryReturn\n extends UseRecommendedLessonsHistoryState {\n fetchRecommendedClass: (\n filters?: RecommendedClassHistoryFilters\n ) => Promise<void>;\n}\n\n/**\n * Determine status based on dates and completion\n * @param finalDate - RecommendedClass final date\n * @param completionPercentage - Completion percentage\n * @returns Display status for UI\n */\nexport const determineRecommendedClassStatus = (\n finalDate: string | null,\n completionPercentage: number\n): RecommendedClassDisplayStatus => {\n if (completionPercentage === 100) {\n return RecommendedClassDisplayStatus.CONCLUIDA;\n }\n\n if (finalDate) {\n const now = dayjs();\n const deadline = dayjs(finalDate);\n if (deadline.isBefore(now)) {\n return RecommendedClassDisplayStatus.VENCIDA;\n }\n }\n\n return RecommendedClassDisplayStatus.ATIVA;\n};\n\n/**\n * Transform API response to table item format\n * @param item - RecommendedClass history item from API response\n * @returns Formatted recommendedClass for table display\n */\nexport const transformRecommendedClassToTableItem = (\n item: RecommendedClassHistoryItem\n): RecommendedClassTableItem => {\n // Get first breakdown for school/class info (or aggregate)\n const firstBreakdown = item.breakdown[0];\n const schoolName = firstBreakdown?.schoolName || '-';\n const className = firstBreakdown?.className || '-';\n\n // If multiple classes, show count\n const classDisplay =\n item.breakdown.length > 1 ? `${item.breakdown.length} turmas` : className;\n\n return {\n id: item.recommendedClass.id,\n startDate: item.recommendedClass.startDate\n ? dayjs(item.recommendedClass.startDate).format('DD/MM')\n : '-',\n deadline: item.recommendedClass.finalDate\n ? dayjs(item.recommendedClass.finalDate).format('DD/MM')\n : '-',\n title: item.recommendedClass.title,\n school: schoolName,\n year: '-', // API doesn't provide year directly\n subject: item.subject?.name || '-',\n class: classDisplay,\n status: determineRecommendedClassStatus(\n item.recommendedClass.finalDate,\n item.stats.completionPercentage\n ),\n completionPercentage: item.stats.completionPercentage,\n };\n};\n\n/**\n * Handle errors during recommendedClass fetch\n * @param error - Error object\n * @returns Error message for UI display\n */\nexport const handleRecommendedClassFetchError = (error: unknown): string => {\n if (error instanceof z.ZodError) {\n console.error('Erro ao validar dados de histórico de aulas:', error);\n return 'Erro ao validar dados de histórico de aulas';\n }\n\n console.error('Erro ao carregar histórico de aulas:', error);\n return 'Erro ao carregar histórico de aulas';\n};\n\n/**\n * Factory function to create useRecommendedLessonsHistory hook\n *\n * @param fetchRecommendedClassHistory - Function to fetch recommendedClass from API\n * @returns Hook for managing recommended lessons history\n *\n * @example\n * ```tsx\n * // In your app setup\n * const fetchRecommendedClassHistory = async (filters) => {\n * const response = await api.get('/recommended-class/history', { params: filters });\n * return response.data;\n * };\n *\n * const useRecommendedClassHistory = createUseRecommendedLessonsHistory(fetchRecommendedClassHistory);\n *\n * // In your component\n * const { recommendedClass, loading, error, pagination, fetchRecommendedClass } = useRecommendedClassHistory();\n * ```\n */\nexport const createUseRecommendedLessonsHistory = (\n fetchRecommendedClassHistory: (\n filters?: RecommendedClassHistoryFilters\n ) => Promise<RecommendedClassHistoryApiResponse>\n) => {\n return (): UseRecommendedLessonsHistoryReturn => {\n const [state, setState] = useState<UseRecommendedLessonsHistoryState>({\n recommendedClass: [],\n loading: false,\n error: null,\n pagination: {\n total: 0,\n page: 1,\n limit: 10,\n totalPages: 0,\n },\n });\n\n /**\n * Fetch recommendedClass history from API\n * @param filters - Optional filters for pagination, search, sorting, etc.\n */\n const fetchRecommendedClass = useCallback(\n async (filters?: RecommendedClassHistoryFilters) => {\n setState((prev) => ({ ...prev, loading: true, error: null }));\n\n try {\n // Fetch data from API\n const responseData = await fetchRecommendedClassHistory(filters);\n\n // Validate response with Zod\n const validatedData =\n recommendedClassHistoryApiResponseSchema.parse(responseData);\n\n // Transform recommendedClass to table format\n const tableItems = validatedData.data.recommendedClass.map(\n transformRecommendedClassToTableItem\n );\n\n // Calculate pagination from total\n const page = filters?.page || 1;\n const limit = filters?.limit || 10;\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 recommendedClass: 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 = handleRecommendedClassFetchError(error);\n setState((prev) => ({\n ...prev,\n loading: false,\n error: errorMessage,\n }));\n }\n },\n [fetchRecommendedClassHistory]\n );\n\n return {\n ...state,\n fetchRecommendedClass,\n };\n };\n};\n\n/**\n * Alias for createUseRecommendedLessonsHistory\n */\nexport const createRecommendedLessonsHistoryHook =\n createUseRecommendedLessonsHistory;\n"],"mappings":"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","names":["dayjs"]}
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
import { useState, useCallback } from "react";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import dayjs from "dayjs";
|
|
5
|
-
var
|
|
5
|
+
var recommendedClassSubjectSchema = z.object({
|
|
6
6
|
id: z.string().uuid(),
|
|
7
7
|
name: z.string()
|
|
8
8
|
}).nullable();
|
|
9
|
-
var
|
|
9
|
+
var recommendedClassCreatorSchema = z.object({
|
|
10
10
|
id: z.string().uuid(),
|
|
11
11
|
name: z.string()
|
|
12
12
|
}).nullable();
|
|
13
|
-
var
|
|
13
|
+
var recommendedClassStatsSchema = z.object({
|
|
14
14
|
totalStudents: z.number(),
|
|
15
15
|
completedCount: z.number(),
|
|
16
16
|
completionPercentage: z.number()
|
|
17
17
|
});
|
|
18
|
-
var
|
|
18
|
+
var recommendedClassBreakdownSchema = z.object({
|
|
19
19
|
classId: z.string().uuid(),
|
|
20
20
|
className: z.string(),
|
|
21
21
|
schoolId: z.string(),
|
|
@@ -23,7 +23,7 @@ var goalBreakdownSchema = z.object({
|
|
|
23
23
|
studentCount: z.number(),
|
|
24
24
|
completedCount: z.number()
|
|
25
25
|
});
|
|
26
|
-
var
|
|
26
|
+
var recommendedClassDataSchema = z.object({
|
|
27
27
|
id: z.string().uuid(),
|
|
28
28
|
title: z.string(),
|
|
29
29
|
startDate: z.string().nullable(),
|
|
@@ -32,21 +32,21 @@ var goalDataSchema = z.object({
|
|
|
32
32
|
progress: z.number(),
|
|
33
33
|
totalLessons: z.number()
|
|
34
34
|
});
|
|
35
|
-
var
|
|
36
|
-
|
|
37
|
-
subject:
|
|
38
|
-
creator:
|
|
39
|
-
stats:
|
|
40
|
-
breakdown: z.array(
|
|
35
|
+
var recommendedClassHistoryItemSchema = z.object({
|
|
36
|
+
recommendedClass: recommendedClassDataSchema,
|
|
37
|
+
subject: recommendedClassSubjectSchema,
|
|
38
|
+
creator: recommendedClassCreatorSchema,
|
|
39
|
+
stats: recommendedClassStatsSchema,
|
|
40
|
+
breakdown: z.array(recommendedClassBreakdownSchema)
|
|
41
41
|
});
|
|
42
|
-
var
|
|
42
|
+
var recommendedClassHistoryApiResponseSchema = z.object({
|
|
43
43
|
message: z.string(),
|
|
44
44
|
data: z.object({
|
|
45
|
-
|
|
45
|
+
recommendedClass: z.array(recommendedClassHistoryItemSchema),
|
|
46
46
|
total: z.number()
|
|
47
47
|
})
|
|
48
48
|
});
|
|
49
|
-
var
|
|
49
|
+
var determineRecommendedClassStatus = (finalDate, completionPercentage) => {
|
|
50
50
|
if (completionPercentage === 100) {
|
|
51
51
|
return "CONCLU\xCDDA" /* CONCLUIDA */;
|
|
52
52
|
}
|
|
@@ -59,29 +59,29 @@ var determineGoalStatus = (finalDate, completionPercentage) => {
|
|
|
59
59
|
}
|
|
60
60
|
return "ATIVA" /* ATIVA */;
|
|
61
61
|
};
|
|
62
|
-
var
|
|
62
|
+
var transformRecommendedClassToTableItem = (item) => {
|
|
63
63
|
const firstBreakdown = item.breakdown[0];
|
|
64
64
|
const schoolName = firstBreakdown?.schoolName || "-";
|
|
65
65
|
const className = firstBreakdown?.className || "-";
|
|
66
66
|
const classDisplay = item.breakdown.length > 1 ? `${item.breakdown.length} turmas` : className;
|
|
67
67
|
return {
|
|
68
|
-
id: item.
|
|
69
|
-
startDate: item.
|
|
70
|
-
deadline: item.
|
|
71
|
-
title: item.
|
|
68
|
+
id: item.recommendedClass.id,
|
|
69
|
+
startDate: item.recommendedClass.startDate ? dayjs(item.recommendedClass.startDate).format("DD/MM") : "-",
|
|
70
|
+
deadline: item.recommendedClass.finalDate ? dayjs(item.recommendedClass.finalDate).format("DD/MM") : "-",
|
|
71
|
+
title: item.recommendedClass.title,
|
|
72
72
|
school: schoolName,
|
|
73
73
|
year: "-",
|
|
74
74
|
// API doesn't provide year directly
|
|
75
75
|
subject: item.subject?.name || "-",
|
|
76
76
|
class: classDisplay,
|
|
77
|
-
status:
|
|
78
|
-
item.
|
|
77
|
+
status: determineRecommendedClassStatus(
|
|
78
|
+
item.recommendedClass.finalDate,
|
|
79
79
|
item.stats.completionPercentage
|
|
80
80
|
),
|
|
81
81
|
completionPercentage: item.stats.completionPercentage
|
|
82
82
|
};
|
|
83
83
|
};
|
|
84
|
-
var
|
|
84
|
+
var handleRecommendedClassFetchError = (error) => {
|
|
85
85
|
if (error instanceof z.ZodError) {
|
|
86
86
|
console.error("Erro ao validar dados de hist\xF3rico de aulas:", error);
|
|
87
87
|
return "Erro ao validar dados de hist\xF3rico de aulas";
|
|
@@ -89,10 +89,10 @@ var handleGoalFetchError = (error) => {
|
|
|
89
89
|
console.error("Erro ao carregar hist\xF3rico de aulas:", error);
|
|
90
90
|
return "Erro ao carregar hist\xF3rico de aulas";
|
|
91
91
|
};
|
|
92
|
-
var createUseRecommendedLessonsHistory = (
|
|
92
|
+
var createUseRecommendedLessonsHistory = (fetchRecommendedClassHistory) => {
|
|
93
93
|
return () => {
|
|
94
94
|
const [state, setState] = useState({
|
|
95
|
-
|
|
95
|
+
recommendedClass: [],
|
|
96
96
|
loading: false,
|
|
97
97
|
error: null,
|
|
98
98
|
pagination: {
|
|
@@ -102,21 +102,21 @@ var createUseRecommendedLessonsHistory = (fetchGoalsHistory) => {
|
|
|
102
102
|
totalPages: 0
|
|
103
103
|
}
|
|
104
104
|
});
|
|
105
|
-
const
|
|
105
|
+
const fetchRecommendedClass = useCallback(
|
|
106
106
|
async (filters) => {
|
|
107
107
|
setState((prev) => ({ ...prev, loading: true, error: null }));
|
|
108
108
|
try {
|
|
109
|
-
const responseData = await
|
|
110
|
-
const validatedData =
|
|
111
|
-
const tableItems = validatedData.data.
|
|
112
|
-
|
|
109
|
+
const responseData = await fetchRecommendedClassHistory(filters);
|
|
110
|
+
const validatedData = recommendedClassHistoryApiResponseSchema.parse(responseData);
|
|
111
|
+
const tableItems = validatedData.data.recommendedClass.map(
|
|
112
|
+
transformRecommendedClassToTableItem
|
|
113
113
|
);
|
|
114
114
|
const page = filters?.page || 1;
|
|
115
115
|
const limit = filters?.limit || 10;
|
|
116
116
|
const total = validatedData.data.total;
|
|
117
117
|
const totalPages = Math.ceil(total / limit);
|
|
118
118
|
setState({
|
|
119
|
-
|
|
119
|
+
recommendedClass: tableItems,
|
|
120
120
|
loading: false,
|
|
121
121
|
error: null,
|
|
122
122
|
pagination: {
|
|
@@ -127,7 +127,7 @@ var createUseRecommendedLessonsHistory = (fetchGoalsHistory) => {
|
|
|
127
127
|
}
|
|
128
128
|
});
|
|
129
129
|
} catch (error) {
|
|
130
|
-
const errorMessage =
|
|
130
|
+
const errorMessage = handleRecommendedClassFetchError(error);
|
|
131
131
|
setState((prev) => ({
|
|
132
132
|
...prev,
|
|
133
133
|
loading: false,
|
|
@@ -135,11 +135,11 @@ var createUseRecommendedLessonsHistory = (fetchGoalsHistory) => {
|
|
|
135
135
|
}));
|
|
136
136
|
}
|
|
137
137
|
},
|
|
138
|
-
[
|
|
138
|
+
[fetchRecommendedClassHistory]
|
|
139
139
|
);
|
|
140
140
|
return {
|
|
141
141
|
...state,
|
|
142
|
-
|
|
142
|
+
fetchRecommendedClass
|
|
143
143
|
};
|
|
144
144
|
};
|
|
145
145
|
};
|
|
@@ -147,9 +147,9 @@ var createRecommendedLessonsHistoryHook = createUseRecommendedLessonsHistory;
|
|
|
147
147
|
export {
|
|
148
148
|
createRecommendedLessonsHistoryHook,
|
|
149
149
|
createUseRecommendedLessonsHistory,
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
150
|
+
determineRecommendedClassStatus,
|
|
151
|
+
handleRecommendedClassFetchError,
|
|
152
|
+
recommendedClassHistoryApiResponseSchema,
|
|
153
|
+
transformRecommendedClassToTableItem
|
|
154
154
|
};
|
|
155
155
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/useRecommendedLessons.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { z } from 'zod';\nimport dayjs from 'dayjs';\nimport { GoalDisplayStatus } from '../types/recommendedLessons';\nimport type {\n GoalHistoryItem,\n GoalTableItem,\n GoalsHistoryApiResponse,\n GoalHistoryFilters,\n GoalHistoryPagination,\n} from '../types/recommendedLessons';\n\n/**\n * Zod schema for goal history API response validation\n * Based on /recommended-class/history endpoint\n */\nconst goalSubjectSchema = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n })\n .nullable();\n\nconst goalCreatorSchema = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n })\n .nullable();\n\nconst goalStatsSchema = z.object({\n totalStudents: z.number(),\n completedCount: z.number(),\n completionPercentage: z.number(),\n});\n\nconst goalBreakdownSchema = z.object({\n classId: z.string().uuid(),\n className: z.string(),\n schoolId: z.string(),\n schoolName: z.string(),\n studentCount: z.number(),\n completedCount: z.number(),\n});\n\nconst goalDataSchema = z.object({\n id: z.string().uuid(),\n title: z.string(),\n startDate: z.string().nullable(),\n finalDate: z.string().nullable(),\n createdAt: z.string(),\n progress: z.number(),\n totalLessons: z.number(),\n});\n\nconst goalHistoryItemSchema = z.object({\n goal: goalDataSchema,\n subject: goalSubjectSchema,\n creator: goalCreatorSchema,\n stats: goalStatsSchema,\n breakdown: z.array(goalBreakdownSchema),\n});\n\nexport const goalsHistoryApiResponseSchema = z.object({\n message: z.string(),\n data: z.object({\n goals: z.array(goalHistoryItemSchema),\n total: z.number(),\n }),\n});\n\n/**\n * Hook state interface\n */\nexport interface UseRecommendedLessonsHistoryState {\n goals: GoalTableItem[];\n loading: boolean;\n error: string | null;\n pagination: GoalHistoryPagination;\n}\n\n/**\n * Hook return type\n */\nexport interface UseRecommendedLessonsHistoryReturn\n extends UseRecommendedLessonsHistoryState {\n fetchGoals: (filters?: GoalHistoryFilters) => Promise<void>;\n}\n\n/**\n * Determine status based on dates and completion\n * @param finalDate - Goal final date\n * @param completionPercentage - Completion percentage\n * @returns Display status for UI\n */\nexport const determineGoalStatus = (\n finalDate: string | null,\n completionPercentage: number\n): GoalDisplayStatus => {\n if (completionPercentage === 100) {\n return GoalDisplayStatus.CONCLUIDA;\n }\n\n if (finalDate) {\n const now = dayjs();\n const deadline = dayjs(finalDate);\n if (deadline.isBefore(now)) {\n return GoalDisplayStatus.VENCIDA;\n }\n }\n\n return GoalDisplayStatus.ATIVA;\n};\n\n/**\n * Transform API response to table item format\n * @param item - Goal history item from API response\n * @returns Formatted goal for table display\n */\nexport const transformGoalToTableItem = (\n item: GoalHistoryItem\n): GoalTableItem => {\n // Get first breakdown for school/class info (or aggregate)\n const firstBreakdown = item.breakdown[0];\n const schoolName = firstBreakdown?.schoolName || '-';\n const className = firstBreakdown?.className || '-';\n\n // If multiple classes, show count\n const classDisplay =\n item.breakdown.length > 1 ? `${item.breakdown.length} turmas` : className;\n\n return {\n id: item.goal.id,\n startDate: item.goal.startDate\n ? dayjs(item.goal.startDate).format('DD/MM')\n : '-',\n deadline: item.goal.finalDate\n ? dayjs(item.goal.finalDate).format('DD/MM')\n : '-',\n title: item.goal.title,\n school: schoolName,\n year: '-', // API doesn't provide year directly\n subject: item.subject?.name || '-',\n class: classDisplay,\n status: determineGoalStatus(\n item.goal.finalDate,\n item.stats.completionPercentage\n ),\n completionPercentage: item.stats.completionPercentage,\n };\n};\n\n/**\n * Handle errors during goal fetch\n * @param error - Error object\n * @returns Error message for UI display\n */\nexport const handleGoalFetchError = (error: unknown): string => {\n if (error instanceof z.ZodError) {\n console.error('Erro ao validar dados de histórico de aulas:', error);\n return 'Erro ao validar dados de histórico de aulas';\n }\n\n console.error('Erro ao carregar histórico de aulas:', error);\n return 'Erro ao carregar histórico de aulas';\n};\n\n/**\n * Factory function to create useRecommendedLessonsHistory hook\n *\n * @param fetchGoalsHistory - Function to fetch goals from API\n * @returns Hook for managing recommended lessons history\n *\n * @example\n * ```tsx\n * // In your app setup\n * const fetchGoalsHistory = async (filters) => {\n * const response = await api.get('/recommended-class/history', { params: filters });\n * return response.data;\n * };\n *\n * const useGoalsHistory = createUseRecommendedLessonsHistory(fetchGoalsHistory);\n *\n * // In your component\n * const { goals, loading, error, pagination, fetchGoals } = useGoalsHistory();\n * ```\n */\nexport const createUseRecommendedLessonsHistory = (\n fetchGoalsHistory: (\n filters?: GoalHistoryFilters\n ) => Promise<GoalsHistoryApiResponse>\n) => {\n return (): UseRecommendedLessonsHistoryReturn => {\n const [state, setState] = useState<UseRecommendedLessonsHistoryState>({\n goals: [],\n loading: false,\n error: null,\n pagination: {\n total: 0,\n page: 1,\n limit: 10,\n totalPages: 0,\n },\n });\n\n /**\n * Fetch goals history from API\n * @param filters - Optional filters for pagination, search, sorting, etc.\n */\n const fetchGoals = useCallback(\n async (filters?: GoalHistoryFilters) => {\n setState((prev) => ({ ...prev, loading: true, error: null }));\n\n try {\n // Fetch data from API\n const responseData = await fetchGoalsHistory(filters);\n\n // Validate response with Zod\n const validatedData =\n goalsHistoryApiResponseSchema.parse(responseData);\n\n // Transform goals to table format\n const tableItems = validatedData.data.goals.map(\n transformGoalToTableItem\n );\n\n // Calculate pagination from total\n const page = filters?.page || 1;\n const limit = filters?.limit || 10;\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 goals: 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 = handleGoalFetchError(error);\n setState((prev) => ({\n ...prev,\n loading: false,\n error: errorMessage,\n }));\n }\n },\n [fetchGoalsHistory]\n );\n\n return {\n ...state,\n fetchGoals,\n };\n };\n};\n\n/**\n * Alias for createUseRecommendedLessonsHistory\n */\nexport const createRecommendedLessonsHistoryHook =\n createUseRecommendedLessonsHistory;\n"],"mappings":";AAAA,SAAS,UAAU,mBAAmB;AACtC,SAAS,SAAS;AAClB,OAAO,WAAW;AAclB,IAAM,oBAAoB,EACvB,OAAO;AAAA,EACN,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,EACpB,MAAM,EAAE,OAAO;AACjB,CAAC,EACA,SAAS;AAEZ,IAAM,oBAAoB,EACvB,OAAO;AAAA,EACN,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,EACpB,MAAM,EAAE,OAAO;AACjB,CAAC,EACA,SAAS;AAEZ,IAAM,kBAAkB,EAAE,OAAO;AAAA,EAC/B,eAAe,EAAE,OAAO;AAAA,EACxB,gBAAgB,EAAE,OAAO;AAAA,EACzB,sBAAsB,EAAE,OAAO;AACjC,CAAC;AAED,IAAM,sBAAsB,EAAE,OAAO;AAAA,EACnC,SAAS,EAAE,OAAO,EAAE,KAAK;AAAA,EACzB,WAAW,EAAE,OAAO;AAAA,EACpB,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY,EAAE,OAAO;AAAA,EACrB,cAAc,EAAE,OAAO;AAAA,EACvB,gBAAgB,EAAE,OAAO;AAC3B,CAAC;AAED,IAAM,iBAAiB,EAAE,OAAO;AAAA,EAC9B,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,EACpB,OAAO,EAAE,OAAO;AAAA,EAChB,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAW,EAAE,OAAO;AAAA,EACpB,UAAU,EAAE,OAAO;AAAA,EACnB,cAAc,EAAE,OAAO;AACzB,CAAC;AAED,IAAM,wBAAwB,EAAE,OAAO;AAAA,EACrC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW,EAAE,MAAM,mBAAmB;AACxC,CAAC;AAEM,IAAM,gCAAgC,EAAE,OAAO;AAAA,EACpD,SAAS,EAAE,OAAO;AAAA,EAClB,MAAM,EAAE,OAAO;AAAA,IACb,OAAO,EAAE,MAAM,qBAAqB;AAAA,IACpC,OAAO,EAAE,OAAO;AAAA,EAClB,CAAC;AACH,CAAC;AA0BM,IAAM,sBAAsB,CACjC,WACA,yBACsB;AACtB,MAAI,yBAAyB,KAAK;AAChC;AAAA,EACF;AAEA,MAAI,WAAW;AACb,UAAM,MAAM,MAAM;AAClB,UAAM,WAAW,MAAM,SAAS;AAChC,QAAI,SAAS,SAAS,GAAG,GAAG;AAC1B;AAAA,IACF;AAAA,EACF;AAEA;AACF;AAOO,IAAM,2BAA2B,CACtC,SACkB;AAElB,QAAM,iBAAiB,KAAK,UAAU,CAAC;AACvC,QAAM,aAAa,gBAAgB,cAAc;AACjD,QAAM,YAAY,gBAAgB,aAAa;AAG/C,QAAM,eACJ,KAAK,UAAU,SAAS,IAAI,GAAG,KAAK,UAAU,MAAM,YAAY;AAElE,SAAO;AAAA,IACL,IAAI,KAAK,KAAK;AAAA,IACd,WAAW,KAAK,KAAK,YACjB,MAAM,KAAK,KAAK,SAAS,EAAE,OAAO,OAAO,IACzC;AAAA,IACJ,UAAU,KAAK,KAAK,YAChB,MAAM,KAAK,KAAK,SAAS,EAAE,OAAO,OAAO,IACzC;AAAA,IACJ,OAAO,KAAK,KAAK;AAAA,IACjB,QAAQ;AAAA,IACR,MAAM;AAAA;AAAA,IACN,SAAS,KAAK,SAAS,QAAQ;AAAA,IAC/B,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,KAAK,KAAK;AAAA,MACV,KAAK,MAAM;AAAA,IACb;AAAA,IACA,sBAAsB,KAAK,MAAM;AAAA,EACnC;AACF;AAOO,IAAM,uBAAuB,CAAC,UAA2B;AAC9D,MAAI,iBAAiB,EAAE,UAAU;AAC/B,YAAQ,MAAM,mDAAgD,KAAK;AACnE,WAAO;AAAA,EACT;AAEA,UAAQ,MAAM,2CAAwC,KAAK;AAC3D,SAAO;AACT;AAsBO,IAAM,qCAAqC,CAChD,sBAGG;AACH,SAAO,MAA0C;AAC/C,UAAM,CAAC,OAAO,QAAQ,IAAI,SAA4C;AAAA,MACpE,OAAO,CAAC;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,QACV,OAAO;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF,CAAC;AAMD,UAAM,aAAa;AAAA,MACjB,OAAO,YAAiC;AACtC,iBAAS,CAAC,UAAU,EAAE,GAAG,MAAM,SAAS,MAAM,OAAO,KAAK,EAAE;AAE5D,YAAI;AAEF,gBAAM,eAAe,MAAM,kBAAkB,OAAO;AAGpD,gBAAM,gBACJ,8BAA8B,MAAM,YAAY;AAGlD,gBAAM,aAAa,cAAc,KAAK,MAAM;AAAA,YAC1C;AAAA,UACF;AAGA,gBAAM,OAAO,SAAS,QAAQ;AAC9B,gBAAM,QAAQ,SAAS,SAAS;AAChC,gBAAM,QAAQ,cAAc,KAAK;AACjC,gBAAM,aAAa,KAAK,KAAK,QAAQ,KAAK;AAG1C,mBAAS;AAAA,YACP,OAAO;AAAA,YACP,SAAS;AAAA,YACT,OAAO;AAAA,YACP,YAAY;AAAA,cACV;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH,SAAS,OAAO;AACd,gBAAM,eAAe,qBAAqB,KAAK;AAC/C,mBAAS,CAAC,UAAU;AAAA,YAClB,GAAG;AAAA,YACH,SAAS;AAAA,YACT,OAAO;AAAA,UACT,EAAE;AAAA,QACJ;AAAA,MACF;AAAA,MACA,CAAC,iBAAiB;AAAA,IACpB;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAKO,IAAM,sCACX;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/useRecommendedLessons.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { z } from 'zod';\nimport dayjs from 'dayjs';\nimport { RecommendedClassDisplayStatus } from '../types/recommendedLessons';\nimport type {\n RecommendedClassHistoryItem,\n RecommendedClassTableItem,\n RecommendedClassHistoryApiResponse,\n RecommendedClassHistoryFilters,\n RecommendedClassHistoryPagination,\n} from '../types/recommendedLessons';\n\n/**\n * Zod schema for recommendedClass history API response validation\n * Based on /recommended-class/history endpoint\n */\nconst recommendedClassSubjectSchema = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n })\n .nullable();\n\nconst recommendedClassCreatorSchema = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n })\n .nullable();\n\nconst recommendedClassStatsSchema = z.object({\n totalStudents: z.number(),\n completedCount: z.number(),\n completionPercentage: z.number(),\n});\n\nconst recommendedClassBreakdownSchema = z.object({\n classId: z.string().uuid(),\n className: z.string(),\n schoolId: z.string(),\n schoolName: z.string(),\n studentCount: z.number(),\n completedCount: z.number(),\n});\n\nconst recommendedClassDataSchema = z.object({\n id: z.string().uuid(),\n title: z.string(),\n startDate: z.string().nullable(),\n finalDate: z.string().nullable(),\n createdAt: z.string(),\n progress: z.number(),\n totalLessons: z.number(),\n});\n\nconst recommendedClassHistoryItemSchema = z.object({\n recommendedClass: recommendedClassDataSchema,\n subject: recommendedClassSubjectSchema,\n creator: recommendedClassCreatorSchema,\n stats: recommendedClassStatsSchema,\n breakdown: z.array(recommendedClassBreakdownSchema),\n});\n\nexport const recommendedClassHistoryApiResponseSchema = z.object({\n message: z.string(),\n data: z.object({\n recommendedClass: z.array(recommendedClassHistoryItemSchema),\n total: z.number(),\n }),\n});\n\n/**\n * Hook state interface\n */\nexport interface UseRecommendedLessonsHistoryState {\n recommendedClass: RecommendedClassTableItem[];\n loading: boolean;\n error: string | null;\n pagination: RecommendedClassHistoryPagination;\n}\n\n/**\n * Hook return type\n */\nexport interface UseRecommendedLessonsHistoryReturn\n extends UseRecommendedLessonsHistoryState {\n fetchRecommendedClass: (\n filters?: RecommendedClassHistoryFilters\n ) => Promise<void>;\n}\n\n/**\n * Determine status based on dates and completion\n * @param finalDate - RecommendedClass final date\n * @param completionPercentage - Completion percentage\n * @returns Display status for UI\n */\nexport const determineRecommendedClassStatus = (\n finalDate: string | null,\n completionPercentage: number\n): RecommendedClassDisplayStatus => {\n if (completionPercentage === 100) {\n return RecommendedClassDisplayStatus.CONCLUIDA;\n }\n\n if (finalDate) {\n const now = dayjs();\n const deadline = dayjs(finalDate);\n if (deadline.isBefore(now)) {\n return RecommendedClassDisplayStatus.VENCIDA;\n }\n }\n\n return RecommendedClassDisplayStatus.ATIVA;\n};\n\n/**\n * Transform API response to table item format\n * @param item - RecommendedClass history item from API response\n * @returns Formatted recommendedClass for table display\n */\nexport const transformRecommendedClassToTableItem = (\n item: RecommendedClassHistoryItem\n): RecommendedClassTableItem => {\n // Get first breakdown for school/class info (or aggregate)\n const firstBreakdown = item.breakdown[0];\n const schoolName = firstBreakdown?.schoolName || '-';\n const className = firstBreakdown?.className || '-';\n\n // If multiple classes, show count\n const classDisplay =\n item.breakdown.length > 1 ? `${item.breakdown.length} turmas` : className;\n\n return {\n id: item.recommendedClass.id,\n startDate: item.recommendedClass.startDate\n ? dayjs(item.recommendedClass.startDate).format('DD/MM')\n : '-',\n deadline: item.recommendedClass.finalDate\n ? dayjs(item.recommendedClass.finalDate).format('DD/MM')\n : '-',\n title: item.recommendedClass.title,\n school: schoolName,\n year: '-', // API doesn't provide year directly\n subject: item.subject?.name || '-',\n class: classDisplay,\n status: determineRecommendedClassStatus(\n item.recommendedClass.finalDate,\n item.stats.completionPercentage\n ),\n completionPercentage: item.stats.completionPercentage,\n };\n};\n\n/**\n * Handle errors during recommendedClass fetch\n * @param error - Error object\n * @returns Error message for UI display\n */\nexport const handleRecommendedClassFetchError = (error: unknown): string => {\n if (error instanceof z.ZodError) {\n console.error('Erro ao validar dados de histórico de aulas:', error);\n return 'Erro ao validar dados de histórico de aulas';\n }\n\n console.error('Erro ao carregar histórico de aulas:', error);\n return 'Erro ao carregar histórico de aulas';\n};\n\n/**\n * Factory function to create useRecommendedLessonsHistory hook\n *\n * @param fetchRecommendedClassHistory - Function to fetch recommendedClass from API\n * @returns Hook for managing recommended lessons history\n *\n * @example\n * ```tsx\n * // In your app setup\n * const fetchRecommendedClassHistory = async (filters) => {\n * const response = await api.get('/recommended-class/history', { params: filters });\n * return response.data;\n * };\n *\n * const useRecommendedClassHistory = createUseRecommendedLessonsHistory(fetchRecommendedClassHistory);\n *\n * // In your component\n * const { recommendedClass, loading, error, pagination, fetchRecommendedClass } = useRecommendedClassHistory();\n * ```\n */\nexport const createUseRecommendedLessonsHistory = (\n fetchRecommendedClassHistory: (\n filters?: RecommendedClassHistoryFilters\n ) => Promise<RecommendedClassHistoryApiResponse>\n) => {\n return (): UseRecommendedLessonsHistoryReturn => {\n const [state, setState] = useState<UseRecommendedLessonsHistoryState>({\n recommendedClass: [],\n loading: false,\n error: null,\n pagination: {\n total: 0,\n page: 1,\n limit: 10,\n totalPages: 0,\n },\n });\n\n /**\n * Fetch recommendedClass history from API\n * @param filters - Optional filters for pagination, search, sorting, etc.\n */\n const fetchRecommendedClass = useCallback(\n async (filters?: RecommendedClassHistoryFilters) => {\n setState((prev) => ({ ...prev, loading: true, error: null }));\n\n try {\n // Fetch data from API\n const responseData = await fetchRecommendedClassHistory(filters);\n\n // Validate response with Zod\n const validatedData =\n recommendedClassHistoryApiResponseSchema.parse(responseData);\n\n // Transform recommendedClass to table format\n const tableItems = validatedData.data.recommendedClass.map(\n transformRecommendedClassToTableItem\n );\n\n // Calculate pagination from total\n const page = filters?.page || 1;\n const limit = filters?.limit || 10;\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 recommendedClass: 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 = handleRecommendedClassFetchError(error);\n setState((prev) => ({\n ...prev,\n loading: false,\n error: errorMessage,\n }));\n }\n },\n [fetchRecommendedClassHistory]\n );\n\n return {\n ...state,\n fetchRecommendedClass,\n };\n };\n};\n\n/**\n * Alias for createUseRecommendedLessonsHistory\n */\nexport const createRecommendedLessonsHistoryHook =\n createUseRecommendedLessonsHistory;\n"],"mappings":";AAAA,SAAS,UAAU,mBAAmB;AACtC,SAAS,SAAS;AAClB,OAAO,WAAW;AAclB,IAAM,gCAAgC,EACnC,OAAO;AAAA,EACN,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,EACpB,MAAM,EAAE,OAAO;AACjB,CAAC,EACA,SAAS;AAEZ,IAAM,gCAAgC,EACnC,OAAO;AAAA,EACN,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,EACpB,MAAM,EAAE,OAAO;AACjB,CAAC,EACA,SAAS;AAEZ,IAAM,8BAA8B,EAAE,OAAO;AAAA,EAC3C,eAAe,EAAE,OAAO;AAAA,EACxB,gBAAgB,EAAE,OAAO;AAAA,EACzB,sBAAsB,EAAE,OAAO;AACjC,CAAC;AAED,IAAM,kCAAkC,EAAE,OAAO;AAAA,EAC/C,SAAS,EAAE,OAAO,EAAE,KAAK;AAAA,EACzB,WAAW,EAAE,OAAO;AAAA,EACpB,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY,EAAE,OAAO;AAAA,EACrB,cAAc,EAAE,OAAO;AAAA,EACvB,gBAAgB,EAAE,OAAO;AAC3B,CAAC;AAED,IAAM,6BAA6B,EAAE,OAAO;AAAA,EAC1C,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,EACpB,OAAO,EAAE,OAAO;AAAA,EAChB,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAW,EAAE,OAAO;AAAA,EACpB,UAAU,EAAE,OAAO;AAAA,EACnB,cAAc,EAAE,OAAO;AACzB,CAAC;AAED,IAAM,oCAAoC,EAAE,OAAO;AAAA,EACjD,kBAAkB;AAAA,EAClB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW,EAAE,MAAM,+BAA+B;AACpD,CAAC;AAEM,IAAM,2CAA2C,EAAE,OAAO;AAAA,EAC/D,SAAS,EAAE,OAAO;AAAA,EAClB,MAAM,EAAE,OAAO;AAAA,IACb,kBAAkB,EAAE,MAAM,iCAAiC;AAAA,IAC3D,OAAO,EAAE,OAAO;AAAA,EAClB,CAAC;AACH,CAAC;AA4BM,IAAM,kCAAkC,CAC7C,WACA,yBACkC;AAClC,MAAI,yBAAyB,KAAK;AAChC;AAAA,EACF;AAEA,MAAI,WAAW;AACb,UAAM,MAAM,MAAM;AAClB,UAAM,WAAW,MAAM,SAAS;AAChC,QAAI,SAAS,SAAS,GAAG,GAAG;AAC1B;AAAA,IACF;AAAA,EACF;AAEA;AACF;AAOO,IAAM,uCAAuC,CAClD,SAC8B;AAE9B,QAAM,iBAAiB,KAAK,UAAU,CAAC;AACvC,QAAM,aAAa,gBAAgB,cAAc;AACjD,QAAM,YAAY,gBAAgB,aAAa;AAG/C,QAAM,eACJ,KAAK,UAAU,SAAS,IAAI,GAAG,KAAK,UAAU,MAAM,YAAY;AAElE,SAAO;AAAA,IACL,IAAI,KAAK,iBAAiB;AAAA,IAC1B,WAAW,KAAK,iBAAiB,YAC7B,MAAM,KAAK,iBAAiB,SAAS,EAAE,OAAO,OAAO,IACrD;AAAA,IACJ,UAAU,KAAK,iBAAiB,YAC5B,MAAM,KAAK,iBAAiB,SAAS,EAAE,OAAO,OAAO,IACrD;AAAA,IACJ,OAAO,KAAK,iBAAiB;AAAA,IAC7B,QAAQ;AAAA,IACR,MAAM;AAAA;AAAA,IACN,SAAS,KAAK,SAAS,QAAQ;AAAA,IAC/B,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,KAAK,iBAAiB;AAAA,MACtB,KAAK,MAAM;AAAA,IACb;AAAA,IACA,sBAAsB,KAAK,MAAM;AAAA,EACnC;AACF;AAOO,IAAM,mCAAmC,CAAC,UAA2B;AAC1E,MAAI,iBAAiB,EAAE,UAAU;AAC/B,YAAQ,MAAM,mDAAgD,KAAK;AACnE,WAAO;AAAA,EACT;AAEA,UAAQ,MAAM,2CAAwC,KAAK;AAC3D,SAAO;AACT;AAsBO,IAAM,qCAAqC,CAChD,iCAGG;AACH,SAAO,MAA0C;AAC/C,UAAM,CAAC,OAAO,QAAQ,IAAI,SAA4C;AAAA,MACpE,kBAAkB,CAAC;AAAA,MACnB,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,QACV,OAAO;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF,CAAC;AAMD,UAAM,wBAAwB;AAAA,MAC5B,OAAO,YAA6C;AAClD,iBAAS,CAAC,UAAU,EAAE,GAAG,MAAM,SAAS,MAAM,OAAO,KAAK,EAAE;AAE5D,YAAI;AAEF,gBAAM,eAAe,MAAM,6BAA6B,OAAO;AAG/D,gBAAM,gBACJ,yCAAyC,MAAM,YAAY;AAG7D,gBAAM,aAAa,cAAc,KAAK,iBAAiB;AAAA,YACrD;AAAA,UACF;AAGA,gBAAM,OAAO,SAAS,QAAQ;AAC9B,gBAAM,QAAQ,SAAS,SAAS;AAChC,gBAAM,QAAQ,cAAc,KAAK;AACjC,gBAAM,aAAa,KAAK,KAAK,QAAQ,KAAK;AAG1C,mBAAS;AAAA,YACP,kBAAkB;AAAA,YAClB,SAAS;AAAA,YACT,OAAO;AAAA,YACP,YAAY;AAAA,cACV;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH,SAAS,OAAO;AACd,gBAAM,eAAe,iCAAiC,KAAK;AAC3D,mBAAS,CAAC,UAAU;AAAA,YAClB,GAAG;AAAA,YACH,SAAS;AAAA,YACT,OAAO;AAAA,UACT,EAAE;AAAA,QACJ;AAAA,MACF;AAAA,MACA,CAAC,4BAA4B;AAAA,IAC/B;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAKO,IAAM,sCACX;","names":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
3
|
-
import type {
|
|
4
|
-
export declare const
|
|
2
|
+
import { RecommendedClassDisplayStatus } from '../types/recommendedLessons';
|
|
3
|
+
import type { RecommendedClassHistoryItem, RecommendedClassTableItem, RecommendedClassHistoryApiResponse, RecommendedClassHistoryFilters, RecommendedClassHistoryPagination } from '../types/recommendedLessons';
|
|
4
|
+
export declare const recommendedClassHistoryApiResponseSchema: z.ZodObject<{
|
|
5
5
|
message: z.ZodString;
|
|
6
6
|
data: z.ZodObject<{
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
recommendedClass: z.ZodArray<z.ZodObject<{
|
|
8
|
+
recommendedClass: z.ZodObject<{
|
|
9
9
|
id: z.ZodString;
|
|
10
10
|
title: z.ZodString;
|
|
11
11
|
startDate: z.ZodNullable<z.ZodString>;
|
|
@@ -86,7 +86,7 @@ export declare const goalsHistoryApiResponseSchema: z.ZodObject<{
|
|
|
86
86
|
studentCount: number;
|
|
87
87
|
}>, "many">;
|
|
88
88
|
}, "strip", z.ZodTypeAny, {
|
|
89
|
-
|
|
89
|
+
recommendedClass: {
|
|
90
90
|
id: string;
|
|
91
91
|
title: string;
|
|
92
92
|
progress: number;
|
|
@@ -117,7 +117,7 @@ export declare const goalsHistoryApiResponseSchema: z.ZodObject<{
|
|
|
117
117
|
studentCount: number;
|
|
118
118
|
}[];
|
|
119
119
|
}, {
|
|
120
|
-
|
|
120
|
+
recommendedClass: {
|
|
121
121
|
id: string;
|
|
122
122
|
title: string;
|
|
123
123
|
progress: number;
|
|
@@ -150,9 +150,8 @@ export declare const goalsHistoryApiResponseSchema: z.ZodObject<{
|
|
|
150
150
|
}>, "many">;
|
|
151
151
|
total: z.ZodNumber;
|
|
152
152
|
}, "strip", z.ZodTypeAny, {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
goal: {
|
|
153
|
+
recommendedClass: {
|
|
154
|
+
recommendedClass: {
|
|
156
155
|
id: string;
|
|
157
156
|
title: string;
|
|
158
157
|
progress: number;
|
|
@@ -183,10 +182,10 @@ export declare const goalsHistoryApiResponseSchema: z.ZodObject<{
|
|
|
183
182
|
studentCount: number;
|
|
184
183
|
}[];
|
|
185
184
|
}[];
|
|
186
|
-
}, {
|
|
187
185
|
total: number;
|
|
188
|
-
|
|
189
|
-
|
|
186
|
+
}, {
|
|
187
|
+
recommendedClass: {
|
|
188
|
+
recommendedClass: {
|
|
190
189
|
id: string;
|
|
191
190
|
title: string;
|
|
192
191
|
progress: number;
|
|
@@ -217,12 +216,12 @@ export declare const goalsHistoryApiResponseSchema: z.ZodObject<{
|
|
|
217
216
|
studentCount: number;
|
|
218
217
|
}[];
|
|
219
218
|
}[];
|
|
219
|
+
total: number;
|
|
220
220
|
}>;
|
|
221
221
|
}, "strip", z.ZodTypeAny, {
|
|
222
222
|
data: {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
goal: {
|
|
223
|
+
recommendedClass: {
|
|
224
|
+
recommendedClass: {
|
|
226
225
|
id: string;
|
|
227
226
|
title: string;
|
|
228
227
|
progress: number;
|
|
@@ -253,13 +252,13 @@ export declare const goalsHistoryApiResponseSchema: z.ZodObject<{
|
|
|
253
252
|
studentCount: number;
|
|
254
253
|
}[];
|
|
255
254
|
}[];
|
|
255
|
+
total: number;
|
|
256
256
|
};
|
|
257
257
|
message: string;
|
|
258
258
|
}, {
|
|
259
259
|
data: {
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
goal: {
|
|
260
|
+
recommendedClass: {
|
|
261
|
+
recommendedClass: {
|
|
263
262
|
id: string;
|
|
264
263
|
title: string;
|
|
265
264
|
progress: number;
|
|
@@ -290,6 +289,7 @@ export declare const goalsHistoryApiResponseSchema: z.ZodObject<{
|
|
|
290
289
|
studentCount: number;
|
|
291
290
|
}[];
|
|
292
291
|
}[];
|
|
292
|
+
total: number;
|
|
293
293
|
};
|
|
294
294
|
message: string;
|
|
295
295
|
}>;
|
|
@@ -297,59 +297,59 @@ export declare const goalsHistoryApiResponseSchema: z.ZodObject<{
|
|
|
297
297
|
* Hook state interface
|
|
298
298
|
*/
|
|
299
299
|
export interface UseRecommendedLessonsHistoryState {
|
|
300
|
-
|
|
300
|
+
recommendedClass: RecommendedClassTableItem[];
|
|
301
301
|
loading: boolean;
|
|
302
302
|
error: string | null;
|
|
303
|
-
pagination:
|
|
303
|
+
pagination: RecommendedClassHistoryPagination;
|
|
304
304
|
}
|
|
305
305
|
/**
|
|
306
306
|
* Hook return type
|
|
307
307
|
*/
|
|
308
308
|
export interface UseRecommendedLessonsHistoryReturn extends UseRecommendedLessonsHistoryState {
|
|
309
|
-
|
|
309
|
+
fetchRecommendedClass: (filters?: RecommendedClassHistoryFilters) => Promise<void>;
|
|
310
310
|
}
|
|
311
311
|
/**
|
|
312
312
|
* Determine status based on dates and completion
|
|
313
|
-
* @param finalDate -
|
|
313
|
+
* @param finalDate - RecommendedClass final date
|
|
314
314
|
* @param completionPercentage - Completion percentage
|
|
315
315
|
* @returns Display status for UI
|
|
316
316
|
*/
|
|
317
|
-
export declare const
|
|
317
|
+
export declare const determineRecommendedClassStatus: (finalDate: string | null, completionPercentage: number) => RecommendedClassDisplayStatus;
|
|
318
318
|
/**
|
|
319
319
|
* Transform API response to table item format
|
|
320
|
-
* @param item -
|
|
321
|
-
* @returns Formatted
|
|
320
|
+
* @param item - RecommendedClass history item from API response
|
|
321
|
+
* @returns Formatted recommendedClass for table display
|
|
322
322
|
*/
|
|
323
|
-
export declare const
|
|
323
|
+
export declare const transformRecommendedClassToTableItem: (item: RecommendedClassHistoryItem) => RecommendedClassTableItem;
|
|
324
324
|
/**
|
|
325
|
-
* Handle errors during
|
|
325
|
+
* Handle errors during recommendedClass fetch
|
|
326
326
|
* @param error - Error object
|
|
327
327
|
* @returns Error message for UI display
|
|
328
328
|
*/
|
|
329
|
-
export declare const
|
|
329
|
+
export declare const handleRecommendedClassFetchError: (error: unknown) => string;
|
|
330
330
|
/**
|
|
331
331
|
* Factory function to create useRecommendedLessonsHistory hook
|
|
332
332
|
*
|
|
333
|
-
* @param
|
|
333
|
+
* @param fetchRecommendedClassHistory - Function to fetch recommendedClass from API
|
|
334
334
|
* @returns Hook for managing recommended lessons history
|
|
335
335
|
*
|
|
336
336
|
* @example
|
|
337
337
|
* ```tsx
|
|
338
338
|
* // In your app setup
|
|
339
|
-
* const
|
|
339
|
+
* const fetchRecommendedClassHistory = async (filters) => {
|
|
340
340
|
* const response = await api.get('/recommended-class/history', { params: filters });
|
|
341
341
|
* return response.data;
|
|
342
342
|
* };
|
|
343
343
|
*
|
|
344
|
-
* const
|
|
344
|
+
* const useRecommendedClassHistory = createUseRecommendedLessonsHistory(fetchRecommendedClassHistory);
|
|
345
345
|
*
|
|
346
346
|
* // In your component
|
|
347
|
-
* const {
|
|
347
|
+
* const { recommendedClass, loading, error, pagination, fetchRecommendedClass } = useRecommendedClassHistory();
|
|
348
348
|
* ```
|
|
349
349
|
*/
|
|
350
|
-
export declare const createUseRecommendedLessonsHistory: (
|
|
350
|
+
export declare const createUseRecommendedLessonsHistory: (fetchRecommendedClassHistory: (filters?: RecommendedClassHistoryFilters) => Promise<RecommendedClassHistoryApiResponse>) => () => UseRecommendedLessonsHistoryReturn;
|
|
351
351
|
/**
|
|
352
352
|
* Alias for createUseRecommendedLessonsHistory
|
|
353
353
|
*/
|
|
354
|
-
export declare const createRecommendedLessonsHistoryHook: (
|
|
354
|
+
export declare const createRecommendedLessonsHistoryHook: (fetchRecommendedClassHistory: (filters?: RecommendedClassHistoryFilters) => Promise<RecommendedClassHistoryApiResponse>) => () => UseRecommendedLessonsHistoryReturn;
|
|
355
355
|
//# sourceMappingURL=useRecommendedLessons.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRecommendedLessons.d.ts","sourceRoot":"","sources":["../../src/hooks/useRecommendedLessons.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"useRecommendedLessons.d.ts","sourceRoot":"","sources":["../../src/hooks/useRecommendedLessons.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,KAAK,EACV,2BAA2B,EAC3B,yBAAyB,EACzB,kCAAkC,EAClC,8BAA8B,EAC9B,iCAAiC,EAClC,MAAM,6BAA6B,CAAC;AAqDrC,eAAO,MAAM,wCAAwC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMnD,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,gBAAgB,EAAE,yBAAyB,EAAE,CAAC;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,iCAAiC,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,kCACf,SAAQ,iCAAiC;IACzC,qBAAqB,EAAE,CACrB,OAAO,CAAC,EAAE,8BAA8B,KACrC,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,GAC1C,WAAW,MAAM,GAAG,IAAI,EACxB,sBAAsB,MAAM,KAC3B,6BAcF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oCAAoC,GAC/C,MAAM,2BAA2B,KAChC,yBA6BF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,GAAI,OAAO,OAAO,KAAG,MAQjE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,kCAAkC,GAC7C,8BAA8B,CAC5B,OAAO,CAAC,EAAE,8BAA8B,KACrC,OAAO,CAAC,kCAAkC,CAAC,WAErC,kCAqEZ,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mCAAmC,iCA9EhB,CAC5B,OAAO,CAAC,EAAE,8BAA8B,KACrC,OAAO,CAAC,kCAAkC,CAAC,WAErC,kCA2EuB,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Factory function to create a hook for RecommendedLessons, LessonDrafts, and LessonModels pages.
|
|
5
5
|
* Contains all common state, memos, and callbacks.
|
|
6
6
|
*/
|
|
7
|
-
import { type
|
|
7
|
+
import { type RecommendedClassHistoryFilters, type RecommendedClassHistoryApiResponse, type RecommendedClassTableItem, type RecommendedClassModelFilters, type RecommendedClassModelsApiResponse, type RecommendedClassModelTableItem } from '../types/recommendedLessons';
|
|
8
8
|
import type { SendLessonFormData, CategoryConfig } from '../components/SendLessonModal/types';
|
|
9
9
|
import { SubjectEnum } from '../enums/SubjectEnum';
|
|
10
10
|
/**
|
|
@@ -79,12 +79,12 @@ export interface RecommendedLessonsPagePaths {
|
|
|
79
79
|
* API endpoints configuration
|
|
80
80
|
*/
|
|
81
81
|
export interface RecommendedLessonsPageEndpoints {
|
|
82
|
-
/** Endpoint for fetching
|
|
83
|
-
|
|
84
|
-
/** Endpoint for fetching
|
|
85
|
-
|
|
86
|
-
/** Endpoint for submitting a
|
|
87
|
-
|
|
82
|
+
/** Endpoint for fetching recommendedClass history */
|
|
83
|
+
recommendedClassHistory: string;
|
|
84
|
+
/** Endpoint for fetching recommendedClass models/drafts */
|
|
85
|
+
recommendedClassDrafts: string;
|
|
86
|
+
/** Endpoint for submitting a recommendedClass */
|
|
87
|
+
submitRecommendedClass: string;
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
90
90
|
* UI text configuration
|
|
@@ -125,19 +125,19 @@ export interface UseRecommendedLessonsPageConfig {
|
|
|
125
125
|
export interface UseRecommendedLessonsPageReturn {
|
|
126
126
|
/** Props for RecommendedLessonsHistory component */
|
|
127
127
|
historyProps: {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
fetchRecommendedClassHistory: (filters?: RecommendedClassHistoryFilters) => Promise<RecommendedClassHistoryApiResponse>;
|
|
129
|
+
fetchRecommendedClassModels: (filters?: RecommendedClassModelFilters) => Promise<RecommendedClassModelsApiResponse>;
|
|
130
|
+
deleteRecommendedClassModel: (id: string) => Promise<void>;
|
|
131
131
|
onCreateLesson: () => void;
|
|
132
132
|
onCreateModel: () => void;
|
|
133
|
-
onRowClick: (row:
|
|
134
|
-
|
|
135
|
-
onEditModel: (model:
|
|
136
|
-
onSendLesson: (model:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
onSendDraft: (draft:
|
|
140
|
-
onEditDraft: (draft:
|
|
133
|
+
onRowClick: (row: RecommendedClassTableItem) => void;
|
|
134
|
+
onEditRecommendedClass: (id: string) => void;
|
|
135
|
+
onEditModel: (model: RecommendedClassModelTableItem) => void;
|
|
136
|
+
onSendLesson: (model: RecommendedClassModelTableItem) => void;
|
|
137
|
+
fetchRecommendedClassDrafts: (filters?: RecommendedClassModelFilters) => Promise<RecommendedClassModelsApiResponse>;
|
|
138
|
+
deleteRecommendedClassDraft: (id: string) => Promise<void>;
|
|
139
|
+
onSendDraft: (draft: RecommendedClassModelTableItem) => void;
|
|
140
|
+
onEditDraft: (draft: RecommendedClassModelTableItem) => void;
|
|
141
141
|
emptyStateImage: string;
|
|
142
142
|
noSearchImage: string;
|
|
143
143
|
mapSubjectNameToEnum: (subjectName: string) => SubjectEnum | null;
|
|
@@ -196,9 +196,9 @@ export interface UseRecommendedLessonsPageReturn {
|
|
|
196
196
|
* editModel: '/criar-aula?mode=model&id=',
|
|
197
197
|
* },
|
|
198
198
|
* endpoints: {
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
199
|
+
* recommendedClassHistory: '/recommended-class/history',
|
|
200
|
+
* recommendedClassDrafts: '/recommended-class/drafts',
|
|
201
|
+
* submitRecommendedClass: '/recommendedClass',
|
|
202
202
|
* },
|
|
203
203
|
* texts: {
|
|
204
204
|
* title: 'Histórico de aulas recomendadas',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRecommendedLessonsPage.d.ts","sourceRoot":"","sources":["../../src/hooks/useRecommendedLessonsPage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAEL,KAAK,
|
|
1
|
+
{"version":3,"file":"useRecommendedLessonsPage.d.ts","sourceRoot":"","sources":["../../src/hooks/useRecommendedLessonsPage.ts"],"names":[],"mappings":"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"}
|