ahs-cti 0.0.15 → 0.0.17

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.
@@ -384,7 +384,7 @@ function CallRow({
384
384
  ) }),
385
385
  /* @__PURE__ */ jsx(TableCell_default, { sx: cellSx, children: new Date(row.start_time).toLocaleString() }),
386
386
  /* @__PURE__ */ jsx(TableCell_default, { sx: cellSx, children: row.end_time ? new Date(row.end_time).toLocaleString() : "\u2014" }),
387
- /* @__PURE__ */ jsx(TableCell_default, { align: "center", sx: cellSx, children: (_a = row.agent_id) != null ? _a : "" }),
387
+ /* @__PURE__ */ jsx(TableCell_default, { align: "center", sx: cellSx, children: (_a = row.user_id) != null ? _a : "" }),
388
388
  /* @__PURE__ */ jsx(TableCell_default, { align: "center", sx: cellSx, children: row.recording.available ? /* @__PURE__ */ jsx(
389
389
  IconButton_default,
390
390
  {
@@ -414,4 +414,4 @@ var callHistory_default = CallHistory;
414
414
  export {
415
415
  callHistory_default as default
416
416
  };
417
- //# sourceMappingURL=callHistory-PHNTU2XO.mjs.map
417
+ //# sourceMappingURL=callHistory-XCN3EARD.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":["dayjs"]}
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":["dayjs"]}
@@ -86,7 +86,7 @@ import {
86
86
  } from "./chunk-SLVZODYI.mjs";
87
87
 
88
88
  // call-control-sdk/lib/pages/campaigns/index.tsx
89
- import React, { memo, useCallback as useCallback2, useEffect, useRef, useState as useState2 } from "react";
89
+ import { memo, useCallback as useCallback2, useEffect, useRef, useState as useState2 } from "react";
90
90
 
91
91
  // node_modules/@mui/icons-material/Add.mjs
92
92
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -2333,16 +2333,7 @@ var CampaignsContent = memo(function CampaignsContent2() {
2333
2333
  downloadLeadTemplate,
2334
2334
  exportLeads
2335
2335
  } = useLeads();
2336
- const displayLeads = React.useMemo(() => {
2337
- const PENDING_STATES = ["PENDING", "SCHEDULED"];
2338
- const ts = (v) => v ? new Date(v).getTime() : 0;
2339
- return [...leads].sort((a, b) => {
2340
- const ap = PENDING_STATES.includes((a.status || "").toUpperCase());
2341
- const bp = PENDING_STATES.includes((b.status || "").toUpperCase());
2342
- if (ap !== bp) return ap ? -1 : 1;
2343
- return ts(a.createdAt) - ts(b.createdAt);
2344
- });
2345
- }, [leads]);
2336
+ const displayLeads = leads;
2346
2337
  const { fetchQueues } = useQueues();
2347
2338
  const [queueNameMap, setQueueNameMap] = useState2({});
2348
2339
  useEffect(() => {
@@ -3256,17 +3247,17 @@ var CampaignsContent = memo(function CampaignsContent2() {
3256
3247
  const { chip: prioChip, label: prioLabel } = leadPriorityChipSx(lead.priority);
3257
3248
  const isManualPreview = ((leadsMeta == null ? void 0 : leadsMeta.dialingMode) || (sc == null ? void 0 : sc.dialingMode) || "").toUpperCase() === "PREVIEW";
3258
3249
  return /* @__PURE__ */ jsxs(TableRow_default, { sx: tableRowSx, children: [
3259
- /* @__PURE__ */ jsx2(TableCell_default, { sx: bodyCellSx, children: isManualPreview && isDialable ? /* @__PURE__ */ jsx2(Tooltip_default, { title: dialTooltip, children: /* @__PURE__ */ jsx2(
3250
+ /* @__PURE__ */ jsx2(TableCell_default, { sx: bodyCellSx, children: isManualPreview ? /* @__PURE__ */ jsx2(Tooltip_default, { title: dialTooltip, children: /* @__PURE__ */ jsx2(
3260
3251
  Box_default,
3261
3252
  {
3262
3253
  component: "span",
3263
- onClick: () => handleDialPreview(lead.id),
3254
+ onClick: isDialable ? () => handleDialPreview(lead.id) : void 0,
3264
3255
  sx: {
3265
- color: "#1A5F6C",
3266
- fontWeight: 600,
3267
- cursor: "pointer",
3268
- textDecoration: "underline",
3269
- "&:hover": { color: "#12454f" }
3256
+ color: isDialable ? "#1A5F6C" : "inherit",
3257
+ fontWeight: isDialable ? 600 : "inherit",
3258
+ cursor: isDialable ? "pointer" : "default",
3259
+ textDecoration: isDialable ? "underline" : "none",
3260
+ "&:hover": isDialable ? { color: "#12454f" } : void 0
3270
3261
  },
3271
3262
  children: lead.phoneNumber
3272
3263
  }
@@ -3286,7 +3277,7 @@ var CampaignsContent = memo(function CampaignsContent2() {
3286
3277
  IconButton_default,
3287
3278
  {
3288
3279
  size: "small",
3289
- onClick: () => handleDialPreview(lead.id),
3280
+ onClick: isDialable ? () => handleDialPreview(lead.id) : void 0,
3290
3281
  disabled: !isDialable,
3291
3282
  sx: {
3292
3283
  color: isDialable ? "#2e7d32" : "#bdbdbd",
@@ -3507,4 +3498,4 @@ var campaigns_default = Campaigns;
3507
3498
  export {
3508
3499
  campaigns_default as default
3509
3500
  };
3510
- //# sourceMappingURL=campaigns-CRLTSO5Z.mjs.map
3501
+ //# sourceMappingURL=campaigns-MIGC3F6J.mjs.map