{"version":3,"sources":["../src/hooks/useRecommendedClassDrafts.ts","../src/hooks/useRecommendedClassModels.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';\nimport type { BaseApiClient } from '../types/api';\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 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 apiClient - API client adapter with get and delete methods\n * @returns Hook for managing recommendedClass drafts\n *\n * @example\n * ```tsx\n * const useRecommendedClassDrafts = createUseRecommendedClassDrafts(apiClientAdapter);\n *\n * // In your component\n * const { models, loading, error, pagination, fetchModels, deleteModel } = useRecommendedClassDrafts();\n * ```\n */\nexport const createUseRecommendedClassDrafts = (apiClient: BaseApiClient) => {\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 using adapter\n          const response =\n            await apiClient.get<RecommendedClassModelsApiResponse>(\n              '/recommended-class/drafts',\n              { params: filters as Record<string, unknown> }\n            );\n\n          // Validate response with Zod\n          const validatedData = recommendedClassModelsApiResponseSchema.parse(\n            response.data\n          );\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      [apiClient]\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 apiClient.delete(`/recommended-class/drafts/${id}`);\n          return true;\n        } catch (error) {\n          console.error('Erro ao deletar rascunho:', error);\n          return false;\n        }\n      },\n      [apiClient]\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';\nimport type { BaseApiClient } from '../types/api';\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  subject: z.object({ id: z.string(), name: z.string() }).nullable().optional(),\n  startDate: z.string().nullable(),\n  finalDate: z.string().nullable(),\n  createdAt: z.string(),\n  updatedAt: z.string(),\n  // Activity drafts attached to this model. Kept in the schema so Zod\n  // preserves the field during validation — used to derive\n  // activityDraftsCount for the send-modal \"Permitir refazer?\" gate.\n  activityDrafts: z\n    .array(\n      z.object({\n        activityDraftId: z.uuid(),\n        sequence: z.number(),\n        title: z.string().nullable().optional(),\n      })\n    )\n    .optional()\n    .default([]),\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 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 =\n    model.subject?.name ||\n    (model.subjectId ? subjectsMap?.get(model.subjectId) || '' : '');\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    activityDraftsCount: model.activityDrafts?.length ?? 0,\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 apiClient - API client adapter with get and delete methods\n * @returns Hook for managing recommendedClass models\n *\n * @example\n * ```tsx\n * const useRecommendedClassModels = createUseRecommendedClassModels(apiClientAdapter);\n *\n * // In your component\n * const { models, loading, error, pagination, fetchModels, deleteModel } = useRecommendedClassModels();\n * ```\n */\nexport const createUseRecommendedClassModels = (apiClient: BaseApiClient) => {\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 using adapter\n          const response =\n            await apiClient.get<RecommendedClassModelsApiResponse>(\n              '/recommended-class/drafts',\n              { params: filters as Record<string, unknown> }\n            );\n\n          // Validate response with Zod\n          const validatedData = recommendedClassModelsApiResponseSchema.parse(\n            response.data\n          );\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      [apiClient]\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 apiClient.delete(`/recommended-class/drafts/${id}`);\n          return true;\n        } catch (error) {\n          console.error('Erro ao deletar modelo:', error);\n          return false;\n        }\n      },\n      [apiClient]\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"],"mappings":"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","names":["useState","useCallback","useState","useCallback"]}