ahs-cti 0.0.15 → 0.0.16
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/{callHistory-PHNTU2XO.mjs → callHistory-XCN3EARD.mjs} +2 -2
- package/dist/{callHistory-PHNTU2XO.mjs.map → callHistory-XCN3EARD.mjs.map} +1 -1
- package/dist/{campaigns-CRLTSO5Z.mjs → campaigns-HYWUCA2P.mjs} +9 -9
- package/dist/{campaigns-CRLTSO5Z.mjs.map → campaigns-HYWUCA2P.mjs.map} +1 -1
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist-react/{callHistory-5WHRXZSU.mjs → callHistory-7RUBUCVA.mjs} +2 -2
- package/dist-react/{callHistory-5WHRXZSU.mjs.map → callHistory-7RUBUCVA.mjs.map} +1 -1
- package/dist-react/{campaigns-5XNAI7JM.mjs → campaigns-6WLCKIGO.mjs} +9 -9
- package/dist-react/{campaigns-5XNAI7JM.mjs.map → campaigns-6WLCKIGO.mjs.map} +1 -1
- package/dist-react/index.js +9 -9
- package/dist-react/index.js.map +1 -1
- package/dist-react/index.mjs +2 -2
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -4555,8 +4555,8 @@ function withGuard(menuCodes, loader, permissions) {
|
|
|
4555
4555
|
});
|
|
4556
4556
|
}
|
|
4557
4557
|
var SDKPages = {
|
|
4558
|
-
CallHistory: withGuard(SDK_MENU_CODES.CALL_HISTORY, () => import("./callHistory-
|
|
4559
|
-
Campaigns: withGuard(SDK_MENU_CODES.CAMPAIGNS, () => import("./campaigns-
|
|
4558
|
+
CallHistory: withGuard(SDK_MENU_CODES.CALL_HISTORY, () => import("./callHistory-XCN3EARD.mjs"), SDK_PERMISSIONS.REPORTS_CALL_HISTORY_READ),
|
|
4559
|
+
Campaigns: withGuard(SDK_MENU_CODES.CAMPAIGNS, () => import("./campaigns-HYWUCA2P.mjs"), [SDK_PERMISSIONS.CAMPAIGNS_READ, SDK_PERMISSIONS.CAMPAIGNS_MANAGE]),
|
|
4560
4560
|
LoginReport: withGuard(SDK_MENU_CODES.LOGIN_REPORT, () => import("./loginReport-6CKV4TH3.mjs"), [SDK_PERMISSIONS.REPORTS_AGENT_LOGIN_READ, SDK_PERMISSIONS.REPORTS_AGENT_LOGIN_MANAGE]),
|
|
4561
4561
|
CdrReports: withGuard(SDK_MENU_CODES.CDR_REPORT, () => import("./cdrReport-LK56LH54.mjs"), [SDK_PERMISSIONS.REPORTS_CDR_READ, SDK_PERMISSIONS.REPORTS_CDR_MANAGE]),
|
|
4562
4562
|
AuditReportPage: withGuard(SDK_MENU_CODES.CDR_REPORT, () => import("./auditReport-AJKIWSAO.mjs"), [SDK_PERMISSIONS.REPORTS_CDR_READ, SDK_PERMISSIONS.REPORTS_CDR_MANAGE]),
|
|
@@ -375,7 +375,7 @@ function CallRow({
|
|
|
375
375
|
) }),
|
|
376
376
|
/* @__PURE__ */ jsx(TableCell, { sx: cellSx, children: new Date(row.start_time).toLocaleString() }),
|
|
377
377
|
/* @__PURE__ */ jsx(TableCell, { sx: cellSx, children: row.end_time ? new Date(row.end_time).toLocaleString() : "\u2014" }),
|
|
378
|
-
/* @__PURE__ */ jsx(TableCell, { align: "center", sx: cellSx, children: (_a = row.
|
|
378
|
+
/* @__PURE__ */ jsx(TableCell, { align: "center", sx: cellSx, children: (_a = row.user_id) != null ? _a : "" }),
|
|
379
379
|
/* @__PURE__ */ jsx(TableCell, { align: "center", sx: cellSx, children: row.recording.available ? /* @__PURE__ */ jsx(
|
|
380
380
|
IconButton,
|
|
381
381
|
{
|
|
@@ -405,4 +405,4 @@ var callHistory_default = CallHistory;
|
|
|
405
405
|
export {
|
|
406
406
|
callHistory_default as default
|
|
407
407
|
};
|
|
408
|
-
//# sourceMappingURL=callHistory-
|
|
408
|
+
//# sourceMappingURL=callHistory-7RUBUCVA.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../call-control-sdk/lib/pages/callHistory/index.tsx"],"sourcesContent":["import React, { memo, useCallback, useEffect, useState } from \"react\";\nimport {\n\tBox,\n\tTypography,\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableContainer,\n\tTableHead,\n\tTableRow,\n\tTablePagination,\n\tToggleButton,\n\tToggleButtonGroup,\n\tIconButton,\n\tCircularProgress,\n\tChip,\n\tStack,\n\tSwitch,\n\tFormControlLabel,\n\tTooltip,\n\tInputAdornment,\n\tOutlinedInput,\n\tuseTheme,\n\tPaper,\n} from \"@mui/material\";\nimport PlayArrow from \"@mui/icons-material/PlayArrow\";\nimport Search from \"@mui/icons-material/Search\";\nimport Phone from \"@mui/icons-material/Phone\";\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\nimport AssignmentIcon from \"@mui/icons-material/Assignment\";\n// ──── Expansion / details (kept for future use) ──────────────────────────────\n// import Collapse from \"@mui/material/Collapse\";\n// import KeyboardArrowDown from \"@mui/icons-material/KeyboardArrowDown\";\n// import ExpandLess from \"@mui/icons-material/ExpandLess\";\n// import Transcript from \"../common/components/Transcript\";\nimport dayjs, { Dayjs } from \"dayjs\";\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\nimport AppButton from \"../common/components/AppButton\";\nimport DateRangePicker from \"../common/components/DateRangePicker\";\nimport AuditReportDialog from \"../common/components/AuditReport\";\nimport { SDKProvider } from \"../../components/SDKProvider\";\nimport { SDKPageHeader } from \"../../components/SDKPageHeader\";\nimport { useToast } from \"../../services/toastMessage\";\nimport { useCallHistory } from \"./useCallHistory\";\nimport type { CallHistoryItem, MissedCallDetails, CallFilter } from \"./types\";\nimport type { CdrRecordResponse } from \"../cdrReport/types\";\n\n// ──── Header cell columns ────────────────────────────────────────────────────\n\nconst CALL_HISTORY_COLS = [\"Call UID\", \"Mobile\", \"Type\", \"Start Time\", \"End Time\", \"Agent\", \"Recording\", \"AI Audit Report\"] as const;\nconst MISSED_CALLS_COLS = [\"Agent ID\", \"Agent Name\", \"Mobile No\", \"Type\", \"Actions\"] as const;\nconst CENTER_COLS = new Set([\"Type\", \"Recording\", \"Agent\", \"AI Audit Report\", \"Actions\"]);\n\n// ──── Main content (needs SDKProvider above it for useToast) ─────────────────\n\nconst CallHistoryContent = memo(() => {\n\tconst theme = useTheme();\n\tconst { showToast } = useToast();\n\tconst { calls, callsTotal, missedCalls, loading, fetchCallHistory, fetchMissedCalls, fetchRecording } =\n\t\tuseCallHistory();\n\n\tconst [filter, setFilter] = useState<CallFilter>(\"ALL\");\n\tconst [search, setSearch] = useState(\"\");\n\tconst [showMissedCalls, setShowMissedCalls] = useState(false);\n\tconst [page, setPage] = useState(0);\n\tconst [rowsPerPage, setRowsPerPage] = useState(10);\n\n\t// Date range filter (sent to the server for call history).\n\tconst [startDate, setStartDate] = useState<Dayjs | null>(dayjs().startOf(\"day\"));\n\tconst [endDate, setEndDate] = useState<Dayjs | null>(dayjs());\n\n\t// Call UID whose AI audit report dialog is open (null = closed).\n\tconst [auditUuid, setAuditUuid] = useState<string | null>(null);\n\n\t// Debounced search (sent to the server for call history).\n\tconst [debouncedSearch, setDebouncedSearch] = useState(\"\");\n\tuseEffect(() => {\n\t\tconst t = setTimeout(() => setDebouncedSearch(search.trim()), 400);\n\t\treturn () => clearTimeout(t);\n\t}, [search]);\n\n\t// Serialised date range (YYYY-MM-DDTHH:mm:ss) — undefined when unset.\n\tconst startParam = startDate ? startDate.format(\"YYYY-MM-DDTHH:mm:ss\") : undefined;\n\tconst endParam = endDate ? endDate.format(\"YYYY-MM-DDTHH:mm:ss\") : undefined;\n\n\tuseEffect(() => {\n\t\tif (showMissedCalls) {\n\t\t\tfetchMissedCalls();\n\t\t} else {\n\t\t\t// Call history is paginated + searched + filtered server-side.\n\t\t\tfetchCallHistory({\n\t\t\t\tpage: page + 1,\n\t\t\t\tpageSize: rowsPerPage,\n\t\t\t\tsearch: debouncedSearch || undefined,\n\t\t\t\tcall_type: filter === \"ALL\" ? undefined : filter,\n\t\t\t\tstart_date: startParam,\n\t\t\t\tend_date: endParam,\n\t\t\t});\n\t\t}\n\t}, [showMissedCalls, page, rowsPerPage, filter, debouncedSearch, startParam, endParam, fetchCallHistory, fetchMissedCalls]);\n\n\t// Call history is filtered/searched server-side, so render the rows as-is.\n\tconst filteredCalls = calls;\n\n\tconst filteredMissedCalls = missedCalls\n\t\t.filter((c) => filter === \"ALL\" || c.callType?.toUpperCase() === filter)\n\t\t.filter((c) => {\n\t\t\tconst q = search.toLowerCase();\n\t\t\treturn (\n\t\t\t\tc.agentId?.toLowerCase().includes(q) ||\n\t\t\t\tc.username?.toLowerCase().includes(q) ||\n\t\t\t\tc.mobileNumber?.toLowerCase().includes(q)\n\t\t\t);\n\t\t});\n\n\treturn (\n\t\t<LocalizationProvider dateAdapter={AdapterDayjs}>\n\t\t\t<Box>\n\t\t\t{/* PAGE HEADER */}\n\t\t\t<SDKPageHeader\n\t\t\t\ttitle=\"Call History\"\n\t\t\t\tactions={\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n\t\t\t\t\t\t<AppButton\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tstartIcon={loading ? <CircularProgress size={14} color=\"inherit\" /> : <RefreshIcon sx={{ fontSize: \"0.95rem !important\" }} />}\n\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\tshowMissedCalls\n\t\t\t\t\t\t\t\t\t? fetchMissedCalls()\n\t\t\t\t\t\t\t\t\t: fetchCallHistory({\n\t\t\t\t\t\t\t\t\t\tpage: page + 1,\n\t\t\t\t\t\t\t\t\t\tpageSize: rowsPerPage,\n\t\t\t\t\t\t\t\t\t\tsearch: debouncedSearch || undefined,\n\t\t\t\t\t\t\t\t\t\tcall_type: filter === \"ALL\" ? undefined : filter,\n\t\t\t\t\t\t\t\t\t\tstart_date: startParam,\n\t\t\t\t\t\t\t\t\t\tend_date: endParam,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdisabled={loading}\n\t\t\t\t\t\t\tsx={{ height: 36 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tRefresh\n\t\t\t\t\t\t</AppButton>\n\t\t\t\t\t\t<OutlinedInput\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tvalue={search}\n\t\t\t\t\t\t\tonChange={(e) => { setSearch(e.target.value); setPage(0); }}\n\t\t\t\t\t\t\tplaceholder=\"Search\"\n\t\t\t\t\t\t\tsx={{ width: 220, fontSize: \"0.82rem\", height: 36 }}\n\t\t\t\t\t\t\tendAdornment={\n\t\t\t\t\t\t\t\t<InputAdornment position=\"end\">\n\t\t\t\t\t\t\t\t\t<Search sx={{ fontSize: 18, color: \"#999\" }} />\n\t\t\t\t\t\t\t\t</InputAdornment>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Stack>\n\t\t\t\t}\n\t\t\t/>\n\n\t\t\t<Box py={1.5} px={2}>\n\t\t\t\t{/* FILTER BAR */}\n\t\t\t\t<Stack direction=\"row\" spacing={2} alignItems=\"center\" mb={2}>\n\t\t\t\t\t<FormControlLabel\n\t\t\t\t\t\tcontrol={\n\t\t\t\t\t\t\t<Switch\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\tchecked={showMissedCalls}\n\t\t\t\t\t\t\t\tonChange={(_, checked) => { setShowMissedCalls(checked); setPage(0); }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.8rem\", color: \"#555\" }}>\n\t\t\t\t\t\t\t\tMissed Calls\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsx={{ ml: 0 }}\n\t\t\t\t\t/>\n\t\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\t\tvalue={filter}\n\t\t\t\t\t\texclusive\n\t\t\t\t\t\tonChange={(_, v) => { if (v) { setFilter(v); setPage(0); } }}\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tborder: \"1px solid #ccc\",\n\t\t\t\t\t\t\tborderRadius: \"50px\",\n\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\t\"& .MuiToggleButton-root\": {\n\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\tborderRight: \"1px solid #ccc\",\n\t\t\t\t\t\t\t\tcolor: \"#555\",\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\ttextTransform: \"uppercase\",\n\t\t\t\t\t\t\t\tfontSize: \"0.72rem\",\n\t\t\t\t\t\t\t\tpx: 2,\n\t\t\t\t\t\t\t\tpy: 0.5,\n\t\t\t\t\t\t\t\tborderRadius: 0,\n\t\t\t\t\t\t\t\t\"&:last-of-type\": { borderRight: \"none\" },\n\t\t\t\t\t\t\t\t\"&.Mui-selected\": {\n\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette.primary.main,\n\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: theme.palette.primary.dark },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleButton value=\"ALL\">All</ToggleButton>\n\t\t\t\t\t\t<ToggleButton value=\"INCOMING\">Inbound</ToggleButton>\n\t\t\t\t\t\t<ToggleButton value=\"OUTGOING\">Outbound</ToggleButton>\n\t\t\t\t\t</ToggleButtonGroup>\n\n\t\t\t\t\t{!showMissedCalls && (\n\t\t\t\t\t\t<Stack direction=\"row\" spacing={1} alignItems=\"center\">\n\t\t\t\t\t\t\t<DateRangePicker\n\t\t\t\t\t\t\t\tstartDate={startDate}\n\t\t\t\t\t\t\t\tendDate={endDate}\n\t\t\t\t\t\t\t\tonStartChange={(v) => { setStartDate(v); setPage(0); }}\n\t\t\t\t\t\t\t\tonEndChange={(v) => { setEndDate(v); setPage(0); }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\n\t\t\t\t{/* TABLE */}\n\t\t\t\t<TableContainer component={Paper} variant=\"outlined\" sx={{ display: 'flex', flexDirection: 'column' }}>\n\t\t\t\t <Box sx={{ overflowY: 'auto', maxHeight: 600 }}>\n\t\t\t\t\t<Table stickyHeader size=\"small\">\n\t\t\t\t\t\t{showMissedCalls ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<TableHead>\n\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t{MISSED_CALLS_COLS.map((col) => (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\t\t\t\tkey={col}\n\t\t\t\t\t\t\t\t\t\t\t\talign={CENTER_COLS.has(col) ? \"center\" : \"left\"}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ fontWeight: 600, backgroundColor: \"#f1f1f1\", fontSize: \"0.8rem\" }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{col}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={5} align=\"center\" sx={{ py: 4 }}>\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size={24} />\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t) : filteredMissedCalls.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={5} align=\"center\" sx={{ py: 4, color: \"#999\", fontSize: \"0.82rem\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\tNo Records Found\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\tfilteredMissedCalls.slice(page * rowsPerPage, (page + 1) * rowsPerPage).map((row, i) => (\n\t\t\t\t\t\t\t\t\t\t\t<MissedCallRow key={`${row.agentId}-${row.mobileNumber}-${i}`} row={row} />\n\t\t\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</TableBody>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<TableHead>\n\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t{CALL_HISTORY_COLS.map((col) => (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\t\t\t\tkey={col}\n\t\t\t\t\t\t\t\t\t\t\t\talign={CENTER_COLS.has(col) ? \"center\" : \"left\"}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ fontWeight: 600, backgroundColor: \"#f1f1f1\", fontSize: \"0.8rem\" }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{col}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={8} align=\"center\" sx={{ py: 4 }}>\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress />\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t) : filteredCalls.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={8} align=\"center\" sx={{ py: 4, color: \"#999\", fontSize: \"0.82rem\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\tNo Records Found\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\tfilteredCalls.map((row, i) => (\n\t\t\t\t\t\t\t\t\t\t\t<CallRow\n\t\t\t\t\t\t\t\t\t\t\t\tkey={row.call_uuid}\n\t\t\t\t\t\t\t\t\t\t\t\trow={row}\n\t\t\t\t\t\t\t\t\t\t\t\tstriped={i % 2 === 0}\n\t\t\t\t\t\t\t\t\t\t\t\tfetchRecording={fetchRecording}\n\t\t\t\t\t\t\t\t\t\t\t\tonError={(msg) => showToast(msg, \"error\")}\n\t\t\t\t\t\t\t\t\t\t\t\tonOpenAudit={setAuditUuid}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</TableBody>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Table>\n\t\t\t\t </Box>\n\t\t\t\t <TablePagination\n\t\t\t\t\t\tcomponent=\"div\"\n\t\t\t\t\t\tcount={showMissedCalls ? filteredMissedCalls.length : callsTotal}\n\t\t\t\t\t\tpage={page}\n\t\t\t\t\t\trowsPerPage={rowsPerPage}\n\t\t\t\t\t\tonPageChange={(_, p) => setPage(p)}\n\t\t\t\t\t\tonRowsPerPageChange={(e) => { setRowsPerPage(parseInt(e.target.value, 10)); setPage(0); }}\n\t\t\t\t\t\trowsPerPageOptions={[10, 15, 25, 50, 100]}\n\t\t\t\t\t\tsx={{ borderTop: '1px solid #e0e0e0' }}\n\t\t\t\t />\n\t\t\t\t</TableContainer>\n\t\t\t</Box>\n\n\t\t\t{/* AI AUDIT REPORT DIALOG */}\n\t\t\t<AuditReportDialog\n\t\t\t\topen={!!auditUuid}\n\t\t\t\tonClose={() => setAuditUuid(null)}\n\t\t\t\trowData={auditUuid ? ({ callUuid: auditUuid } as unknown as CdrRecordResponse) : undefined}\n\t\t\t/>\n\t\t\t</Box>\n\t\t</LocalizationProvider>\n\t);\n});\n\nCallHistoryContent.displayName = \"CallHistoryContent\";\n\n// ──── Missed Call Row ─────────────────────────────────────────────────────────\n\nconst MissedCallRow = memo(({ row }: { row: MissedCallDetails }) => {\n\tconst theme = useTheme();\n\treturn (\n\t\t<TableRow hover>\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\", color: theme.palette.primary.main }}>\n\t\t\t\t{row.agentId}\n\t\t\t</TableCell>\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\" }}>{row.username}</TableCell>\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\" }}>\n\t\t\t\t{row.mobileNumber} ({row.callCount})\n\t\t\t</TableCell>\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\", textTransform: \"uppercase\" }}>\n\t\t\t\t{row.callType}\n\t\t\t</TableCell>\n\t\t\t<TableCell align=\"center\">\n\t\t\t\t<Phone sx={{ color: \"#c0392b\", fontSize: 20, cursor: \"pointer\" }} />\n\t\t\t</TableCell>\n\t\t</TableRow>\n\t);\n});\n\nMissedCallRow.displayName = \"MissedCallRow\";\n\n// ──── Call Row ────────────────────────────────────────────────────────────────\n\n/* Coordinates playback so only one recording is open at a time. */\nconst activePlayers = new Set<(activeId: string) => void>();\nconst notifyPlay = (activeId: string) => {\n\tactivePlayers.forEach((fn) => fn(activeId));\n};\n\nfunction CallRow({\n\trow,\n\tstriped,\n\tfetchRecording,\n\tonError,\n\tonOpenAudit,\n}: {\n\trow: CallHistoryItem;\n\tstriped: boolean;\n\tfetchRecording: (call_uuid: string) => Promise<Blob>;\n\tonError: (msg: string) => void;\n\tonOpenAudit: (call_uuid: string) => void;\n}) {\n\tconst [audioURL, setAudioURL] = useState<string | null>(null);\n\tconst [loadingAudio, setLoadingAudio] = useState(false);\n\t// Expansion / details state (kept for future use).\n\t// const [open, setOpen] = useState(false);\n\n\tconst closePlayer = useCallback(() => {\n\t\tsetAudioURL((prev) => {\n\t\t\tif (prev && prev.startsWith(\"blob:\")) URL.revokeObjectURL(prev);\n\t\t\treturn null;\n\t\t});\n\t}, []);\n\n\t// Close this player whenever another recording starts playing.\n\tuseEffect(() => {\n\t\tconst onPlay = (activeId: string) => {\n\t\t\tif (activeId !== row.call_uuid) closePlayer();\n\t\t};\n\t\tactivePlayers.add(onPlay);\n\t\treturn () => {\n\t\t\tactivePlayers.delete(onPlay);\n\t\t};\n\t}, [row.call_uuid, closePlayer]);\n\n\tconst handlePlay = async () => {\n\t\tif (!row.recording.available) return;\n\t\tnotifyPlay(row.call_uuid);\n\t\tsetLoadingAudio(true);\n\t\ttry {\n\t\t\tconst blob = await fetchRecording(row.call_uuid);\n\t\t\tsetAudioURL(URL.createObjectURL(blob));\n\t\t} catch {\n\t\t\tonError(\"Recording not available\");\n\t\t} finally {\n\t\t\tsetLoadingAudio(false);\n\t\t}\n\t};\n\n\t// const handleToggle = () => setOpen((prev) => !prev);\n\n\tconst bg = striped ? \"#fafafa\" : \"white\";\n\tconst cellSx = { fontSize: \"0.82rem\", backgroundColor: bg };\n\n\treturn (\n\t\t<>\n\t\t\t<TableRow hover>\n\t\t\t\t<TableCell sx={{ ...cellSx, maxWidth: 130 }}>\n\t\t\t\t\t<Tooltip title={row.call_uuid} arrow>\n\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\tnoWrap\n\t\t\t\t\t\t\tsx={{ fontSize: 13, maxWidth: 130, overflow: \"hidden\", textOverflow: \"ellipsis\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{row.call_uuid}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</TableCell>\n\n\t\t\t\t<TableCell sx={cellSx}>{row.mobile_no}</TableCell>\n\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\n\t\t\t\t\t<Chip\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tlabel={row.call_type}\n\t\t\t\t\t\tcolor={row.call_type === \"INCOMING\" ? \"success\" : \"primary\"}\n\t\t\t\t\t/>\n\t\t\t\t</TableCell>\n\n\t\t\t\t<TableCell sx={cellSx}>\n\t\t\t\t\t{new Date(row.start_time).toLocaleString()}\n\t\t\t\t</TableCell>\n\n\t\t\t\t<TableCell sx={cellSx}>\n\t\t\t\t\t{row.end_time ? new Date(row.end_time).toLocaleString() : \"—\"}\n\t\t\t\t</TableCell>\n\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\n\t\t\t\t\t{row.agent_id ?? \"\"}\n\t\t\t\t</TableCell>\n\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\n\t\t\t\t\t{row.recording.available ? (\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tcolor=\"primary\"\n\t\t\t\t\t\t\tonClick={handlePlay}\n\t\t\t\t\t\t\tdisabled={loadingAudio}\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{loadingAudio ? <CircularProgress size={18} /> : <PlayArrow />}\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Chip size=\"small\" label=\"No File\" />\n\t\t\t\t\t)}\n\t\t\t\t</TableCell>\n\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\n\t\t\t\t\t<Tooltip title=\"View AI Audit Report\" arrow>\n\t\t\t\t\t\t<IconButton color=\"primary\" size=\"small\" onClick={() => onOpenAudit(row.call_uuid)}>\n\t\t\t\t\t\t\t<AssignmentIcon fontSize=\"small\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</TableCell>\n\n\t\t\t\t{/* Expansion / details toggle (kept for future use). */}\n\t\t\t\t{/* <TableCell align=\"center\" sx={cellSx}>\n\t\t\t\t\t<IconButton onClick={handleToggle} size=\"small\">\n\t\t\t\t\t\t{open ? <ExpandLess /> : <KeyboardArrowDown />}\n\t\t\t\t\t</IconButton>\n\t\t\t\t</TableCell> */}\n\t\t\t</TableRow>\n\n\t\t\t{/* Audio player row */}\n\t\t\t{audioURL && (\n\t\t\t\t<TableRow>\n\t\t\t\t\t<TableCell colSpan={8} sx={{ p: 0 }}>\n\t\t\t\t\t\t<Box p={2}>\n\t\t\t\t\t\t\t<audio\n\t\t\t\t\t\t\t\tcontrols\n\t\t\t\t\t\t\t\tautoPlay\n\t\t\t\t\t\t\t\tsrc={audioURL}\n\t\t\t\t\t\t\t\tonEnded={closePlayer}\n\t\t\t\t\t\t\t\tstyle={{ width: \"100%\" }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</TableCell>\n\t\t\t\t</TableRow>\n\t\t\t)}\n\n\t\t\t{/* Details collapse row (kept for future use). */}\n\t\t\t{/* <TableRow>\n\t\t\t\t<TableCell colSpan={8} sx={{ p: 0 }}>\n\t\t\t\t\t<Collapse in={open} unmountOnExit>\n\t\t\t\t\t\t<Box p={2} bgcolor=\"#f9fafc\" borderTop=\"1px solid #eee\">\n\t\t\t\t\t\t\t{open && <Transcript row={row} />}\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Collapse>\n\t\t\t\t</TableCell>\n\t\t\t</TableRow> */}\n\t\t</>\n\t);\n}\n\n// ──── Default Export — wraps with SDKProvider for toast context ───────────────\n\nconst CallHistory: React.FC = () => (\n\t<SDKProvider>\n\t\t<CallHistoryContent />\n\t</SDKProvider>\n);\n\nexport default CallHistory;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../call-control-sdk/lib/pages/callHistory/index.tsx"],"sourcesContent":["import React, { memo, useCallback, useEffect, useState } from \"react\";\nimport {\n\tBox,\n\tTypography,\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableContainer,\n\tTableHead,\n\tTableRow,\n\tTablePagination,\n\tToggleButton,\n\tToggleButtonGroup,\n\tIconButton,\n\tCircularProgress,\n\tChip,\n\tStack,\n\tSwitch,\n\tFormControlLabel,\n\tTooltip,\n\tInputAdornment,\n\tOutlinedInput,\n\tuseTheme,\n\tPaper,\n} from \"@mui/material\";\nimport PlayArrow from \"@mui/icons-material/PlayArrow\";\nimport Search from \"@mui/icons-material/Search\";\nimport Phone from \"@mui/icons-material/Phone\";\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\nimport AssignmentIcon from \"@mui/icons-material/Assignment\";\n// ──── Expansion / details (kept for future use) ──────────────────────────────\n// import Collapse from \"@mui/material/Collapse\";\n// import KeyboardArrowDown from \"@mui/icons-material/KeyboardArrowDown\";\n// import ExpandLess from \"@mui/icons-material/ExpandLess\";\n// import Transcript from \"../common/components/Transcript\";\nimport dayjs, { Dayjs } from \"dayjs\";\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\nimport AppButton from \"../common/components/AppButton\";\nimport DateRangePicker from \"../common/components/DateRangePicker\";\nimport AuditReportDialog from \"../common/components/AuditReport\";\nimport { SDKProvider } from \"../../components/SDKProvider\";\nimport { SDKPageHeader } from \"../../components/SDKPageHeader\";\nimport { useToast } from \"../../services/toastMessage\";\nimport { useCallHistory } from \"./useCallHistory\";\nimport type { CallHistoryItem, MissedCallDetails, CallFilter } from \"./types\";\nimport type { CdrRecordResponse } from \"../cdrReport/types\";\n\n// ──── Header cell columns ────────────────────────────────────────────────────\n\nconst CALL_HISTORY_COLS = [\"Call UID\", \"Mobile\", \"Type\", \"Start Time\", \"End Time\", \"Agent\", \"Recording\", \"AI Audit Report\"] as const;\nconst MISSED_CALLS_COLS = [\"Agent ID\", \"Agent Name\", \"Mobile No\", \"Type\", \"Actions\"] as const;\nconst CENTER_COLS = new Set([\"Type\", \"Recording\", \"Agent\", \"AI Audit Report\", \"Actions\"]);\n\n// ──── Main content (needs SDKProvider above it for useToast) ─────────────────\n\nconst CallHistoryContent = memo(() => {\n\tconst theme = useTheme();\n\tconst { showToast } = useToast();\n\tconst { calls, callsTotal, missedCalls, loading, fetchCallHistory, fetchMissedCalls, fetchRecording } =\n\t\tuseCallHistory();\n\n\tconst [filter, setFilter] = useState<CallFilter>(\"ALL\");\n\tconst [search, setSearch] = useState(\"\");\n\tconst [showMissedCalls, setShowMissedCalls] = useState(false);\n\tconst [page, setPage] = useState(0);\n\tconst [rowsPerPage, setRowsPerPage] = useState(10);\n\n\t// Date range filter (sent to the server for call history).\n\tconst [startDate, setStartDate] = useState<Dayjs | null>(dayjs().startOf(\"day\"));\n\tconst [endDate, setEndDate] = useState<Dayjs | null>(dayjs());\n\n\t// Call UID whose AI audit report dialog is open (null = closed).\n\tconst [auditUuid, setAuditUuid] = useState<string | null>(null);\n\n\t// Debounced search (sent to the server for call history).\n\tconst [debouncedSearch, setDebouncedSearch] = useState(\"\");\n\tuseEffect(() => {\n\t\tconst t = setTimeout(() => setDebouncedSearch(search.trim()), 400);\n\t\treturn () => clearTimeout(t);\n\t}, [search]);\n\n\t// Serialised date range (YYYY-MM-DDTHH:mm:ss) — undefined when unset.\n\tconst startParam = startDate ? startDate.format(\"YYYY-MM-DDTHH:mm:ss\") : undefined;\n\tconst endParam = endDate ? endDate.format(\"YYYY-MM-DDTHH:mm:ss\") : undefined;\n\n\tuseEffect(() => {\n\t\tif (showMissedCalls) {\n\t\t\tfetchMissedCalls();\n\t\t} else {\n\t\t\t// Call history is paginated + searched + filtered server-side.\n\t\t\tfetchCallHistory({\n\t\t\t\tpage: page + 1,\n\t\t\t\tpageSize: rowsPerPage,\n\t\t\t\tsearch: debouncedSearch || undefined,\n\t\t\t\tcall_type: filter === \"ALL\" ? undefined : filter,\n\t\t\t\tstart_date: startParam,\n\t\t\t\tend_date: endParam,\n\t\t\t});\n\t\t}\n\t}, [showMissedCalls, page, rowsPerPage, filter, debouncedSearch, startParam, endParam, fetchCallHistory, fetchMissedCalls]);\n\n\t// Call history is filtered/searched server-side, so render the rows as-is.\n\tconst filteredCalls = calls;\n\n\tconst filteredMissedCalls = missedCalls\n\t\t.filter((c) => filter === \"ALL\" || c.callType?.toUpperCase() === filter)\n\t\t.filter((c) => {\n\t\t\tconst q = search.toLowerCase();\n\t\t\treturn (\n\t\t\t\tc.agentId?.toLowerCase().includes(q) ||\n\t\t\t\tc.username?.toLowerCase().includes(q) ||\n\t\t\t\tc.mobileNumber?.toLowerCase().includes(q)\n\t\t\t);\n\t\t});\n\n\treturn (\n\t\t<LocalizationProvider dateAdapter={AdapterDayjs}>\n\t\t\t<Box>\n\t\t\t{/* PAGE HEADER */}\n\t\t\t<SDKPageHeader\n\t\t\t\ttitle=\"Call History\"\n\t\t\t\tactions={\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n\t\t\t\t\t\t<AppButton\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tstartIcon={loading ? <CircularProgress size={14} color=\"inherit\" /> : <RefreshIcon sx={{ fontSize: \"0.95rem !important\" }} />}\n\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\tshowMissedCalls\n\t\t\t\t\t\t\t\t\t? fetchMissedCalls()\n\t\t\t\t\t\t\t\t\t: fetchCallHistory({\n\t\t\t\t\t\t\t\t\t\tpage: page + 1,\n\t\t\t\t\t\t\t\t\t\tpageSize: rowsPerPage,\n\t\t\t\t\t\t\t\t\t\tsearch: debouncedSearch || undefined,\n\t\t\t\t\t\t\t\t\t\tcall_type: filter === \"ALL\" ? undefined : filter,\n\t\t\t\t\t\t\t\t\t\tstart_date: startParam,\n\t\t\t\t\t\t\t\t\t\tend_date: endParam,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdisabled={loading}\n\t\t\t\t\t\t\tsx={{ height: 36 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tRefresh\n\t\t\t\t\t\t</AppButton>\n\t\t\t\t\t\t<OutlinedInput\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tvalue={search}\n\t\t\t\t\t\t\tonChange={(e) => { setSearch(e.target.value); setPage(0); }}\n\t\t\t\t\t\t\tplaceholder=\"Search\"\n\t\t\t\t\t\t\tsx={{ width: 220, fontSize: \"0.82rem\", height: 36 }}\n\t\t\t\t\t\t\tendAdornment={\n\t\t\t\t\t\t\t\t<InputAdornment position=\"end\">\n\t\t\t\t\t\t\t\t\t<Search sx={{ fontSize: 18, color: \"#999\" }} />\n\t\t\t\t\t\t\t\t</InputAdornment>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Stack>\n\t\t\t\t}\n\t\t\t/>\n\n\t\t\t<Box py={1.5} px={2}>\n\t\t\t\t{/* FILTER BAR */}\n\t\t\t\t<Stack direction=\"row\" spacing={2} alignItems=\"center\" mb={2}>\n\t\t\t\t\t<FormControlLabel\n\t\t\t\t\t\tcontrol={\n\t\t\t\t\t\t\t<Switch\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\tchecked={showMissedCalls}\n\t\t\t\t\t\t\t\tonChange={(_, checked) => { setShowMissedCalls(checked); setPage(0); }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.8rem\", color: \"#555\" }}>\n\t\t\t\t\t\t\t\tMissed Calls\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsx={{ ml: 0 }}\n\t\t\t\t\t/>\n\t\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\t\tvalue={filter}\n\t\t\t\t\t\texclusive\n\t\t\t\t\t\tonChange={(_, v) => { if (v) { setFilter(v); setPage(0); } }}\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tborder: \"1px solid #ccc\",\n\t\t\t\t\t\t\tborderRadius: \"50px\",\n\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\t\"& .MuiToggleButton-root\": {\n\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\tborderRight: \"1px solid #ccc\",\n\t\t\t\t\t\t\t\tcolor: \"#555\",\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\ttextTransform: \"uppercase\",\n\t\t\t\t\t\t\t\tfontSize: \"0.72rem\",\n\t\t\t\t\t\t\t\tpx: 2,\n\t\t\t\t\t\t\t\tpy: 0.5,\n\t\t\t\t\t\t\t\tborderRadius: 0,\n\t\t\t\t\t\t\t\t\"&:last-of-type\": { borderRight: \"none\" },\n\t\t\t\t\t\t\t\t\"&.Mui-selected\": {\n\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette.primary.main,\n\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: theme.palette.primary.dark },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleButton value=\"ALL\">All</ToggleButton>\n\t\t\t\t\t\t<ToggleButton value=\"INCOMING\">Inbound</ToggleButton>\n\t\t\t\t\t\t<ToggleButton value=\"OUTGOING\">Outbound</ToggleButton>\n\t\t\t\t\t</ToggleButtonGroup>\n\n\t\t\t\t\t{!showMissedCalls && (\n\t\t\t\t\t\t<Stack direction=\"row\" spacing={1} alignItems=\"center\">\n\t\t\t\t\t\t\t<DateRangePicker\n\t\t\t\t\t\t\t\tstartDate={startDate}\n\t\t\t\t\t\t\t\tendDate={endDate}\n\t\t\t\t\t\t\t\tonStartChange={(v) => { setStartDate(v); setPage(0); }}\n\t\t\t\t\t\t\t\tonEndChange={(v) => { setEndDate(v); setPage(0); }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\n\t\t\t\t{/* TABLE */}\n\t\t\t\t<TableContainer component={Paper} variant=\"outlined\" sx={{ display: 'flex', flexDirection: 'column' }}>\n\t\t\t\t <Box sx={{ overflowY: 'auto', maxHeight: 600 }}>\n\t\t\t\t\t<Table stickyHeader size=\"small\">\n\t\t\t\t\t\t{showMissedCalls ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<TableHead>\n\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t{MISSED_CALLS_COLS.map((col) => (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\t\t\t\tkey={col}\n\t\t\t\t\t\t\t\t\t\t\t\talign={CENTER_COLS.has(col) ? \"center\" : \"left\"}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ fontWeight: 600, backgroundColor: \"#f1f1f1\", fontSize: \"0.8rem\" }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{col}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={5} align=\"center\" sx={{ py: 4 }}>\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size={24} />\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t) : filteredMissedCalls.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={5} align=\"center\" sx={{ py: 4, color: \"#999\", fontSize: \"0.82rem\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\tNo Records Found\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\tfilteredMissedCalls.slice(page * rowsPerPage, (page + 1) * rowsPerPage).map((row, i) => (\n\t\t\t\t\t\t\t\t\t\t\t<MissedCallRow key={`${row.agentId}-${row.mobileNumber}-${i}`} row={row} />\n\t\t\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</TableBody>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<TableHead>\n\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t{CALL_HISTORY_COLS.map((col) => (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\t\t\t\tkey={col}\n\t\t\t\t\t\t\t\t\t\t\t\talign={CENTER_COLS.has(col) ? \"center\" : \"left\"}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ fontWeight: 600, backgroundColor: \"#f1f1f1\", fontSize: \"0.8rem\" }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{col}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={8} align=\"center\" sx={{ py: 4 }}>\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress />\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t) : filteredCalls.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={8} align=\"center\" sx={{ py: 4, color: \"#999\", fontSize: \"0.82rem\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\tNo Records Found\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\tfilteredCalls.map((row, i) => (\n\t\t\t\t\t\t\t\t\t\t\t<CallRow\n\t\t\t\t\t\t\t\t\t\t\t\tkey={row.call_uuid}\n\t\t\t\t\t\t\t\t\t\t\t\trow={row}\n\t\t\t\t\t\t\t\t\t\t\t\tstriped={i % 2 === 0}\n\t\t\t\t\t\t\t\t\t\t\t\tfetchRecording={fetchRecording}\n\t\t\t\t\t\t\t\t\t\t\t\tonError={(msg) => showToast(msg, \"error\")}\n\t\t\t\t\t\t\t\t\t\t\t\tonOpenAudit={setAuditUuid}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</TableBody>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Table>\n\t\t\t\t </Box>\n\t\t\t\t <TablePagination\n\t\t\t\t\t\tcomponent=\"div\"\n\t\t\t\t\t\tcount={showMissedCalls ? filteredMissedCalls.length : callsTotal}\n\t\t\t\t\t\tpage={page}\n\t\t\t\t\t\trowsPerPage={rowsPerPage}\n\t\t\t\t\t\tonPageChange={(_, p) => setPage(p)}\n\t\t\t\t\t\tonRowsPerPageChange={(e) => { setRowsPerPage(parseInt(e.target.value, 10)); setPage(0); }}\n\t\t\t\t\t\trowsPerPageOptions={[10, 15, 25, 50, 100]}\n\t\t\t\t\t\tsx={{ borderTop: '1px solid #e0e0e0' }}\n\t\t\t\t />\n\t\t\t\t</TableContainer>\n\t\t\t</Box>\n\n\t\t\t{/* AI AUDIT REPORT DIALOG */}\n\t\t\t<AuditReportDialog\n\t\t\t\topen={!!auditUuid}\n\t\t\t\tonClose={() => setAuditUuid(null)}\n\t\t\t\trowData={auditUuid ? ({ callUuid: auditUuid } as unknown as CdrRecordResponse) : undefined}\n\t\t\t/>\n\t\t\t</Box>\n\t\t</LocalizationProvider>\n\t);\n});\n\nCallHistoryContent.displayName = \"CallHistoryContent\";\n\n// ──── Missed Call Row ─────────────────────────────────────────────────────────\n\nconst MissedCallRow = memo(({ row }: { row: MissedCallDetails }) => {\n\tconst theme = useTheme();\n\treturn (\n\t\t<TableRow hover>\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\", color: theme.palette.primary.main }}>\n\t\t\t\t{row.agentId}\n\t\t\t</TableCell>\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\" }}>{row.username}</TableCell>\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\" }}>\n\t\t\t\t{row.mobileNumber} ({row.callCount})\n\t\t\t</TableCell>\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\", textTransform: \"uppercase\" }}>\n\t\t\t\t{row.callType}\n\t\t\t</TableCell>\n\t\t\t<TableCell align=\"center\">\n\t\t\t\t<Phone sx={{ color: \"#c0392b\", fontSize: 20, cursor: \"pointer\" }} />\n\t\t\t</TableCell>\n\t\t</TableRow>\n\t);\n});\n\nMissedCallRow.displayName = \"MissedCallRow\";\n\n// ──── Call Row ────────────────────────────────────────────────────────────────\n\n/* Coordinates playback so only one recording is open at a time. */\nconst activePlayers = new Set<(activeId: string) => void>();\nconst notifyPlay = (activeId: string) => {\n\tactivePlayers.forEach((fn) => fn(activeId));\n};\n\nfunction CallRow({\n\trow,\n\tstriped,\n\tfetchRecording,\n\tonError,\n\tonOpenAudit,\n}: {\n\trow: CallHistoryItem;\n\tstriped: boolean;\n\tfetchRecording: (call_uuid: string) => Promise<Blob>;\n\tonError: (msg: string) => void;\n\tonOpenAudit: (call_uuid: string) => void;\n}) {\n\tconst [audioURL, setAudioURL] = useState<string | null>(null);\n\tconst [loadingAudio, setLoadingAudio] = useState(false);\n\t// Expansion / details state (kept for future use).\n\t// const [open, setOpen] = useState(false);\n\n\tconst closePlayer = useCallback(() => {\n\t\tsetAudioURL((prev) => {\n\t\t\tif (prev && prev.startsWith(\"blob:\")) URL.revokeObjectURL(prev);\n\t\t\treturn null;\n\t\t});\n\t}, []);\n\n\t// Close this player whenever another recording starts playing.\n\tuseEffect(() => {\n\t\tconst onPlay = (activeId: string) => {\n\t\t\tif (activeId !== row.call_uuid) closePlayer();\n\t\t};\n\t\tactivePlayers.add(onPlay);\n\t\treturn () => {\n\t\t\tactivePlayers.delete(onPlay);\n\t\t};\n\t}, [row.call_uuid, closePlayer]);\n\n\tconst handlePlay = async () => {\n\t\tif (!row.recording.available) return;\n\t\tnotifyPlay(row.call_uuid);\n\t\tsetLoadingAudio(true);\n\t\ttry {\n\t\t\tconst blob = await fetchRecording(row.call_uuid);\n\t\t\tsetAudioURL(URL.createObjectURL(blob));\n\t\t} catch {\n\t\t\tonError(\"Recording not available\");\n\t\t} finally {\n\t\t\tsetLoadingAudio(false);\n\t\t}\n\t};\n\n\t// const handleToggle = () => setOpen((prev) => !prev);\n\n\tconst bg = striped ? \"#fafafa\" : \"white\";\n\tconst cellSx = { fontSize: \"0.82rem\", backgroundColor: bg };\n\n\treturn (\n\t\t<>\n\t\t\t<TableRow hover>\n\t\t\t\t<TableCell sx={{ ...cellSx, maxWidth: 130 }}>\n\t\t\t\t\t<Tooltip title={row.call_uuid} arrow>\n\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\tnoWrap\n\t\t\t\t\t\t\tsx={{ fontSize: 13, maxWidth: 130, overflow: \"hidden\", textOverflow: \"ellipsis\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{row.call_uuid}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</TableCell>\n\n\t\t\t\t<TableCell sx={cellSx}>{row.mobile_no}</TableCell>\n\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\n\t\t\t\t\t<Chip\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tlabel={row.call_type}\n\t\t\t\t\t\tcolor={row.call_type === \"INCOMING\" ? \"success\" : \"primary\"}\n\t\t\t\t\t/>\n\t\t\t\t</TableCell>\n\n\t\t\t\t<TableCell sx={cellSx}>\n\t\t\t\t\t{new Date(row.start_time).toLocaleString()}\n\t\t\t\t</TableCell>\n\n\t\t\t\t<TableCell sx={cellSx}>\n\t\t\t\t\t{row.end_time ? new Date(row.end_time).toLocaleString() : \"—\"}\n\t\t\t\t</TableCell>\n\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\n\t\t\t\t\t{row.user_id ?? \"\"}\n\t\t\t\t</TableCell>\n\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\n\t\t\t\t\t{row.recording.available ? (\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tcolor=\"primary\"\n\t\t\t\t\t\t\tonClick={handlePlay}\n\t\t\t\t\t\t\tdisabled={loadingAudio}\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{loadingAudio ? <CircularProgress size={18} /> : <PlayArrow />}\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Chip size=\"small\" label=\"No File\" />\n\t\t\t\t\t)}\n\t\t\t\t</TableCell>\n\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\n\t\t\t\t\t<Tooltip title=\"View AI Audit Report\" arrow>\n\t\t\t\t\t\t<IconButton color=\"primary\" size=\"small\" onClick={() => onOpenAudit(row.call_uuid)}>\n\t\t\t\t\t\t\t<AssignmentIcon fontSize=\"small\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</TableCell>\n\n\t\t\t\t{/* Expansion / details toggle (kept for future use). */}\n\t\t\t\t{/* <TableCell align=\"center\" sx={cellSx}>\n\t\t\t\t\t<IconButton onClick={handleToggle} size=\"small\">\n\t\t\t\t\t\t{open ? <ExpandLess /> : <KeyboardArrowDown />}\n\t\t\t\t\t</IconButton>\n\t\t\t\t</TableCell> */}\n\t\t\t</TableRow>\n\n\t\t\t{/* Audio player row */}\n\t\t\t{audioURL && (\n\t\t\t\t<TableRow>\n\t\t\t\t\t<TableCell colSpan={8} sx={{ p: 0 }}>\n\t\t\t\t\t\t<Box p={2}>\n\t\t\t\t\t\t\t<audio\n\t\t\t\t\t\t\t\tcontrols\n\t\t\t\t\t\t\t\tautoPlay\n\t\t\t\t\t\t\t\tsrc={audioURL}\n\t\t\t\t\t\t\t\tonEnded={closePlayer}\n\t\t\t\t\t\t\t\tstyle={{ width: \"100%\" }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</TableCell>\n\t\t\t\t</TableRow>\n\t\t\t)}\n\n\t\t\t{/* Details collapse row (kept for future use). */}\n\t\t\t{/* <TableRow>\n\t\t\t\t<TableCell colSpan={8} sx={{ p: 0 }}>\n\t\t\t\t\t<Collapse in={open} unmountOnExit>\n\t\t\t\t\t\t<Box p={2} bgcolor=\"#f9fafc\" borderTop=\"1px solid #eee\">\n\t\t\t\t\t\t\t{open && <Transcript row={row} />}\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Collapse>\n\t\t\t\t</TableCell>\n\t\t\t</TableRow> */}\n\t\t</>\n\t);\n}\n\n// ──── Default Export — wraps with SDKProvider for toast context ───────────────\n\nconst CallHistory: React.FC = () => (\n\t<SDKProvider>\n\t\t<CallHistoryContent />\n\t</SDKProvider>\n);\n\nexport default CallHistory;\n"],"mappings":"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","names":[]}
|
|
@@ -3196,17 +3196,17 @@ var CampaignsContent = memo(function CampaignsContent2() {
|
|
|
3196
3196
|
const { chip: prioChip, label: prioLabel } = leadPriorityChipSx(lead.priority);
|
|
3197
3197
|
const isManualPreview = ((leadsMeta == null ? void 0 : leadsMeta.dialingMode) || (sc == null ? void 0 : sc.dialingMode) || "").toUpperCase() === "PREVIEW";
|
|
3198
3198
|
return /* @__PURE__ */ jsxs(TableRow, { sx: tableRowSx, children: [
|
|
3199
|
-
/* @__PURE__ */ jsx2(TableCell, { sx: bodyCellSx, children: isManualPreview
|
|
3199
|
+
/* @__PURE__ */ jsx2(TableCell, { sx: bodyCellSx, children: isManualPreview ? /* @__PURE__ */ jsx2(Tooltip, { title: dialTooltip, children: /* @__PURE__ */ jsx2(
|
|
3200
3200
|
Box,
|
|
3201
3201
|
{
|
|
3202
3202
|
component: "span",
|
|
3203
|
-
onClick: () => handleDialPreview(lead.id),
|
|
3203
|
+
onClick: isDialable ? () => handleDialPreview(lead.id) : void 0,
|
|
3204
3204
|
sx: {
|
|
3205
|
-
color: "#1A5F6C",
|
|
3206
|
-
fontWeight: 600,
|
|
3207
|
-
cursor: "pointer",
|
|
3208
|
-
textDecoration: "underline",
|
|
3209
|
-
"&:hover": { color: "#12454f" }
|
|
3205
|
+
color: isDialable ? "#1A5F6C" : "inherit",
|
|
3206
|
+
fontWeight: isDialable ? 600 : "inherit",
|
|
3207
|
+
cursor: isDialable ? "pointer" : "default",
|
|
3208
|
+
textDecoration: isDialable ? "underline" : "none",
|
|
3209
|
+
"&:hover": isDialable ? { color: "#12454f" } : void 0
|
|
3210
3210
|
},
|
|
3211
3211
|
children: lead.phoneNumber
|
|
3212
3212
|
}
|
|
@@ -3226,7 +3226,7 @@ var CampaignsContent = memo(function CampaignsContent2() {
|
|
|
3226
3226
|
IconButton,
|
|
3227
3227
|
{
|
|
3228
3228
|
size: "small",
|
|
3229
|
-
onClick: () => handleDialPreview(lead.id),
|
|
3229
|
+
onClick: isDialable ? () => handleDialPreview(lead.id) : void 0,
|
|
3230
3230
|
disabled: !isDialable,
|
|
3231
3231
|
sx: {
|
|
3232
3232
|
color: isDialable ? "#2e7d32" : "#bdbdbd",
|
|
@@ -3447,4 +3447,4 @@ var campaigns_default = Campaigns;
|
|
|
3447
3447
|
export {
|
|
3448
3448
|
campaigns_default as default
|
|
3449
3449
|
};
|
|
3450
|
-
//# sourceMappingURL=campaigns-
|
|
3450
|
+
//# sourceMappingURL=campaigns-6WLCKIGO.mjs.map
|