{"version":3,"file":"reports-loader.mjs","sources":["../../../../src/lib/routing/loaders/reports-loader.ts"],"sourcesContent":["import type { LoaderFunctionArgs } from 'react-router-dom';\nimport { queryClient, queryKeys } from '@/lib/queries/queryClient';\nimport { apiClient } from '@/lib/api';\n\n/**\n * Fetch single report by ID using the centralized API client\n */\nasync function fetchReport(id: string): Promise<unknown> {\n  const response = await apiClient.get(`/api/reports/${id}`);\n  return response.data;\n}\n\n/**\n * Fetch reports list using the centralized API client\n */\nasync function fetchReports(params: Record<string, unknown>): Promise<unknown> {\n  const queryParams: Record<string, string | number | boolean | undefined> = {};\n  Object.entries(params).forEach(([key, value]) => {\n    if (value !== undefined && value !== null) {\n      if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n        queryParams[key] = value;\n      } else {\n        // Convert other types to JSON string\n        queryParams[key] = JSON.stringify(value);\n      }\n    }\n  });\n  const response = await apiClient.get('/api/reports', { params: queryParams });\n  return response.data;\n}\n\n/**\n * Data router loader that prefetches reports data before rendering.\n */\nexport async function reportsLoader({ request, params }: LoaderFunctionArgs): Promise<null> {\n  const url = new URL(request.url);\n  const reportId = params.id;\n\n  // If viewing a specific report, prefetch it\n  if (reportId != null && reportId !== '') {\n    await queryClient.prefetchQuery({\n      queryKey: queryKeys.reports.detail(reportId),\n      queryFn: async () => fetchReport(reportId),\n    });\n  } else {\n    // Otherwise, prefetch the reports list\n    const page = parseInt(url.searchParams.get('page') ?? '1', 10);\n    const limit = parseInt(url.searchParams.get('limit') ?? '10', 10);\n    const search = url.searchParams.get('search') ?? undefined;\n    const status = url.searchParams.get('status') ?? undefined;\n\n    await queryClient.prefetchQuery({\n      queryKey: queryKeys.reports.list({ page, limit, search, status }),\n      queryFn: async () => fetchReports({ page, limit, search, status }),\n    });\n  }\n\n  return null;\n}\n"],"names":["fetchReport","id","apiClient","fetchReports","params","queryParams","key","value","reportsLoader","request","url","reportId","queryClient","queryKeys","page","limit","search","status"],"mappings":";;;AAOA,eAAeA,EAAYC,GAA8B;AAEvD,UADiB,MAAMC,EAAU,IAAI,gBAAgBD,CAAE,EAAE,GACzC;AAClB;AAKA,eAAeE,EAAaC,GAAmD;AAC7E,QAAMC,IAAqE,CAAA;AAC3E,gBAAO,QAAQD,CAAM,EAAE,QAAQ,CAAC,CAACE,GAAKC,CAAK,MAAM;AAC/C,IAA2BA,KAAU,SAC/B,OAAOA,KAAU,YAAY,OAAOA,KAAU,YAAY,OAAOA,KAAU,YAC7EF,EAAYC,CAAG,IAAIC,IAGnBF,EAAYC,CAAG,IAAI,KAAK,UAAUC,CAAK;AAAA,EAG7C,CAAC,IACgB,MAAML,EAAU,IAAI,gBAAgB,EAAE,QAAQG,GAAa,GAC5D;AAClB;AAKA,eAAsBG,EAAc,EAAE,SAAAC,GAAS,QAAAL,KAA6C;AAC1F,QAAMM,IAAM,IAAI,IAAID,EAAQ,GAAG,GACzBE,IAAWP,EAAO;AAGxB,MAAIO,KAAY,QAAQA,MAAa;AACnC,UAAMC,EAAY,cAAc;AAAA,MAC9B,UAAUC,EAAU,QAAQ,OAAOF,CAAQ;AAAA,MAC3C,SAAS,YAAYX,EAAYW,CAAQ;AAAA,IAAA,CAC1C;AAAA,OACI;AAEL,UAAMG,IAAO,SAASJ,EAAI,aAAa,IAAI,MAAM,KAAK,KAAK,EAAE,GACvDK,IAAQ,SAASL,EAAI,aAAa,IAAI,OAAO,KAAK,MAAM,EAAE,GAC1DM,IAASN,EAAI,aAAa,IAAI,QAAQ,KAAK,QAC3CO,IAASP,EAAI,aAAa,IAAI,QAAQ,KAAK;AAEjD,UAAME,EAAY,cAAc;AAAA,MAC9B,UAAUC,EAAU,QAAQ,KAAK,EAAE,MAAAC,GAAM,OAAAC,GAAO,QAAAC,GAAQ,QAAAC,GAAQ;AAAA,MAChE,SAAS,YAAYd,EAAa,EAAE,MAAAW,GAAM,OAAAC,GAAO,QAAAC,GAAQ,QAAAC,GAAQ;AAAA,IAAA,CAClE;AAAA,EACH;AAEA,SAAO;AACT;"}