ahs-cti 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agentDetailReport-ZR7U2LLB.mjs +17 -0
- package/dist/{agentPerformanceReport-U2QGVTXF.mjs → agentPerformanceReport-JZK5DN5E.mjs} +59 -57
- package/dist/{agentPerformanceReport-U2QGVTXF.mjs.map → agentPerformanceReport-JZK5DN5E.mjs.map} +1 -1
- package/dist/{auditReport-DEVQDTDT.mjs → auditReport-6ZUJ4UFO.mjs} +5 -5
- package/dist/{callHistory-MRBBY3UO.mjs → callHistory-T3M76D4B.mjs} +147 -156
- package/dist/{callHistory-MRBBY3UO.mjs.map → callHistory-T3M76D4B.mjs.map} +1 -1
- package/dist/{campaigns-ERO3QM6I.mjs → campaigns-5PVHXBSD.mjs} +384 -386
- package/dist/{campaigns-ERO3QM6I.mjs.map → campaigns-5PVHXBSD.mjs.map} +1 -1
- package/dist/{caroQualityAuditDashboard-NRWY6SEC.mjs → caroQualityAuditDashboard-EUDYZ3QY.mjs} +6 -5
- package/dist/{caroQualityAuditDashboard-NRWY6SEC.mjs.map → caroQualityAuditDashboard-EUDYZ3QY.mjs.map} +1 -1
- package/dist/{caroVoiceAI-Z5BDDDSY.mjs → caroVoiceAI-GGJCVUIQ.mjs} +5 -4
- package/dist/{caroVoiceAI-Z5BDDDSY.mjs.map → caroVoiceAI-GGJCVUIQ.mjs.map} +1 -1
- package/dist/{cdrReport-EZNOCELK.mjs → cdrReport-ZMDHSZUW.mjs} +101 -100
- package/dist/{cdrReport-EZNOCELK.mjs.map → cdrReport-ZMDHSZUW.mjs.map} +1 -1
- package/dist/{chunk-53DYH64M.mjs → chunk-2M3YEXYA.mjs} +91 -64
- package/dist/chunk-2M3YEXYA.mjs.map +1 -0
- package/dist/{chunk-ISQBOS5Q.mjs → chunk-33QNSXP7.mjs} +160 -160
- package/dist/{chunk-ISQBOS5Q.mjs.map → chunk-33QNSXP7.mjs.map} +1 -1
- package/dist/{chunk-YFW47Y76.mjs → chunk-3J7KQNEU.mjs} +15 -12
- package/dist/{chunk-YFW47Y76.mjs.map → chunk-3J7KQNEU.mjs.map} +1 -1
- package/dist/{chunk-MBHP7UOP.mjs → chunk-6WLG2PXL.mjs} +2 -2
- package/dist/{chunk-MBXHRFGP.mjs → chunk-7LE2VTAI.mjs} +2 -2
- package/dist/{chunk-MFZKONNR.mjs → chunk-AOJRUZTO.mjs} +2 -2
- package/dist/chunk-DF5EFKXC.mjs +28690 -0
- package/dist/chunk-DF5EFKXC.mjs.map +1 -0
- package/dist/{chunk-5FSMIU5K.mjs → chunk-DJP744FF.mjs} +2 -2
- package/dist/{chunk-BVQNDAS6.mjs → chunk-DNTGBNZD.mjs} +18 -14
- package/dist/{chunk-BVQNDAS6.mjs.map → chunk-DNTGBNZD.mjs.map} +1 -1
- package/dist/{chunk-AJQBR3AZ.mjs → chunk-E6KYWWAI.mjs} +4243 -7804
- package/dist/chunk-E6KYWWAI.mjs.map +1 -0
- package/dist/{chunk-3DOSR6LQ.mjs → chunk-FRKV2U3I.mjs} +2 -2
- package/dist/{chunk-ICGEHYJL.mjs → chunk-H7GRWLYI.mjs} +5 -5
- package/dist/{chunk-6MURUWDX.mjs → chunk-IDZWA6HG.mjs} +154 -156
- package/dist/{chunk-6MURUWDX.mjs.map → chunk-IDZWA6HG.mjs.map} +1 -1
- package/dist/chunk-LHE4QGJJ.mjs +10920 -0
- package/dist/chunk-LHE4QGJJ.mjs.map +1 -0
- package/dist/{chunk-HBR2JS4C.mjs → chunk-NAZO4HKB.mjs} +8 -4
- package/dist/{chunk-HBR2JS4C.mjs.map → chunk-NAZO4HKB.mjs.map} +1 -1
- package/dist/{chunk-DXZIYCNQ.mjs → chunk-OHJIW3I3.mjs} +2 -2
- package/dist/chunk-Q6G3MPS7.mjs +37797 -0
- package/dist/chunk-Q6G3MPS7.mjs.map +1 -0
- package/dist/{chunk-QPOHVXUK.mjs → chunk-U2UDKXMB.mjs} +2 -2
- package/dist/{chunk-XMRM5VR4.mjs → chunk-VBIDPX5Z.mjs} +18 -14
- package/dist/{chunk-XMRM5VR4.mjs.map → chunk-VBIDPX5Z.mjs.map} +1 -1
- package/dist/{chunk-6ICPXSN6.mjs → chunk-VVDJLUYT.mjs} +8 -4
- package/dist/{chunk-6ICPXSN6.mjs.map → chunk-VVDJLUYT.mjs.map} +1 -1
- package/dist/{chunk-XA5SCAZJ.mjs → chunk-WTBVFN4H.mjs} +2 -2
- package/dist/{chunk-RSL5OBRQ.mjs → chunk-YAQYTUTX.mjs} +2 -2
- package/dist/index.js +117240 -32148
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +276 -296
- package/dist/index.mjs.map +1 -1
- package/dist/{liveStatus-F6AKCC27.mjs → liveStatus-YSBYSVOO.mjs} +123 -122
- package/dist/{liveStatus-F6AKCC27.mjs.map → liveStatus-YSBYSVOO.mjs.map} +1 -1
- package/dist/{loginReport-MWTI4G6O.mjs → loginReport-YIVBJVJD.mjs} +118 -116
- package/dist/{loginReport-MWTI4G6O.mjs.map → loginReport-YIVBJVJD.mjs.map} +1 -1
- package/dist/managementDashboard-7EMQC2UA.mjs +536 -0
- package/dist/{managementDashboard-6UBOCLBA.mjs.map → managementDashboard-7EMQC2UA.mjs.map} +1 -1
- package/dist/{qualityAuditDashboard-ZJEEAMBS.mjs → qualityAuditDashboard-ENGQN2WQ.mjs} +6 -5
- package/dist/{qualityAuditDashboard-ZJEEAMBS.mjs.map → qualityAuditDashboard-ENGQN2WQ.mjs.map} +1 -1
- package/package.json +1 -1
- package/dist/agentDetailReport-F7XZLVVO.mjs +0 -16
- package/dist/chunk-53DYH64M.mjs.map +0 -1
- package/dist/chunk-AJQBR3AZ.mjs.map +0 -1
- package/dist/chunk-Q7FIRWF2.mjs +0 -1067
- package/dist/chunk-Q7FIRWF2.mjs.map +0 -1
- package/dist/chunk-UB5HSUGK.mjs +0 -65
- package/dist/chunk-UB5HSUGK.mjs.map +0 -1
- package/dist/managementDashboard-6UBOCLBA.mjs +0 -536
- /package/dist/{agentDetailReport-F7XZLVVO.mjs.map → agentDetailReport-ZR7U2LLB.mjs.map} +0 -0
- /package/dist/{auditReport-DEVQDTDT.mjs.map → auditReport-6ZUJ4UFO.mjs.map} +0 -0
- /package/dist/{chunk-MBHP7UOP.mjs.map → chunk-6WLG2PXL.mjs.map} +0 -0
- /package/dist/{chunk-MBXHRFGP.mjs.map → chunk-7LE2VTAI.mjs.map} +0 -0
- /package/dist/{chunk-MFZKONNR.mjs.map → chunk-AOJRUZTO.mjs.map} +0 -0
- /package/dist/{chunk-5FSMIU5K.mjs.map → chunk-DJP744FF.mjs.map} +0 -0
- /package/dist/{chunk-3DOSR6LQ.mjs.map → chunk-FRKV2U3I.mjs.map} +0 -0
- /package/dist/{chunk-ICGEHYJL.mjs.map → chunk-H7GRWLYI.mjs.map} +0 -0
- /package/dist/{chunk-DXZIYCNQ.mjs.map → chunk-OHJIW3I3.mjs.map} +0 -0
- /package/dist/{chunk-QPOHVXUK.mjs.map → chunk-U2UDKXMB.mjs.map} +0 -0
- /package/dist/{chunk-XA5SCAZJ.mjs.map → chunk-WTBVFN4H.mjs.map} +0 -0
- /package/dist/{chunk-RSL5OBRQ.mjs.map → chunk-YAQYTUTX.mjs.map} +0 -0
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ReportFilterBar,
|
|
3
|
+
headCellSx
|
|
4
|
+
} from "./chunk-2M3YEXYA.mjs";
|
|
5
|
+
import "./chunk-WTBVFN4H.mjs";
|
|
6
|
+
import {
|
|
7
|
+
Bar,
|
|
8
|
+
CartesianGrid,
|
|
9
|
+
ComposedChart,
|
|
10
|
+
Line,
|
|
11
|
+
ResponsiveContainer,
|
|
12
|
+
Tooltip,
|
|
13
|
+
XAxis,
|
|
14
|
+
YAxis
|
|
15
|
+
} from "./chunk-DF5EFKXC.mjs";
|
|
16
|
+
import {
|
|
17
|
+
FileDownload_default
|
|
18
|
+
} from "./chunk-AOJRUZTO.mjs";
|
|
19
|
+
import {
|
|
20
|
+
PageHeader
|
|
21
|
+
} from "./chunk-VBIDPX5Z.mjs";
|
|
22
|
+
import {
|
|
23
|
+
AppButton
|
|
24
|
+
} from "./chunk-NAZO4HKB.mjs";
|
|
25
|
+
import {
|
|
26
|
+
AdapterDayjs,
|
|
27
|
+
LocalizationProvider,
|
|
28
|
+
require_dayjs_min
|
|
29
|
+
} from "./chunk-E6KYWWAI.mjs";
|
|
30
|
+
import {
|
|
31
|
+
Refresh_default,
|
|
32
|
+
Search_default
|
|
33
|
+
} from "./chunk-YAQYTUTX.mjs";
|
|
34
|
+
import {
|
|
35
|
+
SDKProvider
|
|
36
|
+
} from "./chunk-VVDJLUYT.mjs";
|
|
37
|
+
import {
|
|
38
|
+
END_POINT,
|
|
39
|
+
axios_default
|
|
40
|
+
} from "./chunk-LHE4QGJJ.mjs";
|
|
41
|
+
import {
|
|
42
|
+
Alert_default,
|
|
43
|
+
Box_default,
|
|
44
|
+
Chip_default,
|
|
45
|
+
CircularProgress_default,
|
|
46
|
+
FormControlLabel_default,
|
|
47
|
+
InputAdornment_default,
|
|
48
|
+
Paper_default,
|
|
49
|
+
RadioGroup_default,
|
|
50
|
+
Radio_default,
|
|
51
|
+
Stack_default,
|
|
52
|
+
TableBody_default,
|
|
53
|
+
TableCell_default,
|
|
54
|
+
TableContainer_default,
|
|
55
|
+
TableHead_default,
|
|
56
|
+
TableRow_default,
|
|
57
|
+
Table_default,
|
|
58
|
+
TextField_default,
|
|
59
|
+
Typography_default,
|
|
60
|
+
__spreadProps,
|
|
61
|
+
__spreadValues,
|
|
62
|
+
__toESM
|
|
63
|
+
} from "./chunk-Q6G3MPS7.mjs";
|
|
64
|
+
|
|
65
|
+
// call-control-sdk/lib/pages/managementDashboard/index.tsx
|
|
66
|
+
import { useState, useEffect, useCallback, useMemo, useRef } from "react";
|
|
67
|
+
var import_dayjs = __toESM(require_dayjs_min());
|
|
68
|
+
|
|
69
|
+
// call-control-sdk/lib/pages/managementDashboard/useManagementDashboard.ts
|
|
70
|
+
function buildQs(params) {
|
|
71
|
+
const qs = new URLSearchParams();
|
|
72
|
+
if (params.start_date) qs.append("start_date", params.start_date);
|
|
73
|
+
if (params.end_date) qs.append("end_date", params.end_date);
|
|
74
|
+
if (params.agent_id != null) qs.append("agent_id", String(params.agent_id));
|
|
75
|
+
const str = qs.toString();
|
|
76
|
+
return str ? `?${str}` : "";
|
|
77
|
+
}
|
|
78
|
+
async function getManagementDashboard(params) {
|
|
79
|
+
const res = await axios_default.get(
|
|
80
|
+
`${END_POINT.MANAGEMENT_DASHBOARD}${buildQs(params)}`
|
|
81
|
+
);
|
|
82
|
+
return res.data;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// call-control-sdk/lib/pages/managementDashboard/index.tsx
|
|
86
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
87
|
+
var C = {
|
|
88
|
+
navy: "#1a3a6b",
|
|
89
|
+
blue: "#2b6cb0",
|
|
90
|
+
green: "#276749",
|
|
91
|
+
amber: "#c47c00",
|
|
92
|
+
red: "#c53030",
|
|
93
|
+
teal: "#0b7a8f",
|
|
94
|
+
surface: "#fff",
|
|
95
|
+
s2: "#f7f9fc",
|
|
96
|
+
s3: "#eef2f7",
|
|
97
|
+
b1: "rgba(20,50,100,.07)",
|
|
98
|
+
b2: "rgba(20,50,100,.13)",
|
|
99
|
+
t1: "#2d3748",
|
|
100
|
+
t2: "#4a5568",
|
|
101
|
+
t3: "#718096",
|
|
102
|
+
blt: "#e8f0fc",
|
|
103
|
+
glt: "#e4f6ef",
|
|
104
|
+
alt: "#fdf3e0",
|
|
105
|
+
rlt: "#fde8e8",
|
|
106
|
+
tlt: "#e3f4f7"
|
|
107
|
+
};
|
|
108
|
+
var headSx = __spreadProps(__spreadValues({}, headCellSx), { py: 1, px: 1.5 });
|
|
109
|
+
var cellSx = { fontSize: 12, py: 0.8, px: 1.5, borderBottom: `1px solid ${C.b1}` };
|
|
110
|
+
var monoSx = { fontFamily: "'JetBrains Mono', monospace", fontSize: 12, fontWeight: 700 };
|
|
111
|
+
var labelSx = { fontSize: 11, fontWeight: 700, letterSpacing: 0.7, textTransform: "uppercase", color: C.t2 };
|
|
112
|
+
var cardPaper = { background: C.surface, border: `1px solid #dce3ef`, borderRadius: "6px", overflow: "hidden", boxShadow: "0 1px 4px rgba(0,0,0,.09)" };
|
|
113
|
+
var cardHeader = { px: 1.5, py: 1, background: C.s2, borderBottom: `1px solid ${C.b1}`, display: "flex", alignItems: "center", justifyContent: "space-between" };
|
|
114
|
+
var EMPTY = {
|
|
115
|
+
inbound: { total: 0, answered: 0, unanswered: 0, answered_pct: 0, unanswered_pct: 0 },
|
|
116
|
+
outbound: { total: 0, answered: 0, unanswered: 0, answered_pct: 0, unanswered_pct: 0 },
|
|
117
|
+
totals: { total_calls: 0, total_answered: 0, highest_duration: "00:00:00", lowest_duration: "00:00:00", calls_lt_30sec: 0, avg_inbound_duration: "00:00:00", avg_outbound_duration: "00:00:00" },
|
|
118
|
+
abandoned: { total: 0, called_back: 0, to_call: 0, called_back_pct: 0, to_call_pct: 0, avg_callback_duration: "00:00:00" },
|
|
119
|
+
ivr: { total: 0, called_back: 0, to_call: 0, called_back_pct: 0, to_call_pct: 0 },
|
|
120
|
+
waiting: { avg_wait_time: "00:00:00", avg_lang_selection: "00:00:00", avg_queue_wait: "00:00:00" },
|
|
121
|
+
cht: [],
|
|
122
|
+
queue_calls: [],
|
|
123
|
+
hourly_chart: [],
|
|
124
|
+
repeated_calls: []
|
|
125
|
+
};
|
|
126
|
+
function DirectionCard({ title, data }) {
|
|
127
|
+
return /* @__PURE__ */ jsxs(Paper_default, { sx: cardPaper, children: [
|
|
128
|
+
/* @__PURE__ */ jsx(Box_default, { sx: cardHeader, children: /* @__PURE__ */ jsx(Typography_default, { sx: labelSx, children: title }) }),
|
|
129
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: { p: 1.5 }, children: [
|
|
130
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontFamily: "'Barlow Condensed', sans-serif", fontSize: 32, fontWeight: 800, color: C.navy, lineHeight: 1, mb: 1.2 }, children: data.total.toLocaleString() }),
|
|
131
|
+
/* @__PURE__ */ jsx(Box_default, { sx: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 1, borderTop: `2px solid ${C.s3}`, pt: 1 }, children: [
|
|
132
|
+
{ label: "ANSWERED", value: data.answered, pct: data.answered_pct, color: C.blue },
|
|
133
|
+
{ label: "UNANSWERED", value: data.unanswered, pct: data.unanswered_pct, color: C.t3 }
|
|
134
|
+
].map(({ label, value, pct, color }) => /* @__PURE__ */ jsxs(Box_default, { children: [
|
|
135
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontSize: 10, fontWeight: 700, letterSpacing: 0.5, color: C.t3, mb: 0.3 }, children: label }),
|
|
136
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: { display: "flex", alignItems: "baseline", gap: 0.5 }, children: [
|
|
137
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontSize: 18, fontWeight: 700, color }, children: value.toLocaleString() }),
|
|
138
|
+
/* @__PURE__ */ jsxs(Typography_default, { sx: { fontSize: 11, color: C.t3 }, children: [
|
|
139
|
+
pct.toFixed(1),
|
|
140
|
+
"%"
|
|
141
|
+
] })
|
|
142
|
+
] })
|
|
143
|
+
] }, label)) })
|
|
144
|
+
] })
|
|
145
|
+
] });
|
|
146
|
+
}
|
|
147
|
+
function QueueCallsCard({ data }) {
|
|
148
|
+
return /* @__PURE__ */ jsxs(Paper_default, { sx: cardPaper, children: [
|
|
149
|
+
/* @__PURE__ */ jsx(Box_default, { sx: cardHeader, children: /* @__PURE__ */ jsx(Typography_default, { sx: labelSx, children: "Queue Wise Calls" }) }),
|
|
150
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: { p: 1.5 }, children: [
|
|
151
|
+
data.length === 0 && /* @__PURE__ */ jsx(Typography_default, { sx: { fontSize: 12, color: C.t3, textAlign: "center", py: 2 }, children: "No data" }),
|
|
152
|
+
data.map((q, i) => /* @__PURE__ */ jsxs(Box_default, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", py: 0.6, borderBottom: `1px solid #f0f0f0`, "&:last-child": { borderBottom: "none" } }, children: [
|
|
153
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontSize: 12, fontWeight: 600, color: C.t2 }, children: q.queue_name }),
|
|
154
|
+
/* @__PURE__ */ jsx(Box_default, { sx: { background: i === 0 ? "#3182ce" : "#90cdf4", color: i === 0 ? "#fff" : "#1a365d", borderRadius: "4px", px: 1.2, py: 0.3, minWidth: 44, textAlign: "center", fontSize: 14, fontWeight: 700 }, children: q.call_count })
|
|
155
|
+
] }, q.queue_name))
|
|
156
|
+
] })
|
|
157
|
+
] });
|
|
158
|
+
}
|
|
159
|
+
function AbandonedCard({ data }) {
|
|
160
|
+
return /* @__PURE__ */ jsxs(Paper_default, { sx: cardPaper, children: [
|
|
161
|
+
/* @__PURE__ */ jsx(Box_default, { sx: cardHeader, children: /* @__PURE__ */ jsx(Typography_default, { sx: labelSx, children: "Abandoned Patients" }) }),
|
|
162
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: { p: 1.5 }, children: [
|
|
163
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontFamily: "'Barlow Condensed', sans-serif", fontSize: 30, fontWeight: 800, color: C.navy, lineHeight: 1, mb: 1 }, children: data.total.toLocaleString() }),
|
|
164
|
+
[
|
|
165
|
+
{ label: "Called Back Patients", value: data.called_back, pct: data.called_back_pct },
|
|
166
|
+
{ label: "To be Called Patients", value: data.to_call, pct: data.to_call_pct }
|
|
167
|
+
].map(({ label, value, pct }) => /* @__PURE__ */ jsxs(Box_default, { sx: { mb: 0.4 }, children: [
|
|
168
|
+
/* @__PURE__ */ jsxs(Typography_default, { sx: { fontSize: 11, color: C.t3, display: "inline" }, children: [
|
|
169
|
+
label,
|
|
170
|
+
" "
|
|
171
|
+
] }),
|
|
172
|
+
/* @__PURE__ */ jsxs(Typography_default, { sx: { fontSize: 13, fontWeight: 700, color: C.blue, display: "inline" }, children: [
|
|
173
|
+
value,
|
|
174
|
+
" "
|
|
175
|
+
] }),
|
|
176
|
+
/* @__PURE__ */ jsxs(Typography_default, { sx: { fontSize: 11, fontWeight: 700, color: "#48bb78", display: "inline" }, children: [
|
|
177
|
+
pct.toFixed(1),
|
|
178
|
+
"%"
|
|
179
|
+
] })
|
|
180
|
+
] }, label))
|
|
181
|
+
] })
|
|
182
|
+
] });
|
|
183
|
+
}
|
|
184
|
+
function AvgCallbackCard({ duration }) {
|
|
185
|
+
return /* @__PURE__ */ jsxs(Paper_default, { sx: cardPaper, children: [
|
|
186
|
+
/* @__PURE__ */ jsx(Box_default, { sx: cardHeader, children: /* @__PURE__ */ jsx(Typography_default, { sx: labelSx, children: "Avg Callback Duration" }) }),
|
|
187
|
+
/* @__PURE__ */ jsx(Box_default, { sx: { p: 1.5 }, children: /* @__PURE__ */ jsx(Typography_default, { sx: { fontFamily: "'JetBrains Mono', monospace", fontSize: 26, fontWeight: 700, color: C.navy, mt: 1, letterSpacing: 1 }, children: duration }) })
|
|
188
|
+
] });
|
|
189
|
+
}
|
|
190
|
+
function IvrCard({ data }) {
|
|
191
|
+
return /* @__PURE__ */ jsxs(Paper_default, { sx: cardPaper, children: [
|
|
192
|
+
/* @__PURE__ */ jsx(Box_default, { sx: cardHeader, children: /* @__PURE__ */ jsx(Typography_default, { sx: labelSx, children: "IVR Patients" }) }),
|
|
193
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: { p: 1.5 }, children: [
|
|
194
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontFamily: "'Barlow Condensed', sans-serif", fontSize: 30, fontWeight: 800, color: C.navy, lineHeight: 1, mb: 1 }, children: data.total.toLocaleString() }),
|
|
195
|
+
[
|
|
196
|
+
{ label: "Called Back", value: data.called_back, pct: data.called_back_pct },
|
|
197
|
+
{ label: "To Be Called", value: data.to_call, pct: data.to_call_pct }
|
|
198
|
+
].map(({ label, value, pct }) => /* @__PURE__ */ jsxs(Box_default, { sx: { mb: 0.4 }, children: [
|
|
199
|
+
/* @__PURE__ */ jsxs(Typography_default, { sx: { fontSize: 11, color: C.t3, display: "inline" }, children: [
|
|
200
|
+
label,
|
|
201
|
+
" "
|
|
202
|
+
] }),
|
|
203
|
+
/* @__PURE__ */ jsxs(Typography_default, { sx: { fontSize: 13, fontWeight: 700, color: C.blue, display: "inline" }, children: [
|
|
204
|
+
value,
|
|
205
|
+
" "
|
|
206
|
+
] }),
|
|
207
|
+
/* @__PURE__ */ jsxs(Typography_default, { sx: { fontSize: 11, fontWeight: 700, color: "#48bb78", display: "inline" }, children: [
|
|
208
|
+
pct.toFixed(1),
|
|
209
|
+
"%"
|
|
210
|
+
] })
|
|
211
|
+
] }, label))
|
|
212
|
+
] })
|
|
213
|
+
] });
|
|
214
|
+
}
|
|
215
|
+
function statusColor(status) {
|
|
216
|
+
const s = status == null ? void 0 : status.toUpperCase();
|
|
217
|
+
if (s === "ANSWERED") return C.green;
|
|
218
|
+
if (s === "CANCEL") return C.red;
|
|
219
|
+
if (s === "ABANDONED") return "#c05621";
|
|
220
|
+
return C.t2;
|
|
221
|
+
}
|
|
222
|
+
function ManagementDashboardContent() {
|
|
223
|
+
const [startDate, setStartDate] = useState((0, import_dayjs.default)().startOf("day"));
|
|
224
|
+
const [endDate, setEndDate] = useState((0, import_dayjs.default)());
|
|
225
|
+
const [quickRange, setQuickRange] = useState("today");
|
|
226
|
+
const [data, setData] = useState(EMPTY);
|
|
227
|
+
const [loading, setLoading] = useState(false);
|
|
228
|
+
const [error, setError] = useState("");
|
|
229
|
+
const [repeatedSearch, setRepeatedSearch] = useState("");
|
|
230
|
+
const [chartDir, setChartDir] = useState("inbound");
|
|
231
|
+
const chartRef = useRef(null);
|
|
232
|
+
const fetchDashboard = useCallback(async () => {
|
|
233
|
+
var _a, _b;
|
|
234
|
+
if (!startDate || !endDate) return;
|
|
235
|
+
setLoading(true);
|
|
236
|
+
setError("");
|
|
237
|
+
try {
|
|
238
|
+
const result = await getManagementDashboard({
|
|
239
|
+
start_date: startDate.format("YYYY-MM-DD"),
|
|
240
|
+
end_date: endDate.format("YYYY-MM-DD")
|
|
241
|
+
});
|
|
242
|
+
setData(result);
|
|
243
|
+
} catch (err) {
|
|
244
|
+
setError(((_b = (_a = err == null ? void 0 : err.response) == null ? void 0 : _a.data) == null ? void 0 : _b.detail) || (err == null ? void 0 : err.message) || "Failed to load dashboard");
|
|
245
|
+
} finally {
|
|
246
|
+
setLoading(false);
|
|
247
|
+
}
|
|
248
|
+
}, [startDate, endDate]);
|
|
249
|
+
useEffect(() => {
|
|
250
|
+
fetchDashboard();
|
|
251
|
+
}, [fetchDashboard]);
|
|
252
|
+
const handleQuickRangeChange = (range) => setQuickRange(range);
|
|
253
|
+
const filteredRepeated = useMemo(() => {
|
|
254
|
+
if (!repeatedSearch) return data.repeated_calls;
|
|
255
|
+
const q = repeatedSearch.toLowerCase();
|
|
256
|
+
return data.repeated_calls.filter(
|
|
257
|
+
(r) => r.phone_number.toLowerCase().includes(q) || r.latest_status.toLowerCase().includes(q) || r.latest_call_type.toLowerCase().includes(q)
|
|
258
|
+
);
|
|
259
|
+
}, [data.repeated_calls, repeatedSearch]);
|
|
260
|
+
const hourlyData = useMemo(() => {
|
|
261
|
+
const map = new Map(data.hourly_chart.map((h) => [h.hour, h]));
|
|
262
|
+
return Array.from({ length: 24 }, (_, h) => {
|
|
263
|
+
var _a, _b, _c, _d, _e, _f;
|
|
264
|
+
return {
|
|
265
|
+
hour: `${String(h).padStart(2, "0")}`,
|
|
266
|
+
answered: (_b = (_a = map.get(h)) == null ? void 0 : _a.answered) != null ? _b : 0,
|
|
267
|
+
abandoned: (_d = (_c = map.get(h)) == null ? void 0 : _c.abandoned) != null ? _d : 0,
|
|
268
|
+
agents: (_f = (_e = map.get(h)) == null ? void 0 : _e.agents) != null ? _f : 0
|
|
269
|
+
};
|
|
270
|
+
});
|
|
271
|
+
}, [data.hourly_chart]);
|
|
272
|
+
const downloadChart = () => {
|
|
273
|
+
var _a;
|
|
274
|
+
const svgEl = (_a = chartRef.current) == null ? void 0 : _a.querySelector("svg");
|
|
275
|
+
if (!svgEl) return;
|
|
276
|
+
const svgData = new XMLSerializer().serializeToString(svgEl);
|
|
277
|
+
const canvas = document.createElement("canvas");
|
|
278
|
+
const img = new Image();
|
|
279
|
+
img.onload = () => {
|
|
280
|
+
canvas.width = img.width;
|
|
281
|
+
canvas.height = img.height;
|
|
282
|
+
const ctx = canvas.getContext("2d");
|
|
283
|
+
if (!ctx) return;
|
|
284
|
+
ctx.fillStyle = "#fff";
|
|
285
|
+
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
286
|
+
ctx.drawImage(img, 0, 0);
|
|
287
|
+
const a = document.createElement("a");
|
|
288
|
+
a.download = `hourly_chart_${chartDir}.png`;
|
|
289
|
+
a.href = canvas.toDataURL("image/png");
|
|
290
|
+
a.click();
|
|
291
|
+
};
|
|
292
|
+
img.src = "data:image/svg+xml;base64," + btoa(unescape(encodeURIComponent(svgData)));
|
|
293
|
+
};
|
|
294
|
+
return /* @__PURE__ */ jsx(LocalizationProvider, { dateAdapter: AdapterDayjs, children: /* @__PURE__ */ jsxs(Box_default, { sx: { background: "transparent", minHeight: "100vh" }, children: [
|
|
295
|
+
/* @__PURE__ */ jsx(
|
|
296
|
+
PageHeader,
|
|
297
|
+
{
|
|
298
|
+
title: "Management Dashboard",
|
|
299
|
+
actions: /* @__PURE__ */ jsxs(Stack_default, { direction: "row", spacing: 1, alignItems: "center", children: [
|
|
300
|
+
/* @__PURE__ */ jsx(
|
|
301
|
+
AppButton,
|
|
302
|
+
{
|
|
303
|
+
variant: "outlined",
|
|
304
|
+
startIcon: /* @__PURE__ */ jsx(Refresh_default, { sx: { fontSize: "0.95rem !important" } }),
|
|
305
|
+
onClick: fetchDashboard,
|
|
306
|
+
disabled: loading,
|
|
307
|
+
children: "Refresh"
|
|
308
|
+
}
|
|
309
|
+
),
|
|
310
|
+
/* @__PURE__ */ jsx(
|
|
311
|
+
AppButton,
|
|
312
|
+
{
|
|
313
|
+
startIcon: /* @__PURE__ */ jsx(FileDownload_default, { sx: { fontSize: "0.95rem !important" } }),
|
|
314
|
+
disabled: loading || data.totals.total_calls === 0,
|
|
315
|
+
onClick: () => {
|
|
316
|
+
const rows = data.repeated_calls.map((r) => Object.values(r).join(","));
|
|
317
|
+
const csv = ["Phone,Date,Count,Status,Type,Comments", ...rows].join("\n");
|
|
318
|
+
const a = document.createElement("a");
|
|
319
|
+
a.href = URL.createObjectURL(new Blob([csv], { type: "text/csv" }));
|
|
320
|
+
a.download = `mgmt_dashboard_${startDate == null ? void 0 : startDate.format("YYYY-MM-DD")}.csv`;
|
|
321
|
+
a.click();
|
|
322
|
+
},
|
|
323
|
+
children: "Export CSV"
|
|
324
|
+
}
|
|
325
|
+
)
|
|
326
|
+
] })
|
|
327
|
+
}
|
|
328
|
+
),
|
|
329
|
+
/* @__PURE__ */ jsx(
|
|
330
|
+
ReportFilterBar,
|
|
331
|
+
{
|
|
332
|
+
startDate,
|
|
333
|
+
endDate,
|
|
334
|
+
onStartChange: setStartDate,
|
|
335
|
+
onEndChange: setEndDate,
|
|
336
|
+
showTime: false,
|
|
337
|
+
quickRange,
|
|
338
|
+
onQuickRangeChange: handleQuickRangeChange
|
|
339
|
+
}
|
|
340
|
+
),
|
|
341
|
+
error && /* @__PURE__ */ jsx(Alert_default, { severity: "error", sx: { mx: 2.5, mt: 1.5 }, onClose: () => setError(""), children: error }),
|
|
342
|
+
loading && /* @__PURE__ */ jsx(Box_default, { sx: { display: "flex", justifyContent: "center", py: 5 }, children: /* @__PURE__ */ jsx(CircularProgress_default, { size: 36 }) }),
|
|
343
|
+
!loading && /* @__PURE__ */ jsxs(Box_default, { sx: { px: { xs: 1, md: 2 }, py: 1.5 }, children: [
|
|
344
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: {
|
|
345
|
+
display: "grid",
|
|
346
|
+
gridTemplateColumns: { xs: "1fr", sm: "repeat(2, 1fr)", md: "repeat(3, 1fr)", lg: "1.3fr 1.2fr 1.1fr 0.75fr 1.3fr 1.1fr" },
|
|
347
|
+
gap: 1.2,
|
|
348
|
+
mb: 1.2
|
|
349
|
+
}, children: [
|
|
350
|
+
/* @__PURE__ */ jsx(DirectionCard, { title: "Inbound Calls", data: data.inbound }),
|
|
351
|
+
/* @__PURE__ */ jsx(QueueCallsCard, { data: data.queue_calls }),
|
|
352
|
+
/* @__PURE__ */ jsx(AbandonedCard, { data: data.abandoned }),
|
|
353
|
+
/* @__PURE__ */ jsx(AvgCallbackCard, { duration: data.abandoned.avg_callback_duration }),
|
|
354
|
+
/* @__PURE__ */ jsx(DirectionCard, { title: "Outbound Calls", data: data.outbound }),
|
|
355
|
+
/* @__PURE__ */ jsx(IvrCard, { data: data.ivr })
|
|
356
|
+
] }),
|
|
357
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: {
|
|
358
|
+
display: "grid",
|
|
359
|
+
gridTemplateColumns: { xs: "1fr", sm: "repeat(2, 1fr)", lg: "1fr 1fr 1.6fr 1.6fr" },
|
|
360
|
+
gap: 1.2,
|
|
361
|
+
mb: 1.2
|
|
362
|
+
}, children: [
|
|
363
|
+
/* @__PURE__ */ jsxs(Paper_default, { sx: cardPaper, children: [
|
|
364
|
+
/* @__PURE__ */ jsx(Box_default, { sx: cardHeader, children: /* @__PURE__ */ jsx(Typography_default, { sx: labelSx, children: "Summary" }) }),
|
|
365
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: { p: 1.5 }, children: [
|
|
366
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: { display: "flex", alignItems: "baseline", gap: 0.5, mb: 0.5 }, children: [
|
|
367
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontFamily: "'Barlow Condensed', sans-serif", fontSize: 22, fontWeight: 800, color: C.navy }, children: data.totals.total_answered.toLocaleString() }),
|
|
368
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontSize: 14, color: C.t3 }, children: "/" }),
|
|
369
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontFamily: "'Barlow Condensed', sans-serif", fontSize: 22, fontWeight: 800, color: C.t3 }, children: data.totals.total_calls.toLocaleString() })
|
|
370
|
+
] }),
|
|
371
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontSize: 11, color: C.t3, mb: 1 }, children: "Total Calls" }),
|
|
372
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: { mt: 1 }, children: [
|
|
373
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontSize: 11, color: C.t3, mb: 0.3 }, children: "Call Duration" }),
|
|
374
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: { display: "flex", gap: 2 }, children: [
|
|
375
|
+
/* @__PURE__ */ jsxs(Box_default, { children: [
|
|
376
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontSize: 10, color: C.t3 }, children: "Highest" }),
|
|
377
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: __spreadProps(__spreadValues({}, monoSx), { color: C.blue, fontSize: 13 }), children: data.totals.highest_duration })
|
|
378
|
+
] }),
|
|
379
|
+
/* @__PURE__ */ jsxs(Box_default, { children: [
|
|
380
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontSize: 10, color: C.t3 }, children: "Lowest" }),
|
|
381
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: __spreadProps(__spreadValues({}, monoSx), { color: C.blue, fontSize: 13 }), children: data.totals.lowest_duration })
|
|
382
|
+
] })
|
|
383
|
+
] })
|
|
384
|
+
] }),
|
|
385
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: { mt: 1 }, children: [
|
|
386
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontSize: 11, color: C.t3, display: "inline" }, children: "Calls < 30 sec: " }),
|
|
387
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: __spreadProps(__spreadValues({}, monoSx), { color: C.blue, display: "inline", fontSize: 13 }), children: data.totals.calls_lt_30sec.toLocaleString() })
|
|
388
|
+
] })
|
|
389
|
+
] })
|
|
390
|
+
] }),
|
|
391
|
+
/* @__PURE__ */ jsxs(Paper_default, { sx: cardPaper, children: [
|
|
392
|
+
/* @__PURE__ */ jsx(Box_default, { sx: cardHeader, children: /* @__PURE__ */ jsx(Typography_default, { sx: labelSx, children: "Avg Total Calls Duration" }) }),
|
|
393
|
+
/* @__PURE__ */ jsx(Box_default, { sx: { p: 1.5 }, children: [
|
|
394
|
+
{ label: "Inbound", value: data.totals.avg_inbound_duration },
|
|
395
|
+
{ label: "Outbound", value: data.totals.avg_outbound_duration }
|
|
396
|
+
].map(({ label, value }) => /* @__PURE__ */ jsxs(Box_default, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", py: 1, borderBottom: `1px solid ${C.b1}`, "&:last-child": { borderBottom: "none" } }, children: [
|
|
397
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontSize: 12, fontWeight: 600, color: C.t2 }, children: label }),
|
|
398
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: __spreadProps(__spreadValues({}, monoSx), { fontSize: 16, color: C.blue }), children: value })
|
|
399
|
+
] }, label)) })
|
|
400
|
+
] }),
|
|
401
|
+
/* @__PURE__ */ jsxs(Paper_default, { sx: cardPaper, children: [
|
|
402
|
+
/* @__PURE__ */ jsx(Box_default, { sx: cardHeader, children: /* @__PURE__ */ jsx(Typography_default, { sx: labelSx, children: "Inbound Average Waiting" }) }),
|
|
403
|
+
/* @__PURE__ */ jsx(Box_default, { sx: { p: 1.5, display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: 1, mt: 0.5 }, children: [
|
|
404
|
+
{ label: "Waiting Time", value: data.waiting.avg_wait_time },
|
|
405
|
+
{ label: "Language Selection", value: data.waiting.avg_lang_selection },
|
|
406
|
+
{ label: "Queue Waiting", value: data.waiting.avg_queue_wait }
|
|
407
|
+
].map(({ label, value }) => /* @__PURE__ */ jsxs(Box_default, { sx: { textAlign: "center" }, children: [
|
|
408
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontSize: 10, fontWeight: 600, color: C.t3, mb: 0.5 }, children: label }),
|
|
409
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: __spreadProps(__spreadValues({}, monoSx), { fontSize: 18, color: C.blue }), children: value })
|
|
410
|
+
] }, label)) })
|
|
411
|
+
] }),
|
|
412
|
+
/* @__PURE__ */ jsxs(Paper_default, { sx: cardPaper, children: [
|
|
413
|
+
/* @__PURE__ */ jsx(Box_default, { sx: cardHeader, children: /* @__PURE__ */ jsx(Typography_default, { sx: labelSx, children: "Average CHT" }) }),
|
|
414
|
+
/* @__PURE__ */ jsx(TableContainer_default, { children: /* @__PURE__ */ jsxs(Table_default, { size: "small", children: [
|
|
415
|
+
/* @__PURE__ */ jsx(TableHead_default, { children: /* @__PURE__ */ jsxs(TableRow_default, { children: [
|
|
416
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: headSx, children: "Call Type" }),
|
|
417
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: headSx, children: "Call Handling Time" }),
|
|
418
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: headSx, children: "Talk Duration" }),
|
|
419
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: headSx, children: "Hold Duration" })
|
|
420
|
+
] }) }),
|
|
421
|
+
/* @__PURE__ */ jsxs(TableBody_default, { children: [
|
|
422
|
+
data.cht.length === 0 && /* @__PURE__ */ jsx(TableRow_default, { children: /* @__PURE__ */ jsx(TableCell_default, { colSpan: 4, sx: { textAlign: "center", py: 2, color: C.t3, fontSize: 12 }, children: "No data" }) }),
|
|
423
|
+
data.cht.map((row) => /* @__PURE__ */ jsxs(TableRow_default, { hover: true, children: [
|
|
424
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: __spreadProps(__spreadValues({}, cellSx), { fontWeight: 600, color: C.t2 }), children: row.call_type }),
|
|
425
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: __spreadProps(__spreadValues(__spreadValues({}, cellSx), monoSx), { color: C.blue }), children: row.call_handling_time }),
|
|
426
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: __spreadProps(__spreadValues(__spreadValues({}, cellSx), monoSx), { color: C.blue }), children: row.talk_duration }),
|
|
427
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: __spreadProps(__spreadValues(__spreadValues({}, cellSx), monoSx), { color: C.blue }), children: row.hold_duration })
|
|
428
|
+
] }, row.call_type))
|
|
429
|
+
] })
|
|
430
|
+
] }) })
|
|
431
|
+
] })
|
|
432
|
+
] }),
|
|
433
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: { display: "grid", gridTemplateColumns: { xs: "1fr", lg: "1fr 1fr" }, gap: 1.2 }, children: [
|
|
434
|
+
/* @__PURE__ */ jsxs(Paper_default, { sx: cardPaper, children: [
|
|
435
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: __spreadProps(__spreadValues({}, cardHeader), { flexWrap: "wrap", gap: 1 }), children: [
|
|
436
|
+
/* @__PURE__ */ jsxs(Box_default, { children: [
|
|
437
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: labelSx, children: "Avg Hour Wise Inbound Calls vs Agents" }),
|
|
438
|
+
/* @__PURE__ */ jsx(Stack_default, { direction: "row", spacing: 1.5, sx: { mt: 0.5 }, children: [
|
|
439
|
+
{ color: "#f6a623", label: "Answered" },
|
|
440
|
+
{ color: "#90a4c0", label: "Abandoned" },
|
|
441
|
+
{ color: "#4a5568", label: "Agents" }
|
|
442
|
+
].map(({ color, label }) => /* @__PURE__ */ jsxs(Box_default, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, children: [
|
|
443
|
+
/* @__PURE__ */ jsx(Box_default, { sx: { width: 12, height: 12, borderRadius: "2px", background: color } }),
|
|
444
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: { fontSize: 11, color: C.t3 }, children: label })
|
|
445
|
+
] }, label)) })
|
|
446
|
+
] }),
|
|
447
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: { display: "flex", flexDirection: "column", alignItems: "flex-end", gap: 0.5 }, children: [
|
|
448
|
+
/* @__PURE__ */ jsxs(
|
|
449
|
+
RadioGroup_default,
|
|
450
|
+
{
|
|
451
|
+
row: true,
|
|
452
|
+
value: chartDir,
|
|
453
|
+
onChange: (e) => setChartDir(e.target.value),
|
|
454
|
+
sx: { "& .MuiFormControlLabel-root": { mr: 0.5 }, "& .MuiFormControlLabel-label": { fontSize: 12 } },
|
|
455
|
+
children: [
|
|
456
|
+
/* @__PURE__ */ jsx(FormControlLabel_default, { value: "inbound", control: /* @__PURE__ */ jsx(Radio_default, { size: "small" }), label: "Inbound" }),
|
|
457
|
+
/* @__PURE__ */ jsx(FormControlLabel_default, { value: "outbound", control: /* @__PURE__ */ jsx(Radio_default, { size: "small" }), label: "Outbound" })
|
|
458
|
+
]
|
|
459
|
+
}
|
|
460
|
+
),
|
|
461
|
+
/* @__PURE__ */ jsx(
|
|
462
|
+
Typography_default,
|
|
463
|
+
{
|
|
464
|
+
onClick: downloadChart,
|
|
465
|
+
sx: { fontSize: 11, color: "#3182ce", cursor: "pointer", border: "1px solid #bee3f8", borderRadius: "4px", px: 1, py: 0.3 },
|
|
466
|
+
children: "\u2B07 DOWNLOAD"
|
|
467
|
+
}
|
|
468
|
+
)
|
|
469
|
+
] })
|
|
470
|
+
] }),
|
|
471
|
+
/* @__PURE__ */ jsx(Box_default, { ref: chartRef, sx: { p: 1.5, height: 260 }, children: /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxs(ComposedChart, { data: hourlyData, margin: { top: 4, right: 30, left: -20, bottom: 0 }, barGap: 1, children: [
|
|
472
|
+
/* @__PURE__ */ jsx(CartesianGrid, { strokeDasharray: "3 3", stroke: C.b2, vertical: false }),
|
|
473
|
+
/* @__PURE__ */ jsx(XAxis, { dataKey: "hour", tick: { fontSize: 9, fill: C.t3 }, interval: 1 }),
|
|
474
|
+
/* @__PURE__ */ jsx(YAxis, { yAxisId: "left", tick: { fontSize: 9, fill: C.t3 } }),
|
|
475
|
+
/* @__PURE__ */ jsx(YAxis, { yAxisId: "right", orientation: "right", tick: { fontSize: 9, fill: C.t3 } }),
|
|
476
|
+
/* @__PURE__ */ jsx(
|
|
477
|
+
Tooltip,
|
|
478
|
+
{
|
|
479
|
+
contentStyle: { fontSize: 11, borderRadius: 6, border: `1px solid ${C.b2}` },
|
|
480
|
+
formatter: (v, n) => [v, n.charAt(0).toUpperCase() + n.slice(1)]
|
|
481
|
+
}
|
|
482
|
+
),
|
|
483
|
+
/* @__PURE__ */ jsx(Bar, { yAxisId: "left", dataKey: "answered", fill: "#f6a623", radius: [2, 2, 0, 0], maxBarSize: 14 }),
|
|
484
|
+
/* @__PURE__ */ jsx(Bar, { yAxisId: "left", dataKey: "abandoned", fill: "#90a4c0", radius: [2, 2, 0, 0], maxBarSize: 14 }),
|
|
485
|
+
/* @__PURE__ */ jsx(Line, { yAxisId: "right", type: "monotone", dataKey: "agents", stroke: "#4a5568", strokeWidth: 1.5, dot: { r: 2, fill: "#4a5568" } })
|
|
486
|
+
] }) }) })
|
|
487
|
+
] }),
|
|
488
|
+
/* @__PURE__ */ jsxs(Paper_default, { sx: cardPaper, children: [
|
|
489
|
+
/* @__PURE__ */ jsxs(Box_default, { sx: cardHeader, children: [
|
|
490
|
+
/* @__PURE__ */ jsx(Typography_default, { sx: labelSx, children: "Repeated Calls" }),
|
|
491
|
+
/* @__PURE__ */ jsx(Chip_default, { label: data.repeated_calls.length, size: "small", sx: { background: C.rlt, color: C.red, fontWeight: 700, fontSize: 11 } })
|
|
492
|
+
] }),
|
|
493
|
+
/* @__PURE__ */ jsx(Box_default, { sx: { px: 1.5, py: 1 }, children: /* @__PURE__ */ jsx(
|
|
494
|
+
TextField_default,
|
|
495
|
+
{
|
|
496
|
+
size: "small",
|
|
497
|
+
placeholder: "Search\u2026",
|
|
498
|
+
value: repeatedSearch,
|
|
499
|
+
onChange: (e) => setRepeatedSearch(e.target.value),
|
|
500
|
+
fullWidth: true,
|
|
501
|
+
slotProps: { input: { startAdornment: /* @__PURE__ */ jsx(InputAdornment_default, { position: "start", children: /* @__PURE__ */ jsx(Search_default, { sx: { fontSize: 16, color: C.t3 } }) }) } },
|
|
502
|
+
sx: { "& .MuiInputBase-root": { fontSize: 12 } }
|
|
503
|
+
}
|
|
504
|
+
) }),
|
|
505
|
+
/* @__PURE__ */ jsx(TableContainer_default, { sx: { maxHeight: 260, overflow: "auto" }, children: /* @__PURE__ */ jsxs(Table_default, { size: "small", stickyHeader: true, children: [
|
|
506
|
+
/* @__PURE__ */ jsx(TableHead_default, { children: /* @__PURE__ */ jsxs(TableRow_default, { children: [
|
|
507
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: headSx, children: "Phone Number" }),
|
|
508
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: headSx, children: "Date" }),
|
|
509
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: headSx, children: "No of Calls" }),
|
|
510
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: headSx, children: "Latest Status" }),
|
|
511
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: headSx, children: "Latest Call Type" }),
|
|
512
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: headSx, children: "Comments" })
|
|
513
|
+
] }) }),
|
|
514
|
+
/* @__PURE__ */ jsxs(TableBody_default, { children: [
|
|
515
|
+
filteredRepeated.length === 0 && /* @__PURE__ */ jsx(TableRow_default, { children: /* @__PURE__ */ jsx(TableCell_default, { colSpan: 6, sx: { textAlign: "center", py: 2, color: C.t3, fontSize: 12 }, children: "No repeated calls" }) }),
|
|
516
|
+
filteredRepeated.map((r) => /* @__PURE__ */ jsxs(TableRow_default, { hover: true, children: [
|
|
517
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: __spreadProps(__spreadValues(__spreadValues({}, cellSx), monoSx), { fontSize: 11 }), children: r.phone_number }),
|
|
518
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: __spreadProps(__spreadValues({}, cellSx), { fontSize: 11 }), children: r.date }),
|
|
519
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: __spreadProps(__spreadValues({}, cellSx), { fontWeight: 700, color: C.navy, fontSize: 13 }), children: r.call_count }),
|
|
520
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: __spreadProps(__spreadValues({}, cellSx), { fontSize: 11, fontWeight: 600, color: statusColor(r.latest_status) }), children: r.latest_status }),
|
|
521
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: __spreadProps(__spreadValues({}, cellSx), { fontSize: 11 }), children: r.latest_call_type }),
|
|
522
|
+
/* @__PURE__ */ jsx(TableCell_default, { sx: __spreadProps(__spreadValues({}, cellSx), { fontSize: 11, color: C.t3 }), children: r.comments })
|
|
523
|
+
] }, `${r.phone_number}-${r.date}`))
|
|
524
|
+
] })
|
|
525
|
+
] }) })
|
|
526
|
+
] })
|
|
527
|
+
] })
|
|
528
|
+
] })
|
|
529
|
+
] }) });
|
|
530
|
+
}
|
|
531
|
+
var ManagementDashboard = () => /* @__PURE__ */ jsx(SDKProvider, { children: /* @__PURE__ */ jsx(ManagementDashboardContent, {}) });
|
|
532
|
+
var managementDashboard_default = ManagementDashboard;
|
|
533
|
+
export {
|
|
534
|
+
managementDashboard_default as default
|
|
535
|
+
};
|
|
536
|
+
//# sourceMappingURL=managementDashboard-7EMQC2UA.mjs.map
|