ahs-cti 0.0.1
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/LICENSE +53 -0
- package/LICENSE-ACHALA +80 -0
- package/README.md +639 -0
- package/dist/agentDetailReport-7TDO6MYQ.mjs +11 -0
- package/dist/agentDetailReport-7TDO6MYQ.mjs.map +1 -0
- package/dist/agentPerformanceReport-R3WY7Q7D.mjs +531 -0
- package/dist/agentPerformanceReport-R3WY7Q7D.mjs.map +1 -0
- package/dist/auditReport-CJ23LXIZ.mjs +15 -0
- package/dist/auditReport-CJ23LXIZ.mjs.map +1 -0
- package/dist/callHistory-743J7EKD.mjs +783 -0
- package/dist/callHistory-743J7EKD.mjs.map +1 -0
- package/dist/campaigns-N2RLUJHH.mjs +3005 -0
- package/dist/campaigns-N2RLUJHH.mjs.map +1 -0
- package/dist/caroQualityAuditDashboard-NRWY6SEC.mjs +66 -0
- package/dist/caroQualityAuditDashboard-NRWY6SEC.mjs.map +1 -0
- package/dist/caroVoiceAI-Z5BDDDSY.mjs +21 -0
- package/dist/caroVoiceAI-Z5BDDDSY.mjs.map +1 -0
- package/dist/cdrReport-577UYGZA.mjs +798 -0
- package/dist/cdrReport-577UYGZA.mjs.map +1 -0
- package/dist/chunk-6ICPXSN6.mjs +61 -0
- package/dist/chunk-6ICPXSN6.mjs.map +1 -0
- package/dist/chunk-BU6FMNBY.mjs +82 -0
- package/dist/chunk-BU6FMNBY.mjs.map +1 -0
- package/dist/chunk-DBSNJ3QH.mjs +1060 -0
- package/dist/chunk-DBSNJ3QH.mjs.map +1 -0
- package/dist/chunk-EJIWPC3H.mjs +747 -0
- package/dist/chunk-EJIWPC3H.mjs.map +1 -0
- package/dist/chunk-GTDWTI5S.mjs +17217 -0
- package/dist/chunk-GTDWTI5S.mjs.map +1 -0
- package/dist/chunk-L4LLUMYA.mjs +57 -0
- package/dist/chunk-L4LLUMYA.mjs.map +1 -0
- package/dist/chunk-NQL4VODC.mjs +180 -0
- package/dist/chunk-NQL4VODC.mjs.map +1 -0
- package/dist/chunk-NUYGQI7D.mjs +678 -0
- package/dist/chunk-NUYGQI7D.mjs.map +1 -0
- package/dist/chunk-RZZQ42MG.mjs +115 -0
- package/dist/chunk-RZZQ42MG.mjs.map +1 -0
- package/dist/chunk-UB5HSUGK.mjs +65 -0
- package/dist/chunk-UB5HSUGK.mjs.map +1 -0
- package/dist/chunk-VGVOMFYH.mjs +5781 -0
- package/dist/chunk-VGVOMFYH.mjs.map +1 -0
- package/dist/chunk-VZCHJLAW.mjs +61 -0
- package/dist/chunk-VZCHJLAW.mjs.map +1 -0
- package/dist/incoming-4WP3FJI4.mp3 +0 -0
- package/dist/incoming.mp3 +0 -0
- package/dist/index.d.mts +2476 -0
- package/dist/index.d.ts +2477 -0
- package/dist/index.js +41208 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +4641 -0
- package/dist/index.mjs.map +1 -0
- package/dist/liveStatus-IQIEZZE5.mjs +1077 -0
- package/dist/liveStatus-IQIEZZE5.mjs.map +1 -0
- package/dist/loginReport-H6XJU2MY.mjs +826 -0
- package/dist/loginReport-H6XJU2MY.mjs.map +1 -0
- package/dist/managementDashboard-NZMAJPPB.mjs +527 -0
- package/dist/managementDashboard-NZMAJPPB.mjs.map +1 -0
- package/dist/qualityAuditDashboard-ZJEEAMBS.mjs +66 -0
- package/dist/qualityAuditDashboard-ZJEEAMBS.mjs.map +1 -0
- package/package.json +114 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../call-control-sdk/lib/pages/cdrReport/index.tsx"],"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"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// call-control-sdk/lib/services/toastMessage.tsx
|
|
2
|
+
import { createContext, useContext, useState } from "react";
|
|
3
|
+
import { Snackbar, Alert } from "@mui/material";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
var ToastContext = createContext(void 0);
|
|
6
|
+
var noopToast = {
|
|
7
|
+
showToast: (message, severity) => {
|
|
8
|
+
console.warn(`[Toast outside provider] ${severity != null ? severity : "info"}: ${message}`);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
var useToast = () => {
|
|
12
|
+
const ctx = useContext(ToastContext);
|
|
13
|
+
return ctx != null ? ctx : noopToast;
|
|
14
|
+
};
|
|
15
|
+
var ToastProvider = ({ children }) => {
|
|
16
|
+
const [open, setOpen] = useState(false);
|
|
17
|
+
const [message, setMessage] = useState("");
|
|
18
|
+
const [severity, setSeverity] = useState("info");
|
|
19
|
+
const showToast = (msg, sev = "info") => {
|
|
20
|
+
setMessage(msg);
|
|
21
|
+
setSeverity(sev);
|
|
22
|
+
setOpen(true);
|
|
23
|
+
};
|
|
24
|
+
return /* @__PURE__ */ jsxs(ToastContext.Provider, { value: { showToast }, children: [
|
|
25
|
+
children,
|
|
26
|
+
/* @__PURE__ */ jsx(
|
|
27
|
+
Snackbar,
|
|
28
|
+
{
|
|
29
|
+
open,
|
|
30
|
+
color: severity,
|
|
31
|
+
autoHideDuration: 3e3,
|
|
32
|
+
onClose: () => setOpen(false),
|
|
33
|
+
anchorOrigin: { vertical: "top", horizontal: "right" },
|
|
34
|
+
children: /* @__PURE__ */ jsx(
|
|
35
|
+
Alert,
|
|
36
|
+
{
|
|
37
|
+
variant: "filled",
|
|
38
|
+
severity,
|
|
39
|
+
onClose: () => setOpen(false),
|
|
40
|
+
sx: { width: "100%" },
|
|
41
|
+
children: message
|
|
42
|
+
}
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
)
|
|
46
|
+
] });
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// call-control-sdk/lib/components/SDKProvider.tsx
|
|
50
|
+
import { memo } from "react";
|
|
51
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
52
|
+
var SDKProvider = memo(({ children }) => {
|
|
53
|
+
return /* @__PURE__ */ jsx2(ToastProvider, { children });
|
|
54
|
+
});
|
|
55
|
+
SDKProvider.displayName = "SDKProvider";
|
|
56
|
+
|
|
57
|
+
export {
|
|
58
|
+
useToast,
|
|
59
|
+
SDKProvider
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=chunk-6ICPXSN6.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../call-control-sdk/lib/services/toastMessage.tsx","../call-control-sdk/lib/components/SDKProvider.tsx"],"sourcesContent":["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"],"mappings":";AAAA,SAAS,eAAe,YAAY,gBAA2B;AAC/D,SAAS,UAAU,aAAyB;AA+B1C,SASE,KATF;AAzBF,IAAM,eAAe,cAA4C,MAAS;AAE1E,IAAM,YAA8B;AAAA,EACnC,WAAW,CAAC,SAAS,aAAa;AACjC,YAAQ,KAAK,4BAA4B,8BAAY,MAAM,KAAK,OAAO,EAAE;AAAA,EAC1E;AACD;AAEO,IAAM,WAAW,MAAM;AAC7B,QAAM,MAAM,WAAW,YAAY;AACnC,SAAO,oBAAO;AACf;AAEO,IAAM,gBAAgB,CAAC,EAAE,SAAS,MAA+B;AACvE,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,EAAE;AACzC,QAAM,CAAC,UAAU,WAAW,IAAI,SAAqB,MAAM;AAE3D,QAAM,YAAY,CAAC,KAAa,MAAkB,WAAW;AAC5D,eAAW,GAAG;AACd,gBAAY,GAAG;AACf,YAAQ,IAAI;AAAA,EACb;AAEA,SACC,qBAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,UAAU,GACxC;AAAA;AAAA,IACD;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,kBAAkB;AAAA,QAClB,SAAS,MAAM,QAAQ,KAAK;AAAA,QAC5B,cAAc,EAAE,UAAU,OAAO,YAAY,QAAQ;AAAA,QAErD;AAAA,UAAC;AAAA;AAAA,YACA,SAAQ;AAAA,YACR;AAAA,YACA,SAAS,MAAM,QAAQ,KAAK;AAAA,YAC5B,IAAI,EAAE,OAAO,OAAO;AAAA,YAEnB;AAAA;AAAA,QACF;AAAA;AAAA,IACD;AAAA,KACD;AAEF;;;ACpDA,SAAS,YAAY;AAMb,gBAAAA,YAAA;AADD,IAAM,cAAc,KAAuB,CAAC,EAAE,SAAS,MAAM;AACnE,SAAO,gBAAAA,KAAC,iBAAe,UAAS;AACjC,CAAC;AAED,YAAY,cAAc;","names":["jsx"]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import {
|
|
2
|
+
END_POINT,
|
|
3
|
+
axios_default
|
|
4
|
+
} from "./chunk-DBSNJ3QH.mjs";
|
|
5
|
+
|
|
6
|
+
// call-control-sdk/lib/hooks/useCallMonitoring.ts
|
|
7
|
+
import { useCallback, useState } from "react";
|
|
8
|
+
var useCallMonitoring = () => {
|
|
9
|
+
const [loading, setLoading] = useState(false);
|
|
10
|
+
const [success, setSuccess] = useState(false);
|
|
11
|
+
const [isError, setIsError] = useState(false);
|
|
12
|
+
const [error, setError] = useState(null);
|
|
13
|
+
const [data, setData] = useState(null);
|
|
14
|
+
const resetState = () => {
|
|
15
|
+
setSuccess(false);
|
|
16
|
+
setIsError(false);
|
|
17
|
+
setError(null);
|
|
18
|
+
};
|
|
19
|
+
const startMonitoring = useCallback(async (payload) => {
|
|
20
|
+
resetState();
|
|
21
|
+
setLoading(true);
|
|
22
|
+
return axios_default.post(END_POINT.SUPERVISOR_CALL_LISTEN, payload).then((res) => {
|
|
23
|
+
setData(res == null ? void 0 : res.data);
|
|
24
|
+
setSuccess(true);
|
|
25
|
+
return res == null ? void 0 : res.data;
|
|
26
|
+
}).catch((err) => {
|
|
27
|
+
var _a;
|
|
28
|
+
setIsError(true);
|
|
29
|
+
setError(err);
|
|
30
|
+
return (_a = err == null ? void 0 : err.response) == null ? void 0 : _a.data;
|
|
31
|
+
}).finally(() => {
|
|
32
|
+
setLoading(false);
|
|
33
|
+
});
|
|
34
|
+
}, []);
|
|
35
|
+
const stopMonitoring = useCallback(async (payload) => {
|
|
36
|
+
resetState();
|
|
37
|
+
setLoading(true);
|
|
38
|
+
return axios_default.post(END_POINT.SUPERVISOR_CALL_LEAVE, payload).then((res) => {
|
|
39
|
+
setData(res == null ? void 0 : res.data);
|
|
40
|
+
setSuccess(true);
|
|
41
|
+
return res == null ? void 0 : res.data;
|
|
42
|
+
}).catch((err) => {
|
|
43
|
+
var _a;
|
|
44
|
+
setIsError(true);
|
|
45
|
+
setError(err);
|
|
46
|
+
return (_a = err == null ? void 0 : err.response) == null ? void 0 : _a.data;
|
|
47
|
+
}).finally(() => {
|
|
48
|
+
setLoading(false);
|
|
49
|
+
});
|
|
50
|
+
}, []);
|
|
51
|
+
const changeMode = useCallback(async (payload) => {
|
|
52
|
+
resetState();
|
|
53
|
+
setLoading(true);
|
|
54
|
+
return axios_default.post(END_POINT.SUPERVISOR_CALL_CHANGE_MODE, payload).then((res) => {
|
|
55
|
+
setData(res == null ? void 0 : res.data);
|
|
56
|
+
setSuccess(true);
|
|
57
|
+
return res == null ? void 0 : res.data;
|
|
58
|
+
}).catch((err) => {
|
|
59
|
+
var _a;
|
|
60
|
+
setIsError(true);
|
|
61
|
+
setError(err);
|
|
62
|
+
return (_a = err == null ? void 0 : err.response) == null ? void 0 : _a.data;
|
|
63
|
+
}).finally(() => {
|
|
64
|
+
setLoading(false);
|
|
65
|
+
});
|
|
66
|
+
}, []);
|
|
67
|
+
return {
|
|
68
|
+
startMonitoring,
|
|
69
|
+
stopMonitoring,
|
|
70
|
+
changeMode,
|
|
71
|
+
isLoading: loading,
|
|
72
|
+
isSuccess: success,
|
|
73
|
+
isError,
|
|
74
|
+
error,
|
|
75
|
+
data
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
export {
|
|
80
|
+
useCallMonitoring
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=chunk-BU6FMNBY.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../call-control-sdk/lib/hooks/useCallMonitoring.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport type SupervisorMonitorMode = \"listen\" | \"whisper\" | \"barge\";\r\n\r\nexport interface StartMonitoringPayload {\r\n\t/** UUID of the active call to monitor */\r\n\tcall_id: string;\r\n\t/** Monitoring mode: listen (hear only), whisper (speak to agent), barge (full 3-way) */\r\n\tmode: SupervisorMonitorMode;\r\n\t/** Optional: supervisor's SIP/WebRTC extension. Auto-detected from logged-in user if omitted */\r\n\tsupervisor_extension?: string;\r\n\t/** Optional: agent's extension. Auto-detected if omitted */\r\n\tagent_extension?: string;\r\n}\r\n\r\nexport interface StopMonitoringPayload {\r\n\t/** UUID of the call being monitored */\r\n\tcall_uuid: string;\r\n\t/** Legacy field – ignored by the backend but kept for compatibility */\r\n\tsession_id?: string;\r\n}\r\n\r\nexport interface ChangeModePayload {\r\n\t/** UUID of the call being monitored */\r\n\tcall_uuid: string;\r\n\t/** New monitoring mode to switch to */\r\n\tmode: SupervisorMonitorMode;\r\n\t/** Legacy field – ignored by the backend but kept for compatibility */\r\n\tsession_id?: string;\r\n}\r\n\r\nexport interface UseCallMonitoringReturn {\r\n\tstartMonitoring: (payload: StartMonitoringPayload) => Promise<any>;\r\n\tstopMonitoring: (payload: StopMonitoringPayload) => Promise<any>;\r\n\tchangeMode: (payload: ChangeModePayload) => Promise<any>;\r\n\tisLoading: boolean;\r\n\tisSuccess: boolean;\r\n\tisError: boolean;\r\n\terror: any;\r\n\tdata: any;\r\n}\r\n\r\n// ─── Hook ─────────────────────────────────────────────────────────────────────\r\n\r\nexport const useCallMonitoring = (): UseCallMonitoringReturn => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [success, setSuccess] = useState(false);\r\n\tconst [isError, setIsError] = useState(false);\r\n\tconst [error, setError] = useState<any>(null);\r\n\tconst [data, setData] = useState<any>(null);\r\n\r\n\tconst resetState = () => {\r\n\t\tsetSuccess(false);\r\n\t\tsetIsError(false);\r\n\t\tsetError(null);\r\n\t};\r\n\r\n\t/** Start supervisor monitoring on an active agent call (Listen / Whisper / Barge) */\r\n\tconst startMonitoring = useCallback(async (payload: StartMonitoringPayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_LISTEN, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\t/** Stop supervisor monitoring and disconnect from the call */\r\n\tconst stopMonitoring = useCallback(async (payload: StopMonitoringPayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_LEAVE, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\t/**\r\n\t * Change supervisor monitoring mode (e.g. listen → whisper → barge).\r\n\t * The backend hangs up the current ChanSpy call and originates a new one\r\n\t * with the updated mode – the supervisor's phone will ring again.\r\n\t */\r\n\tconst changeMode = useCallback(async (payload: ChangeModePayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_CHANGE_MODE, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tstartMonitoring,\r\n\t\tstopMonitoring,\r\n\t\tchangeMode,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError,\r\n\t\terror,\r\n\t\tdata,\r\n\t};\r\n};\r\n"],"mappings":";;;;;;AAAA,SAAS,aAAa,gBAAgB;AAiD/B,IAAM,oBAAoB,MAA+B;AAC/D,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAc,IAAI;AAC5C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAc,IAAI;AAE1C,QAAM,aAAa,MAAM;AACxB,eAAW,KAAK;AAChB,eAAW,KAAK;AAChB,aAAS,IAAI;AAAA,EACd;AAGA,QAAM,kBAAkB,YAAY,OAAO,YAAoC;AAC9E,eAAW;AACX,eAAW,IAAI;AAEf,WAAO,cACL,KAAK,UAAU,wBAAwB,OAAO,EAC9C,KAAK,CAAC,QAAQ;AACd,cAAQ,2BAAK,IAAI;AACjB,iBAAW,IAAI;AACf,aAAO,2BAAK;AAAA,IACb,CAAC,EACA,MAAM,CAAC,QAAQ;AA1EnB;AA2EI,iBAAW,IAAI;AACf,eAAS,GAAG;AACZ,cAAO,gCAAK,aAAL,mBAAe;AAAA,IACvB,CAAC,EACA,QAAQ,MAAM;AACd,iBAAW,KAAK;AAAA,IACjB,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAGL,QAAM,iBAAiB,YAAY,OAAO,YAAmC;AAC5E,eAAW;AACX,eAAW,IAAI;AAEf,WAAO,cACL,KAAK,UAAU,uBAAuB,OAAO,EAC7C,KAAK,CAAC,QAAQ;AACd,cAAQ,2BAAK,IAAI;AACjB,iBAAW,IAAI;AACf,aAAO,2BAAK;AAAA,IACb,CAAC,EACA,MAAM,CAAC,QAAQ;AAhGnB;AAiGI,iBAAW,IAAI;AACf,eAAS,GAAG;AACZ,cAAO,gCAAK,aAAL,mBAAe;AAAA,IACvB,CAAC,EACA,QAAQ,MAAM;AACd,iBAAW,KAAK;AAAA,IACjB,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAOL,QAAM,aAAa,YAAY,OAAO,YAA+B;AACpE,eAAW;AACX,eAAW,IAAI;AAEf,WAAO,cACL,KAAK,UAAU,6BAA6B,OAAO,EACnD,KAAK,CAAC,QAAQ;AACd,cAAQ,2BAAK,IAAI;AACjB,iBAAW,IAAI;AACf,aAAO,2BAAK;AAAA,IACb,CAAC,EACA,MAAM,CAAC,QAAQ;AA1HnB;AA2HI,iBAAW,IAAI;AACf,eAAS,GAAG;AACZ,cAAO,gCAAK,aAAL,mBAAe;AAAA,IACvB,CAAC,EACA,QAAQ,MAAM;AACd,iBAAW,KAAK;AAAA,IACjB,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;","names":[]}
|