ahs-cti 0.0.3 → 0.0.4

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.
Files changed (52) hide show
  1. package/dist/{agentDetailReport-CP7WYOIX.mjs → agentDetailReport-JYBV3TF6.mjs} +5 -4
  2. package/dist/{agentPerformanceReport-F52KNRKW.mjs → agentPerformanceReport-6RO6STKU.mjs} +10 -8
  3. package/dist/{agentPerformanceReport-F52KNRKW.mjs.map → agentPerformanceReport-6RO6STKU.mjs.map} +1 -1
  4. package/dist/{auditReport-CJ23LXIZ.mjs → auditReport-PYRZU3NA.mjs} +3 -3
  5. package/dist/{callHistory-ZA3SCD7K.mjs → callHistory-4JI64TU7.mjs} +24 -7
  6. package/dist/callHistory-4JI64TU7.mjs.map +1 -0
  7. package/dist/{campaigns-PIXRNMM4.mjs → campaigns-JZE22SIM.mjs} +150 -70
  8. package/dist/campaigns-JZE22SIM.mjs.map +1 -0
  9. package/dist/{cdrReport-7TKZERRX.mjs → cdrReport-RJTURVVV.mjs} +49 -19
  10. package/dist/cdrReport-RJTURVVV.mjs.map +1 -0
  11. package/dist/{chunk-X376SOIZ.mjs → chunk-AJQBR3AZ.mjs} +14279 -9170
  12. package/dist/chunk-AJQBR3AZ.mjs.map +1 -0
  13. package/dist/{chunk-BU6FMNBY.mjs → chunk-ATAP77RC.mjs} +2 -2
  14. package/dist/{chunk-JAAPNDP2.mjs → chunk-BDQZYTAY.mjs} +32 -34
  15. package/dist/chunk-BDQZYTAY.mjs.map +1 -0
  16. package/dist/{chunk-NQL4VODC.mjs → chunk-FVVDDZCA.mjs} +2 -2
  17. package/dist/chunk-HAJ6SECI.mjs +418 -0
  18. package/dist/chunk-HAJ6SECI.mjs.map +1 -0
  19. package/dist/{chunk-L4LLUMYA.mjs → chunk-IBFF6DJA.mjs} +2 -2
  20. package/dist/chunk-JOZ4YQMR.mjs +116 -0
  21. package/dist/chunk-JOZ4YQMR.mjs.map +1 -0
  22. package/dist/{chunk-DBSNJ3QH.mjs → chunk-OVC42HVH.mjs} +4 -1
  23. package/dist/chunk-OVC42HVH.mjs.map +1 -0
  24. package/dist/{chunk-NUYGQI7D.mjs → chunk-PO6POUPL.mjs} +2 -2
  25. package/dist/{chunk-VZCHJLAW.mjs → chunk-UNTGXE6T.mjs} +2 -2
  26. package/dist/index.js +5955 -5685
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.mjs +16 -16
  29. package/dist/index.mjs.map +1 -1
  30. package/dist/{liveStatus-IQIEZZE5.mjs → liveStatus-E7UP37FK.mjs} +4 -4
  31. package/dist/{loginReport-A4GUPW3G.mjs → loginReport-5QYHG6OM.mjs} +219 -66
  32. package/dist/loginReport-5QYHG6OM.mjs.map +1 -0
  33. package/dist/{managementDashboard-345DQMNO.mjs → managementDashboard-PARD3QHL.mjs} +8 -6
  34. package/dist/{managementDashboard-345DQMNO.mjs.map → managementDashboard-PARD3QHL.mjs.map} +1 -1
  35. package/package.json +1 -1
  36. package/dist/callHistory-ZA3SCD7K.mjs.map +0 -1
  37. package/dist/campaigns-PIXRNMM4.mjs.map +0 -1
  38. package/dist/cdrReport-7TKZERRX.mjs.map +0 -1
  39. package/dist/chunk-DBSNJ3QH.mjs.map +0 -1
  40. package/dist/chunk-GC3WM33W.mjs +0 -5783
  41. package/dist/chunk-GC3WM33W.mjs.map +0 -1
  42. package/dist/chunk-JAAPNDP2.mjs.map +0 -1
  43. package/dist/chunk-X376SOIZ.mjs.map +0 -1
  44. package/dist/loginReport-A4GUPW3G.mjs.map +0 -1
  45. /package/dist/{agentDetailReport-CP7WYOIX.mjs.map → agentDetailReport-JYBV3TF6.mjs.map} +0 -0
  46. /package/dist/{auditReport-CJ23LXIZ.mjs.map → auditReport-PYRZU3NA.mjs.map} +0 -0
  47. /package/dist/{chunk-BU6FMNBY.mjs.map → chunk-ATAP77RC.mjs.map} +0 -0
  48. /package/dist/{chunk-NQL4VODC.mjs.map → chunk-FVVDDZCA.mjs.map} +0 -0
  49. /package/dist/{chunk-L4LLUMYA.mjs.map → chunk-IBFF6DJA.mjs.map} +0 -0
  50. /package/dist/{chunk-NUYGQI7D.mjs.map → chunk-PO6POUPL.mjs.map} +0 -0
  51. /package/dist/{chunk-VZCHJLAW.mjs.map → chunk-UNTGXE6T.mjs.map} +0 -0
  52. /package/dist/{liveStatus-IQIEZZE5.mjs.map → liveStatus-E7UP37FK.mjs.map} +0 -0
@@ -0,0 +1,418 @@
1
+ import {
2
+ AppButton
3
+ } from "./chunk-HBR2JS4C.mjs";
4
+ import {
5
+ DateRangePicker
6
+ } from "./chunk-AJQBR3AZ.mjs";
7
+ import {
8
+ END_POINT,
9
+ axios_default
10
+ } from "./chunk-OVC42HVH.mjs";
11
+ import {
12
+ __spreadValues
13
+ } from "./chunk-UB5HSUGK.mjs";
14
+
15
+ // call-control-sdk/lib/pages/common/components/SearchBar.tsx
16
+ import { TextField, InputAdornment, IconButton } from "@mui/material";
17
+ import SearchIcon from "@mui/icons-material/Search";
18
+ import CloseIcon from "@mui/icons-material/Close";
19
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
20
+ function SearchBar({
21
+ value,
22
+ onChange,
23
+ placeholder = "Search...",
24
+ iconPosition = "start",
25
+ showClear = true,
26
+ width = 250,
27
+ borderRadius = "50px",
28
+ autoFocus = false,
29
+ inputRef,
30
+ sx
31
+ }) {
32
+ const searchAdornment = /* @__PURE__ */ jsx(InputAdornment, { position: iconPosition, children: /* @__PURE__ */ jsx(SearchIcon, { sx: { color: "#1A5F6C", fontSize: 18 } }) });
33
+ 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;
34
+ const startAdornment = iconPosition === "start" ? searchAdornment : void 0;
35
+ const endAdornment = iconPosition === "end" ? /* @__PURE__ */ jsxs(Fragment, { children: [
36
+ clearButton,
37
+ searchAdornment
38
+ ] }) : clearButton || void 0;
39
+ return /* @__PURE__ */ jsx(
40
+ TextField,
41
+ {
42
+ size: "small",
43
+ placeholder,
44
+ value,
45
+ autoFocus,
46
+ inputRef,
47
+ onChange: (e) => onChange(e.target.value),
48
+ InputProps: { startAdornment, endAdornment },
49
+ sx: __spreadValues({
50
+ width,
51
+ "& .MuiOutlinedInput-root": {
52
+ borderRadius,
53
+ height: 36,
54
+ backgroundColor: "#f5f7f8",
55
+ "& fieldset": { borderColor: "#dde3e8" },
56
+ "&:hover fieldset": { borderColor: "#1A5F6C" },
57
+ "&.Mui-focused fieldset": { borderColor: "#1A5F6C", borderWidth: "1.5px" }
58
+ },
59
+ "& .MuiInputBase-input": {
60
+ fontSize: "0.85rem",
61
+ "&::placeholder": { color: "#94a3b8", opacity: 1 }
62
+ }
63
+ }, sx || {})
64
+ }
65
+ );
66
+ }
67
+
68
+ // call-control-sdk/lib/pages/common/components/ReportFilterBar.tsx
69
+ import {
70
+ Box,
71
+ Checkbox as Checkbox2,
72
+ FormControl as FormControl2,
73
+ InputLabel as InputLabel2,
74
+ MenuItem as MenuItem2,
75
+ Select as Select2,
76
+ TextField as TextField2,
77
+ CircularProgress as CircularProgress2
78
+ } from "@mui/material";
79
+ import dayjs from "dayjs";
80
+ import isoWeek from "dayjs/plugin/isoWeek";
81
+
82
+ // call-control-sdk/lib/pages/common/components/AgentMultiSelect.tsx
83
+ import { useState, useEffect } from "react";
84
+ import {
85
+ Checkbox,
86
+ FormControl,
87
+ InputLabel,
88
+ MenuItem,
89
+ Select,
90
+ CircularProgress,
91
+ Typography
92
+ } from "@mui/material";
93
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
94
+ async function getUsers(params) {
95
+ var _a;
96
+ const res = await axios_default.get(END_POINT.USERS_LIST, { params });
97
+ return Array.isArray(res.data) ? res.data : Array.isArray((_a = res.data) == null ? void 0 : _a.data) ? res.data.data : [];
98
+ }
99
+ var SELECT_ALL_ID = -999;
100
+ function AgentMultiSelect({
101
+ value,
102
+ onChange,
103
+ agents: externalAgents,
104
+ label = "Agents",
105
+ placeholder = "All Agents",
106
+ role = "",
107
+ minWidth = 160,
108
+ disabled = false,
109
+ setIsAllUsersSelected
110
+ }) {
111
+ const [internalAgents, setInternalAgents] = useState([]);
112
+ const [loading, setLoading] = useState(false);
113
+ const agents = externalAgents != null ? externalAgents : internalAgents;
114
+ useEffect(() => {
115
+ if (externalAgents) return;
116
+ let cancelled = false;
117
+ (async () => {
118
+ try {
119
+ setLoading(true);
120
+ const users = await getUsers(role ? { role, pageSize: 500 } : { pageSize: 500 });
121
+ if (cancelled) return;
122
+ const filtered = role ? (users || []).filter((u) => {
123
+ const roleName = typeof u.role === "object" && u.role !== null ? u.role.name : u.role;
124
+ return roleName === role;
125
+ }) : users || [];
126
+ setInternalAgents(
127
+ filtered.map((u) => ({
128
+ id: u.id,
129
+ userId: u.userId,
130
+ displayName: [u.firstName, u.lastName].filter(Boolean).join(" ") || u.userId
131
+ }))
132
+ );
133
+ } catch (e) {
134
+ } finally {
135
+ if (!cancelled) setLoading(false);
136
+ }
137
+ })();
138
+ return () => {
139
+ cancelled = true;
140
+ };
141
+ }, [externalAgents, role]);
142
+ const selectedIds = value.map((a) => a.id);
143
+ const allSelected = agents.length > 0 && value.length === agents.length;
144
+ const handleChange = (ids) => {
145
+ setIsAllUsersSelected == null ? void 0 : setIsAllUsersSelected(ids.includes(SELECT_ALL_ID));
146
+ if (ids.includes(SELECT_ALL_ID)) {
147
+ onChange(allSelected ? [] : [...agents]);
148
+ } else {
149
+ onChange(agents.filter((a) => ids.includes(a.id)));
150
+ }
151
+ };
152
+ const renderValue = (selected) => {
153
+ const sel = selected;
154
+ if (sel.length === 0 || sel.length === agents.length) return placeholder;
155
+ return `${sel.length} Agent(s)`;
156
+ };
157
+ return /* @__PURE__ */ jsxs2(FormControl, { size: "small", sx: { minWidth }, disabled: disabled || loading, children: [
158
+ /* @__PURE__ */ jsx2(InputLabel, { sx: { fontSize: "0.76rem" }, children: label }),
159
+ /* @__PURE__ */ jsxs2(
160
+ Select,
161
+ {
162
+ multiple: true,
163
+ value: selectedIds,
164
+ label,
165
+ onChange: (e) => handleChange(e.target.value),
166
+ renderValue,
167
+ sx: { fontSize: "0.76rem", height: 32, borderRadius: "6px" },
168
+ MenuProps: {
169
+ variant: "menu",
170
+ PaperProps: {
171
+ sx: {
172
+ maxHeight: 280,
173
+ "& .MuiMenuItem-root": { fontSize: "0.76rem", minHeight: 32, py: 0.3 }
174
+ }
175
+ }
176
+ },
177
+ children: [
178
+ loading && /* @__PURE__ */ jsxs2(MenuItem, { disabled: true, children: [
179
+ /* @__PURE__ */ jsx2(CircularProgress, { size: 16, sx: { mr: 1 } }),
180
+ " Loading\u2026"
181
+ ] }),
182
+ !loading && /* @__PURE__ */ jsxs2(MenuItem, { value: SELECT_ALL_ID, children: [
183
+ /* @__PURE__ */ jsx2(Checkbox, { checked: allSelected, indeterminate: value.length > 0 && !allSelected, size: "small" }),
184
+ "Select All"
185
+ ] }),
186
+ !loading && agents.map((agent) => /* @__PURE__ */ jsxs2(MenuItem, { value: agent.id, children: [
187
+ /* @__PURE__ */ jsx2(Checkbox, { checked: selectedIds.includes(agent.id), size: "small" }),
188
+ /* @__PURE__ */ jsx2(Typography, { noWrap: true, sx: { fontSize: "0.76rem", maxWidth: 180 }, title: agent.displayName, children: agent.displayName })
189
+ ] }, agent.id))
190
+ ]
191
+ }
192
+ )
193
+ ] });
194
+ }
195
+
196
+ // call-control-sdk/lib/pages/common/components/ReportFilterBar.tsx
197
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
198
+ dayjs.extend(isoWeek);
199
+ var FILTER_HEIGHT = 32;
200
+ function ReportFilterBar({
201
+ startDate,
202
+ endDate,
203
+ onStartChange,
204
+ onEndChange,
205
+ showTime = true,
206
+ quickRange,
207
+ onQuickRangeChange,
208
+ showAgentSelect = false,
209
+ selectedAgents = [],
210
+ onAgentsChange,
211
+ setIsAllUsersSelected,
212
+ showQueueSelect = false,
213
+ queues = [],
214
+ selectedQueues = [],
215
+ onQueuesChange,
216
+ showProcessSelect = false,
217
+ processes = [],
218
+ selectedProcess = "",
219
+ onProcessChange,
220
+ showCallTypeSelect = false,
221
+ selectedCallType = "",
222
+ onCallTypeChange,
223
+ callTypeOptions = [
224
+ { label: "All Call Types", value: "" },
225
+ { label: "Inbound", value: "Inbound" },
226
+ { label: "Outbound", value: "Outbound" }
227
+ ],
228
+ showStatusSelect = false,
229
+ selectedStatus = "",
230
+ onStatusChange,
231
+ statusOptions = [
232
+ { label: "All Statuses", value: "" },
233
+ { label: "Answered", value: "Answered" },
234
+ { label: "Abandoned", value: "Abandoned" },
235
+ { label: "Not Answered", value: "NO_ANSWER" }
236
+ ],
237
+ showSearchBar = false,
238
+ searchValue = "",
239
+ onSearchChange,
240
+ searchPlaceholder = "Search...",
241
+ showSearchButton = false,
242
+ onSearch,
243
+ loading = false,
244
+ extra
245
+ }) {
246
+ const setQuick = (range) => {
247
+ onQuickRangeChange(range);
248
+ const today = dayjs();
249
+ let sd = today.startOf("day");
250
+ const ed = today;
251
+ if (range === "week") sd = today.startOf("week").startOf("day");
252
+ else if (range === "month") sd = today.startOf("month").startOf("day");
253
+ onStartChange(sd);
254
+ onEndChange(ed);
255
+ };
256
+ return /* @__PURE__ */ jsxs3(Box, { sx: { py: 0.6, px: 1, display: "flex", alignItems: "center", gap: 1, flexWrap: "wrap", rowGap: 1 }, children: [
257
+ /* @__PURE__ */ jsx3(
258
+ DateRangePicker,
259
+ {
260
+ startDate,
261
+ endDate,
262
+ onStartChange: (v) => {
263
+ onStartChange(v);
264
+ onQuickRangeChange("");
265
+ },
266
+ onEndChange: (v) => {
267
+ onEndChange(v);
268
+ onQuickRangeChange("");
269
+ },
270
+ showTime
271
+ }
272
+ ),
273
+ /* @__PURE__ */ jsx3(AppButton, { variant: quickRange === "today" ? "primary" : "outlined", onClick: () => setQuick("today"), sx: { height: FILTER_HEIGHT, whiteSpace: "nowrap" }, children: "Today" }),
274
+ /* @__PURE__ */ jsx3(AppButton, { variant: quickRange === "week" ? "primary" : "outlined", onClick: () => setQuick("week"), sx: { height: FILTER_HEIGHT, whiteSpace: "nowrap" }, children: "This Week" }),
275
+ /* @__PURE__ */ jsx3(AppButton, { variant: quickRange === "month" ? "primary" : "outlined", onClick: () => setQuick("month"), sx: { height: FILTER_HEIGHT, whiteSpace: "nowrap" }, children: "This Month" }),
276
+ showAgentSelect && onAgentsChange && /* @__PURE__ */ jsx3(AgentMultiSelect, { value: selectedAgents, onChange: onAgentsChange, setIsAllUsersSelected, minWidth: 130 }),
277
+ showQueueSelect && onQueuesChange && /* @__PURE__ */ jsxs3(FormControl2, { size: "small", sx: { minWidth: 130 }, children: [
278
+ /* @__PURE__ */ jsx3(InputLabel2, { sx: { fontSize: "0.76rem" }, children: "All Queues" }),
279
+ /* @__PURE__ */ jsxs3(
280
+ Select2,
281
+ {
282
+ multiple: true,
283
+ sx: { fontSize: "0.76rem", height: FILTER_HEIGHT, borderRadius: "6px" },
284
+ MenuProps: {
285
+ variant: "menu",
286
+ PaperProps: {
287
+ sx: {
288
+ maxHeight: 280,
289
+ "& .MuiMenuItem-root": { fontSize: "0.76rem", minHeight: 32, py: 0.3 }
290
+ }
291
+ }
292
+ },
293
+ value: selectedQueues.map((q) => q.id),
294
+ label: "All Queues",
295
+ onChange: (e) => {
296
+ const ids = e.target.value;
297
+ if (ids.includes(-1)) {
298
+ onQueuesChange(selectedQueues.length === queues.length ? [] : [...queues]);
299
+ } else {
300
+ onQueuesChange(queues.filter((q) => ids.includes(q.id)));
301
+ }
302
+ },
303
+ renderValue: (selected) => {
304
+ if (selected.length === 0) return "All Queues";
305
+ if (selected.length === queues.length) return "All Queues";
306
+ return `${selected.length} Queue(s)`;
307
+ },
308
+ children: [
309
+ /* @__PURE__ */ jsxs3(MenuItem2, { value: -1, children: [
310
+ /* @__PURE__ */ jsx3(Checkbox2, { checked: selectedQueues.length === queues.length && queues.length > 0, size: "small" }),
311
+ "Select All"
312
+ ] }),
313
+ queues.map((q) => /* @__PURE__ */ jsxs3(MenuItem2, { value: q.id, children: [
314
+ /* @__PURE__ */ jsx3(Checkbox2, { checked: selectedQueues.some((sq) => sq.id === q.id), size: "small" }),
315
+ q.name
316
+ ] }, q.id))
317
+ ]
318
+ }
319
+ )
320
+ ] }),
321
+ showProcessSelect && processes.length > 0 && onProcessChange && /* @__PURE__ */ jsx3(
322
+ TextField2,
323
+ {
324
+ select: true,
325
+ size: "small",
326
+ value: selectedProcess,
327
+ onChange: (e) => onProcessChange(e.target.value),
328
+ sx: { width: 140, "& .MuiOutlinedInput-root": { height: FILTER_HEIGHT, borderRadius: "6px", fontSize: 13 } },
329
+ children: processes.map((p) => /* @__PURE__ */ jsx3("option", { value: p.value, children: p.label }, p.value))
330
+ }
331
+ ),
332
+ showCallTypeSelect && onCallTypeChange && /* @__PURE__ */ jsxs3(FormControl2, { size: "small", sx: { minWidth: 130 }, children: [
333
+ /* @__PURE__ */ jsx3(InputLabel2, { sx: { fontSize: "0.76rem" }, children: "Call Type" }),
334
+ /* @__PURE__ */ jsx3(
335
+ Select2,
336
+ {
337
+ value: selectedCallType,
338
+ label: "Call Type",
339
+ onChange: (e) => onCallTypeChange(e.target.value),
340
+ sx: { fontSize: "0.76rem", height: FILTER_HEIGHT, borderRadius: "6px" },
341
+ MenuProps: {
342
+ PaperProps: {
343
+ sx: {
344
+ "& .MuiMenuItem-root": { fontSize: "0.76rem", minHeight: 32, py: 0.3 }
345
+ }
346
+ }
347
+ },
348
+ children: callTypeOptions.map((opt) => /* @__PURE__ */ jsx3(MenuItem2, { value: opt.value, children: opt.label }, opt.value || "all"))
349
+ }
350
+ )
351
+ ] }),
352
+ showStatusSelect && onStatusChange && /* @__PURE__ */ jsxs3(FormControl2, { size: "small", sx: { minWidth: 130 }, children: [
353
+ /* @__PURE__ */ jsx3(InputLabel2, { sx: { fontSize: "0.76rem" }, children: "Status" }),
354
+ /* @__PURE__ */ jsx3(
355
+ Select2,
356
+ {
357
+ value: selectedStatus,
358
+ label: "Status",
359
+ onChange: (e) => onStatusChange(e.target.value),
360
+ sx: { fontSize: "0.76rem", height: FILTER_HEIGHT, borderRadius: "6px" },
361
+ MenuProps: {
362
+ PaperProps: {
363
+ sx: {
364
+ "& .MuiMenuItem-root": { fontSize: "0.76rem", minHeight: 32, py: 0.3 }
365
+ }
366
+ }
367
+ },
368
+ children: statusOptions.map((opt) => /* @__PURE__ */ jsx3(MenuItem2, { value: opt.value, children: opt.label }, opt.value || "all"))
369
+ }
370
+ )
371
+ ] }),
372
+ showSearchBar && onSearchChange && /* @__PURE__ */ jsx3(
373
+ SearchBar,
374
+ {
375
+ value: searchValue,
376
+ onChange: onSearchChange,
377
+ placeholder: searchPlaceholder,
378
+ width: 200,
379
+ borderRadius: "6px",
380
+ sx: { "& .MuiOutlinedInput-root": { height: FILTER_HEIGHT, fontSize: 13 } }
381
+ }
382
+ ),
383
+ showSearchButton && onSearch && /* @__PURE__ */ jsx3(AppButton, { onClick: onSearch, disabled: loading, sx: { height: FILTER_HEIGHT }, children: loading ? /* @__PURE__ */ jsx3(CircularProgress2, { size: 16, sx: { color: "#fff" } }) : "Search" }),
384
+ extra
385
+ ] });
386
+ }
387
+
388
+ // call-control-sdk/lib/pages/common/utils/tableStyles.ts
389
+ var headCellSx = {
390
+ fontFamily: "poppins, Arial, sans-serif",
391
+ bgcolor: "#f1f1f1",
392
+ color: "#333",
393
+ fontWeight: 600,
394
+ whiteSpace: "nowrap",
395
+ fontSize: "14px"
396
+ };
397
+ var sortLabelSx = {
398
+ "&.MuiTableSortLabel-root": { color: "#333" },
399
+ "&.MuiTableSortLabel-root:hover": { color: "#555" },
400
+ "&.Mui-active": { color: "#333" },
401
+ "& .MuiTableSortLabel-icon": { color: "#333 !important" }
402
+ };
403
+ var reportBodyCellSx = {
404
+ fontSize: "0.75rem",
405
+ py: 0.6,
406
+ px: 1,
407
+ borderBottom: "1px solid #eef1f6",
408
+ whiteSpace: "nowrap"
409
+ };
410
+
411
+ export {
412
+ SearchBar,
413
+ ReportFilterBar,
414
+ headCellSx,
415
+ sortLabelSx,
416
+ reportBodyCellSx
417
+ };
418
+ //# sourceMappingURL=chunk-HAJ6SECI.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/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 { 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","jsx","jsxs","jsx","jsxs","FormControl","InputLabel","Select","MenuItem","Checkbox","TextField","CircularProgress"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sdkStateManager
3
- } from "./chunk-DBSNJ3QH.mjs";
3
+ } from "./chunk-OVC42HVH.mjs";
4
4
  import {
5
5
  __spreadProps,
6
6
  __spreadValues
@@ -54,4 +54,4 @@ var useGetCallerData = () => {
54
54
  export {
55
55
  useGetCallerData
56
56
  };
57
- //# sourceMappingURL=chunk-L4LLUMYA.mjs.map
57
+ //# sourceMappingURL=chunk-IBFF6DJA.mjs.map
@@ -0,0 +1,116 @@
1
+ // call-control-sdk/lib/pages/common/components/PageHeader.tsx
2
+ import { Box, Typography, IconButton } from "@mui/material";
3
+ import ArrowBackIcon from "@mui/icons-material/ArrowBack";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ function PageHeader({
6
+ title,
7
+ subtitle,
8
+ avatar,
9
+ showBack = false,
10
+ onBack,
11
+ actions,
12
+ count,
13
+ countLabel = "items"
14
+ }) {
15
+ const handleBack = () => onBack == null ? void 0 : onBack();
16
+ return /* @__PURE__ */ jsx(Box, { sx: { px: { xs: 2, md: 2.5 }, py: "14px" }, children: /* @__PURE__ */ jsxs(
17
+ Box,
18
+ {
19
+ sx: {
20
+ display: "flex",
21
+ alignItems: { xs: "flex-start", sm: "center" },
22
+ justifyContent: "space-between",
23
+ flexDirection: { xs: "column", sm: "row" },
24
+ gap: 1
25
+ },
26
+ children: [
27
+ /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", gap: 1.25, minWidth: 0 }, children: [
28
+ showBack && /* @__PURE__ */ jsx(
29
+ IconButton,
30
+ {
31
+ onClick: handleBack,
32
+ size: "small",
33
+ sx: {
34
+ width: 30,
35
+ height: 30,
36
+ flexShrink: 0,
37
+ border: "none",
38
+ borderRadius: "6px",
39
+ backgroundColor: "action.hover",
40
+ color: "text.secondary",
41
+ "&:hover": { backgroundColor: "action.selected", color: "text.primary" },
42
+ transition: "all 0.15s ease"
43
+ },
44
+ children: /* @__PURE__ */ jsx(ArrowBackIcon, { sx: { fontSize: 15 } })
45
+ }
46
+ ),
47
+ avatar,
48
+ /* @__PURE__ */ jsxs(Box, { children: [
49
+ /* @__PURE__ */ jsx(
50
+ Typography,
51
+ {
52
+ sx: {
53
+ fontWeight: 700,
54
+ fontSize: { xs: "1.25rem", sm: "1.5rem", lg: "1.75rem" },
55
+ color: "text.primary",
56
+ lineHeight: 1.3,
57
+ whiteSpace: "nowrap",
58
+ overflow: "hidden",
59
+ textOverflow: "ellipsis",
60
+ pl: !showBack ? 0 : 2
61
+ },
62
+ children: title
63
+ }
64
+ ),
65
+ subtitle && /* @__PURE__ */ jsx(
66
+ Typography,
67
+ {
68
+ sx: {
69
+ fontSize: "0.78rem",
70
+ color: "text.secondary",
71
+ pl: !showBack ? 0 : 2,
72
+ mt: 0.2,
73
+ lineHeight: 1.4
74
+ },
75
+ children: subtitle
76
+ }
77
+ )
78
+ ] })
79
+ ] }),
80
+ /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", gap: 1, flexShrink: 0 }, children: [
81
+ count !== void 0 && /* @__PURE__ */ jsxs(
82
+ Box,
83
+ {
84
+ sx: {
85
+ display: "flex",
86
+ alignItems: "center",
87
+ gap: "5px",
88
+ px: "10px",
89
+ height: 32,
90
+ border: "1px solid",
91
+ borderColor: "divider",
92
+ borderRadius: "6px",
93
+ backgroundColor: "background.paper",
94
+ whiteSpace: "nowrap"
95
+ },
96
+ children: [
97
+ /* @__PURE__ */ jsx(Box, { sx: { width: 6, height: 6, borderRadius: "50%", backgroundColor: "#1A5F6C", flexShrink: 0 } }),
98
+ /* @__PURE__ */ jsxs(Typography, { sx: { fontSize: "0.75rem", color: "text.secondary" }, children: [
99
+ count,
100
+ " ",
101
+ countLabel
102
+ ] })
103
+ ]
104
+ }
105
+ ),
106
+ actions
107
+ ] })
108
+ ]
109
+ }
110
+ ) });
111
+ }
112
+
113
+ export {
114
+ PageHeader
115
+ };
116
+ //# sourceMappingURL=chunk-JOZ4YQMR.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../call-control-sdk/lib/pages/common/components/PageHeader.tsx"],"sourcesContent":["import React from \"react\";\r\nimport { Box, Typography, IconButton } from \"@mui/material\";\r\nimport ArrowBackIcon from \"@mui/icons-material/ArrowBack\";\r\n\r\ninterface PageHeaderProps {\r\n title: string;\r\n subtitle?: React.ReactNode;\r\n avatar?: React.ReactNode;\r\n showBack?: boolean;\r\n onBack?: () => void;\r\n actions?: React.ReactNode;\r\n count?: number;\r\n countLabel?: string;\r\n}\r\n\r\nexport default function PageHeader({\r\n title,\r\n subtitle,\r\n avatar,\r\n showBack = false,\r\n onBack,\r\n actions,\r\n count,\r\n countLabel = \"items\",\r\n}: PageHeaderProps) {\r\n const handleBack = () => onBack?.();\r\n\r\n return (\r\n <Box sx={{ px: { xs: 2, md: 2.5 }, py: \"14px\" }}>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: { xs: \"flex-start\", sm: \"center\" },\r\n justifyContent: \"space-between\",\r\n flexDirection: { xs: \"column\", sm: \"row\" },\r\n gap: 1,\r\n }}\r\n >\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.25, minWidth: 0 }}>\r\n {showBack && (\r\n <IconButton\r\n onClick={handleBack}\r\n size=\"small\"\r\n sx={{\r\n width: 30,\r\n height: 30,\r\n flexShrink: 0,\r\n border: \"none\",\r\n borderRadius: \"6px\",\r\n backgroundColor: \"action.hover\",\r\n color: \"text.secondary\",\r\n \"&:hover\": { backgroundColor: \"action.selected\", color: \"text.primary\" },\r\n transition: \"all 0.15s ease\",\r\n }}\r\n >\r\n <ArrowBackIcon sx={{ fontSize: 15 }} />\r\n </IconButton>\r\n )}\r\n {avatar}\r\n <Box>\r\n <Typography\r\n sx={{\r\n fontWeight: 700,\r\n fontSize: { xs: \"1.25rem\", sm: \"1.5rem\", lg: \"1.75rem\" },\r\n color: \"text.primary\",\r\n lineHeight: 1.3,\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n pl: !showBack ? 0 : 2,\r\n }}\r\n >\r\n {title}\r\n </Typography>\r\n {subtitle && (\r\n <Typography\r\n sx={{\r\n fontSize: \"0.78rem\",\r\n color: \"text.secondary\",\r\n pl: !showBack ? 0 : 2,\r\n mt: 0.2,\r\n lineHeight: 1.4,\r\n }}\r\n >\r\n {subtitle}\r\n </Typography>\r\n )}\r\n </Box>\r\n </Box>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flexShrink: 0 }}>\r\n {count !== undefined && (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"5px\",\r\n px: \"10px\",\r\n height: 32,\r\n border: \"1px solid\",\r\n borderColor: \"divider\",\r\n borderRadius: \"6px\",\r\n backgroundColor: \"background.paper\",\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >\r\n <Box sx={{ width: 6, height: 6, borderRadius: \"50%\", backgroundColor: \"#1A5F6C\", flexShrink: 0 }} />\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\" }}>\r\n {count} {countLabel}\r\n </Typography>\r\n </Box>\r\n )}\r\n {actions}\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n"],"mappings":";AACA,SAAS,KAAK,YAAY,kBAAkB;AAC5C,OAAO,mBAAmB;AAqDZ,cAIJ,YAJI;AAxCC,SAAR,WAA4B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AACf,GAAoB;AAClB,QAAM,aAAa,MAAM;AAEzB,SACE,oBAAC,OAAI,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,OAAO,GAC5C;AAAA,IAAC;AAAA;AAAA,MACC,IAAI;AAAA,QACF,SAAS;AAAA,QACT,YAAY,EAAE,IAAI,cAAc,IAAI,SAAS;AAAA,QAC7C,gBAAgB;AAAA,QAChB,eAAe,EAAE,IAAI,UAAU,IAAI,MAAM;AAAA,QACzC,KAAK;AAAA,MACP;AAAA,MAEA;AAAA,6BAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,MAAM,UAAU,EAAE,GACtE;AAAA,sBACC;AAAA,YAAC;AAAA;AAAA,cACC,SAAS;AAAA,cACT,MAAK;AAAA,cACL,IAAI;AAAA,gBACF,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,YAAY;AAAA,gBACZ,QAAQ;AAAA,gBACR,cAAc;AAAA,gBACd,iBAAiB;AAAA,gBACjB,OAAO;AAAA,gBACP,WAAW,EAAE,iBAAiB,mBAAmB,OAAO,eAAe;AAAA,gBACvE,YAAY;AAAA,cACd;AAAA,cAEA,8BAAC,iBAAc,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,UACvC;AAAA,UAED;AAAA,UACD,qBAAC,OACC;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,IAAI;AAAA,kBACF,YAAY;AAAA,kBACZ,UAAU,EAAE,IAAI,WAAW,IAAI,UAAU,IAAI,UAAU;AAAA,kBACvD,OAAO;AAAA,kBACP,YAAY;AAAA,kBACZ,YAAY;AAAA,kBACZ,UAAU;AAAA,kBACV,cAAc;AAAA,kBACd,IAAI,CAAC,WAAW,IAAI;AAAA,gBACtB;AAAA,gBAEC;AAAA;AAAA,YACH;AAAA,YACC,YACC;AAAA,cAAC;AAAA;AAAA,gBACC,IAAI;AAAA,kBACF,UAAU;AAAA,kBACV,OAAO;AAAA,kBACP,IAAI,CAAC,WAAW,IAAI;AAAA,kBACpB,IAAI;AAAA,kBACJ,YAAY;AAAA,gBACd;AAAA,gBAEC;AAAA;AAAA,YACH;AAAA,aAEJ;AAAA,WACF;AAAA,QACA,qBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,YAAY,EAAE,GACrE;AAAA,oBAAU,UACT;AAAA,YAAC;AAAA;AAAA,cACC,IAAI;AAAA,gBACF,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,KAAK;AAAA,gBACL,IAAI;AAAA,gBACJ,QAAQ;AAAA,gBACR,QAAQ;AAAA,gBACR,aAAa;AAAA,gBACb,cAAc;AAAA,gBACd,iBAAiB;AAAA,gBACjB,YAAY;AAAA,cACd;AAAA,cAEA;AAAA,oCAAC,OAAI,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,cAAc,OAAO,iBAAiB,WAAW,YAAY,EAAE,GAAG;AAAA,gBAClG,qBAAC,cAAW,IAAI,EAAE,UAAU,WAAW,OAAO,iBAAiB,GAC5D;AAAA;AAAA,kBAAM;AAAA,kBAAE;AAAA,mBACX;AAAA;AAAA;AAAA,UACF;AAAA,UAED;AAAA,WACH;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;","names":[]}
@@ -52,6 +52,8 @@ var SDK_PERMISSIONS = {
52
52
  REPORTS_CDR_READ: "reports:cdr:read",
53
53
  REPORTS_CDR_EXPORT: "reports:cdr:export",
54
54
  REPORTS_CDR_MANAGE: "reports:cdr:manage",
55
+ REPORTS_CDR_RECORDING: "reports:cdr:recording",
56
+ REPORTS_CDR_AUDIT: "reports:cdr:audit",
55
57
  // Reports — Agent Performance / Detail
56
58
  REPORTS_AGENT_PERFORMANCE_READ: "reports:agent_performance:read",
57
59
  REPORTS_AGENT_PERFORMANCE_EXPORT: "reports:agent_performance:export",
@@ -977,6 +979,7 @@ var END_POINT = {
977
979
  },
978
980
  LOGIN_REPORT_AGENT_SESSIONS: (agentId) => `${getBaseURL()}${VERSION.v1}/reports/login-report/agents/${agentId}/sessions`,
979
981
  LOGIN_REPORT_AGENT_SESSIONS_EXPORT_EXCEL: (agentId) => `${getBaseURL()}${VERSION.v1}/reports/login-report/agents/${agentId}/sessions/export/excel`,
982
+ LOGIN_REPORT_REGULARIZE_SESSION: (sessionId) => `${getBaseURL()}${VERSION.v1}/reports/login-report/sessions/${sessionId}`,
980
983
  get LOGIN_REPORT_EXPORT_EXCEL() {
981
984
  return `${getBaseURL()}${VERSION.v1}/reports/login-report/export/excel`;
982
985
  },
@@ -1057,4 +1060,4 @@ export {
1057
1060
  deepFindTotal,
1058
1061
  axios_default
1059
1062
  };
1060
- //# sourceMappingURL=chunk-DBSNJ3QH.mjs.map
1063
+ //# sourceMappingURL=chunk-OVC42HVH.mjs.map