ahs-cti 0.0.7 → 0.0.9

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 (139) hide show
  1. package/dist/agentDetailReport-F44HMQ5O.mjs +27 -0
  2. package/dist/agentDetailReport-F44HMQ5O.mjs.map +1 -0
  3. package/dist/{agentPerformanceReport-JZK5DN5E.mjs → agentPerformanceReport-TTOMNENK.mjs} +25 -15
  4. package/dist/{agentPerformanceReport-JZK5DN5E.mjs.map → agentPerformanceReport-TTOMNENK.mjs.map} +1 -1
  5. package/dist/auditReport-QTMAKVTN.mjs +26 -0
  6. package/dist/auditReport-QTMAKVTN.mjs.map +1 -0
  7. package/dist/{callHistory-T3M76D4B.mjs → callHistory-4J4J2XHA.mjs} +20 -10
  8. package/dist/{callHistory-T3M76D4B.mjs.map → callHistory-4J4J2XHA.mjs.map} +1 -1
  9. package/dist/{campaigns-5PVHXBSD.mjs → campaigns-N3UNUGQP.mjs} +23 -13
  10. package/dist/{campaigns-5PVHXBSD.mjs.map → campaigns-N3UNUGQP.mjs.map} +1 -1
  11. package/dist/{caroQualityAuditDashboard-EUDYZ3QY.mjs → caroQualityAuditDashboard-TNS4L2NR.mjs} +12 -2
  12. package/dist/{caroQualityAuditDashboard-EUDYZ3QY.mjs.map → caroQualityAuditDashboard-TNS4L2NR.mjs.map} +1 -1
  13. package/dist/{caroVoiceAI-GGJCVUIQ.mjs → caroVoiceAI-OUTAAIFE.mjs} +12 -2
  14. package/dist/{caroVoiceAI-GGJCVUIQ.mjs.map → caroVoiceAI-OUTAAIFE.mjs.map} +1 -1
  15. package/dist/{cdrReport-ZMDHSZUW.mjs → cdrReport-Z35OLYUL.mjs} +26 -16
  16. package/dist/{cdrReport-ZMDHSZUW.mjs.map → cdrReport-Z35OLYUL.mjs.map} +1 -1
  17. package/dist/chunk-3PNP6G5P.mjs +92 -0
  18. package/dist/chunk-3PNP6G5P.mjs.map +1 -0
  19. package/dist/{chunk-DF5EFKXC.mjs → chunk-45MLTWV7.mjs} +12 -2
  20. package/dist/{chunk-DF5EFKXC.mjs.map → chunk-45MLTWV7.mjs.map} +1 -1
  21. package/dist/chunk-635IIVZE.mjs +24 -0
  22. package/dist/{chunk-FRKV2U3I.mjs.map → chunk-635IIVZE.mjs.map} +1 -1
  23. package/dist/chunk-677RFPP5.mjs +24 -0
  24. package/dist/{chunk-7LE2VTAI.mjs.map → chunk-677RFPP5.mjs.map} +1 -1
  25. package/dist/{chunk-Q6G3MPS7.mjs → chunk-ERSNXW5X.mjs} +11 -1
  26. package/dist/{chunk-Q6G3MPS7.mjs.map → chunk-ERSNXW5X.mjs.map} +1 -1
  27. package/dist/{chunk-H7GRWLYI.mjs → chunk-G6KRLGGC.mjs} +13 -3
  28. package/dist/{chunk-H7GRWLYI.mjs.map → chunk-G6KRLGGC.mjs.map} +1 -1
  29. package/dist/chunk-GFVR3HLK.mjs +24 -0
  30. package/dist/{chunk-6WLG2PXL.mjs.map → chunk-GFVR3HLK.mjs.map} +1 -1
  31. package/dist/{chunk-E6KYWWAI.mjs → chunk-GTI2ZVQX.mjs} +12 -2
  32. package/dist/{chunk-E6KYWWAI.mjs.map → chunk-GTI2ZVQX.mjs.map} +1 -1
  33. package/dist/chunk-H22TUCN3.mjs +24 -0
  34. package/dist/{chunk-AOJRUZTO.mjs.map → chunk-H22TUCN3.mjs.map} +1 -1
  35. package/dist/{chunk-YAQYTUTX.mjs → chunk-HAOFUADN.mjs} +12 -2
  36. package/dist/{chunk-YAQYTUTX.mjs.map → chunk-HAOFUADN.mjs.map} +1 -1
  37. package/dist/{chunk-33QNSXP7.mjs → chunk-JHC7OUQG.mjs} +21 -11
  38. package/dist/chunk-JHC7OUQG.mjs.map +1 -0
  39. package/dist/chunk-KSVNZKRD.mjs +10930 -0
  40. package/dist/chunk-KSVNZKRD.mjs.map +1 -0
  41. package/dist/{chunk-VVDJLUYT.mjs → chunk-M7FJYZF6.mjs} +12 -2
  42. package/dist/{chunk-VVDJLUYT.mjs.map → chunk-M7FJYZF6.mjs.map} +1 -1
  43. package/dist/{chunk-DNTGBNZD.mjs → chunk-NDZDJWXY.mjs} +13 -3
  44. package/dist/{chunk-DNTGBNZD.mjs.map → chunk-NDZDJWXY.mjs.map} +1 -1
  45. package/dist/chunk-S2SMCH2C.mjs +71 -0
  46. package/dist/chunk-S2SMCH2C.mjs.map +1 -0
  47. package/dist/{chunk-IDZWA6HG.mjs → chunk-S34CQVTF.mjs} +14 -4
  48. package/dist/{chunk-IDZWA6HG.mjs.map → chunk-S34CQVTF.mjs.map} +1 -1
  49. package/dist/{chunk-2M3YEXYA.mjs → chunk-SUS5RUCA.mjs} +17 -7
  50. package/dist/{chunk-2M3YEXYA.mjs.map → chunk-SUS5RUCA.mjs.map} +1 -1
  51. package/dist/{chunk-3J7KQNEU.mjs → chunk-TCYBXDAP.mjs} +13 -3
  52. package/dist/{chunk-3J7KQNEU.mjs.map → chunk-TCYBXDAP.mjs.map} +1 -1
  53. package/dist/chunk-VII5JNA6.mjs +24 -0
  54. package/dist/{chunk-WTBVFN4H.mjs.map → chunk-VII5JNA6.mjs.map} +1 -1
  55. package/dist/chunk-W3ECDLUB.mjs +24 -0
  56. package/dist/{chunk-OHJIW3I3.mjs.map → chunk-W3ECDLUB.mjs.map} +1 -1
  57. package/dist/{chunk-VBIDPX5Z.mjs → chunk-Y4PAUTZ4.mjs} +13 -3
  58. package/dist/{chunk-VBIDPX5Z.mjs.map → chunk-Y4PAUTZ4.mjs.map} +1 -1
  59. package/dist/{chunk-NAZO4HKB.mjs → chunk-ZSRD3ZXF.mjs} +12 -2
  60. package/dist/{chunk-NAZO4HKB.mjs.map → chunk-ZSRD3ZXF.mjs.map} +1 -1
  61. package/dist/index.mjs +33 -23
  62. package/dist/index.mjs.map +1 -1
  63. package/dist/{liveStatus-YSBYSVOO.mjs → liveStatus-PRDEL7CK.mjs} +16 -6
  64. package/dist/{liveStatus-YSBYSVOO.mjs.map → liveStatus-PRDEL7CK.mjs.map} +1 -1
  65. package/dist/{loginReport-YIVBJVJD.mjs → loginReport-47QNACQU.mjs} +22 -12
  66. package/dist/{loginReport-YIVBJVJD.mjs.map → loginReport-47QNACQU.mjs.map} +1 -1
  67. package/dist/{managementDashboard-7EMQC2UA.mjs → managementDashboard-SZFYULKA.mjs} +22 -12
  68. package/dist/{managementDashboard-7EMQC2UA.mjs.map → managementDashboard-SZFYULKA.mjs.map} +1 -1
  69. package/dist/{qualityAuditDashboard-ENGQN2WQ.mjs → qualityAuditDashboard-FHRGB77R.mjs} +12 -2
  70. package/dist/{qualityAuditDashboard-ENGQN2WQ.mjs.map → qualityAuditDashboard-FHRGB77R.mjs.map} +1 -1
  71. package/dist-react/agentDetailReport-PDKQKJNL.mjs +23 -0
  72. package/dist-react/agentPerformanceReport-MU2FASNN.mjs +544 -0
  73. package/dist-react/agentPerformanceReport-MU2FASNN.mjs.map +1 -0
  74. package/dist-react/auditReport-WH2KDNYT.mjs +25 -0
  75. package/{dist/auditReport-6ZUJ4UFO.mjs.map → dist-react/auditReport-WH2KDNYT.mjs.map} +1 -1
  76. package/dist-react/callHistory-HXXRYUIV.mjs +832 -0
  77. package/dist-react/callHistory-HXXRYUIV.mjs.map +1 -0
  78. package/dist-react/campaigns-J7KIAATE.mjs +3139 -0
  79. package/dist-react/campaigns-J7KIAATE.mjs.map +1 -0
  80. package/dist-react/caroQualityAuditDashboard-THYPVOCP.mjs +76 -0
  81. package/dist-react/caroQualityAuditDashboard-THYPVOCP.mjs.map +1 -0
  82. package/dist-react/caroVoiceAI-XGDUETXI.mjs +31 -0
  83. package/dist-react/caroVoiceAI-XGDUETXI.mjs.map +1 -0
  84. package/dist-react/cdrReport-SX2FZAO6.mjs +858 -0
  85. package/dist-react/cdrReport-SX2FZAO6.mjs.map +1 -0
  86. package/dist-react/chunk-4YF4IDV6.mjs +72 -0
  87. package/dist-react/chunk-4YF4IDV6.mjs.map +1 -0
  88. package/dist-react/chunk-ADM2JJCP.mjs +190 -0
  89. package/dist-react/chunk-ADM2JJCP.mjs.map +1 -0
  90. package/dist-react/chunk-EN7HM2MD.mjs +688 -0
  91. package/dist-react/chunk-EN7HM2MD.mjs.map +1 -0
  92. package/{dist/chunk-LHE4QGJJ.mjs → dist-react/chunk-F7G2XFRU.mjs} +12 -2
  93. package/{dist/chunk-LHE4QGJJ.mjs.map → dist-react/chunk-F7G2XFRU.mjs.map} +1 -1
  94. package/{dist/chunk-DJP744FF.mjs → dist-react/chunk-GUMGXVIT.mjs} +12 -2
  95. package/{dist/chunk-DJP744FF.mjs.map → dist-react/chunk-GUMGXVIT.mjs.map} +1 -1
  96. package/dist-react/chunk-KRXHK4AU.mjs +127 -0
  97. package/dist-react/chunk-KRXHK4AU.mjs.map +1 -0
  98. package/{dist/chunk-U2UDKXMB.mjs → dist-react/chunk-LWDAC6QU.mjs} +12 -2
  99. package/{dist/chunk-U2UDKXMB.mjs.map → dist-react/chunk-LWDAC6QU.mjs.map} +1 -1
  100. package/dist-react/chunk-LX6I32Y4.mjs +106 -0
  101. package/dist-react/chunk-LX6I32Y4.mjs.map +1 -0
  102. package/dist-react/chunk-MCD5FQNY.mjs +428 -0
  103. package/dist-react/chunk-MCD5FQNY.mjs.map +1 -0
  104. package/dist-react/chunk-MD472UKG.mjs +757 -0
  105. package/{dist/chunk-33QNSXP7.mjs.map → dist-react/chunk-MD472UKG.mjs.map} +1 -1
  106. package/dist-react/chunk-ORNNWQI6.mjs +67 -0
  107. package/dist-react/chunk-ORNNWQI6.mjs.map +1 -0
  108. package/dist-react/chunk-S4J35V4B.mjs +126 -0
  109. package/dist-react/chunk-S4J35V4B.mjs.map +1 -0
  110. package/dist-react/chunk-T53WMN5A.mjs +126 -0
  111. package/dist-react/chunk-T53WMN5A.mjs.map +1 -0
  112. package/dist-react/chunk-UTSRABCL.mjs +96 -0
  113. package/dist-react/chunk-UTSRABCL.mjs.map +1 -0
  114. package/dist-react/incoming-4WP3FJI4.mp3 +0 -0
  115. package/dist-react/incoming.mp3 +0 -0
  116. package/dist-react/index.d.mts +2476 -0
  117. package/dist-react/index.d.ts +2477 -0
  118. package/dist-react/index.js +26713 -0
  119. package/dist-react/index.js.map +1 -0
  120. package/dist-react/index.mjs +4675 -0
  121. package/dist-react/index.mjs.map +1 -0
  122. package/dist-react/liveStatus-IDZ7CPYK.mjs +1087 -0
  123. package/dist-react/liveStatus-IDZ7CPYK.mjs.map +1 -0
  124. package/dist-react/loginReport-F47GUU53.mjs +990 -0
  125. package/dist-react/loginReport-F47GUU53.mjs.map +1 -0
  126. package/dist-react/managementDashboard-GC5E7NEL.mjs +540 -0
  127. package/dist-react/managementDashboard-GC5E7NEL.mjs.map +1 -0
  128. package/dist-react/qualityAuditDashboard-ZAM7HRNH.mjs +76 -0
  129. package/dist-react/qualityAuditDashboard-ZAM7HRNH.mjs.map +1 -0
  130. package/package.json +17 -2
  131. package/dist/agentDetailReport-ZR7U2LLB.mjs +0 -17
  132. package/dist/auditReport-6ZUJ4UFO.mjs +0 -16
  133. package/dist/chunk-6WLG2PXL.mjs +0 -14
  134. package/dist/chunk-7LE2VTAI.mjs +0 -14
  135. package/dist/chunk-AOJRUZTO.mjs +0 -14
  136. package/dist/chunk-FRKV2U3I.mjs +0 -14
  137. package/dist/chunk-OHJIW3I3.mjs +0 -14
  138. package/dist/chunk-WTBVFN4H.mjs +0 -14
  139. /package/{dist/agentDetailReport-ZR7U2LLB.mjs.map → dist-react/agentDetailReport-PDKQKJNL.mjs.map} +0 -0
@@ -1,7 +1,17 @@
1
+ import * as __ext_react from "react";
2
+ import * as __ext_react_dom from "react-dom";
3
+ import * as __ext_react_jsx from "react/jsx-runtime";
4
+ var __cjsExternals = { "react": __ext_react, "react-dom": __ext_react_dom, "react/jsx-runtime": __ext_react_jsx };
5
+ var require = function (id) {
6
+ var mod = __cjsExternals[id];
7
+ if (mod) return mod.default || mod;
8
+ throw new Error('Dynamic require of "' + id + '" is not supported');
9
+ };
10
+
1
11
  import {
2
12
  END_POINT,
3
13
  axios_default
4
- } from "./chunk-LHE4QGJJ.mjs";
14
+ } from "./chunk-F7G2XFRU.mjs";
5
15
 
6
16
  // call-control-sdk/lib/pages/cdrReport/useCdrReport.ts
7
17
  import { useCallback, useState } from "react";
@@ -58,4 +68,4 @@ export {
58
68
  exportCdrReportToExcel,
59
69
  getRecordingByCall
60
70
  };
61
- //# sourceMappingURL=chunk-DJP744FF.mjs.map
71
+ //# sourceMappingURL=chunk-GUMGXVIT.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../call-control-sdk/lib/pages/cdrReport/useCdrReport.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tCdrAgentFilterOption,\r\n\tCdrQueueFilterOption,\r\n\tCdrRecordsPage,\r\n\tCdrReportParams,\r\n\tCdrReportResponse,\r\n} from \"./types\";\r\n\r\n// ─── Build query string for CDR endpoints ────────────────────────────────────\r\n\r\nfunction buildCdrQuery(params: CdrReportParams): string {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params.end_date) qs.append(\"end_date\", params.end_date);\r\n\tif (params.agent_id) {\r\n\t\tfor (const id of params.agent_id) qs.append(\"agent_id\", String(id));\r\n\t}\r\n\tif (params.queue_id) {\r\n\t\tfor (const id of params.queue_id) qs.append(\"queue_id\", String(id));\r\n\t}\r\n\tif (params.call_type) qs.append(\"call_type\", params.call_type);\r\n\tif (params.status) qs.append(\"status\", params.status);\r\n\tif (params.search) qs.append(\"search\", params.search);\r\n\tif (params.page) qs.append(\"page\", String(params.page));\r\n\tif (params.pageSize) qs.append(\"pageSize\", String(params.pageSize));\r\n\tconst str = qs.toString();\r\n\treturn str ? `?${str}` : \"\";\r\n}\r\n\r\n// ─── CDR records hook ────────────────────────────────────────────────────────\r\n\r\nexport function useCdrReport() {\r\n\tconst [records, setRecords] = useState<CdrRecordsPage[\"data\"]>([]);\r\n\tconst [totalRecords, setTotalRecords] = useState(0);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(\"\");\r\n\r\n\tconst fetchRecords = useCallback(async (params: CdrReportParams): Promise<void> => {\r\n\t\tsetLoading(true);\r\n\t\tsetError(\"\");\r\n\t\ttry {\r\n\t\t\tconst qs = buildCdrQuery(params);\r\n\t\t\tconst res = await axiosInstance.get<CdrRecordsPage>(`${END_POINT.CDR_REPORT_RECORDS}${qs}`);\r\n\t\t\tsetRecords(res.data?.data ?? []);\r\n\t\t\tsetTotalRecords(res.data?.total ?? 0);\r\n\t\t} catch (err: any) {\r\n\t\t\tsetError(\r\n\t\t\t\terr?.response?.data?.message\r\n\t\t\t\t?? err?.response?.data?.detail\r\n\t\t\t\t?? err?.message\r\n\t\t\t\t?? \"Failed to fetch CDR report\"\r\n\t\t\t);\r\n\t\t\tsetRecords([]);\r\n\t\t\tsetTotalRecords(0);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst exportExcel = useCallback(async (params: CdrReportParams): Promise<void> => {\r\n\t\tconst qs = buildCdrQuery(params);\r\n\t\tconst res = await axiosInstance.get(`${END_POINT.CDR_REPORT_EXPORT_EXCEL}${qs}`, {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\tconst blob = res.data as Blob;\r\n\t\tconst url = window.URL.createObjectURL(blob);\r\n\t\tconst a = document.createElement(\"a\");\r\n\t\ta.href = url;\r\n\t\ta.download = `cdr-report-${params.start_date ?? \"export\"}.xlsx`;\r\n\t\tdocument.body.appendChild(a);\r\n\t\ta.click();\r\n\t\ta.remove();\r\n\t\twindow.URL.revokeObjectURL(url);\r\n\t}, []);\r\n\r\n\tconst fetchRecording = useCallback(async (callUuid: string): Promise<Blob> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(callUuid), {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\trecords,\r\n\t\ttotalRecords,\r\n\t\tloading,\r\n\t\terror,\r\n\t\tsetError,\r\n\t\tfetchRecords,\r\n\t\texportExcel,\r\n\t\tfetchRecording,\r\n\t};\r\n}\r\n\r\n// ─── CDR filter options hook (agents + queues) ───────────────────────────────\r\n//\r\n// The main app's CdrReport uses the general user-list and master-queue endpoints\r\n// (NOT a CDR-specific filter endpoint). We mirror that here.\r\n// - agents: GET /api/v1/users/?role=AGENT → filter to role === \"AGENT\"\r\n// - queues: GET /api/v1/master/queue\r\n\r\ninterface UserListItem {\r\n\tid: number;\r\n\tuserId: string;\r\n\tfirstName?: string;\r\n\tlastName?: string;\r\n\trole?: string | { name?: string } | null;\r\n}\r\n\r\ninterface QueueListItem {\r\n\tid: number;\r\n\tname: string;\r\n}\r\n\r\nexport function useCdrFilters() {\r\n\tconst [agents, setAgents] = useState<CdrAgentFilterOption[]>([]);\r\n\tconst [queues, setQueues] = useState<CdrQueueFilterOption[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchAgents = useCallback(async (): Promise<void> => {\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<UserListItem[] | { data: UserListItem[] }>(\r\n\t\t\t\tEND_POINT.USERS_LIST,\r\n\t\t\t\t{ params: { role: \"AGENT\" } },\r\n\t\t\t);\r\n\t\t\tconst raw = Array.isArray(res.data)\r\n\t\t\t\t? res.data\r\n\t\t\t\t: Array.isArray((res.data as any)?.data)\r\n\t\t\t\t\t? (res.data as any).data\r\n\t\t\t\t\t: [];\r\n\t\t\tconst mapped: CdrAgentFilterOption[] = (raw as UserListItem[])\r\n\t\t\t\t.filter((u) => {\r\n\t\t\t\t\tconst roleName = typeof u.role === \"object\" && u.role !== null ? u.role.name : u.role;\r\n\t\t\t\t\treturn roleName === \"AGENT\";\r\n\t\t\t\t})\r\n\t\t\t\t.map((u) => ({\r\n\t\t\t\t\tid: u.id,\r\n\t\t\t\t\tuserId: u.userId,\r\n\t\t\t\t\tfullName: [u.firstName, u.lastName].filter(Boolean).join(\" \") || u.userId,\r\n\t\t\t\t}));\r\n\t\t\tsetAgents(mapped);\r\n\t\t} catch {\r\n\t\t\tsetAgents([]);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchQueues = useCallback(async (): Promise<void> => {\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<QueueListItem[] | { data: QueueListItem[] }>(\r\n\t\t\t\tEND_POINT.MASTER_QUEUES,\r\n\t\t\t);\r\n\t\t\tconst raw = Array.isArray(res.data)\r\n\t\t\t\t? res.data\r\n\t\t\t\t: Array.isArray((res.data as any)?.data)\r\n\t\t\t\t\t? (res.data as any).data\r\n\t\t\t\t\t: [];\r\n\t\t\tsetQueues((raw as QueueListItem[]).map((q) => ({ id: q.id, name: q.name })));\r\n\t\t} catch {\r\n\t\t\tsetQueues([]);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchAll = useCallback(async (): Promise<void> => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tawait Promise.all([fetchAgents(), fetchQueues()]);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, [fetchAgents, fetchQueues]);\r\n\r\n\treturn { agents, queues, loading, fetchAgents, fetchQueues, fetchAll };\r\n}\r\n\r\nexport interface Queue {\r\n\tid: number;\r\n\tname: string;\r\n\tdescription: string;\r\n\tisActive: boolean;\r\n}\r\n\r\nexport async function getQueues(): Promise<Queue[]> {\r\n\tconst res = await axiosInstance.get<QueueListItem[] | { data: QueueListItem[] }>(END_POINT.MASTER_QUEUES);\r\n\tconst raw = Array.isArray(res.data)\r\n\t\t? res.data\r\n\t\t: Array.isArray((res.data as any)?.data)\r\n\t\t\t? (res.data as any).data\r\n\t\t\t: [];\r\n\treturn (raw as QueueListItem[]).map((q) => ({ id: q.id, name: q.name, description: \"\", isActive: true }));\r\n}\r\n\r\nexport async function getCdrReportRecords(params: CdrReportParams): Promise<CdrRecordsPage> {\r\n\tconst qs = buildCdrQuery(params);\r\n\tconst res = await axiosInstance.get<CdrRecordsPage>(`${END_POINT.CDR_REPORT_RECORDS}${qs}`);\r\n\treturn res.data;\r\n}\r\n\r\n/**\r\n * Combined CDR report — stats + the current page of records in one call.\r\n * This is the documented endpoint that honours page/pageSize/search.\r\n */\r\nexport async function getCdrReport(params: CdrReportParams): Promise<CdrReportResponse> {\r\n\tconst qs = buildCdrQuery(params);\r\n\tconst res = await axiosInstance.get<CdrReportResponse>(`${END_POINT.CDR_REPORT}${qs}`);\r\n\treturn res.data;\r\n}\r\n\r\nexport async function exportCdrReportToExcel(params: CdrReportParams): Promise<void> {\r\n\tconst qs = buildCdrQuery(params);\r\n\tconst res = await axiosInstance.get(`${END_POINT.CDR_REPORT_EXPORT_EXCEL}${qs}`, { responseType: \"blob\" });\r\n\tconst url = window.URL.createObjectURL(new Blob([res.data]));\r\n\tconst a = document.createElement(\"a\");\r\n\ta.href = url;\r\n\ta.download = `cdr-report-${params.start_date ?? \"export\"}.xlsx`;\r\n\tdocument.body.appendChild(a);\r\n\ta.click();\r\n\ta.remove();\r\n\twindow.URL.revokeObjectURL(url);\r\n}\r\n\r\nexport async function getRecordingByCall(callUuid: string): Promise<Blob> {\r\n\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(callUuid), { responseType: \"blob\" });\r\n\treturn res.data;\r\n}\r\n"],"mappings":";;;;;;AAAA,SAAS,aAAa,gBAAgB;AAatC,SAAS,cAAc,QAAiC;AACvD,QAAM,KAAK,IAAI,gBAAgB;AAC/B,MAAI,OAAO,WAAY,IAAG,OAAO,cAAc,OAAO,UAAU;AAChE,MAAI,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,QAAQ;AAC1D,MAAI,OAAO,UAAU;AACpB,eAAW,MAAM,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,EAAE,CAAC;AAAA,EACnE;AACA,MAAI,OAAO,UAAU;AACpB,eAAW,MAAM,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,EAAE,CAAC;AAAA,EACnE;AACA,MAAI,OAAO,UAAW,IAAG,OAAO,aAAa,OAAO,SAAS;AAC7D,MAAI,OAAO,OAAQ,IAAG,OAAO,UAAU,OAAO,MAAM;AACpD,MAAI,OAAO,OAAQ,IAAG,OAAO,UAAU,OAAO,MAAM;AACpD,MAAI,OAAO,KAAM,IAAG,OAAO,QAAQ,OAAO,OAAO,IAAI,CAAC;AACtD,MAAI,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,OAAO,QAAQ,CAAC;AAClE,QAAM,MAAM,GAAG,SAAS;AACxB,SAAO,MAAM,IAAI,GAAG,KAAK;AAC1B;AA0JA,eAAsB,YAA8B;AAxLpD;AAyLC,QAAM,MAAM,MAAM,cAAc,IAAiD,UAAU,aAAa;AACxG,QAAM,MAAM,MAAM,QAAQ,IAAI,IAAI,IAC/B,IAAI,OACJ,MAAM,SAAS,SAAI,SAAJ,mBAAkB,IAAI,IACnC,IAAI,KAAa,OAClB,CAAC;AACL,SAAQ,IAAwB,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,MAAM,aAAa,IAAI,UAAU,KAAK,EAAE;AACzG;AAYA,eAAsB,aAAa,QAAqD;AACvF,QAAM,KAAK,cAAc,MAAM;AAC/B,QAAM,MAAM,MAAM,cAAc,IAAuB,GAAG,UAAU,UAAU,GAAG,EAAE,EAAE;AACrF,SAAO,IAAI;AACZ;AAEA,eAAsB,uBAAuB,QAAwC;AAlNrF;AAmNC,QAAM,KAAK,cAAc,MAAM;AAC/B,QAAM,MAAM,MAAM,cAAc,IAAI,GAAG,UAAU,uBAAuB,GAAG,EAAE,IAAI,EAAE,cAAc,OAAO,CAAC;AACzG,QAAM,MAAM,OAAO,IAAI,gBAAgB,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;AAC3D,QAAM,IAAI,SAAS,cAAc,GAAG;AACpC,IAAE,OAAO;AACT,IAAE,WAAW,eAAc,YAAO,eAAP,YAAqB,QAAQ;AACxD,WAAS,KAAK,YAAY,CAAC;AAC3B,IAAE,MAAM;AACR,IAAE,OAAO;AACT,SAAO,IAAI,gBAAgB,GAAG;AAC/B;AAEA,eAAsB,mBAAmB,UAAiC;AACzE,QAAM,MAAM,MAAM,cAAc,IAAI,UAAU,kBAAkB,QAAQ,GAAG,EAAE,cAAc,OAAO,CAAC;AACnG,SAAO,IAAI;AACZ;","names":[]}
1
+ {"version":3,"sources":["../call-control-sdk/lib/pages/cdrReport/useCdrReport.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tCdrAgentFilterOption,\r\n\tCdrQueueFilterOption,\r\n\tCdrRecordsPage,\r\n\tCdrReportParams,\r\n\tCdrReportResponse,\r\n} from \"./types\";\r\n\r\n// ─── Build query string for CDR endpoints ────────────────────────────────────\r\n\r\nfunction buildCdrQuery(params: CdrReportParams): string {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params.end_date) qs.append(\"end_date\", params.end_date);\r\n\tif (params.agent_id) {\r\n\t\tfor (const id of params.agent_id) qs.append(\"agent_id\", String(id));\r\n\t}\r\n\tif (params.queue_id) {\r\n\t\tfor (const id of params.queue_id) qs.append(\"queue_id\", String(id));\r\n\t}\r\n\tif (params.call_type) qs.append(\"call_type\", params.call_type);\r\n\tif (params.status) qs.append(\"status\", params.status);\r\n\tif (params.search) qs.append(\"search\", params.search);\r\n\tif (params.page) qs.append(\"page\", String(params.page));\r\n\tif (params.pageSize) qs.append(\"pageSize\", String(params.pageSize));\r\n\tconst str = qs.toString();\r\n\treturn str ? `?${str}` : \"\";\r\n}\r\n\r\n// ─── CDR records hook ────────────────────────────────────────────────────────\r\n\r\nexport function useCdrReport() {\r\n\tconst [records, setRecords] = useState<CdrRecordsPage[\"data\"]>([]);\r\n\tconst [totalRecords, setTotalRecords] = useState(0);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(\"\");\r\n\r\n\tconst fetchRecords = useCallback(async (params: CdrReportParams): Promise<void> => {\r\n\t\tsetLoading(true);\r\n\t\tsetError(\"\");\r\n\t\ttry {\r\n\t\t\tconst qs = buildCdrQuery(params);\r\n\t\t\tconst res = await axiosInstance.get<CdrRecordsPage>(`${END_POINT.CDR_REPORT_RECORDS}${qs}`);\r\n\t\t\tsetRecords(res.data?.data ?? []);\r\n\t\t\tsetTotalRecords(res.data?.total ?? 0);\r\n\t\t} catch (err: any) {\r\n\t\t\tsetError(\r\n\t\t\t\terr?.response?.data?.message\r\n\t\t\t\t?? err?.response?.data?.detail\r\n\t\t\t\t?? err?.message\r\n\t\t\t\t?? \"Failed to fetch CDR report\"\r\n\t\t\t);\r\n\t\t\tsetRecords([]);\r\n\t\t\tsetTotalRecords(0);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst exportExcel = useCallback(async (params: CdrReportParams): Promise<void> => {\r\n\t\tconst qs = buildCdrQuery(params);\r\n\t\tconst res = await axiosInstance.get(`${END_POINT.CDR_REPORT_EXPORT_EXCEL}${qs}`, {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\tconst blob = res.data as Blob;\r\n\t\tconst url = window.URL.createObjectURL(blob);\r\n\t\tconst a = document.createElement(\"a\");\r\n\t\ta.href = url;\r\n\t\ta.download = `cdr-report-${params.start_date ?? \"export\"}.xlsx`;\r\n\t\tdocument.body.appendChild(a);\r\n\t\ta.click();\r\n\t\ta.remove();\r\n\t\twindow.URL.revokeObjectURL(url);\r\n\t}, []);\r\n\r\n\tconst fetchRecording = useCallback(async (callUuid: string): Promise<Blob> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(callUuid), {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\trecords,\r\n\t\ttotalRecords,\r\n\t\tloading,\r\n\t\terror,\r\n\t\tsetError,\r\n\t\tfetchRecords,\r\n\t\texportExcel,\r\n\t\tfetchRecording,\r\n\t};\r\n}\r\n\r\n// ─── CDR filter options hook (agents + queues) ───────────────────────────────\r\n//\r\n// The main app's CdrReport uses the general user-list and master-queue endpoints\r\n// (NOT a CDR-specific filter endpoint). We mirror that here.\r\n// - agents: GET /api/v1/users/?role=AGENT → filter to role === \"AGENT\"\r\n// - queues: GET /api/v1/master/queue\r\n\r\ninterface UserListItem {\r\n\tid: number;\r\n\tuserId: string;\r\n\tfirstName?: string;\r\n\tlastName?: string;\r\n\trole?: string | { name?: string } | null;\r\n}\r\n\r\ninterface QueueListItem {\r\n\tid: number;\r\n\tname: string;\r\n}\r\n\r\nexport function useCdrFilters() {\r\n\tconst [agents, setAgents] = useState<CdrAgentFilterOption[]>([]);\r\n\tconst [queues, setQueues] = useState<CdrQueueFilterOption[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchAgents = useCallback(async (): Promise<void> => {\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<UserListItem[] | { data: UserListItem[] }>(\r\n\t\t\t\tEND_POINT.USERS_LIST,\r\n\t\t\t\t{ params: { role: \"AGENT\" } },\r\n\t\t\t);\r\n\t\t\tconst raw = Array.isArray(res.data)\r\n\t\t\t\t? res.data\r\n\t\t\t\t: Array.isArray((res.data as any)?.data)\r\n\t\t\t\t\t? (res.data as any).data\r\n\t\t\t\t\t: [];\r\n\t\t\tconst mapped: CdrAgentFilterOption[] = (raw as UserListItem[])\r\n\t\t\t\t.filter((u) => {\r\n\t\t\t\t\tconst roleName = typeof u.role === \"object\" && u.role !== null ? u.role.name : u.role;\r\n\t\t\t\t\treturn roleName === \"AGENT\";\r\n\t\t\t\t})\r\n\t\t\t\t.map((u) => ({\r\n\t\t\t\t\tid: u.id,\r\n\t\t\t\t\tuserId: u.userId,\r\n\t\t\t\t\tfullName: [u.firstName, u.lastName].filter(Boolean).join(\" \") || u.userId,\r\n\t\t\t\t}));\r\n\t\t\tsetAgents(mapped);\r\n\t\t} catch {\r\n\t\t\tsetAgents([]);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchQueues = useCallback(async (): Promise<void> => {\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<QueueListItem[] | { data: QueueListItem[] }>(\r\n\t\t\t\tEND_POINT.MASTER_QUEUES,\r\n\t\t\t);\r\n\t\t\tconst raw = Array.isArray(res.data)\r\n\t\t\t\t? res.data\r\n\t\t\t\t: Array.isArray((res.data as any)?.data)\r\n\t\t\t\t\t? (res.data as any).data\r\n\t\t\t\t\t: [];\r\n\t\t\tsetQueues((raw as QueueListItem[]).map((q) => ({ id: q.id, name: q.name })));\r\n\t\t} catch {\r\n\t\t\tsetQueues([]);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchAll = useCallback(async (): Promise<void> => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tawait Promise.all([fetchAgents(), fetchQueues()]);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, [fetchAgents, fetchQueues]);\r\n\r\n\treturn { agents, queues, loading, fetchAgents, fetchQueues, fetchAll };\r\n}\r\n\r\nexport interface Queue {\r\n\tid: number;\r\n\tname: string;\r\n\tdescription: string;\r\n\tisActive: boolean;\r\n}\r\n\r\nexport async function getQueues(): Promise<Queue[]> {\r\n\tconst res = await axiosInstance.get<QueueListItem[] | { data: QueueListItem[] }>(END_POINT.MASTER_QUEUES);\r\n\tconst raw = Array.isArray(res.data)\r\n\t\t? res.data\r\n\t\t: Array.isArray((res.data as any)?.data)\r\n\t\t\t? (res.data as any).data\r\n\t\t\t: [];\r\n\treturn (raw as QueueListItem[]).map((q) => ({ id: q.id, name: q.name, description: \"\", isActive: true }));\r\n}\r\n\r\nexport async function getCdrReportRecords(params: CdrReportParams): Promise<CdrRecordsPage> {\r\n\tconst qs = buildCdrQuery(params);\r\n\tconst res = await axiosInstance.get<CdrRecordsPage>(`${END_POINT.CDR_REPORT_RECORDS}${qs}`);\r\n\treturn res.data;\r\n}\r\n\r\n/**\r\n * Combined CDR report — stats + the current page of records in one call.\r\n * This is the documented endpoint that honours page/pageSize/search.\r\n */\r\nexport async function getCdrReport(params: CdrReportParams): Promise<CdrReportResponse> {\r\n\tconst qs = buildCdrQuery(params);\r\n\tconst res = await axiosInstance.get<CdrReportResponse>(`${END_POINT.CDR_REPORT}${qs}`);\r\n\treturn res.data;\r\n}\r\n\r\nexport async function exportCdrReportToExcel(params: CdrReportParams): Promise<void> {\r\n\tconst qs = buildCdrQuery(params);\r\n\tconst res = await axiosInstance.get(`${END_POINT.CDR_REPORT_EXPORT_EXCEL}${qs}`, { responseType: \"blob\" });\r\n\tconst url = window.URL.createObjectURL(new Blob([res.data]));\r\n\tconst a = document.createElement(\"a\");\r\n\ta.href = url;\r\n\ta.download = `cdr-report-${params.start_date ?? \"export\"}.xlsx`;\r\n\tdocument.body.appendChild(a);\r\n\ta.click();\r\n\ta.remove();\r\n\twindow.URL.revokeObjectURL(url);\r\n}\r\n\r\nexport async function getRecordingByCall(callUuid: string): Promise<Blob> {\r\n\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(callUuid), { responseType: \"blob\" });\r\n\treturn res.data;\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAS,aAAa,gBAAgB;AAatC,SAAS,cAAc,QAAiC;AACvD,QAAM,KAAK,IAAI,gBAAgB;AAC/B,MAAI,OAAO,WAAY,IAAG,OAAO,cAAc,OAAO,UAAU;AAChE,MAAI,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,QAAQ;AAC1D,MAAI,OAAO,UAAU;AACpB,eAAW,MAAM,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,EAAE,CAAC;AAAA,EACnE;AACA,MAAI,OAAO,UAAU;AACpB,eAAW,MAAM,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,EAAE,CAAC;AAAA,EACnE;AACA,MAAI,OAAO,UAAW,IAAG,OAAO,aAAa,OAAO,SAAS;AAC7D,MAAI,OAAO,OAAQ,IAAG,OAAO,UAAU,OAAO,MAAM;AACpD,MAAI,OAAO,OAAQ,IAAG,OAAO,UAAU,OAAO,MAAM;AACpD,MAAI,OAAO,KAAM,IAAG,OAAO,QAAQ,OAAO,OAAO,IAAI,CAAC;AACtD,MAAI,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,OAAO,QAAQ,CAAC;AAClE,QAAM,MAAM,GAAG,SAAS;AACxB,SAAO,MAAM,IAAI,GAAG,KAAK;AAC1B;AA0JA,eAAsB,YAA8B;AAxLpD;AAyLC,QAAM,MAAM,MAAM,cAAc,IAAiD,UAAU,aAAa;AACxG,QAAM,MAAM,MAAM,QAAQ,IAAI,IAAI,IAC/B,IAAI,OACJ,MAAM,SAAS,SAAI,SAAJ,mBAAkB,IAAI,IACnC,IAAI,KAAa,OAClB,CAAC;AACL,SAAQ,IAAwB,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,MAAM,aAAa,IAAI,UAAU,KAAK,EAAE;AACzG;AAYA,eAAsB,aAAa,QAAqD;AACvF,QAAM,KAAK,cAAc,MAAM;AAC/B,QAAM,MAAM,MAAM,cAAc,IAAuB,GAAG,UAAU,UAAU,GAAG,EAAE,EAAE;AACrF,SAAO,IAAI;AACZ;AAEA,eAAsB,uBAAuB,QAAwC;AAlNrF;AAmNC,QAAM,KAAK,cAAc,MAAM;AAC/B,QAAM,MAAM,MAAM,cAAc,IAAI,GAAG,UAAU,uBAAuB,GAAG,EAAE,IAAI,EAAE,cAAc,OAAO,CAAC;AACzG,QAAM,MAAM,OAAO,IAAI,gBAAgB,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;AAC3D,QAAM,IAAI,SAAS,cAAc,GAAG;AACpC,IAAE,OAAO;AACT,IAAE,WAAW,eAAc,YAAO,eAAP,YAAqB,QAAQ;AACxD,WAAS,KAAK,YAAY,CAAC;AAC3B,IAAE,MAAM;AACR,IAAE,OAAO;AACT,SAAO,IAAI,gBAAgB,GAAG;AAC/B;AAEA,eAAsB,mBAAmB,UAAiC;AACzE,QAAM,MAAM,MAAM,cAAc,IAAI,UAAU,kBAAkB,QAAQ,GAAG,EAAE,cAAc,OAAO,CAAC;AACnG,SAAO,IAAI;AACZ;","names":[]}
@@ -0,0 +1,127 @@
1
+ import * as __ext_react from "react";
2
+ import * as __ext_react_dom from "react-dom";
3
+ import * as __ext_react_jsx from "react/jsx-runtime";
4
+ var __cjsExternals = { "react": __ext_react, "react-dom": __ext_react_dom, "react/jsx-runtime": __ext_react_jsx };
5
+ var require = function (id) {
6
+ var mod = __cjsExternals[id];
7
+ if (mod) return mod.default || mod;
8
+ throw new Error('Dynamic require of "' + id + '" is not supported');
9
+ };
10
+
11
+
12
+ // call-control-sdk/lib/pages/common/components/PageHeader.tsx
13
+ import { Box, Typography, IconButton } from "@mui/material";
14
+ import ArrowBackIcon from "@mui/icons-material/ArrowBack";
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ function PageHeader({
17
+ title,
18
+ subtitle,
19
+ avatar,
20
+ showBack = false,
21
+ onBack,
22
+ actions,
23
+ count,
24
+ countLabel = "items"
25
+ }) {
26
+ const handleBack = () => onBack == null ? void 0 : onBack();
27
+ return /* @__PURE__ */ jsx(Box, { sx: { px: { xs: 2, md: 2.5 }, py: "14px" }, children: /* @__PURE__ */ jsxs(
28
+ Box,
29
+ {
30
+ sx: {
31
+ display: "flex",
32
+ alignItems: { xs: "flex-start", sm: "center" },
33
+ justifyContent: "space-between",
34
+ flexDirection: { xs: "column", sm: "row" },
35
+ gap: 1
36
+ },
37
+ children: [
38
+ /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", gap: 1.25, minWidth: 0 }, children: [
39
+ showBack && /* @__PURE__ */ jsx(
40
+ IconButton,
41
+ {
42
+ onClick: handleBack,
43
+ size: "small",
44
+ sx: {
45
+ width: 30,
46
+ height: 30,
47
+ flexShrink: 0,
48
+ border: "none",
49
+ borderRadius: "6px",
50
+ backgroundColor: "action.hover",
51
+ color: "text.secondary",
52
+ "&:hover": { backgroundColor: "action.selected", color: "text.primary" },
53
+ transition: "all 0.15s ease"
54
+ },
55
+ children: /* @__PURE__ */ jsx(ArrowBackIcon, { sx: { fontSize: 15 } })
56
+ }
57
+ ),
58
+ avatar,
59
+ /* @__PURE__ */ jsxs(Box, { children: [
60
+ /* @__PURE__ */ jsx(
61
+ Typography,
62
+ {
63
+ sx: {
64
+ fontWeight: 700,
65
+ fontSize: { xs: "1.25rem", sm: "1.5rem", lg: "1.75rem" },
66
+ color: "text.primary",
67
+ lineHeight: 1.3,
68
+ whiteSpace: "nowrap",
69
+ overflow: "hidden",
70
+ textOverflow: "ellipsis",
71
+ pl: !showBack ? 0 : 2
72
+ },
73
+ children: title
74
+ }
75
+ ),
76
+ subtitle && /* @__PURE__ */ jsx(
77
+ Typography,
78
+ {
79
+ sx: {
80
+ fontSize: "0.78rem",
81
+ color: "text.secondary",
82
+ pl: !showBack ? 0 : 2,
83
+ mt: 0.2,
84
+ lineHeight: 1.4
85
+ },
86
+ children: subtitle
87
+ }
88
+ )
89
+ ] })
90
+ ] }),
91
+ /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", gap: 1, flexShrink: 0 }, children: [
92
+ count !== void 0 && /* @__PURE__ */ jsxs(
93
+ Box,
94
+ {
95
+ sx: {
96
+ display: "flex",
97
+ alignItems: "center",
98
+ gap: "5px",
99
+ px: "10px",
100
+ height: 32,
101
+ border: "1px solid",
102
+ borderColor: "divider",
103
+ borderRadius: "6px",
104
+ backgroundColor: "background.paper",
105
+ whiteSpace: "nowrap"
106
+ },
107
+ children: [
108
+ /* @__PURE__ */ jsx(Box, { sx: { width: 6, height: 6, borderRadius: "50%", backgroundColor: "#1A5F6C", flexShrink: 0 } }),
109
+ /* @__PURE__ */ jsxs(Typography, { sx: { fontSize: "0.75rem", color: "text.secondary" }, children: [
110
+ count,
111
+ " ",
112
+ countLabel
113
+ ] })
114
+ ]
115
+ }
116
+ ),
117
+ actions
118
+ ] })
119
+ ]
120
+ }
121
+ ) });
122
+ }
123
+
124
+ export {
125
+ PageHeader
126
+ };
127
+ //# sourceMappingURL=chunk-KRXHK4AU.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":[]}
@@ -1,7 +1,17 @@
1
+ import * as __ext_react from "react";
2
+ import * as __ext_react_dom from "react-dom";
3
+ import * as __ext_react_jsx from "react/jsx-runtime";
4
+ var __cjsExternals = { "react": __ext_react, "react-dom": __ext_react_dom, "react/jsx-runtime": __ext_react_jsx };
5
+ var require = function (id) {
6
+ var mod = __cjsExternals[id];
7
+ if (mod) return mod.default || mod;
8
+ throw new Error('Dynamic require of "' + id + '" is not supported');
9
+ };
10
+
1
11
  import {
2
12
  END_POINT,
3
13
  axios_default
4
- } from "./chunk-LHE4QGJJ.mjs";
14
+ } from "./chunk-F7G2XFRU.mjs";
5
15
 
6
16
  // call-control-sdk/lib/hooks/useCallMonitoring.ts
7
17
  import { useCallback, useState } from "react";
@@ -79,4 +89,4 @@ var useCallMonitoring = () => {
79
89
  export {
80
90
  useCallMonitoring
81
91
  };
82
- //# sourceMappingURL=chunk-U2UDKXMB.mjs.map
92
+ //# sourceMappingURL=chunk-LWDAC6QU.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../call-control-sdk/lib/hooks/useCallMonitoring.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport type SupervisorMonitorMode = \"listen\" | \"whisper\" | \"barge\";\r\n\r\nexport interface StartMonitoringPayload {\r\n\t/** UUID of the active call to monitor */\r\n\tcall_id: string;\r\n\t/** Monitoring mode: listen (hear only), whisper (speak to agent), barge (full 3-way) */\r\n\tmode: SupervisorMonitorMode;\r\n\t/** Optional: supervisor's SIP/WebRTC extension. Auto-detected from logged-in user if omitted */\r\n\tsupervisor_extension?: string;\r\n\t/** Optional: agent's extension. Auto-detected if omitted */\r\n\tagent_extension?: string;\r\n}\r\n\r\nexport interface StopMonitoringPayload {\r\n\t/** UUID of the call being monitored */\r\n\tcall_uuid: string;\r\n\t/** Legacy field – ignored by the backend but kept for compatibility */\r\n\tsession_id?: string;\r\n}\r\n\r\nexport interface ChangeModePayload {\r\n\t/** UUID of the call being monitored */\r\n\tcall_uuid: string;\r\n\t/** New monitoring mode to switch to */\r\n\tmode: SupervisorMonitorMode;\r\n\t/** Legacy field – ignored by the backend but kept for compatibility */\r\n\tsession_id?: string;\r\n}\r\n\r\nexport interface UseCallMonitoringReturn {\r\n\tstartMonitoring: (payload: StartMonitoringPayload) => Promise<any>;\r\n\tstopMonitoring: (payload: StopMonitoringPayload) => Promise<any>;\r\n\tchangeMode: (payload: ChangeModePayload) => Promise<any>;\r\n\tisLoading: boolean;\r\n\tisSuccess: boolean;\r\n\tisError: boolean;\r\n\terror: any;\r\n\tdata: any;\r\n}\r\n\r\n// ─── Hook ─────────────────────────────────────────────────────────────────────\r\n\r\nexport const useCallMonitoring = (): UseCallMonitoringReturn => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [success, setSuccess] = useState(false);\r\n\tconst [isError, setIsError] = useState(false);\r\n\tconst [error, setError] = useState<any>(null);\r\n\tconst [data, setData] = useState<any>(null);\r\n\r\n\tconst resetState = () => {\r\n\t\tsetSuccess(false);\r\n\t\tsetIsError(false);\r\n\t\tsetError(null);\r\n\t};\r\n\r\n\t/** Start supervisor monitoring on an active agent call (Listen / Whisper / Barge) */\r\n\tconst startMonitoring = useCallback(async (payload: StartMonitoringPayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_LISTEN, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\t/** Stop supervisor monitoring and disconnect from the call */\r\n\tconst stopMonitoring = useCallback(async (payload: StopMonitoringPayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_LEAVE, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\t/**\r\n\t * Change supervisor monitoring mode (e.g. listen → whisper → barge).\r\n\t * The backend hangs up the current ChanSpy call and originates a new one\r\n\t * with the updated mode – the supervisor's phone will ring again.\r\n\t */\r\n\tconst changeMode = useCallback(async (payload: ChangeModePayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_CHANGE_MODE, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tstartMonitoring,\r\n\t\tstopMonitoring,\r\n\t\tchangeMode,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError,\r\n\t\terror,\r\n\t\tdata,\r\n\t};\r\n};\r\n"],"mappings":";;;;;;AAAA,SAAS,aAAa,gBAAgB;AAiD/B,IAAM,oBAAoB,MAA+B;AAC/D,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAc,IAAI;AAC5C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAc,IAAI;AAE1C,QAAM,aAAa,MAAM;AACxB,eAAW,KAAK;AAChB,eAAW,KAAK;AAChB,aAAS,IAAI;AAAA,EACd;AAGA,QAAM,kBAAkB,YAAY,OAAO,YAAoC;AAC9E,eAAW;AACX,eAAW,IAAI;AAEf,WAAO,cACL,KAAK,UAAU,wBAAwB,OAAO,EAC9C,KAAK,CAAC,QAAQ;AACd,cAAQ,2BAAK,IAAI;AACjB,iBAAW,IAAI;AACf,aAAO,2BAAK;AAAA,IACb,CAAC,EACA,MAAM,CAAC,QAAQ;AA1EnB;AA2EI,iBAAW,IAAI;AACf,eAAS,GAAG;AACZ,cAAO,gCAAK,aAAL,mBAAe;AAAA,IACvB,CAAC,EACA,QAAQ,MAAM;AACd,iBAAW,KAAK;AAAA,IACjB,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAGL,QAAM,iBAAiB,YAAY,OAAO,YAAmC;AAC5E,eAAW;AACX,eAAW,IAAI;AAEf,WAAO,cACL,KAAK,UAAU,uBAAuB,OAAO,EAC7C,KAAK,CAAC,QAAQ;AACd,cAAQ,2BAAK,IAAI;AACjB,iBAAW,IAAI;AACf,aAAO,2BAAK;AAAA,IACb,CAAC,EACA,MAAM,CAAC,QAAQ;AAhGnB;AAiGI,iBAAW,IAAI;AACf,eAAS,GAAG;AACZ,cAAO,gCAAK,aAAL,mBAAe;AAAA,IACvB,CAAC,EACA,QAAQ,MAAM;AACd,iBAAW,KAAK;AAAA,IACjB,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAOL,QAAM,aAAa,YAAY,OAAO,YAA+B;AACpE,eAAW;AACX,eAAW,IAAI;AAEf,WAAO,cACL,KAAK,UAAU,6BAA6B,OAAO,EACnD,KAAK,CAAC,QAAQ;AACd,cAAQ,2BAAK,IAAI;AACjB,iBAAW,IAAI;AACf,aAAO,2BAAK;AAAA,IACb,CAAC,EACA,MAAM,CAAC,QAAQ;AA1HnB;AA2HI,iBAAW,IAAI;AACf,eAAS,GAAG;AACZ,cAAO,gCAAK,aAAL,mBAAe;AAAA,IACvB,CAAC,EACA,QAAQ,MAAM;AACd,iBAAW,KAAK;AAAA,IACjB,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;","names":[]}
1
+ {"version":3,"sources":["../call-control-sdk/lib/hooks/useCallMonitoring.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport type SupervisorMonitorMode = \"listen\" | \"whisper\" | \"barge\";\r\n\r\nexport interface StartMonitoringPayload {\r\n\t/** UUID of the active call to monitor */\r\n\tcall_id: string;\r\n\t/** Monitoring mode: listen (hear only), whisper (speak to agent), barge (full 3-way) */\r\n\tmode: SupervisorMonitorMode;\r\n\t/** Optional: supervisor's SIP/WebRTC extension. Auto-detected from logged-in user if omitted */\r\n\tsupervisor_extension?: string;\r\n\t/** Optional: agent's extension. Auto-detected if omitted */\r\n\tagent_extension?: string;\r\n}\r\n\r\nexport interface StopMonitoringPayload {\r\n\t/** UUID of the call being monitored */\r\n\tcall_uuid: string;\r\n\t/** Legacy field – ignored by the backend but kept for compatibility */\r\n\tsession_id?: string;\r\n}\r\n\r\nexport interface ChangeModePayload {\r\n\t/** UUID of the call being monitored */\r\n\tcall_uuid: string;\r\n\t/** New monitoring mode to switch to */\r\n\tmode: SupervisorMonitorMode;\r\n\t/** Legacy field – ignored by the backend but kept for compatibility */\r\n\tsession_id?: string;\r\n}\r\n\r\nexport interface UseCallMonitoringReturn {\r\n\tstartMonitoring: (payload: StartMonitoringPayload) => Promise<any>;\r\n\tstopMonitoring: (payload: StopMonitoringPayload) => Promise<any>;\r\n\tchangeMode: (payload: ChangeModePayload) => Promise<any>;\r\n\tisLoading: boolean;\r\n\tisSuccess: boolean;\r\n\tisError: boolean;\r\n\terror: any;\r\n\tdata: any;\r\n}\r\n\r\n// ─── Hook ─────────────────────────────────────────────────────────────────────\r\n\r\nexport const useCallMonitoring = (): UseCallMonitoringReturn => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [success, setSuccess] = useState(false);\r\n\tconst [isError, setIsError] = useState(false);\r\n\tconst [error, setError] = useState<any>(null);\r\n\tconst [data, setData] = useState<any>(null);\r\n\r\n\tconst resetState = () => {\r\n\t\tsetSuccess(false);\r\n\t\tsetIsError(false);\r\n\t\tsetError(null);\r\n\t};\r\n\r\n\t/** Start supervisor monitoring on an active agent call (Listen / Whisper / Barge) */\r\n\tconst startMonitoring = useCallback(async (payload: StartMonitoringPayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_LISTEN, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\t/** Stop supervisor monitoring and disconnect from the call */\r\n\tconst stopMonitoring = useCallback(async (payload: StopMonitoringPayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_LEAVE, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\t/**\r\n\t * Change supervisor monitoring mode (e.g. listen → whisper → barge).\r\n\t * The backend hangs up the current ChanSpy call and originates a new one\r\n\t * with the updated mode – the supervisor's phone will ring again.\r\n\t */\r\n\tconst changeMode = useCallback(async (payload: ChangeModePayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_CHANGE_MODE, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tstartMonitoring,\r\n\t\tstopMonitoring,\r\n\t\tchangeMode,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError,\r\n\t\terror,\r\n\t\tdata,\r\n\t};\r\n};\r\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAS,aAAa,gBAAgB;AAiD/B,IAAM,oBAAoB,MAA+B;AAC/D,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAc,IAAI;AAC5C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAc,IAAI;AAE1C,QAAM,aAAa,MAAM;AACxB,eAAW,KAAK;AAChB,eAAW,KAAK;AAChB,aAAS,IAAI;AAAA,EACd;AAGA,QAAM,kBAAkB,YAAY,OAAO,YAAoC;AAC9E,eAAW;AACX,eAAW,IAAI;AAEf,WAAO,cACL,KAAK,UAAU,wBAAwB,OAAO,EAC9C,KAAK,CAAC,QAAQ;AACd,cAAQ,2BAAK,IAAI;AACjB,iBAAW,IAAI;AACf,aAAO,2BAAK;AAAA,IACb,CAAC,EACA,MAAM,CAAC,QAAQ;AA1EnB;AA2EI,iBAAW,IAAI;AACf,eAAS,GAAG;AACZ,cAAO,gCAAK,aAAL,mBAAe;AAAA,IACvB,CAAC,EACA,QAAQ,MAAM;AACd,iBAAW,KAAK;AAAA,IACjB,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAGL,QAAM,iBAAiB,YAAY,OAAO,YAAmC;AAC5E,eAAW;AACX,eAAW,IAAI;AAEf,WAAO,cACL,KAAK,UAAU,uBAAuB,OAAO,EAC7C,KAAK,CAAC,QAAQ;AACd,cAAQ,2BAAK,IAAI;AACjB,iBAAW,IAAI;AACf,aAAO,2BAAK;AAAA,IACb,CAAC,EACA,MAAM,CAAC,QAAQ;AAhGnB;AAiGI,iBAAW,IAAI;AACf,eAAS,GAAG;AACZ,cAAO,gCAAK,aAAL,mBAAe;AAAA,IACvB,CAAC,EACA,QAAQ,MAAM;AACd,iBAAW,KAAK;AAAA,IACjB,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAOL,QAAM,aAAa,YAAY,OAAO,YAA+B;AACpE,eAAW;AACX,eAAW,IAAI;AAEf,WAAO,cACL,KAAK,UAAU,6BAA6B,OAAO,EACnD,KAAK,CAAC,QAAQ;AACd,cAAQ,2BAAK,IAAI;AACjB,iBAAW,IAAI;AACf,aAAO,2BAAK;AAAA,IACb,CAAC,EACA,MAAM,CAAC,QAAQ;AA1HnB;AA2HI,iBAAW,IAAI;AACf,eAAS,GAAG;AACZ,cAAO,gCAAK,aAAL,mBAAe;AAAA,IACvB,CAAC,EACA,QAAQ,MAAM;AACd,iBAAW,KAAK;AAAA,IACjB,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;","names":[]}
@@ -0,0 +1,106 @@
1
+ import * as __ext_react from "react";
2
+ import * as __ext_react_dom from "react-dom";
3
+ import * as __ext_react_jsx from "react/jsx-runtime";
4
+ var __cjsExternals = { "react": __ext_react, "react-dom": __ext_react_dom, "react/jsx-runtime": __ext_react_jsx };
5
+ var require = function (id) {
6
+ var mod = __cjsExternals[id];
7
+ if (mod) return mod.default || mod;
8
+ throw new Error('Dynamic require of "' + id + '" is not supported');
9
+ };
10
+
11
+
12
+ // call-control-sdk/lib/pages/common/components/AppButton.tsx
13
+ import { Button, useTheme } from "@mui/material";
14
+ import { alpha } from "@mui/material/styles";
15
+ import { jsx } from "react/jsx-runtime";
16
+ var muiVariant = {
17
+ primary: "contained",
18
+ danger: "contained",
19
+ cancel: "text",
20
+ outlined: "outlined"
21
+ };
22
+ function AppButton({
23
+ children,
24
+ variant = "primary",
25
+ onClick,
26
+ startIcon,
27
+ endIcon,
28
+ disabled = false,
29
+ type = "button",
30
+ size = "medium",
31
+ fullWidth = false,
32
+ sx
33
+ }) {
34
+ const theme = useTheme();
35
+ const primary = theme.palette.primary.main;
36
+ const primaryDark = theme.palette.primary.dark;
37
+ const styles = {
38
+ primary: {
39
+ textTransform: "none",
40
+ fontWeight: 600,
41
+ backgroundColor: primary,
42
+ borderRadius: "30px",
43
+ fontSize: "0.82rem",
44
+ px: 2,
45
+ boxShadow: `0 2px 8px ${alpha(primary, 0.25)}`,
46
+ "&:hover": {
47
+ backgroundColor: primaryDark,
48
+ boxShadow: `0 4px 12px ${alpha(primary, 0.35)}`
49
+ },
50
+ "&.Mui-disabled": {
51
+ backgroundColor: alpha(primary, 0.4),
52
+ color: "#fff"
53
+ }
54
+ },
55
+ danger: {
56
+ textTransform: "none",
57
+ fontWeight: 600,
58
+ backgroundColor: "#d32f2f",
59
+ borderRadius: "8px",
60
+ fontSize: "0.82rem",
61
+ px: 2,
62
+ "&:hover": { backgroundColor: "#b71c1c" },
63
+ "&.Mui-disabled": { backgroundColor: "#e57373", color: "#fff" }
64
+ },
65
+ cancel: {
66
+ textTransform: "none",
67
+ fontWeight: 600,
68
+ color: "#666",
69
+ borderRadius: "30px",
70
+ fontSize: "0.82rem",
71
+ px: 2,
72
+ border: "1px solid #d0d0d0",
73
+ "&:hover": { backgroundColor: "#f5f5f5", borderColor: "#bbb" }
74
+ },
75
+ outlined: {
76
+ textTransform: "none",
77
+ fontWeight: 600,
78
+ color: primary,
79
+ borderColor: primary,
80
+ borderRadius: "30px",
81
+ fontSize: "0.82rem",
82
+ px: 2,
83
+ "&:hover": { borderColor: primaryDark, backgroundColor: alpha(primary, 0.05) }
84
+ }
85
+ };
86
+ return /* @__PURE__ */ jsx(
87
+ Button,
88
+ {
89
+ variant: muiVariant[variant],
90
+ onClick,
91
+ startIcon,
92
+ endIcon,
93
+ disabled,
94
+ type,
95
+ size,
96
+ fullWidth,
97
+ sx: [styles[variant], ...Array.isArray(sx) ? sx : [sx]],
98
+ children
99
+ }
100
+ );
101
+ }
102
+
103
+ export {
104
+ AppButton
105
+ };
106
+ //# sourceMappingURL=chunk-LX6I32Y4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../call-control-sdk/lib/pages/common/components/AppButton.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Button, SxProps, Theme, useTheme } from '@mui/material';\r\nimport { alpha } from '@mui/material/styles';\r\n\r\ntype AppButtonVariant = 'primary' | 'danger' | 'cancel' | 'outlined';\r\n\r\ninterface AppButtonProps {\r\n children: React.ReactNode;\r\n variant?: AppButtonVariant;\r\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\r\n startIcon?: React.ReactNode;\r\n endIcon?: React.ReactNode;\r\n disabled?: boolean;\r\n type?: 'button' | 'submit' | 'reset';\r\n size?: 'small' | 'medium' | 'large';\r\n fullWidth?: boolean;\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nconst muiVariant: Record<AppButtonVariant, 'contained' | 'outlined' | 'text'> = {\r\n primary: 'contained',\r\n danger: 'contained',\r\n cancel: 'text',\r\n outlined: 'outlined',\r\n};\r\n\r\nexport default function AppButton({\r\n children,\r\n variant = 'primary',\r\n onClick,\r\n startIcon,\r\n endIcon,\r\n disabled = false,\r\n type = 'button',\r\n size = 'medium',\r\n fullWidth = false,\r\n sx,\r\n}: AppButtonProps) {\r\n const theme = useTheme();\r\n const primary = theme.palette.primary.main;\r\n const primaryDark = theme.palette.primary.dark;\r\n\r\n const styles: Record<AppButtonVariant, SxProps<Theme>> = {\r\n primary: {\r\n textTransform: 'none',\r\n fontWeight: 600,\r\n backgroundColor: primary,\r\n borderRadius: '30px',\r\n fontSize: '0.82rem',\r\n px: 2,\r\n boxShadow: `0 2px 8px ${alpha(primary, 0.25)}`,\r\n '&:hover': {\r\n backgroundColor: primaryDark,\r\n boxShadow: `0 4px 12px ${alpha(primary, 0.35)}`,\r\n },\r\n '&.Mui-disabled': {\r\n backgroundColor: alpha(primary, 0.4),\r\n color: '#fff',\r\n },\r\n },\r\n danger: {\r\n textTransform: 'none',\r\n fontWeight: 600,\r\n backgroundColor: '#d32f2f',\r\n borderRadius: '8px',\r\n fontSize: '0.82rem',\r\n px: 2,\r\n '&:hover': { backgroundColor: '#b71c1c' },\r\n '&.Mui-disabled': { backgroundColor: '#e57373', color: '#fff' },\r\n },\r\n cancel: {\r\n textTransform: 'none',\r\n fontWeight: 600,\r\n color: '#666',\r\n borderRadius: '30px',\r\n fontSize: '0.82rem',\r\n px: 2,\r\n border: '1px solid #d0d0d0',\r\n '&:hover': { backgroundColor: '#f5f5f5', borderColor: '#bbb' },\r\n },\r\n outlined: {\r\n textTransform: 'none',\r\n fontWeight: 600,\r\n color: primary,\r\n borderColor: primary,\r\n borderRadius: '30px',\r\n fontSize: '0.82rem',\r\n px: 2,\r\n '&:hover': { borderColor: primaryDark, backgroundColor: alpha(primary, 0.05) },\r\n },\r\n };\r\n\r\n return (\r\n <Button\r\n variant={muiVariant[variant]}\r\n onClick={onClick}\r\n startIcon={startIcon}\r\n endIcon={endIcon}\r\n disabled={disabled}\r\n type={type}\r\n size={size}\r\n fullWidth={fullWidth}\r\n sx={[styles[variant], ...(Array.isArray(sx) ? sx : [sx])]}\r\n >\r\n {children}\r\n </Button>\r\n );\r\n}\r\n"],"mappings":";;;;;;;;;;;;AACA,SAAS,QAAwB,gBAAgB;AACjD,SAAS,aAAa;AA2FlB;AA1EJ,IAAM,aAA0E;AAAA,EAC9E,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AACZ;AAEe,SAAR,UAA2B;AAAA,EAChC;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,OAAO;AAAA,EACP,OAAO;AAAA,EACP,YAAY;AAAA,EACZ;AACF,GAAmB;AACjB,QAAM,QAAQ,SAAS;AACvB,QAAM,UAAU,MAAM,QAAQ,QAAQ;AACtC,QAAM,cAAc,MAAM,QAAQ,QAAQ;AAE1C,QAAM,SAAmD;AAAA,IACvD,SAAS;AAAA,MACP,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,WAAW,aAAa,MAAM,SAAS,IAAI,CAAC;AAAA,MAC5C,WAAW;AAAA,QACT,iBAAiB;AAAA,QACjB,WAAW,cAAc,MAAM,SAAS,IAAI,CAAC;AAAA,MAC/C;AAAA,MACA,kBAAkB;AAAA,QAChB,iBAAiB,MAAM,SAAS,GAAG;AAAA,QACnC,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,WAAW,EAAE,iBAAiB,UAAU;AAAA,MACxC,kBAAkB,EAAE,iBAAiB,WAAW,OAAO,OAAO;AAAA,IAChE;AAAA,IACA,QAAQ;AAAA,MACN,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,cAAc;AAAA,MACd,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,WAAW,EAAE,iBAAiB,WAAW,aAAa,OAAO;AAAA,IAC/D;AAAA,IACA,UAAU;AAAA,MACR,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,cAAc;AAAA,MACd,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,WAAW,EAAE,aAAa,aAAa,iBAAiB,MAAM,SAAS,IAAI,EAAE;AAAA,IAC/E;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,WAAW,OAAO;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,CAAC,OAAO,OAAO,GAAG,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,CAAC,EAAE,CAAE;AAAA,MAEvD;AAAA;AAAA,EACH;AAEJ;","names":[]}