ahs-cti 1.0.1-beta.55 → 1.0.1-beta.57
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/{auditReport-EL6N3RWV.mjs → auditReport-FKAWUYRF.mjs} +2 -2
- package/dist/{cdrReport-5KKSCFOL.mjs → cdrReport-AP5S32KZ.mjs} +37 -37
- package/dist/cdrReport-AP5S32KZ.mjs.map +1 -0
- package/dist/{chunk-6KZFBOWQ.mjs → chunk-E5ICHQKR.mjs} +27 -25
- package/dist/chunk-E5ICHQKR.mjs.map +1 -0
- package/dist/index.js +61 -59
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/package.json +1 -1
- package/dist/cdrReport-5KKSCFOL.mjs.map +0 -1
- package/dist/chunk-6KZFBOWQ.mjs.map +0 -1
- /package/dist/{auditReport-EL6N3RWV.mjs.map → auditReport-FKAWUYRF.mjs.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AuditReportFullPage
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-E5ICHQKR.mjs";
|
|
4
4
|
import "./chunk-2W7AY4QJ.mjs";
|
|
5
5
|
import "./chunk-VQCHBU2Q.mjs";
|
|
6
6
|
|
|
@@ -12,4 +12,4 @@ function AuditReportPage({ callUuid }) {
|
|
|
12
12
|
export {
|
|
13
13
|
AuditReportPage as default
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=auditReport-
|
|
15
|
+
//# sourceMappingURL=auditReport-FKAWUYRF.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AuditReportDialog
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-E5ICHQKR.mjs";
|
|
4
4
|
import {
|
|
5
5
|
ReportFilterBar,
|
|
6
6
|
SearchBar,
|
|
@@ -553,6 +553,20 @@ function CdrReportContent() {
|
|
|
553
553
|
},
|
|
554
554
|
children: [
|
|
555
555
|
/* @__PURE__ */ jsx(TableHead, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
|
|
556
|
+
/* @__PURE__ */ jsx(
|
|
557
|
+
TableCell,
|
|
558
|
+
{
|
|
559
|
+
sx: __spreadProps(__spreadValues({}, headCellSx), { minWidth: 110, textAlign: "center" }),
|
|
560
|
+
children: "Audit Report"
|
|
561
|
+
}
|
|
562
|
+
),
|
|
563
|
+
/* @__PURE__ */ jsx(
|
|
564
|
+
TableCell,
|
|
565
|
+
{
|
|
566
|
+
sx: __spreadProps(__spreadValues({}, headCellSx), { minWidth: 100 }),
|
|
567
|
+
children: "Recording"
|
|
568
|
+
}
|
|
569
|
+
),
|
|
556
570
|
[
|
|
557
571
|
{ id: "phoneNumber", label: "Phone Number" },
|
|
558
572
|
{ id: "callStartTime", label: "Call Start" },
|
|
@@ -603,21 +617,7 @@ function CdrReportContent() {
|
|
|
603
617
|
},
|
|
604
618
|
children: col.label
|
|
605
619
|
}
|
|
606
|
-
) }, col.id))
|
|
607
|
-
/* @__PURE__ */ jsx(
|
|
608
|
-
TableCell,
|
|
609
|
-
{
|
|
610
|
-
sx: __spreadProps(__spreadValues({}, headCellSx), { minWidth: 220 }),
|
|
611
|
-
children: "Recording"
|
|
612
|
-
}
|
|
613
|
-
),
|
|
614
|
-
/* @__PURE__ */ jsx(
|
|
615
|
-
TableCell,
|
|
616
|
-
{
|
|
617
|
-
sx: __spreadProps(__spreadValues({}, headCellSx), { minWidth: 110 }),
|
|
618
|
-
children: "Audit Report"
|
|
619
|
-
}
|
|
620
|
-
)
|
|
620
|
+
) }, col.id))
|
|
621
621
|
] }) }),
|
|
622
622
|
/* @__PURE__ */ jsx(TableBody, { children: sortedRecords.map((row, idx) => /* @__PURE__ */ jsxs(
|
|
623
623
|
TableRow,
|
|
@@ -628,6 +628,25 @@ function CdrReportContent() {
|
|
|
628
628
|
"&:hover": { backgroundColor: "#f0f7f8" }
|
|
629
629
|
},
|
|
630
630
|
children: [
|
|
631
|
+
/* @__PURE__ */ jsx(TableCell, { sx: { textAlign: "center", verticalAlign: "middle" }, children: /* @__PURE__ */ jsx(Tooltip, { title: "View Audit Report", children: /* @__PURE__ */ jsx(
|
|
632
|
+
IconButton,
|
|
633
|
+
{
|
|
634
|
+
size: "small",
|
|
635
|
+
onClick: () => {
|
|
636
|
+
setSelectedAuditRow(row);
|
|
637
|
+
setAuditDialogOpen(true);
|
|
638
|
+
},
|
|
639
|
+
sx: { color: COLORS.blue, p: 0.4 },
|
|
640
|
+
children: /* @__PURE__ */ jsx(AssignmentIcon, { sx: { fontSize: 16 } })
|
|
641
|
+
}
|
|
642
|
+
) }) }),
|
|
643
|
+
/* @__PURE__ */ jsx(TableCell, { sx: { verticalAlign: "middle" }, children: row.callUuid ? /* @__PURE__ */ jsx(
|
|
644
|
+
RecordingCell,
|
|
645
|
+
{
|
|
646
|
+
callUuid: row.callUuid,
|
|
647
|
+
recordingPath: row.recordingPath
|
|
648
|
+
}
|
|
649
|
+
) : null }),
|
|
631
650
|
/* @__PURE__ */ jsx(
|
|
632
651
|
TableCell,
|
|
633
652
|
{
|
|
@@ -763,26 +782,7 @@ function CdrReportContent() {
|
|
|
763
782
|
borderRadius: "6px"
|
|
764
783
|
}
|
|
765
784
|
}
|
|
766
|
-
) })
|
|
767
|
-
/* @__PURE__ */ jsx(TableCell, { children: row.callUuid ? /* @__PURE__ */ jsx(
|
|
768
|
-
RecordingCell,
|
|
769
|
-
{
|
|
770
|
-
callUuid: row.callUuid,
|
|
771
|
-
recordingPath: row.recordingPath
|
|
772
|
-
}
|
|
773
|
-
) : null }),
|
|
774
|
-
/* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(Tooltip, { title: "View Audit Report", children: /* @__PURE__ */ jsx(
|
|
775
|
-
IconButton,
|
|
776
|
-
{
|
|
777
|
-
size: "small",
|
|
778
|
-
onClick: () => {
|
|
779
|
-
setSelectedAuditRow(row);
|
|
780
|
-
setAuditDialogOpen(true);
|
|
781
|
-
},
|
|
782
|
-
sx: { color: COLORS.blue, p: 0.4 },
|
|
783
|
-
children: /* @__PURE__ */ jsx(AssignmentIcon, { sx: { fontSize: 16 } })
|
|
784
|
-
}
|
|
785
|
-
) }) })
|
|
785
|
+
) })
|
|
786
786
|
]
|
|
787
787
|
},
|
|
788
788
|
row.callUuid || idx
|
|
@@ -842,4 +842,4 @@ var cdrReport_default = CdrReport;
|
|
|
842
842
|
export {
|
|
843
843
|
cdrReport_default as default
|
|
844
844
|
};
|
|
845
|
-
//# sourceMappingURL=cdrReport-
|
|
845
|
+
//# sourceMappingURL=cdrReport-AP5S32KZ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../call-control-sdk/lib/pages/cdrReport/index.tsx","../call-control-sdk/lib/pages/cdrReport/useCdrReport.ts"],"sourcesContent":["import React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport {\r\n Alert,\r\n Box,\r\n Chip,\r\n Paper,\r\n Stack,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow,\r\n TablePagination,\r\n TableSortLabel,\r\n CircularProgress,\r\n IconButton,\r\n Tooltip,\r\n} from \"@mui/material\";\r\nimport AppButton from \"../common/components/AppButton\";\r\nimport AuditReportDialog from \"../common/components/AuditReport\";\r\n\r\nimport ReportFilterBar, {\r\n type QuickRange,\r\n} from \"../common/components/ReportFilterBar\";\r\nimport DownloadIcon from \"@mui/icons-material/Download\";\r\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\r\nimport PlayArrowIcon from \"@mui/icons-material/PlayArrow\";\r\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\r\nimport AssignmentIcon from \"@mui/icons-material/Assignment\";\r\n\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\nimport isoWeek from \"dayjs/plugin/isoWeek\";\r\n\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport {\r\n getCdrReport,\r\n exportCdrReportToExcel,\r\n getRecordingByCall,\r\n getQueues,\r\n type Queue,\r\n} from \"./useCdrReport\";\r\nimport { deepFindArray } from \"../../services/axios\";\r\nimport type { CdrReportParams, CdrRecordResponse } from \"./types\";\r\nimport { type AgentOption } from \"../common/components/AgentMultiSelect\";\r\nimport { headCellSx } from \"../common/utils/tableStyles\";\r\nimport PageHeader from \"../common/components/PageHeader\";\r\nimport SearchBar from \"../common/components/SearchBar\";\r\n\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPermissionGuard } from \"../../components/SDKPermissionGuard\";\r\nimport { SDK_PERMISSIONS } from \"../../permissions/sdk-constants\";\r\n\r\ndayjs.extend(isoWeek);\r\n\r\nconst FONT =\r\n \"'Inter', 'Segoe UI', 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif\";\r\n\r\nconst COLORS = {\r\n navy: \"#0d2a56\",\r\n blue: \"#1565c8\",\r\n green: \"#0a9a62\",\r\n amber: \"#c47c00\",\r\n red: \"#cc2a2a\",\r\n purple: \"#6b3fbf\",\r\n bg: \"transparent\",\r\n surface: \"transparent\",\r\n} as const;\r\n\r\nconst DEFAULT_PAGE_SIZE = 15;\r\n\r\ntype SortKey =\r\n | \"phoneNumber\"\r\n | \"callStartTime\"\r\n | \"callType\"\r\n | \"callStatus\"\r\n | \"agentName\"\r\n | \"queueName\"\r\n | \"extension\"\r\n | \"talkDurationFmt\"\r\n | \"holdDurationFmt\"\r\n | \"ringingDurationFmt\"\r\n | \"queueDurationFmt\"\r\n | \"wrapupDurationFmt\"\r\n | \"disposition\"\r\n | \"remarks\"\r\n | \"wasTransferred\";\r\n\r\ntype SortDir = \"asc\" | \"desc\";\r\n\r\nconst comparator = (\r\n a: CdrRecordResponse,\r\n b: CdrRecordResponse,\r\n key: SortKey,\r\n): number => {\r\n const av = a[key as keyof CdrRecordResponse];\r\n const bv = b[key as keyof CdrRecordResponse];\r\n if (typeof av === \"number\" && typeof bv === \"number\") return av - bv;\r\n if (typeof av === \"boolean\" && typeof bv === \"boolean\")\r\n return (av ? 1 : 0) - (bv ? 1 : 0);\r\n return String(av ?? \"\").localeCompare(String(bv ?? \"\"));\r\n};\r\n\r\nfunction CallTypePill({ value }: { value: string }) {\r\n const v = (value || \"\").toLowerCase();\r\n let color = \"#6b7b8d\";\r\n let bg = \"transparent\";\r\n if (v.includes(\"inbound\")) {\r\n color = COLORS.green;\r\n bg = \"#e6f7ef\";\r\n } else if (v.includes(\"outbound\")) {\r\n color = COLORS.blue;\r\n bg = \"#e3eefa\";\r\n } else if (v.includes(\"internal\")) {\r\n color = COLORS.purple;\r\n bg = \"#f0e8ff\";\r\n }\r\n return (\r\n <Chip\r\n label={value}\r\n size=\"small\"\r\n sx={{\r\n fontFamily: FONT,\r\n bgcolor: bg,\r\n color,\r\n fontWeight: 600,\r\n fontSize: \"0.65rem\",\r\n height: 20,\r\n borderRadius: \"6px\",\r\n }}\r\n />\r\n );\r\n}\r\n\r\nfunction StatusPill({ value }: { value: string }) {\r\n const v = (value || \"\").toLowerCase();\r\n let color = \"#6b7b8d\";\r\n let bg = \"transparent\";\r\n if (v.includes(\"answered\")) {\r\n color = COLORS.green;\r\n bg = \"#e6f7ef\";\r\n } else if (v.includes(\"abandoned\") || v.includes(\"missed\")) {\r\n color = COLORS.red;\r\n bg = \"#fce8e8\";\r\n }\r\n return (\r\n <Chip\r\n label={value}\r\n size=\"small\"\r\n sx={{\r\n fontFamily: FONT,\r\n bgcolor: bg,\r\n color,\r\n fontWeight: 600,\r\n fontSize: \"0.65rem\",\r\n height: 20,\r\n borderRadius: \"6px\",\r\n }}\r\n />\r\n );\r\n}\r\n\r\nfunction RecordingCell({\r\n callUuid,\r\n recordingPath,\r\n}: {\r\n callUuid: string;\r\n recordingPath: string | null;\r\n}) {\r\n const [audioUrl, setAudioUrl] = useState<string | null>(null);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState(false);\r\n const unavailable = recordingPath === null;\r\n\r\n const handlePlay = async () => {\r\n if (audioUrl) return;\r\n try {\r\n setLoading(true);\r\n setError(false);\r\n const blob = await getRecordingByCall(callUuid);\r\n const url = URL.createObjectURL(blob);\r\n setAudioUrl(url);\r\n } catch {\r\n setError(true);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleDownload = async () => {\r\n try {\r\n const blob = audioUrl\r\n ? await fetch(audioUrl).then((r) => r.blob())\r\n : await getRecordingByCall(callUuid);\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = `recording_${callUuid}.wav`;\r\n a.click();\r\n URL.revokeObjectURL(url);\r\n } catch {\r\n /* ignore */\r\n }\r\n };\r\n\r\n if (audioUrl) {\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n <audio\r\n controls\r\n autoPlay\r\n src={audioUrl}\r\n onEnded={() => {\r\n if (audioUrl.startsWith(\"blob:\")) URL.revokeObjectURL(audioUrl);\r\n setAudioUrl(null);\r\n }}\r\n style={{ width: 180, height: 30 }}\r\n />\r\n <Tooltip title=\"Download\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleDownload}\r\n sx={{ color: COLORS.blue, p: 0.4 }}\r\n >\r\n <FileDownloadIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\r\n <Tooltip title={unavailable || error ? \"Recording Unavailable\" : \"Play\"}>\r\n <span>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handlePlay}\r\n disabled={loading || error || unavailable}\r\n sx={{ color: unavailable ? \"#b0b8c8\" : COLORS.green, p: 0.4 }}\r\n >\r\n {loading ? (\r\n <CircularProgress size={14} />\r\n ) : (\r\n <PlayArrowIcon sx={{ fontSize: 16 }} />\r\n )}\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n <Tooltip\r\n title={unavailable || error ? \"Recording Unavailable\" : \"Download\"}\r\n >\r\n <span>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleDownload}\r\n disabled={loading || error || unavailable}\r\n sx={{ color: unavailable ? \"#b0b8c8\" : COLORS.blue, p: 0.4 }}\r\n >\r\n <FileDownloadIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n </Box>\r\n );\r\n}\r\n\r\nfunction CdrReportContent() {\r\n const [startDate, setStartDate] = useState<Dayjs | null>(\r\n dayjs().startOf(\"day\"),\r\n );\r\n const [endDate, setEndDate] = useState<Dayjs | null>(dayjs());\r\n const [activeQuickDate, setActiveQuickDate] = useState<\r\n \"today\" | \"week\" | \"month\" | null\r\n >(\"today\");\r\n const [searchText, setSearchText] = useState(\"\");\r\n\r\n const [selectedAgents, setSelectedAgents] = useState<AgentOption[]>([]);\r\n const [isAllUsersSelected, setIsAllUsersSelected] = useState(false);\r\n\r\n const [queues, setQueues] = useState<Queue[]>([]);\r\n const [selectedQueues, setSelectedQueues] = useState<Queue[]>([]);\r\n\r\n const [callType, setCallType] = useState<string>(\"\");\r\n const [callStatus, setCallStatus] = useState<string>(\"\");\r\n\r\n const [records, setRecords] = useState<CdrRecordResponse[]>([]);\r\n const [totalRecords, setTotalRecords] = useState(0);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState(\"\");\r\n\r\n const [page, setPage] = useState(0);\r\n const [rowsPerPage, setRowsPerPage] = useState(DEFAULT_PAGE_SIZE);\r\n const [sortKey, setSortKey] = useState<SortKey>(\"callStartTime\");\r\n const [sortDir, setSortDir] = useState<SortDir>(\"desc\");\r\n\r\n const [auditDialogOpen, setAuditDialogOpen] = useState(false);\r\n const [selectedAuditRow, setSelectedAuditRow] =\r\n useState<CdrRecordResponse | null>(null);\r\n\r\n useEffect(() => {\r\n getQueues()\r\n .then((data) => setQueues(data || []))\r\n .catch(() => setError(\"Failed to load filter options\"));\r\n }, []);\r\n\r\n const handleQuickRangeChange = (range: QuickRange) => {\r\n setActiveQuickDate(range || null);\r\n };\r\n\r\n const [debouncedSearch, setDebouncedSearch] = useState(\"\");\r\n const debounceRef = useRef<ReturnType<typeof setTimeout>>(undefined);\r\n\r\n useEffect(() => {\r\n debounceRef.current = setTimeout(\r\n () => setDebouncedSearch(searchText.trim()),\r\n 400,\r\n );\r\n return () => clearTimeout(debounceRef.current);\r\n }, [searchText]);\r\n\r\n const fetchReport = useCallback(\r\n async (pageNum: number) => {\r\n const sd = startDate ?? dayjs();\r\n const ed = endDate ?? dayjs();\r\n\r\n if (!sd || !ed) {\r\n setError(\"Select a valid date range\");\r\n return;\r\n }\r\n\r\n const params: CdrReportParams = {\r\n start_date: sd.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: ed.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n agent_id:\r\n !isAllUsersSelected && selectedAgents.length > 0\r\n ? selectedAgents.map((a) => a.id)\r\n : undefined,\r\n // All queues selected → send no queue_id (backend returns all).\r\n queue_id:\r\n selectedQueues.length > 0 && selectedQueues.length < queues.length\r\n ? selectedQueues.map((q) => q.id)\r\n : undefined,\r\n call_type: callType || undefined,\r\n status: callStatus || undefined,\r\n search: debouncedSearch || undefined,\r\n page: pageNum + 1,\r\n pageSize: rowsPerPage,\r\n };\r\n\r\n try {\r\n setError(\"\");\r\n setLoading(true);\r\n const response: any = await getCdrReport(params);\r\n setRecords(\r\n deepFindArray<CdrRecordResponse>(response, [\"data\", \"records\"]),\r\n );\r\n setTotalRecords(\r\n response?.records?.total ??\r\n response?.total ??\r\n response?.data?.total ??\r\n 0,\r\n );\r\n } catch (err: any) {\r\n setError(err?.message || \"Failed to fetch CDR report\");\r\n setRecords([]);\r\n } finally {\r\n setLoading(false);\r\n }\r\n },\r\n [\r\n startDate,\r\n endDate,\r\n selectedAgents,\r\n isAllUsersSelected,\r\n selectedQueues,\r\n callType,\r\n callStatus,\r\n debouncedSearch,\r\n rowsPerPage,\r\n ],\r\n );\r\n\r\n useEffect(() => {\r\n setPage(0);\r\n fetchReport(0);\r\n }, [fetchReport]);\r\n\r\n const handleRefresh = () => {\r\n if (activeQuickDate) {\r\n const now = dayjs();\r\n let sd = now.startOf(\"day\");\r\n const ed = now;\r\n if (activeQuickDate === \"week\") sd = now.startOf(\"week\").startOf(\"day\");\r\n else if (activeQuickDate === \"month\")\r\n sd = now.startOf(\"month\").startOf(\"day\");\r\n setStartDate(sd);\r\n setEndDate(ed);\r\n } else {\r\n fetchReport(page);\r\n }\r\n };\r\n\r\n const handlePageChange = useCallback(\r\n (_event: React.MouseEvent<HTMLButtonElement> | null, newPage: number) => {\r\n setPage(newPage);\r\n fetchReport(newPage);\r\n },\r\n [fetchReport],\r\n );\r\n\r\n const handleSort = (key: SortKey) => {\r\n if (sortKey === key) {\r\n setSortDir((d) => (d === \"asc\" ? \"desc\" : \"asc\"));\r\n } else {\r\n setSortKey(key);\r\n setSortDir(\"asc\");\r\n }\r\n };\r\n\r\n const sortedRecords = useMemo(() => {\r\n const rows = [...records];\r\n rows.sort((a, b) => {\r\n const cmp = comparator(a, b, sortKey);\r\n return sortDir === \"asc\" ? cmp : -cmp;\r\n });\r\n return rows;\r\n }, [records, sortKey, sortDir]);\r\n\r\n const handleExportExcel = async () => {\r\n const sd = startDate ?? dayjs();\r\n const ed = endDate ?? dayjs();\r\n const params: CdrReportParams = {\r\n start_date: sd.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: ed.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n agent_id:\r\n !isAllUsersSelected && selectedAgents.length > 0\r\n ? selectedAgents.map((a) => a.id)\r\n : undefined,\r\n queue_id:\r\n selectedQueues.length > 0 && selectedQueues.length < queues.length\r\n ? selectedQueues.map((q) => q.id)\r\n : undefined,\r\n call_type: callType || undefined,\r\n status: callStatus || undefined,\r\n search: debouncedSearch || undefined,\r\n };\r\n try {\r\n await exportCdrReportToExcel(params);\r\n } catch (err: any) {\r\n setError(err?.message || \"Failed to export Excel\");\r\n }\r\n };\r\n\r\n return (\r\n <LocalizationProvider dateAdapter={AdapterDayjs}>\r\n <Box\r\n sx={{\r\n height: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n fontFamily: FONT,\r\n }}\r\n >\r\n <PageHeader\r\n title=\"CDR Report\"\r\n actions={\r\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\r\n <SearchBar\r\n value={searchText}\r\n onChange={setSearchText}\r\n placeholder=\"Search phone, agent...\"\r\n width={250}\r\n />\r\n <SDKPermissionGuard\r\n permissions={[\r\n SDK_PERMISSIONS.REPORTS_CDR_EXPORT,\r\n SDK_PERMISSIONS.REPORTS_CDR_MANAGE,\r\n ]}\r\n showFallback={false}\r\n >\r\n <AppButton\r\n startIcon={\r\n <DownloadIcon sx={{ fontSize: \"0.95rem !important\" }} />\r\n }\r\n disabled={!records.length}\r\n onClick={handleExportExcel}\r\n sx={{ height: 36 }}\r\n >\r\n Export Excel\r\n </AppButton>\r\n </SDKPermissionGuard>\r\n </Stack>\r\n }\r\n />\r\n\r\n <Box sx={{ flex: 1, overflow: \"auto\", py: 0.8, px: 0 }}>\r\n <Box sx={{ mb: 0.8 }}>\r\n <ReportFilterBar\r\n startDate={startDate}\r\n endDate={endDate}\r\n onStartChange={setStartDate}\r\n onEndChange={setEndDate}\r\n quickRange={activeQuickDate || \"\"}\r\n onQuickRangeChange={handleQuickRangeChange}\r\n showAgentSelect\r\n selectedAgents={selectedAgents}\r\n onAgentsChange={setSelectedAgents}\r\n setIsAllUsersSelected={setIsAllUsersSelected}\r\n showQueueSelect\r\n queues={queues}\r\n selectedQueues={selectedQueues}\r\n onQueuesChange={setSelectedQueues}\r\n showCallTypeSelect\r\n selectedCallType={callType}\r\n onCallTypeChange={setCallType}\r\n showStatusSelect\r\n selectedStatus={callStatus}\r\n onStatusChange={setCallStatus}\r\n extra={\r\n <AppButton\r\n startIcon={\r\n <RefreshIcon sx={{ fontSize: \"0.9rem !important\" }} />\r\n }\r\n disabled={loading}\r\n onClick={handleRefresh}\r\n sx={{ height: 32 }}\r\n >\r\n Refresh\r\n </AppButton>\r\n }\r\n />\r\n\r\n {error && (\r\n <Alert\r\n severity=\"error\"\r\n sx={{ mt: 1, fontFamily: FONT, fontSize: \"0.78rem\" }}\r\n >\r\n {error}\r\n </Alert>\r\n )}\r\n </Box>\r\n\r\n {loading && (\r\n <Box sx={{ textAlign: \"center\", py: 2.5 }}>\r\n <CircularProgress sx={{ color: COLORS.blue }} size={28} />\r\n </Box>\r\n )}\r\n\r\n <Paper\r\n elevation={0}\r\n sx={{\r\n borderRadius: \"8px\",\r\n border: \"1px solid #e0e7ef\",\r\n overflow: \"hidden\",\r\n mb: 2,\r\n }}\r\n >\r\n <TableContainer>\r\n <Table\r\n size=\"small\"\r\n sx={{\r\n minWidth: 1400,\r\n fontFamily: FONT,\r\n \"& .MuiTableCell-root\": {\r\n fontFamily: FONT,\r\n fontSize: \"0.75rem\",\r\n borderBottom: \"1px solid #eef1f6\",\r\n py: 0.6,\r\n px: 1,\r\n },\r\n }}\r\n >\r\n <TableHead>\r\n <TableRow>\r\n <TableCell\r\n sx={{ ...(headCellSx as object), minWidth: 110, textAlign: \"center\" }}\r\n >\r\n Audit Report\r\n </TableCell>\r\n <TableCell\r\n sx={{ ...(headCellSx as object), minWidth: 100 }}\r\n >\r\n Recording\r\n </TableCell>\r\n {(\r\n [\r\n { id: \"phoneNumber\" as SortKey, label: \"Phone Number\" },\r\n { id: \"callStartTime\" as SortKey, label: \"Call Start\" },\r\n { id: \"callType\" as SortKey, label: \"Call Type\" },\r\n { id: \"callStatus\" as SortKey, label: \"Status\" },\r\n { id: \"agentName\" as SortKey, label: \"User Name\" },\r\n { id: \"queueName\" as SortKey, label: \"Queues\" },\r\n { id: \"extension\" as SortKey, label: \"Extension\" },\r\n {\r\n id: \"talkDurationFmt\" as SortKey,\r\n label: \"Talk Duration\",\r\n },\r\n {\r\n id: \"holdDurationFmt\" as SortKey,\r\n label: \"Hold Duration\",\r\n },\r\n {\r\n id: \"ringingDurationFmt\" as SortKey,\r\n label: \"Ringing Duration\",\r\n },\r\n {\r\n id: \"queueDurationFmt\" as SortKey,\r\n label: \"Queue Duration\",\r\n },\r\n {\r\n id: \"wrapupDurationFmt\" as SortKey,\r\n label: \"Wrapup Duration\",\r\n },\r\n { id: \"disposition\" as SortKey, label: \"Disposition\" },\r\n { id: \"remarks\" as SortKey, label: \"Remarks\" },\r\n {\r\n id: \"wasTransferred\" as SortKey,\r\n label: \"Transferred\",\r\n },\r\n ] as { id: SortKey; label: string }[]\r\n ).map((col) => (\r\n <TableCell key={col.id} sx={headCellSx}>\r\n <TableSortLabel\r\n active={sortKey === col.id}\r\n direction={sortKey === col.id ? sortDir : \"asc\"}\r\n onClick={() => handleSort(col.id)}\r\n sx={{\r\n \"&.MuiTableSortLabel-root\": { color: \"#333\" },\r\n \"&.MuiTableSortLabel-root:hover\": { color: \"#555\" },\r\n \"&.Mui-active\": { color: \"#333\" },\r\n \"& .MuiTableSortLabel-icon\": {\r\n color: \"#333 !important\",\r\n },\r\n }}\r\n >\r\n {col.label}\r\n </TableSortLabel>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n\r\n <TableBody>\r\n {sortedRecords.map((row, idx) => (\r\n <TableRow\r\n key={row.callUuid || idx}\r\n hover\r\n sx={{\r\n backgroundColor: \"#fff\",\r\n \"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n }}\r\n >\r\n <TableCell sx={{ textAlign: \"center\", verticalAlign: \"middle\" }}>\r\n <Tooltip title=\"View Audit Report\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => {\r\n setSelectedAuditRow(row);\r\n setAuditDialogOpen(true);\r\n }}\r\n sx={{ color: COLORS.blue, p: 0.4 }}\r\n >\r\n <AssignmentIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </Tooltip>\r\n </TableCell>\r\n <TableCell sx={{ verticalAlign: \"middle\" }}>\r\n {row.callUuid ? (\r\n <RecordingCell\r\n callUuid={row.callUuid}\r\n recordingPath={row.recordingPath}\r\n />\r\n ) : null}\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n fontWeight: 600,\r\n color: COLORS.navy,\r\n fontSize: \"0.75rem\",\r\n }}\r\n >\r\n {row.phoneNumber || \"\"}\r\n </TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n {row.callStartTime\r\n ? dayjs(row.callStartTime).format(\r\n \"DD MMM YYYY hh:mm A\",\r\n )\r\n : \"\"}\r\n </TableCell>\r\n <TableCell>\r\n <CallTypePill value={row.callType || \"\"} />\r\n </TableCell>\r\n <TableCell>\r\n <StatusPill value={row.callStatus || \"\"} />\r\n </TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n {row.agentName || \"\"}\r\n </TableCell>\r\n <TableCell>\r\n {row.queueName ? (\r\n <Chip\r\n label={row.queueName}\r\n size=\"small\"\r\n sx={{\r\n fontFamily: FONT,\r\n backgroundColor: \"#f0ebfa\",\r\n color: COLORS.purple,\r\n fontWeight: 500,\r\n fontSize: \"0.67rem\",\r\n height: 22,\r\n }}\r\n />\r\n ) : null}\r\n </TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n {row.extension || \"\"}\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n fontWeight: 600,\r\n color: COLORS.blue,\r\n fontSize: \"0.75rem\",\r\n fontVariantNumeric: \"tabular-nums\",\r\n }}\r\n >\r\n {row.talkDurationFmt || \"\"}\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n fontWeight: 500,\r\n color: COLORS.amber,\r\n fontSize: \"0.75rem\",\r\n fontVariantNumeric: \"tabular-nums\",\r\n }}\r\n >\r\n {row.holdDurationFmt || \"\"}\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n fontWeight: 500,\r\n fontSize: \"0.75rem\",\r\n fontVariantNumeric: \"tabular-nums\",\r\n }}\r\n >\r\n {row.ringingDurationFmt || \"\"}\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n fontWeight: 500,\r\n fontSize: \"0.75rem\",\r\n fontVariantNumeric: \"tabular-nums\",\r\n }}\r\n >\r\n {row.queueDurationFmt || \"\"}\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n fontWeight: 500,\r\n fontSize: \"0.75rem\",\r\n fontVariantNumeric: \"tabular-nums\",\r\n }}\r\n >\r\n {row.wrapupDurationFmt || \"\"}\r\n </TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n {row.disposition || \"\"}\r\n </TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n {row.remarks ? (\r\n <Tooltip title={row.remarks}>\r\n <span\r\n style={{\r\n display: \"inline-block\",\r\n maxWidth: 180,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n verticalAlign: \"bottom\",\r\n }}\r\n >\r\n {row.remarks}\r\n </span>\r\n </Tooltip>\r\n ) : (\r\n \"\"\r\n )}\r\n </TableCell>\r\n <TableCell>\r\n {row.wasTransferred ? (\r\n <Chip\r\n label=\"Yes\"\r\n size=\"small\"\r\n sx={{\r\n fontFamily: FONT,\r\n backgroundColor: \"#e6f7ef\",\r\n color: COLORS.green,\r\n fontWeight: 600,\r\n fontSize: \"0.65rem\",\r\n height: 20,\r\n borderRadius: \"6px\",\r\n }}\r\n />\r\n ) : (\r\n <Chip\r\n label=\"No\"\r\n size=\"small\"\r\n sx={{\r\n fontFamily: FONT,\r\n backgroundColor: \"transparent\",\r\n color: \"#6b7b8d\",\r\n fontWeight: 600,\r\n fontSize: \"0.65rem\",\r\n height: 20,\r\n borderRadius: \"6px\",\r\n }}\r\n />\r\n )}\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n\r\n <TablePagination\r\n component=\"div\"\r\n count={totalRecords}\r\n page={page}\r\n onPageChange={handlePageChange}\r\n rowsPerPage={rowsPerPage}\r\n rowsPerPageOptions={[10, 15, 25, 50, 100]}\r\n onRowsPerPageChange={(e) => {\r\n setRowsPerPage(parseInt(e.target.value, 10));\r\n setPage(0);\r\n }}\r\n sx={{\r\n borderTop: \"1px solid #eef1f6\",\r\n fontFamily: FONT,\r\n \"& .MuiTablePagination-displayedRows\": {\r\n fontFamily: FONT,\r\n fontSize: \"0.73rem\",\r\n },\r\n \"& .MuiTablePagination-selectLabel\": {\r\n fontFamily: FONT,\r\n fontSize: \"0.73rem\",\r\n },\r\n }}\r\n />\r\n </Paper>\r\n </Box>\r\n </Box>\r\n\r\n <AuditReportDialog\r\n open={auditDialogOpen}\r\n onClose={() => {\r\n setAuditDialogOpen(false);\r\n setSelectedAuditRow(null);\r\n }}\r\n rowData={selectedAuditRow ?? undefined}\r\n />\r\n </LocalizationProvider>\r\n );\r\n}\r\n\r\nconst CdrReport: React.FC = () => (\r\n <SDKProvider>\r\n <CdrReportContent />\r\n </SDKProvider>\r\n);\r\n\r\nexport default CdrReport;\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\tCdrAgentFilterOption,\r\n\tCdrQueueFilterOption,\r\n\tCdrRecordsPage,\r\n\tCdrReportParams,\r\n\tCdrReportResponse,\r\n} from \"./types\";\r\n\r\n// ─── Build query string for CDR endpoints ────────────────────────────────────\r\n\r\nfunction buildCdrQuery(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) {\r\n\t\tfor (const id of params.agent_id) qs.append(\"agent_id\", String(id));\r\n\t}\r\n\tif (params.queue_id) {\r\n\t\tfor (const id of params.queue_id) qs.append(\"queue_id\", String(id));\r\n\t}\r\n\tif (params.call_type) qs.append(\"call_type\", params.call_type);\r\n\tif (params.status) qs.append(\"status\", params.status);\r\n\tif (params.search) qs.append(\"search\", params.search);\r\n\tif (params.page) qs.append(\"page\", String(params.page));\r\n\tif (params.pageSize) qs.append(\"pageSize\", String(params.pageSize));\r\n\tconst str = qs.toString();\r\n\treturn str ? `?${str}` : \"\";\r\n}\r\n\r\n// ─── CDR records hook ────────────────────────────────────────────────────────\r\n\r\nexport function useCdrReport() {\r\n\tconst [records, setRecords] = useState<CdrRecordsPage[\"data\"]>([]);\r\n\tconst [totalRecords, setTotalRecords] = useState(0);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(\"\");\r\n\r\n\tconst fetchRecords = useCallback(async (params: CdrReportParams): Promise<void> => {\r\n\t\tsetLoading(true);\r\n\t\tsetError(\"\");\r\n\t\ttry {\r\n\t\t\tconst qs = buildCdrQuery(params);\r\n\t\t\tconst res = await axiosInstance.get<CdrRecordsPage>(`${END_POINT.CDR_REPORT_RECORDS}${qs}`);\r\n\t\t\tsetRecords(res.data?.data ?? []);\r\n\t\t\tsetTotalRecords(res.data?.total ?? 0);\r\n\t\t} catch (err: any) {\r\n\t\t\tsetError(\r\n\t\t\t\terr?.response?.data?.message\r\n\t\t\t\t?? err?.response?.data?.detail\r\n\t\t\t\t?? err?.message\r\n\t\t\t\t?? \"Failed to fetch CDR report\"\r\n\t\t\t);\r\n\t\t\tsetRecords([]);\r\n\t\t\tsetTotalRecords(0);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst exportExcel = useCallback(async (params: CdrReportParams): Promise<void> => {\r\n\t\tconst qs = buildCdrQuery(params);\r\n\t\tconst res = await axiosInstance.get(`${END_POINT.CDR_REPORT_EXPORT_EXCEL}${qs}`, {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\tconst blob = res.data as Blob;\r\n\t\tconst url = window.URL.createObjectURL(blob);\r\n\t\tconst a = document.createElement(\"a\");\r\n\t\ta.href = url;\r\n\t\ta.download = `cdr-report-${params.start_date ?? \"export\"}.xlsx`;\r\n\t\tdocument.body.appendChild(a);\r\n\t\ta.click();\r\n\t\ta.remove();\r\n\t\twindow.URL.revokeObjectURL(url);\r\n\t}, []);\r\n\r\n\tconst fetchRecording = useCallback(async (callUuid: string): Promise<Blob> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(callUuid), {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\trecords,\r\n\t\ttotalRecords,\r\n\t\tloading,\r\n\t\terror,\r\n\t\tsetError,\r\n\t\tfetchRecords,\r\n\t\texportExcel,\r\n\t\tfetchRecording,\r\n\t};\r\n}\r\n\r\n// ─── CDR filter options hook (agents + queues) ───────────────────────────────\r\n//\r\n// The main app's CdrReport uses the general user-list and master-queue endpoints\r\n// (NOT a CDR-specific filter endpoint). We mirror that here.\r\n// - agents: GET /api/v1/users/?role=AGENT → filter to role === \"AGENT\"\r\n// - queues: GET /api/v1/master/queue\r\n\r\ninterface UserListItem {\r\n\tid: number;\r\n\tuserId: string;\r\n\tfirstName?: string;\r\n\tlastName?: string;\r\n\trole?: string | { name?: string } | null;\r\n}\r\n\r\ninterface QueueListItem {\r\n\tid: number;\r\n\tname: string;\r\n}\r\n\r\nexport function useCdrFilters() {\r\n\tconst [agents, setAgents] = useState<CdrAgentFilterOption[]>([]);\r\n\tconst [queues, setQueues] = useState<CdrQueueFilterOption[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchAgents = useCallback(async (): Promise<void> => {\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<UserListItem[] | { data: UserListItem[] }>(\r\n\t\t\t\tEND_POINT.USERS_LIST,\r\n\t\t\t\t{ params: { role: \"AGENT\" } },\r\n\t\t\t);\r\n\t\t\tconst raw = Array.isArray(res.data)\r\n\t\t\t\t? res.data\r\n\t\t\t\t: Array.isArray((res.data as any)?.data)\r\n\t\t\t\t\t? (res.data as any).data\r\n\t\t\t\t\t: [];\r\n\t\t\tconst mapped: CdrAgentFilterOption[] = (raw as UserListItem[])\r\n\t\t\t\t.filter((u) => {\r\n\t\t\t\t\tconst roleName = typeof u.role === \"object\" && u.role !== null ? u.role.name : u.role;\r\n\t\t\t\t\treturn roleName === \"AGENT\";\r\n\t\t\t\t})\r\n\t\t\t\t.map((u) => ({\r\n\t\t\t\t\tid: u.id,\r\n\t\t\t\t\tuserId: u.userId,\r\n\t\t\t\t\tfullName: [u.firstName, u.lastName].filter(Boolean).join(\" \") || u.userId,\r\n\t\t\t\t}));\r\n\t\t\tsetAgents(mapped);\r\n\t\t} catch {\r\n\t\t\tsetAgents([]);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchQueues = useCallback(async (): Promise<void> => {\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<QueueListItem[] | { data: QueueListItem[] }>(\r\n\t\t\t\tEND_POINT.MASTER_QUEUES,\r\n\t\t\t);\r\n\t\t\tconst raw = Array.isArray(res.data)\r\n\t\t\t\t? res.data\r\n\t\t\t\t: Array.isArray((res.data as any)?.data)\r\n\t\t\t\t\t? (res.data as any).data\r\n\t\t\t\t\t: [];\r\n\t\t\tsetQueues((raw as QueueListItem[]).map((q) => ({ id: q.id, name: q.name })));\r\n\t\t} catch {\r\n\t\t\tsetQueues([]);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchAll = useCallback(async (): Promise<void> => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tawait Promise.all([fetchAgents(), fetchQueues()]);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, [fetchAgents, fetchQueues]);\r\n\r\n\treturn { agents, queues, loading, fetchAgents, fetchQueues, fetchAll };\r\n}\r\n\r\nexport interface Queue {\r\n\tid: number;\r\n\tname: string;\r\n\tdescription: string;\r\n\tisActive: boolean;\r\n}\r\n\r\nexport async function getQueues(): Promise<Queue[]> {\r\n\tconst res = await axiosInstance.get<QueueListItem[] | { data: QueueListItem[] }>(END_POINT.MASTER_QUEUES);\r\n\tconst raw = Array.isArray(res.data)\r\n\t\t? res.data\r\n\t\t: Array.isArray((res.data as any)?.data)\r\n\t\t\t? (res.data as any).data\r\n\t\t\t: [];\r\n\treturn (raw as QueueListItem[]).map((q) => ({ id: q.id, name: q.name, description: \"\", isActive: true }));\r\n}\r\n\r\nexport async function getCdrReportRecords(params: CdrReportParams): Promise<CdrRecordsPage> {\r\n\tconst qs = buildCdrQuery(params);\r\n\tconst res = await axiosInstance.get<CdrRecordsPage>(`${END_POINT.CDR_REPORT_RECORDS}${qs}`);\r\n\treturn res.data;\r\n}\r\n\r\n/**\r\n * Combined CDR report — stats + the current page of records in one call.\r\n * This is the documented endpoint that honours page/pageSize/search.\r\n */\r\nexport async function getCdrReport(params: CdrReportParams): Promise<CdrReportResponse> {\r\n\tconst qs = buildCdrQuery(params);\r\n\tconst res = await axiosInstance.get<CdrReportResponse>(`${END_POINT.CDR_REPORT}${qs}`);\r\n\treturn res.data;\r\n}\r\n\r\nexport async function exportCdrReportToExcel(params: CdrReportParams): Promise<void> {\r\n\tconst qs = buildCdrQuery(params);\r\n\tconst res = await axiosInstance.get(`${END_POINT.CDR_REPORT_EXPORT_EXCEL}${qs}`, { responseType: \"blob\" });\r\n\tconst url = window.URL.createObjectURL(new Blob([res.data]));\r\n\tconst a = document.createElement(\"a\");\r\n\ta.href = url;\r\n\ta.download = `cdr-report-${params.start_date ?? \"export\"}.xlsx`;\r\n\tdocument.body.appendChild(a);\r\n\ta.click();\r\n\ta.remove();\r\n\twindow.URL.revokeObjectURL(url);\r\n}\r\n\r\nexport async function getRecordingByCall(callUuid: string): Promise<Blob> {\r\n\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(callUuid), { responseType: \"blob\" });\r\n\treturn res.data;\r\n}\r\n"],"mappings":"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","names":["useCallback","useState","useState","useCallback"]}
|
|
@@ -166,7 +166,7 @@ function OverviewTab({ data }) {
|
|
|
166
166
|
/* @__PURE__ */ jsx(SectionTitle, { children: "Audit Metadata" }),
|
|
167
167
|
/* @__PURE__ */ jsx(Box, { sx: { border: "1px solid", borderColor: "divider", borderRadius: "8px", overflow: "hidden", backgroundColor: "background.paper" }, children: /* @__PURE__ */ jsx(Box, { sx: { display: "flex" }, children: [col1, col2].map((chunk, ci) => /* @__PURE__ */ jsx(Box, { sx: { flex: "1 1 240px", minWidth: 0, borderRight: ci === 0 ? "1px solid" : "none", borderColor: "divider" }, children: chunk.map((item, ii) => /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "baseline", borderBottom: ii < chunk.length - 1 ? "1px solid" : "none", borderColor: "divider", px: "10px", py: "6px", gap: 1 }, children: [
|
|
168
168
|
/* @__PURE__ */ jsx(Typography, { sx: { fontSize: "0.72rem", color: "text.secondary", minWidth: 140, flexShrink: 0 }, children: item.label }),
|
|
169
|
-
/* @__PURE__ */ jsx(Typography, { sx: { fontSize: "0.75rem", color: "text.primary", fontWeight: 500 }, children: item.value
|
|
169
|
+
/* @__PURE__ */ jsx(Typography, { sx: { fontSize: "0.75rem", color: "text.primary", fontWeight: 500 }, children: item.value })
|
|
170
170
|
] }, ii)) }, ci)) }) })
|
|
171
171
|
] }),
|
|
172
172
|
/* @__PURE__ */ jsxs(Box, { children: [
|
|
@@ -183,14 +183,15 @@ var SCORECARD_PARAMS = [
|
|
|
183
183
|
{ key: "Opening_and_Greeting", label: "Opening & Greeting", defaultMax: 10 },
|
|
184
184
|
{ key: "Verification_and_Authentication", label: "Verification & Authentication", defaultMax: 10 },
|
|
185
185
|
{ key: "Communication_and_Soft_Skills", label: "Communication & Soft Skills", defaultMax: 15 },
|
|
186
|
-
{ key: "Process_and_Workflow_Adherence", label: "Process & Workflow Adherence", defaultMax:
|
|
186
|
+
{ key: "Process_and_Workflow_Adherence", label: "Process & Workflow Adherence", defaultMax: 20 },
|
|
187
187
|
{ key: "Resolution_Accuracy", label: "Resolution Accuracy", defaultMax: 20 },
|
|
188
188
|
{ key: "Empathy_and_Patient_Assurance", label: "Empathy & Patient Assurance", defaultMax: 10 },
|
|
189
189
|
{ key: "Call_Handling", label: "Call Handling", defaultMax: 5 },
|
|
190
|
+
{ key: "CRM_Documentation_Alignment", label: "CRM Documentation Alignment", defaultMax: 5 },
|
|
190
191
|
{ key: "Closing_and_Customer_Education", label: "Closing & Customer Education", defaultMax: 5 }
|
|
191
192
|
];
|
|
192
193
|
function ScorecardTab({ data, primary }) {
|
|
193
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m
|
|
194
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
|
|
194
195
|
const sc = (_a = data.Quality_Scorecard) != null ? _a : {};
|
|
195
196
|
const summary = (_b = data.Executive_Audit_Summary) != null ? _b : {};
|
|
196
197
|
const rawScore = (_d = (_c = sc.Total_Score) != null ? _c : summary.Overall_Audit_Score_Percentage) != null ? _d : 0;
|
|
@@ -199,14 +200,10 @@ function ScorecardTab({ data, primary }) {
|
|
|
199
200
|
const resultBadge = (_f = (_e = summary.Audit_Result) != null ? _e : sc.Final_Rating) != null ? _f : "N/A";
|
|
200
201
|
const metrics = [
|
|
201
202
|
{ label: "Audit Result", value: (_g = summary.Audit_Result) != null ? _g : "N/A" },
|
|
202
|
-
{ label: "
|
|
203
|
-
{ label: "
|
|
204
|
-
{ label: "
|
|
205
|
-
{ label: "
|
|
206
|
-
{ label: "Communication", value: (_m = summary.Communication_Effectiveness) != null ? _m : "N/A" },
|
|
207
|
-
{ label: "Knowledge Accuracy", value: (_n = summary.Knowledge_Accuracy) != null ? _n : "N/A" },
|
|
208
|
-
{ label: "Empathy Handling", value: (_o = summary.Empathy_Handling) != null ? _o : "N/A" },
|
|
209
|
-
{ label: "Risk Severity", value: (_p = summary.Risk_Severity) != null ? _p : "N/A" }
|
|
203
|
+
{ label: "First Call Resolution", value: (_h = summary.First_Call_Resolution_FCR) != null ? _h : "N/A" },
|
|
204
|
+
{ label: "Patient Experience", value: (_j = (_i = summary.Customer_Experience) != null ? _i : summary.Patient_Sentiment) != null ? _j : "N/A" },
|
|
205
|
+
{ label: "Process Adherence", value: (_k = summary.Process_Adherence) != null ? _k : "N/A" },
|
|
206
|
+
{ label: "Effective Communication", value: (_l = summary.Communication_Effectiveness) != null ? _l : "N/A" }
|
|
210
207
|
];
|
|
211
208
|
return /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", flexDirection: "column", gap: 2.5 }, children: [
|
|
212
209
|
/* @__PURE__ */ jsxs(Box, { sx: { display: "flex", gap: 2, flexWrap: "wrap", alignItems: "stretch" }, children: [
|
|
@@ -219,10 +216,16 @@ function ScorecardTab({ data, primary }) {
|
|
|
219
216
|
/* @__PURE__ */ jsx(Box, { sx: { width: "100%", mt: 0.75 }, children: /* @__PURE__ */ jsx(LinearProgress, { variant: "determinate", value: pct, sx: { height: 6, borderRadius: 3, backgroundColor: alpha(primary, 0.12), "& .MuiLinearProgress-bar": { backgroundColor: primary, borderRadius: 3 } } }) }),
|
|
220
217
|
/* @__PURE__ */ jsx(Box, { sx: { mt: 0.75 }, children: /* @__PURE__ */ jsx(StatusBadge, { label: resultBadge }) })
|
|
221
218
|
] }),
|
|
222
|
-
/* @__PURE__ */
|
|
223
|
-
/* @__PURE__ */ jsx(
|
|
224
|
-
|
|
225
|
-
|
|
219
|
+
/* @__PURE__ */ jsxs(Box, { sx: { flex: 1, minWidth: 260, display: "flex", flexDirection: "column", gap: "8px", alignSelf: "stretch" }, children: [
|
|
220
|
+
/* @__PURE__ */ jsx(Box, { sx: { flex: 1, display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: "8px" }, children: metrics.slice(0, 3).map((m) => /* @__PURE__ */ jsxs(Box, { sx: { border: "1px solid", borderColor: "divider", borderRadius: "6px", backgroundColor: "background.paper", px: "10px", py: "8px", display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: "6px" }, children: [
|
|
221
|
+
/* @__PURE__ */ jsx(Typography, { sx: { fontSize: "0.72rem", color: "text.secondary", lineHeight: 1.3, textAlign: "center" }, children: m.label }),
|
|
222
|
+
/* @__PURE__ */ jsx(StatusBadge, { label: m.value })
|
|
223
|
+
] }, m.label)) }),
|
|
224
|
+
/* @__PURE__ */ jsx(Box, { sx: { flex: 1, display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: "8px" }, children: metrics.slice(3).map((m) => /* @__PURE__ */ jsxs(Box, { sx: { border: "1px solid", borderColor: "divider", borderRadius: "6px", backgroundColor: "background.paper", px: "10px", py: "8px", display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: "6px" }, children: [
|
|
225
|
+
/* @__PURE__ */ jsx(Typography, { sx: { fontSize: "0.72rem", color: "text.secondary", lineHeight: 1.3, textAlign: "center" }, children: m.label }),
|
|
226
|
+
/* @__PURE__ */ jsx(StatusBadge, { label: m.value })
|
|
227
|
+
] }, m.label)) })
|
|
228
|
+
] })
|
|
226
229
|
] }),
|
|
227
230
|
/* @__PURE__ */ jsxs(Box, { children: [
|
|
228
231
|
/* @__PURE__ */ jsx(SectionTitle, { children: "Quality Scorecard" }),
|
|
@@ -239,7 +242,6 @@ function ScorecardTab({ data, primary }) {
|
|
|
239
242
|
var _a2, _b2;
|
|
240
243
|
const entry = sc[p.key];
|
|
241
244
|
const rawEntryScore = entry == null ? void 0 : entry.Score_Obtained;
|
|
242
|
-
if (typeof rawEntryScore === "string" && rawEntryScore.toLowerCase().trim() === "n/a") return null;
|
|
243
245
|
const score = typeof rawEntryScore === "string" ? parseFloat(rawEntryScore) || 0 : rawEntryScore != null ? rawEntryScore : 0;
|
|
244
246
|
const max = (_a2 = entry == null ? void 0 : entry.Weightage) != null ? _a2 : p.defaultMax;
|
|
245
247
|
return /* @__PURE__ */ jsxs(TableRow, { children: [
|
|
@@ -255,7 +257,7 @@ function ScorecardTab({ data, primary }) {
|
|
|
255
257
|
/* @__PURE__ */ jsx(TableCell, { sx: __spreadProps(__spreadValues({}, TD), { textAlign: "center", fontWeight: 700 }), children: "100" }),
|
|
256
258
|
/* @__PURE__ */ jsx(TableCell, { sx: __spreadProps(__spreadValues({}, TD), { textAlign: "center", fontWeight: 700 }), children: overallScore }),
|
|
257
259
|
/* @__PURE__ */ jsx(TableCell, { sx: __spreadValues({}, TD), children: /* @__PURE__ */ jsx(ProgressCell, { value: { score: overallScore, max: 100 }, primary }) }),
|
|
258
|
-
/* @__PURE__ */ jsx(TableCell, { sx: __spreadProps(__spreadValues({}, TD), { fontWeight: 700 }), children: /* @__PURE__ */ jsx(StatusBadge, { label: (
|
|
260
|
+
/* @__PURE__ */ jsx(TableCell, { sx: __spreadProps(__spreadValues({}, TD), { fontWeight: 700 }), children: /* @__PURE__ */ jsx(StatusBadge, { label: (_m = sc.Final_Rating) != null ? _m : resultBadge }) })
|
|
259
261
|
] })
|
|
260
262
|
] })
|
|
261
263
|
] }) })
|
|
@@ -312,7 +314,7 @@ var CHECKLIST_COLS = [
|
|
|
312
314
|
{ key: "qaObservation", label: "QA Observation / Impact", minWidth: 180 }
|
|
313
315
|
];
|
|
314
316
|
function ChecklistTable({ title, rows }) {
|
|
315
|
-
const visibleRows = rows
|
|
317
|
+
const visibleRows = rows;
|
|
316
318
|
if (!visibleRows.length) return null;
|
|
317
319
|
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
318
320
|
/* @__PURE__ */ jsx(SectionTitle, { children: title }),
|
|
@@ -343,7 +345,7 @@ function DispositionFrameworkTable({ data }) {
|
|
|
343
345
|
};
|
|
344
346
|
});
|
|
345
347
|
}
|
|
346
|
-
).filter((r) => r.
|
|
348
|
+
).filter((r) => r.expectedFramework.toLowerCase().trim() !== "clinical sensitivity handling");
|
|
347
349
|
if (!rows.length) {
|
|
348
350
|
return /* @__PURE__ */ jsx(Typography, { sx: { fontSize: "0.75rem", color: "text.secondary" }, children: "No disposition framework data available." });
|
|
349
351
|
}
|
|
@@ -409,20 +411,20 @@ function AuditChecklistTab({ data, primary: _primary }) {
|
|
|
409
411
|
] });
|
|
410
412
|
}
|
|
411
413
|
function RootCauseAnalysisTab({ data, primary }) {
|
|
412
|
-
var _a, _b
|
|
413
|
-
const rcaRows = (
|
|
414
|
-
const rec = (
|
|
414
|
+
var _a, _b;
|
|
415
|
+
const rcaRows = (_a = data.Root_Cause_Analysis) != null ? _a : [];
|
|
416
|
+
const rec = (_b = data.Auditor_Recommendation) != null ? _b : {};
|
|
415
417
|
return /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: [
|
|
416
418
|
/* @__PURE__ */ jsxs(Box, { children: [
|
|
417
419
|
/* @__PURE__ */ jsx(SectionTitle, { children: "Root Cause Analysis" }),
|
|
418
420
|
rcaRows.length > 0 ? /* @__PURE__ */ jsx(TableContainer, { sx: { border: "1px solid", borderColor: "divider", borderRadius: "8px", overflow: "hidden" }, children: /* @__PURE__ */ jsxs(Table, { size: "small", children: [
|
|
419
421
|
/* @__PURE__ */ jsx(TableHead, { children: /* @__PURE__ */ jsx(TableRow, { children: [{ label: "Observation", minWidth: 180 }, { label: "Root Cause", minWidth: 200 }, { label: "Impact", minWidth: 200 }, { label: "Severity", minWidth: 90 }].map((col, i) => /* @__PURE__ */ jsx(TableCell, { sx: __spreadProps(__spreadValues({}, TH), { minWidth: col.minWidth }), children: col.label }, i)) }) }),
|
|
420
422
|
/* @__PURE__ */ jsx(TableBody, { children: rcaRows.map((row, ri) => {
|
|
421
|
-
var _a2, _b2,
|
|
423
|
+
var _a2, _b2, _c;
|
|
422
424
|
return /* @__PURE__ */ jsxs(TableRow, { sx: { "&:last-child td": { borderBottom: 0 } }, children: [
|
|
423
425
|
/* @__PURE__ */ jsx(TableCell, { sx: __spreadValues({}, TD), children: (_a2 = row.Observation) != null ? _a2 : "\u2014" }),
|
|
424
426
|
/* @__PURE__ */ jsx(TableCell, { sx: __spreadValues({}, TD), children: (_b2 = row.Root_Cause) != null ? _b2 : "\u2014" }),
|
|
425
|
-
/* @__PURE__ */ jsx(TableCell, { sx: __spreadValues({}, TD), children: (
|
|
427
|
+
/* @__PURE__ */ jsx(TableCell, { sx: __spreadValues({}, TD), children: (_c = row.Impact) != null ? _c : "\u2014" }),
|
|
426
428
|
/* @__PURE__ */ jsx(TableCell, { sx: __spreadProps(__spreadValues({}, TD), { textAlign: "center" }), children: row.Severity ? /* @__PURE__ */ jsx(StatusBadge, { label: row.Severity }) : "\u2014" })
|
|
427
429
|
] }, ri);
|
|
428
430
|
}) })
|
|
@@ -654,4 +656,4 @@ export {
|
|
|
654
656
|
AuditReportDialog,
|
|
655
657
|
AuditReportFullPage
|
|
656
658
|
};
|
|
657
|
-
//# sourceMappingURL=chunk-
|
|
659
|
+
//# sourceMappingURL=chunk-E5ICHQKR.mjs.map
|