{"version":3,"sources":["../../../src/hooks/useActivitiesHistory.ts","../../../src/types/common.ts","../../../src/types/activitiesHistory.ts","../../../src/utils/hookErrorHandler.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { z } from 'zod';\nimport dayjs from 'dayjs';\nimport {\n  ActivityApiStatus,\n  mapActivityStatusToDisplay,\n} from '../types/activitiesHistory';\nimport type {\n  ActivityHistoryResponse,\n  ActivityTableItem,\n  ActivitiesHistoryApiResponse,\n  ActivityHistoryFilters,\n  ActivityPagination,\n} from '../types/activitiesHistory';\nimport { createFetchErrorHandler } from '../utils/hookErrorHandler';\n\n/**\n * Zod schema for activity history API response validation\n * Based on /activities/history endpoint\n */\nconst activityHistoryResponseSchema = z.object({\n  id: z.string().uuid(),\n  title: z.string(),\n  startDate: z.string().nullable(),\n  finalDate: z.string().nullable(),\n  status: z.nativeEnum(ActivityApiStatus),\n  completionPercentage: z.number().min(0).max(100),\n  subjectId: z.string().uuid().optional().nullable(),\n  schoolId: z.string().optional(),\n  schoolName: z.string().optional(),\n  year: z.string().optional(),\n  className: z.string().optional(),\n  subjectName: z.string().optional(),\n});\n\nexport const activitiesHistoryApiResponseSchema = z.object({\n  message: z.string(),\n  data: z.object({\n    activities: z.array(activityHistoryResponseSchema),\n    pagination: z.object({\n      total: z.number(),\n      page: z.number(),\n      limit: z.number(),\n      totalPages: z.number(),\n    }),\n  }),\n});\n\n/**\n * Hook state interface\n */\nexport interface UseActivitiesHistoryState {\n  activities: ActivityTableItem[];\n  loading: boolean;\n  error: string | null;\n  pagination: ActivityPagination;\n}\n\n/**\n * Hook return type\n */\nexport interface UseActivitiesHistoryReturn extends UseActivitiesHistoryState {\n  fetchActivities: (filters?: ActivityHistoryFilters) => Promise<void>;\n}\n\n/**\n * Default pagination values\n */\nexport const DEFAULT_ACTIVITIES_PAGINATION: ActivityPagination = {\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 activity - Activity from API response\n * @returns Formatted activity for table display\n */\nexport const transformActivityToTableItem = (\n  activity: ActivityHistoryResponse\n): ActivityTableItem => {\n  return {\n    id: activity.id,\n    startDate: activity.startDate\n      ? dayjs(activity.startDate).format('DD/MM')\n      : '-',\n    deadline: activity.finalDate\n      ? dayjs(activity.finalDate).format('DD/MM')\n      : '-',\n    title: activity.title,\n    school: activity.schoolName || '-',\n    year: activity.year || '-',\n    subject: activity.subjectName || '-',\n    class: activity.className || '-',\n    status: mapActivityStatusToDisplay(activity.status),\n    completionPercentage: activity.completionPercentage,\n  };\n};\n\n/**\n * Handle errors during activity fetch\n * Uses the generic error handler factory to reduce code duplication\n */\nexport const handleActivityFetchError = createFetchErrorHandler(\n  'Erro ao validar dados de histórico de atividades',\n  'Erro ao carregar histórico de atividades'\n);\n\n/**\n * Factory function to create useActivitiesHistory hook\n *\n * @param fetchActivitiesHistory - Function to fetch activities from API\n * @returns Hook for managing activities history\n *\n * @example\n * ```tsx\n * // In your app setup\n * const fetchActivitiesHistory = async (filters) => {\n *   const response = await api.get('/activities/history', { params: filters });\n *   return response.data;\n * };\n *\n * const useActivitiesHistory = createUseActivitiesHistory(fetchActivitiesHistory);\n *\n * // In your component\n * const { activities, loading, error, pagination, fetchActivities } = useActivitiesHistory();\n * ```\n */\nexport const createUseActivitiesHistory = (\n  fetchActivitiesHistory: (\n    filters?: ActivityHistoryFilters\n  ) => Promise<ActivitiesHistoryApiResponse>\n) => {\n  return (): UseActivitiesHistoryReturn => {\n    const [state, setState] = useState<UseActivitiesHistoryState>({\n      activities: [],\n      loading: false,\n      error: null,\n      pagination: DEFAULT_ACTIVITIES_PAGINATION,\n    });\n\n    /**\n     * Fetch activities history from API\n     * @param filters - Optional filters for pagination, search, sorting, etc.\n     */\n    const fetchActivities = useCallback(\n      async (filters?: ActivityHistoryFilters) => {\n        setState((prev) => ({ ...prev, loading: true, error: null }));\n\n        try {\n          // Fetch data from API\n          const responseData = await fetchActivitiesHistory(filters);\n\n          // Validate response with Zod\n          const validatedData =\n            activitiesHistoryApiResponseSchema.parse(responseData);\n\n          // Transform activities to table format\n          const tableItems = validatedData.data.activities.map(\n            transformActivityToTableItem\n          );\n\n          // Update state with validated and transformed data\n          setState({\n            activities: tableItems,\n            loading: false,\n            error: null,\n            pagination: validatedData.data.pagination,\n          });\n        } catch (error) {\n          const errorMessage = handleActivityFetchError(error);\n          setState((prev) => ({\n            ...prev,\n            loading: false,\n            error: errorMessage,\n          }));\n        }\n      },\n      [fetchActivitiesHistory]\n    );\n\n    return {\n      ...state,\n      fetchActivities,\n    };\n  };\n};\n\n/**\n * Alias for createUseActivitiesHistory\n */\nexport const createActivitiesHistoryHook = createUseActivitiesHistory;\n","/**\n * Common Type Definitions\n * Shared types used across multiple features (activities, goals, etc.)\n */\n\n/**\n * Generic API status for activities and goals\n * Used by backend endpoints for status filtering\n */\nexport enum GenericApiStatus {\n  A_VENCER = 'A_VENCER',\n  VENCIDA = 'VENCIDA',\n  CONCLUIDA = 'CONCLUIDA',\n}\n\n/**\n * Generic display status for UI components\n * Used for Badge and status display in tables\n */\nexport enum GenericDisplayStatus {\n  ATIVA = 'ATIVA',\n  VENCIDA = 'VENCIDA',\n  CONCLUIDA = 'CONCLUÍDA',\n}\n\n/**\n * Badge action types for status visualization\n * Maps to Badge component action prop\n */\nexport enum BadgeActionType {\n  SUCCESS = 'success',\n  WARNING = 'warning',\n  ERROR = 'error',\n}\n\n/**\n * Get badge action based on display status\n * @param status - Display status value\n * @returns Badge action type for styling\n */\nexport const getStatusBadgeAction = (\n  status: GenericDisplayStatus\n): BadgeActionType => {\n  const actionMap: Record<GenericDisplayStatus, BadgeActionType> = {\n    [GenericDisplayStatus.CONCLUIDA]: BadgeActionType.SUCCESS,\n    [GenericDisplayStatus.ATIVA]: BadgeActionType.WARNING,\n    [GenericDisplayStatus.VENCIDA]: BadgeActionType.ERROR,\n  };\n  return actionMap[status] ?? BadgeActionType.WARNING;\n};\n\n/**\n * Map API status to display status\n * @param apiStatus - Status from backend API\n * @returns Formatted status for UI display\n */\nexport const mapApiStatusToDisplay = (\n  apiStatus: GenericApiStatus\n): GenericDisplayStatus => {\n  const statusMap: Record<GenericApiStatus, GenericDisplayStatus> = {\n    [GenericApiStatus.A_VENCER]: GenericDisplayStatus.ATIVA,\n    [GenericApiStatus.VENCIDA]: GenericDisplayStatus.VENCIDA,\n    [GenericApiStatus.CONCLUIDA]: GenericDisplayStatus.CONCLUIDA,\n  };\n  return statusMap[apiStatus];\n};\n","/**\n * Activities History Type Definitions\n * Types and interfaces for activities history and models functionality\n * Based on /activities/history and /activity-drafts endpoints\n */\n\nimport {\n  GenericApiStatus,\n  GenericDisplayStatus,\n  BadgeActionType,\n  getStatusBadgeAction,\n  mapApiStatusToDisplay,\n} from './common';\n\n/**\n * Activity status from backend API /activities/history\n * Re-exported from common for backward compatibility\n */\nexport { GenericApiStatus as ActivityApiStatus } from './common';\n\n/**\n * Activity status for display in UI (Badge component)\n * Re-exported from common for backward compatibility\n */\nexport { GenericDisplayStatus as ActivityDisplayStatus } from './common';\n\n/**\n * Badge action types for activity status visualization\n * Re-exported from common for backward compatibility\n */\nexport { BadgeActionType as ActivityBadgeActionType } from './common';\n\n/**\n * Activity draft type enum (matches backend ACTIVITY_DRAFT_TYPE)\n */\nexport enum ActivityDraftType {\n  MODELO = 'MODELO',\n  RASCUNHO = 'RASCUNHO',\n}\n\n/**\n * Activity history response from backend API /activities/history\n */\nexport interface ActivityHistoryResponse {\n  id: string;\n  title: string;\n  startDate: string | null;\n  finalDate: string | null;\n  status: GenericApiStatus;\n  completionPercentage: number;\n  subjectId?: string | null;\n  schoolId?: string;\n  schoolName?: string;\n  year?: string;\n  className?: string;\n  subjectName?: string;\n}\n\n/**\n * Activity table item interface for activities list table\n */\nexport interface ActivityTableItem 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 * Pagination info from API\n */\nexport interface ActivityPagination {\n  total: number;\n  page: number;\n  limit: number;\n  totalPages: number;\n}\n\n/**\n * Activities history API complete response\n */\nexport interface ActivitiesHistoryApiResponse {\n  message: string;\n  data: {\n    activities: ActivityHistoryResponse[];\n    pagination: ActivityPagination;\n  };\n}\n\n/**\n * Activity history filters for API query parameters\n */\nexport interface ActivityHistoryFilters {\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  sortBy?: 'finalDate' | 'title' | 'completionPercentage';\n  sortOrder?: 'asc' | 'desc';\n}\n\n/**\n * Activity draft filters object from backend\n */\nexport interface ActivityDraftFilters {\n  questionTypes?: string[];\n  questionBanks?: string[];\n  subjects?: string[];\n  topics?: string[];\n  subtopics?: string[];\n  contents?: string[];\n}\n\n/**\n * Activity model response from backend API (/activity-drafts)\n */\nexport interface ActivityModelResponse {\n  id: string;\n  type: ActivityDraftType;\n  title: string | null;\n  creatorUserInstitutionId: string | null;\n  subjectId: string | null;\n  filters: ActivityDraftFilters | null;\n  createdAt: string;\n  updatedAt: string;\n}\n\n/**\n * Activity model table item for display\n */\nexport interface ActivityModelTableItem extends Record<string, unknown> {\n  id: string;\n  title: string;\n  savedAt: string;\n  subject: string;\n  subjectId: string | null;\n}\n\n/**\n * Activity models API response\n */\nexport interface ActivityModelsApiResponse {\n  message: string;\n  data: {\n    activityDrafts: ActivityModelResponse[];\n    total: number;\n  };\n}\n\n/**\n * Activity model filters for API query\n */\nexport interface ActivityModelFilters {\n  page?: number;\n  limit?: number;\n  search?: string;\n  subjectId?: string;\n  type?: ActivityDraftType;\n}\n\n/**\n * Filter option for dropdowns\n * Extends with index signature to be compatible with CheckBoxGroup Item type\n */\nexport interface ActivityFilterOption {\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 ActivityUserFilterData {\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 activity display status\n * @param status - Activity display status\n * @returns Badge action type for styling\n */\nexport const getActivityStatusBadgeAction = (\n  status: GenericDisplayStatus\n): BadgeActionType => getStatusBadgeAction(status);\n\n/**\n * Activity status options for filter\n */\nexport const ACTIVITY_FILTER_STATUS_OPTIONS: ActivityFilterOption[] = [\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 * Map API status to display status\n * @param apiStatus - Status from backend API\n * @returns Formatted status for UI display\n */\nexport const mapActivityStatusToDisplay = (\n  apiStatus: GenericApiStatus\n): GenericDisplayStatus => mapApiStatusToDisplay(apiStatus);\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":["z","GenericApiStatus","z"]}