ahs-cti 0.0.3 → 0.0.5

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.
Files changed (73) hide show
  1. package/dist/agentDetailReport-F7XZLVVO.mjs +16 -0
  2. package/dist/{agentPerformanceReport-F52KNRKW.mjs → agentPerformanceReport-U2QGVTXF.mjs} +31 -15
  3. package/dist/agentPerformanceReport-U2QGVTXF.mjs.map +1 -0
  4. package/dist/{auditReport-CJ23LXIZ.mjs → auditReport-DEVQDTDT.mjs} +4 -3
  5. package/dist/{auditReport-CJ23LXIZ.mjs.map → auditReport-DEVQDTDT.mjs.map} +1 -1
  6. package/dist/{callHistory-ZA3SCD7K.mjs → callHistory-MRBBY3UO.mjs} +49 -20
  7. package/dist/callHistory-MRBBY3UO.mjs.map +1 -0
  8. package/dist/{campaigns-PIXRNMM4.mjs → campaigns-ERO3QM6I.mjs} +246 -109
  9. package/dist/campaigns-ERO3QM6I.mjs.map +1 -0
  10. package/dist/{cdrReport-7TKZERRX.mjs → cdrReport-EZNOCELK.mjs} +77 -30
  11. package/dist/cdrReport-EZNOCELK.mjs.map +1 -0
  12. package/dist/chunk-3DOSR6LQ.mjs +14 -0
  13. package/dist/chunk-3DOSR6LQ.mjs.map +1 -0
  14. package/dist/chunk-53DYH64M.mjs +422 -0
  15. package/dist/chunk-53DYH64M.mjs.map +1 -0
  16. package/dist/{chunk-VZCHJLAW.mjs → chunk-5FSMIU5K.mjs} +2 -2
  17. package/dist/{chunk-NUYGQI7D.mjs → chunk-6MURUWDX.mjs} +39 -14
  18. package/dist/chunk-6MURUWDX.mjs.map +1 -0
  19. package/dist/{chunk-X376SOIZ.mjs → chunk-AJQBR3AZ.mjs} +14279 -9170
  20. package/dist/chunk-AJQBR3AZ.mjs.map +1 -0
  21. package/dist/{chunk-RZZQ42MG.mjs → chunk-BVQNDAS6.mjs} +6 -3
  22. package/dist/{chunk-RZZQ42MG.mjs.map → chunk-BVQNDAS6.mjs.map} +1 -1
  23. package/dist/chunk-DXZIYCNQ.mjs +14 -0
  24. package/dist/chunk-DXZIYCNQ.mjs.map +1 -0
  25. package/dist/{chunk-L4LLUMYA.mjs → chunk-ICGEHYJL.mjs} +11 -3
  26. package/dist/chunk-ICGEHYJL.mjs.map +1 -0
  27. package/dist/{chunk-JAAPNDP2.mjs → chunk-ISQBOS5Q.mjs} +49 -45
  28. package/dist/chunk-ISQBOS5Q.mjs.map +1 -0
  29. package/dist/chunk-MBHP7UOP.mjs +14 -0
  30. package/dist/chunk-MBHP7UOP.mjs.map +1 -0
  31. package/dist/chunk-MBXHRFGP.mjs +14 -0
  32. package/dist/chunk-MBXHRFGP.mjs.map +1 -0
  33. package/dist/chunk-MFZKONNR.mjs +14 -0
  34. package/dist/chunk-MFZKONNR.mjs.map +1 -0
  35. package/dist/{chunk-DBSNJ3QH.mjs → chunk-Q7FIRWF2.mjs} +9 -2
  36. package/dist/chunk-Q7FIRWF2.mjs.map +1 -0
  37. package/dist/{chunk-BU6FMNBY.mjs → chunk-QPOHVXUK.mjs} +2 -2
  38. package/dist/chunk-RSL5OBRQ.mjs +28 -0
  39. package/dist/chunk-RSL5OBRQ.mjs.map +1 -0
  40. package/dist/chunk-XA5SCAZJ.mjs +14 -0
  41. package/dist/chunk-XA5SCAZJ.mjs.map +1 -0
  42. package/dist/chunk-XMRM5VR4.mjs +119 -0
  43. package/dist/chunk-XMRM5VR4.mjs.map +1 -0
  44. package/dist/{chunk-NQL4VODC.mjs → chunk-YFW47Y76.mjs} +12 -4
  45. package/dist/chunk-YFW47Y76.mjs.map +1 -0
  46. package/dist/index.js +7728 -6874
  47. package/dist/index.js.map +1 -1
  48. package/dist/index.mjs +231 -106
  49. package/dist/index.mjs.map +1 -1
  50. package/dist/{liveStatus-IQIEZZE5.mjs → liveStatus-F6AKCC27.mjs} +4 -4
  51. package/dist/{loginReport-A4GUPW3G.mjs → loginReport-MWTI4G6O.mjs} +245 -73
  52. package/dist/loginReport-MWTI4G6O.mjs.map +1 -0
  53. package/dist/{managementDashboard-345DQMNO.mjs → managementDashboard-6UBOCLBA.mjs} +19 -12
  54. package/dist/{managementDashboard-345DQMNO.mjs.map → managementDashboard-6UBOCLBA.mjs.map} +1 -1
  55. package/package.json +1 -1
  56. package/dist/agentDetailReport-CP7WYOIX.mjs +0 -12
  57. package/dist/agentPerformanceReport-F52KNRKW.mjs.map +0 -1
  58. package/dist/callHistory-ZA3SCD7K.mjs.map +0 -1
  59. package/dist/campaigns-PIXRNMM4.mjs.map +0 -1
  60. package/dist/cdrReport-7TKZERRX.mjs.map +0 -1
  61. package/dist/chunk-DBSNJ3QH.mjs.map +0 -1
  62. package/dist/chunk-GC3WM33W.mjs +0 -5783
  63. package/dist/chunk-GC3WM33W.mjs.map +0 -1
  64. package/dist/chunk-JAAPNDP2.mjs.map +0 -1
  65. package/dist/chunk-L4LLUMYA.mjs.map +0 -1
  66. package/dist/chunk-NQL4VODC.mjs.map +0 -1
  67. package/dist/chunk-NUYGQI7D.mjs.map +0 -1
  68. package/dist/chunk-X376SOIZ.mjs.map +0 -1
  69. package/dist/loginReport-A4GUPW3G.mjs.map +0 -1
  70. /package/dist/{agentDetailReport-CP7WYOIX.mjs.map → agentDetailReport-F7XZLVVO.mjs.map} +0 -0
  71. /package/dist/{chunk-VZCHJLAW.mjs.map → chunk-5FSMIU5K.mjs.map} +0 -0
  72. /package/dist/{chunk-BU6FMNBY.mjs.map → chunk-QPOHVXUK.mjs.map} +0 -0
  73. /package/dist/{liveStatus-IQIEZZE5.mjs.map → liveStatus-F6AKCC27.mjs.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../call-control-sdk/lib/pages/agentDetailReport/index.tsx","../call-control-sdk/lib/pages/agentDetailReport/useAgentDetailReport.ts"],"sourcesContent":["import React, { useState, useEffect, useMemo, useCallback } from \"react\";\n\nimport {\n Box, Typography, Table, TableBody, TableCell, TableContainer,\n TableHead, TableRow, TablePagination, IconButton, Chip,\n CircularProgress, Alert,\n} from \"@mui/material\";\nimport AppButton from \"../common/components/AppButton\";\nimport SearchIcon from \"@mui/icons-material/Search\";\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\nimport PlayArrowIcon from \"@mui/icons-material/PlayArrow\";\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\nimport Tooltip from \"@mui/material/Tooltip\";\nimport {\n BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip as RTooltip,\n PieChart, Pie, Cell, Legend, ResponsiveContainer, LabelList,\n} from \"recharts\";\nimport dayjs, { type Dayjs } from \"dayjs\";\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\nimport { DatePicker } from \"@mui/x-date-pickers/DatePicker\";\nimport { getAgentDetailReport, getCdrReport, getRecordingByCall } from \"./useAgentDetailReport\";\nimport { deepFindArray } from \"../../services/axios\";\nimport { sdkStateManager } from \"../../hooks/sdk-state\";\nimport type {\n AgentDetailReportResponse,\n AgentDetailProfile,\n CdrRecordResponse,\n CdrReportParams,\n ReportData,\n} from \"./types\";\nimport PageHeader from \"../common/components/PageHeader\";\n\nimport { SDKProvider } from \"../../components/SDKProvider\";\n\nconst C = {\n navy: \"#0d2a56\", blue: \"#1565c8\", green: \"#0a9a62\", amber: \"#c47c00\",\n red: \"#cc2a2a\", purple: \"#6b3fbf\", teal: \"#0b7a8f\",\n bg: \"#fff\", surface: \"#fff\", s2: \"#f7f9fc\", s3: \"#eef2f7\",\n b1: \"rgba(20,50,100,.07)\", b2: \"rgba(20,50,100,.13)\",\n t1: \"#0d1e35\", t2: \"#364f6e\", t3: \"#7a93b5\", t4: \"#bccad9\",\n blt: \"#e8f0fc\", glt: \"#e4f6ef\", alt: \"#fdf3e0\", rlt: \"#fde8e8\",\n plt: \"#f0eafa\", tlt: \"#e3f4f7\",\n};\n\nconst monoSx = { fontFamily: \"'JetBrains Mono', monospace\", fontSize: 11, fontWeight: 600 };\nconst QUEUE_COLORS = [C.blue, C.green, C.purple, C.amber, C.teal, C.red, C.navy];\n\nfunction StatCard({ value, label, color }: { value: string | number; label: string; color: string }) {\n return (\n <Box sx={{\n px: 1.5, py: 1.2,\n borderRadius: \"10px\",\n backgroundColor: \"#fafafa\",\n border: \"1px solid #e0e0e0\",\n borderLeftWidth: \"3px\",\n borderLeftStyle: \"solid\",\n borderLeftColor: color,\n }}>\n <Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.72rem\", fontWeight: 600, color: \"#888\", mb: 0.3 }}>\n {label}\n </Typography>\n <Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.95rem\", fontWeight: 700, color: \"#1a1a1a\" }}>\n {value}\n </Typography>\n </Box>\n );\n}\n\nfunction StatusChip({ status }: { status: string }) {\n const s = status?.toLowerCase();\n const isAns = s === \"answered\";\n const isAband = s === \"abandoned\";\n return (\n <Chip label={status || \"—\"} size=\"small\" sx={{\n fontSize: 11, fontWeight: 700, height: 22,\n background: isAns ? C.glt : isAband ? C.alt : C.rlt,\n color: isAns ? C.green : isAband ? C.amber : C.red,\n border: `1px solid ${isAns ? \"rgba(10,154,98,.2)\" : isAband ? \"rgba(196,124,0,.2)\" : \"rgba(204,42,42,.2)\"}`,\n fontFamily: \"'JetBrains Mono', monospace\",\n }} />\n );\n}\n\nfunction CallTypeChip({ type }: { type: string }) {\n const isIn = type?.toLowerCase() === \"inbound\";\n return (\n <Chip label={type || \"—\"} size=\"small\" sx={{\n fontSize: 11, fontWeight: 700, height: 22,\n background: isIn ? C.glt : C.blt,\n color: isIn ? C.green : C.blue,\n border: `1px solid ${isIn ? \"rgba(10,154,98,.2)\" : \"rgba(21,101,200,.2)\"}`,\n fontFamily: \"'JetBrains Mono', monospace\",\n }} />\n );\n}\n\nfunction RecordingCell({ callUuid, recordingPath }: { callUuid: string; recordingPath: string | null }) {\n const [audioUrl, setAudioUrl] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n\n if (!recordingPath) {\n return (\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\n <Tooltip title=\"No recording available\">\n <span>\n <IconButton size=\"small\" disabled sx={{ p: 0.4 }}>\n <PlayArrowIcon sx={{ fontSize: 16 }} />\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title=\"No recording available\">\n <span>\n <IconButton size=\"small\" disabled sx={{ p: 0.4 }}>\n <FileDownloadIcon sx={{ fontSize: 16 }} />\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n );\n }\n\n const handlePlay = async () => {\n if (audioUrl) return;\n try {\n setLoading(true);\n setError(false);\n const blob = await getRecordingByCall(callUuid);\n const url = URL.createObjectURL(blob);\n setAudioUrl(url);\n } catch {\n setError(true);\n } finally {\n setLoading(false);\n }\n };\n\n const handleDownload = async () => {\n try {\n const blob = audioUrl\n ? await fetch(audioUrl).then((r) => r.blob())\n : await getRecordingByCall(callUuid);\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `recording_${callUuid}.wav`;\n a.click();\n URL.revokeObjectURL(url);\n } catch {\n /* ignore */\n }\n };\n\n if (audioUrl) {\n return (\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\n <audio\n controls\n autoPlay\n src={audioUrl}\n onEnded={() => { if (audioUrl.startsWith(\"blob:\")) URL.revokeObjectURL(audioUrl); setAudioUrl(null); }}\n style={{ width: 140, height: 30 }}\n />\n <Tooltip title=\"Download\">\n <IconButton size=\"small\" onClick={handleDownload} sx={{ color: C.blue, p: 0.4 }}>\n <FileDownloadIcon sx={{ fontSize: 16 }} />\n </IconButton>\n </Tooltip>\n </Box>\n );\n }\n\n return (\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\n <Tooltip title={error ? \"Recording unavailable\" : \"Play\"}>\n <span>\n <IconButton size=\"small\" onClick={handlePlay} disabled={loading || error} sx={{ color: C.green, p: 0.4 }}>\n {loading ? <CircularProgress size={14} /> : <PlayArrowIcon sx={{ fontSize: 16 }} />}\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title={error ? \"Recording unavailable\" : \"Download\"}>\n <span>\n <IconButton size=\"small\" onClick={handleDownload} disabled={loading || error} sx={{ color: C.blue, p: 0.4 }}>\n <FileDownloadIcon sx={{ fontSize: 16 }} />\n </IconButton>\n </span>\n </Tooltip>\n {error && <Chip label=\"No File\" size=\"small\" sx={{ fontSize: \"0.6rem\", height: 18 }} />}\n </Box>\n );\n}\n\nconst cdrHeadSx = {\n bgcolor: \"#f1f1f1\", color: \"#333\", fontWeight: 600,\n whiteSpace: \"nowrap\" as const, fontSize: \"14px\",\n py: 0.7, px: 1,\n};\n\nexport interface AgentDetailReportProps {\n agentRow?: ReportData | null;\n onBack?: () => void;\n from?: \"REPORTS_LIST\" | string;\n initialStartDate?: Dayjs | null;\n initialEndDate?: Dayjs | null;\n initialQuickRange?: string;\n}\n\nfunction AgentDetailReportContent({ agentRow: propAgentRow, onBack, from, initialStartDate, initialEndDate, initialQuickRange }: AgentDetailReportProps = {}) {\n const agentRow: ReportData | null = propAgentRow || null;\n const isFromReportsList = from === \"REPORTS_LIST\";\n const agentIdFromRow = isFromReportsList\n ? agentRow?.agentDetails?.agentId || \"\"\n : sdkStateManager.getState().agentId || agentRow?.agentDetails?.agentId || \"\";\n\n const [quickRange, setQuickRange] = useState<string>(initialQuickRange || \"today\");\n const [startDate, setStartDate] = useState<Dayjs | null>(initialStartDate ?? dayjs());\n const [endDate, setEndDate] = useState<Dayjs | null>(initialEndDate ?? dayjs());\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const syncFilterToUrl = (_sd: Dayjs, _ed: Dayjs, _range: string) => { /* no-op in SDK context */ };\n\n const [activeTab, setActiveTab] = useState(0);\n\n const [detail, setDetail] = useState<AgentDetailReportResponse | null>(null);\n const [detailLoading, setDetailLoading] = useState(!isFromReportsList);\n const [detailError, setDetailError] = useState(\"\");\n\n const [cdrRecords, setCdrRecords] = useState<CdrRecordResponse[]>([]);\n const [cdrTotal, setCdrTotal] = useState(0);\n const [cdrPage, setCdrPage] = useState(0);\n const [cdrPageSize, setCdrPageSize] = useState(10);\n const [cdrLoading, setCdrLoading] = useState(false);\n const [cdrError, setCdrError] = useState(\"\");\n\n const profile: AgentDetailProfile | null = detail?.profile || null;\n const agentName = profile?.fullName || agentRow?.agentDetails?.fullName || \"Unknown Agent\";\n const showInitialSpinner = !isFromReportsList && detailLoading && !profile && !agentRow?.agentDetails?.fullName;\n\n const setQuick = (range: string) => {\n setQuickRange(range);\n const today = dayjs();\n let sd: Dayjs = today;\n const ed: Dayjs = today;\n if (range === \"week\") sd = today.startOf(\"week\");\n else if (range === \"month\") sd = today.startOf(\"month\");\n setStartDate(sd);\n setEndDate(ed);\n syncFilterToUrl(sd, ed, range);\n };\n\n const fetchDetailFn = async (sd: Dayjs, ed: Dayjs) => {\n if (!agentIdFromRow) return;\n try {\n setDetailLoading(true);\n setDetailError(\"\");\n const res = await getAgentDetailReport(agentIdFromRow, {\n start_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\n end_date: ed.isSame(dayjs(), \"day\") ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\") : ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\n });\n setDetail(res);\n } catch (err: any) {\n setDetailError(err?.message || \"Failed to load agent detail\");\n } finally {\n setDetailLoading(false);\n }\n };\n\n const fetchCdrFn = async (sd: Dayjs, ed: Dayjs, page: number, pageSize: number) => {\n if (!agentIdFromRow) return;\n try {\n setCdrLoading(true);\n setCdrError(\"\");\n const params: CdrReportParams = {\n start_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\n end_date: ed.isSame(dayjs(), \"day\") ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\") : ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\n search: agentIdFromRow,\n page: page + 1,\n pageSize: pageSize,\n };\n const res: any = await getCdrReport(params);\n setCdrRecords(deepFindArray<CdrRecordResponse>(res, [\"data\", \"records\"]));\n setCdrTotal(res?.records?.total ?? res?.total ?? res?.data?.total ?? 0);\n } catch (err: any) {\n setCdrError(err?.message || \"Failed to load call history\");\n } finally {\n setCdrLoading(false);\n }\n };\n\n const handleSearch = (sd?: Dayjs | null, ed?: Dayjs | null) => {\n const fromDate = sd ?? startDate;\n const toDate = ed ?? endDate;\n if (!fromDate || !toDate) return;\n fetchDetailFn(fromDate, toDate);\n setCdrPage(0);\n if (activeTab === 1) fetchCdrFn(fromDate, toDate, 0, cdrPageSize);\n };\n\n useEffect(() => {\n if (agentIdFromRow) fetchDetailFn(startDate ?? dayjs(), endDate ?? dayjs());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [agentIdFromRow]);\n\n useEffect(() => {\n if (activeTab === 1 && startDate && endDate) {\n fetchCdrFn(startDate, endDate, cdrPage, cdrPageSize);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeTab, cdrPage, cdrPageSize]);\n\n const hourlyCallData = useMemo(() => {\n return (detail?.hourlyCalls || []).map((h) => ({\n hour: String(h.hourOfDay).padStart(2, \"0\"),\n answered: h.answeredCalls,\n abandoned: h.missedCalls,\n }));\n }, [detail]);\n\n const timeUtilData = useMemo(() => {\n const tu = detail?.timeUtilisation;\n if (!tu) return [];\n const total = tu.totalLoginSeconds || 1;\n return [\n { name: \"On Call / Handle\", value: tu.onCallSeconds, pct: (tu.onCallSeconds / total) * 100, formatted: tu.onCallFormatted, color: C.blue },\n { name: \"Idle\", value: tu.idleSeconds, pct: (tu.idleSeconds / total) * 100, formatted: tu.idleFormatted, color: \"#e8a0a0\" },\n { name: \"Break\", value: tu.breakSeconds, pct: (tu.breakSeconds / total) * 100, formatted: tu.breakFormatted, color: C.amber },\n ];\n }, [detail]);\n\n const talkDurationBuckets = useMemo(() => {\n const items = [...(detail?.talkDistribution || [])].sort((a, b) => a.bucketOrder - b.bucketOrder);\n const total = items.reduce((s, b) => s + (b.callCount || 0), 0);\n return items.map((b) => ({\n bucket: b.bucketLabel,\n count: b.callCount,\n minSeconds: b.minSeconds,\n maxSeconds: b.maxSeconds,\n pct: total > 0 ? (b.callCount / total) * 100 : 0,\n }));\n }, [detail]);\n\n const talkDurationTotal = useMemo(\n () => talkDurationBuckets.reduce((s, b) => s + (b.count || 0), 0),\n [talkDurationBuckets],\n );\n\n const queuePieData = useMemo(() => {\n return (detail?.callsByQueue || []).map((q, i) => ({\n name: q.queueName,\n value: q.callCount,\n pctOfTotal: q.pctOfTotal,\n color: QUEUE_COLORS[i % QUEUE_COLORS.length],\n }));\n }, [detail]);\n\n const queueMetrics = useMemo(() => {\n const items = detail?.queueMetrics || [];\n const grandTotal = items.reduce((sum, q) => sum + q.totalCalls, 0);\n return items.map((q, i) => ({\n ...q,\n pctOfTotal: grandTotal > 0 ? (q.totalCalls / grandTotal) * 100 : 0,\n answerRate: q.totalCalls > 0 ? (q.answeredCalls / q.totalCalls) * 100 : 0,\n color: QUEUE_COLORS[i % QUEUE_COLORS.length],\n }));\n }, [detail]);\n\n const hourlyChartTitle = useMemo(() => {\n if (quickRange === \"today\") return \"Hourly Call Volume — Today\";\n if (quickRange === \"month\") return `Hourly Call Volume — ${dayjs().format(\"MMMM YYYY\")}`;\n if (quickRange === \"week\") return \"Hourly Call Volume — This Week\";\n if (startDate && endDate) {\n if (startDate.isSame(endDate, \"day\")) return `Hourly Call Volume — ${startDate.format(\"DD MMM YYYY\")}`;\n return `Hourly Call Volume — ${startDate.format(\"DD MMM YYYY\")} to ${endDate.format(\"DD MMM YYYY\")}`;\n }\n return \"Hourly Call Volume\";\n }, [quickRange, startDate, endDate]);\n\n const handleBack = useCallback(() => {\n onBack?.();\n }, [onBack]);\n\n if (!agentIdFromRow) {\n return (\n <Box sx={{ p: 4, textAlign: \"center\" }}>\n <Typography sx={{ color: C.t3, mb: 2 }}>No agent selected.</Typography>\n {isFromReportsList && (\n <AppButton onClick={handleBack}>\n Go Back\n </AppButton>\n )}\n </Box>\n );\n }\n\n if (showInitialSpinner) {\n return (\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", minHeight: 400 }}>\n <CircularProgress size={36} />\n </Box>\n );\n }\n\n const tabs = [\"Overview\", \"Call History\", \"Break Details\"];\n\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <Box sx={{ background: C.bg, minHeight: \"100vh\" }}>\n <PageHeader\n title={agentName}\n showBack={isFromReportsList}\n onBack={handleBack}\n />\n\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flexWrap: \"wrap\", pb: 1.5, px: 2 }}>\n <DatePicker value={startDate} onChange={(val) => { const d = val as Dayjs | null; setStartDate(d); setQuickRange(\"custom\"); if (d && endDate) syncFilterToUrl(d, endDate, \"custom\"); }} slotProps={{ textField: { size: \"small\", sx: { width: 150, \"& .MuiOutlinedInput-root\": { borderRadius: \"7px\", fontSize: 12, height: 30 }, \"& .MuiInputBase-input\": { py: \"4px\", fontSize: 12 } } } }} />\n <Typography sx={{ fontSize: 12, color: C.t3 }}>to</Typography>\n <DatePicker value={endDate} onChange={(val) => { const d = val as Dayjs | null; setEndDate(d); setQuickRange(\"custom\"); if (startDate && d) syncFilterToUrl(startDate, d, \"custom\"); }} slotProps={{ textField: { size: \"small\", sx: { width: 150, \"& .MuiOutlinedInput-root\": { borderRadius: \"7px\", fontSize: 12, height: 30 }, \"& .MuiInputBase-input\": { py: \"4px\", fontSize: 12 } } } }} />\n <AppButton variant={quickRange === \"today\" ? \"primary\" : \"outlined\"} onClick={() => { setQuick(\"today\"); handleSearch(dayjs(), dayjs()); }} sx={{ whiteSpace: \"nowrap\" }}>Today</AppButton>\n <AppButton variant={quickRange === \"week\" ? \"primary\" : \"outlined\"} onClick={() => { setQuick(\"week\"); handleSearch(dayjs().startOf(\"week\"), dayjs()); }} sx={{ whiteSpace: \"nowrap\" }}>This Week</AppButton>\n <AppButton variant={quickRange === \"month\" ? \"primary\" : \"outlined\"} onClick={() => { setQuick(\"month\"); handleSearch(dayjs().startOf(\"month\"), dayjs()); }} sx={{ whiteSpace: \"nowrap\" }}>This Month</AppButton>\n </Box>\n\n <Box sx={{ py: 2, px: 2, position: \"relative\" }}>\n {detailLoading && (\n <Box sx={{ position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0, background: \"rgba(240,244,248,0.7)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", zIndex: 10 }}>\n <CircularProgress />\n </Box>\n )}\n\n {detailError && <Alert severity=\"error\" sx={{ mb: 2 }} onClose={() => setDetailError(\"\")}>{detailError}</Alert>}\n\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr 1fr\", sm: \"repeat(3, 1fr)\", md: \"repeat(5, 1fr)\" }, gap: 1.5, mb: 2 }}>\n {[\n { v: profile?.totalCalls ?? 0, l: \"Total Calls\", c: C.navy },\n { v: profile?.answeredCalls ?? 0, l: \"Answered\", c: C.green },\n { v: profile?.missedCalls ?? 0, l: \"Missed\", c: C.red },\n { v: profile?.avgAhtFormatted || \"00:00:00\", l: \"Avg AHT\", c: C.purple },\n { v: `${(profile?.answerRate ?? 0).toFixed(1)}%`, l: \"Answer Rate\", c: C.green },\n { v: profile?.loginDurationFormatted || \"00:00:00\", l: \"Login Duration\", c: C.blue },\n { v: profile?.productionFormatted || \"00:00:00\", l: \"Production\", c: C.blue },\n { v: profile?.handleTimeFormatted || \"00:00:00\", l: \"Handle Time\", c: C.purple },\n { v: profile?.breakTimeFormatted || \"00:00:00\", l: \"Break Time\", c: C.amber },\n { v: `${(profile?.adherencePct ?? 0).toFixed(1)}%`, l: `Adherence${profile?.adherenceGrade ? ` (${profile.adherenceGrade})` : \"\"}`, c: C.teal },\n ].map((kpi, i) => (\n <Box key={i} sx={{\n px: 1.5, py: 1.2,\n borderRadius: \"10px\",\n backgroundColor: \"#fafafa\",\n borderLeft: `3px solid ${kpi.c}`,\n border: \"1px solid #e0e0e0\",\n borderLeftWidth: \"3px\",\n borderLeftStyle: \"solid\",\n borderLeftColor: kpi.c,\n }}>\n <Typography sx={{\n fontFamily: \"poppins, Arial, sans-serif\",\n fontSize: \"0.72rem\", fontWeight: 600, color: \"#888\", mb: 0.3,\n }}>\n {kpi.l}\n </Typography>\n <Typography sx={{\n fontFamily: \"poppins, Arial, sans-serif\",\n fontSize: \"0.95rem\", fontWeight: 700, color: \"#1a1a1a\",\n }}>\n {kpi.v}\n </Typography>\n </Box>\n ))}\n </Box>\n\n <Box sx={{ display: \"flex\", alignItems: { xs: \"flex-start\", sm: \"center\" }, justifyContent: \"space-between\", flexDirection: { xs: \"column\", sm: \"row\" }, gap: 1, borderBottom: `2px solid ${C.b1}`, mb: 2 }}>\n <Box sx={{ display: \"flex\", gap: 0.5, flexWrap: \"wrap\" }}>\n {tabs.map((tab, idx) => (\n <Box key={tab} onClick={() => setActiveTab(idx)}\n sx={{\n px: 2, py: 1, fontSize: 13, fontWeight: 600, cursor: \"pointer\",\n color: activeTab === idx ? C.blue : C.t3,\n borderBottom: `2px solid ${activeTab === idx ? C.blue : \"transparent\"}`,\n mb: \"-2px\", transition: \"all .15s\", \"&:hover\": { color: C.t1 },\n }}>\n {tab}\n </Box>\n ))}\n </Box>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: \"-2px\" }}>\n <AppButton\n size=\"small\"\n startIcon={<RefreshIcon />}\n disabled={detailLoading || cdrLoading}\n onClick={() => handleSearch()}\n >\n Refresh\n </AppButton>\n <AppButton size=\"small\" startIcon={<SearchIcon />} onClick={() => handleSearch()}>\n Search\n </AppButton>\n </Box>\n </Box>\n\n {activeTab === 0 && (\n <Box>\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" }, gap: 2, mb: 2 }}>\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>{hourlyChartTitle}</Typography>\n <Chip label={agentName} size=\"small\" sx={{ fontSize: 11, fontWeight: 700, background: C.blt, color: C.blue, border: `1px solid rgba(21,101,200,.2)` }} />\n </Box>\n <Box sx={{ p: 2, height: 260 }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={hourlyCallData} barGap={1}>\n <CartesianGrid strokeDasharray=\"3 3\" stroke={C.b1} />\n <XAxis dataKey=\"hour\" tick={{ fontSize: 11, fill: C.t3 }} />\n <YAxis tick={{ fontSize: 11, fill: C.t3 }} allowDecimals={false} />\n <RTooltip labelFormatter={(label) => `${String(label).padStart(2, \"0\")}:00`} contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }} />\n <Legend wrapperStyle={{ fontSize: 11 }} />\n <Bar dataKey=\"answered\" name=\"Answered\" fill={C.blue} radius={[3, 3, 0, 0]} />\n <Bar dataKey=\"abandoned\" name=\"Abandoned\" fill={C.red} radius={[3, 3, 0, 0]} />\n </BarChart>\n </ResponsiveContainer>\n </Box>\n </Box>\n\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}` }}>\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Time Utilisation Breakdown</Typography>\n </Box>\n <Box sx={{ p: 2, height: 260 }}>\n {timeUtilData.length > 0 ? (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n <Pie data={timeUtilData} cx=\"50%\" cy=\"50%\" innerRadius={60} outerRadius={95} dataKey=\"value\" nameKey=\"name\" minAngle={8}>\n {timeUtilData.map((entry, idx) => <Cell key={idx} fill={entry.color} />)}\n </Pie>\n <RTooltip formatter={(_val, name, entry) => [`${(entry as any).payload.formatted} (${(entry as any).payload.pct.toFixed(1)}%)`, name]} contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }} />\n <Legend wrapperStyle={{ fontSize: 12 }} formatter={(value: string) => <span style={{ color: C.t1, fontWeight: 500 }}>{value}</span>} />\n </PieChart>\n </ResponsiveContainer>\n ) : (\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"100%\", color: C.t3, fontSize: 13 }}>No data</Box>\n )}\n </Box>\n </Box>\n </Box>\n\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\", mb: 2 }}>\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Talk Duration Distribution</Typography>\n <Chip label={`${talkDurationTotal} call${talkDurationTotal === 1 ? \"\" : \"s\"}`} size=\"small\" sx={{ fontSize: 11, fontWeight: 700, background: C.glt, color: C.green, border: `1px solid rgba(10,154,98,.2)` }} />\n </Box>\n <Box sx={{ p: 2, height: 260 }}>\n {talkDurationBuckets.length > 0 ? (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={talkDurationBuckets} margin={{ top: 16, right: 16, left: 0, bottom: 20 }}>\n <CartesianGrid strokeDasharray=\"3 3\" stroke={C.b1} />\n <XAxis dataKey=\"bucket\" tick={{ fontSize: 11, fill: C.t3 }} label={{ value: \"Talking Duration\", position: \"insideBottom\", offset: -5, style: { fontSize: 11, fontWeight: 600, fill: C.t2 } }} />\n <YAxis tick={{ fontSize: 11, fill: C.t3 }} allowDecimals={false} label={{ value: \"Call Count\", angle: -90, position: \"insideLeft\", offset: 10, style: { fontSize: 11, fontWeight: 600, fill: C.t2 } }} />\n <RTooltip\n contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\n labelFormatter={(label, payload) => {\n const p = payload?.[0]?.payload as { minSeconds?: number; maxSeconds?: number } | undefined;\n if (!p) return String(label);\n return `${label} (${p.minSeconds}–${p.maxSeconds}s)`;\n }}\n formatter={(val, _name, entry) => {\n const pct = (entry as any)?.payload?.pct;\n return [`${val} call${val === 1 ? \"\" : \"s\"}${pct != null ? ` (${pct.toFixed(1)}%)` : \"\"}`, \"Calls\"];\n }}\n />\n <Bar dataKey=\"count\" name=\"Calls\" fill={C.teal} radius={[4, 4, 0, 0]}>\n <LabelList dataKey=\"count\" position=\"top\" style={{ fontSize: 11, fontWeight: 700, fill: C.t1 }} />\n </Bar>\n </BarChart>\n </ResponsiveContainer>\n ) : (\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"100%\", color: C.t3, fontSize: 13 }}>No data</Box>\n )}\n </Box>\n </Box>\n\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" }, gap: 2 }}>\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}` }}>\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Calls by Queue</Typography>\n </Box>\n <Box sx={{ p: 2, height: 260 }}>\n {queuePieData.length > 0 ? (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n <Pie data={queuePieData} cx=\"50%\" cy=\"50%\" outerRadius={90} dataKey=\"value\" nameKey=\"name\">\n {queuePieData.map((entry, idx) => <Cell key={idx} fill={entry.color} />)}\n </Pie>\n <RTooltip\n contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\n formatter={(val, name, entry) => {\n const pct = (entry as any)?.payload?.pctOfTotal;\n return [`${val} calls${pct != null ? ` (${pct.toFixed(1)}%)` : \"\"}`, name];\n }}\n />\n <Legend wrapperStyle={{ fontSize: 12 }} formatter={(value: string) => <span style={{ color: C.t1, fontWeight: 500 }}>{value}</span>} />\n </PieChart>\n </ResponsiveContainer>\n ) : (\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"100%\", color: C.t3, fontSize: 13 }}>No queue data</Box>\n )}\n </Box>\n </Box>\n\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}` }}>\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Queue Performance Metrics</Typography>\n </Box>\n <Box sx={{ p: 2 }}>\n {queueMetrics.length > 0 ? queueMetrics.map((q) => (\n <Box key={q.queueName} sx={{ mb: 2, \"&:last-child\": { mb: 0 } }}>\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 0.3 }}>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <Box sx={{ width: 10, height: 10, borderRadius: \"50%\", background: q.color, flexShrink: 0 }} />\n <Typography sx={{ fontSize: 13, fontWeight: 700, color: C.t1 }}>{q.queueName}</Typography>\n </Box>\n <Typography sx={{ ...monoSx, fontSize: 13, fontWeight: 800, color: q.color }}>\n {q.totalCalls} calls\n <Typography component=\"span\" sx={{ ...monoSx, color: C.t3, ml: 0.5 }}>\n ({q.answeredCalls} ans / {q.missedCalls} miss)\n </Typography>\n </Typography>\n </Box>\n <Box sx={{ height: 6, background: C.s3, borderRadius: 3, overflow: \"hidden\", mb: 0.3 }}>\n <Box sx={{ height: \"100%\", width: `${q.pctOfTotal ?? 0}%`, background: q.color, borderRadius: 3 }} />\n </Box>\n <Box sx={{ display: \"flex\", flexWrap: \"wrap\", columnGap: 1.5, rowGap: 0.2 }}>\n <Typography sx={{ fontSize: 11, color: C.t3 }}>{(q.pctOfTotal ?? 0).toFixed(0)}% of total</Typography>\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Ans: {(q.answerRate ?? 0).toFixed(0)}%</Typography>\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Talk: <span style={{ ...monoSx, color: C.t2 }}>{q.avgTalkFormatted}</span></Typography>\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Hold: <span style={{ ...monoSx, color: C.t2 }}>{q.avgHoldFormatted}</span></Typography>\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Wrap: <span style={{ ...monoSx, color: C.t2 }}>{q.avgWrapupFormatted}</span></Typography>\n <Typography sx={{ fontSize: 11, color: C.t3 }}>AHT: <span style={{ ...monoSx, color: C.t2 }}>{q.avgAhtFormatted}</span></Typography>\n </Box>\n </Box>\n )) : (\n <Box sx={{ textAlign: \"center\", py: 4, color: C.t3, fontSize: 13 }}>No queue data</Box>\n )}\n </Box>\n </Box>\n </Box>\n </Box>\n )}\n\n {activeTab === 1 && (\n <Box sx={{ borderRadius: \"8px\", border: \"1px solid #e0e7ef\", overflow: \"hidden\", background: \"transparent\" }}>\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Call History</Typography>\n <Chip label={`${cdrTotal} records`} size=\"small\" sx={{ fontSize: 11, fontWeight: 700, background: C.s2, color: C.t3, border: `1px solid ${C.b2}` }} />\n </Box>\n </Box>\n {cdrError && <Alert severity=\"error\" sx={{ mx: 2, mt: 1 }} onClose={() => setCdrError(\"\")}>{cdrError}</Alert>}\n <TableContainer sx={{ position: \"relative\" }}>\n {cdrLoading && (\n <Box sx={{ position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0, background: \"rgba(255,255,255,0.7)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", zIndex: 5 }}>\n <CircularProgress size={28} />\n </Box>\n )}\n <Table size=\"small\" sx={{\n minWidth: 1400,\n \"& .MuiTableCell-root\": { fontSize: \"0.75rem\", borderBottom: \"1px solid #eef1f6\", py: 0.6, px: 1 },\n }}>\n <TableHead>\n <TableRow>\n {[\n \"Phone Number\", \"Call Start\", \"Call Type\", \"Status\", \"Queue\", \"Extension\",\n \"Talk Duration\", \"Hold Duration\", \"Ringing Duration\", \"Wrapup Duration\",\n \"Disposition\", \"Transferred\", \"Recording\",\n ].map((label) => (\n <TableCell key={label} sx={cdrHeadSx}>{label}</TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {cdrRecords.map((row, idx) => (\n <TableRow key={row.callUuid || idx} hover sx={{\n backgroundColor: \"#fff\",\n \"&:hover\": { backgroundColor: \"#f0f7f8\" },\n }}>\n <TableCell sx={{ fontWeight: 600, color: C.navy, fontSize: \"0.75rem\" }}>{row.phoneNumber || \"\"}</TableCell>\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\n {row.callStartTime ? dayjs(row.callStartTime).format(\"DD MMM YYYY hh:mm A\") : \"\"}\n </TableCell>\n <TableCell><CallTypeChip type={row.callType || \"\"} /></TableCell>\n <TableCell><StatusChip status={row.callStatus || \"\"} /></TableCell>\n <TableCell>\n {row.queueName\n ? <Chip label={row.queueName} size=\"small\" sx={{ backgroundColor: \"#f0ebfa\", color: C.purple, fontWeight: 500, fontSize: \"0.67rem\", height: 22 }} />\n : \"\"}\n </TableCell>\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>{row.extension || \"\"}</TableCell>\n <TableCell sx={{ fontWeight: 600, color: C.blue, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.talkDurationFmt || \"\"}</TableCell>\n <TableCell sx={{ fontWeight: 500, color: C.amber, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.holdDurationFmt || \"\"}</TableCell>\n <TableCell sx={{ fontWeight: 500, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.ringingDurationFmt || \"\"}</TableCell>\n <TableCell sx={{ fontWeight: 500, color: C.purple, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.wrapupDurationFmt || \"\"}</TableCell>\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>{row.disposition || \"\"}</TableCell>\n <TableCell>\n {row.wasTransferred\n ? <Chip label=\"Yes\" size=\"small\" sx={{ backgroundColor: \"#e6f7ef\", color: C.green, fontWeight: 600, fontSize: \"0.65rem\", height: 20, borderRadius: \"6px\" }} />\n : <Chip label=\"No\" size=\"small\" sx={{ backgroundColor: \"transparent\", color: \"#6b7b8d\", fontWeight: 600, fontSize: \"0.65rem\", height: 20, borderRadius: \"6px\" }} />}\n </TableCell>\n <TableCell>\n {row.callUuid ? <RecordingCell callUuid={row.callUuid} recordingPath={row.recordingPath ?? null} /> : \"\"}\n </TableCell>\n </TableRow>\n ))}\n {!cdrLoading && cdrRecords.length === 0 && (\n <TableRow><TableCell colSpan={13} sx={{ textAlign: \"center\", py: 4, color: C.t3, fontSize: 13 }}>No call records found</TableCell></TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n <TablePagination\n component=\"div\" count={cdrTotal} page={cdrPage}\n onPageChange={(_, p) => setCdrPage(p)} rowsPerPage={cdrPageSize}\n onRowsPerPageChange={(e) => { setCdrPageSize(parseInt(e.target.value, 10)); setCdrPage(0); }}\n rowsPerPageOptions={[10, 15, 25, 50, 100]}\n sx={{ borderTop: \"1px solid #eef1f6\", \"& .MuiTablePagination-displayedRows\": { fontSize: \"0.73rem\" }, \"& .MuiTablePagination-selectLabel\": { fontSize: \"0.73rem\" } }}\n />\n </Box>\n )}\n\n {activeTab === 2 && (\n <Box>\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr 1fr\", md: \"repeat(3, 1fr)\", lg: \"repeat(4, 1fr)\" }, gap: { xs: 1.5, lg: 2 }, mb: 2 }}>\n <StatCard value={profile?.breakTimeFormatted || \"00:00:00\"} label=\"Total Break Time\" color={C.amber} />\n <StatCard value={profile?.breaksTaken ?? 0} label=\"Breaks Taken\" color={C.purple} />\n <StatCard value={profile?.productionFormatted || \"00:00:00\"} label=\"Production Time\" color={C.green} />\n <StatCard value={profile?.loginDurationFormatted || \"00:00:00\"} label=\"Login Duration\" color={C.teal} />\n </Box>\n\n <Box>\n <Typography sx={{ fontSize: \"0.72rem\", fontWeight: 700, color: \"#888\", textTransform: \"uppercase\", letterSpacing: 0.8, mb: 1, fontFamily: \"poppins, Arial, sans-serif\" }}>\n Attendance Summary\n </Typography>\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr 1fr\", md: \"repeat(4, 1fr)\" }, gap: 1.5 }}>\n {[\n { label: \"First Login\", value: profile?.firstLoginTime ? dayjs(profile.firstLoginTime).format(\"YYYY-MM-DD HH:mm:ss\") : \"—\", color: C.blue },\n { label: \"Adherence Score\", value: `${profile?.adherencePct ?? 0}%`, color: C.green },\n { label: \"Adherence Grade\", value: profile?.adherenceGrade || \"—\", color: C.purple },\n { label: \"Answer Rate\", value: `${(profile?.answerRate ?? 0).toFixed(1)}%`, color: C.teal },\n ].map((item) => (\n <Box key={item.label} sx={{\n px: 1.5, py: 1.2, borderRadius: \"10px\",\n backgroundColor: \"#fafafa\", border: \"1px solid #e0e0e0\",\n borderLeftWidth: \"3px\", borderLeftStyle: \"solid\", borderLeftColor: item.color,\n }}>\n <Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.72rem\", fontWeight: 600, color: \"#888\", mb: 0.3 }}>{item.label}</Typography>\n <Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.95rem\", fontWeight: 700, color: \"#1a1a1a\" }}>{item.value}</Typography>\n </Box>\n ))}\n </Box>\n </Box>\n </Box>\n )}\n </Box>\n </Box>\n </LocalizationProvider>\n );\n}\n\nconst AgentDetailReport: React.FC<AgentDetailReportProps> = (props) => (\n <SDKProvider>\n <AgentDetailReportContent {...props} />\n </SDKProvider>\n);\n\nexport default AgentDetailReport;\n","import { useCallback, useState } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tAgentDetailReportParams,\r\n\tAgentDetailReportResponse,\r\n\tCdrReportParams,\r\n\tCdrReportResponse,\r\n} from \"./types\";\r\n\r\nfunction buildCdrQs(params: CdrReportParams): string {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params.end_date) qs.append(\"end_date\", params.end_date);\r\n\tif (params.agent_id) for (const id of params.agent_id) qs.append(\"agent_id\", String(id));\r\n\tif (params.queue_id) for (const id of params.queue_id) qs.append(\"queue_id\", String(id));\r\n\tif (params.call_type) qs.append(\"call_type\", params.call_type);\r\n\tif (params.status) qs.append(\"status\", params.status);\r\n\tif (params.search) qs.append(\"search\", params.search);\r\n\tif (params.page) qs.append(\"page\", String(params.page));\r\n\tif (params.pageSize) qs.append(\"pageSize\", String(params.pageSize));\r\n\tconst str = qs.toString();\r\n\treturn str ? `?${str}` : \"\";\r\n}\r\n\r\nexport function useAgentDetailReport() {\r\n\tconst [detail, setDetail] = useState<AgentDetailReportResponse | null>(null);\r\n\tconst [detailLoading, setDetailLoading] = useState(false);\r\n\tconst [detailError, setDetailError] = useState(\"\");\r\n\r\n\tconst fetchDetail = useCallback(\r\n\t\tasync (agentId: string, params: AgentDetailReportParams) => {\r\n\t\t\tif (!agentId) return;\r\n\t\t\tsetDetailLoading(true);\r\n\t\t\tsetDetailError(\"\");\r\n\t\t\ttry {\r\n\t\t\t\tconst qs = new URLSearchParams();\r\n\t\t\t\tif (params.start_date) qs.append(\"start_date\", params.start_date);\r\n\t\t\t\tif (params.end_date) qs.append(\"end_date\", params.end_date);\r\n\t\t\t\tconst qsStr = qs.toString();\r\n\t\t\t\tconst url = `${END_POINT.AGENT_DETAIL_REPORT(agentId)}${qsStr ? `?${qsStr}` : \"\"}`;\r\n\t\t\t\tconst res = await axiosInstance.get<AgentDetailReportResponse>(url);\r\n\t\t\t\tsetDetail(res.data);\r\n\t\t\t} catch (err: any) {\r\n\t\t\t\tsetDetailError(err?.response?.data?.message || err?.message || \"Failed to load agent detail\");\r\n\t\t\t\tsetDetail(null);\r\n\t\t\t} finally {\r\n\t\t\t\tsetDetailLoading(false);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[],\r\n\t);\r\n\r\n\treturn { detail, detailLoading, detailError, setDetailError, fetchDetail };\r\n}\r\n\r\nexport function useAgentCdrRecords() {\r\n\tconst [records, setRecords] = useState<CdrReportResponse[\"records\"][\"data\"]>([]);\r\n\tconst [total, setTotal] = useState(0);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(\"\");\r\n\r\n\tconst fetchCdr = useCallback(async (params: CdrReportParams) => {\r\n\t\tsetLoading(true);\r\n\t\tsetError(\"\");\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<CdrReportResponse>(\r\n\t\t\t\t`${END_POINT.CDR_REPORT}${buildCdrQs(params)}`,\r\n\t\t\t);\r\n\t\t\tsetRecords(res.data?.records?.data || []);\r\n\t\t\tsetTotal(res.data?.records?.total || 0);\r\n\t\t} catch (err: any) {\r\n\t\t\tsetError(err?.response?.data?.message || err?.message || \"Failed to load call history\");\r\n\t\t\tsetRecords([]);\r\n\t\t\tsetTotal(0);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn { records, total, loading, error, setError, fetchCdr };\r\n}\r\n\r\nexport async function fetchRecordingBlob(callUuid: string): Promise<Blob> {\r\n\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(callUuid), {\r\n\t\tresponseType: \"blob\",\r\n\t});\r\n\treturn res.data as Blob;\r\n}\r\n\r\nexport async function getAgentDetailReport(\r\n\tagentId: string,\r\n\tparams?: AgentDetailReportParams,\r\n): Promise<AgentDetailReportResponse> {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params?.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params?.end_date) qs.append(\"end_date\", params.end_date);\r\n\tconst qsStr = qs.toString();\r\n\tconst res = await axiosInstance.get<AgentDetailReportResponse>(\r\n\t\t`${END_POINT.AGENT_DETAIL_REPORT(agentId)}${qsStr ? `?${qsStr}` : \"\"}`,\r\n\t);\r\n\treturn res.data;\r\n}\r\n\r\nexport async function getCdrReport(params: CdrReportParams): Promise<CdrReportResponse> {\r\n\tconst qs = buildCdrQs(params);\r\n\tconst res = await axiosInstance.get<CdrReportResponse>(`${END_POINT.CDR_REPORT}${qs}`);\r\n\treturn res.data;\r\n}\r\n\r\nexport async function getRecordingByCall(callUuid: string): Promise<Blob> {\r\n\treturn fetchRecordingBlob(callUuid);\r\n}\r\n"],"mappings":"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","names":["useState","useCallback","useState","_a","_b","_c","_d","_e","useCallback"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../call-control-sdk/lib/hooks/useGetCallerData.ts"],"sourcesContent":["import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport type { CallData } from \"../../types\";\r\n\r\nexport const useGetCallerData = (): CallData => {\r\n\tconst sdkState = sdkStateManager.getState();\r\n\tconst { process_id, process_name, status, phone_number, agent_id, call_id, call_details } =\r\n\t\tsdkState.callData;\r\n\tconst initialLeadData = sdkStateManager.getTransferLeadData();\r\n\tconst initialCallData = {\r\n\t\tphone_number,\r\n\t\tstatus,\r\n\t\tcallReferenceId: call_id,\r\n\t\tagent_id,\r\n\t\tprocess_id,\r\n\t\tprocess_name,\r\n\t\tcall_details,\r\n\t\tauto_wrapup_time: sdkState.backendCallControls?.auto_wrapup_time ?? null,\r\n\t\t...(initialLeadData !== undefined && { lead_data: initialLeadData }),\r\n\t\tsocket_info: sdkState.callData,\r\n\t};\r\n\tconst [callData, setCallData] = useState<CallData>(initialCallData);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst unsubscribe = sdkStateManager.subscribe(() => {\r\n\t\t\tconst state = sdkStateManager.getState();\r\n\t\t\tconst { process_id, process_name, status, phone_number, agent_id, call_id, call_details, auto_wrapup_time } =\r\n\t\t\t\tstate.callData;\r\n\t\t\tconst lead_data = sdkStateManager.getTransferLeadData();\r\n\t\t\tconst currentCallData = {\r\n\t\t\t\tphone_number,\r\n\t\t\t\tstatus,\r\n\t\t\t\tcallReferenceId: call_id,\r\n\t\t\t\tagent_id,\r\n\t\t\t\tprocess_id,\r\n\t\t\t\tprocess_name,\r\n\t\t\t\tcall_details,\r\n\t\t\t\tauto_wrapup_time: auto_wrapup_time ?? state.backendCallControls?.auto_wrapup_time ?? null,\r\n\t\t\t\t...(lead_data !== undefined && { lead_data }),\r\n\t\t\t\tsocket_info: state.callData,\r\n\t\t\t};\r\n\t\t\tsetCallData(currentCallData);\r\n\t\t});\r\n\r\n\t\treturn unsubscribe;\r\n\t}, []);\r\n\r\n\treturn callData;\r\n};\r\n"],"mappings":";;;;;;;;;AAAA,SAAS,UAAU,iBAAiB;AAI7B,IAAM,mBAAmB,MAAgB;AAJhD;AAKC,QAAM,WAAW,gBAAgB,SAAS;AAC1C,QAAM,EAAE,YAAY,cAAc,QAAQ,cAAc,UAAU,SAAS,aAAa,IACvF,SAAS;AACV,QAAM,kBAAkB,gBAAgB,oBAAoB;AAC5D,QAAM,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAkB,oBAAS,wBAAT,mBAA8B,qBAA9B,YAAkD;AAAA,KAChE,oBAAoB,UAAa,EAAE,WAAW,gBAAgB,IAT3C;AAAA,IAUvB,aAAa,SAAS;AAAA,EACvB;AACA,QAAM,CAAC,UAAU,WAAW,IAAI,SAAmB,eAAe;AAElE,YAAU,MAAM;AACf,UAAM,cAAc,gBAAgB,UAAU,MAAM;AAxBtD,UAAAA,KAAAC;AAyBG,YAAM,QAAQ,gBAAgB,SAAS;AACvC,YAAM,EAAE,YAAAC,aAAY,cAAAC,eAAc,QAAAC,SAAQ,cAAAC,eAAc,UAAAC,WAAU,SAAAC,UAAS,cAAAC,eAAc,iBAAiB,IACzG,MAAM;AACP,YAAM,YAAY,gBAAgB,oBAAoB;AACtD,YAAM,kBAAkB;AAAA,QACvB,cAAAH;AAAA,QACA,QAAAD;AAAA,QACA,iBAAiBG;AAAA,QACjB,UAAAD;AAAA,QACA,YAAAJ;AAAA,QACA,cAAAC;AAAA,QACA,cAAAK;AAAA,QACA,mBAAkBP,MAAA,+CAAoBD,MAAA,MAAM,wBAAN,gBAAAA,IAA2B,qBAA/C,OAAAC,MAAmE;AAAA,SACjF,cAAc,UAAa,EAAE,UAAU,IATpB;AAAA,QAUvB,aAAa,MAAM;AAAA,MACpB;AACA,kBAAY,eAAe;AAAA,IAC5B,CAAC;AAED,WAAO;AAAA,EACR,GAAG,CAAC,CAAC;AAEL,SAAO;AACR;","names":["_a","_b","process_id","process_name","status","phone_number","agent_id","call_id","call_details"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../call-control-sdk/lib/hooks/useSDKPermissions.ts","../call-control-sdk/lib/components/SDKAccessDenied.tsx","../call-control-sdk/lib/components/SDKPermissionGuard.tsx"],"sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport type { SDKEntitlements } from \"../permissions/types\";\r\n\r\nexport interface SDKPermissionsHook {\r\n permissions: string[];\r\n menuEntitlements: Array<{ code: string; name: string; enabled: boolean }>;\r\n isLoaded: boolean;\r\n hasPermission: (permission: string) => boolean;\r\n hasAnyPermission: (permissions: string[]) => boolean;\r\n hasAllPermissions: (permissions: string[]) => boolean;\r\n hasMenuFeature: (code: string) => boolean;\r\n isBitEnabled: (category: keyof SDKEntitlements, bitCode: string) => boolean;\r\n}\r\n\r\nexport function useSDKPermissions(): SDKPermissionsHook {\r\n const [state, setState] = useState(() => sdkStateManager.getState());\r\n\r\n useEffect(() => {\r\n const unsubscribe = sdkStateManager.subscribe(() => {\r\n setState(sdkStateManager.getState());\r\n });\r\n return unsubscribe;\r\n }, []);\r\n\r\n const hasPermission = useCallback(\r\n (permission: string) => sdkStateManager.hasPermission(permission),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.userPermissions],\r\n );\r\n\r\n const hasAnyPermission = useCallback(\r\n (permissions: string[]) => sdkStateManager.hasAnyPermission(permissions),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.userPermissions],\r\n );\r\n\r\n const hasAllPermissions = useCallback(\r\n (permissions: string[]) => sdkStateManager.hasAllPermissions(permissions),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.userPermissions],\r\n );\r\n\r\n const hasMenuFeature = useCallback(\r\n (code: string) => sdkStateManager.hasMenuFeature(code),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.menuEntitlements],\r\n );\r\n\r\n const isBitEnabled = useCallback(\r\n (category: keyof SDKEntitlements, bitCode: string) =>\r\n sdkStateManager.isBitEnabled(category, bitCode),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.sdk],\r\n );\r\n\r\n return {\r\n permissions: state.userPermissions ?? [],\r\n menuEntitlements: state.menuEntitlements ?? [],\r\n isLoaded: state.isPermissionsLoaded,\r\n hasPermission,\r\n hasAnyPermission,\r\n hasAllPermissions,\r\n hasMenuFeature,\r\n isBitEnabled,\r\n };\r\n}\r\n","import React from \"react\";\r\nimport { Box, Paper, Typography, useTheme } from \"@mui/material\";\r\nimport { alpha } from \"@mui/material/styles\";\r\nimport LockOutlinedIcon from \"@mui/icons-material/LockOutlined\";\r\n\r\ninterface SDKAccessDeniedProps {\r\n message?: string;\r\n}\r\n\r\nexport const SDKAccessDenied: React.FC<SDKAccessDeniedProps> = ({\r\n message = \"You don't have the necessary permissions to view this content.\",\r\n}) => {\r\n const theme = useTheme();\r\n\r\n return (\r\n <Box\r\n sx={{\r\n p: 4,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n minHeight: 250,\r\n }}\r\n >\r\n <Paper\r\n elevation={0}\r\n sx={{\r\n p: 4,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n bgcolor: alpha(theme.palette.error.main, 0.05),\r\n borderRadius: 3,\r\n border: \"1px dashed\",\r\n borderColor: alpha(theme.palette.error.main, 0.3),\r\n maxWidth: 420,\r\n textAlign: \"center\",\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n bgcolor: alpha(theme.palette.error.main, 0.1),\r\n color: \"error.main\",\r\n borderRadius: \"50%\",\r\n p: 2,\r\n display: \"flex\",\r\n mb: 2,\r\n }}\r\n >\r\n <LockOutlinedIcon sx={{ fontSize: 32 }} />\r\n </Box>\r\n <Typography variant=\"h6\" color=\"text.primary\" gutterBottom fontWeight=\"600\" sx={{ mb: 1 }}>\r\n Access Denied\r\n </Typography>\r\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 0 }}>\r\n {message}\r\n </Typography>\r\n </Paper>\r\n </Box>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport { useSDKPermissions } from \"../hooks/useSDKPermissions\";\r\nimport { SDKAccessDenied } from \"./SDKAccessDenied\";\r\n\r\ninterface SDKPermissionGuardProps {\r\n children?: React.ReactNode;\r\n /** Single permission code (e.g. \"calls:inbound\") */\r\n permission?: string;\r\n /** Multiple permission codes — ANY match grants access by default */\r\n permissions?: string[];\r\n /** When true, ALL permissions must be granted */\r\n requireAll?: boolean;\r\n /** One or more menu feature codes — ANY match grants access by default */\r\n menuFeature?: string | string[];\r\n /** When true, ALL menu features must be enabled */\r\n requireAllMenus?: boolean;\r\n /** Custom fallback rendered when access is denied */\r\n fallback?: React.ReactNode;\r\n /** Show the default Access Denied UI when denied. Defaults to true. */\r\n showFallback?: boolean;\r\n /** Callback fired when the guard denies access */\r\n onDenied?: () => void;\r\n}\r\n\r\nexport const SDKPermissionGuard: React.FC<SDKPermissionGuardProps> = ({\r\n children,\r\n permission,\r\n permissions,\r\n requireAll = false,\r\n menuFeature,\r\n requireAllMenus = false,\r\n fallback,\r\n showFallback = true,\r\n onDenied,\r\n}) => {\r\n const { isLoaded, hasPermission, hasAnyPermission, hasAllPermissions, hasMenuFeature } =\r\n useSDKPermissions();\r\n\r\n if (!isLoaded) return null;\r\n\r\n const isAllowed = checkAccess({\r\n permission,\r\n permissions,\r\n requireAll,\r\n menuFeature,\r\n requireAllMenus,\r\n hasPermission,\r\n hasAnyPermission,\r\n hasAllPermissions,\r\n hasMenuFeature,\r\n });\r\n\r\n if (!isAllowed) {\r\n onDenied?.();\r\n if (fallback !== undefined) return <>{fallback}</>;\r\n if (showFallback) return <SDKAccessDenied />;\r\n return null;\r\n }\r\n\r\n return <>{children}</>;\r\n};\r\n\r\nfunction checkAccess({\r\n permission,\r\n permissions,\r\n requireAll,\r\n menuFeature,\r\n requireAllMenus,\r\n hasPermission,\r\n hasAnyPermission,\r\n hasAllPermissions,\r\n hasMenuFeature,\r\n}: {\r\n permission?: string;\r\n permissions?: string[];\r\n requireAll: boolean;\r\n menuFeature?: string | string[];\r\n requireAllMenus: boolean;\r\n hasPermission: (p: string) => boolean;\r\n hasAnyPermission: (p: string[]) => boolean;\r\n hasAllPermissions: (p: string[]) => boolean;\r\n hasMenuFeature: (c: string) => boolean;\r\n}): boolean {\r\n const menuCodes = menuFeature\r\n ? Array.isArray(menuFeature) ? menuFeature : [menuFeature]\r\n : [];\r\n\r\n const hasNoGuards =\r\n !permission &&\r\n (!permissions || permissions.length === 0) &&\r\n menuCodes.length === 0;\r\n\r\n if (hasNoGuards) return true;\r\n\r\n if (menuCodes.length > 0) {\r\n const menuGranted = requireAllMenus\r\n ? menuCodes.every((c) => hasMenuFeature(c))\r\n : menuCodes.some((c) => hasMenuFeature(c));\r\n if (!menuGranted) return false;\r\n }\r\n\r\n if (permission && !hasPermission(permission)) return false;\r\n\r\n if (permissions && permissions.length > 0) {\r\n const granted = requireAll ? hasAllPermissions(permissions) : hasAnyPermission(permissions);\r\n if (!granted) return false;\r\n }\r\n\r\n return true;\r\n}\r\n"],"mappings":"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","names":["jsx"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../call-control-sdk/lib/pages/common/components/AuditReport.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport {\r\n Avatar,\r\n Box,\r\n Typography,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow,\r\n Tabs,\r\n Tab,\r\n LinearProgress,\r\n useTheme,\r\n Dialog,\r\n IconButton,\r\n GlobalStyles,\r\n CircularProgress,\r\n Alert,\r\n ToggleButton,\r\n ToggleButtonGroup,\r\n} from \"@mui/material\";\r\nimport { alpha } from \"@mui/material/styles\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport LaunchIcon from \"@mui/icons-material/Launch\";\r\nimport CheckCircleOutlineIcon from \"@mui/icons-material/CheckCircleOutlined\";\r\nimport HighlightOffIcon from \"@mui/icons-material/HighlightOff\";\r\nimport RemoveCircleOutlineIcon from \"@mui/icons-material/RemoveCircleOutlined\";\r\nimport axiosInstance from \"../../../services/axios\";\r\nimport { END_POINT } from \"../../../services/endPoint\";\r\nimport type { CdrRecordResponse } from \"../../cdrReport/types\";\r\n\r\n// ─── API response types ────────────────────────────────────────────────────────\r\n\r\ninterface AuditMetadata {\r\n Hospital_Name?: string;\r\n \"Process/Department\"?: string;\r\n Call_Disposition?: string;\r\n Call_Category?: string;\r\n Call_Type?: string;\r\n Call_Date_Time?: string;\r\n Call_Duration?: string;\r\n Agent_Name?: string;\r\n Employee_ID?: string;\r\n Team_Leader?: string;\r\n Auditor_Name?: string;\r\n Language?: string;\r\n Recording_ID?: string;\r\n}\r\n\r\ninterface ExecutiveAuditSummary {\r\n Overall_Audit_Score_Percentage?: number | string;\r\n Audit_Result?: string;\r\n First_Call_Resolution_FCR?: string;\r\n Patient_Sentiment?: string;\r\n Process_Adherence?: string;\r\n Communication_Effectiveness?: string;\r\n Compliance_Status?: string;\r\n Customer_Experience?: string;\r\n Knowledge_Accuracy?: string;\r\n Empathy_Handling?: string;\r\n Risk_Severity?: string;\r\n}\r\n\r\ninterface ScorecardEntry {\r\n Weightage?: number;\r\n Score_Obtained?: number | string;\r\n Remarks?: string;\r\n}\r\n\r\ninterface QualityScorecard {\r\n Opening_and_Greeting?: ScorecardEntry;\r\n Verification_and_Authentication?: ScorecardEntry;\r\n Communication_and_Soft_Skills?: ScorecardEntry;\r\n Process_and_Workflow_Adherence?: ScorecardEntry;\r\n Resolution_Accuracy?: ScorecardEntry;\r\n Empathy_and_Patient_Assurance?: ScorecardEntry;\r\n Call_Handling?: ScorecardEntry;\r\n CRM_Documentation_Alignment?: ScorecardEntry;\r\n Closing_and_Customer_Education?: ScorecardEntry;\r\n Total_Score?: number;\r\n Final_Rating?: string;\r\n}\r\n\r\ninterface DispositionFramework {\r\n dispositionType?: string;\r\n frameworks?: Array<{\r\n expectedFramework?: string;\r\n status?: string;\r\n remarks?: string;\r\n }>;\r\n}\r\n\r\ninterface ChecklistItem {\r\n parameter?: string;\r\n expectedStandard?: string;\r\n status?: string;\r\n remarks?: string;\r\n qaObservation?: string;\r\n}\r\n\r\ninterface ChecklistGroup {\r\n items?: ChecklistItem[];\r\n}\r\n\r\ntype ObsRecord = Record<string, { Status?: string; Remarks?: string; Observation_Impact?: string }>;\r\n\r\ninterface SectionWiseAuditObservations {\r\n Opening_and_Greeting?: ObsRecord;\r\n Verification_and_Authentication?: ObsRecord;\r\n Communication_and_Soft_Skills?: ObsRecord;\r\n Process_and_Workflow_Adherence?: ChecklistGroup[];\r\n Empathy_and_Patient_Assurance?: ObsRecord;\r\n Call_Handling?: ObsRecord;\r\n Call_Closure_and_Customer_Education?: ObsRecord;\r\n}\r\n\r\ninterface RootCauseItem {\r\n Observation?: string;\r\n Root_Cause?: string;\r\n Impact?: string;\r\n Severity?: string;\r\n}\r\n\r\ninterface AuditorRecommendation {\r\n Key_Strengths?: string[] | string;\r\n Improvement_Areas?: string[] | string;\r\n}\r\n\r\nexport interface NewAuditApiResponse {\r\n Audit_Metadata?: AuditMetadata;\r\n Conversation_Type_Classification?: Record<string, string>;\r\n Call_Summary?: string;\r\n transcript?: string;\r\n Executive_Audit_Summary?: ExecutiveAuditSummary;\r\n Quality_Scorecard?: QualityScorecard;\r\n Disposition_Based_Quality_Framework?: DispositionFramework[];\r\n Section_Wise_Audit_Observations_Checklist?: SectionWiseAuditObservations;\r\n Root_Cause_Analysis?: RootCauseItem[];\r\n Auditor_Recommendation?: AuditorRecommendation;\r\n Final_Auditor_Remarks?: string;\r\n}\r\n\r\n\r\nfunction toStringArray(value: string[] | string | undefined): string[] {\r\n if (!value) return [];\r\n if (Array.isArray(value)) return value;\r\n return value.split(\"\\n\").map((l) => l.replace(/^\\s*[\\*\\-]\\s*/, \"\").trim()).filter(Boolean);\r\n}\r\n\r\n// ─── Colour helpers ────────────────────────────────────────────────────────────\r\n\r\nconst STATUS_COLOUR: Record<string, { color: string; bg: string }> = {\r\n completed: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n complied: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n pass: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n compliant: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n achieved: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n strong: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n excellent: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n low: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n no: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n good: { color: \"#1565c0\", bg: \"#e3f2fd\" },\r\n partial: { color: \"#e65100\", bg: \"#fff3e0\" },\r\n moderate: { color: \"#e65100\", bg: \"#fff3e0\" },\r\n medium: { color: \"#e65100\", bg: \"#fff3e0\" },\r\n missed: { color: \"#c62828\", bg: \"#ffebee\" },\r\n fail: { color: \"#c62828\", bg: \"#ffebee\" },\r\n high: { color: \"#c62828\", bg: \"#ffebee\" },\r\n yes: { color: \"#c62828\", bg: \"#ffebee\" },\r\n \"n/a\": { color: \"#757575\", bg: \"#f5f5f5\" },\r\n na: { color: \"#757575\", bg: \"#f5f5f5\" },\r\n};\r\n\r\nfunction resolveColour(label: string): { color: string; bg: string } {\r\n const key = label.toLowerCase().trim();\r\n if (STATUS_COLOUR[key]) return STATUS_COLOUR[key];\r\n const stripped = key.replace(/[^a-z]/g, \"\");\r\n return STATUS_COLOUR[stripped] ?? { color: \"#555\", bg: \"#f0f0f0\" };\r\n}\r\n\r\nfunction StatusBadge({ label }: { label: string }) {\r\n const { color, bg } = resolveColour(label);\r\n return (\r\n <Box sx={{ display: \"inline-flex\", alignItems: \"center\", px: \"7px\", py: \"2px\", borderRadius: \"4px\", backgroundColor: bg, whiteSpace: \"nowrap\" }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", fontWeight: 600, color, letterSpacing: \"0.02em\" }}>\r\n {label.toUpperCase()}\r\n </Typography>\r\n </Box>\r\n );\r\n}\r\n\r\nfunction StatusIconBadge({ label }: { label: string }) {\r\n const key = label.toLowerCase().replace(/[^a-z]/g, \"\");\r\n let icon: React.ReactNode;\r\n if (key === \"complied\" || key === \"completed\" || key === \"pass\") {\r\n icon = <CheckCircleOutlineIcon sx={{ fontSize: 15, color: \"#2e7d32\" }} />;\r\n } else if (key === \"partial\") {\r\n icon = <RemoveCircleOutlineIcon sx={{ fontSize: 15, color: \"#e65100\" }} />;\r\n } else if (key === \"na\") {\r\n icon = <RemoveCircleOutlineIcon sx={{ fontSize: 15, color: \"#757575\" }} />;\r\n } else {\r\n icon = <HighlightOffIcon sx={{ fontSize: 15, color: \"#c62828\" }} />;\r\n }\r\n return (\r\n <Box sx={{ display: \"inline-flex\", alignItems: \"center\", gap: \"4px\" }}>\r\n {icon}\r\n <StatusBadge label={label} />\r\n </Box>\r\n );\r\n}\r\n\r\ninterface ProgressValue { score: number; max: number }\r\n\r\nfunction ProgressCell({ value, primary }: { value: ProgressValue; primary: string }) {\r\n const pct = Math.min(Math.round((value.score / value.max) * 100), 100);\r\n const barColor = pct < 80 ? \"#c62828\" : primary;\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, minWidth: 100 }}>\r\n <LinearProgress variant=\"determinate\" value={pct} sx={{ flex: 1, height: 5, borderRadius: 3, backgroundColor: alpha(barColor, 0.12), \"& .MuiLinearProgress-bar\": { backgroundColor: barColor, borderRadius: 3 } }} />\r\n <Typography sx={{ fontSize: \"0.68rem\", color: \"text.secondary\", minWidth: 28, textAlign: \"right\" }}>{pct}%</Typography>\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Shared styles ─────────────────────────────────────────────────────────────\r\n\r\nconst TH: SxProps<Theme> = { fontSize: \"0.72rem\", fontWeight: 700, color: \"text.secondary\", py: \"7px\", px: \"10px\", backgroundColor: \"#f5f7f8\", borderBottom: \"1px solid\", borderColor: \"divider\", whiteSpace: \"nowrap\" };\r\nconst TD: SxProps<Theme> = { fontSize: \"0.75rem\", color: \"text.primary\", py: \"6px\", px: \"10px\", borderBottom: \"1px solid\", borderColor: \"divider\", verticalAlign: \"middle\" };\r\n\r\nfunction SectionTitle({ children }: { children: React.ReactNode }) {\r\n return (\r\n <Typography sx={{ fontSize: \"0.78rem\", fontWeight: 700, color: \"text.primary\", mb: \"8px\", mt: \"4px\" }}>\r\n {children}\r\n </Typography>\r\n );\r\n}\r\n\r\n// ─── Transcript bubbles (mirrors Transcript.tsx chat layout) ───────────────────\r\n\r\nfunction TranscriptBubbles({ text }: { text: string }) {\r\n const lines = text.split(\"\\n\").filter((l) => l.trim().length > 0);\r\n if (!lines.length) {\r\n return <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\" }}>No transcript available.</Typography>;\r\n }\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: \"6px\" }}>\r\n {lines.map((line, idx) => {\r\n const isPatient = line.trim().toLowerCase().startsWith(\"patient\");\r\n const text = line.replace(/^\\s*(Patient|Agent)\\s*:\\s*/i, \"\");\r\n return (\r\n <Box key={idx} sx={{ display: \"flex\", justifyContent: isPatient ? \"flex-end\" : \"flex-start\", alignItems: \"flex-end\", gap: \"6px\" }}>\r\n {!isPatient && <Avatar sx={{ width: 22, height: 22, fontSize: 12 }} />}\r\n <Box\r\n sx={(t) => ({\r\n maxWidth: \"70%\",\r\n px: \"10px\",\r\n py: \"7px\",\r\n borderRadius: isPatient ? \"8px 8px 0 8px\" : \"8px 8px 8px 0\",\r\n backgroundColor: isPatient ? t.palette.primary.main : \"#fff\",\r\n color: isPatient ? t.palette.common.white : \"#222\",\r\n border: isPatient ? \"none\" : \"1px solid #e0e0e0\",\r\n fontSize: \"0.78rem\",\r\n lineHeight: 1.5,\r\n })}\r\n >\r\n {text}\r\n </Box>\r\n {isPatient && <Avatar sx={{ width: 22, height: 22, fontSize: 12 }} />}\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Overview Tab ──────────────────────────────────────────────────────────────\r\n\r\nfunction OverviewTab({ data }: { data: NewAuditApiResponse }) {\r\n const meta = data.Audit_Metadata ?? {};\r\n const kvItems = [\r\n { label: \"Hospital Name\", value: meta.Hospital_Name ?? \"N/A\" },\r\n { label: \"Call Duration\", value: meta.Call_Duration ?? \"N/A\" },\r\n { label: \"Department\", value: meta[\"Process/Department\"] ?? \"N/A\" },\r\n { label: \"Agent Name\", value: meta.Agent_Name ?? \"N/A\" },\r\n { label: \"Call Disposition\", value: meta.Call_Disposition ?? \"N/A\" },\r\n { label: \"Employee ID\", value: meta.Employee_ID ?? \"N/A\" },\r\n { label: \"Call Category\", value: meta.Call_Category ?? \"N/A\" },\r\n { label: \"Team Leader\", value: meta.Team_Leader ?? \"N/A\" },\r\n { label: \"Call Type\", value: meta.Call_Type ?? \"N/A\" },\r\n { label: \"Auditor Name\", value: meta.Auditor_Name ?? \"N/A\" },\r\n { label: \"Call Date & Time\", value: meta.Call_Date_Time ?? \"N/A\" },\r\n { label: \"Language\", value: meta.Language ?? \"N/A\" },\r\n { label: \"Recording ID\", value: meta.Recording_ID ?? \"N/A\" },\r\n ];\r\n const half = Math.ceil(kvItems.length / 2);\r\n const col1 = kvItems.slice(0, half);\r\n const col2 = kvItems.slice(half);\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n {/* Audit Metadata */}\r\n <Box>\r\n <SectionTitle>Audit Metadata</SectionTitle>\r\n <Box sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\", backgroundColor: \"background.paper\" }}>\r\n <Box sx={{ display: \"flex\" }}>\r\n {[col1, col2].map((chunk, ci) => (\r\n <Box key={ci} sx={{ flex: \"1 1 240px\", minWidth: 0, borderRight: ci === 0 ? \"1px solid\" : \"none\", borderColor: \"divider\" }}>\r\n {chunk.map((item, ii) => (\r\n <Box key={ii} sx={{ display: \"flex\", alignItems: \"baseline\", borderBottom: ii < chunk.length - 1 ? \"1px solid\" : \"none\", borderColor: \"divider\", px: \"10px\", py: \"6px\", gap: 1 }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"text.secondary\", minWidth: 140, flexShrink: 0 }}>{item.label}</Typography>\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.primary\", fontWeight: 500 }}>\r\n {item.value}\r\n </Typography>\r\n </Box>\r\n ))}\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n {/* Call Summary */}\r\n <Box>\r\n <SectionTitle>Call Summary</SectionTitle>\r\n <Box sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", backgroundColor: \"background.paper\", px: \"14px\", py: \"10px\", maxHeight: 160, overflowY: \"auto\" }}>\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\", lineHeight: 1.7 }}>\r\n {data.Call_Summary ?? \"No summary available.\"}\r\n </Typography>\r\n </Box>\r\n </Box>\r\n\r\n {/* Call Transcription */}\r\n <Box>\r\n <SectionTitle>Call Transcription</SectionTitle>\r\n <Box sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", backgroundColor: \"#f9f9f9\", px: \"14px\", py: \"12px\", maxHeight: 320, overflowY: \"auto\" }}>\r\n <TranscriptBubbles text={data.transcript ?? \"\"} />\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Scorecard Tab ─────────────────────────────────────────────────────────────\r\n\r\nconst SCORECARD_PARAMS: Array<{ key: keyof QualityScorecard; label: string; defaultMax: number }> = [\r\n { key: \"Opening_and_Greeting\", label: \"Opening & Greeting\", defaultMax: 10 },\r\n { key: \"Verification_and_Authentication\", label: \"Verification & Authentication\", defaultMax: 10 },\r\n { key: \"Communication_and_Soft_Skills\", label: \"Communication & Soft Skills\", defaultMax: 15 },\r\n { key: \"Process_and_Workflow_Adherence\", label: \"Process & Workflow Adherence\", defaultMax: 20 },\r\n { key: \"Resolution_Accuracy\", label: \"Resolution Accuracy\", defaultMax: 20 },\r\n { key: \"Empathy_and_Patient_Assurance\", label: \"Empathy & Patient Assurance\", defaultMax: 10 },\r\n { key: \"Call_Handling\", label: \"Call Handling\", defaultMax: 5 },\r\n { key: \"CRM_Documentation_Alignment\", label: \"CRM Documentation Alignment\", defaultMax: 5 },\r\n { key: \"Closing_and_Customer_Education\", label: \"Closing & Customer Education\", defaultMax: 5 },\r\n];\r\n\r\nfunction ScorecardTab({ data, primary }: { data: NewAuditApiResponse; primary: string }) {\r\n const sc = data.Quality_Scorecard ?? {};\r\n const summary = data.Executive_Audit_Summary ?? {};\r\n\r\n const rawScore = sc.Total_Score ?? summary.Overall_Audit_Score_Percentage ?? 0;\r\n const overallScore = typeof rawScore === \"string\" ? parseFloat(rawScore.replace(\"%\", \"\")) || 0 : rawScore;\r\n const pct = Math.min(Math.round((overallScore / 100) * 100), 100);\r\n const resultBadge = summary.Audit_Result ?? sc.Final_Rating ?? \"N/A\";\r\n\r\n const metrics = [\r\n { label: \"Audit Result\", value: summary.Audit_Result ?? \"N/A\" },\r\n { label: \"First Call Resolution\", value: summary.First_Call_Resolution_FCR ?? \"N/A\" },\r\n { label: \"Patient Experience\", value: summary.Customer_Experience ?? summary.Patient_Sentiment ?? \"N/A\" },\r\n { label: \"Process Adherence\", value: summary.Process_Adherence ?? \"N/A\" },\r\n { label: \"Effective Communication\", value: summary.Communication_Effectiveness ?? \"N/A\" },\r\n ];\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2.5 }}>\r\n {/* Overall score + metric cards */}\r\n <Box sx={{ display: \"flex\", gap: 2, flexWrap: \"wrap\", alignItems: \"stretch\" }}>\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", backgroundColor: \"background.paper\", px: 3, py: 2, minWidth: 140, gap: 0.5 }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"text.secondary\", fontWeight: 600, mb: 0.5, letterSpacing: \"0.04em\" }}>OVERALL SCORE</Typography>\r\n <Box sx={{ display: \"flex\", alignItems: \"baseline\", gap: \"3px\" }}>\r\n <Typography sx={{ fontSize: \"2.4rem\", fontWeight: 700, color: primary, lineHeight: 1 }}>{overallScore}</Typography>\r\n <Typography sx={{ fontSize: \"0.85rem\", color: \"text.secondary\", fontWeight: 600 }}>/100</Typography>\r\n </Box>\r\n <Box sx={{ width: \"100%\", mt: 0.75 }}>\r\n <LinearProgress variant=\"determinate\" value={pct} sx={{ height: 6, borderRadius: 3, backgroundColor: alpha(primary, 0.12), \"& .MuiLinearProgress-bar\": { backgroundColor: primary, borderRadius: 3 } }} />\r\n </Box>\r\n <Box sx={{ mt: 0.75 }}><StatusBadge label={resultBadge} /></Box>\r\n </Box>\r\n <Box sx={{ flex: 1, minWidth: 260, display: \"flex\", flexDirection: \"column\", gap: \"8px\", alignSelf: \"stretch\" }}>\r\n <Box sx={{ flex: 1, display: \"grid\", gridTemplateColumns: \"repeat(3, 1fr)\", gap: \"8px\" }}>\r\n {metrics.slice(0, 3).map((m) => (\r\n <Box key={m.label} sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"6px\", backgroundColor: \"background.paper\", px: \"10px\", py: \"8px\", display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", gap: \"6px\" }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"text.secondary\", lineHeight: 1.3, textAlign: \"center\" }}>{m.label}</Typography>\r\n <StatusBadge label={m.value} />\r\n </Box>\r\n ))}\r\n </Box>\r\n <Box sx={{ flex: 1, display: \"grid\", gridTemplateColumns: \"repeat(3, 1fr)\", gap: \"8px\" }}>\r\n {metrics.slice(3).map((m) => (\r\n <Box key={m.label} sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"6px\", backgroundColor: \"background.paper\", px: \"10px\", py: \"8px\", display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", gap: \"6px\" }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"text.secondary\", lineHeight: 1.3, textAlign: \"center\" }}>{m.label}</Typography>\r\n <StatusBadge label={m.value} />\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n {/* Quality Scorecard table */}\r\n <Box>\r\n <SectionTitle>Quality Scorecard</SectionTitle>\r\n <TableContainer sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\" }}>\r\n <Table size=\"small\">\r\n <TableHead>\r\n <TableRow>\r\n {[\r\n { label: \"Evaluation Parameter\", align: \"left\", minWidth: 180 },\r\n { label: \"Weightage\", align: \"center\", minWidth: 90 },\r\n { label: \"Score\", align: \"center\", minWidth: 80 },\r\n { label: \"\", align: \"left\", minWidth: 120 },\r\n { label: \"Remarks\", align: \"left\", minWidth: 160 },\r\n ].map((col, i) => (\r\n <TableCell key={i} sx={{ ...TH, textAlign: col.align as any, minWidth: col.minWidth }}>{col.label}</TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {SCORECARD_PARAMS.map((p) => {\r\n const entry = sc[p.key] as ScorecardEntry | undefined;\r\n const rawEntryScore = entry?.Score_Obtained;\r\n const score = typeof rawEntryScore === \"string\" ? parseFloat(rawEntryScore) || 0 : (rawEntryScore ?? 0);\r\n const max = entry?.Weightage ?? p.defaultMax;\r\n return (\r\n <TableRow key={p.key}>\r\n <TableCell sx={{ ...TD }}>{p.label}</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\" }}>{max}</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\" }}>{rawEntryScore ?? \"—\"}</TableCell>\r\n <TableCell sx={{ ...TD }}><ProgressCell value={{ score, max }} primary={primary} /></TableCell>\r\n <TableCell sx={{ ...TD }}>{entry?.Remarks ?? \"—\"}</TableCell>\r\n </TableRow>\r\n );\r\n })}\r\n <TableRow sx={{ backgroundColor: \"#f5f7f8\", \"& td\": { borderBottom: 0 } }}>\r\n <TableCell sx={{ ...TD, fontWeight: 700 }}>Total Score</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\", fontWeight: 700 }}>100</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\", fontWeight: 700 }}>{overallScore}</TableCell>\r\n <TableCell sx={{ ...TD }}><ProgressCell value={{ score: overallScore, max: 100 }} primary={primary} /></TableCell>\r\n <TableCell sx={{ ...TD, fontWeight: 700 }}><StatusBadge label={sc.Final_Rating ?? resultBadge} /></TableCell>\r\n </TableRow>\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Audit Checklist Tab ───────────────────────────────────────────────────────\r\n\r\ninterface ChecklistRow { parameter: string; expectedStandard: string; status: string; remarks: string; qaObservation: string }\r\n\r\nconst OPENING_LABELS: Record<string, string> = { Standard_Greeting_Used: \"Standard Greeting Used\", Hospital_Name_Mentioned: \"Hospital Name Mentioned\", Agent_Introduction_Provided: \"Agent Introduction Provided\", Professional_Tone_Maintained: \"Professional Tone Maintained\" };\r\nconst OPENING_EXPECTED: Record<string, string> = { Standard_Greeting_Used: \"Agent must greet as per approved hospital script\", Hospital_Name_Mentioned: \"Mandatory hospital identification\", Agent_Introduction_Provided: \"Agent must introduce self\", Professional_Tone_Maintained: \"Warm and professional tone expected\" };\r\n\r\nconst VERIFICATION_LABELS: Record<string, string> = { Patient_Name_Captured: \"Patient Name Captured\", \"Existing_New_Patient_Validation\": \"Existing/New Patient Validation\", Registered_Mobile_Number_Verified: \"Registered Mobile Number Verified\", \"Secondary_Authentication_DOB_UHID\": \"Secondary Authentication (DOB/UHID)\" };\r\nconst VERIFICATION_EXPECTED: Record<string, string> = { Patient_Name_Captured: \"Mandatory for identification\", \"Existing_New_Patient_Validation\": \"Required for workflow routing\", Registered_Mobile_Number_Verified: \"Mandatory authentication step\", \"Secondary_Authentication_DOB_UHID\": \"Recommended compliance practice\" };\r\n\r\nconst COMM_LABELS: Record<string, string> = { Clarity_of_Speech: \"Clarity of Speech\", Active_Listening_Demonstrated: \"Active Listening Demonstrated\", Avoidance_of_Dead_Air: \"Avoidance of Dead Air\", Professional_Language_Usage: \"Professional Language Usage\", Empathy_Statements_Used: \"Empathy Statements Used\" };\r\nconst COMM_EXPECTED: Record<string, string> = { Clarity_of_Speech: \"Clear and understandable communication\", Active_Listening_Demonstrated: \"Agent should acknowledge caller inputs\", Avoidance_of_Dead_Air: \"Minimal silence during call\", Professional_Language_Usage: \"No slang/rude language\", Empathy_Statements_Used: \"Emotional acknowledgement expected\" };\r\n\r\nconst EMPATHY_LABELS: Record<string, string> = { Patient_Concern_Acknowledged: \"Patient Concern Acknowledged\", Empathy_Toward_Patient_Condition: \"Empathy Toward Patient Condition\", Severity_Red_Flag_Probing: \"Severity/Red Flag Probing\", Professional_Behaviour_Maintained: \"Professional Behaviour Maintained\" };\r\nconst EMPATHY_EXPECTED: Record<string, string> = { Patient_Concern_Acknowledged: \"Agent should acknowledge caller concern\", Empathy_Toward_Patient_Condition: \"Empathetic reassurance expected\", Severity_Red_Flag_Probing: \"Escalation probing recommended where applicable\", Professional_Behaviour_Maintained: \"Calm and respectful handling required\" };\r\n\r\nconst CALL_HANDLING_LABELS: Record<string, string> = { \"Placing the Call on Hold\": \"Placing the Call on Hold\", Resuming_After_Hold: \"Resuming After Hold\", Apologizing_for_Inconvenience: \"Apologizing for Inconvenience\", Offering_Further_Assistance: \"Offering Further Assistance\" };\r\nconst CALL_HANDLING_EXPECTED: Record<string, string> = { \"Placing the Call on Hold\": \"Inform customer before placing on hold\", Resuming_After_Hold: \"Thank customer for holding\", Apologizing_for_Inconvenience: \"Apologize for any delays\", Offering_Further_Assistance: \"Ask if further help is needed\" };\r\n\r\nconst CLOSURE_LABELS: Record<string, string> = { Additional_Assistance_Offered: \"Additional Assistance Offered\", Professional_Closing_Provided: \"Professional Closing Provided\", \"Wellness/Courtesy_Statement_Used\": \"Wellness/Courtesy Statement Used\" };\r\nconst CLOSURE_EXPECTED: Record<string, string> = { Additional_Assistance_Offered: \"Mandatory closure check\", Professional_Closing_Provided: \"Standard closure etiquette expected\", \"Wellness/Courtesy_Statement_Used\": \"Positive healthcare closure preferred\" };\r\n\r\nconst EXCLUDED_KEYS = new Set([\"Patient_Data_Handling\", \"Recontact_Information_Shared\"]);\r\n\r\nfunction obsRecordToRows(record: ObsRecord | undefined, labelMap: Record<string, string>, expectedMap: Record<string, string>): ChecklistRow[] {\r\n return Object.entries(record ?? {})\r\n .filter(([key]) => !EXCLUDED_KEYS.has(key))\r\n .map(([key, val]) => ({\r\n parameter: labelMap[key] ?? key.replace(/_/g, \" \"),\r\n expectedStandard: expectedMap[key] ?? \"—\",\r\n status: val.Status ?? \"N/A\",\r\n remarks: val.Remarks ?? \"—\",\r\n qaObservation: val.Observation_Impact ?? \"—\",\r\n }));\r\n}\r\n\r\nfunction processWorkflowRows(groups: ChecklistGroup[] | undefined): ChecklistRow[] {\r\n return (groups ?? []).flatMap((g) =>\r\n (g?.items ?? []).map((item) => ({\r\n parameter: item.parameter ?? \"—\",\r\n expectedStandard: item.expectedStandard ?? \"—\",\r\n status: item.status ?? \"N/A\",\r\n remarks: item.remarks ?? \"—\",\r\n qaObservation: item.qaObservation ?? \"—\",\r\n })),\r\n );\r\n}\r\n\r\nconst CHECKLIST_COLS = [\r\n { key: \"parameter\", label: \"Audit Parameter\", minWidth: 180 },\r\n { key: \"expectedStandard\", label: \"Expected Standard\", minWidth: 200 },\r\n { key: \"status\", label: \"Status\", minWidth: 130 },\r\n { key: \"remarks\", label: \"Remarks\", minWidth: 160 },\r\n { key: \"qaObservation\", label: \"QA Observation / Impact\", minWidth: 180 },\r\n];\r\n\r\nfunction ChecklistTable({ title, rows }: { title: string; rows: ChecklistRow[] }) {\r\n const visibleRows = rows;\r\n if (!visibleRows.length) return null;\r\n return (\r\n <Box>\r\n <SectionTitle>{title}</SectionTitle>\r\n <TableContainer sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\" }}>\r\n <Table size=\"small\">\r\n <TableHead>\r\n <TableRow>\r\n {CHECKLIST_COLS.map((col) => (\r\n <TableCell key={col.key} sx={{ ...TH, minWidth: col.minWidth }}>{col.label}</TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {visibleRows.map((row, ri) => (\r\n <TableRow key={ri} sx={{ \"&:last-child td\": { borderBottom: 0 } }}>\r\n <TableCell sx={{ ...TD }}>{row.parameter}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.expectedStandard}</TableCell>\r\n <TableCell sx={{ ...TD }}><StatusIconBadge label={row.status} /></TableCell>\r\n <TableCell sx={{ ...TD }}>{row.remarks}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.qaObservation}</TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Box>\r\n );\r\n}\r\n\r\nfunction DispositionFrameworkTable({ data }: { data: NewAuditApiResponse }) {\r\n const rows = (data.Disposition_Based_Quality_Framework ?? []).flatMap((df) =>\r\n (df?.frameworks ?? []).map((fw) => ({\r\n dispositionType: df.dispositionType ?? \"—\",\r\n expectedFramework: fw.expectedFramework ?? \"—\",\r\n status: fw.status ?? \"N/A\",\r\n remarks: fw.remarks ?? \"—\",\r\n })),\r\n ).filter((r) => r.expectedFramework.toLowerCase().trim() !== \"clinical sensitivity handling\");\r\n\r\n if (!rows.length) {\r\n return <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\" }}>No disposition framework data available.</Typography>;\r\n }\r\n\r\n return (\r\n <Box>\r\n <SectionTitle>Disposition-Based Quality Framework</SectionTitle>\r\n <TableContainer sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\" }}>\r\n <Table size=\"small\">\r\n <TableHead>\r\n <TableRow>\r\n {[\r\n { label: \"Disposition Type\", minWidth: 160 },\r\n { label: \"Expected Framework\", minWidth: 200 },\r\n { label: \"Status\", minWidth: 120 },\r\n { label: \"Remarks\", minWidth: 160 },\r\n ].map((col, i) => (\r\n <TableCell key={i} sx={{ ...TH, minWidth: col.minWidth }}>{col.label}</TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {rows.map((row, ri) => (\r\n <TableRow key={ri} sx={{ \"&:last-child td\": { borderBottom: 0 } }}>\r\n <TableCell sx={{ ...TD }}>{row.dispositionType}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.expectedFramework}</TableCell>\r\n <TableCell sx={{ ...TD }}><StatusIconBadge label={row.status} /></TableCell>\r\n <TableCell sx={{ ...TD }}>{row.remarks}</TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Box>\r\n );\r\n}\r\n\r\nfunction AuditChecklistContent({ data }: { data: NewAuditApiResponse }) {\r\n const obs = data.Section_Wise_Audit_Observations_Checklist ?? {};\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n <DispositionFrameworkTable data={data} />\r\n <ChecklistTable title=\"Opening & Greeting\" rows={obsRecordToRows(obs.Opening_and_Greeting, OPENING_LABELS, OPENING_EXPECTED)} />\r\n <ChecklistTable title=\"Verification & Authentication\" rows={obsRecordToRows(obs.Verification_and_Authentication, VERIFICATION_LABELS, VERIFICATION_EXPECTED)} />\r\n <ChecklistTable title=\"Communication Effectiveness\" rows={obsRecordToRows(obs.Communication_and_Soft_Skills, COMM_LABELS, COMM_EXPECTED)} />\r\n <ChecklistTable title=\"Process & Workflow Adherence\" rows={processWorkflowRows(obs.Process_and_Workflow_Adherence)} />\r\n <ChecklistTable title=\"Empathy & Patient Assurance\" rows={obsRecordToRows(obs.Empathy_and_Patient_Assurance, EMPATHY_LABELS, EMPATHY_EXPECTED)} />\r\n <ChecklistTable title=\"Call Handling\" rows={obsRecordToRows(obs.Call_Handling, CALL_HANDLING_LABELS, CALL_HANDLING_EXPECTED)} />\r\n <ChecklistTable title=\"Call Closure & Customer Education\" rows={obsRecordToRows(obs.Call_Closure_and_Customer_Education, CLOSURE_LABELS, CLOSURE_EXPECTED)} />\r\n </Box>\r\n );\r\n}\r\n\r\nfunction AuditChecklistTab({ data, primary: _primary }: { data: NewAuditApiResponse; primary: string }) {\r\n const [view, setView] = useState<\"overview\" | \"detailed\">(\"overview\");\r\n const obs = data.Section_Wise_Audit_Observations_Checklist ?? {};\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n <Box sx={{ display: \"flex\", justifyContent: \"flex-start\" }}>\r\n <ToggleButtonGroup\r\n value={view}\r\n exclusive\r\n onChange={(_, v) => v && setView(v)}\r\n size=\"small\"\r\n sx={{\r\n \"& .MuiToggleButton-root\": {\r\n fontSize: \"0.72rem\",\r\n fontWeight: 600,\r\n textTransform: \"none\",\r\n px: 1.5,\r\n py: \"4px\",\r\n border: \"1px solid\",\r\n borderColor: \"divider\",\r\n color: \"text.secondary\",\r\n \"&.Mui-selected\": { backgroundColor: _primary, color: \"#fff\", borderColor: _primary, \"&:hover\": { backgroundColor: _primary } },\r\n },\r\n }}\r\n >\r\n <ToggleButton value=\"overview\">Overview</ToggleButton>\r\n <ToggleButton value=\"detailed\">Detailed</ToggleButton>\r\n </ToggleButtonGroup>\r\n </Box>\r\n\r\n {view === \"overview\" && <DispositionFrameworkTable data={data} />}\r\n\r\n {view === \"detailed\" && (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n <ChecklistTable title=\"Opening & Greeting\" rows={obsRecordToRows(obs.Opening_and_Greeting, OPENING_LABELS, OPENING_EXPECTED)} />\r\n <ChecklistTable title=\"Verification & Authentication\" rows={obsRecordToRows(obs.Verification_and_Authentication, VERIFICATION_LABELS, VERIFICATION_EXPECTED)} />\r\n <ChecklistTable title=\"Communication Effectiveness\" rows={obsRecordToRows(obs.Communication_and_Soft_Skills, COMM_LABELS, COMM_EXPECTED)} />\r\n <ChecklistTable title=\"Process & Workflow Adherence\" rows={processWorkflowRows(obs.Process_and_Workflow_Adherence)} />\r\n <ChecklistTable title=\"Empathy & Patient Assurance\" rows={obsRecordToRows(obs.Empathy_and_Patient_Assurance, EMPATHY_LABELS, EMPATHY_EXPECTED)} />\r\n <ChecklistTable title=\"Call Handling\" rows={obsRecordToRows(obs.Call_Handling, CALL_HANDLING_LABELS, CALL_HANDLING_EXPECTED)} />\r\n <ChecklistTable title=\"Call Closure & Customer Education\" rows={obsRecordToRows(obs.Call_Closure_and_Customer_Education, CLOSURE_LABELS, CLOSURE_EXPECTED)} />\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Root Cause Analysis Tab ───────────────────────────────────────────────────\r\n\r\nfunction RootCauseAnalysisTab({ data, primary }: { data: NewAuditApiResponse; primary: string }) {\r\n const rcaRows = data.Root_Cause_Analysis ?? [];\r\n const rec = data.Auditor_Recommendation ?? {};\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n <Box>\r\n <SectionTitle>Root Cause Analysis</SectionTitle>\r\n {rcaRows.length > 0 ? (\r\n <TableContainer sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\" }}>\r\n <Table size=\"small\">\r\n <TableHead>\r\n <TableRow>\r\n {[{ label: \"Observation\", minWidth: 180 }, { label: \"Root Cause\", minWidth: 200 }, { label: \"Impact\", minWidth: 200 }, { label: \"Severity\", minWidth: 90 }].map((col, i) => (\r\n <TableCell key={i} sx={{ ...TH, minWidth: col.minWidth }}>{col.label}</TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {rcaRows.map((row, ri) => (\r\n <TableRow key={ri} sx={{ \"&:last-child td\": { borderBottom: 0 } }}>\r\n <TableCell sx={{ ...TD }}>{row.Observation ?? \"—\"}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.Root_Cause ?? \"—\"}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.Impact ?? \"—\"}</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\" }}>{row.Severity ? <StatusBadge label={row.Severity} /> : \"—\"}</TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n ) : (\r\n <Box sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", px: \"14px\", py: \"10px\", backgroundColor: \"background.paper\" }}>\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\" }}>No significant root causes identified for this interaction.</Typography>\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n {(toStringArray(rec.Key_Strengths).length > 0 || toStringArray(rec.Improvement_Areas).length > 0) && (\r\n <Box>\r\n <SectionTitle>Auditor's Recommendation</SectionTitle>\r\n <Box sx={{ display: \"flex\", gap: 2, flexWrap: \"wrap\" }}>\r\n {[\r\n { title: \"Key Strengths\", items: toStringArray(rec.Key_Strengths), color: \"#2e7d32\" },\r\n { title: \"Improvement Areas\", items: toStringArray(rec.Improvement_Areas), color: \"#e65100\" },\r\n ].filter((g) => (g.items?.length ?? 0) > 0).map((g) => (\r\n <Box key={g.title} sx={{ flex: \"1 1 200px\", border: \"1px solid\", borderColor: \"divider\", borderRadius: \"6px\", backgroundColor: \"background.paper\", px: \"14px\", py: \"10px\" }}>\r\n <Typography sx={{ fontSize: \"0.78rem\", fontWeight: 600, color: \"text.primary\", mb: \"8px\" }}>{g.title}</Typography>\r\n {g.items?.map((item, ii) => (\r\n <Box key={ii} sx={{ display: \"flex\", alignItems: \"flex-start\", gap: \"7px\", mb: \"5px\" }}>\r\n <Box sx={{ width: 5, height: 5, borderRadius: \"50%\", backgroundColor: g.color, mt: \"5px\", flexShrink: 0 }} />\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\", lineHeight: 1.5 }}>{item}</Typography>\r\n </Box>\r\n ))}\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n {data.Final_Auditor_Remarks && (\r\n <Box sx={{ border: \"1px solid\", borderLeft: \"3px solid\", borderColor: \"divider\", borderLeftColor: primary, borderRadius: \"6px\", px: \"14px\", py: \"10px\", backgroundColor: alpha(primary, 0.04) }}>\r\n <Typography sx={{ fontSize: \"0.78rem\", fontWeight: 600, color: primary, mb: \"6px\" }}>Final Auditor Remarks</Typography>\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\", lineHeight: 1.6 }}>{data.Final_Auditor_Remarks}</Typography>\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Static tabs ───────────────────────────────────────────────────────────────\r\n\r\nconst STATIC_TABS = [\r\n { id: \"overview\", label: \"Overview\" },\r\n { id: \"scorecard\", label: \"Scorecard\" },\r\n { id: \"checklist\", label: \"Audit Checklist\" },\r\n { id: \"rca\", label: \"Root Cause Analysis\" },\r\n];\r\n\r\n// ─── Data hook ─────────────────────────────────────────────────────────────────\r\n\r\nfunction useAuditReportData(callUuid?: string, active = true) {\r\n const [activeTab, setActiveTab] = useState(0);\r\n const [apiData, setApiData] = useState<NewAuditApiResponse | null>(null);\r\n const [auditLoading, setAuditLoading] = useState(false);\r\n const [auditError, setAuditError] = useState<string | null>(null);\r\n\r\n useEffect(() => {\r\n setApiData(null);\r\n setAuditError(null);\r\n setActiveTab(0);\r\n\r\n if (!active || !callUuid) return;\r\n\r\n let cancelled = false;\r\n setAuditLoading(true);\r\n axiosInstance\r\n .get<NewAuditApiResponse>(END_POINT.CALLSAGE_AUDIT(callUuid))\r\n .then((res) => { if (!cancelled) setApiData(res.data); })\r\n .catch((err: any) => {\r\n if (!cancelled) setAuditError(err?.response?.data?.message ?? err?.message ?? \"Failed to generate audit report\");\r\n })\r\n .finally(() => { if (!cancelled) setAuditLoading(false); });\r\n return () => { cancelled = true; };\r\n }, [active, callUuid]);\r\n\r\n return { activeTab, setActiveTab, apiData, auditLoading, auditError };\r\n}\r\n\r\n// ─── Print layout ──────────────────────────────────────────────────────────────\r\n\r\nconst PRINT_ROOT_ID = \"audit-report-print-root\";\r\n\r\nconst PRINT_STYLES = (\r\n <GlobalStyles\r\n styles={{\r\n [`#${PRINT_ROOT_ID}`]: { position: \"absolute\", width: \"1px\", height: \"1px\", overflow: \"hidden\", clip: \"rect(0 0 0 0)\", clipPath: \"inset(50%)\", whiteSpace: \"nowrap\", pointerEvents: \"none\" },\r\n \"@media print\": {\r\n \"body *\": { visibility: \"hidden\" },\r\n [`#${PRINT_ROOT_ID}`]: { visibility: \"visible\", position: \"absolute\", top: 0, left: 0, width: \"100%\", height: \"auto\", overflow: \"visible\", clip: \"auto\", clipPath: \"none\", whiteSpace: \"normal\", padding: \"0 8mm\", boxSizing: \"border-box\" },\r\n [`#${PRINT_ROOT_ID} *`]: { visibility: \"visible\", printColorAdjust: \"exact\", WebkitPrintColorAdjust: \"exact\" } as React.CSSProperties,\r\n },\r\n }}\r\n />\r\n);\r\n\r\n// ─── Inner component (shared by dialog + full-page) ───────────────────────────\r\n\r\ninterface AuditReportInnerProps {\r\n callUuid?: string;\r\n active?: boolean;\r\n primary: string;\r\n onClose?: () => void;\r\n onMaximize?: () => void;\r\n}\r\n\r\nfunction buildHeaderBadges(data: NewAuditApiResponse): Array<{ label: string; value: string; asBadge?: boolean }> {\r\n const sc = data.Quality_Scorecard ?? {};\r\n const summary = data.Executive_Audit_Summary ?? {};\r\n const meta = data.Audit_Metadata ?? {};\r\n return [\r\n { label: \"Call Disposition\", value: meta.Call_Disposition ?? \"N/A\" },\r\n { label: \"Result\", value: summary.Audit_Result ?? \"N/A\", asBadge: true },\r\n { label: \"Score\", value: `${sc.Total_Score ?? summary.Overall_Audit_Score_Percentage ?? 0}/100` },\r\n ];\r\n}\r\n\r\nfunction AuditReportInner({ callUuid, active = true, primary, onClose, onMaximize }: AuditReportInnerProps) {\r\n const { activeTab, setActiveTab, apiData, auditLoading, auditError } = useAuditReportData(callUuid, active);\r\n\r\n const headerBadges = apiData ? buildHeaderBadges(apiData) : [];\r\n const subtitle = apiData\r\n ? [apiData.Audit_Metadata?.Agent_Name, apiData.Audit_Metadata?.Hospital_Name, apiData.Audit_Metadata?.Call_Date_Time].filter(Boolean).join(\" · \") || undefined\r\n : undefined;\r\n\r\n const iconButtonSx = {\r\n flexShrink: 0, width: 28, height: 28, borderRadius: \"6px\", backgroundColor: \"action.hover\", color: \"text.secondary\",\r\n \"&:hover\": { backgroundColor: \"action.selected\", color: \"text.primary\" },\r\n transition: \"all 0.15s ease\",\r\n } as const;\r\n\r\n function renderTab() {\r\n if (!apiData) return null;\r\n switch (activeTab) {\r\n case 0: return <OverviewTab data={apiData} />;\r\n case 1: return <ScorecardTab data={apiData} primary={primary} />;\r\n case 2: return <AuditChecklistTab data={apiData} primary={primary} />;\r\n case 3: return <RootCauseAnalysisTab data={apiData} primary={primary} />;\r\n default: return null;\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {PRINT_STYLES}\r\n {createPortal(\r\n <div id={PRINT_ROOT_ID}>\r\n <Box sx={{ mb: 2.5, pb: 1.5, borderBottom: \"2px solid\", borderColor: \"divider\" }}>\r\n <Typography sx={{ fontSize: \"1.2rem\", fontWeight: 700, color: \"text.primary\" }}>Audit Report</Typography>\r\n {subtitle && <Typography sx={{ fontSize: \"0.8rem\", color: \"text.secondary\", mt: \"4px\" }}>{subtitle}</Typography>}\r\n </Box>\r\n {apiData && (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 3 }}>\r\n <OverviewTab data={apiData} />\r\n <ScorecardTab data={apiData} primary={primary} />\r\n <Box>\r\n <SectionTitle>Audit Checklist</SectionTitle>\r\n <AuditChecklistContent data={apiData} />\r\n </Box>\r\n <RootCauseAnalysisTab data={apiData} primary={primary} />\r\n </Box>\r\n )}\r\n </div>,\r\n document.body,\r\n )}\r\n\r\n {/* Title bar */}\r\n <Box sx={{ px: { xs: 2, md: 2.5 }, py: \"12px\", display: \"flex\", alignItems: \"flex-start\", justifyContent: \"space-between\", gap: 1, borderBottom: \"1px solid\", borderColor: \"divider\", flexShrink: 0 }}>\r\n <Box sx={{ minWidth: 0 }}>\r\n <Typography sx={{ fontWeight: 700, fontSize: { xs: \"1rem\", sm: \"1.2rem\" }, color: \"text.primary\", lineHeight: 1.3 }}>Audit Report</Typography>\r\n {subtitle && <Typography sx={{ fontSize: \"0.78rem\", color: \"text.secondary\", mt: \"3px\" }}>{subtitle}</Typography>}\r\n </Box>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.75, flexShrink: 0 }}>\r\n {onMaximize && (\r\n <IconButton size=\"small\" onClick={onMaximize} title=\"Open in new tab\" sx={iconButtonSx}>\r\n <LaunchIcon sx={{ fontSize: 14 }} />\r\n </IconButton>\r\n )}\r\n {onClose && (\r\n <IconButton size=\"small\" onClick={onClose} title=\"Close\" sx={iconButtonSx}>\r\n <CloseIcon sx={{ fontSize: 15 }} />\r\n </IconButton>\r\n )}\r\n </Box>\r\n </Box>\r\n\r\n {/* Header badges */}\r\n {headerBadges.length > 0 && (\r\n <Box sx={{ px: { xs: 2, md: 2.5 }, py: \"8px\", display: \"flex\", alignItems: \"center\", gap: \"8px\", flexWrap: \"wrap\", borderBottom: \"1px solid\", borderColor: \"divider\", backgroundColor: \"#f5f7f8\", flexShrink: 0 }}>\r\n {headerBadges.map((badge, i) =>\r\n badge.asBadge ? (\r\n <StatusBadge key={i} label={badge.value} />\r\n ) : (\r\n <Box key={i} sx={{ display: \"flex\", alignItems: \"center\", gap: \"5px\", px: \"9px\", height: 26, border: \"1px solid\", borderColor: \"divider\", borderRadius: \"5px\", backgroundColor: \"background.paper\" }}>\r\n <Box sx={{ width: 5, height: 5, borderRadius: \"50%\", backgroundColor: primary, flexShrink: 0 }} />\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"text.secondary\", whiteSpace: \"nowrap\" }}>\r\n <Box component=\"span\" sx={{ fontWeight: 600, color: \"text.primary\", mr: \"3px\" }}>{badge.label}:</Box>\r\n {badge.value}\r\n </Typography>\r\n </Box>\r\n ),\r\n )}\r\n </Box>\r\n )}\r\n\r\n {/* Static tabs */}\r\n <Box sx={{ borderBottom: \"1px solid\", borderColor: \"divider\", backgroundColor: \"background.paper\", flexShrink: 0 }}>\r\n <Tabs\r\n value={activeTab}\r\n onChange={(_, v) => setActiveTab(v)}\r\n variant=\"scrollable\"\r\n scrollButtons=\"auto\"\r\n sx={{\r\n minHeight: 40,\r\n px: { xs: 1, md: 2 },\r\n \"& .MuiTab-root\": { fontSize: \"0.78rem\", fontWeight: 600, minHeight: 40, textTransform: \"none\", color: \"text.secondary\", py: 0, px: 1.5, \"&.Mui-selected\": { color: primary } },\r\n \"& .MuiTabs-indicator\": { backgroundColor: primary, height: 2 },\r\n }}\r\n >\r\n {STATIC_TABS.map((tab) => (\r\n <Tab key={tab.id} label={tab.label} disableRipple />\r\n ))}\r\n </Tabs>\r\n </Box>\r\n\r\n {/* Tab content */}\r\n <Box sx={{ flex: 1, overflow: \"auto\", px: { xs: 2, md: 2.5 }, py: 2 }}>\r\n {auditLoading && (\r\n <Box sx={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\", py: 6 }}>\r\n <CircularProgress size={32} />\r\n </Box>\r\n )}\r\n {!auditLoading && auditError && (\r\n <Alert severity=\"warning\" sx={{ mb: 2, fontSize: \"0.78rem\" }}>{auditError}</Alert>\r\n )}\r\n {!auditLoading && !auditError && !apiData && (\r\n <Box sx={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\", py: 6 }}>\r\n <Typography sx={{ fontSize: \"0.78rem\", color: \"text.secondary\" }}>No audit data available.</Typography>\r\n </Box>\r\n )}\r\n {!auditLoading && apiData && renderTab()}\r\n </Box>\r\n </>\r\n );\r\n}\r\n\r\n// ─── \"Open in new tab\" URL resolver (host-configurable) ─────────────────────────\r\n//\r\n// The maximize button opens the full-page audit report in a new browser tab.\r\n// This SDK runs inside different host apps that may mount the audit-report route\r\n// at a different path, behind a router `basename`, or with hash routing — so the\r\n// host decides how that URL is built. The default targets a ROOT-level\r\n// \"/audit-report/:callUuid\" route (what ahs-cti-ui registers); a host that mounts\r\n// the route elsewhere should call `setAuditReportUrlResolver` once at startup.\r\n\r\n/** Builds the URL the maximize button opens for a given call. */\r\nexport type AuditReportUrlResolver = (callUuid: string) => string;\r\n\r\nlet auditReportUrlResolver: AuditReportUrlResolver = (callUuid) =>\r\n `/audit-report/${encodeURIComponent(callUuid)}`;\r\n\r\n/**\r\n * Configure how the audit-report maximize button builds its new-tab URL.\r\n * Call once during host-app startup, alongside registering the route that\r\n * renders `SDKPages.AuditReportPage`.\r\n *\r\n * @example\r\n * // Route registered at \"/reports/audit-report/:callUuid\":\r\n * setAuditReportUrlResolver((id) => `/reports/audit-report/${encodeURIComponent(id)}`);\r\n * // Hash router:\r\n * setAuditReportUrlResolver((id) => `/#/audit-report/${encodeURIComponent(id)}`);\r\n */\r\nexport function setAuditReportUrlResolver(resolver: AuditReportUrlResolver): void {\r\n auditReportUrlResolver = resolver;\r\n}\r\n\r\n// ─── Public exports ────────────────────────────────────────────────────────────\r\n\r\ninterface AuditReportDialogProps {\r\n open: boolean;\r\n onClose: () => void;\r\n width?: string;\r\n rowData?: CdrRecordResponse;\r\n /**\r\n * Per-instance override of the maximize behaviour. When provided it takes\r\n * precedence over the globally-configured resolver — useful for in-app\r\n * navigation instead of opening a new tab.\r\n */\r\n onMaximize?: (callUuid: string) => void;\r\n}\r\n\r\n/**\r\n * Audit report shown in a modal dialog. The maximize button opens the same\r\n * report full-screen in a new browser tab. The URL is built by the\r\n * host-configured resolver (see `setAuditReportUrlResolver`).\r\n */\r\nexport default function AuditReportDialog({ open, onClose, width = \"80vw\", rowData, onMaximize }: AuditReportDialogProps) {\r\n const theme = useTheme();\r\n const primary = theme.palette.primary.main;\r\n const callUuid = rowData?.callUuid;\r\n\r\n const handleMaximize = () => {\r\n if (!callUuid) return;\r\n if (onMaximize) {\r\n onMaximize(callUuid);\r\n return;\r\n }\r\n // NOTE: open WITHOUT \"noopener\" so the new tab inherits a copy of this\r\n // tab's sessionStorage (auth session + API token live there) — otherwise\r\n // the new tab boots logged-out.\r\n window.open(auditReportUrlResolver(callUuid), \"_blank\");\r\n };\r\n\r\n return (\r\n <Dialog\r\n open={open}\r\n onClose={(_e, reason) => { if (reason !== 'backdropClick') onClose(); }}\r\n fullWidth\r\n slotProps={{\r\n paper: {\r\n sx: { width, maxWidth: width, height: \"90vh\", display: \"flex\", flexDirection: \"column\", overflow: \"hidden\", borderRadius: \"10px\" },\r\n },\r\n }}\r\n >\r\n {open && (\r\n <AuditReportInner\r\n callUuid={callUuid}\r\n active={open}\r\n primary={primary}\r\n onClose={onClose}\r\n onMaximize={callUuid ? handleMaximize : undefined}\r\n />\r\n )}\r\n </Dialog>\r\n );\r\n}\r\n\r\n/**\r\n * Stand-alone full-page audit report rendered by the `/audit-report/:callUuid` route.\r\n */\r\nexport function AuditReportFullPage({ callUuid }: { callUuid?: string }) {\r\n const theme = useTheme();\r\n const primary = theme.palette.primary.main;\r\n\r\n return (\r\n <Box sx={{ height: \"100vh\", display: \"flex\", flexDirection: \"column\", overflow: \"hidden\", backgroundColor: \"background.paper\" }}>\r\n <AuditReportInner callUuid={callUuid} active primary={primary} />\r\n </Box>\r\n );\r\n}\r\n\r\n"],"mappings":"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","names":["text","_a","_b"]}