{"version":3,"file":"dashboard.mjs","sources":["../../../src/lib/queries/dashboard.ts"],"sourcesContent":["/**\n * @file Dashboard Query Factories\n * @description Query factories for dashboard data fetching using standardized apiClient\n */\n\nimport {\n  useQuery,\n  useSuspenseQuery,\n  type UseQueryOptions,\n  type UseSuspenseQueryOptions,\n} from '@tanstack/react-query';\nimport { queryKeys } from './queryClient';\nimport { TIMING } from '@/config';\nimport { apiClient } from '@/lib/api';\n\n/**\n * Dashboard stats response type\n */\nexport interface DashboardStats {\n  totalUsers: number;\n  activeUsers: number;\n  totalReports: number;\n  pendingTasks: number;\n  recentActivity: number;\n  growthRate: number;\n}\n\n/**\n * Dashboard chart data point\n */\nexport interface ChartDataPoint {\n  date: string;\n  value: number;\n  label?: string;\n}\n\n/**\n * Dashboard charts response type\n */\nexport interface DashboardCharts {\n  userGrowth: ChartDataPoint[];\n  reportTrends: ChartDataPoint[];\n  activityByDay: ChartDataPoint[];\n}\n\n/**\n * Activity item type\n */\nexport interface ActivityItem {\n  id: string;\n  type: 'create' | 'update' | 'delete' | 'view';\n  entityType: string;\n  entityId: string;\n  userId: string;\n  userName: string;\n  timestamp: string;\n  description: string;\n}\n\n/**\n * Paginated activity response\n */\nexport interface ActivityResponse {\n  items: ActivityItem[];\n  total: number;\n  page: number;\n  pageSize: number;\n  hasMore: boolean;\n}\n\n/**\n * Fetch dashboard statistics using apiClient\n * @throws {ApiError} When the request fails\n */\nasync function fetchDashboardStats(): Promise<DashboardStats> {\n  const response = await apiClient.get<DashboardStats>('/api/dashboard/stats');\n  return response.data;\n}\n\n/**\n * Fetch dashboard charts data using apiClient\n * @throws {ApiError} When the request fails\n */\nasync function fetchDashboardCharts(range: string): Promise<DashboardCharts> {\n  const response = await apiClient.get<DashboardCharts>('/api/dashboard/charts', {\n    params: { range },\n  });\n  return response.data;\n}\n\n/**\n * Fetch activity feed with pagination using apiClient\n * @throws {ApiError} When the request fails\n */\nasync function fetchActivity(page: number): Promise<ActivityResponse> {\n  const response = await apiClient.get<ActivityResponse>('/api/dashboard/activity', {\n    params: { page },\n  });\n  return response.data;\n}\n\n/**\n * Query options factory for dashboard stats\n */\nexport function dashboardStatsQueryOptions(): UseQueryOptions<DashboardStats> {\n  return {\n    queryKey: queryKeys.dashboard.stats(),\n    queryFn: fetchDashboardStats,\n    staleTime: TIMING.QUERY.STALE.SHORT, // 1 minute\n    meta: {\n      errorMessage: 'Failed to load dashboard statistics',\n    },\n  };\n}\n\n/**\n * Query options factory for dashboard charts\n */\nexport function dashboardChartsQueryOptions(\n  range: string = '7d'\n): UseQueryOptions<DashboardCharts> {\n  return {\n    queryKey: queryKeys.dashboard.charts(range),\n    queryFn: async () => fetchDashboardCharts(range),\n    staleTime: TIMING.QUERY.STALE.MEDIUM, // 5 minutes\n    meta: {\n      errorMessage: 'Failed to load dashboard charts',\n    },\n  };\n}\n\n/**\n * Suspense query options factory for dashboard charts\n */\nexport function dashboardChartsSuspenseQueryOptions(\n  range: string = '7d'\n): UseSuspenseQueryOptions<DashboardCharts> {\n  return {\n    queryKey: queryKeys.dashboard.charts(range),\n    queryFn: async () => fetchDashboardCharts(range),\n    staleTime: TIMING.QUERY.STALE.MEDIUM, // 5 minutes\n    meta: {\n      errorMessage: 'Failed to load dashboard charts',\n    },\n  };\n}\n\n/**\n * Query options factory for activity feed\n */\nexport function activityQueryOptions(page: number = 1): UseQueryOptions<ActivityResponse> {\n  return {\n    queryKey: queryKeys.dashboard.activity(page),\n    queryFn: async () => fetchActivity(page),\n    staleTime: TIMING.QUERY.STALE.REALTIME, // 30 seconds\n    meta: {\n      errorMessage: 'Failed to load activity feed',\n    },\n  };\n}\n\n/**\n * Suspense query options factory for dashboard stats\n */\nexport function dashboardStatsSuspenseQueryOptions(): UseSuspenseQueryOptions<DashboardStats> {\n  return {\n    queryKey: queryKeys.dashboard.stats(),\n    queryFn: fetchDashboardStats,\n    staleTime: TIMING.QUERY.STALE.SHORT, // 1 minute\n    meta: {\n      errorMessage: 'Failed to load dashboard statistics',\n    },\n  };\n}\n\n/**\n * Suspense query options factory for activity feed\n */\nexport function activitySuspenseQueryOptions(\n  page: number = 1\n): UseSuspenseQueryOptions<ActivityResponse> {\n  return {\n    queryKey: queryKeys.dashboard.activity(page),\n    queryFn: async () => fetchActivity(page),\n    staleTime: TIMING.QUERY.STALE.REALTIME, // 30 seconds\n    meta: {\n      errorMessage: 'Failed to load activity feed',\n    },\n  };\n}\n\n/**\n * Hook to fetch dashboard stats\n */\nexport function useDashboardStats(): ReturnType<typeof useQuery<DashboardStats>> {\n  return useQuery(dashboardStatsQueryOptions());\n}\n\n/**\n * Hook to fetch dashboard stats with Suspense\n */\nexport function useDashboardStatsSuspense(): ReturnType<typeof useSuspenseQuery<DashboardStats>> {\n  return useSuspenseQuery(dashboardStatsSuspenseQueryOptions());\n}\n\n/**\n * Hook to fetch dashboard charts\n */\nexport function useDashboardCharts(\n  range: string = '7d'\n): ReturnType<typeof useQuery<DashboardCharts>> {\n  return useQuery(dashboardChartsQueryOptions(range));\n}\n\n/**\n * Hook to fetch dashboard charts with Suspense\n */\nexport function useDashboardChartsSuspense(\n  range: string = '7d'\n): ReturnType<typeof useSuspenseQuery<DashboardCharts>> {\n  return useSuspenseQuery(dashboardChartsSuspenseQueryOptions(range));\n}\n\n/**\n * Hook to fetch activity feed\n */\nexport function useActivity(page: number = 1): ReturnType<typeof useQuery<ActivityResponse>> {\n  return useQuery(activityQueryOptions(page));\n}\n\n/**\n * Hook to fetch activity feed with Suspense\n */\nexport function useActivitySuspense(\n  page: number = 1\n): ReturnType<typeof useSuspenseQuery<ActivityResponse>> {\n  return useSuspenseQuery(activitySuspenseQueryOptions(page));\n}\n"],"names":["fetchDashboardStats","apiClient","fetchDashboardCharts","range","fetchActivity","page","dashboardStatsQueryOptions","queryKeys","TIMING","dashboardChartsQueryOptions","dashboardChartsSuspenseQueryOptions","activityQueryOptions","dashboardStatsSuspenseQueryOptions","activitySuspenseQueryOptions","useDashboardStats","useQuery","useDashboardStatsSuspense","useSuspenseQuery","useDashboardCharts","useDashboardChartsSuspense","useActivity","useActivitySuspense"],"mappings":";;;;;;AA0EA,eAAeA,IAA+C;AAE5D,UADiB,MAAMC,EAAU,IAAoB,sBAAsB,GAC3D;AAClB;AAMA,eAAeC,EAAqBC,GAAyC;AAI3E,UAHiB,MAAMF,EAAU,IAAqB,yBAAyB;AAAA,IAC7E,QAAQ,EAAE,OAAAE,EAAA;AAAA,EAAM,CACjB,GACe;AAClB;AAMA,eAAeC,EAAcC,GAAyC;AAIpE,UAHiB,MAAMJ,EAAU,IAAsB,2BAA2B;AAAA,IAChF,QAAQ,EAAE,MAAAI,EAAA;AAAA,EAAK,CAChB,GACe;AAClB;AAKO,SAASC,IAA8D;AAC5E,SAAO;AAAA,IACL,UAAUC,EAAU,UAAU,MAAA;AAAA,IAC9B,SAASP;AAAA,IACT,WAAWQ,EAAO,MAAM,MAAM;AAAA;AAAA,IAC9B,MAAM;AAAA,MACJ,cAAc;AAAA,IAAA;AAAA,EAChB;AAEJ;AAKO,SAASC,EACdN,IAAgB,MACkB;AAClC,SAAO;AAAA,IACL,UAAUI,EAAU,UAAU,OAAOJ,CAAK;AAAA,IAC1C,SAAS,YAAYD,EAAqBC,CAAK;AAAA,IAC/C,WAAWK,EAAO,MAAM,MAAM;AAAA;AAAA,IAC9B,MAAM;AAAA,MACJ,cAAc;AAAA,IAAA;AAAA,EAChB;AAEJ;AAKO,SAASE,EACdP,IAAgB,MAC0B;AAC1C,SAAO;AAAA,IACL,UAAUI,EAAU,UAAU,OAAOJ,CAAK;AAAA,IAC1C,SAAS,YAAYD,EAAqBC,CAAK;AAAA,IAC/C,WAAWK,EAAO,MAAM,MAAM;AAAA;AAAA,IAC9B,MAAM;AAAA,MACJ,cAAc;AAAA,IAAA;AAAA,EAChB;AAEJ;AAKO,SAASG,EAAqBN,IAAe,GAAsC;AACxF,SAAO;AAAA,IACL,UAAUE,EAAU,UAAU,SAASF,CAAI;AAAA,IAC3C,SAAS,YAAYD,EAAcC,CAAI;AAAA,IACvC,WAAWG,EAAO,MAAM,MAAM;AAAA;AAAA,IAC9B,MAAM;AAAA,MACJ,cAAc;AAAA,IAAA;AAAA,EAChB;AAEJ;AAKO,SAASI,IAA8E;AAC5F,SAAO;AAAA,IACL,UAAUL,EAAU,UAAU,MAAA;AAAA,IAC9B,SAASP;AAAA,IACT,WAAWQ,EAAO,MAAM,MAAM;AAAA;AAAA,IAC9B,MAAM;AAAA,MACJ,cAAc;AAAA,IAAA;AAAA,EAChB;AAEJ;AAKO,SAASK,EACdR,IAAe,GAC4B;AAC3C,SAAO;AAAA,IACL,UAAUE,EAAU,UAAU,SAASF,CAAI;AAAA,IAC3C,SAAS,YAAYD,EAAcC,CAAI;AAAA,IACvC,WAAWG,EAAO,MAAM,MAAM;AAAA;AAAA,IAC9B,MAAM;AAAA,MACJ,cAAc;AAAA,IAAA;AAAA,EAChB;AAEJ;AAKO,SAASM,IAAiE;AAC/E,SAAOC,EAAST,GAA4B;AAC9C;AAKO,SAASU,IAAiF;AAC/F,SAAOC,EAAiBL,GAAoC;AAC9D;AAKO,SAASM,EACdf,IAAgB,MAC8B;AAC9C,SAAOY,EAASN,EAA4BN,CAAK,CAAC;AACpD;AAKO,SAASgB,EACdhB,IAAgB,MACsC;AACtD,SAAOc,EAAiBP,EAAoCP,CAAK,CAAC;AACpE;AAKO,SAASiB,EAAYf,IAAe,GAAkD;AAC3F,SAAOU,EAASJ,EAAqBN,CAAI,CAAC;AAC5C;AAKO,SAASgB,EACdhB,IAAe,GACwC;AACvD,SAAOY,EAAiBJ,EAA6BR,CAAI,CAAC;AAC5D;"}