ahs-cti 0.0.2-beta.8 → 0.0.2
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/README.md +425 -294
- package/dist/agentDetailReport-XSBMOUMW.mjs +12 -0
- package/dist/agentDetailReport-XSBMOUMW.mjs.map +1 -0
- package/dist/agentPerformanceReport-UT6QZWYD.mjs +533 -0
- package/dist/agentPerformanceReport-UT6QZWYD.mjs.map +1 -0
- package/dist/auditReport-R67BYA4Z.mjs +15 -0
- package/dist/auditReport-R67BYA4Z.mjs.map +1 -0
- package/dist/callHistory-PHGY224F.mjs +805 -0
- package/dist/callHistory-PHGY224F.mjs.map +1 -0
- package/dist/campaigns-JSMYHHDF.mjs +3049 -0
- package/dist/campaigns-JSMYHHDF.mjs.map +1 -0
- package/dist/caroQualityAuditDashboard-7X44HRZL.mjs +66 -0
- package/dist/caroQualityAuditDashboard-7X44HRZL.mjs.map +1 -0
- package/dist/caroVoiceAI-OZAB7LK4.mjs +21 -0
- package/dist/caroVoiceAI-OZAB7LK4.mjs.map +1 -0
- package/dist/cdrReport-44LN5VUX.mjs +819 -0
- package/dist/cdrReport-44LN5VUX.mjs.map +1 -0
- package/dist/chunk-6ICPXSN6.mjs +61 -0
- package/dist/chunk-6ICPXSN6.mjs.map +1 -0
- package/dist/chunk-CXULBAK6.mjs +493 -0
- package/dist/chunk-CXULBAK6.mjs.map +1 -0
- package/dist/chunk-FVXHNBYV.mjs +82 -0
- package/dist/chunk-FVXHNBYV.mjs.map +1 -0
- package/dist/chunk-G6KDIN5W.mjs +749 -0
- package/dist/chunk-G6KDIN5W.mjs.map +1 -0
- package/dist/chunk-GGACEO3I.mjs +180 -0
- package/dist/chunk-GGACEO3I.mjs.map +1 -0
- package/dist/chunk-HBR2JS4C.mjs +95 -0
- package/dist/chunk-HBR2JS4C.mjs.map +1 -0
- package/dist/chunk-HRM6S6J2.mjs +61 -0
- package/dist/chunk-HRM6S6J2.mjs.map +1 -0
- package/dist/chunk-JOZ4YQMR.mjs +116 -0
- package/dist/chunk-JOZ4YQMR.mjs.map +1 -0
- package/dist/chunk-O2XGWZLT.mjs +1060 -0
- package/dist/chunk-O2XGWZLT.mjs.map +1 -0
- package/dist/chunk-RZZQ42MG.mjs +115 -0
- package/dist/chunk-RZZQ42MG.mjs.map +1 -0
- package/dist/chunk-UZF5Q3GR.mjs +678 -0
- package/dist/chunk-UZF5Q3GR.mjs.map +1 -0
- package/dist/chunk-VQCHBU2Q.mjs +27 -0
- package/dist/chunk-VQCHBU2Q.mjs.map +1 -0
- package/dist/chunk-WWWM33FY.mjs +57 -0
- package/dist/chunk-WWWM33FY.mjs.map +1 -0
- package/dist/index.d.mts +795 -112
- package/dist/index.d.ts +796 -112
- package/dist/index.js +13690 -2103
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2335 -2250
- package/dist/index.mjs.map +1 -1
- package/dist/liveStatus-AHKS4XLW.mjs +1077 -0
- package/dist/liveStatus-AHKS4XLW.mjs.map +1 -0
- package/dist/loginReport-7GBMZP55.mjs +828 -0
- package/dist/loginReport-7GBMZP55.mjs.map +1 -0
- package/dist/managementDashboard-TYON77NW.mjs +529 -0
- package/dist/managementDashboard-TYON77NW.mjs.map +1 -0
- package/dist/qualityAuditDashboard-AGJH5VVN.mjs +66 -0
- package/dist/qualityAuditDashboard-AGJH5VVN.mjs.map +1 -0
- package/package.json +16 -6
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AppButton
|
|
3
|
+
} from "./chunk-HBR2JS4C.mjs";
|
|
4
|
+
import {
|
|
5
|
+
END_POINT,
|
|
6
|
+
axios_default
|
|
7
|
+
} from "./chunk-O2XGWZLT.mjs";
|
|
8
|
+
import {
|
|
9
|
+
__spreadProps,
|
|
10
|
+
__spreadValues
|
|
11
|
+
} from "./chunk-VQCHBU2Q.mjs";
|
|
12
|
+
|
|
13
|
+
// call-control-sdk/lib/pages/common/components/SearchBar.tsx
|
|
14
|
+
import { TextField, InputAdornment, IconButton } from "@mui/material";
|
|
15
|
+
import SearchIcon from "@mui/icons-material/Search";
|
|
16
|
+
import CloseIcon from "@mui/icons-material/Close";
|
|
17
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
18
|
+
function SearchBar({
|
|
19
|
+
value,
|
|
20
|
+
onChange,
|
|
21
|
+
placeholder = "Search...",
|
|
22
|
+
iconPosition = "start",
|
|
23
|
+
showClear = true,
|
|
24
|
+
width = 250,
|
|
25
|
+
borderRadius = "50px",
|
|
26
|
+
autoFocus = false,
|
|
27
|
+
inputRef,
|
|
28
|
+
sx
|
|
29
|
+
}) {
|
|
30
|
+
const searchAdornment = /* @__PURE__ */ jsx(InputAdornment, { position: iconPosition, children: /* @__PURE__ */ jsx(SearchIcon, { sx: { color: "#1A5F6C", fontSize: 18 } }) });
|
|
31
|
+
const clearButton = showClear && value ? /* @__PURE__ */ jsx(InputAdornment, { position: "end", children: /* @__PURE__ */ jsx(IconButton, { size: "small", onClick: () => onChange(""), edge: "end", children: /* @__PURE__ */ jsx(CloseIcon, { sx: { fontSize: 16, color: "#94a3b8" } }) }) }) : null;
|
|
32
|
+
const startAdornment = iconPosition === "start" ? searchAdornment : void 0;
|
|
33
|
+
const endAdornment = iconPosition === "end" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
34
|
+
clearButton,
|
|
35
|
+
searchAdornment
|
|
36
|
+
] }) : clearButton || void 0;
|
|
37
|
+
return /* @__PURE__ */ jsx(
|
|
38
|
+
TextField,
|
|
39
|
+
{
|
|
40
|
+
size: "small",
|
|
41
|
+
placeholder,
|
|
42
|
+
value,
|
|
43
|
+
autoFocus,
|
|
44
|
+
inputRef,
|
|
45
|
+
onChange: (e) => onChange(e.target.value),
|
|
46
|
+
InputProps: { startAdornment, endAdornment },
|
|
47
|
+
sx: __spreadValues({
|
|
48
|
+
width,
|
|
49
|
+
"& .MuiOutlinedInput-root": {
|
|
50
|
+
borderRadius,
|
|
51
|
+
height: 36,
|
|
52
|
+
backgroundColor: "#f5f7f8",
|
|
53
|
+
"& fieldset": { borderColor: "#dde3e8" },
|
|
54
|
+
"&:hover fieldset": { borderColor: "#1A5F6C" },
|
|
55
|
+
"&.Mui-focused fieldset": { borderColor: "#1A5F6C", borderWidth: "1.5px" }
|
|
56
|
+
},
|
|
57
|
+
"& .MuiInputBase-input": {
|
|
58
|
+
fontSize: "0.85rem",
|
|
59
|
+
"&::placeholder": { color: "#94a3b8", opacity: 1 }
|
|
60
|
+
}
|
|
61
|
+
}, sx || {})
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// call-control-sdk/lib/pages/common/components/ReportFilterBar.tsx
|
|
67
|
+
import {
|
|
68
|
+
Box,
|
|
69
|
+
Checkbox as Checkbox2,
|
|
70
|
+
FormControl as FormControl2,
|
|
71
|
+
InputLabel as InputLabel2,
|
|
72
|
+
MenuItem as MenuItem2,
|
|
73
|
+
Select as Select2,
|
|
74
|
+
TextField as TextField2,
|
|
75
|
+
CircularProgress as CircularProgress2
|
|
76
|
+
} from "@mui/material";
|
|
77
|
+
import dayjs2 from "dayjs";
|
|
78
|
+
import isoWeek from "dayjs/plugin/isoWeek";
|
|
79
|
+
|
|
80
|
+
// call-control-sdk/lib/pages/common/components/DateRangePicker.tsx
|
|
81
|
+
import { Fragment as Fragment2 } from "react";
|
|
82
|
+
import { Typography } from "@mui/material";
|
|
83
|
+
import dayjs from "dayjs";
|
|
84
|
+
import { DateTimePicker } from "@mui/x-date-pickers/DateTimePicker";
|
|
85
|
+
import { DatePicker } from "@mui/x-date-pickers/DatePicker";
|
|
86
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
87
|
+
var pickerSx = {
|
|
88
|
+
width: 170,
|
|
89
|
+
"& .MuiOutlinedInput-root": { borderRadius: "6px", height: 32, px: 0.5 },
|
|
90
|
+
"& .MuiInputBase-input": { py: 0, px: "4px", fontSize: "0.72rem" },
|
|
91
|
+
"& .MuiInputAdornment-root": { ml: 0 },
|
|
92
|
+
"& .MuiInputAdornment-root .MuiSvgIcon-root": { fontSize: "0.8rem" },
|
|
93
|
+
"& .MuiOutlinedInput-notchedOutline": { borderColor: "#c0c8d4" },
|
|
94
|
+
"& .MuiPickersSectionList-root": { py: "4px", px: 0, fontSize: 12 }
|
|
95
|
+
};
|
|
96
|
+
function DateRangePicker({
|
|
97
|
+
startDate,
|
|
98
|
+
endDate,
|
|
99
|
+
onStartChange,
|
|
100
|
+
onEndChange,
|
|
101
|
+
showTime = true
|
|
102
|
+
}) {
|
|
103
|
+
const Picker = showTime ? DateTimePicker : DatePicker;
|
|
104
|
+
const format = showTime ? "DD-MM-YYYY hh:mm A" : void 0;
|
|
105
|
+
const now = dayjs();
|
|
106
|
+
const minKey = showTime ? "minDateTime" : "minDate";
|
|
107
|
+
const maxKey = showTime ? "maxDateTime" : "maxDate";
|
|
108
|
+
const clampFuture = (v) => {
|
|
109
|
+
if (!v) return v;
|
|
110
|
+
const current = dayjs();
|
|
111
|
+
return v.isAfter(current) ? current : v;
|
|
112
|
+
};
|
|
113
|
+
const handleStartChange = (v) => {
|
|
114
|
+
const clamped = clampFuture(v);
|
|
115
|
+
onStartChange(clamped);
|
|
116
|
+
if (clamped && endDate && endDate.isBefore(clamped)) {
|
|
117
|
+
onEndChange(clamped);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
const handleEndChange = (v) => {
|
|
121
|
+
let clamped = clampFuture(v);
|
|
122
|
+
if (clamped && startDate && clamped.isBefore(startDate)) {
|
|
123
|
+
clamped = startDate;
|
|
124
|
+
}
|
|
125
|
+
onEndChange(clamped);
|
|
126
|
+
};
|
|
127
|
+
const startMax = endDate && endDate.isBefore(now) ? endDate : now;
|
|
128
|
+
const startPickerBounds = { [maxKey]: startMax };
|
|
129
|
+
const endPickerBounds = __spreadValues({
|
|
130
|
+
[maxKey]: now
|
|
131
|
+
}, startDate ? { [minKey]: startDate } : {});
|
|
132
|
+
return /* @__PURE__ */ jsxs2(Fragment2, { children: [
|
|
133
|
+
/* @__PURE__ */ jsx2(
|
|
134
|
+
Picker,
|
|
135
|
+
__spreadProps(__spreadValues(__spreadValues({
|
|
136
|
+
value: startDate,
|
|
137
|
+
onChange: (v) => handleStartChange(v),
|
|
138
|
+
disableFuture: true
|
|
139
|
+
}, startPickerBounds), format ? { format } : {}), {
|
|
140
|
+
slotProps: { textField: { size: "small", sx: pickerSx } }
|
|
141
|
+
})
|
|
142
|
+
),
|
|
143
|
+
/* @__PURE__ */ jsx2(Typography, { sx: { fontSize: "0.72rem", color: "#7a8599" }, children: "to" }),
|
|
144
|
+
/* @__PURE__ */ jsx2(
|
|
145
|
+
Picker,
|
|
146
|
+
__spreadProps(__spreadValues(__spreadValues({
|
|
147
|
+
value: endDate,
|
|
148
|
+
onChange: (v) => handleEndChange(v),
|
|
149
|
+
disableFuture: true
|
|
150
|
+
}, endPickerBounds), format ? { format } : {}), {
|
|
151
|
+
slotProps: { textField: { size: "small", sx: pickerSx } }
|
|
152
|
+
})
|
|
153
|
+
)
|
|
154
|
+
] });
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// call-control-sdk/lib/pages/common/components/AgentMultiSelect.tsx
|
|
158
|
+
import { useState, useEffect } from "react";
|
|
159
|
+
import {
|
|
160
|
+
Checkbox,
|
|
161
|
+
FormControl,
|
|
162
|
+
InputLabel,
|
|
163
|
+
MenuItem,
|
|
164
|
+
Select,
|
|
165
|
+
CircularProgress,
|
|
166
|
+
Typography as Typography2
|
|
167
|
+
} from "@mui/material";
|
|
168
|
+
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
169
|
+
async function getUsers(params) {
|
|
170
|
+
var _a;
|
|
171
|
+
const res = await axios_default.get(END_POINT.USERS_LIST, { params });
|
|
172
|
+
return Array.isArray(res.data) ? res.data : Array.isArray((_a = res.data) == null ? void 0 : _a.data) ? res.data.data : [];
|
|
173
|
+
}
|
|
174
|
+
var SELECT_ALL_ID = -999;
|
|
175
|
+
function AgentMultiSelect({
|
|
176
|
+
value,
|
|
177
|
+
onChange,
|
|
178
|
+
agents: externalAgents,
|
|
179
|
+
label = "Agents",
|
|
180
|
+
placeholder = "All Agents",
|
|
181
|
+
role = "",
|
|
182
|
+
minWidth = 160,
|
|
183
|
+
disabled = false,
|
|
184
|
+
setIsAllUsersSelected
|
|
185
|
+
}) {
|
|
186
|
+
const [internalAgents, setInternalAgents] = useState([]);
|
|
187
|
+
const [loading, setLoading] = useState(false);
|
|
188
|
+
const agents = externalAgents != null ? externalAgents : internalAgents;
|
|
189
|
+
useEffect(() => {
|
|
190
|
+
if (externalAgents) return;
|
|
191
|
+
let cancelled = false;
|
|
192
|
+
(async () => {
|
|
193
|
+
try {
|
|
194
|
+
setLoading(true);
|
|
195
|
+
const users = await getUsers(role ? { role, pageSize: 500 } : { pageSize: 500 });
|
|
196
|
+
if (cancelled) return;
|
|
197
|
+
const filtered = role ? (users || []).filter((u) => {
|
|
198
|
+
const roleName = typeof u.role === "object" && u.role !== null ? u.role.name : u.role;
|
|
199
|
+
return roleName === role;
|
|
200
|
+
}) : users || [];
|
|
201
|
+
setInternalAgents(
|
|
202
|
+
filtered.map((u) => ({
|
|
203
|
+
id: u.id,
|
|
204
|
+
userId: u.userId,
|
|
205
|
+
displayName: [u.firstName, u.lastName].filter(Boolean).join(" ") || u.userId
|
|
206
|
+
}))
|
|
207
|
+
);
|
|
208
|
+
} catch (e) {
|
|
209
|
+
} finally {
|
|
210
|
+
if (!cancelled) setLoading(false);
|
|
211
|
+
}
|
|
212
|
+
})();
|
|
213
|
+
return () => {
|
|
214
|
+
cancelled = true;
|
|
215
|
+
};
|
|
216
|
+
}, [externalAgents, role]);
|
|
217
|
+
const selectedIds = value.map((a) => a.id);
|
|
218
|
+
const allSelected = agents.length > 0 && value.length === agents.length;
|
|
219
|
+
const handleChange = (ids) => {
|
|
220
|
+
setIsAllUsersSelected == null ? void 0 : setIsAllUsersSelected(ids.includes(SELECT_ALL_ID));
|
|
221
|
+
if (ids.includes(SELECT_ALL_ID)) {
|
|
222
|
+
onChange(allSelected ? [] : [...agents]);
|
|
223
|
+
} else {
|
|
224
|
+
onChange(agents.filter((a) => ids.includes(a.id)));
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
const renderValue = (selected) => {
|
|
228
|
+
const sel = selected;
|
|
229
|
+
if (sel.length === 0 || sel.length === agents.length) return placeholder;
|
|
230
|
+
return `${sel.length} Agent(s)`;
|
|
231
|
+
};
|
|
232
|
+
return /* @__PURE__ */ jsxs3(FormControl, { size: "small", sx: { minWidth }, disabled: disabled || loading, children: [
|
|
233
|
+
/* @__PURE__ */ jsx3(InputLabel, { sx: { fontSize: "0.76rem" }, children: label }),
|
|
234
|
+
/* @__PURE__ */ jsxs3(
|
|
235
|
+
Select,
|
|
236
|
+
{
|
|
237
|
+
multiple: true,
|
|
238
|
+
value: selectedIds,
|
|
239
|
+
label,
|
|
240
|
+
onChange: (e) => handleChange(e.target.value),
|
|
241
|
+
renderValue,
|
|
242
|
+
sx: { fontSize: "0.76rem", height: 32, borderRadius: "6px" },
|
|
243
|
+
MenuProps: {
|
|
244
|
+
variant: "menu",
|
|
245
|
+
PaperProps: {
|
|
246
|
+
sx: {
|
|
247
|
+
maxHeight: 280,
|
|
248
|
+
"& .MuiMenuItem-root": { fontSize: "0.76rem", minHeight: 32, py: 0.3 }
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
children: [
|
|
253
|
+
loading && /* @__PURE__ */ jsxs3(MenuItem, { disabled: true, children: [
|
|
254
|
+
/* @__PURE__ */ jsx3(CircularProgress, { size: 16, sx: { mr: 1 } }),
|
|
255
|
+
" Loading\u2026"
|
|
256
|
+
] }),
|
|
257
|
+
!loading && /* @__PURE__ */ jsxs3(MenuItem, { value: SELECT_ALL_ID, children: [
|
|
258
|
+
/* @__PURE__ */ jsx3(Checkbox, { checked: allSelected, indeterminate: value.length > 0 && !allSelected, size: "small" }),
|
|
259
|
+
"Select All"
|
|
260
|
+
] }),
|
|
261
|
+
!loading && agents.map((agent) => /* @__PURE__ */ jsxs3(MenuItem, { value: agent.id, children: [
|
|
262
|
+
/* @__PURE__ */ jsx3(Checkbox, { checked: selectedIds.includes(agent.id), size: "small" }),
|
|
263
|
+
/* @__PURE__ */ jsx3(Typography2, { noWrap: true, sx: { fontSize: "0.76rem", maxWidth: 180 }, title: agent.displayName, children: agent.displayName })
|
|
264
|
+
] }, agent.id))
|
|
265
|
+
]
|
|
266
|
+
}
|
|
267
|
+
)
|
|
268
|
+
] });
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// call-control-sdk/lib/pages/common/components/ReportFilterBar.tsx
|
|
272
|
+
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
273
|
+
dayjs2.extend(isoWeek);
|
|
274
|
+
var FILTER_HEIGHT = 32;
|
|
275
|
+
function ReportFilterBar({
|
|
276
|
+
startDate,
|
|
277
|
+
endDate,
|
|
278
|
+
onStartChange,
|
|
279
|
+
onEndChange,
|
|
280
|
+
showTime = true,
|
|
281
|
+
quickRange,
|
|
282
|
+
onQuickRangeChange,
|
|
283
|
+
showAgentSelect = false,
|
|
284
|
+
selectedAgents = [],
|
|
285
|
+
onAgentsChange,
|
|
286
|
+
setIsAllUsersSelected,
|
|
287
|
+
showQueueSelect = false,
|
|
288
|
+
queues = [],
|
|
289
|
+
selectedQueues = [],
|
|
290
|
+
onQueuesChange,
|
|
291
|
+
showProcessSelect = false,
|
|
292
|
+
processes = [],
|
|
293
|
+
selectedProcess = "",
|
|
294
|
+
onProcessChange,
|
|
295
|
+
showCallTypeSelect = false,
|
|
296
|
+
selectedCallType = "",
|
|
297
|
+
onCallTypeChange,
|
|
298
|
+
callTypeOptions = [
|
|
299
|
+
{ label: "All Call Types", value: "" },
|
|
300
|
+
{ label: "Inbound", value: "Inbound" },
|
|
301
|
+
{ label: "Outbound", value: "Outbound" }
|
|
302
|
+
],
|
|
303
|
+
showStatusSelect = false,
|
|
304
|
+
selectedStatus = "",
|
|
305
|
+
onStatusChange,
|
|
306
|
+
statusOptions = [
|
|
307
|
+
{ label: "All Statuses", value: "" },
|
|
308
|
+
{ label: "Answered", value: "Answered" },
|
|
309
|
+
{ label: "Abandoned", value: "Abandoned" },
|
|
310
|
+
{ label: "Not Answered", value: "NO_ANSWER" }
|
|
311
|
+
],
|
|
312
|
+
showSearchBar = false,
|
|
313
|
+
searchValue = "",
|
|
314
|
+
onSearchChange,
|
|
315
|
+
searchPlaceholder = "Search...",
|
|
316
|
+
showSearchButton = false,
|
|
317
|
+
onSearch,
|
|
318
|
+
loading = false,
|
|
319
|
+
extra
|
|
320
|
+
}) {
|
|
321
|
+
const setQuick = (range) => {
|
|
322
|
+
onQuickRangeChange(range);
|
|
323
|
+
const today = dayjs2();
|
|
324
|
+
let sd = today.startOf("day");
|
|
325
|
+
const ed = today;
|
|
326
|
+
if (range === "week") sd = today.startOf("week").startOf("day");
|
|
327
|
+
else if (range === "month") sd = today.startOf("month").startOf("day");
|
|
328
|
+
onStartChange(sd);
|
|
329
|
+
onEndChange(ed);
|
|
330
|
+
};
|
|
331
|
+
return /* @__PURE__ */ jsxs4(Box, { sx: { py: 0.6, px: 1, display: "flex", alignItems: "center", gap: 1, flexWrap: "wrap", rowGap: 1 }, children: [
|
|
332
|
+
/* @__PURE__ */ jsx4(
|
|
333
|
+
DateRangePicker,
|
|
334
|
+
{
|
|
335
|
+
startDate,
|
|
336
|
+
endDate,
|
|
337
|
+
onStartChange: (v) => {
|
|
338
|
+
onStartChange(v);
|
|
339
|
+
onQuickRangeChange("");
|
|
340
|
+
},
|
|
341
|
+
onEndChange: (v) => {
|
|
342
|
+
onEndChange(v);
|
|
343
|
+
onQuickRangeChange("");
|
|
344
|
+
},
|
|
345
|
+
showTime
|
|
346
|
+
}
|
|
347
|
+
),
|
|
348
|
+
/* @__PURE__ */ jsx4(AppButton, { variant: quickRange === "today" ? "primary" : "outlined", onClick: () => setQuick("today"), sx: { height: FILTER_HEIGHT, whiteSpace: "nowrap" }, children: "Today" }),
|
|
349
|
+
/* @__PURE__ */ jsx4(AppButton, { variant: quickRange === "week" ? "primary" : "outlined", onClick: () => setQuick("week"), sx: { height: FILTER_HEIGHT, whiteSpace: "nowrap" }, children: "This Week" }),
|
|
350
|
+
/* @__PURE__ */ jsx4(AppButton, { variant: quickRange === "month" ? "primary" : "outlined", onClick: () => setQuick("month"), sx: { height: FILTER_HEIGHT, whiteSpace: "nowrap" }, children: "This Month" }),
|
|
351
|
+
showAgentSelect && onAgentsChange && /* @__PURE__ */ jsx4(AgentMultiSelect, { value: selectedAgents, onChange: onAgentsChange, setIsAllUsersSelected, minWidth: 130 }),
|
|
352
|
+
showQueueSelect && onQueuesChange && /* @__PURE__ */ jsxs4(FormControl2, { size: "small", sx: { minWidth: 130 }, children: [
|
|
353
|
+
/* @__PURE__ */ jsx4(InputLabel2, { sx: { fontSize: "0.76rem" }, children: "All Queues" }),
|
|
354
|
+
/* @__PURE__ */ jsxs4(
|
|
355
|
+
Select2,
|
|
356
|
+
{
|
|
357
|
+
multiple: true,
|
|
358
|
+
sx: { fontSize: "0.76rem", height: FILTER_HEIGHT, borderRadius: "6px" },
|
|
359
|
+
MenuProps: {
|
|
360
|
+
variant: "menu",
|
|
361
|
+
PaperProps: {
|
|
362
|
+
sx: {
|
|
363
|
+
maxHeight: 280,
|
|
364
|
+
"& .MuiMenuItem-root": { fontSize: "0.76rem", minHeight: 32, py: 0.3 }
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
},
|
|
368
|
+
value: selectedQueues.map((q) => q.id),
|
|
369
|
+
label: "All Queues",
|
|
370
|
+
onChange: (e) => {
|
|
371
|
+
const ids = e.target.value;
|
|
372
|
+
if (ids.includes(-1)) {
|
|
373
|
+
onQueuesChange(selectedQueues.length === queues.length ? [] : [...queues]);
|
|
374
|
+
} else {
|
|
375
|
+
onQueuesChange(queues.filter((q) => ids.includes(q.id)));
|
|
376
|
+
}
|
|
377
|
+
},
|
|
378
|
+
renderValue: (selected) => {
|
|
379
|
+
if (selected.length === 0) return "All Queues";
|
|
380
|
+
if (selected.length === queues.length) return "All Queues";
|
|
381
|
+
return `${selected.length} Queue(s)`;
|
|
382
|
+
},
|
|
383
|
+
children: [
|
|
384
|
+
/* @__PURE__ */ jsxs4(MenuItem2, { value: -1, children: [
|
|
385
|
+
/* @__PURE__ */ jsx4(Checkbox2, { checked: selectedQueues.length === queues.length && queues.length > 0, size: "small" }),
|
|
386
|
+
"Select All"
|
|
387
|
+
] }),
|
|
388
|
+
queues.map((q) => /* @__PURE__ */ jsxs4(MenuItem2, { value: q.id, children: [
|
|
389
|
+
/* @__PURE__ */ jsx4(Checkbox2, { checked: selectedQueues.some((sq) => sq.id === q.id), size: "small" }),
|
|
390
|
+
q.name
|
|
391
|
+
] }, q.id))
|
|
392
|
+
]
|
|
393
|
+
}
|
|
394
|
+
)
|
|
395
|
+
] }),
|
|
396
|
+
showProcessSelect && processes.length > 0 && onProcessChange && /* @__PURE__ */ jsx4(
|
|
397
|
+
TextField2,
|
|
398
|
+
{
|
|
399
|
+
select: true,
|
|
400
|
+
size: "small",
|
|
401
|
+
value: selectedProcess,
|
|
402
|
+
onChange: (e) => onProcessChange(e.target.value),
|
|
403
|
+
sx: { width: 140, "& .MuiOutlinedInput-root": { height: FILTER_HEIGHT, borderRadius: "6px", fontSize: 13 } },
|
|
404
|
+
children: processes.map((p) => /* @__PURE__ */ jsx4("option", { value: p.value, children: p.label }, p.value))
|
|
405
|
+
}
|
|
406
|
+
),
|
|
407
|
+
showCallTypeSelect && onCallTypeChange && /* @__PURE__ */ jsxs4(FormControl2, { size: "small", sx: { minWidth: 130 }, children: [
|
|
408
|
+
/* @__PURE__ */ jsx4(InputLabel2, { sx: { fontSize: "0.76rem" }, children: "Call Type" }),
|
|
409
|
+
/* @__PURE__ */ jsx4(
|
|
410
|
+
Select2,
|
|
411
|
+
{
|
|
412
|
+
value: selectedCallType,
|
|
413
|
+
label: "Call Type",
|
|
414
|
+
onChange: (e) => onCallTypeChange(e.target.value),
|
|
415
|
+
sx: { fontSize: "0.76rem", height: FILTER_HEIGHT, borderRadius: "6px" },
|
|
416
|
+
MenuProps: {
|
|
417
|
+
PaperProps: {
|
|
418
|
+
sx: {
|
|
419
|
+
"& .MuiMenuItem-root": { fontSize: "0.76rem", minHeight: 32, py: 0.3 }
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
},
|
|
423
|
+
children: callTypeOptions.map((opt) => /* @__PURE__ */ jsx4(MenuItem2, { value: opt.value, children: opt.label }, opt.value || "all"))
|
|
424
|
+
}
|
|
425
|
+
)
|
|
426
|
+
] }),
|
|
427
|
+
showStatusSelect && onStatusChange && /* @__PURE__ */ jsxs4(FormControl2, { size: "small", sx: { minWidth: 130 }, children: [
|
|
428
|
+
/* @__PURE__ */ jsx4(InputLabel2, { sx: { fontSize: "0.76rem" }, children: "Status" }),
|
|
429
|
+
/* @__PURE__ */ jsx4(
|
|
430
|
+
Select2,
|
|
431
|
+
{
|
|
432
|
+
value: selectedStatus,
|
|
433
|
+
label: "Status",
|
|
434
|
+
onChange: (e) => onStatusChange(e.target.value),
|
|
435
|
+
sx: { fontSize: "0.76rem", height: FILTER_HEIGHT, borderRadius: "6px" },
|
|
436
|
+
MenuProps: {
|
|
437
|
+
PaperProps: {
|
|
438
|
+
sx: {
|
|
439
|
+
"& .MuiMenuItem-root": { fontSize: "0.76rem", minHeight: 32, py: 0.3 }
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
},
|
|
443
|
+
children: statusOptions.map((opt) => /* @__PURE__ */ jsx4(MenuItem2, { value: opt.value, children: opt.label }, opt.value || "all"))
|
|
444
|
+
}
|
|
445
|
+
)
|
|
446
|
+
] }),
|
|
447
|
+
showSearchBar && onSearchChange && /* @__PURE__ */ jsx4(
|
|
448
|
+
SearchBar,
|
|
449
|
+
{
|
|
450
|
+
value: searchValue,
|
|
451
|
+
onChange: onSearchChange,
|
|
452
|
+
placeholder: searchPlaceholder,
|
|
453
|
+
width: 200,
|
|
454
|
+
borderRadius: "6px",
|
|
455
|
+
sx: { "& .MuiOutlinedInput-root": { height: FILTER_HEIGHT, fontSize: 13 } }
|
|
456
|
+
}
|
|
457
|
+
),
|
|
458
|
+
showSearchButton && onSearch && /* @__PURE__ */ jsx4(AppButton, { onClick: onSearch, disabled: loading, sx: { height: FILTER_HEIGHT }, children: loading ? /* @__PURE__ */ jsx4(CircularProgress2, { size: 16, sx: { color: "#fff" } }) : "Search" }),
|
|
459
|
+
extra
|
|
460
|
+
] });
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
// call-control-sdk/lib/pages/common/utils/tableStyles.ts
|
|
464
|
+
var headCellSx = {
|
|
465
|
+
fontFamily: "poppins, Arial, sans-serif",
|
|
466
|
+
bgcolor: "#f1f1f1",
|
|
467
|
+
color: "#333",
|
|
468
|
+
fontWeight: 600,
|
|
469
|
+
whiteSpace: "nowrap",
|
|
470
|
+
fontSize: "14px"
|
|
471
|
+
};
|
|
472
|
+
var sortLabelSx = {
|
|
473
|
+
"&.MuiTableSortLabel-root": { color: "#333" },
|
|
474
|
+
"&.MuiTableSortLabel-root:hover": { color: "#555" },
|
|
475
|
+
"&.Mui-active": { color: "#333" },
|
|
476
|
+
"& .MuiTableSortLabel-icon": { color: "#333 !important" }
|
|
477
|
+
};
|
|
478
|
+
var reportBodyCellSx = {
|
|
479
|
+
fontSize: "0.75rem",
|
|
480
|
+
py: 0.6,
|
|
481
|
+
px: 1,
|
|
482
|
+
borderBottom: "1px solid #eef1f6",
|
|
483
|
+
whiteSpace: "nowrap"
|
|
484
|
+
};
|
|
485
|
+
|
|
486
|
+
export {
|
|
487
|
+
SearchBar,
|
|
488
|
+
ReportFilterBar,
|
|
489
|
+
headCellSx,
|
|
490
|
+
sortLabelSx,
|
|
491
|
+
reportBodyCellSx
|
|
492
|
+
};
|
|
493
|
+
//# sourceMappingURL=chunk-CXULBAK6.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../call-control-sdk/lib/pages/common/components/SearchBar.tsx","../call-control-sdk/lib/pages/common/components/ReportFilterBar.tsx","../call-control-sdk/lib/pages/common/components/DateRangePicker.tsx","../call-control-sdk/lib/pages/common/components/AgentMultiSelect.tsx","../call-control-sdk/lib/pages/common/utils/tableStyles.ts"],"sourcesContent":["import React from \"react\";\r\nimport { TextField, InputAdornment, IconButton } from \"@mui/material\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\ninterface SearchBarProps {\r\n value: string;\r\n onChange: (value: string) => void;\r\n placeholder?: string;\r\n iconPosition?: \"start\" | \"end\";\r\n showClear?: boolean;\r\n width?: number | string | Record<string, number | string>;\r\n borderRadius?: number | string;\r\n autoFocus?: boolean;\r\n inputRef?: React.Ref<any>;\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nexport default function SearchBar({\r\n value,\r\n onChange,\r\n placeholder = \"Search...\",\r\n iconPosition = \"start\",\r\n showClear = true,\r\n width = 250,\r\n borderRadius = \"50px\",\r\n autoFocus = false,\r\n inputRef,\r\n sx,\r\n}: SearchBarProps) {\r\n const searchAdornment = (\r\n <InputAdornment position={iconPosition}>\r\n <SearchIcon sx={{ color: \"#1A5F6C\", fontSize: 18 }} />\r\n </InputAdornment>\r\n );\r\n\r\n const clearButton =\r\n showClear && value ? (\r\n <InputAdornment position=\"end\">\r\n <IconButton size=\"small\" onClick={() => onChange(\"\")} edge=\"end\">\r\n <CloseIcon sx={{ fontSize: 16, color: \"#94a3b8\" }} />\r\n </IconButton>\r\n </InputAdornment>\r\n ) : null;\r\n\r\n const startAdornment = iconPosition === \"start\" ? searchAdornment : undefined;\r\n const endAdornment =\r\n iconPosition === \"end\" ? (\r\n <>\r\n {clearButton}\r\n {searchAdornment}\r\n </>\r\n ) : (\r\n clearButton || undefined\r\n );\r\n\r\n return (\r\n <TextField\r\n size=\"small\"\r\n placeholder={placeholder}\r\n value={value}\r\n autoFocus={autoFocus}\r\n inputRef={inputRef}\r\n onChange={(e) => onChange(e.target.value)}\r\n InputProps={{ startAdornment, endAdornment }}\r\n sx={{\r\n width,\r\n \"& .MuiOutlinedInput-root\": {\r\n borderRadius,\r\n height: 36,\r\n backgroundColor: \"#f5f7f8\",\r\n \"& fieldset\": { borderColor: \"#dde3e8\" },\r\n \"&:hover fieldset\": { borderColor: \"#1A5F6C\" },\r\n \"&.Mui-focused fieldset\": { borderColor: \"#1A5F6C\", borderWidth: \"1.5px\" },\r\n },\r\n \"& .MuiInputBase-input\": {\r\n fontSize: \"0.85rem\",\r\n \"&::placeholder\": { color: \"#94a3b8\", opacity: 1 },\r\n },\r\n ...((sx as object) || {}),\r\n }}\r\n />\r\n );\r\n}\r\n","import React from \"react\";\r\nimport {\r\n Box,\r\n Checkbox,\r\n FormControl,\r\n InputLabel,\r\n MenuItem,\r\n Select,\r\n TextField,\r\n CircularProgress,\r\n} from \"@mui/material\";\r\nimport AppButton from \"./AppButton\";\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\nimport isoWeek from \"dayjs/plugin/isoWeek\";\r\nimport SearchBar from \"./SearchBar\";\r\nimport DateRangePicker from \"./DateRangePicker\";\r\nimport AgentMultiSelect, { type AgentOption } from \"./AgentMultiSelect\";\r\nimport { type Queue } from \"../../cdrReport/useCdrReport\";\r\n\r\ndayjs.extend(isoWeek);\r\n\r\nconst FILTER_HEIGHT = 32;\r\n\r\ntype QuickRange = \"today\" | \"week\" | \"month\" | \"\";\r\n\r\ninterface ProcessOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\ninterface ReportFilterBarProps {\r\n startDate: Dayjs | null;\r\n endDate: Dayjs | null;\r\n onStartChange: (val: Dayjs | null) => void;\r\n onEndChange: (val: Dayjs | null) => void;\r\n showTime?: boolean;\r\n quickRange: string;\r\n onQuickRangeChange: (range: QuickRange) => void;\r\n showAgentSelect?: boolean;\r\n selectedAgents?: AgentOption[];\r\n onAgentsChange?: (agents: AgentOption[]) => void;\r\n showQueueSelect?: boolean;\r\n queues?: Queue[];\r\n selectedQueues?: Queue[];\r\n onQueuesChange?: (queues: Queue[]) => void;\r\n showProcessSelect?: boolean;\r\n processes?: ProcessOption[];\r\n selectedProcess?: string;\r\n onProcessChange?: (process: string) => void;\r\n showCallTypeSelect?: boolean;\r\n selectedCallType?: string;\r\n onCallTypeChange?: (callType: string) => void;\r\n callTypeOptions?: ProcessOption[];\r\n showStatusSelect?: boolean;\r\n selectedStatus?: string;\r\n onStatusChange?: (status: string) => void;\r\n statusOptions?: ProcessOption[];\r\n showSearchBar?: boolean;\r\n searchValue?: string;\r\n onSearchChange?: (value: string) => void;\r\n searchPlaceholder?: string;\r\n showSearchButton?: boolean;\r\n onSearch?: () => void;\r\n loading?: boolean;\r\n extra?: React.ReactNode;\r\n setIsAllUsersSelected?: (allSelected: boolean) => void;\r\n}\r\n\r\nexport default function ReportFilterBar({\r\n startDate,\r\n endDate,\r\n onStartChange,\r\n onEndChange,\r\n showTime = true,\r\n quickRange,\r\n onQuickRangeChange,\r\n showAgentSelect = false,\r\n selectedAgents = [],\r\n onAgentsChange,\r\n setIsAllUsersSelected,\r\n showQueueSelect = false,\r\n queues = [],\r\n selectedQueues = [],\r\n onQueuesChange,\r\n showProcessSelect = false,\r\n processes = [],\r\n selectedProcess = \"\",\r\n onProcessChange,\r\n showCallTypeSelect = false,\r\n selectedCallType = \"\",\r\n onCallTypeChange,\r\n callTypeOptions = [\r\n { label: \"All Call Types\", value: \"\" },\r\n { label: \"Inbound\", value: \"Inbound\" },\r\n { label: \"Outbound\", value: \"Outbound\" }\r\n ],\r\n showStatusSelect = false,\r\n selectedStatus = \"\",\r\n onStatusChange,\r\n statusOptions = [\r\n { label: \"All Statuses\", value: \"\" },\r\n { label: \"Answered\", value: \"Answered\" },\r\n { label: \"Abandoned\", value: \"Abandoned\" },\r\n { label: \"Not Answered\", value: \"NO_ANSWER\" },\r\n ],\r\n showSearchBar = false,\r\n searchValue = \"\",\r\n onSearchChange,\r\n searchPlaceholder = \"Search...\",\r\n showSearchButton = false,\r\n onSearch,\r\n loading = false,\r\n extra,\r\n}: ReportFilterBarProps) {\r\n const setQuick = (range: QuickRange) => {\r\n onQuickRangeChange(range);\r\n const today = dayjs();\r\n let sd: Dayjs = today.startOf(\"day\");\r\n const ed: Dayjs = today;\r\n if (range === \"week\") sd = today.startOf(\"week\").startOf(\"day\");\r\n else if (range === \"month\") sd = today.startOf(\"month\").startOf(\"day\");\r\n onStartChange(sd);\r\n onEndChange(ed);\r\n };\r\n\r\n return (\r\n <Box sx={{ py: 0.6, px: 1, display: \"flex\", alignItems: \"center\", gap: 1, flexWrap: \"wrap\", rowGap: 1 }}>\r\n <DateRangePicker\r\n startDate={startDate}\r\n endDate={endDate}\r\n onStartChange={(v) => { onStartChange(v); onQuickRangeChange(\"\"); }}\r\n onEndChange={(v) => { onEndChange(v); onQuickRangeChange(\"\"); }}\r\n showTime={showTime}\r\n />\r\n\r\n <AppButton variant={quickRange === \"today\" ? \"primary\" : \"outlined\"} onClick={() => setQuick(\"today\")} sx={{ height: FILTER_HEIGHT, whiteSpace: \"nowrap\" }}>\r\n Today\r\n </AppButton>\r\n <AppButton variant={quickRange === \"week\" ? \"primary\" : \"outlined\"} onClick={() => setQuick(\"week\")} sx={{ height: FILTER_HEIGHT, whiteSpace: \"nowrap\" }}>\r\n This Week\r\n </AppButton>\r\n <AppButton variant={quickRange === \"month\" ? \"primary\" : \"outlined\"} onClick={() => setQuick(\"month\")} sx={{ height: FILTER_HEIGHT, whiteSpace: \"nowrap\" }}>\r\n This Month\r\n </AppButton>\r\n\r\n {showAgentSelect && onAgentsChange && (\r\n <AgentMultiSelect value={selectedAgents} onChange={onAgentsChange} setIsAllUsersSelected={setIsAllUsersSelected} minWidth={130} />\r\n )}\r\n\r\n {showQueueSelect && onQueuesChange && (\r\n <FormControl size=\"small\" sx={{ minWidth: 130 }}>\r\n <InputLabel sx={{ fontSize: \"0.76rem\" }}>All Queues</InputLabel>\r\n <Select\r\n multiple\r\n sx={{ fontSize: \"0.76rem\", height: FILTER_HEIGHT, borderRadius: \"6px\" }}\r\n MenuProps={{\r\n variant: \"menu\",\r\n PaperProps: {\r\n sx: {\r\n maxHeight: 280,\r\n \"& .MuiMenuItem-root\": { fontSize: \"0.76rem\", minHeight: 32, py: 0.3 },\r\n },\r\n },\r\n }}\r\n value={selectedQueues.map((q) => q.id)}\r\n label=\"All Queues\"\r\n onChange={(e) => {\r\n const ids = e.target.value as number[];\r\n if (ids.includes(-1)) {\r\n onQueuesChange(selectedQueues.length === queues.length ? [] : [...queues]);\r\n } else {\r\n onQueuesChange(queues.filter((q) => ids.includes(q.id)));\r\n }\r\n }}\r\n renderValue={(selected) => {\r\n if ((selected as number[]).length === 0) return \"All Queues\";\r\n if ((selected as number[]).length === queues.length) return \"All Queues\";\r\n return `${(selected as number[]).length} Queue(s)`;\r\n }}\r\n >\r\n <MenuItem value={-1}>\r\n <Checkbox checked={selectedQueues.length === queues.length && queues.length > 0} size=\"small\" />\r\n Select All\r\n </MenuItem>\r\n {queues.map((q) => (\r\n <MenuItem key={q.id} value={q.id}>\r\n <Checkbox checked={selectedQueues.some((sq) => sq.id === q.id)} size=\"small\" />\r\n {q.name}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n )}\r\n\r\n {showProcessSelect && processes.length > 0 && onProcessChange && (\r\n <TextField\r\n select\r\n size=\"small\"\r\n value={selectedProcess}\r\n onChange={(e) => onProcessChange(e.target.value)}\r\n sx={{ width: 140, \"& .MuiOutlinedInput-root\": { height: FILTER_HEIGHT, borderRadius: \"6px\", fontSize: 13 } }}\r\n >\r\n {processes.map((p) => (\r\n <option key={p.value} value={p.value}>\r\n {p.label}\r\n </option>\r\n ))}\r\n </TextField>\r\n )}\r\n\r\n {showCallTypeSelect && onCallTypeChange && (\r\n <FormControl size=\"small\" sx={{ minWidth: 130 }}>\r\n <InputLabel sx={{ fontSize: \"0.76rem\" }}>Call Type</InputLabel>\r\n <Select\r\n value={selectedCallType}\r\n label=\"Call Type\"\r\n onChange={(e) => onCallTypeChange(e.target.value as string)}\r\n sx={{ fontSize: \"0.76rem\", height: FILTER_HEIGHT, borderRadius: \"6px\" }}\r\n MenuProps={{\r\n PaperProps: {\r\n sx: {\r\n \"& .MuiMenuItem-root\": { fontSize: \"0.76rem\", minHeight: 32, py: 0.3 },\r\n },\r\n },\r\n }}\r\n >\r\n {callTypeOptions.map((opt) => (\r\n <MenuItem key={opt.value || \"all\"} value={opt.value}>\r\n {opt.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n )}\r\n\r\n {showStatusSelect && onStatusChange && (\r\n <FormControl size=\"small\" sx={{ minWidth: 130 }}>\r\n <InputLabel sx={{ fontSize: \"0.76rem\" }}>Status</InputLabel>\r\n <Select\r\n value={selectedStatus}\r\n label=\"Status\"\r\n onChange={(e) => onStatusChange(e.target.value as string)}\r\n sx={{ fontSize: \"0.76rem\", height: FILTER_HEIGHT, borderRadius: \"6px\" }}\r\n MenuProps={{\r\n PaperProps: {\r\n sx: {\r\n \"& .MuiMenuItem-root\": { fontSize: \"0.76rem\", minHeight: 32, py: 0.3 },\r\n },\r\n },\r\n }}\r\n >\r\n {statusOptions.map((opt) => (\r\n <MenuItem key={opt.value || \"all\"} value={opt.value}>\r\n {opt.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n )}\r\n\r\n {showSearchBar && onSearchChange && (\r\n <SearchBar\r\n value={searchValue}\r\n onChange={onSearchChange}\r\n placeholder={searchPlaceholder}\r\n width={200}\r\n borderRadius=\"6px\"\r\n sx={{ \"& .MuiOutlinedInput-root\": { height: FILTER_HEIGHT, fontSize: 13 } }}\r\n />\r\n )}\r\n\r\n {showSearchButton && onSearch && (\r\n <AppButton onClick={onSearch} disabled={loading} sx={{ height: FILTER_HEIGHT }}>\r\n {loading ? <CircularProgress size={16} sx={{ color: \"#fff\" }} /> : \"Search\"}\r\n </AppButton>\r\n )}\r\n\r\n {extra}\r\n </Box>\r\n );\r\n}\r\n\r\nexport type { QuickRange, ProcessOption, ReportFilterBarProps };\r\n","import { Fragment } from \"react\";\r\nimport { Typography } from \"@mui/material\";\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\nimport { DateTimePicker } from \"@mui/x-date-pickers/DateTimePicker\";\r\nimport { DatePicker } from \"@mui/x-date-pickers/DatePicker\";\r\n\r\nconst pickerSx = {\r\n width: 170,\r\n \"& .MuiOutlinedInput-root\": { borderRadius: \"6px\", height: 32, px: 0.5 },\r\n \"& .MuiInputBase-input\": { py: 0, px: \"4px\", fontSize: \"0.72rem\" },\r\n \"& .MuiInputAdornment-root\": { ml: 0 },\r\n \"& .MuiInputAdornment-root .MuiSvgIcon-root\": { fontSize: \"0.8rem\" },\r\n \"& .MuiOutlinedInput-notchedOutline\": { borderColor: \"#c0c8d4\" },\r\n \"& .MuiPickersSectionList-root\": { py: \"4px\", px: 0, fontSize: 12 },\r\n};\r\n\r\ninterface DateRangePickerProps {\r\n startDate: Dayjs | null;\r\n endDate: Dayjs | null;\r\n onStartChange: (val: Dayjs | null) => void;\r\n onEndChange: (val: Dayjs | null) => void;\r\n showTime?: boolean;\r\n}\r\n\r\nexport default function DateRangePicker({\r\n startDate,\r\n endDate,\r\n onStartChange,\r\n onEndChange,\r\n showTime = true,\r\n}: DateRangePickerProps) {\r\n const Picker = showTime ? DateTimePicker : DatePicker;\r\n const format = showTime ? \"DD-MM-YYYY hh:mm A\" : undefined;\r\n const now = dayjs();\r\n const minKey = showTime ? \"minDateTime\" : \"minDate\";\r\n const maxKey = showTime ? \"maxDateTime\" : \"maxDate\";\r\n\r\n const clampFuture = (v: Dayjs | null): Dayjs | null => {\r\n if (!v) return v;\r\n const current = dayjs();\r\n return v.isAfter(current) ? current : v;\r\n };\r\n\r\n const handleStartChange = (v: Dayjs | null) => {\r\n const clamped = clampFuture(v);\r\n onStartChange(clamped);\r\n if (clamped && endDate && endDate.isBefore(clamped)) {\r\n onEndChange(clamped);\r\n }\r\n };\r\n\r\n const handleEndChange = (v: Dayjs | null) => {\r\n let clamped = clampFuture(v);\r\n if (clamped && startDate && clamped.isBefore(startDate)) {\r\n clamped = startDate;\r\n }\r\n onEndChange(clamped);\r\n };\r\n\r\n const startMax = endDate && endDate.isBefore(now) ? endDate : now;\r\n const startPickerBounds = { [maxKey]: startMax };\r\n const endPickerBounds = {\r\n [maxKey]: now,\r\n ...(startDate ? { [minKey]: startDate } : {}),\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <Picker\r\n value={startDate}\r\n onChange={(v) => handleStartChange(v as Dayjs | null)}\r\n disableFuture\r\n {...startPickerBounds}\r\n {...(format ? { format } : {})}\r\n slotProps={{ textField: { size: \"small\" as const, sx: pickerSx } }}\r\n />\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"#7a8599\" }}>to</Typography>\r\n <Picker\r\n value={endDate}\r\n onChange={(v) => handleEndChange(v as Dayjs | null)}\r\n disableFuture\r\n {...endPickerBounds}\r\n {...(format ? { format } : {})}\r\n slotProps={{ textField: { size: \"small\" as const, sx: pickerSx } }}\r\n />\r\n </Fragment>\r\n );\r\n}\r\n","import { useState, useEffect } from \"react\";\r\nimport {\r\n Checkbox,\r\n FormControl,\r\n InputLabel,\r\n MenuItem,\r\n Select,\r\n CircularProgress,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport axiosInstance from \"../../../services/axios\";\r\nimport { END_POINT } from \"../../../services/endPoint\";\r\n\r\ninterface User {\r\n id: number;\r\n userId: string;\r\n firstName: string;\r\n lastName: string;\r\n role: any;\r\n}\r\n\r\nasync function getUsers(params?: { role?: string; pageSize?: number }): Promise<User[]> {\r\n const res = await axiosInstance.get(END_POINT.USERS_LIST, { params });\r\n return Array.isArray(res.data) ? res.data : Array.isArray(res.data?.data) ? res.data.data : [];\r\n}\r\n\r\nexport interface AgentOption {\r\n id: number;\r\n userId: string;\r\n displayName: string;\r\n}\r\n\r\ninterface AgentMultiSelectProps {\r\n value: AgentOption[];\r\n onChange: (agents: AgentOption[]) => void;\r\n agents?: AgentOption[];\r\n label?: string;\r\n placeholder?: string;\r\n role?: string;\r\n minWidth?: number;\r\n disabled?: boolean;\r\n setIsAllUsersSelected?: (allSelected: boolean) => void;\r\n}\r\n\r\nconst SELECT_ALL_ID = -999;\r\n\r\nexport default function AgentMultiSelect({\r\n value,\r\n onChange,\r\n agents: externalAgents,\r\n label = \"Agents\",\r\n placeholder = \"All Agents\",\r\n role = \"\",\r\n minWidth = 160,\r\n disabled = false,\r\n setIsAllUsersSelected,\r\n}: AgentMultiSelectProps) {\r\n const [internalAgents, setInternalAgents] = useState<AgentOption[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n\r\n const agents = externalAgents ?? internalAgents;\r\n\r\n useEffect(() => {\r\n if (externalAgents) return;\r\n let cancelled = false;\r\n (async () => {\r\n try {\r\n setLoading(true);\r\n const users = await getUsers(role ? { role, pageSize: 500 } : { pageSize: 500 });\r\n if (cancelled) return;\r\n // An empty `role` lists all users (all roles) instead of agents only.\r\n const filtered = role\r\n ? (users || []).filter((u: User) => {\r\n const roleName =\r\n typeof u.role === \"object\" && u.role !== null ? u.role.name : u.role;\r\n return roleName === role;\r\n })\r\n : (users || []);\r\n setInternalAgents(\r\n filtered.map((u: User) => ({\r\n id: u.id,\r\n userId: u.userId,\r\n displayName:\r\n [u.firstName, u.lastName].filter(Boolean).join(\" \") || u.userId,\r\n })),\r\n );\r\n } catch {\r\n /* silently fail */\r\n } finally {\r\n if (!cancelled) setLoading(false);\r\n }\r\n })();\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [externalAgents, role]);\r\n\r\n const selectedIds = value.map((a) => a.id);\r\n const allSelected = agents.length > 0 && value.length === agents.length;\r\n\r\n const handleChange = (ids: number[]) => {\r\n setIsAllUsersSelected?.(ids.includes(SELECT_ALL_ID));\r\n if (ids.includes(SELECT_ALL_ID)) {\r\n onChange(allSelected ? [] : [...agents]);\r\n } else {\r\n onChange(agents.filter((a) => ids.includes(a.id)));\r\n }\r\n };\r\n\r\n const renderValue = (selected: unknown) => {\r\n const sel = selected as number[];\r\n if (sel.length === 0 || sel.length === agents.length) return placeholder;\r\n return `${sel.length} Agent(s)`;\r\n };\r\n\r\n return (\r\n <FormControl size=\"small\" sx={{ minWidth }} disabled={disabled || loading}>\r\n <InputLabel sx={{ fontSize: \"0.76rem\" }}>{label}</InputLabel>\r\n <Select\r\n multiple\r\n value={selectedIds}\r\n label={label}\r\n onChange={(e) => handleChange(e.target.value as number[])}\r\n renderValue={renderValue}\r\n sx={{ fontSize: \"0.76rem\", height: 32, borderRadius: \"6px\" }}\r\n MenuProps={{\r\n variant: \"menu\",\r\n PaperProps: {\r\n sx: {\r\n maxHeight: 280,\r\n \"& .MuiMenuItem-root\": { fontSize: \"0.76rem\", minHeight: 32, py: 0.3 },\r\n },\r\n },\r\n }}\r\n >\r\n {loading && (\r\n <MenuItem disabled>\r\n <CircularProgress size={16} sx={{ mr: 1 }} /> Loading…\r\n </MenuItem>\r\n )}\r\n {!loading && (\r\n <MenuItem value={SELECT_ALL_ID}>\r\n <Checkbox checked={allSelected} indeterminate={value.length > 0 && !allSelected} size=\"small\" />\r\n Select All\r\n </MenuItem>\r\n )}\r\n {!loading &&\r\n agents.map((agent) => (\r\n <MenuItem key={agent.id} value={agent.id}>\r\n <Checkbox checked={selectedIds.includes(agent.id)} size=\"small\" />\r\n <Typography noWrap sx={{ fontSize: \"0.76rem\", maxWidth: 180 }} title={agent.displayName}>\r\n {agent.displayName}\r\n </Typography>\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n );\r\n}\r\n\r\nexport function toAgentOptions(users: User[]): AgentOption[] {\r\n return users.map((u) => ({\r\n id: u.id,\r\n userId: u.userId,\r\n displayName:\r\n [u.firstName, u.lastName].filter(Boolean).join(\" \") || u.userId,\r\n }));\r\n}\r\n","import type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\nexport const headCellSx: SxProps<Theme> = {\r\n fontFamily: \"poppins, Arial, sans-serif\",\r\n bgcolor: \"#f1f1f1\",\r\n color: \"#333\",\r\n fontWeight: 600,\r\n whiteSpace: \"nowrap\",\r\n fontSize: \"14px\",\r\n};\r\n\r\nexport const sortLabelSx: SxProps<Theme> = {\r\n \"&.MuiTableSortLabel-root\": { color: \"#333\" },\r\n \"&.MuiTableSortLabel-root:hover\": { color: \"#555\" },\r\n \"&.Mui-active\": { color: \"#333\" },\r\n \"& .MuiTableSortLabel-icon\": { color: \"#333 !important\" },\r\n};\r\n\r\nexport const reportBodyCellSx: SxProps<Theme> = {\r\n fontSize: \"0.75rem\",\r\n py: 0.6,\r\n px: 1,\r\n borderBottom: \"1px solid #eef1f6\",\r\n whiteSpace: \"nowrap\",\r\n};\r\n\r\nexport const tableRowSx: SxProps<Theme> = {\r\n \"&:nth-of-type(odd)\": { backgroundColor: \"#fff\" },\r\n \"&:nth-of-type(even)\": { backgroundColor: \"#fff\" },\r\n \"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n \"&:last-child td, &:last-child th\": { border: 0 },\r\n};\r\n\r\nexport const bodyCellSx: SxProps<Theme> = {\r\n fontFamily: \"poppins, Arial, sans-serif\",\r\n fontSize: \"14px\",\r\n padding: \"4px 12px\",\r\n};\r\n"],"mappings":"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","names":["Checkbox","FormControl","InputLabel","MenuItem","Select","TextField","CircularProgress","dayjs","Fragment","jsx","jsxs","Fragment","Typography","jsx","jsxs","Typography","jsx","jsxs","dayjs","FormControl","InputLabel","Select","MenuItem","Checkbox","TextField","CircularProgress"]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import {
|
|
2
|
+
END_POINT,
|
|
3
|
+
axios_default
|
|
4
|
+
} from "./chunk-O2XGWZLT.mjs";
|
|
5
|
+
|
|
6
|
+
// call-control-sdk/lib/hooks/useCallMonitoring.ts
|
|
7
|
+
import { useCallback, useState } from "react";
|
|
8
|
+
var useCallMonitoring = () => {
|
|
9
|
+
const [loading, setLoading] = useState(false);
|
|
10
|
+
const [success, setSuccess] = useState(false);
|
|
11
|
+
const [isError, setIsError] = useState(false);
|
|
12
|
+
const [error, setError] = useState(null);
|
|
13
|
+
const [data, setData] = useState(null);
|
|
14
|
+
const resetState = () => {
|
|
15
|
+
setSuccess(false);
|
|
16
|
+
setIsError(false);
|
|
17
|
+
setError(null);
|
|
18
|
+
};
|
|
19
|
+
const startMonitoring = useCallback(async (payload) => {
|
|
20
|
+
resetState();
|
|
21
|
+
setLoading(true);
|
|
22
|
+
return axios_default.post(END_POINT.SUPERVISOR_CALL_LISTEN, payload).then((res) => {
|
|
23
|
+
setData(res == null ? void 0 : res.data);
|
|
24
|
+
setSuccess(true);
|
|
25
|
+
return res == null ? void 0 : res.data;
|
|
26
|
+
}).catch((err) => {
|
|
27
|
+
var _a;
|
|
28
|
+
setIsError(true);
|
|
29
|
+
setError(err);
|
|
30
|
+
return (_a = err == null ? void 0 : err.response) == null ? void 0 : _a.data;
|
|
31
|
+
}).finally(() => {
|
|
32
|
+
setLoading(false);
|
|
33
|
+
});
|
|
34
|
+
}, []);
|
|
35
|
+
const stopMonitoring = useCallback(async (payload) => {
|
|
36
|
+
resetState();
|
|
37
|
+
setLoading(true);
|
|
38
|
+
return axios_default.post(END_POINT.SUPERVISOR_CALL_LEAVE, payload).then((res) => {
|
|
39
|
+
setData(res == null ? void 0 : res.data);
|
|
40
|
+
setSuccess(true);
|
|
41
|
+
return res == null ? void 0 : res.data;
|
|
42
|
+
}).catch((err) => {
|
|
43
|
+
var _a;
|
|
44
|
+
setIsError(true);
|
|
45
|
+
setError(err);
|
|
46
|
+
return (_a = err == null ? void 0 : err.response) == null ? void 0 : _a.data;
|
|
47
|
+
}).finally(() => {
|
|
48
|
+
setLoading(false);
|
|
49
|
+
});
|
|
50
|
+
}, []);
|
|
51
|
+
const changeMode = useCallback(async (payload) => {
|
|
52
|
+
resetState();
|
|
53
|
+
setLoading(true);
|
|
54
|
+
return axios_default.post(END_POINT.SUPERVISOR_CALL_CHANGE_MODE, payload).then((res) => {
|
|
55
|
+
setData(res == null ? void 0 : res.data);
|
|
56
|
+
setSuccess(true);
|
|
57
|
+
return res == null ? void 0 : res.data;
|
|
58
|
+
}).catch((err) => {
|
|
59
|
+
var _a;
|
|
60
|
+
setIsError(true);
|
|
61
|
+
setError(err);
|
|
62
|
+
return (_a = err == null ? void 0 : err.response) == null ? void 0 : _a.data;
|
|
63
|
+
}).finally(() => {
|
|
64
|
+
setLoading(false);
|
|
65
|
+
});
|
|
66
|
+
}, []);
|
|
67
|
+
return {
|
|
68
|
+
startMonitoring,
|
|
69
|
+
stopMonitoring,
|
|
70
|
+
changeMode,
|
|
71
|
+
isLoading: loading,
|
|
72
|
+
isSuccess: success,
|
|
73
|
+
isError,
|
|
74
|
+
error,
|
|
75
|
+
data
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
export {
|
|
80
|
+
useCallMonitoring
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=chunk-FVXHNBYV.mjs.map
|