ahs-cti 1.0.1-beta.2 → 1.0.1-beta.21
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.
- package/dist/agentDetailReport-XUNWPSQW.mjs +10 -0
- package/dist/agentDetailReport-XUNWPSQW.mjs.map +1 -0
- package/dist/agentPerformanceReport-4WNLHIFT.mjs +597 -0
- package/dist/agentPerformanceReport-4WNLHIFT.mjs.map +1 -0
- package/dist/{callHistory-A5CBDPZR.mjs → callHistory-3CMW24B6.mjs} +27 -34
- package/dist/callHistory-3CMW24B6.mjs.map +1 -0
- package/dist/campaigns-FR7EIRXI.mjs +2664 -0
- package/dist/campaigns-FR7EIRXI.mjs.map +1 -0
- package/dist/cdrReport-6OBRKAYS.mjs +965 -0
- package/dist/cdrReport-6OBRKAYS.mjs.map +1 -0
- package/dist/chunk-AEDSLIHI.mjs +49 -0
- package/dist/chunk-AEDSLIHI.mjs.map +1 -0
- package/dist/chunk-FVNDPJUU.mjs +95 -0
- package/dist/chunk-FVNDPJUU.mjs.map +1 -0
- package/dist/chunk-I4CJTHZR.mjs +138 -0
- package/dist/chunk-I4CJTHZR.mjs.map +1 -0
- package/dist/chunk-RZZQ42MG.mjs +115 -0
- package/dist/chunk-RZZQ42MG.mjs.map +1 -0
- package/dist/chunk-U2DJ5WRK.mjs +1219 -0
- package/dist/chunk-U2DJ5WRK.mjs.map +1 -0
- package/dist/{chunk-FFYJ4LWU.mjs → chunk-YREOEULC.mjs} +127 -12
- package/dist/chunk-YREOEULC.mjs.map +1 -0
- package/dist/index.d.mts +630 -527
- package/dist/index.d.ts +631 -528
- package/dist/index.js +7409 -602
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +406 -512
- package/dist/index.mjs.map +1 -1
- package/dist/loginReport-MHNHB5F6.mjs +969 -0
- package/dist/loginReport-MHNHB5F6.mjs.map +1 -0
- package/package.json +16 -1
- package/dist/callHistory-A5CBDPZR.mjs.map +0 -1
- package/dist/chunk-FFYJ4LWU.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../call-control-sdk/lib/pages/agentDetailReport/index.tsx","../call-control-sdk/lib/pages/agentDetailReport/useAgentDetailReport.ts","../call-control-sdk/lib/pages/agentDetailReport/styles.ts"],"sourcesContent":["import React, { memo, useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport {\r\n\tAlert,\r\n\tBox,\r\n\tChip,\r\n\tCircularProgress,\r\n\tIconButton,\r\n\tTable,\r\n\tTableBody,\r\n\tTableCell,\r\n\tTableContainer,\r\n\tTableHead,\r\n\tTablePagination,\r\n\tTableRow,\r\n\tTooltip,\r\n\tTypography,\r\n} from \"@mui/material\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport PlayArrowIcon from \"@mui/icons-material/PlayArrow\";\r\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\r\nimport {\r\n\tBar,\r\n\tBarChart,\r\n\tCartesianGrid,\r\n\tCell,\r\n\tLabelList,\r\n\tLegend,\r\n\tPie,\r\n\tPieChart,\r\n\tResponsiveContainer,\r\n\tTooltip as RTooltip,\r\n\tXAxis,\r\n\tYAxis,\r\n} from \"recharts\";\r\nimport dayjs, { type Dayjs } from \"dayjs\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport { DatePicker } from \"@mui/x-date-pickers/DatePicker\";\r\n\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPageHeader } from \"../../components/SDKPageHeader\";\r\nimport { SDKButton } from \"../../components/SDKButton\";\r\nimport { sdkStateManager } from \"../../hooks/sdk-state\";\r\nimport {\r\n\tfetchRecordingBlob,\r\n\tuseAgentCdrRecords,\r\n\tuseAgentDetailReport,\r\n} from \"./useAgentDetailReport\";\r\nimport type { AgentDetailProfile, AgentDetailReportProps } from \"./types\";\r\nimport {\r\n\tC,\r\n\tcdrHeadSx,\r\n\tcdrRowSx,\r\n\tcdrTableSx,\r\n\tcontainerSx,\r\n\tcontentSx,\r\n\tdatePickerSx,\r\n\tfilterBarSx,\r\n\tkpiCardSx,\r\n\tkpiGridSx,\r\n\tkpiLabelSx,\r\n\tkpiValueSx,\r\n\tloadingOverlaySx,\r\n\tmonoSx,\r\n\tpaginationSx,\r\n\tQUEUE_COLORS,\r\n\tsectionCardSx,\r\n\tsectionHeaderSx,\r\n\tsectionTitleSx,\r\n\ttabBarSx,\r\n\ttabItemSx,\r\n} from \"./styles\";\r\n\r\n// ──── Sub-components ─────────────────────────────────────────────────────────\r\n\r\nfunction StatCard({ value, label, color }: { value: string | number; label: string; color: string }) {\r\n\treturn (\r\n\t\t<Box sx={kpiCardSx(color)}>\r\n\t\t\t<Typography sx={kpiLabelSx}>{label}</Typography>\r\n\t\t\t<Typography sx={kpiValueSx}>{value}</Typography>\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\nfunction StatusChip({ status }: { status: string }) {\r\n\tconst s = status?.toLowerCase();\r\n\tconst isAns = s === \"answered\";\r\n\tconst isAband = s === \"abandoned\";\r\n\treturn (\r\n\t\t<Chip\r\n\t\t\tlabel={status || \"—\"}\r\n\t\t\tsize=\"small\"\r\n\t\t\tsx={{\r\n\t\t\t\tfontSize: 11,\r\n\t\t\t\tfontWeight: 700,\r\n\t\t\t\theight: 22,\r\n\t\t\t\tbackground: isAns ? C.glt : isAband ? C.alt : C.rlt,\r\n\t\t\t\tcolor: isAns ? C.green : isAband ? C.amber : C.red,\r\n\t\t\t\tborder: `1px solid ${isAns ? \"rgba(10,154,98,.2)\" : isAband ? \"rgba(196,124,0,.2)\" : \"rgba(204,42,42,.2)\"\r\n\t\t\t\t\t}`,\r\n\t\t\t\tfontFamily: \"'JetBrains Mono', monospace\",\r\n\t\t\t}}\r\n\t\t/>\r\n\t);\r\n}\r\n\r\nfunction CallTypeChip({ type }: { type: string }) {\r\n\tconst isIn = type?.toLowerCase() === \"inbound\";\r\n\treturn (\r\n\t\t<Chip\r\n\t\t\tlabel={type || \"—\"}\r\n\t\t\tsize=\"small\"\r\n\t\t\tsx={{\r\n\t\t\t\tfontSize: 11,\r\n\t\t\t\tfontWeight: 700,\r\n\t\t\t\theight: 22,\r\n\t\t\t\tbackground: isIn ? C.glt : C.blt,\r\n\t\t\t\tcolor: isIn ? C.green : C.blue,\r\n\t\t\t\tborder: `1px solid ${isIn ? \"rgba(10,154,98,.2)\" : \"rgba(21,101,200,.2)\"}`,\r\n\t\t\t\tfontFamily: \"'JetBrains Mono', monospace\",\r\n\t\t\t}}\r\n\t\t/>\r\n\t);\r\n}\r\n\r\nfunction RecordingCell({ callUuid, recordingPath }: { callUuid: string; recordingPath: string | null }) {\r\n\tconst [audioUrl, setAudioUrl] = useState<string | null>(null);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(false);\r\n\r\n\tif (!recordingPath) {\r\n\t\treturn (\r\n\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\r\n\t\t\t\t<Tooltip title=\"No recording available\">\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\t<IconButton size=\"small\" disabled sx={{ p: 0.4 }}>\r\n\t\t\t\t\t\t\t<PlayArrowIcon sx={{ fontSize: 16 }} />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</Tooltip>\r\n\t\t\t\t<Tooltip title=\"No recording available\">\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\t<IconButton size=\"small\" disabled sx={{ p: 0.4 }}>\r\n\t\t\t\t\t\t\t<FileDownloadIcon sx={{ fontSize: 16 }} />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</Tooltip>\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n\r\n\tconst handlePlay = async () => {\r\n\t\tif (audioUrl) return;\r\n\t\ttry {\r\n\t\t\tsetLoading(true);\r\n\t\t\tsetError(false);\r\n\t\t\tconst blob = await fetchRecordingBlob(callUuid);\r\n\t\t\tsetAudioUrl(URL.createObjectURL(blob));\r\n\t\t} catch {\r\n\t\t\tsetError(true);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleDownload = async () => {\r\n\t\ttry {\r\n\t\t\tconst blob = audioUrl\r\n\t\t\t\t? await fetch(audioUrl).then((r) => r.blob())\r\n\t\t\t\t: await fetchRecordingBlob(callUuid);\r\n\t\t\tconst url = URL.createObjectURL(blob);\r\n\t\t\tconst a = document.createElement(\"a\");\r\n\t\t\ta.href = url;\r\n\t\t\ta.download = `recording_${callUuid}.wav`;\r\n\t\t\ta.click();\r\n\t\t\tURL.revokeObjectURL(url);\r\n\t\t} catch {\r\n\t\t\t/* ignore */\r\n\t\t}\r\n\t};\r\n\r\n\tif (audioUrl) {\r\n\t\treturn (\r\n\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n\t\t\t\t<audio\r\n\t\t\t\t\tcontrols\r\n\t\t\t\t\tautoPlay\r\n\t\t\t\t\tsrc={audioUrl}\r\n\t\t\t\t\tonEnded={() => {\r\n\t\t\t\t\t\tif (audioUrl.startsWith(\"blob:\")) URL.revokeObjectURL(audioUrl);\r\n\t\t\t\t\t\tsetAudioUrl(null);\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tstyle={{ width: 140, height: 30 }}\r\n\t\t\t\t/>\r\n\t\t\t\t<Tooltip title=\"Download\">\r\n\t\t\t\t\t<IconButton size=\"small\" onClick={handleDownload} sx={{ color: C.blue, p: 0.4 }}>\r\n\t\t\t\t\t\t<FileDownloadIcon sx={{ fontSize: 16 }} />\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</Tooltip>\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\r\n\t\t\t<Tooltip title={error ? \"Recording unavailable\" : \"Play\"}>\r\n\t\t\t\t<span>\r\n\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tonClick={handlePlay}\r\n\t\t\t\t\t\tdisabled={loading || error}\r\n\t\t\t\t\t\tsx={{ color: C.green, p: 0.4 }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{loading ? <CircularProgress size={14} /> : <PlayArrowIcon sx={{ fontSize: 16 }} />}\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</span>\r\n\t\t\t</Tooltip>\r\n\t\t\t<Tooltip title={error ? \"Recording unavailable\" : \"Download\"}>\r\n\t\t\t\t<span>\r\n\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tonClick={handleDownload}\r\n\t\t\t\t\t\tdisabled={loading || error}\r\n\t\t\t\t\t\tsx={{ color: C.blue, p: 0.4 }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<FileDownloadIcon sx={{ fontSize: 16 }} />\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</span>\r\n\t\t\t</Tooltip>\r\n\t\t\t{error && <Chip label=\"No File\" size=\"small\" sx={{ fontSize: \"0.6rem\", height: 18 }} />}\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\n// ──── Main content ───────────────────────────────────────────────────────────\r\n\r\nconst AgentDetailReportContent = memo(\r\n\t({ agentRow, onBack, from, initialStartDate, initialEndDate, initialQuickRange }: AgentDetailReportProps) => {\r\n\t\tconst isFromReportsList = from === \"REPORTS_LIST\";\r\n\t\tconst agentIdFromRow = isFromReportsList\r\n\t\t\t? agentRow?.agentId || \"\"\r\n\t\t\t: sdkStateManager.getState().agentId || agentRow?.agentId || \"\";\r\n\r\n\t\tconst [quickRange, setQuickRange] = useState<string>(initialQuickRange || \"today\");\r\n\t\tconst [startDate, setStartDate] = useState<Dayjs | null>(initialStartDate ?? dayjs());\r\n\t\tconst [endDate, setEndDate] = useState<Dayjs | null>(initialEndDate ?? dayjs());\r\n\r\n\t\tconst [activeTab, setActiveTab] = useState(0);\r\n\t\tconst [cdrPage, setCdrPage] = useState(0);\r\n\t\tconst [cdrPageSize, setCdrPageSize] = useState(10);\r\n\r\n\t\tconst { detail, detailLoading, detailError, setDetailError, fetchDetail } =\r\n\t\t\tuseAgentDetailReport();\r\n\t\tconst {\r\n\t\t\trecords: cdrRecords,\r\n\t\t\ttotal: cdrTotal,\r\n\t\t\tloading: cdrLoading,\r\n\t\t\terror: cdrError,\r\n\t\t\tsetError: setCdrError,\r\n\t\t\tfetchCdr,\r\n\t\t} = useAgentCdrRecords();\r\n\r\n\t\tconst profile: AgentDetailProfile | null = detail?.profile || null;\r\n\t\tconst agentName = profile?.fullName || agentRow?.fullName || \"Unknown Agent\";\r\n\t\tconst showInitialSpinner = !isFromReportsList && detailLoading && !profile && !agentRow?.fullName;\r\n\r\n\t\tconst fetchDetailFn = useCallback(\r\n\t\t\t(sd: Dayjs, ed: Dayjs) => {\r\n\t\t\t\tif (!agentIdFromRow) return;\r\n\t\t\t\tfetchDetail(agentIdFromRow, {\r\n\t\t\t\t\tstart_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\t\tend_date: ed.isSame(dayjs(), \"day\")\r\n\t\t\t\t\t\t? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\")\r\n\t\t\t\t\t\t: ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\t[agentIdFromRow, fetchDetail],\r\n\t\t);\r\n\r\n\t\tconst fetchCdrFn = useCallback(\r\n\t\t\t(sd: Dayjs, ed: Dayjs, page: number, pageSize: number) => {\r\n\t\t\t\tif (!agentIdFromRow) return;\r\n\t\t\t\tfetchCdr({\r\n\t\t\t\t\tstart_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\t\tend_date: ed.isSame(dayjs(), \"day\")\r\n\t\t\t\t\t\t? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\")\r\n\t\t\t\t\t\t: ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\t\tsearch: agentIdFromRow,\r\n\t\t\t\t\tpage: page + 1,\r\n\t\t\t\t\tpage_size: pageSize,\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\t[agentIdFromRow, fetchCdr],\r\n\t\t);\r\n\r\n\t\tconst handleSearch = (sd?: Dayjs | null, ed?: Dayjs | null) => {\r\n\t\t\tconst fromDate = sd ?? startDate;\r\n\t\t\tconst toDate = ed ?? endDate;\r\n\t\t\tif (!fromDate || !toDate) return;\r\n\t\t\tfetchDetailFn(fromDate, toDate);\r\n\t\t\tsetCdrPage(0);\r\n\t\t\tif (activeTab === 1) fetchCdrFn(fromDate, toDate, 0, cdrPageSize);\r\n\t\t};\r\n\r\n\t\tconst setQuick = (range: string) => {\r\n\t\t\tsetQuickRange(range);\r\n\t\t\tconst today = dayjs();\r\n\t\t\tlet sd: Dayjs = today;\r\n\t\t\tconst ed: Dayjs = today;\r\n\t\t\tif (range === \"week\") sd = today.startOf(\"week\");\r\n\t\t\telse if (range === \"month\") sd = today.startOf(\"month\");\r\n\t\t\tsetStartDate(sd);\r\n\t\t\tsetEndDate(ed);\r\n\t\t\thandleSearch(sd, ed);\r\n\t\t};\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (agentIdFromRow) fetchDetailFn(startDate ?? dayjs(), endDate ?? dayjs());\r\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t\t}, [agentIdFromRow]);\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (activeTab === 1 && startDate && endDate) {\r\n\t\t\t\tfetchCdrFn(startDate, endDate, cdrPage, cdrPageSize);\r\n\t\t\t}\r\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t\t}, [activeTab, cdrPage, cdrPageSize]);\r\n\r\n\t\t// ─── Derived chart data ───\r\n\t\tconst hourlyCallData = useMemo(() => {\r\n\t\t\treturn (detail?.hourlyCalls || []).map((h) => ({\r\n\t\t\t\thour: String(h.hourOfDay).padStart(2, \"0\"),\r\n\t\t\t\tanswered: h.answeredCalls,\r\n\t\t\t\tabandoned: h.missedCalls,\r\n\t\t\t}));\r\n\t\t}, [detail]);\r\n\r\n\t\tconst timeUtilData = useMemo(() => {\r\n\t\t\tconst tu = detail?.timeUtilisation;\r\n\t\t\tif (!tu) return [];\r\n\t\t\tconst total = tu.totalLoginSeconds || 1;\r\n\t\t\treturn [\r\n\t\t\t\t{ name: \"On Call / Handle\", value: tu.onCallSeconds, pct: (tu.onCallSeconds / total) * 100, formatted: tu.onCallFormatted, color: C.blue },\r\n\t\t\t\t{ name: \"Idle\", value: tu.idleSeconds, pct: (tu.idleSeconds / total) * 100, formatted: tu.idleFormatted, color: \"#e8a0a0\" },\r\n\t\t\t\t{ name: \"Break\", value: tu.breakSeconds, pct: (tu.breakSeconds / total) * 100, formatted: tu.breakFormatted, color: C.amber },\r\n\t\t\t];\r\n\t\t}, [detail]);\r\n\r\n\t\tconst talkDurationBuckets = useMemo(() => {\r\n\t\t\tconst items = [...(detail?.talkDistribution || [])].sort(\r\n\t\t\t\t(a, b) => a.bucketOrder - b.bucketOrder,\r\n\t\t\t);\r\n\t\t\tconst total = items.reduce((s, b) => s + (b.callCount || 0), 0);\r\n\t\t\treturn items.map((b) => ({\r\n\t\t\t\tbucket: b.bucketLabel,\r\n\t\t\t\tcount: b.callCount,\r\n\t\t\t\tminSeconds: b.minSeconds,\r\n\t\t\t\tmaxSeconds: b.maxSeconds,\r\n\t\t\t\tpct: total > 0 ? (b.callCount / total) * 100 : 0,\r\n\t\t\t}));\r\n\t\t}, [detail]);\r\n\r\n\t\tconst talkDurationTotal = useMemo(\r\n\t\t\t() => talkDurationBuckets.reduce((s, b) => s + (b.count || 0), 0),\r\n\t\t\t[talkDurationBuckets],\r\n\t\t);\r\n\r\n\t\tconst queuePieData = useMemo(() => {\r\n\t\t\treturn (detail?.callsByQueue || []).map((q, i) => ({\r\n\t\t\t\tname: q.queueName,\r\n\t\t\t\tvalue: q.callCount,\r\n\t\t\t\tpctOfTotal: q.pctOfTotal,\r\n\t\t\t\tcolor: QUEUE_COLORS[i % QUEUE_COLORS.length],\r\n\t\t\t}));\r\n\t\t}, [detail]);\r\n\r\n\t\tconst queueMetrics = useMemo(() => {\r\n\t\t\tconst items = detail?.queueMetrics || [];\r\n\t\t\tconst grandTotal = items.reduce((sum, q) => sum + q.totalCalls, 0);\r\n\t\t\treturn items.map((q, i) => ({\r\n\t\t\t\t...q,\r\n\t\t\t\tpctOfTotal: grandTotal > 0 ? (q.totalCalls / grandTotal) * 100 : 0,\r\n\t\t\t\tanswerRate: q.totalCalls > 0 ? (q.answeredCalls / q.totalCalls) * 100 : 0,\r\n\t\t\t\tcolor: QUEUE_COLORS[i % QUEUE_COLORS.length],\r\n\t\t\t}));\r\n\t\t}, [detail]);\r\n\r\n\t\tconst hourlyChartTitle = useMemo(() => {\r\n\t\t\tif (quickRange === \"today\") return \"Hourly Call Volume — Today\";\r\n\t\t\tif (quickRange === \"month\") return `Hourly Call Volume — ${dayjs().format(\"MMMM YYYY\")}`;\r\n\t\t\tif (quickRange === \"week\") return \"Hourly Call Volume — This Week\";\r\n\t\t\tif (startDate && endDate) {\r\n\t\t\t\tif (startDate.isSame(endDate, \"day\"))\r\n\t\t\t\t\treturn `Hourly Call Volume — ${startDate.format(\"DD MMM YYYY\")}`;\r\n\t\t\t\treturn `Hourly Call Volume — ${startDate.format(\"DD MMM YYYY\")} to ${endDate.format(\"DD MMM YYYY\")}`;\r\n\t\t\t}\r\n\t\t\treturn \"Hourly Call Volume\";\r\n\t\t}, [quickRange, startDate, endDate]);\r\n\r\n\t\tconst handleBack = useCallback(() => {\r\n\t\t\tif (onBack) onBack();\r\n\t\t}, [onBack]);\r\n\r\n\t\tif (!agentIdFromRow) {\r\n\t\t\treturn (\r\n\t\t\t\t<Box sx={{ p: 4, textAlign: \"center\" }}>\r\n\t\t\t\t\t<Typography sx={{ color: C.t3, mb: 2 }}>No agent selected.</Typography>\r\n\t\t\t\t\t<SDKButton onClick={handleBack}>Go Back</SDKButton>\r\n\t\t\t\t</Box>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (showInitialSpinner) {\r\n\t\t\treturn (\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", minHeight: 400 }}>\r\n\t\t\t\t\t<CircularProgress size={36} />\r\n\t\t\t\t</Box>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tconst tabs = [\"Overview\", \"Call History\", \"Break Details\"];\r\n\r\n\t\treturn (\r\n\t\t\t<LocalizationProvider dateAdapter={AdapterDayjs}>\r\n\t\t\t\t<Box sx={containerSx}>\r\n\t\t\t\t\t<SDKPageHeader title={agentName} showBack={isFromReportsList} onBack={handleBack} />\r\n\r\n\t\t\t\t\t<Box sx={filterBarSx}>\r\n\t\t\t\t\t\t<DatePicker\r\n\t\t\t\t\t\t\tvalue={startDate}\r\n\t\t\t\t\t\t\tonChange={(val) => {\r\n\t\t\t\t\t\t\t\tsetStartDate(val as Dayjs | null);\r\n\t\t\t\t\t\t\t\tsetQuickRange(\"custom\");\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tslotProps={{ textField: { size: \"small\", sx: datePickerSx } }}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<Typography sx={{ fontSize: 12, color: C.t3 }}>to</Typography>\r\n\t\t\t\t\t\t<DatePicker\r\n\t\t\t\t\t\t\tvalue={endDate}\r\n\t\t\t\t\t\t\tonChange={(val) => {\r\n\t\t\t\t\t\t\t\tsetEndDate(val as Dayjs | null);\r\n\t\t\t\t\t\t\t\tsetQuickRange(\"custom\");\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tslotProps={{ textField: { size: \"small\", sx: datePickerSx } }}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\t\tvariant={quickRange === \"today\" ? \"primary\" : \"outlined\"}\r\n\t\t\t\t\t\t\tonClick={() => setQuick(\"today\")}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tToday\r\n\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\t\tvariant={quickRange === \"week\" ? \"primary\" : \"outlined\"}\r\n\t\t\t\t\t\t\tonClick={() => setQuick(\"week\")}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tThis Week\r\n\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\t\tvariant={quickRange === \"month\" ? \"primary\" : \"outlined\"}\r\n\t\t\t\t\t\t\tonClick={() => setQuick(\"month\")}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tThis Month\r\n\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box sx={contentSx}>\r\n\t\t\t\t\t\t{detailLoading && (\r\n\t\t\t\t\t\t\t<Box sx={loadingOverlaySx}>\r\n\t\t\t\t\t\t\t\t<CircularProgress />\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{detailError && (\r\n\t\t\t\t\t\t\t<Alert severity=\"error\" sx={{ mb: 2 }} onClose={() => setDetailError(\"\")}>\r\n\t\t\t\t\t\t\t\t{detailError}\r\n\t\t\t\t\t\t\t</Alert>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{/* KPI cards */}\r\n\t\t\t\t\t\t<Box sx={kpiGridSx}>\r\n\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t{ v: profile?.totalCalls ?? 0, l: \"Total Calls\", c: C.navy },\r\n\t\t\t\t\t\t\t\t{ v: profile?.answeredCalls ?? 0, l: \"Answered\", c: C.green },\r\n\t\t\t\t\t\t\t\t{ v: profile?.missedCalls ?? 0, l: \"Missed\", c: C.red },\r\n\t\t\t\t\t\t\t\t{ v: profile?.avgAhtFormatted || \"00:00:00\", l: \"Avg AHT\", c: C.purple },\r\n\t\t\t\t\t\t\t\t{ v: `${(profile?.answerRate ?? 0).toFixed(1)}%`, l: \"Answer Rate\", c: C.green },\r\n\t\t\t\t\t\t\t\t{ v: profile?.loginDurationFormatted || \"00:00:00\", l: \"Login Duration\", c: C.blue },\r\n\t\t\t\t\t\t\t\t{ v: profile?.productionFormatted || \"00:00:00\", l: \"Production\", c: C.blue },\r\n\t\t\t\t\t\t\t\t{ v: profile?.handleTimeFormatted || \"00:00:00\", l: \"Handle Time\", c: C.purple },\r\n\t\t\t\t\t\t\t\t{ v: profile?.breakTimeFormatted || \"00:00:00\", l: \"Break Time\", c: C.amber },\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tv: `${(profile?.adherencePct ?? 0).toFixed(1)}%`,\r\n\t\t\t\t\t\t\t\t\tl: `Adherence${profile?.adherenceGrade ? ` (${profile.adherenceGrade})` : \"\"}`,\r\n\t\t\t\t\t\t\t\t\tc: C.teal,\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t].map((kpi, i) => (\r\n\t\t\t\t\t\t\t\t<StatCard key={i} value={kpi.v} label={kpi.l} color={kpi.c} />\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{/* Tabs */}\r\n\t\t\t\t\t\t<Box sx={tabBarSx}>\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 0.5, flexWrap: \"wrap\" }}>\r\n\t\t\t\t\t\t\t\t{tabs.map((tab, idx) => (\r\n\t\t\t\t\t\t\t\t\t<Box key={tab} onClick={() => setActiveTab(idx)} sx={tabItemSx(activeTab === idx)}>\r\n\t\t\t\t\t\t\t\t\t\t{tab}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t<SDKButton size=\"small\" startIcon={<SearchIcon />} onClick={() => handleSearch()}>\r\n\t\t\t\t\t\t\t\tSearch\r\n\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{/* ─── Overview ─── */}\r\n\t\t\t\t\t\t{activeTab === 0 && (\r\n\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" },\r\n\t\t\t\t\t\t\t\t\t\tgap: 2,\r\n\t\t\t\t\t\t\t\t\t\tmb: 2,\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Box sx={sectionCardSx}>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={sectionHeaderSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={sectionTitleSx}>{hourlyChartTitle}</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={agentName}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 11,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: C.blt,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.blue,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder: `1px solid rgba(21,101,200,.2)`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ p: 2, height: 260 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<ResponsiveContainer width=\"100%\" height=\"100%\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<BarChart data={hourlyCallData} barGap={1}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<CartesianGrid strokeDasharray=\"3 3\" stroke={C.b1} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<XAxis dataKey=\"hour\" tick={{ fontSize: 11, fill: C.t3 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<YAxis tick={{ fontSize: 11, fill: C.t3 }} allowDecimals={false} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<RTooltip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabelFormatter={(label) => `${String(label).padStart(2, \"0\")}:00`}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Legend wrapperStyle={{ fontSize: 11 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Bar dataKey=\"answered\" name=\"Answered\" fill={C.blue} radius={[3, 3, 0, 0]} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Bar dataKey=\"abandoned\" name=\"Abandoned\" fill={C.red} radius={[3, 3, 0, 0]} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t</BarChart>\r\n\t\t\t\t\t\t\t\t\t\t\t</ResponsiveContainer>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t\t<Box sx={sectionCardSx}>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ ...sectionHeaderSx, justifyContent: \"flex-start\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={sectionTitleSx}>Time Utilisation Breakdown</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ p: 2, height: 260 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{timeUtilData.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<ResponsiveContainer width=\"100%\" height=\"100%\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<PieChart>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Pie\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata={timeUtilData}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcx=\"50%\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcy=\"50%\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinnerRadius={60}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\touterRadius={95}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdataKey=\"value\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnameKey=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tminAngle={8}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{timeUtilData.map((entry, idx) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Cell key={idx} fill={entry.color} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Pie>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<RTooltip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tformatter={(_val, name, entry) => [\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t`${(entry as any).payload.formatted} (${(entry as any).payload.pct.toFixed(1)}%)`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Legend wrapperStyle={{ fontSize: 12 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</PieChart>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</ResponsiveContainer>\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.t3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 13,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo data\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t<Box sx={{ ...sectionCardSx, mb: 2 }}>\r\n\t\t\t\t\t\t\t\t\t<Box sx={sectionHeaderSx}>\r\n\t\t\t\t\t\t\t\t\t\t<Typography sx={sectionTitleSx}>Talk Duration Distribution</Typography>\r\n\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\tlabel={`${talkDurationTotal} call${talkDurationTotal === 1 ? \"\" : \"s\"}`}\r\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 11,\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackground: C.glt,\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.green,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborder: `1px solid rgba(10,154,98,.2)`,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ p: 2, height: 260 }}>\r\n\t\t\t\t\t\t\t\t\t\t{talkDurationBuckets.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<ResponsiveContainer width=\"100%\" height=\"100%\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<BarChart\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata={talkDurationBuckets}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin={{ top: 16, right: 16, left: 0, bottom: 20 }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<CartesianGrid strokeDasharray=\"3 3\" stroke={C.b1} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<XAxis dataKey=\"bucket\" tick={{ fontSize: 11, fill: C.t3 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<YAxis tick={{ fontSize: 11, fill: C.t3 }} allowDecimals={false} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<RTooltip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Bar dataKey=\"count\" name=\"Calls\" fill={C.teal} radius={[4, 4, 0, 0]}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<LabelList\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdataKey=\"count\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tposition=\"top\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ fontSize: 11, fontWeight: 700, fill: C.t1 }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Bar>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</BarChart>\r\n\t\t\t\t\t\t\t\t\t\t\t</ResponsiveContainer>\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.t3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 13,\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo data\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" },\r\n\t\t\t\t\t\t\t\t\t\tgap: 2,\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Box sx={sectionCardSx}>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ ...sectionHeaderSx, justifyContent: \"flex-start\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={sectionTitleSx}>Calls by Queue</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ p: 2, height: 260 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{queuePieData.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<ResponsiveContainer width=\"100%\" height=\"100%\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<PieChart>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Pie data={queuePieData} cx=\"50%\" cy=\"50%\" outerRadius={90} dataKey=\"value\" nameKey=\"name\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{queuePieData.map((entry, idx) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Cell key={idx} fill={entry.color} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Pie>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<RTooltip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Legend wrapperStyle={{ fontSize: 12 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</PieChart>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</ResponsiveContainer>\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.t3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 13,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo queue data\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t\t<Box sx={sectionCardSx}>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ ...sectionHeaderSx, justifyContent: \"flex-start\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={sectionTitleSx}>Queue Performance Metrics</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ p: 2 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{queueMetrics.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\tqueueMetrics.map((q) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Box key={q.queueName} sx={{ mb: 2, \"&:last-child\": { mb: 0 } }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmb: 0.3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: 10,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 10,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"50%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: q.color,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 13, fontWeight: 700, color: C.t1 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{q.queueName}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ ...monoSx, fontSize: 13, fontWeight: 800, color: q.color }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{q.totalCalls} calls\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcomponent=\"span\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ ...monoSx, color: C.t3, ml: 0.5 }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t({q.answeredCalls} ans / {q.missedCalls} miss)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 6,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: C.s3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmb: 0.3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: `${q.pctOfTotal ?? 0}%`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: q.color,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolumnGap: 1.5,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trowGap: 0.2,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{(q.pctOfTotal ?? 0).toFixed(0)}% of total\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tAns: {(q.answerRate ?? 0).toFixed(0)}%\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tTalk: <span style={{ ...monoSx, color: C.t2 }}>{q.avgTalkFormatted}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tHold: <span style={{ ...monoSx, color: C.t2 }}>{q.avgHoldFormatted}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWrap: <span style={{ ...monoSx, color: C.t2 }}>{q.avgWrapupFormatted}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tAHT: <span style={{ ...monoSx, color: C.t2 }}>{q.avgAhtFormatted}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ textAlign: \"center\", py: 4, color: C.t3, fontSize: 13 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo queue data\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{/* ─── Call History ─── */}\r\n\t\t\t\t\t\t{activeTab === 1 && (\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tborderRadius: \"8px\",\r\n\t\t\t\t\t\t\t\t\tborder: \"1px solid #e0e7ef\",\r\n\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\t\tbackground: \"transparent\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Box sx={sectionHeaderSx}>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t\t\t\t<Typography sx={sectionTitleSx}>Call History</Typography>\r\n\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\tlabel={`${cdrTotal} records`}\r\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 11,\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackground: C.s2,\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.t3,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborder: `1px solid ${C.b2}`,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t{cdrError && (\r\n\t\t\t\t\t\t\t\t\t<Alert severity=\"error\" sx={{ mx: 2, mt: 1 }} onClose={() => setCdrError(\"\")}>\r\n\t\t\t\t\t\t\t\t\t\t{cdrError}\r\n\t\t\t\t\t\t\t\t\t</Alert>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t<TableContainer sx={{ position: \"relative\" }}>\r\n\t\t\t\t\t\t\t\t\t{cdrLoading && (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tright: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tbottom: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackground: \"rgba(255,255,255,0.7)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size={28} />\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t<Table size=\"small\" sx={cdrTableSx}>\r\n\t\t\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Phone Number\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Call Start\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Call Type\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Status\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Queue\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Extension\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Talk Duration\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Hold Duration\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Ringing Duration\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Wrapup Duration\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Disposition\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Transferred\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Recording\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t].map((label) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell key={label} sx={cdrHeadSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{label}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t\t\t{cdrRecords.map((row, idx) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableRow key={row.callUuid || idx} hover sx={cdrRowSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ fontWeight: 600, color: C.navy }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.phoneNumber || \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ color: \"#4a5568\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.callStartTime\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? dayjs(row.callStartTime).format(\"DD MMM YYYY hh:mm A\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CallTypeChip type={row.callType || \"\"} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<StatusChip status={row.callStatus || \"\"} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.queueName ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={row.queueName}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#f0ebfa\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.purple,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 500,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.67rem\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 22,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ color: \"#4a5568\" }}>{row.extension || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ fontWeight: 600, color: C.blue, fontVariantNumeric: \"tabular-nums\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.talkDurationFmt || \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ fontWeight: 500, color: C.amber, fontVariantNumeric: \"tabular-nums\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.holdDurationFmt || \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ fontWeight: 500, fontVariantNumeric: \"tabular-nums\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.ringingDurationFmt || \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ fontWeight: 500, color: C.purple, fontVariantNumeric: \"tabular-nums\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.wrapupDurationFmt || \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ color: \"#4a5568\" }}>{row.disposition || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.wasTransferred ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel=\"Yes\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#e6f7ef\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.green,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 600,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.65rem\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 20,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel=\"No\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"transparent\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#6b7b8d\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 600,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.65rem\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 20,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.callUuid ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<RecordingCell\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcallUuid={row.callUuid}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trecordingPath={row.recordingPath ?? null}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t\t{!cdrLoading && cdrRecords.length === 0 && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolSpan={13}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ textAlign: \"center\", py: 4, color: C.t3, fontSize: 13 }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tNo call records found\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t\t\t\t</TableContainer>\r\n\t\t\t\t\t\t\t\t<TablePagination\r\n\t\t\t\t\t\t\t\t\tcomponent=\"div\"\r\n\t\t\t\t\t\t\t\t\tcount={cdrTotal}\r\n\t\t\t\t\t\t\t\t\tpage={cdrPage}\r\n\t\t\t\t\t\t\t\t\tonPageChange={(_, p) => setCdrPage(p)}\r\n\t\t\t\t\t\t\t\t\trowsPerPage={cdrPageSize}\r\n\t\t\t\t\t\t\t\t\tonRowsPerPageChange={(e) => {\r\n\t\t\t\t\t\t\t\t\t\tsetCdrPageSize(parseInt(e.target.value, 10));\r\n\t\t\t\t\t\t\t\t\t\tsetCdrPage(0);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\trowsPerPageOptions={[5, 10, 20, 25, 50]}\r\n\t\t\t\t\t\t\t\t\tsx={paginationSx}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{/* ─── Break Details ─── */}\r\n\t\t\t\t\t\t{activeTab === 2 && (\r\n\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns: {\r\n\t\t\t\t\t\t\t\t\t\t\txs: \"1fr 1fr\",\r\n\t\t\t\t\t\t\t\t\t\t\tmd: \"repeat(3, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\t\tlg: \"repeat(4, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tgap: { xs: 1.5, lg: 2 },\r\n\t\t\t\t\t\t\t\t\t\tmb: 2,\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<StatCard\r\n\t\t\t\t\t\t\t\t\t\tvalue={profile?.breakTimeFormatted || \"00:00:00\"}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Total Break Time\"\r\n\t\t\t\t\t\t\t\t\t\tcolor={C.amber}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t<StatCard value={profile?.breaksTaken ?? 0} label=\"Breaks Taken\" color={C.purple} />\r\n\t\t\t\t\t\t\t\t\t<StatCard\r\n\t\t\t\t\t\t\t\t\t\tvalue={profile?.productionFormatted || \"00:00:00\"}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Production Time\"\r\n\t\t\t\t\t\t\t\t\t\tcolor={C.green}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t<StatCard\r\n\t\t\t\t\t\t\t\t\t\tvalue={profile?.loginDurationFormatted || \"00:00:00\"}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Login Duration\"\r\n\t\t\t\t\t\t\t\t\t\tcolor={C.teal}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.72rem\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\tcolor: \"#888\",\r\n\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"uppercase\",\r\n\t\t\t\t\t\t\t\t\t\t\tletterSpacing: 0.8,\r\n\t\t\t\t\t\t\t\t\t\t\tmb: 1,\r\n\t\t\t\t\t\t\t\t\t\t\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\tAttendance Summary\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\t\tgridTemplateColumns: { xs: \"1fr 1fr\", md: \"repeat(4, 1fr)\" },\r\n\t\t\t\t\t\t\t\t\t\t\tgap: 1.5,\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: \"First Login\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: profile?.firstLoginTime\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? dayjs(profile.firstLoginTime).format(\"YYYY-MM-DD HH:mm:ss\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"—\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.blue,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: \"Adherence Score\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: `${profile?.adherencePct ?? 0}%`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.green,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: \"Adherence Grade\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: profile?.adherenceGrade || \"—\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.purple,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: \"Answer Rate\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: `${(profile?.answerRate ?? 0).toFixed(1)}%`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.teal,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t].map((item) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<StatCard\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={item.label}\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={item.value}\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={item.label}\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor={item.color}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Box>\r\n\t\t\t</LocalizationProvider>\r\n\t\t);\r\n\t},\r\n);\r\n\r\nconst AgentDetailReport: React.FC<AgentDetailReportProps> = (props) => (\r\n\t<SDKProvider>\r\n\t\t<AgentDetailReportContent {...props} />\r\n\t</SDKProvider>\r\n);\r\n\r\nexport default AgentDetailReport;\r\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.page_size) qs.append(\"page_size\", String(params.page_size));\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","import type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\nexport const C = {\r\n\tnavy: \"#0d2a56\",\r\n\tblue: \"#1565c8\",\r\n\tgreen: \"#0a9a62\",\r\n\tamber: \"#c47c00\",\r\n\tred: \"#cc2a2a\",\r\n\tpurple: \"#6b3fbf\",\r\n\tteal: \"#0b7a8f\",\r\n\tbg: \"#fff\",\r\n\tsurface: \"#fff\",\r\n\ts2: \"#f7f9fc\",\r\n\ts3: \"#eef2f7\",\r\n\tb1: \"rgba(20,50,100,.07)\",\r\n\tb2: \"rgba(20,50,100,.13)\",\r\n\tt1: \"#0d1e35\",\r\n\tt2: \"#364f6e\",\r\n\tt3: \"#7a93b5\",\r\n\tt4: \"#bccad9\",\r\n\tblt: \"#e8f0fc\",\r\n\tglt: \"#e4f6ef\",\r\n\talt: \"#fdf3e0\",\r\n\trlt: \"#fde8e8\",\r\n\tplt: \"#f0eafa\",\r\n\ttlt: \"#e3f4f7\",\r\n};\r\n\r\nexport const QUEUE_COLORS = [C.blue, C.green, C.purple, C.amber, C.teal, C.red, C.navy];\r\n\r\nexport const monoSx = { fontFamily: \"'JetBrains Mono', monospace\", fontSize: 11, fontWeight: 600 };\r\n\r\nexport const containerSx: SxProps<Theme> = {\r\n\tbackground: C.bg,\r\n\tminHeight: \"100vh\",\r\n};\r\n\r\nexport const filterBarSx: SxProps<Theme> = {\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tgap: 1,\r\n\tflexWrap: \"wrap\",\r\n\tpb: 1.5,\r\n\tpx: 2,\r\n};\r\n\r\nexport const datePickerSx: SxProps<Theme> = {\r\n\twidth: 150,\r\n\t\"& .MuiOutlinedInput-root\": {\r\n\t\tborderRadius: \"7px\",\r\n\t\tfontSize: 12,\r\n\t\theight: 30,\r\n\t},\r\n\t\"& .MuiInputBase-input\": { py: \"4px\", fontSize: 12 },\r\n};\r\n\r\nexport const contentSx: SxProps<Theme> = {\r\n\tpy: 2,\r\n\tpx: 2,\r\n\tposition: \"relative\",\r\n};\r\n\r\nexport const loadingOverlaySx: SxProps<Theme> = {\r\n\tposition: \"absolute\",\r\n\ttop: 0,\r\n\tleft: 0,\r\n\tright: 0,\r\n\tbottom: 0,\r\n\tbackground: \"rgba(240,244,248,0.7)\",\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tjustifyContent: \"center\",\r\n\tzIndex: 10,\r\n};\r\n\r\nexport const kpiGridSx: SxProps<Theme> = {\r\n\tdisplay: \"grid\",\r\n\tgridTemplateColumns: { xs: \"1fr 1fr\", sm: \"repeat(3, 1fr)\", md: \"repeat(5, 1fr)\" },\r\n\tgap: 1.5,\r\n\tmb: 2,\r\n};\r\n\r\nexport const kpiCardSx = (color: string): SxProps<Theme> => ({\r\n\tpx: 1.5,\r\n\tpy: 1.2,\r\n\tborderRadius: \"10px\",\r\n\tbackgroundColor: \"#fafafa\",\r\n\tborder: \"1px solid #e0e0e0\",\r\n\tborderLeftWidth: \"3px\",\r\n\tborderLeftStyle: \"solid\",\r\n\tborderLeftColor: color,\r\n});\r\n\r\nexport const kpiLabelSx: SxProps<Theme> = {\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontSize: \"0.72rem\",\r\n\tfontWeight: 600,\r\n\tcolor: \"#888\",\r\n\tmb: 0.3,\r\n};\r\n\r\nexport const kpiValueSx: SxProps<Theme> = {\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontSize: \"0.95rem\",\r\n\tfontWeight: 700,\r\n\tcolor: \"#1a1a1a\",\r\n};\r\n\r\nexport const tabBarSx: SxProps<Theme> = {\r\n\tdisplay: \"flex\",\r\n\talignItems: { xs: \"flex-start\", sm: \"center\" },\r\n\tjustifyContent: \"space-between\",\r\n\tflexDirection: { xs: \"column\", sm: \"row\" },\r\n\tgap: 1,\r\n\tborderBottom: `2px solid ${C.b1}`,\r\n\tmb: 2,\r\n};\r\n\r\nexport const tabItemSx = (active: boolean): SxProps<Theme> => ({\r\n\tpx: 2,\r\n\tpy: 1,\r\n\tfontSize: 13,\r\n\tfontWeight: 600,\r\n\tcursor: \"pointer\",\r\n\tcolor: active ? C.blue : C.t3,\r\n\tborderBottom: `2px solid ${active ? C.blue : \"transparent\"}`,\r\n\tmb: \"-2px\",\r\n\ttransition: \"all .15s\",\r\n\t\"&:hover\": { color: C.t1 },\r\n});\r\n\r\nexport const sectionCardSx: SxProps<Theme> = {\r\n\tborder: `1px solid ${C.b1}`,\r\n\tborderRadius: \"10px\",\r\n\toverflow: \"hidden\",\r\n\tbackground: \"transparent\",\r\n};\r\n\r\nexport const sectionHeaderSx: SxProps<Theme> = {\r\n\tpx: 2,\r\n\tpy: 1.2,\r\n\tbackground: C.s2,\r\n\tborderBottom: `1px solid ${C.b1}`,\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tjustifyContent: \"space-between\",\r\n};\r\n\r\nexport const sectionTitleSx: SxProps<Theme> = {\r\n\tfontSize: 12,\r\n\tfontWeight: 700,\r\n\tletterSpacing: 0.8,\r\n\ttextTransform: \"uppercase\",\r\n\tcolor: C.t2,\r\n};\r\n\r\nexport const cdrHeadSx: SxProps<Theme> = {\r\n\tbgcolor: \"#f1f1f1\",\r\n\tcolor: \"#333\",\r\n\tfontWeight: 600,\r\n\twhiteSpace: \"nowrap\",\r\n\tfontSize: \"14px\",\r\n\tpy: 0.7,\r\n\tpx: 1,\r\n};\r\n\r\nexport const cdrTableSx: SxProps<Theme> = {\r\n\tminWidth: 1400,\r\n\t\"& .MuiTableCell-root\": {\r\n\t\tfontSize: \"0.75rem\",\r\n\t\tborderBottom: \"1px solid #eef1f6\",\r\n\t\tpy: 0.6,\r\n\t\tpx: 1,\r\n\t},\r\n};\r\n\r\nexport const cdrRowSx: SxProps<Theme> = {\r\n\tbackgroundColor: \"#fff\",\r\n\t\"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n};\r\n\r\nexport const paginationSx: SxProps<Theme> = {\r\n\tborderTop: \"1px solid #eef1f6\",\r\n\t\"& .MuiTablePagination-displayedRows\": { fontSize: \"0.73rem\" },\r\n\t\"& .MuiTablePagination-selectLabel\": { fontSize: \"0.73rem\" },\r\n};\r\n"],"mappings":"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","names":["useCallback","useState","useState","useCallback","_a","_b","_c"]}
|
|
@@ -23,7 +23,12 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
23
23
|
var SDK_WILDCARD = "*";
|
|
24
24
|
var SDK_MENU_CODES = {
|
|
25
25
|
WILDCARD: SDK_WILDCARD,
|
|
26
|
-
CALL_HISTORY: "call_history"
|
|
26
|
+
CALL_HISTORY: "call_history",
|
|
27
|
+
CAMPAIGNS: "dialer_auto",
|
|
28
|
+
LOGIN_REPORT: "login_report",
|
|
29
|
+
CDR_REPORT: "cdr_report",
|
|
30
|
+
AGENT_PERFORMANCE_REPORT: "agent_performance",
|
|
31
|
+
AGENT_DETAIL_REPORT: "agent_detail"
|
|
27
32
|
};
|
|
28
33
|
var SDK_PERMISSIONS = {
|
|
29
34
|
WILDCARD: SDK_WILDCARD,
|
|
@@ -37,7 +42,22 @@ var SDK_PERMISSIONS = {
|
|
|
37
42
|
CONFERENCE: "call_conference",
|
|
38
43
|
TRANSFER_BLIND: "call_transfer_blind",
|
|
39
44
|
TRANSFER_ATTENDED: "call_transfer_attended",
|
|
40
|
-
TRANSFER_WARM: "call_transfer_warm"
|
|
45
|
+
TRANSFER_WARM: "call_transfer_warm",
|
|
46
|
+
// Campaigns
|
|
47
|
+
CAMPAIGNS_CREATE: "campaigns:create",
|
|
48
|
+
CAMPAIGNS_READ: "campaigns:read",
|
|
49
|
+
CAMPAIGNS_UPDATE: "campaigns:update",
|
|
50
|
+
CAMPAIGNS_DELETE: "campaigns:delete",
|
|
51
|
+
CAMPAIGNS_MANAGE: "campaigns:manage",
|
|
52
|
+
CAMPAIGNS_CONTROL: "campaigns:control",
|
|
53
|
+
// Reports — Agent Login
|
|
54
|
+
REPORTS_AGENT_LOGIN_READ: "reports:agent_login:read",
|
|
55
|
+
REPORTS_AGENT_LOGIN_EXPORT: "reports:agent_login:export",
|
|
56
|
+
REPORTS_AGENT_LOGIN_MANAGE: "reports:agent_login:manage",
|
|
57
|
+
// CDR Report
|
|
58
|
+
REPORTS_CDR_READ: "reports:cdr:read",
|
|
59
|
+
REPORTS_CDR_EXPORT: "reports:cdr:export",
|
|
60
|
+
REPORTS_CDR_MANAGE: "reports:cdr:manage"
|
|
41
61
|
};
|
|
42
62
|
|
|
43
63
|
// call-control-sdk/lib/hooks/sdk-state.ts
|
|
@@ -68,6 +88,7 @@ var SDKStateManager = class {
|
|
|
68
88
|
isInitialized: false,
|
|
69
89
|
sdkConfig: {
|
|
70
90
|
disableEndCallButton: false,
|
|
91
|
+
disableEndConference: false,
|
|
71
92
|
disabledDialButton: false,
|
|
72
93
|
disabledMoreOptionsButton: false,
|
|
73
94
|
enableSmsServices: false,
|
|
@@ -81,6 +102,7 @@ var SDKStateManager = class {
|
|
|
81
102
|
disableConferenceButton: false,
|
|
82
103
|
disableHoldButton: false,
|
|
83
104
|
disableMuteButton: false,
|
|
105
|
+
disableAlternateDialing: true,
|
|
84
106
|
disabled: {},
|
|
85
107
|
enabled: {},
|
|
86
108
|
outlined: {}
|
|
@@ -169,11 +191,13 @@ var SDKStateManager = class {
|
|
|
169
191
|
isPermissionsLoaded: false,
|
|
170
192
|
userPermissions: null,
|
|
171
193
|
menuEntitlements: null,
|
|
172
|
-
consultInfo: null
|
|
194
|
+
consultInfo: null,
|
|
195
|
+
rootCallUuid: null,
|
|
196
|
+
backendCallControls: null
|
|
173
197
|
};
|
|
174
198
|
}
|
|
175
199
|
loadFromStorage() {
|
|
176
|
-
var _a2, _b;
|
|
200
|
+
var _a2, _b, _c;
|
|
177
201
|
try {
|
|
178
202
|
const stored = getSession(this.STORAGE_KEY);
|
|
179
203
|
if (stored) {
|
|
@@ -187,6 +211,7 @@ var SDKStateManager = class {
|
|
|
187
211
|
isInitialized: parsedState.isInitialized || false,
|
|
188
212
|
sdkConfig: parsedState.sdkConfig || {
|
|
189
213
|
disableEndCallButton: false,
|
|
214
|
+
disableEndConference: false,
|
|
190
215
|
disabledMoreOptionsButton: false,
|
|
191
216
|
enableSmsServices: false,
|
|
192
217
|
enableQueueName: false,
|
|
@@ -200,6 +225,7 @@ var SDKStateManager = class {
|
|
|
200
225
|
disableConferenceButton: false,
|
|
201
226
|
disableHoldButton: false,
|
|
202
227
|
disableMuteButton: false,
|
|
228
|
+
disableAlternateDialing: true,
|
|
203
229
|
disabled: {},
|
|
204
230
|
enabled: {},
|
|
205
231
|
outlined: {}
|
|
@@ -236,7 +262,8 @@ var SDKStateManager = class {
|
|
|
236
262
|
sdk: parsedState.sdk || null,
|
|
237
263
|
isPermissionsLoaded: parsedState.isPermissionsLoaded || false,
|
|
238
264
|
userPermissions: parsedState.userPermissions || null,
|
|
239
|
-
menuEntitlements: parsedState.menuEntitlements || null
|
|
265
|
+
menuEntitlements: parsedState.menuEntitlements || null,
|
|
266
|
+
rootCallUuid: (_c = parsedState.rootCallUuid) != null ? _c : null
|
|
240
267
|
});
|
|
241
268
|
}
|
|
242
269
|
} catch (error) {
|
|
@@ -263,7 +290,8 @@ var SDKStateManager = class {
|
|
|
263
290
|
sdk: this.state.sdk,
|
|
264
291
|
isPermissionsLoaded: this.state.isPermissionsLoaded,
|
|
265
292
|
userPermissions: this.state.userPermissions,
|
|
266
|
-
menuEntitlements: this.state.menuEntitlements
|
|
293
|
+
menuEntitlements: this.state.menuEntitlements,
|
|
294
|
+
rootCallUuid: this.state.rootCallUuid
|
|
267
295
|
};
|
|
268
296
|
setSession(this.STORAGE_KEY, persistentState);
|
|
269
297
|
} catch (error) {
|
|
@@ -283,7 +311,7 @@ var SDKStateManager = class {
|
|
|
283
311
|
this.apiKey = apiKey.trim();
|
|
284
312
|
this.tenantId = tenantId.trim();
|
|
285
313
|
}
|
|
286
|
-
initialize(apiKey, tenantId, agentId, urlConfig, initResult, sdkConfig) {
|
|
314
|
+
initialize(apiKey, tenantId, agentId, urlConfig, initResult, sdkConfig, rawBackendCallControls) {
|
|
287
315
|
var _a2;
|
|
288
316
|
this.validateCredentials(apiKey, tenantId);
|
|
289
317
|
if (!agentId || typeof agentId !== "string" || agentId.trim().length === 0) {
|
|
@@ -293,8 +321,10 @@ var SDKStateManager = class {
|
|
|
293
321
|
this.state.openConferenceDialog = false;
|
|
294
322
|
this.state.openCallTransferDialog = false;
|
|
295
323
|
this.state.authorization = initResult;
|
|
324
|
+
this.state.backendCallControls = rawBackendCallControls != null ? rawBackendCallControls : null;
|
|
296
325
|
this.state.sdkConfig = __spreadValues(__spreadValues({
|
|
297
326
|
disableEndCallButton: false,
|
|
327
|
+
disableEndConference: false,
|
|
298
328
|
disabledDialButton: false,
|
|
299
329
|
disabledMoreOptionsButton: false,
|
|
300
330
|
enableQueueName: false,
|
|
@@ -307,6 +337,7 @@ var SDKStateManager = class {
|
|
|
307
337
|
disableConferenceButton: false,
|
|
308
338
|
disableHoldButton: false,
|
|
309
339
|
disableMuteButton: false,
|
|
340
|
+
disableAlternateDialing: true,
|
|
310
341
|
disabled: {},
|
|
311
342
|
enabled: {},
|
|
312
343
|
outlined: {}
|
|
@@ -398,6 +429,11 @@ var SDKStateManager = class {
|
|
|
398
429
|
this.state.consultInfo = info;
|
|
399
430
|
this.notifyListeners();
|
|
400
431
|
}
|
|
432
|
+
setRootCallUuid(uuid) {
|
|
433
|
+
this.state.rootCallUuid = uuid;
|
|
434
|
+
this.saveToStorage();
|
|
435
|
+
this.notifyListeners();
|
|
436
|
+
}
|
|
401
437
|
setAgentStatus(status) {
|
|
402
438
|
this.state.agentStatus = status;
|
|
403
439
|
this.saveToStorage();
|
|
@@ -528,11 +564,22 @@ var SDKStateManager = class {
|
|
|
528
564
|
* Set user information (entitlements) from login response
|
|
529
565
|
*/
|
|
530
566
|
setSDKPermissions(userInfo) {
|
|
531
|
-
var _a2
|
|
567
|
+
var _a2;
|
|
532
568
|
if (!userInfo) return;
|
|
533
569
|
const sdk = (_a2 = userInfo.entitlements) == null ? void 0 : _a2.sdk;
|
|
534
570
|
const sdkPermissions = Array.isArray(userInfo.permissions) ? userInfo.permissions : null;
|
|
535
|
-
const sdkMenus =
|
|
571
|
+
const sdkMenus = [
|
|
572
|
+
{
|
|
573
|
+
"code": SDK_MENU_CODES.WILDCARD,
|
|
574
|
+
"name": "Role Management",
|
|
575
|
+
"enabled": true
|
|
576
|
+
}
|
|
577
|
+
// {
|
|
578
|
+
// "code": SDK_MENU_CODES.CALL_HISTORY,
|
|
579
|
+
// "name": "Role Management",
|
|
580
|
+
// "enabled": true
|
|
581
|
+
// }
|
|
582
|
+
];
|
|
536
583
|
this.state.sdk = sdk;
|
|
537
584
|
this.state.userPermissions = sdkPermissions;
|
|
538
585
|
this.state.menuEntitlements = sdkMenus;
|
|
@@ -584,6 +631,7 @@ var SDKStateManager = class {
|
|
|
584
631
|
* Get SDK controls configuration derived exclusively from structured entitlements.
|
|
585
632
|
*/
|
|
586
633
|
getControlsConfig() {
|
|
634
|
+
var _a2;
|
|
587
635
|
const { sdk, isPermissionsLoaded } = this.state;
|
|
588
636
|
if (!isPermissionsLoaded || !sdk) {
|
|
589
637
|
return {
|
|
@@ -608,9 +656,10 @@ var SDKStateManager = class {
|
|
|
608
656
|
SDK_PERMISSIONS.CALL_INBOUND
|
|
609
657
|
);
|
|
610
658
|
const isAnyCallAllowed = isDialAllowed || isInboundAllowed;
|
|
659
|
+
const backendDisabledEndCall = !!((_a2 = this.state.backendCallControls) == null ? void 0 : _a2.disableEndCallButton);
|
|
611
660
|
const isHoldAllowed = isAnyCallAllowed;
|
|
612
661
|
const isMuteAllowed = isAnyCallAllowed;
|
|
613
|
-
const isEndCallAllowed = isAnyCallAllowed;
|
|
662
|
+
const isEndCallAllowed = isAnyCallAllowed && !backendDisabledEndCall;
|
|
614
663
|
const isConferenceAllowed = this.isBitEnabled("call_conference", "");
|
|
615
664
|
const isTransferEnabled = this.isBitEnabled("call_transfer", "");
|
|
616
665
|
const isBlindAllowed = this.isBitEnabled(
|
|
@@ -823,7 +872,73 @@ var END_POINT = {
|
|
|
823
872
|
get MISSED_CALLS() {
|
|
824
873
|
return `${getBaseURL()}${VERSION.v1}/supervisor/missed-calls`;
|
|
825
874
|
},
|
|
826
|
-
RECORDING_BY_CALL: (call_uuid) => `${getBaseURL()}${VERSION.v1}/recordings/call/${call_uuid}
|
|
875
|
+
RECORDING_BY_CALL: (call_uuid) => `${getBaseURL()}${VERSION.v1}/recordings/call/${call_uuid}`,
|
|
876
|
+
// Campaigns
|
|
877
|
+
get CAMPAIGNS_GET_ALL() {
|
|
878
|
+
return `${getBaseURL()}${VERSION.v1}/dialer/campaigns`;
|
|
879
|
+
},
|
|
880
|
+
get CAMPAIGNS_CREATE() {
|
|
881
|
+
return `${getBaseURL()}${VERSION.v1}/dialer/campaigns`;
|
|
882
|
+
},
|
|
883
|
+
CAMPAIGNS_GET_BY_ID: (id) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}`,
|
|
884
|
+
CAMPAIGNS_UPDATE: (id) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}`,
|
|
885
|
+
CAMPAIGNS_ACTIVATE: (id) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}/activate`,
|
|
886
|
+
CAMPAIGNS_PAUSE: (id) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}/pause`,
|
|
887
|
+
CAMPAIGNS_ARCHIVE: (id) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}/archive`,
|
|
888
|
+
CAMPAIGNS_LEADS: (campaignId) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads`,
|
|
889
|
+
CAMPAIGNS_DELETE_LEAD: (campaignId, leadId) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/${leadId}`,
|
|
890
|
+
CAMPAIGNS_DIAL_PREVIEW: (campaignId, leadId) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/${leadId}/dial-preview`,
|
|
891
|
+
CAMPAIGNS_LEADS_UPLOAD_EXCEL: (campaignId) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/upload/excel`,
|
|
892
|
+
CAMPAIGNS_LEADS_TEMPLATE_EXCEL: (campaignId) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/template/excel`,
|
|
893
|
+
CAMPAIGNS_LEADS_EXPORT_EXCEL: (campaignId) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/export/excel`,
|
|
894
|
+
// Login Report
|
|
895
|
+
get LOGIN_REPORT() {
|
|
896
|
+
return `${getBaseURL()}${VERSION.v1}/reports/login-report`;
|
|
897
|
+
},
|
|
898
|
+
get LOGIN_REPORT_AGENTS() {
|
|
899
|
+
return `${getBaseURL()}${VERSION.v1}/reports/login-report/agents`;
|
|
900
|
+
},
|
|
901
|
+
LOGIN_REPORT_AGENT_SESSIONS: (agentId) => `${getBaseURL()}${VERSION.v1}/reports/login-report/agents/${agentId}/sessions`,
|
|
902
|
+
LOGIN_REPORT_AGENT_SESSIONS_EXPORT_EXCEL: (agentId) => `${getBaseURL()}${VERSION.v1}/reports/login-report/agents/${agentId}/sessions/export/excel`,
|
|
903
|
+
get LOGIN_REPORT_EXPORT_EXCEL() {
|
|
904
|
+
return `${getBaseURL()}${VERSION.v1}/reports/login-report/export/excel`;
|
|
905
|
+
},
|
|
906
|
+
// CDR Report
|
|
907
|
+
get CDR_REPORT() {
|
|
908
|
+
return `${getBaseURL()}${VERSION.v1}/reports/cdr-report`;
|
|
909
|
+
},
|
|
910
|
+
get CDR_REPORT_RECORDS() {
|
|
911
|
+
return `${getBaseURL()}${VERSION.v1}/reports/cdr-report/records`;
|
|
912
|
+
},
|
|
913
|
+
get CDR_REPORT_EXPORT_EXCEL() {
|
|
914
|
+
return `${getBaseURL()}${VERSION.v1}/reports/cdr-report/export/excel`;
|
|
915
|
+
},
|
|
916
|
+
// CDR Report filter sources (match what main app's CdrReport calls)
|
|
917
|
+
get USERS_LIST() {
|
|
918
|
+
return `${getBaseURL()}${VERSION.v1}/users/`;
|
|
919
|
+
},
|
|
920
|
+
get MASTER_QUEUES() {
|
|
921
|
+
return `${getBaseURL()}${VERSION.v1}/master/queue`;
|
|
922
|
+
},
|
|
923
|
+
// Reports
|
|
924
|
+
get AGENT_PERFORMANCE_REPORT() {
|
|
925
|
+
return `${getBaseURL()}${VERSION.v1}/reports/agent-performance-report`;
|
|
926
|
+
},
|
|
927
|
+
get AGENT_PERFORMANCE_REPORT_AGENTS() {
|
|
928
|
+
return `${getBaseURL()}${VERSION.v1}/reports/agent-performance-report/agents`;
|
|
929
|
+
},
|
|
930
|
+
get AGENT_PERFORMANCE_REPORT_EXPORT_EXCEL() {
|
|
931
|
+
return `${getBaseURL()}${VERSION.v1}/reports/agent-performance-report/export/excel`;
|
|
932
|
+
},
|
|
933
|
+
AGENT_DETAIL_REPORT: (agentId) => `${getBaseURL()}${VERSION.v1}/reports/agent-detail-report/${agentId}`,
|
|
934
|
+
// get CDR_REPORT() { return `${getBaseURL()}${VERSION.v1}/reports/cdr-report`; },
|
|
935
|
+
// Queues (used by Campaigns → Queue Linking)
|
|
936
|
+
get QUEUES_GET_ALL() {
|
|
937
|
+
return `${getBaseURL()}${VERSION.v1}/master/queue`;
|
|
938
|
+
},
|
|
939
|
+
get QUEUES_CREATE() {
|
|
940
|
+
return `${getBaseURL()}${VERSION.v1}/master/queue`;
|
|
941
|
+
}
|
|
827
942
|
};
|
|
828
943
|
|
|
829
944
|
// call-control-sdk/lib/services/axios.ts
|
|
@@ -916,4 +1031,4 @@ export {
|
|
|
916
1031
|
useToast,
|
|
917
1032
|
SDKProvider
|
|
918
1033
|
};
|
|
919
|
-
//# sourceMappingURL=chunk-
|
|
1034
|
+
//# sourceMappingURL=chunk-YREOEULC.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../call-control-sdk/lib/permissions/sdk-constants.ts","../call-control-sdk/lib/hooks/sdk-state.ts","../call-control-sdk/lib/utils/storage.ts","../call-control-sdk/lib/services/toastMessage.tsx","../call-control-sdk/lib/components/SDKProvider.tsx","../call-control-sdk/lib/services/endPoint.ts","../call-control-sdk/lib/services/axios.ts"],"sourcesContent":["/**\r\n * SDK Permission Constants\r\n *\r\n * Defines permission codes for call control features.\r\n * These codes match the 'items' in the backend entitlements response.\r\n */\r\n\r\nexport const SDK_WILDCARD = \"*\" as const;\r\n\r\n/** Menu entitlement codes from userInfo.entitlements.menus */\r\nexport const SDK_MENU_CODES = {\r\n WILDCARD: SDK_WILDCARD,\r\n CALL_HISTORY: \"call_history\",\r\n CAMPAIGNS: \"dialer_auto\",\r\n LOGIN_REPORT: \"login_report\",\r\n CDR_REPORT: \"cdr_report\",\r\n AGENT_PERFORMANCE_REPORT: \"agent_performance\",\r\n AGENT_DETAIL_REPORT: \"agent_detail\",\r\n} as const;\r\n\r\nexport const SDK_PERMISSIONS = {\r\n WILDCARD: SDK_WILDCARD,\r\n // main object key constants\r\n\r\n CALLS: \"calls\",\r\n CALL_TRANSFER: \"call_transfer\",\r\n CALL_CONFERENCE: \"call_conference\",\r\n\r\n // in each object has items list of objects\r\n\r\n CALL_INBOUND: \"call_inbound\",\r\n CALL_OUTBOUND: \"call_outbound\",\r\n\r\n CONFERENCE: \"call_conference\",\r\n\r\n TRANSFER_BLIND: \"call_transfer_blind\",\r\n TRANSFER_ATTENDED: \"call_transfer_attended\",\r\n TRANSFER_WARM: \"call_transfer_warm\",\r\n\r\n // Campaigns\r\n CAMPAIGNS_CREATE: \"campaigns:create\",\r\n CAMPAIGNS_READ: \"campaigns:read\",\r\n CAMPAIGNS_UPDATE: \"campaigns:update\",\r\n CAMPAIGNS_DELETE: \"campaigns:delete\",\r\n CAMPAIGNS_MANAGE: \"campaigns:manage\",\r\n CAMPAIGNS_CONTROL: \"campaigns:control\",\r\n\r\n // Reports — Agent Login\r\n REPORTS_AGENT_LOGIN_READ: \"reports:agent_login:read\",\r\n REPORTS_AGENT_LOGIN_EXPORT: \"reports:agent_login:export\",\r\n REPORTS_AGENT_LOGIN_MANAGE: \"reports:agent_login:manage\",\r\n\r\n // CDR Report\r\n REPORTS_CDR_READ: \"reports:cdr:read\",\r\n REPORTS_CDR_EXPORT: \"reports:cdr:export\",\r\n REPORTS_CDR_MANAGE: \"reports:cdr:manage\",\r\n} as const;\r\n","import { getSession, removeSession, setSession } from \"@react-solutions/vault\";\r\nimport type {\r\n SDKState,\r\n CallData,\r\n ConferenceLineTypes,\r\n SDKConfig,\r\n InitSDKRes,\r\n URLConfig,\r\n ConsultInfo,\r\n} from \"../../types\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\nimport {\r\n SDK_PERMISSIONS,\r\n type SDKEntitlements,\r\n type ControlsFromPermissions,\r\n SDK_MENU_CODES,\r\n} from \"../permissions\";\r\n\r\nclass SDKStateManager {\r\n private state: SDKState;\r\n private listeners: Array<() => void> = [];\r\n private readonly STORAGE_KEY = STORAGE_KEY;\r\n\r\n private apiKey: string | undefined;\r\n private tenantId: string | undefined;\r\n\r\n constructor() {\r\n this.state = this.getInitialState();\r\n this.loadFromStorage();\r\n }\r\n\r\n private getInitialState(): SDKState {\r\n return {\r\n authorization: undefined,\r\n process: null,\r\n agentId: \"\",\r\n openConferenceDialog: false,\r\n openCallTransferDialog: false,\r\n isInitialized: false,\r\n sdkConfig: {\r\n disableEndCallButton: false,\r\n disableEndConference: false,\r\n disabledDialButton: false,\r\n disabledMoreOptionsButton: false,\r\n enableSmsServices: false,\r\n enableQueueName: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disableAlternateDialing: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n },\r\n urlConfig: {\r\n baseURL: \"\",\r\n iframeURL: \"\",\r\n iframeAPIURL: \"\",\r\n webSocketURL: \"\",\r\n coreBaseURL: \"\",\r\n id: \"\",\r\n password: \"\",\r\n },\r\n callStartTime: null,\r\n controlPanelPosition: { x: 10, y: 10 },\r\n iframePosition: {\r\n x: window.screen?.availWidth - 460,\r\n y: window.screen?.height - 580,\r\n },\r\n callData: {\r\n agent_id: -1,\r\n queue_name: \"\",\r\n hold: 0,\r\n mute: 0,\r\n status: \"\",\r\n type: \"\",\r\n event_time: \"\",\r\n phone_number: \"\",\r\n },\r\n conferenceLine: [\r\n {\r\n line: 1,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 2,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 3,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 4,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 5,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n ],\r\n hold: 0,\r\n mute: 0,\r\n agentStatus: \"\",\r\n sdk: null,\r\n isPermissionsLoaded: false,\r\n userPermissions: null,\r\n menuEntitlements: null,\r\n consultInfo: null,\r\n rootCallUuid: null,\r\n backendCallControls: null,\r\n };\r\n }\r\n\r\n private loadFromStorage(): void {\r\n try {\r\n const stored = <SDKState>getSession(this.STORAGE_KEY);\r\n if (stored) {\r\n const parsedState = stored;\r\n this.state = {\r\n ...this.state,\r\n agentId: parsedState.agentId || \"\",\r\n authorization: parsedState.authorization || undefined,\r\n process: parsedState.process || null,\r\n openConferenceDialog: parsedState?.openConferenceDialog || false,\r\n openCallTransferDialog: parsedState?.openCallTransferDialog || false,\r\n isInitialized: parsedState.isInitialized || false,\r\n sdkConfig: parsedState.sdkConfig || {\r\n disableEndCallButton: false,\r\n disableEndConference: false,\r\n disabledMoreOptionsButton: false,\r\n enableSmsServices: false,\r\n enableQueueName: false,\r\n disabledDialButton: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disableAlternateDialing: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n },\r\n urlConfig: parsedState.urlConfig || {\r\n id: \"\",\r\n baseURL: \"\",\r\n iframeURL: \"\",\r\n iframeAPIURL: \"\",\r\n webSocketURL: \"\",\r\n coreBaseURL: \"\",\r\n password: \"\",\r\n },\r\n callStartTime: parsedState.callStartTime || null,\r\n controlPanelPosition: parsedState.controlPanelPosition || {\r\n x: 10,\r\n y: 10,\r\n },\r\n iframePosition: parsedState.iframePosition || {\r\n x: window.screen?.availWidth - 460,\r\n y: window.screen?.height - 580,\r\n },\r\n callData: parsedState.callData || {\r\n mobileNumber: \"\",\r\n callReferenceId: \"\",\r\n agent_id: \"\",\r\n status: \"\",\r\n type: \"\",\r\n event_time: \"\",\r\n phone_number: \"\",\r\n },\r\n conferenceLine:\r\n parsedState.conferenceLine &&\r\n Array.isArray(parsedState.conferenceLine) &&\r\n parsedState.conferenceLine.length > 0\r\n ? parsedState.conferenceLine\r\n : this.state.conferenceLine,\r\n agentStatus: parsedState.agentStatus,\r\n sdk: parsedState.sdk || null,\r\n isPermissionsLoaded: parsedState.isPermissionsLoaded || false,\r\n userPermissions: parsedState.userPermissions || null,\r\n menuEntitlements: parsedState.menuEntitlements || null,\r\n rootCallUuid: parsedState.rootCallUuid ?? null,\r\n };\r\n }\r\n } catch (error) {\r\n console.warn(\"Failed to load SDK state:\", error);\r\n }\r\n }\r\n\r\n private saveToStorage(): void {\r\n try {\r\n const persistentState = {\r\n agentId: this.state.agentId,\r\n authorization: this.state.authorization,\r\n process: this.state.process,\r\n isInitialized: this.state.isInitialized,\r\n openConferenceDialog: this.state.openConferenceDialog,\r\n openCallTransferDialog: this.state.openCallTransferDialog,\r\n sdkConfig: this.state.sdkConfig,\r\n urlConfig: this.state.urlConfig,\r\n callStartTime: this.state.callStartTime,\r\n controlPanelPosition: this.state.controlPanelPosition,\r\n iframePosition: this.state.iframePosition,\r\n callData: this.state.callData,\r\n conferenceLine: this.state.conferenceLine,\r\n agentStatus: this.state.agentStatus,\r\n sdk: this.state.sdk,\r\n isPermissionsLoaded: this.state.isPermissionsLoaded,\r\n userPermissions: this.state.userPermissions,\r\n menuEntitlements: this.state.menuEntitlements,\r\n rootCallUuid: this.state.rootCallUuid,\r\n };\r\n setSession(this.STORAGE_KEY, persistentState);\r\n } catch (error) {\r\n console.warn(\"Failed to save SDK state:\", error);\r\n }\r\n }\r\n\r\n private notifyListeners(): void {\r\n this.listeners.forEach((listener) => listener());\r\n }\r\n\r\n private validateCredentials(apiKey: string, tenantId: string): void {\r\n if (!apiKey || typeof apiKey !== \"string\" || apiKey.trim().length === 0) {\r\n throw new Error(\"API key not available\");\r\n }\r\n if (\r\n !tenantId ||\r\n typeof tenantId !== \"string\" ||\r\n tenantId.trim().length === 0\r\n ) {\r\n throw new Error(\"Tenant ID not available\");\r\n }\r\n this.apiKey = apiKey.trim();\r\n this.tenantId = tenantId.trim();\r\n }\r\n\r\n public initialize(\r\n apiKey: string,\r\n tenantId: string,\r\n agentId: string,\r\n urlConfig?: URLConfig,\r\n initResult?: InitSDKRes,\r\n sdkConfig?: SDKConfig,\r\n rawBackendCallControls?: SDKConfig,\r\n ): void {\r\n this.validateCredentials(apiKey, tenantId);\r\n if (\r\n !agentId ||\r\n typeof agentId !== \"string\" ||\r\n agentId.trim().length === 0\r\n ) {\r\n throw new Error(\"Agent ID not available\");\r\n } else {\r\n this.state.agentId = agentId;\r\n this.state.openConferenceDialog = false;\r\n this.state.openCallTransferDialog = false;\r\n this.state.authorization = initResult;\r\n this.state.backendCallControls = rawBackendCallControls ?? null;\r\n this.state.sdkConfig = {\r\n disableEndCallButton: false,\r\n disableEndConference: false,\r\n disabledDialButton: false,\r\n disabledMoreOptionsButton: false,\r\n enableQueueName: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disableAlternateDialing: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n ...sdkConfig,\r\n ...initResult?.callControls,\r\n };\r\n this.state.urlConfig = {\r\n baseURL: urlConfig?.baseURL || \"\",\r\n iframeURL: urlConfig?.iframeURL || \"\",\r\n iframeAPIURL: urlConfig?.iframeAPIURL || \"\",\r\n webSocketURL: urlConfig?.webSocketURL || \"\",\r\n coreBaseURL: urlConfig?.coreBaseURL || \"\",\r\n id: initResult?.userInfo?.id ? String(initResult.userInfo.id) : \"\",\r\n password: urlConfig?.password || \"\",\r\n };\r\n this.state.isInitialized = true;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n }\r\n\r\n public getState(): SDKState {\r\n return { ...this.state };\r\n }\r\n\r\n public getCredentials(): {\r\n apiKey: string | undefined;\r\n tenantId: string | undefined;\r\n } {\r\n return { apiKey: this.apiKey, tenantId: this.tenantId };\r\n }\r\n public getSdkAuthToken(): string | undefined {\r\n return this.state.authorization?.accessToken;\r\n }\r\n\r\n public subscribe(listener: () => void): () => void {\r\n this.listeners.push(listener);\r\n return () => {\r\n const index = this.listeners.indexOf(listener);\r\n if (index > -1) {\r\n this.listeners.splice(index, 1);\r\n }\r\n };\r\n }\r\n\r\n // public setHolding(isHolding: boolean): void {\r\n // \tthis.state.isHolding = isHolding;\r\n // \tthis.saveToStorage();\r\n // \tthis.notifyListeners();\r\n // }\r\n\r\n // public setMuted(isMuted: boolean): void {\r\n // \tthis.state.isMuted = isMuted;\r\n // \tthis.saveToStorage();\r\n // \tthis.notifyListeners();\r\n // }\r\n\r\n public setProcess(process: {\r\n process_id: number;\r\n process_name: string;\r\n }): void {\r\n this.state.process = process;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setControlPanelPosition(position: { x: number; y: number }): void {\r\n this.state.controlPanelPosition = position;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setIframePosition(position: { x: number; y: number }): void {\r\n this.state.iframePosition = position;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public startCall(): void {\r\n this.state.callStartTime = Date.now();\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public endCall(): void {\r\n this.state.callStartTime = null;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setInitCheck(): void {\r\n this.state.isInitialized = false;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setOpenConferenceDialog(open: boolean): void {\r\n this.state.openConferenceDialog = open;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setOpenCallTransferDialog(open: boolean): void {\r\n this.state.openCallTransferDialog = open;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setConsultInfo(info: ConsultInfo | null): void {\r\n this.state.consultInfo = info;\r\n this.notifyListeners();\r\n }\r\n\r\n public setRootCallUuid(uuid: string | null): void {\r\n this.state.rootCallUuid = uuid;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setAgentStatus(status: string): void {\r\n this.state.agentStatus = status;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public updateCallData(data: Partial<CallData>): void {\r\n this.state.callData = { ...this.state.callData, ...data };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public updateConferenceData(data: ConferenceLineTypes[]): void {\r\n this.state.conferenceLine = [...data];\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setConferenceLine(line: ConferenceLineTypes): void {\r\n if (\r\n !this.state.conferenceLine ||\r\n !Array.isArray(this.state.conferenceLine)\r\n ) {\r\n this.state.conferenceLine = this.getInitialState().conferenceLine;\r\n }\r\n\r\n const conferenceLineData = this.state.conferenceLine?.map(\r\n (each: ConferenceLineTypes) => {\r\n if (each.line === line.line) {\r\n return line;\r\n }\r\n return each;\r\n },\r\n );\r\n this.state.conferenceLine = conferenceLineData;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public resetConferenceLines(): void {\r\n this.state.conferenceLine = [\r\n {\r\n line: 1,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 2,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 3,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 4,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 5,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n ];\r\n\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public clearStorageAndReset(): void {\r\n try {\r\n removeSession(this.STORAGE_KEY);\r\n this.state = this.getInitialState();\r\n this.notifyListeners();\r\n } catch (error) {\r\n console.warn(\"Failed to clear:\", error);\r\n }\r\n }\r\n\r\n public getConferenceLines(): ConferenceLineTypes[] {\r\n return this.state.conferenceLine || [];\r\n }\r\n\r\n /**\r\n * Update SDK config with permission-based controls.\r\n * Merges the provided controls with existing config.\r\n */\r\n public updateSDKConfigFromPermissions(\r\n permissionControls: Partial<SDKConfig>,\r\n ): void {\r\n this.state.sdkConfig = {\r\n ...this.state.sdkConfig,\r\n ...permissionControls,\r\n };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n /**\r\n * Revert call consult controls back to the base permission-derived values.\r\n * Called when a CALL_STATE event arrives without call_consult_controls.\r\n */\r\n public resetConsultControls(): void {\r\n const base = this.getControlsConfig();\r\n this.state.sdkConfig = {\r\n ...this.state.sdkConfig,\r\n disableEndCallButton: base.disableEndCallButton,\r\n disableCallTransferButton: base.disableCallTransferButton,\r\n disableConferenceButton: base.disableConferenceButton,\r\n disableHoldButton: base.disableHoldButton,\r\n disableMuteButton: base.disableMuteButton,\r\n };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n // ============ Entitlement Logic (Ported from SDKPermissionManager) ============\r\n\r\n /**\r\n * Set user information (entitlements) from login response\r\n */\r\n public setSDKPermissions(userInfo: any): void {\r\n if (!userInfo) return;\r\n\r\n // In a real scenario, this would come from userInfo.entitlements?.sdk\r\n // For now, we use the structured format expected by the SDK\r\n\r\n const sdk: SDKEntitlements = userInfo.entitlements?.sdk;\r\n const sdkPermissions = Array.isArray(userInfo.permissions) ? userInfo.permissions : null;\r\n // const sdkMenus = Array.isArray(userInfo.entitlements?.menus)\r\n // ? userInfo.entitlements.menus\r\n // : null;\r\n\r\n const sdkMenus:any[] = [\r\n {\r\n \"code\": SDK_MENU_CODES.WILDCARD,\r\n \"name\": \"Role Management\",\r\n \"enabled\": true\r\n },\r\n // {\r\n // \"code\": SDK_MENU_CODES.CALL_HISTORY,\r\n // \"name\": \"Role Management\",\r\n // \"enabled\": true\r\n // }\r\n ]\r\n\r\n // const sdkPermissions: any = [\r\n // \"campaigns:create\"\r\n // ]\r\n\r\n // const sdk: SDKEntitlements = {\r\n // calls: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.CALL_OUTBOUND,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.CALL_INBOUND,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // call_transfer: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_BLIND,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_ATTENDED,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_WARM,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // call_conference: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.CONFERENCE,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // };\r\n\r\n this.state.sdk = sdk;\r\n this.state.userPermissions = sdkPermissions\r\n this.state.menuEntitlements = sdkMenus\r\n this.state.isPermissionsLoaded = true;\r\n\r\n // Automatically update SDK config based on these new entitlements\r\n const permissionControls = this.getControlsConfig();\r\n this.updateSDKConfigFromPermissions(permissionControls);\r\n\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n /**\r\n * Check if a bit is enabled in entitlements\r\n */\r\n public isBitEnabled(\r\n category: keyof SDKEntitlements,\r\n bitCode: string,\r\n ): boolean {\r\n const sdk = this.state.sdk;\r\n if (!sdk) return false;\r\n\r\n const categoryEntitlement = sdk[category];\r\n if (!categoryEntitlement) return false;\r\n if (!categoryEntitlement.enabled) return false;\r\n\r\n if (!bitCode) return true; // Just checking category enabledness\r\n\r\n const bit = categoryEntitlement.items?.find(\r\n (item: any) => item.code === bitCode,\r\n );\r\n return bit ? bit.enabled : false;\r\n }\r\n\r\n /** Check if the user has a specific flat permission (e.g. \"calls:inbound\") */\r\n public hasPermission(permission: string): boolean {\r\n const perms = this.state.userPermissions;\r\n if (!perms) return false;\r\n return perms.includes(\"*\") || perms.includes(permission);\r\n }\r\n\r\n /** Check if any of the provided permissions is granted */\r\n public hasAnyPermission(permissions: string[]): boolean {\r\n return permissions.some((p) => this.hasPermission(p));\r\n }\r\n\r\n /** Check if all of the provided permissions are granted */\r\n public hasAllPermissions(permissions: string[]): boolean {\r\n return permissions.every((p) => this.hasPermission(p));\r\n }\r\n\r\n /** Check if a menu entitlement is enabled (e.g. \"campaign\"). Supports \"*\" wildcard. */\r\n public hasMenuFeature(code: string): boolean {\r\n const menus = this.state.menuEntitlements;\r\n if (!menus) return false;\r\n if (menus.some((m) => m.code === \"*\" && m.enabled)) return true;\r\n const entry = menus.find((m) => m.code === code);\r\n return entry ? entry.enabled : false;\r\n }\r\n\r\n /**\r\n * Get SDK controls configuration derived exclusively from structured entitlements.\r\n */\r\n public getControlsConfig(): ControlsFromPermissions {\r\n const { sdk, isPermissionsLoaded } = this.state;\r\n\r\n // If entitlements not loaded yet or missing, disable everything (Fail Closed)\r\n if (!isPermissionsLoaded || !sdk) {\r\n return {\r\n disabledDialButton: true,\r\n disableEndCallButton: true,\r\n disableCallTransferButton: true,\r\n disableBlindTransfer: true,\r\n disableAttendedTransfer: true,\r\n disableWarmTransfer: true,\r\n disableConferenceButton: true,\r\n disableHoldButton: true,\r\n disableMuteButton: true,\r\n disabledMoreOptionsButton: true,\r\n };\r\n }\r\n\r\n // --- Dial/Inbound Checks ---\r\n const isDialAllowed = this.isBitEnabled(\r\n \"calls\",\r\n SDK_PERMISSIONS.CALL_OUTBOUND,\r\n );\r\n const isInboundAllowed = this.isBitEnabled(\r\n \"calls\",\r\n SDK_PERMISSIONS.CALL_INBOUND,\r\n );\r\n const isAnyCallAllowed = isDialAllowed || isInboundAllowed;\r\n // AND with backend callControls: if backend disabled it, permissions alone can't re-enable it\r\n const backendDisabledEndCall = !!this.state.backendCallControls?.disableEndCallButton;\r\n\r\n // --- Call Controls ---\r\n const isHoldAllowed = isAnyCallAllowed;\r\n const isMuteAllowed = isAnyCallAllowed;\r\n const isEndCallAllowed = isAnyCallAllowed && !backendDisabledEndCall;\r\n const isConferenceAllowed = this.isBitEnabled(\"call_conference\", \"\");\r\n const isTransferEnabled = this.isBitEnabled(\"call_transfer\", \"\");\r\n\r\n // --- Transfer Controls ---\r\n const isBlindAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_BLIND,\r\n );\r\n const isAttendedAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_ATTENDED,\r\n );\r\n const isWarmAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_WARM,\r\n );\r\n\r\n return {\r\n disabledDialButton: !isDialAllowed,\r\n disableEndCallButton: !isEndCallAllowed,\r\n disableCallTransferButton: !isTransferEnabled,\r\n disableBlindTransfer: !isBlindAllowed,\r\n disableAttendedTransfer: !isAttendedAllowed,\r\n disableWarmTransfer: !isWarmAllowed,\r\n disableConferenceButton: !isConferenceAllowed,\r\n disableHoldButton: !isHoldAllowed,\r\n disableMuteButton: !isMuteAllowed,\r\n disabledMoreOptionsButton: false,\r\n };\r\n }\r\n}\r\n\r\nexport const sdkStateManager = new SDKStateManager();\r\n\r\nexport type { SDKStateManager };\r\n","export const STORAGE_KEY = \"call-control-sdk-state\";\r\n","import { createContext, useContext, useState, ReactNode } from \"react\";\r\nimport { Snackbar, Alert, AlertColor } from \"@mui/material\";\r\n\r\ntype ToastContextType = {\r\n\tshowToast: (message: string, severity?: AlertColor) => void;\r\n};\r\n\r\nconst ToastContext = createContext<ToastContextType | undefined>(undefined);\r\n\r\nconst noopToast: ToastContextType = {\r\n\tshowToast: (message, severity) => {\r\n\t\tconsole.warn(`[Toast outside provider] ${severity ?? \"info\"}: ${message}`);\r\n\t},\r\n};\r\n\r\nexport const useToast = () => {\r\n\tconst ctx = useContext(ToastContext);\r\n\treturn ctx ?? noopToast;\r\n};\r\n\r\nexport const ToastProvider = ({ children }: { children: ReactNode }) => {\r\n\tconst [open, setOpen] = useState(false);\r\n\tconst [message, setMessage] = useState(\"\");\r\n\tconst [severity, setSeverity] = useState<AlertColor>(\"info\");\r\n\r\n\tconst showToast = (msg: string, sev: AlertColor = \"info\") => {\r\n\t\tsetMessage(msg);\r\n\t\tsetSeverity(sev);\r\n\t\tsetOpen(true);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<ToastContext.Provider value={{ showToast }}>\r\n\t\t\t{children}\r\n\t\t\t<Snackbar\r\n\t\t\t\topen={open}\r\n\t\t\t\tcolor={severity}\r\n\t\t\t\tautoHideDuration={3000}\r\n\t\t\t\tonClose={() => setOpen(false)}\r\n\t\t\t\tanchorOrigin={{ vertical: \"top\", horizontal: \"right\" }}\r\n\t\t\t>\r\n\t\t\t\t<Alert\r\n\t\t\t\t\tvariant=\"filled\"\r\n\t\t\t\t\tseverity={severity}\r\n\t\t\t\t\tonClose={() => setOpen(false)}\r\n\t\t\t\t\tsx={{ width: \"100%\" }}\r\n\t\t\t\t>\r\n\t\t\t\t\t{message}\r\n\t\t\t\t</Alert>\r\n\t\t\t</Snackbar>\r\n\t\t</ToastContext.Provider>\r\n\t);\r\n};\r\n","import { memo } from \"react\";\r\nimport { ToastProvider } from \"../services/toastMessage\";\r\nimport React from \"react\";\r\nimport { SDKProviderProps } from \"../../types\";\r\n\r\nexport const SDKProvider = memo<SDKProviderProps>(({ children }) => {\r\n\treturn <ToastProvider>{children}</ToastProvider>;\r\n});\r\n\r\nSDKProvider.displayName = \"SDKProvider\";\r\n","import { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\n\r\n// export const IP = \"192.168.100.254\";\r\n\r\n// export const IFRAME_IP = \"10.10.95.25\"\r\n// export const IFRAME_URL = `https://${IFRAME_IP}:8089`;\r\n// export const IFRAME_API_URL = `https://${IFRAME_IP}:8000`;\r\n\r\n\r\n// export const BASE_URL = `http://${IP}:8095`;\r\n// export const WS_BASE_URL = `ws://${IP}:8095`;\r\n\r\n// export const IFRAME_URL = sdkStateManager?.getState()?.urlConfig?.iframeURL\r\n// export const IFRAME_API_URL = sdkStateManager?.getState()?.urlConfig?.iframeAPIURL\r\n\r\n// Dynamically get URLs from SDK state\r\nconst getBaseURL = () => sdkStateManager?.getState()?.urlConfig?.baseURL || \"\";\r\nconst getCoreURL = () => sdkStateManager?.getState()?.urlConfig?.coreBaseURL || \"\";\r\n\r\nexport const BASE_URL = getBaseURL();\r\nexport const CORE_URL = getCoreURL();\r\n\r\nexport const VERSION = {\r\n\tv1: \"/api/v1\",\r\n};\r\n\r\n// Dynamic endpoint getters that fetch URLs from SDK state at runtime\r\nexport const END_POINT = {\r\n\tget LOGIN() { return `${getBaseURL()}${VERSION.v1}/cti/login?provider=convox`; },\r\n\tget READY_AGENT() { return `${getCoreURL()}${VERSION.v1}/agents/ready`; },\r\n\tget UPDATE_AGENT_BREAK() { return `${getCoreURL()}${VERSION.v1}/agents/status`; },\r\n\tget CLICK_TO_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/dial`; },\r\n\tget HOLD_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hold`; },\r\n\tget MUTE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/mute`; },\r\n\tget UNMUTE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/mute`; },\r\n\tget END_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget LOGOUT() { return `${getBaseURL()}${VERSION.v1}/cti/logout?provider=convox`; },\r\n\r\n\tget CONFERENCE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/add`; },\r\n\tget CONFERENCE_MERGE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/merge`; },\r\n\tget CONFERENCE_CALL_HOLD_OR_UN_HOLD() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hold`; },\r\n\tget CONFERENCE_CALL_MUTE_OT_UN_MUTE() { return `${getCoreURL()}${VERSION.v1}/cti/calls/mute`; },\r\n\tget CONFERENCE_CALL_END() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget CONFERENCE_CALL_END_ALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget CONFERENCE_CALL_TRANSFER() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/transfer`; },\r\n\tget TRANSFER_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer-call`; },\r\n\tget TRANSFER_COMPLETE() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer/complete`; },\r\n\tget TRANSFER_CANCEL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer/cancel`; },\r\n\r\n\tget AGENTS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/users`; },\r\n\tget PROCESS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/processes-list`; },\r\n\tget BREAKS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/breaks`; },\r\n\tget TRANSFER_TO_DETAILS() { return `${getBaseURL()}${VERSION.v1}/cti/transfer-to-details?provider=convox`; },\r\n\tget SEND_NOTIFICATIONS() { return `${getBaseURL()}${VERSION.v1}/cti/notifications/send`; },\r\n\r\n\tget CALL_HISTORY() { return `${getBaseURL()}${VERSION.v1}/dashboard/call-history`; },\r\n\tget SENTIMENTAL_ANALYSIS() { return `${getBaseURL()}${VERSION.v1}/users/get_sentiment_analysis`; },\r\n\tget DISPOSITIONS() { return `${getBaseURL()}${VERSION.v1}/cti/calls/dispositions`; },\r\n\tget HOSPITALS_SERVICES() { return `${getBaseURL()}${VERSION.v1}/cti/hospital/services`; },\r\n\tget BLIEND_TRANSFER() { return `${getBaseURL()}${VERSION.v1}/cti/calls/blind_transfer?provider=convox`; },\r\n\r\n\tget AUTH_LOGOUT() { return `${getBaseURL()}${VERSION.v1}/auth/logout`; },\r\n\r\n\t// Permissions\r\n\tget USER_PERMISSIONS() { return `${getBaseURL()}${VERSION.v1}/rbac/users/me/permissions`; },\r\n\r\n\t// Supervisor Call Monitoring (Listen / Whisper / Barge via ChanSpy)\r\n\tget SUPERVISOR_CALL_LISTEN() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/listen`; },\r\n\tget SUPERVISOR_CALL_LEAVE() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/leave`; },\r\n\tget SUPERVISOR_CALL_CHANGE_MODE() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/mode`; },\r\n\r\n\t// Call History pages\r\n\tget CALLS_HISTORY() { return `${getBaseURL()}${VERSION.v1}/calls/history`; },\r\n\tget MISSED_CALLS() { return `${getBaseURL()}${VERSION.v1}/supervisor/missed-calls`; },\r\n\tRECORDING_BY_CALL: (call_uuid: string) => `${getBaseURL()}${VERSION.v1}/recordings/call/${call_uuid}`,\r\n\r\n\t// Campaigns\r\n\tget CAMPAIGNS_GET_ALL() { return `${getBaseURL()}${VERSION.v1}/dialer/campaigns`; },\r\n\tget CAMPAIGNS_CREATE() { return `${getBaseURL()}${VERSION.v1}/dialer/campaigns`; },\r\n\tCAMPAIGNS_GET_BY_ID: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}`,\r\n\tCAMPAIGNS_UPDATE: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}`,\r\n\tCAMPAIGNS_ACTIVATE: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}/activate`,\r\n\tCAMPAIGNS_PAUSE: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}/pause`,\r\n\tCAMPAIGNS_ARCHIVE: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}/archive`,\r\n\tCAMPAIGNS_LEADS: (campaignId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads`,\r\n\tCAMPAIGNS_DELETE_LEAD: (campaignId: number | string, leadId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/${leadId}`,\r\n\tCAMPAIGNS_DIAL_PREVIEW: (campaignId: number | string, leadId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/${leadId}/dial-preview`,\r\n\tCAMPAIGNS_LEADS_UPLOAD_EXCEL: (campaignId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/upload/excel`,\r\n\tCAMPAIGNS_LEADS_TEMPLATE_EXCEL: (campaignId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/template/excel`,\r\n\tCAMPAIGNS_LEADS_EXPORT_EXCEL: (campaignId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/export/excel`,\r\n\r\n\t// Login Report\r\n\tget LOGIN_REPORT() { return `${getBaseURL()}${VERSION.v1}/reports/login-report`; },\r\n\tget LOGIN_REPORT_AGENTS() { return `${getBaseURL()}${VERSION.v1}/reports/login-report/agents`; },\r\n\tLOGIN_REPORT_AGENT_SESSIONS: (agentId: string) => `${getBaseURL()}${VERSION.v1}/reports/login-report/agents/${agentId}/sessions`,\r\n\tLOGIN_REPORT_AGENT_SESSIONS_EXPORT_EXCEL: (agentId: string) => `${getBaseURL()}${VERSION.v1}/reports/login-report/agents/${agentId}/sessions/export/excel`,\r\n\tget LOGIN_REPORT_EXPORT_EXCEL() { return `${getBaseURL()}${VERSION.v1}/reports/login-report/export/excel`; },\r\n\r\n\t// CDR Report\r\n\tget CDR_REPORT() { return `${getBaseURL()}${VERSION.v1}/reports/cdr-report`; },\r\n\tget CDR_REPORT_RECORDS() { return `${getBaseURL()}${VERSION.v1}/reports/cdr-report/records`; },\r\n\tget CDR_REPORT_EXPORT_EXCEL() { return `${getBaseURL()}${VERSION.v1}/reports/cdr-report/export/excel`; },\r\n\r\n\t// CDR Report filter sources (match what main app's CdrReport calls)\r\n\tget USERS_LIST() { return `${getBaseURL()}${VERSION.v1}/users/`; },\r\n\tget MASTER_QUEUES() { return `${getBaseURL()}${VERSION.v1}/master/queue`; },\r\n\r\n\t// Reports\r\n\tget AGENT_PERFORMANCE_REPORT() { return `${getBaseURL()}${VERSION.v1}/reports/agent-performance-report`; },\r\n\tget AGENT_PERFORMANCE_REPORT_AGENTS() { return `${getBaseURL()}${VERSION.v1}/reports/agent-performance-report/agents`; },\r\n\tget AGENT_PERFORMANCE_REPORT_EXPORT_EXCEL() { return `${getBaseURL()}${VERSION.v1}/reports/agent-performance-report/export/excel`; },\r\n\tAGENT_DETAIL_REPORT: (agentId: string) => `${getBaseURL()}${VERSION.v1}/reports/agent-detail-report/${agentId}`,\r\n\t// get CDR_REPORT() { return `${getBaseURL()}${VERSION.v1}/reports/cdr-report`; },\r\n\r\n\t// Queues (used by Campaigns → Queue Linking)\r\n\tget QUEUES_GET_ALL() { return `${getBaseURL()}${VERSION.v1}/master/queue`; },\r\n\tget QUEUES_CREATE() { return `${getBaseURL()}${VERSION.v1}/master/queue`; },\r\n};\r\n\r\n// export const WS_END_POINT = {\r\n// \tWS: `${WS_BASE_URL}${VERSION.v1}/cti/ws`,\r\n// };\r\n\r\n// export const STORAGE_KEY = \"call-control-sdk-state\";\r\n","import axios, { AxiosInstance, AxiosResponse, AxiosError, InternalAxiosRequestConfig } from \"axios\";\r\nimport { BASE_URL } from \"./endPoint\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\nconst DEFAULT_TOKEN = sdkStateManager.getSdkAuthToken() ?? \"\";\r\n\r\nconst REQUEST_TIMEOUT = 60000;\r\n\r\nfunction getAuthToken(): string {\r\n\treturn sdkStateManager.getSdkAuthToken() ?? \"\";\r\n}\r\n\r\nfunction createAxiosInstance(): AxiosInstance {\r\n\tconst instance = axios.create({\r\n\t\t// baseURL: sdkStateManager.getState()?.urlConfig?.baseURL,\r\n\t\theaders: {\r\n\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\tAccept: \"application/json\",\r\n\t\t\t\"x-tenant-id\": sdkStateManager.getCredentials()?.tenantId ?? \"\",\r\n\t\t\t\"x-api-key\": sdkStateManager.getCredentials()?.apiKey ?? \"\",\r\n\t\t\tAuthorization: DEFAULT_TOKEN\r\n\t\t\t\t? (DEFAULT_TOKEN.startsWith(\"Bearer \") ? DEFAULT_TOKEN : `Bearer ${DEFAULT_TOKEN}`)\r\n\t\t\t\t: \"\",\r\n\t\t},\r\n\t\ttimeout: REQUEST_TIMEOUT,\r\n\t\twithCredentials: false,\r\n\t});\r\n\r\n\tinstance.interceptors.request.use(\r\n\t\t(config: InternalAxiosRequestConfig) => {\r\n\t\t\tconst token = getAuthToken();\r\n\r\n\t\t\tif (token && config.headers) {\r\n\t\t\t\t// Only add \"Bearer \" prefix if the token doesn't already have it\r\n\t\t\t\tconst authToken = token.startsWith(\"Bearer \") ? token : `Bearer ${token}`;\r\n\t\t\t\tconfig.headers.Authorization = authToken;\r\n\t\t\t}\r\n\r\n\t\t\t// Debug log for API calls\r\n\t\t\tconsole.log(\"API Request:\", {\r\n\t\t\t\turl: config.url,\r\n\t\t\t\tmethod: config.method,\r\n\t\t\t\thasToken: !!token,\r\n\t\t\t\ttokenStartsWithBearer: token?.startsWith(\"Bearer \"),\r\n\t\t\t\theaders: {\r\n\t\t\t\t\tAuthorization: config.headers.Authorization,\r\n\t\t\t\t\t\"x-tenant-id\": config.headers[\"x-tenant-id\"],\r\n\t\t\t\t\t\"x-api-key\": config.headers[\"x-api-key\"],\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t(config as any).metadata = { startTime: new Date().getTime() };\r\n\r\n\t\t\treturn config;\r\n\t\t},\r\n\t\t(error: AxiosError) => {\r\n\t\t\tconsole.error(\"Request interceptor error:\", error);\r\n\t\t\treturn Promise.reject(error);\r\n\t\t}\r\n\t);\r\n\r\n\tinstance.interceptors.response.use(\r\n\t\t(response: AxiosResponse) => {\r\n\t\t\treturn response;\r\n\t\t},\r\n\t\tasync (error: AxiosError) => {\r\n\t\t\tconst originalRequest = error.config as InternalAxiosRequestConfig & { _retry?: boolean };\r\n\r\n\t\t\tif (error.response?.status === 401 && !originalRequest._retry) {\r\n\t\t\t\tsdkStateManager.setInitCheck();\r\n\t\t\t\tconsole.warn(\"Unauthorized request, attempting retry...\");\r\n\t\t\t}\r\n\r\n\t\t\tif (!error.response) {\r\n\t\t\t\tconsole.error(\"Network error:\", error.message);\r\n\t\t\t\terror.message = \"Network error: Please check your internet connection\";\r\n\t\t\t}\r\n\r\n\t\t\tif (error.response && error.response.status >= 500) {\r\n\t\t\t\tconsole.error(\"Server error:\", error.response.status, error.response.data);\r\n\t\t\t\terror.message = \"Server error: Please try again later\";\r\n\t\t\t}\r\n\r\n\t\t\treturn Promise.reject(error);\r\n\t\t}\r\n\t);\r\n\r\n\treturn instance;\r\n}\r\n\r\nconst axiosInstance: AxiosInstance = createAxiosInstance();\r\n\r\nexport default axiosInstance;\r\n"],"mappings":"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","names":["_a","jsx","_a","_a"]}
|