ahs-cti 0.0.2-beta.8 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +425 -294
  2. package/dist/agentDetailReport-XSBMOUMW.mjs +12 -0
  3. package/dist/agentDetailReport-XSBMOUMW.mjs.map +1 -0
  4. package/dist/agentPerformanceReport-UT6QZWYD.mjs +533 -0
  5. package/dist/agentPerformanceReport-UT6QZWYD.mjs.map +1 -0
  6. package/dist/auditReport-R67BYA4Z.mjs +15 -0
  7. package/dist/auditReport-R67BYA4Z.mjs.map +1 -0
  8. package/dist/callHistory-PHGY224F.mjs +805 -0
  9. package/dist/callHistory-PHGY224F.mjs.map +1 -0
  10. package/dist/campaigns-JSMYHHDF.mjs +3049 -0
  11. package/dist/campaigns-JSMYHHDF.mjs.map +1 -0
  12. package/dist/caroQualityAuditDashboard-7X44HRZL.mjs +66 -0
  13. package/dist/caroQualityAuditDashboard-7X44HRZL.mjs.map +1 -0
  14. package/dist/caroVoiceAI-OZAB7LK4.mjs +21 -0
  15. package/dist/caroVoiceAI-OZAB7LK4.mjs.map +1 -0
  16. package/dist/cdrReport-44LN5VUX.mjs +819 -0
  17. package/dist/cdrReport-44LN5VUX.mjs.map +1 -0
  18. package/dist/chunk-6ICPXSN6.mjs +61 -0
  19. package/dist/chunk-6ICPXSN6.mjs.map +1 -0
  20. package/dist/chunk-CXULBAK6.mjs +493 -0
  21. package/dist/chunk-CXULBAK6.mjs.map +1 -0
  22. package/dist/chunk-FVXHNBYV.mjs +82 -0
  23. package/dist/chunk-FVXHNBYV.mjs.map +1 -0
  24. package/dist/chunk-G6KDIN5W.mjs +749 -0
  25. package/dist/chunk-G6KDIN5W.mjs.map +1 -0
  26. package/dist/chunk-GGACEO3I.mjs +180 -0
  27. package/dist/chunk-GGACEO3I.mjs.map +1 -0
  28. package/dist/chunk-HBR2JS4C.mjs +95 -0
  29. package/dist/chunk-HBR2JS4C.mjs.map +1 -0
  30. package/dist/chunk-HRM6S6J2.mjs +61 -0
  31. package/dist/chunk-HRM6S6J2.mjs.map +1 -0
  32. package/dist/chunk-JOZ4YQMR.mjs +116 -0
  33. package/dist/chunk-JOZ4YQMR.mjs.map +1 -0
  34. package/dist/chunk-O2XGWZLT.mjs +1060 -0
  35. package/dist/chunk-O2XGWZLT.mjs.map +1 -0
  36. package/dist/chunk-RZZQ42MG.mjs +115 -0
  37. package/dist/chunk-RZZQ42MG.mjs.map +1 -0
  38. package/dist/chunk-UZF5Q3GR.mjs +678 -0
  39. package/dist/chunk-UZF5Q3GR.mjs.map +1 -0
  40. package/dist/chunk-VQCHBU2Q.mjs +27 -0
  41. package/dist/chunk-VQCHBU2Q.mjs.map +1 -0
  42. package/dist/chunk-WWWM33FY.mjs +57 -0
  43. package/dist/chunk-WWWM33FY.mjs.map +1 -0
  44. package/dist/index.d.mts +795 -112
  45. package/dist/index.d.ts +796 -112
  46. package/dist/index.js +13690 -2103
  47. package/dist/index.js.map +1 -1
  48. package/dist/index.mjs +2335 -2250
  49. package/dist/index.mjs.map +1 -1
  50. package/dist/liveStatus-AHKS4XLW.mjs +1077 -0
  51. package/dist/liveStatus-AHKS4XLW.mjs.map +1 -0
  52. package/dist/loginReport-7GBMZP55.mjs +828 -0
  53. package/dist/loginReport-7GBMZP55.mjs.map +1 -0
  54. package/dist/managementDashboard-TYON77NW.mjs +529 -0
  55. package/dist/managementDashboard-TYON77NW.mjs.map +1 -0
  56. package/dist/qualityAuditDashboard-AGJH5VVN.mjs +66 -0
  57. package/dist/qualityAuditDashboard-AGJH5VVN.mjs.map +1 -0
  58. package/package.json +16 -6
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../call-control-sdk/index.ts","../call-control-sdk/lib/hooks/eventsTracker.ts","../call-control-sdk/lib/hooks/sdk-state.ts","../call-control-sdk/lib/services/endPoint.ts","../call-control-sdk/lib/hooks/useLogout.ts","../call-control-sdk/lib/services/usbLight.ts","../call-control-sdk/lib/hooks/useEndCall.ts","../call-control-sdk/lib/services/axios.ts","../call-control-sdk/lib/hooks/useClickToCall.ts","../call-control-sdk/lib/hooks/useGetCallerData.ts","../call-control-sdk/lib/hooks/useGetAuthorizationToken.ts","../call-control-sdk/lib/components/callControlPanel.tsx","../call-control-sdk/lib/components/callControls.tsx","../call-control-sdk/lib/components/dialog.tsx","../call-control-sdk/lib/hooks/useSDKState.ts","../call-control-sdk/lib/services/request.ts","../call-control-sdk/lib/services/toastMessage.tsx","../call-control-sdk/lib/components/styles.ts","../call-control-sdk/lib/hooks/useDraggable.ts","../call-control-sdk/lib/services/micController.ts","../call-control-sdk/lib/utils/audioLoader.ts","../call-control-sdk/lib/components/SDKProvider.tsx"],"sourcesContent":["import { eventTracker } from \"./lib/hooks/eventsTracker\";\r\nimport { sdkStateManager } from \"./lib/hooks/sdk-state\";\r\nimport { useLogout } from \"./lib/hooks/useLogout\";\r\nimport { BASE_URL } from \"./lib/services/endPoint\";\r\nimport { useEndCall } from \"./lib/hooks/useEndCall\";\r\nimport { SDKConfig, URLConfig } from \"./types\";\r\nimport { useClickToCall } from \"./lib/hooks/useClickToCall\";\r\nimport { useGetCallerData } from \"./lib/hooks/useGetCallerData\";\r\nimport { useGetAuthorizationToken } from \"./lib/hooks/useGetAuthorizationToken\";\r\n\r\nexport { CallControlPanel } from \"./lib/components/callControlPanel\";\r\n\r\nexport type { CallControlPanelProps, CallData, SDKConfig } from \"./types\";\r\n\r\ninterface InitSDKParams {\r\n\tapiKey: string;\r\n\ttenantId: string;\r\n\tagentId: string;\r\n\tsessionId?: string;\r\n\tsdkConfig?: SDKConfig;\r\n\turlConfig?: URLConfig;\r\n}\r\n\r\nexport async function initSDK({\r\n\tapiKey,\r\n\ttenantId,\r\n\tagentId,\r\n\tsdkConfig,\r\n\turlConfig,\r\n}: InitSDKParams): Promise<void> {\r\n\tif (!apiKey || typeof apiKey !== \"string\" || apiKey.trim().length === 0) {\r\n\t\tthrow new Error(\r\n\t\t\t\"SDK initialization failed: API key is required and must be a non-empty string\"\r\n\t\t);\r\n\t}\r\n\r\n\tif (!tenantId || typeof tenantId !== \"string\" || tenantId.trim().length === 0) {\r\n\t\tthrow new Error(\r\n\t\t\t\"SDK initialization failed: Tenant ID is required and must be a non-empty string\"\r\n\t\t);\r\n\t}\r\n\r\n\tif (!agentId || typeof agentId !== \"string\" || agentId.trim().length === 0) {\r\n\t\tthrow new Error(\r\n\t\t\t\"SDK initialization failed: Agent ID is required and must be a non-empty string\"\r\n\t\t);\r\n\t}\r\n\r\n\ttry {\r\n\t\tconst initResult = await eventTracker.init({\r\n\t\t\tapiKey: apiKey.trim(),\r\n\t\t\ttenantId: tenantId.trim(),\r\n\t\t\tagentId: agentId.trim(),\r\n\t\t\tpassword: urlConfig?.password,\r\n\t\t\tbaseUrl: urlConfig?.baseURL,\r\n\t\t});\r\n\r\n\t\tconst res = {\r\n\t\t\taccessToken: initResult?.accessToken,\r\n\t\t\texpiration: initResult?.expiration,\r\n\t\t\tticketId: initResult?.ticketId,\r\n\t\t}\r\n\t\tif (initResult) {\r\n\t\t\tconsole.info(\"SDK initialized successfully\");\r\n\t\t\tsdkStateManager.initialize(\r\n\t\t\t\tapiKey.trim(),\r\n\t\t\t\ttenantId.trim(),\r\n\t\t\t\tagentId.trim(),\r\n\t\t\t\turlConfig,\r\n\t\t\t\tres,\r\n\t\t\t\t{ ...initResult?.call_controls, ...sdkConfig },\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tsdkStateManager.setInitCheck();\r\n\t\t\tthrow new Error(\r\n\t\t\t\t\"SDK initialization failed: Unable to establish connection with the CTI system\"\r\n\t\t\t);\r\n\t\t}\r\n\t} catch (error) {\r\n\t\tsdkStateManager.setInitCheck();\r\n\r\n\t\tif (error instanceof Error) {\r\n\t\t\tthrow error;\r\n\t\t} else {\r\n\t\t\tthrow new Error(`SDK initialization failed: ${String(error)}`);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function getSDKVersion(): string {\r\n\treturn \"6.x.x\";\r\n}\r\n\r\nexport function isSDKInitialized(): boolean {\r\n\treturn sdkStateManager.getState().isInitialized;\r\n}\r\n\r\nexport { useLogout, useEndCall, useClickToCall, useGetCallerData, useGetAuthorizationToken };\r\n","import { sdkStateManager } from \"./sdk-state\";\r\n\r\nexport interface EventTrackerConfig {\r\n\tapiKey: string;\r\n\ttenantId: string;\r\n\tagentId: string;\r\n\tpassword?: string;\r\n\tbaseUrl?: string;\r\n\r\n\tretryAttempts?: number;\r\n\tqueueSize?: number;\r\n\tflushInterval?: number;\r\n}\r\n\r\nexport interface EventData {\r\n\t[key: string]: any;\r\n}\r\n\r\nexport interface EventTrackerInstance {\r\n\tinit(config: EventTrackerConfig): Promise<string | null>;\r\n\tisInitialized(): boolean;\r\n\tgetConfig(): EventTrackerConfig | null;\r\n}\r\n\r\nclass EventTrackerSDK implements EventTrackerInstance {\r\n\tprivate config: EventTrackerConfig | null = null;\r\n\tprivate ticketId: string | null = null;\r\n\tprivate baseUrl: string = \"\";\r\n\tprivate flushTimer: ReturnType<typeof setInterval> | null = null;\r\n\r\n\tasync init(config: EventTrackerConfig): Promise<any | null> {\r\n\t\tthis.config = {\r\n\t\t\tretryAttempts: 3,\r\n\t\t\tqueueSize: 100,\r\n\t\t\tflushInterval: 5000,\r\n\t\t\t...config,\r\n\t\t};\r\n\r\n\t\tthis.baseUrl = config.baseUrl || (typeof window !== \"undefined\" ? window.location.origin : \"\");\r\n\r\n\t\tconst ticket = await this.createTicket();\r\n\r\n\t\tthis.startPeriodicFlush();\r\n\r\n\t\treturn ticket;\r\n\t}\r\n\r\n\tisInitialized(): boolean {\r\n\t\treturn this.config !== null && this.ticketId !== null;\r\n\t}\r\n\r\n\tgetConfig(): EventTrackerConfig | null {\r\n\t\treturn this.config;\r\n\t}\r\n\r\n\tgetTicketId(): string | null {\r\n\t\treturn this.ticketId;\r\n\t}\r\n\r\n\tprivate async createTicket(): Promise<string | null> {\r\n\t\tif (!this.config) {\r\n\t\t\tthrow new Error(\"EventTracker not initialized\");\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t\t\tconst response = await this.makeRequest(\"/api/v1/auth/login\", {\r\n\t\t\t\tmethod: \"POST\",\r\n\t\t\t\theaders: {\r\n\t\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\t\t},\r\n\t\t\t\tbody: JSON.stringify({\r\n\t\t\t\t\tuserId: this.config.agentId,\r\n\t\t\t\t\t// sessionId: this.config.sessionId,\r\n\t\t\t\t\tpassword: this.config.password\r\n\t\t\t\t}),\r\n\t\t\t});\r\n\r\n\t\t\t// if (!response.ok) {\r\n\t\t\t// \tsdkStateManager.setInitCheck();\r\n\t\t\t// \tthrow new Error(`Failed to initialize: ${response.status} ${response.statusText}`);\r\n\t\t\t// }\r\n\r\n\t\t\tconst data = await response.json();\r\n\t\t\tthis.ticketId = data.ticketId;\r\n\r\n\r\n\t\t\treturn data;\r\n\t\t} catch (error) {\r\n\r\n\t\t\tthrow error;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async makeRequest(url: string, options: RequestInit): Promise<Response> {\r\n\t\tconst fullUrl = `${this.baseUrl}${url}`;\r\n\t\tconst maxRetries = this.config?.retryAttempts || 3;\r\n\r\n\t\tfor (let attempt = 1; attempt <= maxRetries; attempt++) {\r\n\t\t\ttry {\r\n\t\t\t\tconst response = await fetch(fullUrl, options);\r\n\t\t\t\treturn response;\r\n\t\t\t} catch (error) {\r\n\t\t\t\tif (attempt === maxRetries) {\r\n\t\t\t\t\tthrow error;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst delay = Math.min(1000 * Math.pow(2, attempt - 1), 10000);\r\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, delay));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthrow new Error(\"Max retries exceeded\");\r\n\t}\r\n\r\n\tprivate startPeriodicFlush(): void {\r\n\t\tif (this.flushTimer) {\r\n\t\t\tclearInterval(this.flushTimer);\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n}\r\n\r\nexport const eventTracker = new EventTrackerSDK();\r\n\r\nif (typeof window !== \"undefined\") {\r\n\t(window as any).EventTracker = eventTracker;\r\n}\r\n","import { getItem, removeItem, setItem } from \"@react-solutions/vault\";\r\nimport type { SDKState, CallData, ConferenceLineTypes, SDKConfig, InitSDKRes, URLConfig } from \"../../types\";\r\nimport { STORAGE_KEY } from \"../services/endPoint\";\r\n\r\nclass SDKStateManager {\r\n\tprivate state: SDKState;\r\n\tprivate listeners: Array<() => void> = [];\r\n\tprivate readonly STORAGE_KEY = STORAGE_KEY;\r\n\r\n\tprivate apiKey: string | undefined;\r\n\tprivate tenantId: string | undefined;\r\n\r\n\tconstructor() {\r\n\t\tthis.state = this.getInitialState();\r\n\t\tthis.loadFromStorage();\r\n\t}\r\n\r\n\tprivate getInitialState(): SDKState {\r\n\t\treturn {\r\n\t\t\tauthorization: undefined,\r\n\t\t\tprocess: null,\r\n\t\t\tagentId: \"\",\r\n\t\t\topenConferenceDialog: false,\r\n\t\t\topenCallTransferDialog: false,\r\n\t\t\tisInitialized: false,\r\n\t\t\tsdkConfig: {\r\n\t\t\t\tdisableEndCallButton: false,\r\n\t\t\t\tdisabledDialButton: false,\r\n\t\t\t\tdisabledMoreOptionsButton: false,\r\n\t\t\t\tenableSmsServices: false,\r\n\t\t\t\tenableQueueName: false,\r\n\t\t\t\tdisableCallTransferButton: false,\r\n\t\t\t\tisDraggable: true,\r\n\t\t\t\tdisableSoftPhone: false,\r\n\t\t\t\tdisableConferenceButton: false,\r\n\t\t\t\tdisabled: {},\r\n\t\t\t\tenabled: {},\r\n\t\t\t\toutlined: {},\r\n\t\t\t},\r\n\t\t\turlConfig: {\r\n\t\t\t\tbaseURL: \"\",\r\n\t\t\t\tiframeURL: \"\",\r\n\t\t\t\tiframeAPIURL: \"\",\r\n\t\t\t\twebSocketURL: \"\",\r\n\t\t\t\tid: \"\",\r\n\t\t\t\tpassword: \"\",\r\n\t\t\t},\r\n\t\t\tcallStartTime: null,\r\n\t\t\tcontrolPanelPosition: { x: 10, y: 10 },\r\n\t\t\tiframePosition: { x: window.screen?.availWidth - 460, y: window.screen?.height - 580 },\r\n\t\t\tcallData: {\r\n\t\t\t\tagent_id: \"\",\r\n\t\t\t\tqueue_name: \"\",\r\n\t\t\t\thold: 0,\r\n\t\t\t\tmute: 0,\r\n\t\t\t\tstatus: \"\",\r\n\t\t\t\ttype: \"\",\r\n\t\t\t\tevent_time: \"\",\r\n\t\t\t\tphone_number: \"\",\r\n\t\t\t},\r\n\t\t\tconferenceLine: [\r\n\t\t\t\t{\r\n\t\t\t\t\tline: 1,\r\n\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\tisMute: false,\r\n\t\t\t\t\tisHold: false,\r\n\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tline: 2,\r\n\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\tisMute: false,\r\n\t\t\t\t\tisHold: false,\r\n\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tline: 3,\r\n\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\tisMute: false,\r\n\t\t\t\t\tisHold: false,\r\n\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tline: 4,\r\n\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\tisMute: false,\r\n\t\t\t\t\tisHold: false,\r\n\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tline: 5,\r\n\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\tisMute: false,\r\n\t\t\t\t\tisHold: false,\r\n\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t\thold: 0,\r\n\t\t\tmute: 0,\r\n\t\t\tagentStatus: \"\",\r\n\t\t};\r\n\t}\r\n\r\n\tprivate loadFromStorage(): void {\r\n\t\ttry {\r\n\t\t\tconst stored = <SDKState>getItem(this.STORAGE_KEY);\r\n\t\t\tif (stored) {\r\n\t\t\t\tconst parsedState = stored;\r\n\t\t\t\tthis.state = {\r\n\t\t\t\t\t...this.state,\r\n\t\t\t\t\tagentId: parsedState.agentId || \"\",\r\n\t\t\t\t\tauthorization: parsedState.authorization || undefined,\r\n\t\t\t\t\tprocess: parsedState.process || null,\r\n\t\t\t\t\topenConferenceDialog: parsedState?.openConferenceDialog || false,\r\n\t\t\t\t\topenCallTransferDialog: parsedState?.openCallTransferDialog || false,\r\n\t\t\t\t\tisInitialized: parsedState.isInitialized || false,\r\n\t\t\t\t\tsdkConfig: parsedState.sdkConfig || {\r\n\t\t\t\t\t\tdisableEndCallButton: false,\r\n\t\t\t\t\t\tdisabledMoreOptionsButton: false,\r\n\t\t\t\t\t\tenableSmsServices: false,\r\n\t\t\t\t\t\tenableQueueName: false,\r\n\t\t\t\t\t\tdisabledDialButton: false,\r\n\t\t\t\t\t\tdisableCallTransferButton: false,\r\n\t\t\t\t\t\tisDraggable: true,\r\n\t\t\t\t\t\tdisableSoftPhone: false,\r\n\t\t\t\t\t\tdisableConferenceButton: false,\r\n\t\t\t\t\t\tdisabled: {},\r\n\t\t\t\t\t\tenabled: {},\r\n\t\t\t\t\t\toutlined: {},\r\n\t\t\t\t\t},\r\n\t\t\t\t\turlConfig: parsedState.urlConfig || {\r\n\t\t\t\t\t\tid: \"\",\r\n\t\t\t\t\t\tbaseURL: \"\",\r\n\t\t\t\t\t\tiframeURL: \"\",\r\n\t\t\t\t\t\tiframeAPIURL: \"\",\r\n\t\t\t\t\t\twebSocketURL: \"\",\r\n\t\t\t\t\t\tpassword: \"\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcallStartTime: parsedState.callStartTime || null,\r\n\t\t\t\t\tcontrolPanelPosition: parsedState.controlPanelPosition || {\r\n\t\t\t\t\t\tx: 10,\r\n\t\t\t\t\t\ty: 10,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tiframePosition: parsedState.iframePosition || {\r\n\t\t\t\t\t\tx: window.screen?.availWidth - 460,\r\n\t\t\t\t\t\ty: window.screen?.height - 580,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcallData: parsedState.callData || {\r\n\t\t\t\t\t\tmobileNumber: \"\",\r\n\t\t\t\t\t\tcallReferenceId: \"\",\r\n\t\t\t\t\t\tagent_id: \"\",\r\n\t\t\t\t\t\tstatus: \"\",\r\n\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\tevent_time: \"\",\r\n\t\t\t\t\t\tphone_number: \"\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tconferenceLine:\r\n\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\tparsedState.conferenceLine &&\r\n\t\t\t\t\t\t\tArray.isArray(parsedState.conferenceLine) &&\r\n\t\t\t\t\t\t\tparsedState.conferenceLine.length > 0\r\n\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\tparsedState.conferenceLine\r\n\t\t\t\t\t\t:\tthis.state.conferenceLine,\r\n\t\t\t\t\tagentStatus: parsedState.agentStatus,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tconsole.warn(\"Failed to load SDK state:\", error);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate saveToStorage(): void {\r\n\t\ttry {\r\n\t\t\tconst persistentState = {\r\n\t\t\t\tagentId: this.state.agentId,\r\n\t\t\t\tauthorization: this.state.authorization,\r\n\t\t\t\tprocess: this.state.process,\r\n\t\t\t\tisInitialized: this.state.isInitialized,\r\n\t\t\t\topenConferenceDialog: this.state.openConferenceDialog,\r\n\t\t\t\topenCallTransferDialog: this.state.openCallTransferDialog,\r\n\t\t\t\tsdkConfig: this.state.sdkConfig,\r\n\t\t\t\turlConfig: this.state.urlConfig,\r\n\t\t\t\tcallStartTime: this.state.callStartTime,\r\n\t\t\t\tcontrolPanelPosition: this.state.controlPanelPosition,\r\n\t\t\t\tiframePosition: this.state.iframePosition,\r\n\t\t\t\tcallData: this.state.callData,\r\n\t\t\t\tconferenceLine: this.state.conferenceLine,\r\n\t\t\t\tagentStatus: this.state.agentStatus,\r\n\t\t\t};\r\n\t\t\tsetItem(this.STORAGE_KEY, persistentState);\r\n\t\t} catch (error) {\r\n\t\t\tconsole.warn(\"Failed to save SDK state:\", error);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate notifyListeners(): void {\r\n\t\tthis.listeners.forEach((listener) => listener());\r\n\t}\r\n\r\n\tprivate validateCredentials(apiKey: string, tenantId: string): void {\r\n\t\tif (!apiKey || typeof apiKey !== \"string\" || apiKey.trim().length === 0) {\r\n\t\t\tthrow new Error(\"API key not available\");\r\n\t\t}\r\n\t\tif (!tenantId || typeof tenantId !== \"string\" || tenantId.trim().length === 0) {\r\n\t\t\tthrow new Error(\"Tenant ID not available\");\r\n\t\t}\r\n\t\tthis.apiKey = apiKey.trim();\r\n\t\tthis.tenantId = tenantId.trim();\r\n\t}\r\n\r\n\tpublic initialize(\r\n\t\tapiKey: string,\r\n\t\ttenantId: string,\r\n\t\tagentId: string,\r\n\t\turlConfig?: URLConfig,\r\n\t\tinitResult?: InitSDKRes,\r\n\t\tsdkConfig?: SDKConfig,\r\n\t): void {\r\n\t\tthis.validateCredentials(apiKey, tenantId);\r\n\t\tif (!agentId || typeof agentId !== \"string\" || agentId.trim().length === 0) {\r\n\t\t\tthrow new Error(\"Agent ID not available\");\r\n\t\t} else {\r\n\t\t\tthis.state.agentId = agentId;\r\n\t\t\tthis.state.openConferenceDialog = false;\r\n\t\t\tthis.state.openCallTransferDialog = false;\r\n\t\t\tthis.state.authorization = initResult;\r\n\t\t\tthis.state.sdkConfig = {\r\n\t\t\t\tdisableEndCallButton: false,\r\n\t\t\t\tdisabledDialButton: false,\r\n\t\t\t\tenableSmsServices: false,\r\n\t\t\t\tdisabledMoreOptionsButton: false,\r\n\t\t\t\tenableQueueName: false,\r\n\t\t\t\tdisableCallTransferButton: false,\r\n\t\t\t\tisDraggable: true,\r\n\t\t\t\tdisableSoftPhone: false,\r\n\t\t\t\tdisableConferenceButton: false,\r\n\t\t\t\tdisabled: {},\r\n\t\t\t\tenabled: {},\r\n\t\t\t\toutlined: {},\r\n\t\t\t\t...sdkConfig,\r\n\t\t\t};\r\n\t\t\tthis.state.urlConfig = {\r\n\t\t\t\tbaseURL: urlConfig?.baseURL || \"\",\r\n\t\t\t\tiframeURL: urlConfig?.iframeURL || \"\",\r\n\t\t\t\tiframeAPIURL: urlConfig?.iframeAPIURL || \"\",\r\n\t\t\t\twebSocketURL: urlConfig?.webSocketURL || \"\",\r\n\t\t\t\tid: urlConfig?.id || \"\",\r\n\t\t\t\tpassword: urlConfig?.password || \"\",\r\n\t\t\t};\r\n\t\t\tthis.state.isInitialized = true;\r\n\t\t\tthis.saveToStorage();\r\n\t\t\tthis.notifyListeners();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getState(): SDKState {\r\n\t\treturn { ...this.state };\r\n\t}\r\n\r\n\tpublic getCredentials(): { apiKey: string | undefined; tenantId: string | undefined } {\r\n\t\treturn { apiKey: this.apiKey, tenantId: this.tenantId };\r\n\t}\r\n\tpublic getSdkAuthToken(): string | undefined {\r\n\t\treturn this.state.authorization?.accessToken;\r\n\t}\r\n\r\n\tpublic subscribe(listener: () => void): () => void {\r\n\t\tthis.listeners.push(listener);\r\n\t\treturn () => {\r\n\t\t\tconst index = this.listeners.indexOf(listener);\r\n\t\t\tif (index > -1) {\r\n\t\t\t\tthis.listeners.splice(index, 1);\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\t// public setHolding(isHolding: boolean): void {\r\n\t// \tthis.state.isHolding = isHolding;\r\n\t// \tthis.saveToStorage();\r\n\t// \tthis.notifyListeners();\r\n\t// }\r\n\r\n\t// public setMuted(isMuted: boolean): void {\r\n\t// \tthis.state.isMuted = isMuted;\r\n\t// \tthis.saveToStorage();\r\n\t// \tthis.notifyListeners();\r\n\t// }\r\n\r\n\tpublic setProcess(process: { process_id: number; process_name: string }): void {\r\n\t\tthis.state.process = process;\r\n\t\tthis.saveToStorage();\r\n\t\tthis.notifyListeners();\r\n\t}\r\n\r\n\tpublic setControlPanelPosition(position: { x: number; y: number }): void {\r\n\t\tthis.state.controlPanelPosition = position;\r\n\t\tthis.saveToStorage();\r\n\t\tthis.notifyListeners();\r\n\t}\r\n\r\n\tpublic setIframePosition(position: { x: number; y: number }): void {\r\n\t\tthis.state.iframePosition = position;\r\n\t\tthis.saveToStorage();\r\n\t\tthis.notifyListeners();\r\n\t}\r\n\r\n\tpublic startCall(): void {\r\n\t\tthis.state.callStartTime = Date.now();\r\n\t\tthis.saveToStorage();\r\n\t\tthis.notifyListeners();\r\n\t}\r\n\r\n\tpublic endCall(): void {\r\n\t\tthis.state.callStartTime = null;\r\n\t\tthis.saveToStorage();\r\n\t\tthis.notifyListeners();\r\n\t}\r\n\r\n\tpublic setInitCheck(): void {\r\n\t\tthis.state.isInitialized = false;\r\n\t\tthis.saveToStorage();\r\n\t\tthis.notifyListeners();\r\n\t}\r\n\r\n\tpublic setOpenConferenceDialog(open: boolean): void {\r\n\t\tthis.state.openConferenceDialog = open;\r\n\t\tthis.saveToStorage();\r\n\t\tthis.notifyListeners();\r\n\t}\r\n\r\n\tpublic setOpenCallTransferDialog(open: boolean): void {\r\n\t\tthis.state.openCallTransferDialog = open;\r\n\t\tthis.saveToStorage();\r\n\t\tthis.notifyListeners();\r\n\t}\r\n\r\n\tpublic setAgentStatus(status: string): void {\r\n\t\tthis.state.agentStatus = status;\r\n\t\tthis.saveToStorage();\r\n\t\tthis.notifyListeners();\r\n\t}\r\n\r\n\tpublic updateCallData(data: Partial<CallData>): void {\r\n\t\tthis.state.callData = { ...this.state.callData, ...data };\r\n\t\tthis.saveToStorage();\r\n\t\tthis.notifyListeners();\r\n\t}\r\n\r\n\tpublic updateConferenceData(data: ConferenceLineTypes[]): void {\r\n\t\tthis.state.conferenceLine = [...data];\r\n\t\tthis.saveToStorage();\r\n\t\tthis.notifyListeners();\r\n\t}\r\n\r\n\tpublic setConferenceLine(line: ConferenceLineTypes): void {\r\n\t\tif (!this.state.conferenceLine || !Array.isArray(this.state.conferenceLine)) {\r\n\t\t\tthis.state.conferenceLine = this.getInitialState().conferenceLine;\r\n\t\t}\r\n\r\n\t\tconst conferenceLineData = this.state.conferenceLine?.map((each: ConferenceLineTypes) => {\r\n\t\t\tif (each.line === line.line) {\r\n\t\t\t\treturn line;\r\n\t\t\t}\r\n\t\t\treturn each;\r\n\t\t});\r\n\t\tthis.state.conferenceLine = conferenceLineData;\r\n\t\tthis.saveToStorage();\r\n\t\tthis.notifyListeners();\r\n\t}\r\n\r\n\tpublic resetConferenceLines(): void {\r\n\t\tthis.state.conferenceLine = [\r\n\t\t\t{\r\n\t\t\t\tline: 1,\r\n\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\ttype: \"\",\r\n\t\t\t\tphone: \"\",\r\n\t\t\t\tisMute: false,\r\n\t\t\t\tisHold: false,\r\n\t\t\t\tisCallStart: false,\r\n\t\t\t\tisMergeCall: false,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tline: 2,\r\n\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\ttype: \"\",\r\n\t\t\t\tphone: \"\",\r\n\t\t\t\tisMute: false,\r\n\t\t\t\tisHold: false,\r\n\t\t\t\tisCallStart: false,\r\n\t\t\t\tisMergeCall: false,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tline: 3,\r\n\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\ttype: \"\",\r\n\t\t\t\tphone: \"\",\r\n\t\t\t\tisMute: false,\r\n\t\t\t\tisHold: false,\r\n\t\t\t\tisCallStart: false,\r\n\t\t\t\tisMergeCall: false,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tline: 4,\r\n\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\ttype: \"\",\r\n\t\t\t\tphone: \"\",\r\n\t\t\t\tisMute: false,\r\n\t\t\t\tisHold: false,\r\n\t\t\t\tisCallStart: false,\r\n\t\t\t\tisMergeCall: false,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tline: 5,\r\n\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\ttype: \"\",\r\n\t\t\t\tphone: \"\",\r\n\t\t\t\tisMute: false,\r\n\t\t\t\tisHold: false,\r\n\t\t\t\tisCallStart: false,\r\n\t\t\t\tisMergeCall: false,\r\n\t\t\t},\r\n\t\t];\r\n\r\n\t\tthis.saveToStorage();\r\n\t\tthis.notifyListeners();\r\n\t}\r\n\r\n\tpublic clearStorageAndReset(): void {\r\n\t\ttry {\r\n\t\t\tremoveItem(this.STORAGE_KEY);\r\n\t\t\tthis.state = this.getInitialState();\r\n\t\t\tthis.notifyListeners();\r\n\t\t} catch (error) {\r\n\t\t\tconsole.warn(\"Failed to clear:\", error);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getConferenceLines(): ConferenceLineTypes[] {\r\n\t\treturn this.state.conferenceLine || [];\r\n\t}\r\n}\r\n\r\nexport const sdkStateManager = new SDKStateManager();\r\n","\r\n\r\nexport const IP = \"192.168.100.254\";\r\n\r\nexport const IFRAME_IP = \"10.10.95.25\"\r\n// export const IFRAME_URL = `https://${IFRAME_IP}:8089`;\r\n// export const IFRAME_API_URL = `https://${IFRAME_IP}:8000`;\r\n\r\n\r\n// export const BASE_URL = `http://${IP}:8095`;\r\n// export const WS_BASE_URL = `ws://${IP}:8095`;\r\n\r\n// export const IFRAME_URL = sdkStateManager?.getState()?.urlConfig?.iframeURL\r\n// export const IFRAME_API_URL = sdkStateManager?.getState()?.urlConfig?.iframeAPIURL\r\nexport const BASE_URL = \"\";\r\n// export const WS_BASE_URL = sdkStateManager?.getState()?.urlConfig?.webSocketURL;\r\n\r\nexport const VERSION = {\r\n\tv1: \"/api/v1\",\r\n};\r\n\r\nexport const END_POINT = {\r\n\tLOGIN: `${BASE_URL}${VERSION.v1}/cti/login?provider=convox`,\r\n\tREADY_AGENT: `${BASE_URL}${VERSION.v1}/cti/ready-agent?provider=convox`,\r\n\tUPDATE_AGENT_BREAK: `${BASE_URL}${VERSION.v1}/cti/update-agent-status?provider=convox`,\r\n\tCLICK_TO_CALL: `${BASE_URL}${VERSION.v1}/cti/calls?provider=convox`,\r\n\tHOLD_CALL: `${BASE_URL}${VERSION.v1}/cti/calls/hold?provider=convox`,\r\n\tMUTE_CALL: `${BASE_URL}${VERSION.v1}/cti/calls/mute?provider=convox`,\r\n\tUNMUTE_CALL: `${BASE_URL}${VERSION.v1}/cti/unmute-call?provider=convox`,\r\n\tEND_CALL: `${BASE_URL}${VERSION.v1}/cti/calls/end?provider=convox`,\r\n\tLOGOUT: `${BASE_URL}${VERSION.v1}/cti/logout?provider=convox`,\r\n\r\n\tCONFERENCE_CALL: `${BASE_URL}${VERSION.v1}/cti/calls/conference?provider=convox`,\r\n\tCONFERENCE_CALL_HOLD_OR_UN_HOLD: `${BASE_URL}${VERSION.v1}/cti/calls/conference/hold?provider=convox`,\r\n\tCONFERENCE_CALL_MUTE_OT_UN_MUTE: `${BASE_URL}${VERSION.v1}/cti/calls/conference/mute?provider=convox`,\r\n\tCONFERENCE_CALL_END: `${BASE_URL}${VERSION.v1}/cti/calls/conference/hangup?provider=convox`,\r\n\tCONFERENCE_CALL_END_ALL: `${BASE_URL}${VERSION.v1}/cti/calls/conference/hangup/all?provider=convox`,\r\n\tCONFERENCE_CALL_TRANSFER: `${BASE_URL}${VERSION.v1}/cti/calls/conference/transfer?provider=convox`,\r\n\tTRANSFER_CALL: `${BASE_URL}${VERSION.v1}/cti/calls/transfer?provider=convox`,\r\n\r\n\tAGENTS_LIST: `${BASE_URL}${VERSION.v1}/cti/users`,\r\n\tPROCESS_LIST: `${BASE_URL}${VERSION.v1}/cti/processes-list`,\r\n\tBREAKS_LIST: `${BASE_URL}${VERSION.v1}/cti/breaks`,\r\n\tTRANSFER_TO_DETAILS: `${BASE_URL}${VERSION.v1}/cti/transfer-to-details?provider=convox`,\r\n\tSEND_NOTIFICATIONS: `${BASE_URL}${VERSION.v1}/cti/notifications/send`,\r\n\r\n\tCALL_HISTORY: `${BASE_URL}${VERSION.v1}/dashboard/call-history`,\r\n\tSENTIMENTAL_ANALYSIS: `${BASE_URL}${VERSION.v1}/users/get_sentiment_analysis`,\r\n\tDISPOSITIONS: `${BASE_URL}${VERSION.v1}/cti/calls/dispositions`,\r\n\tHOSPITALS_SERVICES: `${BASE_URL}${VERSION.v1}/cti/hospital/services`,\r\n\tBLIEND_TRANSFER: `${BASE_URL}${VERSION.v1}/cti/calls/blind_transfer?provider=convox`,\r\n};\r\n\r\n// export const WS_END_POINT = {\r\n// \tWS: `${WS_BASE_URL}${VERSION.v1}/cti/ws`,\r\n// };\r\n\r\nexport const STORAGE_KEY = \"call-control-sdk-state\";\r\n","import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT, STORAGE_KEY } from \"../services/endPoint\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nimport axiosInstance from \"../services/axios\";\r\nimport { getItem, removeItem } from \"@react-solutions/vault\";\r\nimport { USB_LIGHT_ALL_OFF, USB_LIGHT_REQUEST } from \"../services/usbLight\";\r\n\r\nexport interface LogoutPayload {\r\n\taction: string;\r\n\tuserId: string;\r\n}\r\n\r\nexport const useLogout = () => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst [success, setSuccess] = useState(false);\r\n\r\n\tconst [isError, setIsError] = useState(false);\r\n\r\n\tconst [error, setError] = useState(null);\r\n\r\n\tconst [data, setData] = useState(null);\r\n\r\n\tconst handleLogout = useCallback(async () => {\r\n\t\tUSB_LIGHT_REQUEST(USB_LIGHT_ALL_OFF());\r\n\t\tconst state = getItem(STORAGE_KEY) as any;\r\n\r\n\t\tsetLoading(true);\r\n\r\n\t\tconst payload: LogoutPayload = {\r\n\t\t\taction: \"LOGOUTUSER\",\r\n\t\t\tuserId: state.agentId || \"\",\r\n\t\t};\r\n\r\n\t\t// return axiosInstance\r\n\t\t// \t.post(END_POINT.LOGOUT, payload)\r\n\t\t// \t.then((res) => {\r\n\t\t\t\tsdkStateManager.clearStorageAndReset();\r\n\r\n\t\t\t\tremoveItem(STORAGE_KEY);\r\n\r\n\t\t\t\t// setData(res?.data);\r\n\r\n\t\t\t\tsetSuccess(true);\r\n\r\n\t\t\t\t// return res?.data;\r\n\t\t\t// })\r\n\t\t\t// .catch((err) => {\r\n\t\t\t// \tsetIsError(true);\r\n\r\n\t\t\t// \tsetError(err);\r\n\r\n\t\t\t// \t// clearing the stored agent data when trying to logout when user not logged in\r\n\t\t\t// \tif (err?.response?.data?.data?.clearAgentData) {\r\n\t\t\t// \t\tsdkStateManager.clearStorageAndReset();\r\n\t\t\t// \t\tremoveItem(STORAGE_KEY);\r\n\t\t\t// \t}\r\n\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\tlogout: handleLogout,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError: isError,\r\n\t\terror: error,\r\n\t\tdata: data,\r\n\t};\r\n};\r\n","const USB_LIGHT_BASE_URL = `http://localhost:5000`;\r\n\r\nexport const USB_LIGHT_ON = (color: \"red\" | \"green\" | \"yellow\") => {\r\n\treturn `${USB_LIGHT_BASE_URL}/light/${color}/on`;\r\n};\r\n\r\nexport const USB_LIGHT_FLASH = (color: \"red\" | \"green\" | \"yellow\", number: 1 | 2 | 3) => {\r\n\treturn `${USB_LIGHT_BASE_URL}/light/${color}/flash${number}`;\r\n};\r\n\r\nexport const USB_LIGHT_OFF = () => {\r\n\treturn `${USB_LIGHT_BASE_URL}/light/off`;\r\n};\r\n\r\nexport const USB_BUZZER_ON = () => {\r\n\treturn `${USB_LIGHT_BASE_URL}/buzzer/on`;\r\n};\r\n\r\nexport const USB_BUZZER_OFF = () => {\r\n\treturn `${USB_LIGHT_BASE_URL}/buzzer/off`;\r\n};\r\n\r\nexport const USB_LIGHT_ALL_OFF = () => {\r\n\treturn `${USB_LIGHT_BASE_URL}/all/off`;\r\n};\r\n\r\nexport const USB_LIGHT_STATUS = () => {\r\n\treturn `${USB_LIGHT_BASE_URL}/status`;\r\n};\r\n\r\nexport const USB_LIGHT_REQUEST = (url: string, init?: RequestInit) => {\r\n\treturn fetch(url, init);\r\n};\r\n","import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT, STORAGE_KEY } from \"../services/endPoint\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nimport axiosInstance from \"../services/axios\";\r\nimport { getItem } from \"@react-solutions/vault\";\r\n\r\nexport interface EndCallPayload {\r\n\taction: string;\r\n\tdisposition: string;\r\n\tuserId: string;\r\n\tprocessid: string;\r\n\tmobile_number: string;\r\n\tset_followUp: string;\r\n\tcallback_date: string;\r\n\tcallback_hrs: string;\r\n\tcallback_mins: string;\r\n\trefno?: string;\r\n\tselected_break?: boolean;\r\n}\r\n\r\nexport const useEndCall = () => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst [success, setSuccess] = useState(false);\r\n\r\n\tconst [isError, setIsError] = useState(false);\r\n\r\n\tconst [error, setError] = useState(null);\r\n\r\n\tconst [data, setData] = useState(null);\r\n\r\n\tconst handleEndCall = useCallback(\r\n\t\tasync (data: {\r\n\t\t\tdisposition?: string;\r\n\t\t\tfollowUp?: string;\r\n\t\t\tcallbackDate?: string;\r\n\t\t\tcallbackHrs?: string;\r\n\t\t\tcallbackMins?: string;\r\n\t\t\tisBreak?: boolean;\r\n\t\t\tpatientLog?: any;\r\n\t\t}) => {\r\n\t\t\tconst state = getItem(STORAGE_KEY) as any;\r\n\r\n\t\t\tsetLoading(true);\r\n\r\n\t\t\tconst payload = {\r\n\t\t\t\taction: \"ENDCALL\",\r\n\t\t\t\tuserId: state?.agentId,\r\n\t\t\t\tprocessid: state?.process?.process_id?.toString() ?? \"\",\r\n\t\t\t\tprocess_name: state?.process?.process_name ?? \"\",\r\n\t\t\t\tcallreferenceid: state?.callData?.convox_id ?? \"\",\r\n\t\t\t\tmobile_number: state?.callData?.phone_number ?? \"\",\r\n\r\n\t\t\t\tdisposition: data?.disposition ?? \"RES\",\r\n\t\t\t\tset_followUp: data?.followUp ?? \"N\",\r\n\t\t\t\tcallback_date: data?.callbackDate ?? \"\",\r\n\t\t\t\tcallback_hrs: data?.callbackHrs ?? \"\",\r\n\t\t\t\tcallback_mins: data?.callbackMins ?? \"\",\r\n\t\t\t\tendcall_type: \"CLOSE\",\r\n\r\n\t\t\t\tpatient_enquiry: data?.patientLog ?? null,\r\n\t\t\t};\r\n\r\n\t\t\treturn axiosInstance\r\n\t\t\t\t.post(END_POINT.END_CALL, payload, {\r\n\t\t\t\t\tparams: {\r\n\t\t\t\t\t\tisBreak: data?.isBreak ?? false,\r\n\t\t\t\t\t},\r\n\t\t\t\t})\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\t\tsdkStateManager.endCall();\r\n\r\n\t\t\t\t\tsetData(res?.data);\r\n\r\n\t\t\t\t\tsetSuccess(true);\r\n\r\n\t\t\t\t\treturn res?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tsetIsError(true);\r\n\r\n\t\t\t\t\tsetError(err);\r\n\r\n\t\t\t\t\treturn err?.response?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tsetLoading(false);\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[]\r\n\t);\r\n\r\n\treturn {\r\n\t\thandleEndCall,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError: isError,\r\n\t\terror: error,\r\n\t\tdata: data,\r\n\t};\r\n};\r\n","import axios, { AxiosInstance, AxiosResponse, AxiosError, InternalAxiosRequestConfig } from \"axios\";\r\nimport { BASE_URL } from \"./endPoint\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\nconst DEFAULT_TOKEN = sdkStateManager.getSdkAuthToken() ?? \"\";\r\n\r\nconst REQUEST_TIMEOUT = 60000;\r\n\r\nfunction getAuthToken(): string {\r\n\treturn sdkStateManager.getSdkAuthToken() ?? \"\";\r\n}\r\n\r\nfunction createAxiosInstance(): AxiosInstance {\r\n\tconst instance = axios.create({\r\n\t\tbaseURL: sdkStateManager.getState()?.urlConfig?.baseURL,\r\n\t\theaders: {\r\n\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\tAccept: \"application/json\",\r\n\t\t\t\"x-tenant-id\": sdkStateManager.getCredentials()?.tenantId ?? \"\",\r\n\t\t\t\"x-api-key\": sdkStateManager.getCredentials()?.apiKey ?? \"\",\r\n\t\t\tAuthorization: `${DEFAULT_TOKEN}`,\r\n\t\t},\r\n\t\ttimeout: REQUEST_TIMEOUT,\r\n\t\twithCredentials: false,\r\n\t});\r\n\r\n\tinstance.interceptors.request.use(\r\n\t\t(config: InternalAxiosRequestConfig) => {\r\n\t\t\tconst token = getAuthToken();\r\n\r\n\t\t\tif (token && config.headers) {\r\n\t\t\t\tconfig.headers.Authorization = `${token}`;\r\n\t\t\t}\r\n\r\n\t\t\t(config as any).metadata = { startTime: new Date().getTime() };\r\n\r\n\t\t\treturn config;\r\n\t\t},\r\n\t\t(error: AxiosError) => {\r\n\t\t\tconsole.error(\"Request interceptor error:\", error);\r\n\t\t\treturn Promise.reject(error);\r\n\t\t}\r\n\t);\r\n\r\n\tinstance.interceptors.response.use(\r\n\t\t(response: AxiosResponse) => {\r\n\t\t\treturn response;\r\n\t\t},\r\n\t\tasync (error: AxiosError) => {\r\n\t\t\tconst originalRequest = error.config as InternalAxiosRequestConfig & { _retry?: boolean };\r\n\r\n\t\t\tif (error.response?.status === 401 && !originalRequest._retry) {\r\n\t\t\t\tsdkStateManager.setInitCheck();\r\n\t\t\t\tconsole.warn(\"Unauthorized request, attempting retry...\");\r\n\t\t\t}\r\n\r\n\t\t\tif (!error.response) {\r\n\t\t\t\tconsole.error(\"Network error:\", error.message);\r\n\t\t\t\terror.message = \"Network error: Please check your internet connection\";\r\n\t\t\t}\r\n\r\n\t\t\tif (error.response && error.response.status >= 500) {\r\n\t\t\t\tconsole.error(\"Server error:\", error.response.status, error.response.data);\r\n\t\t\t\terror.message = \"Server error: Please try again later\";\r\n\t\t\t}\r\n\r\n\t\t\treturn Promise.reject(error);\r\n\t\t}\r\n\t);\r\n\r\n\treturn instance;\r\n}\r\n\r\nconst axiosInstance: AxiosInstance = createAxiosInstance();\r\n\r\nexport default axiosInstance;\r\n","import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT, STORAGE_KEY } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport { getItem } from \"@react-solutions/vault\";\r\n\r\nexport interface StartCallPayload {\r\n\tmobileNumber: string; // 📱 Phone number to call\r\n}\r\n\r\nexport const useClickToCall = () => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst [success, setSuccess] = useState(false);\r\n\r\n\tconst [isError, setIsError] = useState(false);\r\n\r\n\tconst [error, setError] = useState(null);\r\n\r\n\tconst [data, setData] = useState(null);\r\n\r\n\tconst handleStartCall = useCallback(async (data: StartCallPayload) => {\r\n\t\tconst state = getItem(STORAGE_KEY) as any;\r\n\r\n\t\tsetLoading(true);\r\n\r\n\t\tif (state?.callData?.status === \"IDLE\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\taction: \"CALL\",\r\n\t\t\t\tuserId: state?.agentId,\r\n\t\t\t\tphone_number: data?.mobileNumber,\r\n\t\t\t};\r\n\r\n\t\t\treturn axiosInstance\r\n\t\t\t\t.post(END_POINT.CLICK_TO_CALL, payload)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\t\tsetData(res?.data);\r\n\r\n\t\t\t\t\tsetSuccess(true);\r\n\r\n\t\t\t\t\treturn res?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tsetIsError(true);\r\n\r\n\t\t\t\t\tsetError(err);\r\n\r\n\t\t\t\t\treturn err?.response?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tsetLoading(false);\r\n\t\t\t\t});\r\n\t\t} else if (state?.callData?.status === \"ONCALL\") {\r\n\t\t\tconst line_used = state?.conferenceLine\r\n\t\t\t\t?.filter((each: any) => each.line !== 1)\r\n\t\t\t\t?.find((each: any) => each.status === \"IDLE\" && !each?.isCallStart);\r\n\r\n\t\t\tconst payload = {\r\n\t\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\t\toperation: `CALL${line_used.line}`,\r\n\t\t\t\tline_used: String(line_used.line),\r\n\t\t\t\tthirdparty_no: data?.mobileNumber,\r\n\t\t\t\tuserid: state.callData?.agent_id ?? \"\",\r\n\t\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t\t};\r\n\r\n\t\t\treturn axiosInstance\r\n\t\t\t\t.post(END_POINT.CONFERENCE_CALL, payload)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tsetData(res?.data);\r\n\r\n\t\t\t\t\tsetSuccess(true);\r\n\r\n\t\t\t\t\t// sdkStateManager.setConferenceLine({\r\n\t\t\t\t\t// \t...line_used,\r\n\t\t\t\t\t// \tisCallStart: true,\r\n\t\t\t\t\t// \tstatus: \"ONCALL\",\r\n\t\t\t\t\t// \tphone: data?.mobileNumber,\r\n\t\t\t\t\t// });\r\n\r\n\t\t\t\t\tsdkStateManager.setOpenConferenceDialog(true);\r\n\r\n\t\t\t\t\treturn res?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tsetIsError(true);\r\n\r\n\t\t\t\t\tsetError(err);\r\n\r\n\t\t\t\t\treturn err?.response?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tsetLoading(false);\r\n\t\t\t\t});\r\n\t\t} else {\r\n\t\t\talert(\"Agent is not ready\");\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\thandleStartCall,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError: isError,\r\n\t\terror: error,\r\n\t\tdata: data,\r\n\t};\r\n};\r\n","import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport type { CallData } from \"../../types\";\r\n\r\nexport const useGetCallerData = (): CallData => {\r\n\tconst { process_id, process_name, status, phone_number, agent_id, convox_id } =\r\n\t\tsdkStateManager.getState().callData;\r\n\tconst initialCallData = {\r\n\t\tphone_number,\r\n\t\tstatus,\r\n\t\tcallReferenceId: convox_id,\r\n\t\tagent_id,\r\n\t\tprocess_id,\r\n\t\tprocess_name,\r\n\t};\r\n\tconst [callData, setCallData] = useState<CallData>(initialCallData);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst unsubscribe = sdkStateManager.subscribe(() => {\r\n\t\t\tconst { process_id, process_name, status, phone_number, agent_id, convox_id } =\r\n\t\t\t\tsdkStateManager.getState().callData;\r\n\t\t\tconst currentCallData = {\r\n\t\t\t\tphone_number,\r\n\t\t\t\tstatus,\r\n\t\t\t\tcallReferenceId: convox_id,\r\n\t\t\t\tagent_id,\r\n\t\t\t\tprocess_id,\r\n\t\t\t\tprocess_name,\r\n\t\t\t};\r\n\t\t\tsetCallData(currentCallData);\r\n\t\t});\r\n\r\n\t\treturn unsubscribe;\r\n\t}, []);\r\n\r\n\treturn callData;\r\n};\r\n","import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nexport const useGetAuthorizationToken = () => {\r\n\tconst [token, setToken] = useState<string | undefined>(sdkStateManager.getSdkAuthToken());\r\n\r\n\tuseEffect(() => {\r\n\t\tconst unsubscribe = sdkStateManager.subscribe(() => {\r\n\t\t\tsetToken(sdkStateManager.getSdkAuthToken());\r\n\t\t});\r\n\r\n\t\treturn unsubscribe;\r\n\t}, []);\r\n\r\n\treturn token;\r\n};\r\n","import { memo, useCallback } from \"react\";\r\nimport type { CallControlPanelProps } from \"../../types\";\r\nimport { CallControls } from \"./callControls\";\r\nimport { SDKProvider } from \"./SDKProvider\";\r\n\r\nexport const CallControlPanel = memo<CallControlPanelProps>(({ onDataChange }) => {\r\n\tconst handleDataChange = useCallback(\r\n\t\t(data: any) => {\r\n\t\t\ttry {\r\n\t\t\t\tif (onDataChange && typeof onDataChange === \"function\") {\r\n\t\t\t\t\tonDataChange(data);\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {\r\n\t\t\t\tconsole.error(\"Error in CallControlPanel data change handler:\", error);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onDataChange]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<SDKProvider>\r\n\t\t\t<CallControls onDataChange={handleDataChange} />\r\n\t\t</SDKProvider>\r\n\t);\r\n});\r\n\r\nCallControlPanel.displayName = \"CallControlPanel\";\r\n","import {\r\n\tCallEnd,\r\n\tClose,\r\n\tDragIndicator,\r\n\tGroup,\r\n\tKeyboardArrowDown,\r\n\tLayers,\r\n\tMic,\r\n\tMicOff,\r\n\tPause,\r\n\tPending,\r\n\tPhone,\r\n\tPlayArrow,\r\n\tSupportAgent,\r\n\tTransferWithinAStation,\r\n\tUpcoming,\r\n\tWifiCalling3,\r\n\tSendRounded,\r\n\tSmsSharp,\r\n\tMoreVert,\r\n} from \"@mui/icons-material\";\r\nimport {\r\n\tBox,\r\n\tButton,\r\n\tChip,\r\n\tCircularProgress,\r\n\tFade,\r\n\tIconButton,\r\n\tMenu,\r\n\tMenuItem,\r\n\tPaper,\r\n\tTextField,\r\n\tTooltip,\r\n\tTypography,\r\n\tuseTheme,\r\n} from \"@mui/material\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\n\r\nimport {\r\n\tCallHistoryDialog,\r\n\tCallTransferDialog,\r\n\tConferenceDialog,\r\n\tEndCallDispositionDialog,\r\n\tProcessorListDialog,\r\n} from \"./dialog\";\r\n\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\nimport { useDraggable } from \"../hooks/useDraggable\";\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\n\r\nimport { END_POINT, STORAGE_KEY } from \"../services/endPoint\";\r\nimport { usePostRequest } from \"../services/request\";\r\nimport axiosInstance from \"../services/axios\";\r\nimport { useToast } from \"../services/toastMessage\";\r\nimport { createMicController, MicController } from \"../services/micController\";\r\nimport useStyles from \"./styles\";\r\n\r\nimport { CallControlPanelProps, CallStatus } from \"../../types\";\r\n\r\nimport { createAudioElement, cleanupAudioResources } from \"../utils/audioLoader\";\r\nimport { getItem } from \"@react-solutions/vault\";\r\nimport { USB_LIGHT_FLASH, USB_LIGHT_ON, USB_LIGHT_REQUEST } from \"../services/usbLight\";\r\n\r\nconst getCombineConfrenceData = (localState: any, apiData: any) => {\r\n\tconst localConfrenceData = localState?.conferenceLine;\r\n\tconst apiConferenceData = apiData?.conferencestatus;\r\n\tconst updatedConferenceData = localConfrenceData.map((item: any) => {\r\n\t\tif (item?.line === 1) {\r\n\t\t\tconst statusKey = `line_${item.line}_status`;\r\n\t\t\treturn {\r\n\t\t\t\t...item,\r\n\t\t\t\tline: 1,\r\n\t\t\t\tstatus: apiConferenceData[statusKey] ?? localState?.callData?.status,\r\n\t\t\t\tphone: localState?.callData?.phone_number ?? \"\",\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tconst statusKey = `line_${item.line}_status`;\r\n\t\t\tconst phoneKey = `line_${item.line}_phonenumber`;\r\n\t\t\treturn {\r\n\t\t\t\t...item,\r\n\t\t\t\tstatus: apiConferenceData[statusKey] ?? item.status,\r\n\t\t\t\tphone:\r\n\t\t\t\t\tapiConferenceData[phoneKey] === null || apiConferenceData[phoneKey] === \"0\" ?\r\n\t\t\t\t\t\titem.phone\r\n\t\t\t\t\t:\tapiConferenceData[phoneKey],\r\n\t\t\t};\r\n\t\t}\r\n\t});\r\n\r\n\treturn updatedConferenceData;\r\n};\r\n\r\nconst formatDuration = (seconds: number): string => {\r\n\tconst mins = Math.floor(seconds / 60);\r\n\tconst secs = seconds % 60;\r\n\treturn `${mins.toString().padStart(2, \"0\")}:${secs.toString().padStart(2, \"0\")}`;\r\n};\r\n\r\nexport function CallControls({ onDataChange }: CallControlPanelProps) {\r\n\tconst theme = useTheme();\r\n\tconst state = useSDKState();\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst { disabled, enabled, outlined } = useStyles({\r\n\t\tdisabled: state.sdkConfig?.disabled || {},\r\n\t\tenabled: state.sdkConfig?.enabled || {},\r\n\t\toutlined: state.sdkConfig?.outlined || {},\r\n\t});\r\n\r\n\tconst micRef = useRef<MicController | null>(null);\r\n\tconst webSocketRef = useRef<WebSocket | null>(null);\r\n\tconst audioRef = useRef<HTMLAudioElement | null>(null);\r\n\tconst reconnectTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\tconst pingIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\r\n\tconst reconnectAttemptsRef = useRef<number>(0);\r\n\tconst hasFlashedRef = useRef(false);\r\n\tconst lastEventTimeRef = useRef<string | null>(null);\r\n\r\n\tconst maxReconnectAttempts = 60;\r\n\tconst baseReconnectDelay = 2000;\r\n\tconst maxReconnectDelay = 30000;\r\n\r\n\tconst [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [statusAnchorEl, setStatusAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [dialerAnchorEl, setDialerAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [ambulanceAnchorEl, setAmbulanceAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [moreOptionsAnchorEl, setMoreOptionsAnchorEl] = useState<null | HTMLElement>(null);\r\n\r\n\tconst [showIframe, setShowIframe] = useState<boolean>(true);\r\n\tconst [openCallDisposition, setOpenCallDisposition] = useState<boolean>(false);\r\n\tconst [openProcessorDialog, setOpenProcessorDialog] = useState<boolean>(false);\r\n\tconst [openCallHistoryDialog, setOpenCallHistoryDialog] = useState<boolean>(false);\r\n\r\n\tconst [processList, setProcessList] = useState<\r\n\t\t| {\r\n\t\t\t\tprocess_id: number;\r\n\t\t\t\tprocess_name: string;\r\n\t\t }[]\r\n\t\t| null\r\n\t>(null);\r\n\r\n\tconst [breaksList, setBreaksList] = useState<\r\n\t\t| {\r\n\t\t\t\ttype: string;\r\n\t\t\t\tduration: string;\r\n\t\t\t\tdescription: string;\r\n\t\t\t\tactive: boolean;\r\n\t\t }[]\r\n\t\t| null\r\n\t>(null);\r\n\r\n\tconst [phoneNumber, setPhoneNumber] = useState<string>(\"\");\r\n\tconst [callDuration, setCallDuration] = useState<number>(0);\r\n\tconst [callWrapuptime, setCallWrapuptime] = useState<number | null>(null);\r\n\r\n\tconst { position, isDragging, dragRef, handleMouseDown, handleTouchStart } = useDraggable(\r\n\t\tstate.controlPanelPosition,\r\n\t\t(newPosition) => sdkStateManager.setControlPanelPosition(newPosition)\r\n\t);\r\n\r\n\tconst {\r\n\t\tposition: iframePosition,\r\n\t\tisDragging: iframeIsDragging,\r\n\t\tdragRef: iframeDragRef,\r\n\t\thandleMouseDown: iframeHandleMouseDown,\r\n\t\thandleTouchStart: iframeHandleTouchStart,\r\n\t} = useDraggable(state.iframePosition, (newPosition) =>\r\n\t\tsdkStateManager.setIframePosition(newPosition)\r\n\t);\r\n\r\n\tconst [clickToCall, { isLoading: clickToCallLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tphone_number: string;\r\n\t\tuserId: string;\r\n\t}>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsetPhoneNumber(\"\");\r\n\t\t\tsetDialerAnchorEl(null);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [holdOrUnHold, { isLoading: holdOrUnHoldLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tuserId: string;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst [muteOrUnMute, { isLoading: muteOrUnMuteLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tuserId: string;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst [readyAgentStatus, { isLoading: agentReadyLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\trefno?: string;\r\n\t\tuserId: string;\r\n\t}>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setAgentStatus(\"\");\r\n\t\t},\r\n\t});\r\n\r\n\tconst [updateAgentStatus, { isLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tbreak_type: string;\r\n\t\tuserId: string;\r\n\t}>();\r\n\r\n\tconst [sendNotification] = usePostRequest<{\r\n\t\tphone_number: string;\r\n\t\ttype: string;\r\n\t}>();\r\n\r\n\tconst [endCall, { isLoading: endCallLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tdisposition: string;\r\n\t\tuserId: string;\r\n\t\tprocessid: string;\r\n\t\tmobile_number: string;\r\n\t\tset_followUp: string;\r\n\t\tcallback_date: string;\r\n\t\tcallback_hrs: string;\r\n\t\tcallback_mins: string;\r\n\t\trefno?: string;\r\n\t}>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.endCall();\r\n\t\t\tsetOpenCallDisposition(false);\r\n\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t},\r\n\t});\r\n\r\n\tconst handleCloseQueueCounts = () => {\r\n\t\tsetAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleOpenDialer = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetShowIframe(true);\r\n\t\tsetDialerAnchorEl(event.currentTarget);\r\n\t};\r\n\tconst handleOpenAbulanceServices = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetAmbulanceAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleOpenMoreOptions = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetMoreOptionsAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleCloseDialer = () => {\r\n\t\tsetDialerAnchorEl(null);\r\n\t};\r\n\tconst handleCloseAmbulance = () => {\r\n\t\tsetAmbulanceAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleCloseMoreOptions = () => {\r\n\t\tsetMoreOptionsAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleOpenAgentStatus = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetStatusAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleCloseAgentStatus = () => {\r\n\t\tsetStatusAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleAgentReady = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: \"READYAGENT\",\r\n\t\t\tuserId: state.agentId,\r\n\t\t};\r\n\r\n\t\treadyAgentStatus(END_POINT.READY_AGENT, payload);\r\n\t};\r\n\r\n\tconst handleUpdateAgentStatus = (status: string) => {\r\n\t\tsetStatusAnchorEl(null);\r\n\t\tconst payload = {\r\n\t\t\taction: \"AGENTBREAK\",\r\n\t\t\tbreak_type: status,\r\n\t\t\tuserId: state.agentId,\r\n\t\t};\r\n\t\tupdateAgentStatus(END_POINT.UPDATE_AGENT_BREAK, payload).then(() => {\r\n\t\t\tsdkStateManager.setAgentStatus(status);\r\n\t\t});\r\n\t};\r\n\r\n\tconst handleStartCall = (number: string) => {\r\n\t\tif (number.length !== 10) {\r\n\t\t\tshowToast(\"Invalid phone number\", \"error\");\r\n\t\t} else if (!/^\\d+$/.test(number)) {\r\n\t\t\tshowToast(\"Invalid phone number\", \"error\");\r\n\t\t} else {\r\n\t\t\tconst payload = {\r\n\t\t\t\taction: \"CALL\",\r\n\t\t\t\tphone_number: number,\r\n\t\t\t\tuserId: state.agentId,\r\n\t\t\t};\r\n\r\n\t\t\tclickToCall(END_POINT.CLICK_TO_CALL, payload);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleHoldToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.hold === 1 ? CallStatus.UNHOLD : CallStatus.HOLD,\r\n\t\t\tuserId: state.agentId,\r\n\t\t};\r\n\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t};\r\n\r\n\tconst handleMuteToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.mute === 1 ? CallStatus.UNMUTE : CallStatus.MUTE,\r\n\t\t\tuserId: state.agentId,\r\n\t\t};\r\n\r\n\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t};\r\n\r\n\tconst handleEndCall = (data: {\r\n\t\tdisposition: { label: string; value: string };\r\n\t\tfollowUp: { label: string; value: string };\r\n\t\tcallbackDate: string;\r\n\t\tcallbackHrs: string;\r\n\t\tcallbackMins: string;\r\n\t\tselected_break?: boolean;\r\n\t}) => {\r\n\t\tconst payload = {\r\n\t\t\taction: \"ENDCALL\",\r\n\t\t\tuserId: state.agentId,\r\n\t\t\tprocessid: state.process?.process_id?.toString() ?? \"\",\r\n\t\t\tprocess_name: state.process?.process_name ?? \"\",\r\n\t\t\tcallreferenceid: state.callData?.convox_id ?? \"\",\r\n\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\r\n\t\t\tdisposition: data?.disposition?.value ?? \"\",\r\n\t\t\tset_followUp: data?.followUp?.value ?? \"\",\r\n\t\t\tcallback_date: data?.callbackDate ?? \"\",\r\n\t\t\tcallback_hrs: data?.callbackHrs ?? \"\",\r\n\t\t\tcallback_mins: data?.callbackMins ?? \"\",\r\n\t\t\tendcall_type: \"CLOSE\",\r\n\t\t};\r\n\t\tsetPhoneNumber(\"\");\r\n\t\tendCall(END_POINT.END_CALL, payload, {\r\n\t\t\tparams: {\r\n\t\t\t\tisBreak: data?.selected_break ?? false,\r\n\t\t\t},\r\n\t\t});\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tconst handleBeforeUnload = (e: BeforeUnloadEvent) => {\r\n\t\t\te.preventDefault();\r\n\t\t};\r\n\r\n\t\twindow.addEventListener(\"beforeunload\", handleBeforeUnload);\r\n\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener(\"beforeunload\", handleBeforeUnload);\r\n\t\t};\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst mic = createMicController();\r\n\t\tmicRef.current = mic;\r\n\r\n\t\tmic.start().catch((err) => {\r\n\t\t\tconsole.error(\"Failed to start mic:\", err);\r\n\t\t});\r\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\r\n\t\t\tconst fullState = getItem(STORAGE_KEY) as any;\r\n\t\t\tconst key = event.key?.toLowerCase();\r\n\r\n\t\t\tif (!event.altKey || fullState?.callData?.status !== CallStatus.ONCALL) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"m\" && String(fullState?.callData?.mute) === \"0\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tmicRef.current?.mute();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.MUTE,\r\n\t\t\t\t\tuserId: fullState.agentId,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"u\" && String(fullState?.callData?.mute) === \"1\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.UNMUTE,\r\n\t\t\t\t\tuserId: fullState.agentId,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t\t\t\tmicRef.current?.unmute();\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"h\" && String(fullState?.callData?.hold) === \"0\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.HOLD,\r\n\t\t\t\t\tuserId: fullState.agentId,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"r\" && String(fullState?.callData?.hold) === \"1\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.UNHOLD,\r\n\t\t\t\t\tuserId: fullState.agentId,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\twindow.addEventListener(\"keydown\", handleKeyDown);\r\n\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener(\"keydown\", handleKeyDown);\r\n\t\t};\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tlet interval: ReturnType<typeof setInterval>;\r\n\t\tlet wrapUpinterval: ReturnType<typeof setInterval>;\r\n\r\n\t\tif (state.callData.status && state.callData.status === CallStatus.ONCALL) {\r\n\t\t\tinterval = setInterval(() => {\r\n\t\t\t\tconst elapsed = Math.floor((Date.now() - state.callStartTime!) / 1000);\r\n\t\t\t\tsetCallDuration(elapsed);\r\n\t\t\t}, 1000);\r\n\t\t} else {\r\n\t\t\tsetCallDuration(0);\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tstate.callData.status &&\r\n\t\t\tstate.callData.status === CallStatus.WRAPUP &&\r\n\t\t\tcallWrapuptime !== null\r\n\t\t) {\r\n\t\t\twrapUpinterval = setInterval(() => {\r\n\t\t\t\tsetCallWrapuptime((prevTime) => {\r\n\t\t\t\t\tif (prevTime === null || prevTime <= 1) {\r\n\t\t\t\t\t\tclearInterval(wrapUpinterval);\r\n\t\t\t\t\t\thandleEndCall({\r\n\t\t\t\t\t\t\tdisposition: { label: \"Resolved\", value: \"AUTO_WRAPUP\" },\r\n\t\t\t\t\t\t\tfollowUp: { label: \"No\", value: \"N\" },\r\n\t\t\t\t\t\t\tcallbackDate: \"\",\r\n\t\t\t\t\t\t\tcallbackHrs: \"\",\r\n\t\t\t\t\t\t\tcallbackMins: \"\",\r\n\t\t\t\t\t\t\tselected_break: false,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn prevTime - 1;\r\n\t\t\t\t});\r\n\t\t\t}, 1000);\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (interval) clearInterval(interval);\r\n\t\t\tif (wrapUpinterval) clearInterval(wrapUpinterval);\r\n\t\t};\r\n\t}, [state.callData.status]);\r\n\r\n\tuseEffect(() => {\r\n\t\tcreateAudioElement()\r\n\t\t\t.then((audio) => {\r\n\t\t\t\taudioRef.current = audio;\r\n\t\t\t})\r\n\t\t\t.catch((error) => {\r\n\t\t\t\tconsole.error(\"Failed to load audio element:\", error);\r\n\t\t\t});\r\n\r\n\t\treturn () => {\r\n\t\t\tif (audioRef.current) {\r\n\t\t\t\taudioRef.current.pause();\r\n\t\t\t\taudioRef.current.currentTime = 0;\r\n\t\t\t\taudioRef.current.src = \"\"; // Clear source\r\n\t\t\t\taudioRef.current = null;\r\n\t\t\t}\r\n\t\t\t// Cleanup blob URLs\r\n\t\t\tcleanupAudioResources();\r\n\t\t};\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onDataChange && state.callData) {\r\n\t\t\tconst { process_id, process_name, status, phone_number, agent_id, convox_id } =\r\n\t\t\t\tstate.callData;\r\n\t\t\tconst callData = {\r\n\t\t\t\tphone_number,\r\n\t\t\t\tstatus,\r\n\t\t\t\tcallReferenceId: convox_id,\r\n\t\t\t\tagent_id,\r\n\t\t\t\tprocess_id,\r\n\t\t\t\tprocess_name,\r\n\t\t\t};\r\n\t\t\tonDataChange(callData);\r\n\t\t}\r\n\t}, [state.callData, onDataChange]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (state.agentId) {\r\n\t\t\taxiosInstance\r\n\t\t\t\t.post(END_POINT.PROCESS_LIST, {\r\n\t\t\t\t\tuserId: state.agentId,\r\n\t\t\t\t\taction: \"GETAGENTPROCESSLIST\",\r\n\t\t\t\t\trefno: \"1234221233\",\r\n\t\t\t\t})\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\t// if (res && res.data?.data && res?.data?.data?.length > 1) {\r\n\t\t\t\t\t// \tsetProcessList(res.data.data);\r\n\t\t\t\t\t// \tsetOpenProcessorDialog(true);\r\n\t\t\t\t\t// } else {\r\n\t\t\t\t\t\tconst data = {\r\n\t\t\t\t\t\t\"process_id\": 101,\r\n\t\t\t\t\t\t\"process_name\": \"ConVoxProcess\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsetProcessList([data]);\r\n\t\t\t\t\t\tsdkStateManager.setProcess(data);\r\n\t\t\t\t\t\t// setOpenProcessorDialog(false);\r\n\t\t\t\t\t// }\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tshowToast(err.response.data.message, \"error\");\r\n\t\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.get(END_POINT.BREAKS_LIST)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res && res.data?.data && res?.data?.data?.length) {\r\n\t\t\t\t\t\tsetBreaksList(res.data.data);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tshowToast(err.response.data.message, \"error\");\r\n\t\t\t\t});\r\n\t\t}\r\n\t}, [state.agentId]);\r\n\r\n\tconst connectWebSocket = () => {\r\n\t\tif (!state.agentId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (reconnectTimeoutRef.current) {\r\n\t\t\tclearTimeout(reconnectTimeoutRef.current);\r\n\t\t\treconnectTimeoutRef.current = null;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\twebSocketRef.current = new WebSocket(`${state.urlConfig?.webSocketURL}?agent_id=${state.urlConfig?.id}&token=${state.authorization?.accessToken}`);\r\n\r\n\t\t\twebSocketRef.current.onopen = () => {\r\n\t\t\t\tconsole.log(\"🌐 WebSocket connection established\");\r\n\t\t\t\treconnectAttemptsRef.current = 0;\r\n\r\n\t\t\t\tif (pingIntervalRef.current) {\r\n\t\t\t\t\tclearInterval(pingIntervalRef.current);\r\n\t\t\t\t}\r\n\t\t\t\tpingIntervalRef.current = setInterval(() => {\r\n\t\t\t\t\tif (webSocketRef.current && webSocketRef.current.readyState === WebSocket.OPEN) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\twebSocketRef.current.send(JSON.stringify({ type: \"ping\" }));\r\n\t\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\t\tconsole.error(\"Failed to send ping:\", error);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 30000);\r\n\t\t\t};\r\n\r\n\t\t\twebSocketRef.current.onmessage = (event) => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst data = JSON.parse(event.data);\r\n\r\n\t\t\t\t\tif (data.type === \"pong\") {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst sdkState = getItem(STORAGE_KEY) as any;\r\n\t\t\t\t\tconst confrence = getCombineConfrenceData(sdkState, data);\r\n\t\t\t\t\t// console.log( \"📊 Parsed JSON:\", data);\r\n\t\t\t\t\tconst callData = {\r\n\t\t\t\t\t\tagent_id: data?.agent_id,\r\n\t\t\t\t\t\tstatus: data?.status,\r\n\t\t\t\t\t\ttype: data?.type,\r\n\t\t\t\t\t\tevent_time: data?.event_time,\r\n\t\t\t\t\t\tphone_number: data?.phone_number,\r\n\t\t\t\t\t\tconvox_id: data?.convox_id,\r\n\t\t\t\t\t\tprocess_id: data?.process_id,\r\n\t\t\t\t\t\tprocess_name: data?.process_name,\r\n\t\t\t\t\t\thold: data?.hold,\r\n\t\t\t\t\t\tmute: data?.mute,\r\n\t\t\t\t\t\tmode: data?.mode,\r\n\t\t\t\t\t\tqueue_name: data?.queue_name,\r\n\t\t\t\t\t};\r\n\t\t\t\t\tsdkStateManager.updateCallData(callData);\r\n\t\t\t\t\tsdkStateManager.updateConferenceData([...confrence]);\r\n\r\n\t\t\t\t\tif ([CallStatus.RINGING, CallStatus.DIALING].includes(data.status as CallStatus)) {\r\n\t\t\t\t\t\tsetShowIframe(true);\r\n\t\t\t\t\t\tsetCallWrapuptime(sdkState?.sdkConfig?.auto_wrapup_time ?? null);\r\n\t\t\t\t\t\tsdkStateManager.updateConferenceData([\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 1,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 2,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 3,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 4,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 5,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t]);\r\n\r\n\t\t\t\t\t\tif (data?.mode !== \"manual\" && audioRef.current && state?.sdkConfig?.enableRingtone) {\r\n\t\t\t\t\t\t\taudioRef.current.play().catch((error) => {\r\n\t\t\t\t\t\t\t\tconsole.error(\"Failed to play ringtone:\", error);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (audioRef.current) {\r\n\t\t\t\t\t\t\taudioRef.current.pause();\r\n\t\t\t\t\t\t\taudioRef.current.currentTime = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (data.status === CallStatus.IDLE) {\r\n\t\t\t\t\t\tUSB_LIGHT_REQUEST(USB_LIGHT_ON(\"green\"));\r\n\t\t\t\t\t} else if (data?.mute !== 1 && data?.hold !== 1 && data.status === CallStatus.ONCALL) {\r\n\t\t\t\t\t\tUSB_LIGHT_REQUEST(USB_LIGHT_ON(\"red\"));\r\n\t\t\t\t\t\tsdkStateManager.startCall();\r\n\r\n\t\t\t\t\t\tif (!showIframe) {\r\n\t\t\t\t\t\t\tsetShowIframe(true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if ((data?.mute === 1 || data?.hold === 1) && data.status === CallStatus.ONCALL) {\r\n\t\t\t\t\t\tUSB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"red\", 1));\r\n\t\t\t\t\t} else if (data.status === CallStatus.BREAK) {\r\n\t\t\t\t\t\tconst breakTime = sdkState?.sdkConfig?.break_time;\r\n\t\t\t\t\t\tconst eventTime = data?.event_time ?? null;\r\n\r\n\t\t\t\t\t\tif (eventTime !== lastEventTimeRef.current) {\r\n\t\t\t\t\t\t\thasFlashedRef.current = false;\r\n\t\t\t\t\t\t\tlastEventTimeRef.current = eventTime;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlet isOverLimit = false;\r\n\t\t\t\t\t\tif (breakTime && eventTime) {\r\n\t\t\t\t\t\t\tconst differenceInMinutes =\r\n\t\t\t\t\t\t\t\t(new Date().getTime() - new Date(eventTime).getTime()) / 60000;\r\n\r\n\t\t\t\t\t\t\tif (Number(differenceInMinutes.toFixed(0)) >= Number(breakTime)) {\r\n\t\t\t\t\t\t\t\tisOverLimit = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (isOverLimit) {\r\n\t\t\t\t\t\t\tif (!hasFlashedRef.current) {\r\n\t\t\t\t\t\t\t\tUSB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"yellow\", 1));\r\n\t\t\t\t\t\t\t\thasFlashedRef.current = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tUSB_LIGHT_REQUEST(USB_LIGHT_ON(\"yellow\"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (data.status === CallStatus.WRAPUP) {\r\n\t\t\t\t\t\tUSB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"green\", 1));\r\n\t\t\t\t\t\tsdkStateManager.endCall();\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch {\r\n\t\t\t\t\tconsole.error(\"📨 Raw message:\", event.data);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\twebSocketRef.current.onclose = (event) => {\r\n\t\t\t\tif (pingIntervalRef.current) {\r\n\t\t\t\t\tclearInterval(pingIntervalRef.current);\r\n\t\t\t\t\tpingIntervalRef.current = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (event.code !== 1000 && reconnectAttemptsRef.current < maxReconnectAttempts) {\r\n\t\t\t\t\treconnectAttemptsRef.current += 1;\r\n\t\t\t\t\tconst delay = Math.min(\r\n\t\t\t\t\t\tbaseReconnectDelay * Math.pow(2, reconnectAttemptsRef.current - 1),\r\n\t\t\t\t\t\tmaxReconnectDelay\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tconsole.warn(\r\n\t\t\t\t\t\t`🔄 Attempting to reconnect WebSocket (attempt ${reconnectAttemptsRef.current}/${maxReconnectAttempts}) in ${delay}ms`\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\treconnectTimeoutRef.current = setTimeout(() => {\r\n\t\t\t\t\t\tconnectWebSocket();\r\n\t\t\t\t\t}, delay);\r\n\t\t\t\t} else if (reconnectAttemptsRef.current >= maxReconnectAttempts) {\r\n\t\t\t\t\tshowToast(\"WebSocket connection failed. Please refresh the page.\", \"error\");\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\twebSocketRef.current.onerror = (error) => {\r\n\t\t\t\tconsole.error(\"❌ WebSocket error:\", error);\r\n\t\t\t};\r\n\t\t} catch (error) {\r\n\t\t\tif (reconnectAttemptsRef.current < maxReconnectAttempts) {\r\n\t\t\t\treconnectAttemptsRef.current += 1;\r\n\t\t\t\tconst delay = Math.min(\r\n\t\t\t\t\tbaseReconnectDelay * Math.pow(2, reconnectAttemptsRef.current - 1),\r\n\t\t\t\t\tmaxReconnectDelay\r\n\t\t\t\t);\r\n\t\t\t\treconnectTimeoutRef.current = setTimeout(() => {\r\n\t\t\t\t\tconnectWebSocket();\r\n\t\t\t\t}, delay);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (state.agentId) {\r\n\t\t\tconnectWebSocket();\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (reconnectTimeoutRef.current) {\r\n\t\t\t\tclearTimeout(reconnectTimeoutRef.current);\r\n\t\t\t\treconnectTimeoutRef.current = null;\r\n\t\t\t}\r\n\t\t\tif (pingIntervalRef.current) {\r\n\t\t\t\tclearInterval(pingIntervalRef.current);\r\n\t\t\t\tpingIntervalRef.current = null;\r\n\t\t\t}\r\n\t\t\tif (webSocketRef.current) {\r\n\t\t\t\twebSocketRef.current.close(1000, \"Component unmounting\");\r\n\t\t\t\twebSocketRef.current = null;\r\n\t\t\t}\r\n\t\t\treconnectAttemptsRef.current = 0;\r\n\t\t};\r\n\t}, [state.agentId]);\r\n\r\n\tconst handleSendSMS = (data: any) => {\r\n\t\tsendNotification(END_POINT.SEND_NOTIFICATIONS, {\r\n\t\t\tphone_number: data?.phone_number ?? \"\",\r\n\t\t\ttype: \"ambulance\",\r\n\t\t});\r\n\t};\r\n\r\n\tif (!state.isInitialized || !state.process) {\r\n\t\treturn (\r\n\t\t\t<Box>\r\n\t\t\t\t{Boolean(openProcessorDialog) && (\r\n\t\t\t\t\t<ProcessorListDialog\r\n\t\t\t\t\t\tprocessList={processList}\r\n\t\t\t\t\t\topen={openProcessorDialog}\r\n\t\t\t\t\t\tsetOpen={setOpenProcessorDialog}\r\n\t\t\t\t\t\thandleSelectedProcessor={(data: { process_id: number; process_name: string }) => {\r\n\t\t\t\t\t\t\tsdkStateManager.setProcess(data);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Box>\r\n\t\t\t\t<Fade\r\n\t\t\t\t\tin={true}\r\n\t\t\t\t\ttimeout={300}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Paper\r\n\t\t\t\t\t\tref={state.sdkConfig?.isDraggable ? dragRef : null}\r\n\t\t\t\t\t\televation={\r\n\t\t\t\t\t\t\tisDragging ? 4\r\n\t\t\t\t\t\t\t: state.sdkConfig?.isDraggable ?\r\n\t\t\t\t\t\t\t\t1\r\n\t\t\t\t\t\t\t:\t0\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tposition: state.sdkConfig?.isDraggable ? \"fixed\" : \"relative\",\r\n\t\t\t\t\t\t\tleft: state.sdkConfig?.isDraggable ? position.x : \"auto\",\r\n\t\t\t\t\t\t\ttop: state.sdkConfig?.isDraggable ? position.y : \"auto\",\r\n\t\t\t\t\t\t\tdisplay: \"inline-block\",\r\n\t\t\t\t\t\t\twidth: \"auto\",\r\n\t\t\t\t\t\t\tflexShrink: 0,\r\n\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\r\n\t\t\t\t\t\t\tp: 0.5,\r\n\t\t\t\t\t\t\tborderRadius: 3,\r\n\t\t\t\t\t\t\tbgcolor: \"background.paper\",\r\n\t\t\t\t\t\t\tzIndex: state.sdkConfig?.isDraggable ? Number.MAX_SAFE_INTEGER : 0,\r\n\t\t\t\t\t\t\ttransition: theme.transitions.create([\"box-shadow\", \"transform\"], {\r\n\t\t\t\t\t\t\t\tduration: theme.transitions.duration.short,\r\n\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\tuserSelect: \"none\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\tmargin: \"0px 10px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{state.sdkConfig?.isDraggable && (\r\n\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\tcomponent=\"div\"\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tcursor: \"all-scroll\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tonMouseDown={handleMouseDown}\r\n\t\t\t\t\t\t\t\t\t\tonTouchStart={handleTouchStart}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<DragIndicator />{\" \"}\r\n\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{state.sdkConfig?.enableQueueName &&\r\n\t\t\t\t\t\t\t\t\tstate?.callData?.queue_name &&\r\n\t\t\t\t\t\t\t\t\tstate?.callData?.mode !== \"manual\" && (\r\n\t\t\t\t\t\t\t\t\t\t<Chip label={state?.callData?.queue_name} />\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{!state.sdkConfig?.disabledDialButton && (\r\n\t\t\t\t\t\t\t\t\t<Tooltip title=\"Dial\">\r\n\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t![\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus)\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenDialer(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={[\r\n\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status.toUpperCase() as CallStatus)}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<WifiCalling3\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor:\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status.toUpperCase() as CallStatus)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"action.selected\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t:\t\"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t<Box onClick={() => setShowIframe(true)}>\r\n\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tcolor: \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"40px\",\r\n\t\t\t\t\t\t\t\t\t\t\tmarginRight: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontSize: \"18px\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{state.callData.status === CallStatus.WRAPUP && callWrapuptime !== null ?\r\n\t\t\t\t\t\t\t\t\t\t\tformatDuration(callWrapuptime)\r\n\t\t\t\t\t\t\t\t\t\t:\tformatDuration(callDuration)}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"18px 0px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tlabel={\r\n\t\t\t\t\t\t\t\t\t\tisLoading || agentReadyLoading ?\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"bold\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"60px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"20px\" />\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t:\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"bold\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"60px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextAlign: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{state.callData?.status?.toUpperCase() ?? \"N/A\"}\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tonClick={handleOpenAgentStatus}\r\n\t\t\t\t\t\t\t\t\tdeleteIcon={<KeyboardArrowDown color=\"primary\" />}\r\n\t\t\t\t\t\t\t\t\tonDelete={handleOpenAgentStatus}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Tooltip title={\"Agent Ready\"}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t:\t\"contained\"\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleAgentReady();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tclasses={{\r\n\t\t\t\t\t\t\t\t\t\t\troot:\r\n\t\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t:\t\"enabled\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t...((\r\n\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\toutlined\r\n\t\t\t\t\t\t\t\t\t\t\t:\tenabled),\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tdisabled={agentReadyLoading}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<SupportAgent />\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.callData?.hold === 1 ? \"Resume\" : \"Hold\"}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"contained\"\r\n\t\t\t\t\t\t\t\t\t\t\t:\t\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\thandleHoldToggle();\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ ...enabled }\r\n\t\t\t\t\t\t\t\t\t\t\t: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ ...outlined }\r\n\t\t\t\t\t\t\t\t\t\t\t:\t{ ...disabled }\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t((state.callData?.status?.toUpperCase() as CallStatus) !==\r\n\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold !== 1) ||\r\n\t\t\t\t\t\t\t\t\t\t\tholdOrUnHoldLoading\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{holdOrUnHoldLoading ?\r\n\t\t\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: theme.palette.primary.main,\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t: state.callData?.hold === 1 ?\r\n\t\t\t\t\t\t\t\t\t\t\t<PlayArrow />\r\n\t\t\t\t\t\t\t\t\t\t:\t<Pause />}\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.callData?.mute === 1 ? \"Unmute\" : \"Mute\"}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"contained\"\r\n\t\t\t\t\t\t\t\t\t\t\t:\t\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\thandleMuteToggle();\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 ? { ...disabled }\r\n\t\t\t\t\t\t\t\t\t\t\t: (\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ ...enabled }\r\n\t\t\t\t\t\t\t\t\t\t\t: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ ...outlined }\r\n\t\t\t\t\t\t\t\t\t\t\t:\t{ ...disabled }\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t((state.callData?.status?.toUpperCase() as CallStatus) !==\r\n\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute !== 1) ||\r\n\t\t\t\t\t\t\t\t\t\t\tmuteOrUnMuteLoading ||\r\n\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{muteOrUnMuteLoading ?\r\n\t\t\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: theme.palette.primary.main,\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t: state.callData?.mute === 1 ?\r\n\t\t\t\t\t\t\t\t\t\t\t<MicOff />\r\n\t\t\t\t\t\t\t\t\t\t:\t<Mic />}\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t{!state.sdkConfig?.disableCallTransferButton && (\r\n\t\t\t\t\t\t\t\t\t<Tooltip title={\"Transfer Call\"}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={state.openCallTransferDialog ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsdkStateManager.setOpenCallTransferDialog(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.openCallTransferDialog ? { ...enabled }\r\n\t\t\t\t\t\t\t\t\t\t\t\t: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ ...outlined }\r\n\t\t\t\t\t\t\t\t\t\t\t\t:\t{ ...disabled }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) !== CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<TransferWithinAStation />\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{!state.sdkConfig?.disableConferenceButton && (\r\n\t\t\t\t\t\t\t\t\t<Tooltip title={\"Conference Call\"}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={state.openConferenceDialog ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsdkStateManager.setOpenConferenceDialog(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.openConferenceDialog ? { ...enabled }\r\n\t\t\t\t\t\t\t\t\t\t\t\t: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ ...outlined }\r\n\t\t\t\t\t\t\t\t\t\t\t\t:\t{ ...disabled }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) !== CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Group />\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{state.sdkConfig?.enableSmsServices && (\r\n\t\t\t\t\t\t\t\t\t<Tooltip title={\"Send SMS\"}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={Boolean(ambulanceAnchorEl) ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.ONCALL, CallStatus.WRAPUP].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenAbulanceServices(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tBoolean(ambulanceAnchorEl) ? { ...enabled }\r\n\t\t\t\t\t\t\t\t\t\t\t\t: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.ONCALL, CallStatus.WRAPUP].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ ...outlined }\r\n\t\t\t\t\t\t\t\t\t\t\t\t:\t{ ...disabled }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t![CallStatus.ONCALL, CallStatus.WRAPUP].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<SmsSharp />\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{!state.sdkConfig?.disableEndCallButton && (\r\n\t\t\t\t\t\t\t\t\t<Tooltip title={\"End Call\"}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus)\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"contained\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t:\t\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus)\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetOpenCallDisposition(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus)\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...enabled,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRight: \"1px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"error.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tminWidth: \"60px !important\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \" 0px 2px 1px #5f3f3f\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: `1px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"40px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \" 0px 2px 1px #5f3f3f\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:active\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t:\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...disabled,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tminWidth: \"60px !important\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t![\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tendCallLoading\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{endCallLoading ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t:\t<CallEnd />}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t{!state.sdkConfig?.disabledMoreOptionsButton &&\r\n\t\t\t\t\t\t\t\t\tprocessList &&\r\n\t\t\t\t\t\t\t\t\tprocessList?.length > 1 && (\r\n\t\t\t\t\t\t\t\t\t\t<Tooltip title={\"Switch Process\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant={Boolean(moreOptionsAnchorEl) ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.IDLE].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenMoreOptions(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={Boolean(moreOptionsAnchorEl) ? { ...enabled } : { ...outlined }}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t![CallStatus.BREAK, CallStatus.IDLE].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<MoreVert />\r\n\t\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Paper>\r\n\t\t\t\t</Fade>\r\n\t\t\t</Box>\r\n\r\n\t\t\t<Fade\r\n\t\t\t\tin={true}\r\n\t\t\t\ttimeout={300}\r\n\t\t\t>\r\n\t\t\t\t<Paper\r\n\t\t\t\t\tref={iframeDragRef}\r\n\t\t\t\t\televation={iframeIsDragging ? 4 : 1}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\tleft: iframePosition.x,\r\n\t\t\t\t\t\ttop: iframePosition.y,\r\n\t\t\t\t\t\tborderRadius: 2,\r\n\t\t\t\t\t\tbgcolor: \"background.paper\",\r\n\t\t\t\t\t\tzIndex: Number.MAX_SAFE_INTEGER,\r\n\t\t\t\t\t\ttransition: theme.transitions.create([\"box-shadow\", \"transform\"], {\r\n\t\t\t\t\t\t\tduration: theme.transitions.duration.short,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tvisibility: showIframe && !state.sdkConfig?.disableSoftPhone ? \"visible\" : \"hidden\",\r\n\t\t\t\t\t\tuserSelect: \"none\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\tcursor: \"all-scroll\",\r\n\t\t\t\t\t\t\tpadding: \"0px 10px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonMouseDown={iframeHandleMouseDown}\r\n\t\t\t\t\t\tonTouchStart={iframeHandleTouchStart}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<DragIndicator\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\ttransform: \"rotate(90deg)\",\r\n\t\t\t\t\t\t\t\tcolor: \"#7b7b7b\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t/>{\" \"}\r\n\t\t\t\t\t\t<IconButton onClick={() => setShowIframe(false)}>\r\n\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<iframe\r\n\t\t\t\t\t\t\tsrc={`${state.urlConfig?.iframeURL}/static/phone/cti_index.html?user_id=${state.agentId}&api_url=${state.urlConfig?.iframeAPIURL}`}\r\n\t\t\t\t\t\t\theight={380}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\twidth={420}\r\n\t\t\t\t\t\t\tallow=\"camera; microphone; autoplay\"\r\n\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\tborder: \"none\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t></iframe>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Fade>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={dialerAnchorEl}\r\n\t\t\t\topen={Boolean(dialerAnchorEl)}\r\n\t\t\t\tonClose={handleCloseDialer}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tall: \"unset\",\r\n\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tvalue={phoneNumber}\r\n\t\t\t\t\t\tplaceholder=\"Enter Mobile No.\"\r\n\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\tconst value = e.target.value;\r\n\t\t\t\t\t\t\tsetPhoneNumber(value);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonKeyDown={(e) => {\r\n\t\t\t\t\t\t\tif (e.key === \"Enter\") {\r\n\t\t\t\t\t\t\t\thandleStartCall(phoneNumber);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\tcolor=\"info\"\r\n\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\thandleStartCall(phoneNumber);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{clickToCallLoading ?\r\n\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tcolor: theme.palette.success.main,\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t:\t<Phone color=\"success\" />}\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={ambulanceAnchorEl}\r\n\t\t\t\topen={Boolean(ambulanceAnchorEl)}\r\n\t\t\t\tonClose={handleCloseAmbulance}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tall: \"unset\",\r\n\t\t\t\t\t\tpadding: \" 0px 20px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Tooltip title=\"Ambulance Service\">\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\thandleSendSMS(state.callData);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tAmbulance\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: \"green\",\r\n\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\t\t\tmarginLeft: \"14px\",\r\n\t\t\t\t\t\t\t\t\tpadding: \"2px 6px\",\r\n\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tSend\r\n\t\t\t\t\t\t\t\t<SendRounded\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tmarginLeft: \"8px\",\r\n\t\t\t\t\t\t\t\t\t\twidth: \"18px\",\r\n\t\t\t\t\t\t\t\t\t\ttransform: \"rotate(-16deg)\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={moreOptionsAnchorEl}\r\n\t\t\t\topen={Boolean(moreOptionsAnchorEl)}\r\n\t\t\t\tonClose={handleCloseMoreOptions}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tall: \"unset\",\r\n\t\t\t\t\t\tpadding: \" 0px 20px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{processList?.map((item) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tkey={item?.process_id}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Tooltip title={item?.process_name ?? \"\"}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\tstate?.process?.process_id === item?.process_id ? \"contained\" : \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\tsdkStateManager.setProcess(item);\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{item?.process_name ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={statusAnchorEl}\r\n\t\t\t\topen={Boolean(statusAnchorEl)}\r\n\t\t\t\tonClose={handleCloseAgentStatus}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t{!breaksList || breaksList?.length === 0 ?\r\n\t\t\t\t\t<MenuItem onClick={() => handleUpdateAgentStatus(\"Lunch\")}>- Break</MenuItem>\r\n\t\t\t\t:\tbreaksList?.map((item) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\tkey={item?.type}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t// hilight background of selected\r\n\t\t\t\t\t\t\t\t\tbackgroundColor:\r\n\t\t\t\t\t\t\t\t\t\tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t\t\"primary.main\"\r\n\t\t\t\t\t\t\t\t\t\t:\t\"transparent\",\r\n\t\t\t\t\t\t\t\t\tcolor:\r\n\t\t\t\t\t\t\t\t\t\tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t\t\"white\"\r\n\t\t\t\t\t\t\t\t\t\t:\t\"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\":hover\": {\r\n\t\t\t\t\t\t\t\t\t\tbackgroundColor:\r\n\t\t\t\t\t\t\t\t\t\t\tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"primary.dark\"\r\n\t\t\t\t\t\t\t\t\t\t\t:\t\"selected.hover\",\r\n\t\t\t\t\t\t\t\t\t\t// color:\r\n\t\t\t\t\t\t\t\t\t\t// \tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t// \t\t\"primary.main\"\r\n\t\t\t\t\t\t\t\t\t\t// \t:\t\"primary.main\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tonClick={() => handleUpdateAgentStatus(item?.type)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t- {item?.type}\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={anchorEl}\r\n\t\t\t\topen={Boolean(anchorEl)}\r\n\t\t\t\tonClose={handleCloseQueueCounts}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\tjustifyContent: \"flex-start\",\r\n\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\tpadding: \"0px 10px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\ticon={<Layers color=\"secondary\" />}\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tlabel=\"Waiting - 25\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmargin: \"4px 2px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\ticon={<Pending color=\"info\" />}\r\n\t\t\t\t\t\tlabel=\"Pending - 99+\"\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmargin: \"4px 2px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\ticon={<Upcoming color=\"success\" />}\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tlabel=\"Upcoming - 66\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmargin: \"4px 2px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t{Boolean(state.openConferenceDialog) && <ConferenceDialog />}\r\n\r\n\t\t\t{Boolean(state.openCallTransferDialog) && (\r\n\t\t\t\t<CallTransferDialog open={state.openCallTransferDialog} />\r\n\t\t\t)}\r\n\r\n\t\t\t{Boolean(openCallDisposition) && (\r\n\t\t\t\t<EndCallDispositionDialog\r\n\t\t\t\t\topen={openCallDisposition}\r\n\t\t\t\t\tsetOpen={setOpenCallDisposition}\r\n\t\t\t\t\tonSubmitDisposition={handleEndCall}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\r\n\t\t\t{Boolean(openCallHistoryDialog) && (\r\n\t\t\t\t<CallHistoryDialog\r\n\t\t\t\t\topen={openCallHistoryDialog}\r\n\t\t\t\t\tsetOpen={setOpenCallHistoryDialog}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nimport {\r\n\tAirlines,\r\n\tCall,\r\n\tCallEnd,\r\n\tCallSplit,\r\n\tClose,\r\n\tMemoryOutlined,\r\n\tPause,\r\n\tPhoneDisabled,\r\n\tPlayArrow,\r\n\tRoofing,\r\n\tSupportAgent,\r\n\tTransferWithinAStation,\r\n\tUpcoming,\r\n} from \"@mui/icons-material\";\r\nimport {\r\n\tBox,\r\n\tButton,\r\n\tDialog,\r\n\tIconButton,\r\n\tPaper,\r\n\tTextField,\r\n\tTypography,\r\n\tAutocomplete,\r\n\tTooltip,\r\n\tuseTheme,\r\n\tTableContainer,\r\n\tTable,\r\n\tTableHead,\r\n\tTableRow,\r\n\tTableCell,\r\n\tTableBody,\r\n\tCircularProgress,\r\n\tCheckbox,\r\n} from \"@mui/material\";\r\n\r\nimport React, { useEffect, useMemo, useState } from \"react\";\r\n\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\nimport { useGetRequest, usePostRequest } from \"../services/request\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\nimport { useToast } from \"../services/toastMessage\";\r\nimport useStyles from \"./styles\";\r\n\r\nimport { ConferenceLineTypes, CallStatus } from \"../../types\";\r\n\r\ntype TransferCallRequest = {\r\n\tmobile_number?: string;\r\n\tuserid?: string;\r\n\ttype?: string;\r\n\ttransfer_to?: string;\r\n\tcallreferenceid?: string;\r\n\tprocessid?: string;\r\n\tprocess_name?: string;\r\n};\r\n\r\ntype BlindTransferCallRequest = {\r\n\taction: string;\r\n\tuserid: string;\r\n\tcallreferenceid: string;\r\n\tblind_transfer_no: any;\r\n};\r\n\r\nconst ConferenceTableRow = ({ each, isLineDialing }: any) => {\r\n\tconst state = useSDKState();\r\n\tconst theme = useTheme();\r\n\tconst { showToast } = useToast();\r\n\tconst { disabled, enabled, outlined } = useStyles({\r\n\t\tdisabled: state.sdkConfig?.disabled || {},\r\n\t\tenabled: state.sdkConfig?.enabled || {},\r\n\t\toutlined: state.sdkConfig?.outlined || {},\r\n\t});\r\n\r\n\tconst [conferenceCallStart, setConferenceCallStart] = useState(false);\r\n\tconst [conferenceCallMerge, setConferenceCallMerge] = useState(false);\r\n\tconst [conferenceCallHoldOrUnHold, setConferenceCallHoldOrUnHold] = useState(false);\r\n\tconst [conferenceCallEnd, setConferenceCallEnd] = useState(false);\r\n\r\n\tconst onConferenceLineUpdate = (line: ConferenceLineTypes, data: any) => {\r\n\t\tsdkStateManager.setConferenceLine({ ...line, ...data });\r\n\t};\r\n\r\n\tconst onConferenceCallStart = (line: ConferenceLineTypes, data: any) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\t\tsetConferenceCallStart(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: `CALL${line_used.line}`,\r\n\t\t\tline_used: String(line_used.line),\r\n\t\t\tthirdparty_no: line_used.phone,\r\n\t\t\tuserid: state.callData?.agent_id ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallStart(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst onMergeConferenceCall = (line: ConferenceLineTypes, data: any) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\t\tsetConferenceCallMerge(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: `CONFERENCE`,\r\n\t\t\tline_used: String(line_used.line),\r\n\t\t\tthirdparty_no: line_used.phone,\r\n\t\t\tuserid: state.callData?.agent_id ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tif (state.callData?.hold === 1) {\r\n\t\t\t\t\thandleHoldToggle();\r\n\t\t\t\t}\r\n\t\t\t\tif (state.callData?.mute === 1) {\r\n\t\t\t\t\thandleMuteToggle();\r\n\t\t\t\t}\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallMerge(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst onHoldOrUnHoldConferenceCall = (line: ConferenceLineTypes, data: any, type: string) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\t\tsetConferenceCallHoldOrUnHold(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: type,\r\n\t\t\thold_channel_no: type === \"HOLDUSER\" ? `hold${line_used.line}` : `unhold${line_used.line}`,\r\n\t\t\tuserid: state.callData?.agent_id ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_HOLD_OR_UN_HOLD, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallHoldOrUnHold(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst onEndConferenceCall = (line: ConferenceLineTypes, data: any) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\t\tsetConferenceCallEnd(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: \"HANGUP_CHANNEL\",\r\n\t\t\tline_used: String(line_used.line),\r\n\t\t\tuser_type: `THIRDPARTY${line_used.line - 1}`,\r\n\t\t\tthirdparty_no: line_used.phone,\r\n\t\t\tuserid: state.callData?.agent_id ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_END, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallEnd(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst [holdOrUnHold] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tuserId: string;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst [muteOrUnMute] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tuserId: string;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst handleHoldToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.hold === 1 ? CallStatus.UNHOLD : CallStatus.HOLD,\r\n\t\t\tuserId: state.agentId,\r\n\t\t};\r\n\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t};\r\n\r\n\tconst handleMuteToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.mute === 1 ? CallStatus.UNMUTE : CallStatus.MUTE,\r\n\t\t\tuserId: state.agentId,\r\n\t\t};\r\n\r\n\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<TableRow\r\n\t\t\tkey={each.line}\r\n\t\t\tsx={{\r\n\t\t\t\tborder: \"2px solid #fff\",\r\n\t\t\t}}\r\n\t\t>\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\tflex: 1,\r\n\t\t\t\t\twidth: \"100px\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Typography>Line {each?.line ?? \"\"}. </Typography>\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\twidth: \"150px\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Typography\r\n\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tpx: 1,\r\n\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\twidth: \"150px\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{each?.status ?? \"\"}\r\n\t\t\t\t</Typography>\r\n\t\t\t</TableCell>\r\n\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\tflex: 1,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<TextField\r\n\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\tplaceholder=\"Phone Number\"\r\n\t\t\t\t\tfullWidth\r\n\t\t\t\t\tvalue={each?.phone || \"\"}\r\n\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\teach?.line === 1 ||\r\n\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\tCallStatus.DISCONNECTED,\r\n\t\t\t\t\t\t\tCallStatus.CONFERENCE,\r\n\t\t\t\t\t\t\tCallStatus.HOLD,\r\n\t\t\t\t\t\t\tCallStatus.MUTE,\r\n\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t].includes(each?.status ?? \"\") ||\r\n\t\t\t\t\t\tisLineDialing\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\tonConferenceLineUpdate(each, { phone: e.target.value });\r\n\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\tflex: 1,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\tjustifyContent: \"flex-start\",\r\n\t\t\t\t\t\tgap: \"10px\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{each?.line === 1 && (\r\n\t\t\t\t\t\t<Tooltip title={each?.status !== CallStatus.HOLD ? \"Hold\" : \"Resume\"}>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={each?.status === CallStatus.HOLD ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tsx={each?.status === CallStatus.CONFERENCE ? { ...outlined } : { ...disabled }}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tif (each.status === CallStatus.HOLD) {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: false }, \"UNHOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: true }, \"HOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t(each?.status !== CallStatus.CONFERENCE && each?.status !== CallStatus.HOLD) ||\r\n\t\t\t\t\t\t\t\t\tconferenceCallHoldOrUnHold\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{each.status === CallStatus.HOLD ?\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tgap: \"5px\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"98px\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: each.status === CallStatus.HOLD ? \"#fff\" : \"initial\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tUnhold\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t{conferenceCallHoldOrUnHold ?\r\n\t\t\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"16px\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: theme.palette.primary.main,\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t:\t<PlayArrow />}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t:\t<Box\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tgap: \"5px\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"98px\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: each.status === CallStatus.HOLD ? \"#fff\" : \"#000\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tHold\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t{conferenceCallHoldOrUnHold ?\r\n\t\t\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"16px\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: theme.palette.primary.main,\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t:\t<Pause />}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{/* ------------- */}\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip title=\"Call\">\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={each?.status !== CallStatus.IDLE ? \"outlined\" : \"contained\"}\r\n\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE ?\r\n\t\t\t\t\t\t\t\t\t\t{ ...disabled }\r\n\t\t\t\t\t\t\t\t\t:\t{\r\n\t\t\t\t\t\t\t\t\t\t\t...enabled,\r\n\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.success.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"success.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `0px 2px 1px ${theme.palette.success.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.success.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\"&:active\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"success.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tonConferenceCallStart(each, {});\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={each?.status !== CallStatus.IDLE || isLineDialing}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{conferenceCallStart ?\r\n\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t:\t<Call\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tcolor: each?.status !== CallStatus.IDLE ? \"default\" : \"#f3f2f2\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip title=\"Merge Call\">\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={each?.status === CallStatus.ONCALL ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tsx={each?.status === CallStatus.ONCALL ? { ...enabled } : { ...disabled }}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tonMergeConferenceCall(each, {\r\n\t\t\t\t\t\t\t\t\t\tisMergeCall: true,\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={each?.status !== CallStatus.ONCALL}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{conferenceCallMerge ?\r\n\t\t\t\t\t\t\t\t\t<CircularProgress size=\"20px\" />\r\n\t\t\t\t\t\t\t\t:\t<CallSplit />}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip title={each?.status !== CallStatus.HOLD ? \"Hold\" : \"Resume\"}>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={each?.status === CallStatus.HOLD ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tsx={each?.status === CallStatus.CONFERENCE ? { ...outlined } : { ...disabled }}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tif (each.status === CallStatus.HOLD) {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: false }, \"UNHOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: true }, \"HOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t(each?.status !== CallStatus.CONFERENCE && each?.status !== CallStatus.HOLD) ||\r\n\t\t\t\t\t\t\t\t\tconferenceCallHoldOrUnHold\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{conferenceCallHoldOrUnHold ?\r\n\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tcolor: theme.palette.primary.main,\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t: each.status === CallStatus.HOLD ?\r\n\t\t\t\t\t\t\t\t\t<PlayArrow />\r\n\t\t\t\t\t\t\t\t:\t<Pause />}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip title=\"End Call\">\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE && each?.status !== CallStatus.DISCONNECTED ?\r\n\t\t\t\t\t\t\t\t\t\t\"contained\"\r\n\t\t\t\t\t\t\t\t\t:\t\"outlined\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE && each?.status !== CallStatus.DISCONNECTED ?\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t...enabled,\r\n\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `0px 2px 1px ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\"&:active\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t:\t{\r\n\t\t\t\t\t\t\t\t\t\t\t...disabled,\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tonEndConferenceCall(each, {\r\n\t\t\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\teach?.status === CallStatus.IDLE ||\r\n\t\t\t\t\t\t\t\t\teach?.status === CallStatus.DISCONNECTED ||\r\n\t\t\t\t\t\t\t\t\tconferenceCallEnd\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{conferenceCallEnd ?\r\n\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t:\t<CallEnd />}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t</TableCell>\r\n\t\t</TableRow>\r\n\t);\r\n};\r\n\r\nexport function ConferenceDialog() {\r\n\tconst state = useSDKState();\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [conferenceCallEndAll, setConferenceCallEndAll] = useState(false);\r\n\r\n\tconst handleClose = () => {\r\n\t\tsdkStateManager.setOpenConferenceDialog(false);\r\n\t};\r\n\r\n\tconst onEndAllConferenceCalls = () => {\r\n\t\tsetConferenceCallEndAll(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: \"ENDCONFERENCE\",\r\n\t\t\tuserid: state.callData?.agent_id ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_END_ALL, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\thandleClose();\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallEndAll(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst handleTransferConferenceCall = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: \"TRANSFERAPI\",\r\n\t\t\tuserid: state.callData?.agent_id ?? \"\",\r\n\t\t\tprocess_name: state.callData?.process_name ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_TRANSFER, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\thandleClose();\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst isLineDialing = state?.conferenceLine?.some((item) => item?.status === CallStatus.DIALING);\r\n\tconst conferenceLineCount =\r\n\t\tstate?.conferenceLine?.filter((item) => item?.status === CallStatus.CONFERENCE)?.length ?? 0;\r\n\r\n\tconst isHold = state?.conferenceLine?.some((item) => item?.status === CallStatus.HOLD);\r\n\tconst isOnCall = state?.conferenceLine?.some((item) => item?.status === CallStatus.ONCALL);\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={state.openConferenceDialog}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"md\"}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"0px 16px\",\r\n\t\t\t\t\t\t\tpaddingBottom: \"6px\",\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 2px #e7e5e5ff\",\r\n\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\tcolor=\"primary.main\"\r\n\t\t\t\t\t\t\tsx={{ textTransform: \"uppercase\", fontWeight: \"bold\", fontSize: \"14px\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{state?.agentId ?? \"\"} conference\r\n\t\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\tonClick={handleTransferConferenceCall}\r\n\t\t\t\t\t\t\t\tdisabled={conferenceLineCount <= 1 || isHold || isLineDialing || isOnCall}\r\n\t\t\t\t\t\t\t\tstartIcon={<TransferWithinAStation />}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tExit Conference\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tonClick={handleClose}\r\n\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Close sx={{ color: \"primary.main\" }} />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 2px #e7e5e5ff\",\r\n\t\t\t\t\t\t\tmargin: \"0px 15px\",\r\n\t\t\t\t\t\t\tborderRadius: \"20px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<TableContainer\r\n\t\t\t\t\t\t\tcomponent={Paper}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\toutline: \"0px solid gray !important\",\r\n\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 6px #e7e5e5ff\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Table\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tborder: \"4px solid #ffffff !important\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t<TableRow\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tborder: \"2px solid #f3f3f3ff !important\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tLine\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tStatus\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t{/* <TableCell\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tCall Type\r\n\t\t\t\t\t\t\t\t\t\t</TableCell> */}\r\n\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tMobile Number\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tCall Actions\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t{state?.conferenceLine.map((each: any) => (\r\n\t\t\t\t\t\t\t\t\t\t<ConferenceTableRow\r\n\t\t\t\t\t\t\t\t\t\t\teach={each}\r\n\t\t\t\t\t\t\t\t\t\t\tisLineDialing={isLineDialing}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t\t</TableContainer>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\ttextAlign=\"center\"\r\n\t\t\t\t\t\tm={2}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\tsize=\"large\"\r\n\t\t\t\t\t\t\tonClick={onEndAllConferenceCalls}\r\n\t\t\t\t\t\t\tdisabled={conferenceCallEndAll || conferenceLineCount <= 0}\r\n\t\t\t\t\t\t\tsx={{ px: 2, borderRadius: \"20px\", textTransform: \"capitalize\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{conferenceCallEndAll ?\r\n\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tmarginRight: \"8px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t:\t<IconButton\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.main\",\r\n\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"error.dark\" },\r\n\t\t\t\t\t\t\t\t\t\tmarginRight: \"8px\",\r\n\t\t\t\t\t\t\t\t\t\twidth: \"28px\",\r\n\t\t\t\t\t\t\t\t\t\theight: \"28px\",\r\n\t\t\t\t\t\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\tlineHeight: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\tcolor: \"white\",\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"50%\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<PhoneDisabled\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tcolor: \"white\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tEnd Conference\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function CallTransferDialog({ open }: any) {\r\n\tconst state = useSDKState();\r\n\tconst [mobileNumber, setMobileNumber] = useState(\"\");\r\n\tconst [transferCall] = usePostRequest<TransferCallRequest>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [blindTransferCall] = usePostRequest<BlindTransferCallRequest>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [currentselecteTab, setCurrentselecteTab] = useState(\"process\");\r\n\r\n\tconst [getIdelAgentsList, { data: idleAgentsList, isLoading: isIdleAgentsListLoading }] =\r\n\t\tusePostRequest<any>({\r\n\t\t\tdisabledSuccessToast: true,\r\n\t\t});\r\n\r\n\tconst [\r\n\t\tgetHospitalsServicesList,\r\n\t\t{ data: hospitalsServicesList, isLoading: isHospitalsServicesListLoading },\r\n\t] = useGetRequest<any>({\r\n\t\tdisabledSuccessToast: true,\r\n\t});\r\n\r\n\tconst [\r\n\t\tgetProcessAndQueuesList,\r\n\t\t{ data: processAndQueuesList, isLoading: isProcessAndQueuesListLoading },\r\n\t] = usePostRequest<{\r\n\t\tstatus: string;\r\n\t\tactive: boolean;\r\n\t\tprocess?: any[];\r\n\t\tqueue?: any[];\r\n\t}>({\r\n\t\tdisabledSuccessToast: true,\r\n\t});\r\n\r\n\tconst handleClose = () => {\r\n\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t};\r\n\r\n\tconst handleTransferCall = (data: any, type: string) => {\r\n\t\tif (type === \"PROCESS\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\t\tuserid: state.callData?.agent_id ?? \"\",\r\n\t\t\t\ttype: \"PROCESS\",\r\n\t\t\t\ttransfer_to: data?.process_name ?? \"\",\r\n\t\t\t\tcallreferenceid: state.callData?.convox_id ?? \"\",\r\n\t\t\t\tprocessid: String(state.callData?.process_id ?? \"\"),\r\n\t\t\t\tprocess_name: state.callData?.process_name ?? \"\",\r\n\t\t\t};\r\n\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t} else if (type === \"QUEUE\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\t\tuserid: state.callData?.agent_id ?? \"\",\r\n\t\t\t\ttype: \"QUEUE\",\r\n\t\t\t\ttransfer_to: data?.queue_name ?? \"\",\r\n\t\t\t\tcallreferenceid: state.callData?.convox_id ?? \"\",\r\n\t\t\t\tprocessid: String(state.callData?.process_id ?? \"\"),\r\n\t\t\t\tprocess_name: state.callData?.process_name ?? \"\",\r\n\t\t\t};\r\n\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t} else if (type === \"AGENT\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\t\tuserid: state.callData?.agent_id ?? \"\",\r\n\t\t\t\ttype: \"AGENT\",\r\n\t\t\t\ttransfer_to: data?.user_id ?? \"\",\r\n\t\t\t\tcallreferenceid: state.callData?.convox_id ?? \"\",\r\n\t\t\t\tprocessid: String(state.callData?.process_id ?? \"\"),\r\n\t\t\t\tprocess_name: state.callData?.process_name ?? \"\",\r\n\t\t\t};\r\n\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t} else if (type === \"OTHER\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\taction: \"BLIND_TRANSFER\",\r\n\t\t\t\tuserid: state.callData?.agent_id ?? \"\",\r\n\t\t\t\tcallreferenceid: state.callData?.convox_id ?? \"\",\r\n\t\t\t\tblind_transfer_no: data?.mobile_number ?? \"\",\r\n\t\t\t};\r\n\t\t\tblindTransferCall(END_POINT.BLIEND_TRANSFER, payload);\r\n\t\t}\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tgetIdelAgentsList(END_POINT.AGENTS_LIST, {\r\n\t\t\tstatus: \"IDLE\",\r\n\t\t\tactive: true,\r\n\t\t});\r\n\r\n\t\tgetProcessAndQueuesList(END_POINT.TRANSFER_TO_DETAILS, {\r\n\t\t\tstatus: \"ACTIVE\",\r\n\t\t\tactive: true,\r\n\t\t});\r\n\t\tgetHospitalsServicesList(END_POINT.HOSPITALS_SERVICES);\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tfullWidth\r\n\t\t\t\tmaxWidth={\"sm\"}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography variant=\"body1\"> Call Transfer</Typography>\r\n\t\t\t\t\t\t<IconButton onClick={handleClose}>\r\n\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmargin: \"10px\",\r\n\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 1, margin: \"10px\" }}>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"process\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetCurrentselecteTab(\"process\");\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tProcess\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"queues\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetCurrentselecteTab(\"queues\");\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tQueues\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"agents\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetCurrentselecteTab(\"agents\");\r\n\t\t\t\t\t\t\t\t\tgetIdelAgentsList(END_POINT.AGENTS_LIST, {\r\n\t\t\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tAgents\r\n\t\t\t\t\t\t\t</Button>\r\n\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"others\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetCurrentselecteTab(\"others\");\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tOthers\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{(isProcessAndQueuesListLoading ||\r\n\t\t\t\t\t\t\tisIdleAgentsListLoading ||\r\n\t\t\t\t\t\t\tisHospitalsServicesListLoading) && (\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\theight: \"80px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<CircularProgress />{\" \"}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!isIdleAgentsListLoading &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"process\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns:\r\n\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process &&\r\n\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"repeat(2, 1fr)\"\r\n\t\t\t\t\t\t\t\t\t\t\t:\t\"repeat(1, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{(\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process &&\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.length > 0\r\n\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.map((process: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<MemoryOutlined sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{process.process_name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleTransferCall(process, \"PROCESS\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t:\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tp={2}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Upcoming color=\"primary\" />\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"20px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Process Found\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!isIdleAgentsListLoading &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"queues\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns:\r\n\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue &&\r\n\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue?.length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"repeat(2, 1fr)\"\r\n\t\t\t\t\t\t\t\t\t\t\t:\t\"repeat(1, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{(\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue &&\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue?.length > 0\r\n\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue?.map((queue: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Airlines sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{queue.queue_name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.find(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(process: any) => process.process_id === queue.process_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)?.process_name\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"gray\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\"(\" +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.find(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(process: any) => process.process_id === queue.process_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)?.process_name +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\")\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t:\t\"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleTransferCall(queue, \"QUEUE\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t:\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tp={2}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Upcoming color=\"primary\" />\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"20px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Queues Found\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!isIdleAgentsListLoading &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"agents\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns:\r\n\t\t\t\t\t\t\t\t\t\t\tidleAgentsList?.data && idleAgentsList?.data?.length > 0 ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"repeat(2, 1fr)\"\r\n\t\t\t\t\t\t\t\t\t\t\t:\t\"repeat(1, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{idleAgentsList?.data && idleAgentsList?.data?.length > 0 ?\r\n\t\t\t\t\t\t\t\t\t\tidleAgentsList?.data?.map((agent: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SupportAgent sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{agent.name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleTransferCall(agent, \"AGENT\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t:\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tp={2}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Upcoming color=\"primary\" />\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"20px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Agents Found\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!isIdleAgentsListLoading &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"others\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns: \"repeat(2, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{hospitalsServicesList?.data &&\r\n\t\t\t\t\t\t\t\t\t\thospitalsServicesList?.data?.length > 0 &&\r\n\t\t\t\t\t\t\t\t\t\thospitalsServicesList?.data?.map((service: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Roofing sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={`${service?.description ?? \"\"}`}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ color: \"text.secondary\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{service.name}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"9px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"gray\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextOverflow: \"ellipsis\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"160px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{service?.description ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={service?.phone_number ?? \"\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleTransferCall(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmobile_number: service?.phone_number ?? \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"OTHER\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tname=\"others\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel=\"Mobile number\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"tel\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={mobileNumber}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst v = e.target.value;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (/^\\d*$/.test(v)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetMobileNumber(v);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thtmlInput: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinputMode: \"numeric\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxLength: 11,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Enter mobile number\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tautoComplete=\"off\"\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\t\t\t\t\t\ttitle={mobileNumber ? `Call To - ${mobileNumber}` : \"Enter mobile number\"}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleTransferCall(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmobile_number: mobileNumber ?? \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"OTHER\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function EndCallDispositionDialog({ open, setOpen, onSubmitDisposition }: any) {\r\n\tconst [getDispositions, data] = useGetRequest();\r\n\r\n\tconst [formData, setFormData] = useState({\r\n\t\tdisposition: { label: \"Resolved\", value: \"RES\" },\r\n\t\tfollowUp: { label: \"No\", value: \"N\" },\r\n\t\tcallbackDate: \"\",\r\n\t\tcallbackHrs: \"\",\r\n\t\tcallbackMins: \"\",\r\n\t\tselected_break: false,\r\n\t});\r\n\tconst followUpOptions = [\r\n\t\t{ label: \"Yes\", value: \"Y\" },\r\n\t\t{ label: \"No\", value: \"N\" },\r\n\t];\r\n\r\n\tconst handleChange = (\r\n\t\tfield: keyof typeof formData,\r\n\t\tvalue: { label: string } | null | string | boolean\r\n\t) => {\r\n\t\tsetFormData((prev) => ({ ...prev, [field]: value }));\r\n\t};\r\n\r\n\tconst handleReset = () => {\r\n\t\tsetFormData({\r\n\t\t\tdisposition: { label: \"Resolved\", value: \"RES\" },\r\n\t\t\tfollowUp: { label: \"No\", value: \"N\" },\r\n\t\t\tcallbackDate: \"\",\r\n\t\t\tcallbackHrs: \"\",\r\n\t\t\tcallbackMins: \"\",\r\n\t\t\tselected_break: false,\r\n\t\t});\r\n\t};\r\n\r\n\tconst handleClose = () => {\r\n\t\thandleReset();\r\n\t\tsetOpen(false);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tgetDispositions(END_POINT.DISPOSITIONS);\r\n\t}, []);\r\n\r\n\tconst dispositionsOptions = useMemo(() => {\r\n\t\treturn (\r\n\t\t\tdata?.data?.data?.map((item: any) => ({\r\n\t\t\t\tlabel: item.name,\r\n\t\t\t\tvalue: item.code,\r\n\t\t\t})) || []\r\n\t\t);\r\n\t}, [data?.data?.data]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tfullWidth\r\n\t\t\t\tmaxWidth={\"xs\"}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\tm={1}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{\" \"}\r\n\t\t\t\t\t\t\tCall Disposition\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\tmargin: \"10px\",\r\n\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tdisplay=\"flex\"\r\n\t\t\t\t\t\t\tgap={2}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\tvalue={formData.disposition}\r\n\t\t\t\t\t\t\t\toptions={dispositionsOptions}\r\n\t\t\t\t\t\t\t\tgetOptionLabel={(opt) => opt.label}\r\n\t\t\t\t\t\t\t\tonChange={(_, val) => handleChange(\"disposition\", val)}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t{...params}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Disposition\"\r\n\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\toptions={followUpOptions}\r\n\t\t\t\t\t\t\t\tgetOptionLabel={(opt) => opt.label}\r\n\t\t\t\t\t\t\t\tvalue={formData.followUp}\r\n\t\t\t\t\t\t\t\tonChange={(_, val) => handleChange(\"followUp\", val)}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t{...params}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Follow Up\"\r\n\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tdisplay=\"flex\"\r\n\t\t\t\t\t\t\tgap={2}\r\n\t\t\t\t\t\t\tmt={2}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{/* <Autocomplete\r\n\t\t\t\t\t\t\t\toptions={breakOptions}\r\n\t\t\t\t\t\t\t\tgetOptionLabel={(opt) => opt.label}\r\n\t\t\t\t\t\t\t\tvalue={formData.selected_break}\r\n\t\t\t\t\t\t\t\tonChange={(_, val) => handleChange(\"selected_break\", val)}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t{...params}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Break\"\r\n\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t/> */}\r\n\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tflex: \"1\",\r\n\t\t\t\t\t\t\t\t\tborder: \"1px solid #bdbdbd\",\r\n\t\t\t\t\t\t\t\t\tborderRadius: \"5px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\t\tname=\"selected_break\"\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tchecked={formData.selected_break}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => {\r\n\t\t\t\t\t\t\t\t\t\thandleChange(\"selected_break\", event.target.checked);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\t\tinput: { \"aria-label\": \"controlled\" },\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t/>{\" \"}\r\n\t\t\t\t\t\t\t\tMark as break\r\n\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t{formData?.followUp?.label?.toLowerCase() === \"yes\" ?\r\n\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tlabel=\"Callback Date\"\r\n\t\t\t\t\t\t\t\t\ttype=\"date\"\r\n\t\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\t\tinputLabel: { shrink: true },\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tvalue={formData.callbackDate}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"callbackDate\", e.target.value)}\r\n\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t:\t<Box sx={{ flex: 1 }}></Box>}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t{formData?.followUp?.label?.toLowerCase() === \"yes\" && (\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tdisplay=\"flex\"\r\n\t\t\t\t\t\t\t\tgap={2}\r\n\t\t\t\t\t\t\t\tmt={2}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tlabel=\"Hours (0-23)\"\r\n\t\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\t\tvalue={formData.callbackHrs}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"callbackHrs\", e.target.value)}\r\n\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tlabel=\"Minutes (0-59)\"\r\n\t\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\t\tvalue={formData.callbackMins}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"callbackMins\", e.target.value)}\r\n\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\ttextAlign=\"right\"\r\n\t\t\t\t\t\tm={2}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\tsize=\"large\"\r\n\t\t\t\t\t\t\tonClick={handleClose}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tpx: 2,\r\n\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tcancel\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"contained\"\r\n\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\tsize=\"large\"\r\n\t\t\t\t\t\t\tonClick={() => onSubmitDisposition(formData)}\r\n\t\t\t\t\t\t\tsx={{ px: 2, borderRadius: \"10px\", textTransform: \"capitalize\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tSubmit\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function ProcessorListDialog({\r\n\topen,\r\n\tsetOpen,\r\n\tprocessList = null,\r\n\thandleSelectedProcessor,\r\n}: any) {\r\n\tconst handleClose = () => {\r\n\t\tsetOpen(false);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"xs\"}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography variant=\"body1\"> Process List</Typography>\r\n\t\t\t\t\t\t<IconButton onClick={handleClose}>\r\n\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\tpadding: \"6px 10px\",\r\n\t\t\t\t\t\t\tmargin: \"10px\",\r\n\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{processList.length > 0 ?\r\n\t\t\t\t\t\t\tprocessList?.map((process: any, index: any) => (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\r\n\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\thandleSelectedProcessor(process);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<SupportAgent sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t{process.process_name}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t:\tnull}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function CallHistoryDialog({ open, setOpen }: any) {\r\n\tconst handleClose = () => {\r\n\t\tsetOpen(false);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tfullWidth\r\n\t\t\t\tmaxWidth={\"md\"}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography variant=\"body1\"> Call History</Typography>\r\n\t\t\t\t\t\t<IconButton onClick={handleClose}>\r\n\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\tmargin: \"10px\",\r\n\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\ttextAlign: \"center\",\r\n\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\tfontWeight: \"bold\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tp={6}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\tComing Soon...\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n","import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport type { SDKState } from \"../../types\";\r\n\r\nexport function useSDKState(): SDKState {\r\n\tconst [state, setState] = useState<SDKState>(sdkStateManager.getState());\r\n\r\n\tuseEffect(() => {\r\n\t\tconst unsubscribe = sdkStateManager.subscribe(() => {\r\n\t\t\tsetState(sdkStateManager.getState());\r\n\t\t});\r\n\r\n\t\treturn unsubscribe;\r\n\t}, []);\r\n\r\n\treturn state;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { type AxiosRequestConfig } from \"axios\";\r\nimport { useCallback, useReducer } from \"react\";\r\n\r\nimport axiosInstance from \"./axios\";\r\nimport { useToast } from \"./toastMessage\";\r\nimport {\r\n\tRequestResult,\r\n\tUseGetRequest,\r\n\tRequestOptions,\r\n\tUsePostRequest,\r\n\tUsePutRequest,\r\n\tUseDeleteRequest,\r\n\tUsePatchRequest,\r\n} from \"../../types\";\r\n\r\nconst initialState = {\r\n\tisLoading: false,\r\n\tisSuccess: false,\r\n\tisError: false,\r\n\terror: null,\r\n\tdata: null,\r\n};\r\n\r\nconst reducer = (state: typeof initialState, action: { type: string; payload: any }) => {\r\n\tif (action.type === \"isLoading\") {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisLoading: action.payload,\r\n\t\t};\r\n\t} else if (action.type === \"isSuccess\") {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisSuccess: true,\r\n\t\t\tdata: action.payload,\r\n\t\t};\r\n\t} else if (action.type === \"isError\") {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisError: true,\r\n\t\t\terror: action.payload,\r\n\t\t};\r\n\t} else if (action.type === \"reset\") {\r\n\t\treturn {\r\n\t\t\tisLoading: false,\r\n\t\t\tisSuccess: false,\r\n\t\t\tisError: false,\r\n\t\t\terror: null,\r\n\t\t\tdata: null,\r\n\t\t};\r\n\t}\r\n\tthrow Error(\"Unknown action.\");\r\n};\r\n\r\nexport const useGetRequest = <T = UseGetRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst getRequest = useCallback(\r\n\t\t(url: string, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.get(url, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, config);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, config);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, config);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [getRequest, state];\r\n};\r\n\r\nexport const usePostRequest = <T = UsePostRequest>(\r\n\tprops: RequestOptions = {}\r\n): [\r\n\t(_url: string, _payload: T, _config?: AxiosRequestConfig) => Promise<any>,\r\n\tRequestResult<T>,\r\n] => {\r\n\tconst { onSuccess = null, onError = null, disabledSuccessToast = false } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst postRequest = useCallback(\r\n\t\tasync (url: string, payload: T, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\ttry {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst res = await axiosInstance.post(url, payload, config);\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonSuccess?.(res.data, payload);\r\n\t\t\t\t\tif (!disabledSuccessToast) {\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (err: any) {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, payload);\r\n\t\t\t\t}\r\n\t\t\t} finally {\r\n\t\t\t\tdispatch({\r\n\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\tpayload: false,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [postRequest, state];\r\n};\r\n\r\nexport const usePutRequest = <T = UsePutRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _payload: T, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst putRequest = useCallback(\r\n\t\t(url: string, payload: T, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.put(url, payload, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, payload);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, payload);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, payload);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [putRequest, state];\r\n};\r\n\r\nexport const useDeleteRequest = <T = UseDeleteRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst deleteRequest = useCallback(\r\n\t\t(url: string, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.delete(url, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, config);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, config);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, config);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [deleteRequest, state];\r\n};\r\n\r\nexport const usePatchRequest = <T = UsePatchRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _payload: T, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst patchRequest = useCallback(\r\n\t\t(url: string, payload: T, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.patch(url, payload, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, payload);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, payload);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, payload);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [patchRequest, state];\r\n};\r\n","import { createContext, useContext, useState, ReactNode } from \"react\";\r\nimport { Snackbar, Alert, AlertColor } from \"@mui/material\";\r\n\r\ntype ToastContextType = {\r\n\tshowToast: (message: string, severity?: AlertColor) => void;\r\n};\r\n\r\nconst ToastContext = createContext<ToastContextType | undefined>(undefined);\r\n\r\nexport const useToast = () => {\r\n\tconst ctx = useContext(ToastContext);\r\n\tif (!ctx) throw new Error(\"useToast must be used inside ToastProvider\");\r\n\treturn ctx;\r\n};\r\n\r\nexport const ToastProvider = ({ children }: { children: ReactNode }) => {\r\n\tconst [open, setOpen] = useState(false);\r\n\tconst [message, setMessage] = useState(\"\");\r\n\tconst [severity, setSeverity] = useState<AlertColor>(\"info\");\r\n\r\n\tconst showToast = (msg: string, sev: AlertColor = \"info\") => {\r\n\t\tsetMessage(msg);\r\n\t\tsetSeverity(sev);\r\n\t\tsetOpen(true);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<ToastContext.Provider value={{ showToast }}>\r\n\t\t\t{children}\r\n\t\t\t<Snackbar\r\n\t\t\t\topen={open}\r\n\t\t\t\tcolor={severity}\r\n\t\t\t\tautoHideDuration={3000}\r\n\t\t\t\tonClose={() => setOpen(false)}\r\n\t\t\t\tanchorOrigin={{ vertical: \"top\", horizontal: \"right\" }}\r\n\t\t\t>\r\n\t\t\t\t<Alert\r\n\t\t\t\t\tvariant=\"filled\"\r\n\t\t\t\t\tseverity={severity}\r\n\t\t\t\t\tonClose={() => setOpen(false)}\r\n\t\t\t\t\tsx={{ width: \"100%\" }}\r\n\t\t\t\t>\r\n\t\t\t\t\t{message}\r\n\t\t\t\t</Alert>\r\n\t\t\t</Snackbar>\r\n\t\t</ToastContext.Provider>\r\n\t);\r\n};\r\n","import { SxProps, useTheme } from \"@mui/material\";\r\n\r\nconst useStyles = ({\r\n disabled,\r\n enabled,\r\n outlined,\r\n}: {\r\n disabled: SxProps;\r\n enabled: SxProps;\r\n outlined: SxProps;\r\n}): {\r\n disabled: SxProps;\r\n enabled: SxProps;\r\n outlined: SxProps;\r\n} => {\r\n const theme = useTheme();\r\n return {\r\n disabled: {\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n minWidth: \"40px !important\",\r\n borderRadius: \"16px\",\r\n border: `1px solid rgb(206, 204, 204)`,\r\n height: \"40px\",\r\n \"&:hover\": {\r\n boxShadow: \" 0px 2px 2px rgba(0, 0, 0, 0.79)\",\r\n border: `1px solid ${theme.palette.primary.main}`,\r\n },\r\n \"&:active\": {\r\n bgcolor: \"primary.main\",\r\n boxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n },\r\n ...disabled,\r\n },\r\n enabled: {\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n minWidth: \"40px !important\",\r\n borderRadius: \"16px\",\r\n boxShadow: \" 0px 2px 1px rgba(0, 0, 0, 0.507)\",\r\n border: `1px solid ${theme.palette.primary.main}`,\r\n height: \"40px\",\r\n \"&:hover\": {\r\n boxShadow: \" 0px 2px 1px rgba(0, 0, 0, 0.507)\",\r\n border: `1px solid ${theme.palette.primary.main}`,\r\n },\r\n \"&:active\": {\r\n bgcolor: \"primary.main\",\r\n boxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n },\r\n ...enabled,\r\n },\r\n outlined: {\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n minWidth: \"40px !important\",\r\n borderRadius: \"16px\",\r\n backgroundColor: theme.palette.grey[200],\r\n boxShadow: `0px 2px 1px ${theme.palette.primary.light}`,\r\n border: `0px solid ${theme.palette.primary.main}`,\r\n height: \"40px\",\r\n \"&:hover\": {\r\n boxShadow: `0px 2px 1px ${theme.palette.primary.main}`,\r\n border: `0px solid ${theme.palette.primary.main}`,\r\n },\r\n \"&:active\": {\r\n bgcolor: \"primary.main\",\r\n boxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n },\r\n ...outlined,\r\n },\r\n };\r\n};\r\n\r\nexport default useStyles;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { type MouseEvent, type TouchEvent, useCallback, useRef, useState } from \"react\";\r\n\r\ninterface Position {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\ninterface UseDraggableReturn {\r\n\tposition: Position;\r\n\tisDragging: boolean;\r\n\tdragRef: any;\r\n\thandleMouseDown: (_e: MouseEvent<HTMLDivElement>) => void;\r\n\thandleTouchStart: (_e: TouchEvent<HTMLDivElement>) => void;\r\n}\r\n\r\nexport function useDraggable(\r\n\tinitialPosition: Position,\r\n\tonPositionChange?: (_position: Position) => void\r\n): UseDraggableReturn {\r\n\tconst [position, setPosition] = useState<Position>(initialPosition);\r\n\r\n\tconst [isDragging, setIsDragging] = useState(false);\r\n\r\n\tconst dragRef = useRef<HTMLDivElement>();\r\n\r\n\tconst dragStart = useRef<Position>({ x: 0, y: 0 });\r\n\r\n\tconst elementStart = useRef<Position>({ x: 0, y: 0 });\r\n\r\n\tconst updatePosition = useCallback(\r\n\t\t(newPosition: Position) => {\r\n\t\t\tconst element = dragRef.current;\r\n\t\t\tif (!element) return;\r\n\r\n\t\t\tconst rect = element.getBoundingClientRect();\r\n\t\t\tconst viewportWidth = window.innerWidth;\r\n\t\t\tconst viewportHeight = window.innerHeight;\r\n\r\n\t\t\tconst constrainedPosition = {\r\n\t\t\t\tx: Math.max(0, Math.min(newPosition.x, viewportWidth - rect.width)),\r\n\t\t\t\ty: Math.max(0, Math.min(newPosition.y, viewportHeight - rect.height)),\r\n\t\t\t};\r\n\r\n\t\t\tsetPosition(constrainedPosition);\r\n\t\t\tonPositionChange?.(constrainedPosition);\r\n\t\t},\r\n\t\t[onPositionChange]\r\n\t);\r\n\r\n\tconst handleStart = useCallback(\r\n\t\t(clientX: number, clientY: number) => {\r\n\t\t\tsetIsDragging(true);\r\n\t\t\tdragStart.current = { x: clientX, y: clientY };\r\n\t\t\telementStart.current = position;\r\n\r\n\t\t\tconst handleMove = (moveClientX: number, moveClientY: number) => {\r\n\t\t\t\tconst deltaX = moveClientX - dragStart.current.x;\r\n\t\t\t\tconst deltaY = moveClientY - dragStart.current.y;\r\n\r\n\t\t\t\tupdatePosition({\r\n\t\t\t\t\tx: elementStart.current.x + deltaX,\r\n\t\t\t\t\ty: elementStart.current.y + deltaY,\r\n\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\t\tconst handleMouseMove = (e: globalThis.MouseEvent) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\thandleMove(e.clientX, e.clientY);\r\n\t\t\t};\r\n\r\n\t\t\tconst handleTouchMove = (e: globalThis.TouchEvent) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tconst touch = e.touches[0];\r\n\t\t\t\tif (touch) {\r\n\t\t\t\t\thandleMove(touch.clientX, touch.clientY);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tconst handleEnd = () => {\r\n\t\t\t\tsetIsDragging(false);\r\n\t\t\t\tdocument.removeEventListener(\"mousemove\", handleMouseMove);\r\n\t\t\t\tdocument.removeEventListener(\"mouseup\", handleEnd);\r\n\t\t\t\tdocument.removeEventListener(\"touchmove\", handleTouchMove);\r\n\t\t\t\tdocument.removeEventListener(\"touchend\", handleEnd);\r\n\t\t\t};\r\n\r\n\t\t\tdocument.addEventListener(\"mousemove\", handleMouseMove);\r\n\t\t\tdocument.addEventListener(\"mouseup\", handleEnd);\r\n\t\t\tdocument.addEventListener(\"touchmove\", handleTouchMove, {\r\n\t\t\t\tpassive: false,\r\n\t\t\t});\r\n\t\t\tdocument.addEventListener(\"touchend\", handleEnd);\r\n\t\t},\r\n\t\t[position, updatePosition]\r\n\t);\r\n\r\n\tconst handleMouseDown = useCallback(\r\n\t\t(e: MouseEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\thandleStart(e.clientX, e.clientY);\r\n\t\t},\r\n\t\t[handleStart]\r\n\t);\r\n\r\n\tconst handleTouchStart = useCallback(\r\n\t\t(e: TouchEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tconst touch = e.touches[0];\r\n\t\t\tif (touch) {\r\n\t\t\t\thandleStart(touch.clientX, touch.clientY);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[handleStart]\r\n\t);\r\n\r\n\treturn {\r\n\t\tposition,\r\n\t\tisDragging,\r\n\t\tdragRef,\r\n\t\thandleMouseDown,\r\n\t\thandleTouchStart,\r\n\t};\r\n}\r\n","// micController.ts\r\n\r\nexport type MicController = {\r\n\tstart: () => Promise<void>;\r\n\tstop: () => void;\r\n\tmute: () => void;\r\n\tunmute: () => void;\r\n\ttoggleMute: () => void;\r\n\tisMuted: () => boolean;\r\n\tgetStream: () => MediaStream | null;\r\n};\r\n\r\nexport function createMicController(\r\n\tconstraints: MediaStreamConstraints = { audio: true }\r\n): MicController {\r\n\tlet stream: MediaStream | null = null;\r\n\tlet muted = false;\r\n\r\n\tasync function start() {\r\n\t\tif (stream) return; // already started\r\n\t\tstream = await navigator.mediaDevices.getUserMedia(constraints);\r\n\t\t// default: unmuted\r\n\t\tstream.getAudioTracks().forEach((track) => (track.enabled = true));\r\n\t\tmuted = false;\r\n\t}\r\n\r\n\tfunction setEnabled(enabled: boolean) {\r\n\t\tif (!stream) return;\r\n\t\tstream.getAudioTracks().forEach((track) => (track.enabled = enabled));\r\n\t\tmuted = !enabled;\r\n\t}\r\n\r\n\tfunction mute() {\r\n\t\tsetEnabled(false);\r\n\t}\r\n\r\n\tfunction unmute() {\r\n\t\tsetEnabled(true);\r\n\t}\r\n\r\n\tfunction toggleMute() {\r\n\t\tif (muted) {\r\n\t\t\tunmute();\r\n\t\t} else {\r\n\t\t\tmute();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction stop() {\r\n\t\tif (!stream) return;\r\n\t\tstream.getTracks().forEach((t) => t.stop());\r\n\t\tstream = null;\r\n\t\tmuted = false;\r\n\t}\r\n\r\n\tfunction isMuted() {\r\n\t\treturn muted;\r\n\t}\r\n\r\n\tfunction getStream() {\r\n\t\treturn stream;\r\n\t}\r\n\r\n\treturn {\r\n\t\tstart,\r\n\t\tstop,\r\n\t\tmute,\r\n\t\tunmute,\r\n\t\ttoggleMute,\r\n\t\tisMuted,\r\n\t\tgetStream,\r\n\t};\r\n}\r\n","/**\r\n * Audio loader utility for handling MP3 files as buffers/blobs\r\n * This ensures the audio works correctly in bundled npm packages\r\n */\r\n\r\n// Import the MP3 file - bundler will handle this\r\n// @ts-ignore - MP3 module declaration\r\nimport incomingRingtoneUrl from \"../ringtones/incoming.mp3\";\r\n\r\nlet audioBlobUrl: string | null = null;\r\nlet audioBuffer: ArrayBuffer | null = null;\r\n\r\n/**\r\n * Loads the audio file as a blob URL for reliable playback\r\n * @returns Promise<string> - Blob URL or direct URL for the audio file\r\n */\r\nexport async function loadAudioAsBlob(): Promise<string> {\r\n\tif (audioBlobUrl) {\r\n\t\treturn audioBlobUrl;\r\n\t}\r\n\r\n\t// If the URL is already a data URL or absolute URL, use it directly\r\n\tif (\r\n\t\tincomingRingtoneUrl.startsWith(\"data:\") ||\r\n\t\tincomingRingtoneUrl.startsWith(\"http://\") ||\r\n\t\tincomingRingtoneUrl.startsWith(\"https://\") ||\r\n\t\tincomingRingtoneUrl.startsWith(\"blob:\")\r\n\t) {\r\n\t\treturn incomingRingtoneUrl;\r\n\t}\r\n\r\n\t// Try to fetch and convert to blob URL\r\n\ttry {\r\n\t\tconst response = await fetch(incomingRingtoneUrl);\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`HTTP ${response.status}: ${response.statusText}`);\r\n\t\t}\r\n\r\n\t\tconst blob = await response.blob();\r\n\r\n\t\t// Verify it's a valid blob\r\n\t\tif (blob.size === 0) {\r\n\t\t\tthrow new Error(\"Empty blob\");\r\n\t\t}\r\n\r\n\t\taudioBlobUrl = URL.createObjectURL(blob);\r\n\t\treturn audioBlobUrl;\r\n\t} catch (error) {\r\n\t\t// If fetch fails, the bundler may have already processed the URL\r\n\t\t// Return the original URL - it should work if tsup processed it correctly\r\n\t\tconsole.error(\"Could not create blob URL, using direct URL:\", error);\r\n\t\treturn incomingRingtoneUrl;\r\n\t}\r\n}\r\n\r\n/**\r\n * Loads the audio file as an ArrayBuffer\r\n * @returns Promise<ArrayBuffer> - Audio file as buffer\r\n */\r\nexport async function loadAudioAsBuffer(): Promise<ArrayBuffer> {\r\n\tif (audioBuffer) {\r\n\t\treturn audioBuffer;\r\n\t}\r\n\r\n\ttry {\r\n\t\tconst response = await fetch(incomingRingtoneUrl);\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`Failed to load audio: ${response.statusText}`);\r\n\t\t}\r\n\r\n\t\taudioBuffer = await response.arrayBuffer();\r\n\t\treturn audioBuffer;\r\n\t} catch (error) {\r\n\t\tconsole.error(\"Error loading audio as buffer:\", error);\r\n\t\tthrow error;\r\n\t}\r\n}\r\n\r\n/**\r\n * Creates an Audio element from the blob URL\r\n * @returns Promise<HTMLAudioElement> - Audio element ready to play\r\n */\r\nexport async function createAudioElement(): Promise<HTMLAudioElement> {\r\n\tconst audio = new Audio();\r\n\r\n\t// Set up audio properties before setting source\r\n\taudio.loop = true;\r\n\taudio.volume = 0.7;\r\n\taudio.preload = \"auto\";\r\n\r\n\t// Try multiple approaches to load the audio\r\n\tlet audioUrl: string = \"\";\r\n\r\n\t// First, try to get blob URL\r\n\ttry {\r\n\t\taudioUrl = await loadAudioAsBlob();\r\n\t} catch (error) {\r\n\t\tconsole.warn(\"Failed to load audio as blob, trying direct URL:\", error);\r\n\t\taudioUrl = incomingRingtoneUrl;\r\n\t}\r\n\r\n\t// Set up error handling with retry logic\r\n\tconst tryLoadAudio = async (url: string): Promise<boolean> => {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tconst checkCanPlay = () => {\r\n\t\t\t\t// Check if audio can play\r\n\t\t\t\tconst canPlay = audio.readyState >= HTMLMediaElement.HAVE_FUTURE_DATA;\r\n\t\t\t\tif (canPlay) {\r\n\t\t\t\t\tresolve(true);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Check for errors\r\n\t\t\t\tif (audio.error) {\r\n\t\t\t\t\tresolve(false);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Wait a bit and check again\r\n\t\t\t\tsetTimeout(checkCanPlay, 100);\r\n\t\t\t};\r\n\r\n\t\t\taudio.addEventListener(\"canplay\", () => resolve(true), { once: true });\r\n\t\t\taudio.addEventListener(\"error\", () => resolve(false), { once: true });\r\n\t\t\taudio.src = url;\r\n\t\t\taudio.load();\r\n\r\n\t\t\t// Timeout after 2 seconds\r\n\t\t\tsetTimeout(() => resolve(false), 2000);\r\n\t\t});\r\n\t};\r\n\r\n\t// Try loading with the primary URL\r\n\tlet loaded = await tryLoadAudio(audioUrl);\r\n\r\n\t// If that fails, try the original import URL directly\r\n\tif (!loaded && audioUrl !== incomingRingtoneUrl) {\r\n\t\tloaded = await tryLoadAudio(incomingRingtoneUrl);\r\n\t\tif (loaded) {\r\n\t\t\taudioUrl = incomingRingtoneUrl;\r\n\t\t}\r\n\t}\r\n\r\n\treturn audio;\r\n}\r\n\r\n/**\r\n * Cleanup function to revoke blob URLs and free memory\r\n */\r\nexport function cleanupAudioResources(): void {\r\n\tif (audioBlobUrl) {\r\n\t\tURL.revokeObjectURL(audioBlobUrl);\r\n\t\taudioBlobUrl = null;\r\n\t}\r\n\taudioBuffer = null;\r\n}\r\n\r\n/**\r\n * Get the audio URL (blob URL or fallback to direct URL)\r\n * @returns string - Audio URL\r\n */\r\nexport function getAudioUrl(): string {\r\n\treturn audioBlobUrl || incomingRingtoneUrl;\r\n}\r\n","import { memo } from \"react\";\r\nimport { ToastProvider } from \"../services/toastMessage\";\r\nimport React from \"react\";\r\nimport { SDKProviderProps } from \"../../types\";\r\n\r\nexport const SDKProvider = memo<SDKProviderProps>(({ children }) => {\r\n\treturn <ToastProvider>{children}</ToastProvider>;\r\n});\r\n\r\nSDKProvider.displayName = \"SDKProvider\";\r\n"],"mappings":"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","names":["_a","_a","import_vault","import_react","_a","axios","import_vault","data","_a","import_react","import_vault","data","_a","import_react","process_id","process_name","status","phone_number","agent_id","convox_id","import_react","import_react","import_icons_material","import_material","import_react","import_material","import_react","import_react","import_react","import_react","_a","import_material","import_jsx_runtime","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","import_react","incomingRingtoneUrl","incomingRingtoneUrl","import_vault","import_jsx_runtime","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","import_react","import_jsx_runtime","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../call-control-sdk/lib/utils/storage.ts","../call-control-sdk/lib/permissions/sdk-constants.ts","../call-control-sdk/lib/permissions/index.ts","../call-control-sdk/lib/hooks/sdk-state.ts","../call-control-sdk/lib/services/endPoint.ts","../call-control-sdk/lib/services/axios.ts","../call-control-sdk/lib/services/toastMessage.tsx","../call-control-sdk/lib/hooks/useGetCallerData.ts","../call-control-sdk/lib/hooks/useCallMonitoring.ts","../call-control-sdk/lib/components/SDKProvider.tsx","../call-control-sdk/lib/hooks/useSDKPermissions.ts","../call-control-sdk/lib/components/SDKAccessDenied.tsx","../call-control-sdk/lib/components/SDKPermissionGuard.tsx","../call-control-sdk/lib/pages/common/components/Transcript.tsx","../call-control-sdk/lib/pages/common/components/AppButton.tsx","../call-control-sdk/lib/components/SDKPageHeader.tsx","../call-control-sdk/lib/pages/callHistory/useCallHistory.ts","../call-control-sdk/lib/pages/callHistory/index.tsx","../call-control-sdk/lib/components/SDKButton.tsx","../call-control-sdk/lib/pages/campaigns/useCampaigns.ts","../call-control-sdk/lib/pages/cdrReport/useCdrReport.ts","../call-control-sdk/lib/pages/campaigns/types.ts","../call-control-sdk/lib/pages/campaigns/styles.ts","../call-control-sdk/lib/pages/campaigns/index.tsx","../call-control-sdk/lib/pages/common/components/SearchBar.tsx","../call-control-sdk/lib/pages/common/components/DateRangePicker.tsx","../call-control-sdk/lib/pages/common/components/AgentMultiSelect.tsx","../call-control-sdk/lib/pages/common/components/ReportFilterBar.tsx","../call-control-sdk/lib/pages/loginReport/useLoginReport.ts","../call-control-sdk/lib/pages/common/utils/tableStyles.ts","../call-control-sdk/lib/pages/common/components/PageHeader.tsx","../call-control-sdk/lib/pages/loginReport/index.tsx","../call-control-sdk/lib/pages/common/components/AuditReport.tsx","../call-control-sdk/lib/pages/cdrReport/index.tsx","../call-control-sdk/lib/pages/auditReport/index.tsx","../call-control-sdk/lib/pages/agentPerformanceReport/useAgentPerformanceReport.ts","../call-control-sdk/lib/pages/agentDetailReport/useAgentDetailReport.ts","../call-control-sdk/lib/pages/agentDetailReport/index.tsx","../call-control-sdk/lib/pages/agentPerformanceReport/index.tsx","../call-control-sdk/lib/pages/liveStatus/useLiveStatus.ts","../call-control-sdk/lib/pages/liveStatus/styles.ts","../call-control-sdk/lib/pages/liveStatus/index.tsx","../call-control-sdk/lib/pages/managementDashboard/useManagementDashboard.ts","../call-control-sdk/lib/pages/managementDashboard/index.tsx","../call-control-sdk/lib/pages/caroVoiceAI/index.tsx","../call-control-sdk/lib/pages/qualityAuditDashboard/index.tsx","../call-control-sdk/lib/pages/caroQualityAuditDashboard/index.tsx","../call-control-sdk/index.ts","../call-control-sdk/lib/hooks/eventsTracker.ts","../call-control-sdk/lib/hooks/useLogout.ts","../call-control-sdk/lib/hooks/useEndCall.ts","../call-control-sdk/lib/hooks/useClickToCall.ts","../call-control-sdk/lib/hooks/useGetAuthorizationToken.ts","../call-control-sdk/lib/hooks/useSDKState.ts","../call-control-sdk/lib/components/callControlPanel.tsx","../call-control-sdk/lib/components/callControls.tsx","../call-control-sdk/lib/components/dialog.tsx","../call-control-sdk/lib/services/request.ts","../call-control-sdk/lib/components/styles.ts","../call-control-sdk/lib/hooks/useDraggable.ts","../call-control-sdk/lib/services/micController.ts","../call-control-sdk/lib/utils/audioLoader.ts","../call-control-sdk/lib/pages/sdkPages.tsx","../call-control-sdk/lib/hooks/useClickToConference.ts","../call-control-sdk/lib/angular-services/index.ts"],"sourcesContent":["export const STORAGE_KEY = \"call-control-sdk-state\";\r\n","/**\r\n * SDK Permission Constants\r\n *\r\n * Defines permission codes for call control features.\r\n * These codes match the 'items' in the backend entitlements response.\r\n */\r\n\r\nexport const SDK_WILDCARD = \"*\" as const;\r\n\r\n/** Menu entitlement codes from userInfo.entitlements.menus */\r\nexport const SDK_MENU_CODES = {\r\n WILDCARD: SDK_WILDCARD,\r\n CALL_HISTORY: \"call_history\",\r\n CAMPAIGNS: \"dialer_auto\",\r\n LOGIN_REPORT: \"login_report\",\r\n CDR_REPORT: \"cdr_report\",\r\n AGENT_PERFORMANCE_REPORT: \"agent_performance\",\r\n AGENT_DETAIL_REPORT: \"agent_detail\",\r\n LIVE_STATUS: \"live_status\",\r\n MANAGEMENT_DASHBOARD: \"management_dashboard\",\r\n CARO_VOICE_AI: \"caro_voice_ai\",\r\n QUALITY_AUDIT_DASHBOARD: \"management_dashboard\",\r\n CARO_QUALITY_AUDIT_DASHBOARD: \"management_dashboard\",\r\n} as const;\r\n\r\nexport const SDK_PERMISSIONS = {\r\n WILDCARD: SDK_WILDCARD,\r\n // main object key constants\r\n\r\n CALLS: \"calls\",\r\n CALL_TRANSFER: \"call_transfer\",\r\n CALL_CONFERENCE: \"call_conference\",\r\n\r\n // in each object has items list of objects\r\n\r\n CALL_INBOUND: \"call_inbound\",\r\n CALL_OUTBOUND: \"call_outbound\",\r\n\r\n CONFERENCE: \"call_conference\",\r\n\r\n TRANSFER_BLIND: \"call_transfer_blind\",\r\n TRANSFER_ATTENDED: \"call_transfer_attended\",\r\n TRANSFER_WARM: \"call_transfer_warm\",\r\n\r\n // Campaigns\r\n CAMPAIGNS_CREATE: \"campaigns:create\",\r\n CAMPAIGNS_READ: \"campaigns:read\",\r\n CAMPAIGNS_UPDATE: \"campaigns:update\",\r\n CAMPAIGNS_DELETE: \"campaigns:delete\",\r\n CAMPAIGNS_MANAGE: \"campaigns:manage\",\r\n CAMPAIGNS_CONTROL: \"campaigns:control\",\r\n CAMPAIGNS_LEADS_CREATE: \"leads:create\",\r\n CAMPAIGNS_LEADS_READ: \"leads:read\",\r\n CAMPAIGNS_LEADS_DELETE: \"leads:delete\",\r\n CAMPAIGNS_LEADS_IMPORT: \"leads:import\",\r\n\r\n // Reports — Agent Login\r\n REPORTS_AGENT_LOGIN_READ: \"reports:agent_login:read\",\r\n REPORTS_AGENT_LOGIN_EXPORT: \"reports:agent_login:export\",\r\n REPORTS_AGENT_LOGIN_MANAGE: \"reports:agent_login:manage\",\r\n\r\n // CDR Report\r\n REPORTS_CDR_READ: \"reports:cdr:read\",\r\n REPORTS_CDR_EXPORT: \"reports:cdr:export\",\r\n REPORTS_CDR_MANAGE: \"reports:cdr:manage\",\r\n\r\n // Reports — Agent Performance / Detail\r\n REPORTS_AGENT_PERFORMANCE_READ: \"reports:agent_performance:read\",\r\n REPORTS_AGENT_PERFORMANCE_EXPORT: \"reports:agent_performance:export\",\r\n REPORTS_AGENT_PERFORMANCE_MANAGE: \"reports:agent_performance:manage\",\r\n\r\n // Supervisor Monitoring\r\n SUPERVISOR_MONITOR_LISTEN: \"supervisor:monitor:listen\",\r\n SUPERVISOR_MONITOR_WHISPER: \"supervisor:monitor:whisper\",\r\n SUPERVISOR_MONITOR_BARGE: \"supervisor:monitor:barge\",\r\n} as const;\r\n","/**\r\n * SDK Permissions Module\r\n *\r\n * Exports all permission-related utilities for the call-control SDK.\r\n */\r\n\r\n// Types and constants\r\nexport { SDK_PERMISSIONS, SDK_MENU_CODES, SDK_WILDCARD } from \"./sdk-constants\";\r\nexport {\r\n type SDKBit,\r\n type SDKEntitlements,\r\n type SDKPermissionState,\r\n type PermissionCheckResult,\r\n type ControlsFromPermissions,\r\n type SDKPermissionContextValue,\r\n} from \"./types\";\r\n\r\n// React hooks\r\n","import { getSession, removeSession, setSession } from \"@react-solutions/vault\";\r\nimport type {\r\n SDKState,\r\n CallData,\r\n ConferenceLineTypes,\r\n SDKConfig,\r\n InitSDKRes,\r\n URLConfig,\r\n ConsultInfo,\r\n} from \"../../types\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\nimport {\r\n SDK_PERMISSIONS,\r\n type SDKEntitlements,\r\n type ControlsFromPermissions,\r\n SDK_MENU_CODES,\r\n} from \"../permissions\";\r\n\r\nclass SDKStateManager {\r\n private state: SDKState;\r\n private listeners: Array<() => void> = [];\r\n private readonly STORAGE_KEY = STORAGE_KEY;\r\n\r\n private apiKey: string | undefined;\r\n private tenantId: string | undefined;\r\n\r\n constructor() {\r\n this.state = this.getInitialState();\r\n this.loadFromStorage();\r\n }\r\n\r\n private getInitialState(): SDKState {\r\n return {\r\n authorization: undefined,\r\n process: null,\r\n agentId: \"\",\r\n openConferenceDialog: false,\r\n openCallTransferDialog: false,\r\n isInitialized: false,\r\n sdkConfig: {\r\n disableEndCallButton: false,\r\n disableEndConference: false,\r\n disabledDialButton: false,\r\n disabledMoreOptionsButton: false,\r\n enableSmsServices: false,\r\n enableQueueName: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disableAlternateDialing: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n },\r\n urlConfig: {\r\n baseURL: \"\",\r\n iframeURL: \"\",\r\n iframeAPIURL: \"\",\r\n webSocketURL: \"\",\r\n coreBaseURL: \"\",\r\n id: \"\",\r\n password: \"\",\r\n },\r\n callStartTime: null,\r\n controlPanelPosition: { x: 10, y: 10 },\r\n iframePosition: {\r\n x: window.screen?.availWidth - 460,\r\n y: window.screen?.height - 580,\r\n },\r\n callData: {\r\n agent_id: -1,\r\n queue_name: \"\",\r\n hold: 0,\r\n mute: 0,\r\n status: \"\",\r\n type: \"\",\r\n event_time: \"\",\r\n phone_number: \"\",\r\n },\r\n conferenceLine: [\r\n {\r\n line: 1,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 2,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 3,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 4,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 5,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n ],\r\n hold: 0,\r\n mute: 0,\r\n agentStatus: \"\",\r\n sdk: null,\r\n isPermissionsLoaded: false,\r\n userPermissions: null,\r\n menuEntitlements: null,\r\n consultInfo: null,\r\n rootCallUuid: null,\r\n backendCallControls: null,\r\n transferLeadData: undefined,\r\n };\r\n }\r\n\r\n private loadFromStorage(): void {\r\n try {\r\n const stored = <SDKState>getSession(this.STORAGE_KEY);\r\n if (stored) {\r\n const parsedState = stored;\r\n this.state = {\r\n ...this.state,\r\n agentId: parsedState.agentId || \"\",\r\n authorization: parsedState.authorization || undefined,\r\n process: parsedState.process || null,\r\n openConferenceDialog: parsedState?.openConferenceDialog || false,\r\n openCallTransferDialog: parsedState?.openCallTransferDialog || false,\r\n isInitialized: parsedState.isInitialized || false,\r\n sdkConfig: parsedState.sdkConfig || {\r\n disableEndCallButton: false,\r\n disableEndConference: false,\r\n disabledMoreOptionsButton: false,\r\n enableSmsServices: false,\r\n enableQueueName: false,\r\n disabledDialButton: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disableAlternateDialing: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n },\r\n urlConfig: parsedState.urlConfig || {\r\n id: \"\",\r\n baseURL: \"\",\r\n iframeURL: \"\",\r\n iframeAPIURL: \"\",\r\n webSocketURL: \"\",\r\n coreBaseURL: \"\",\r\n password: \"\",\r\n },\r\n callStartTime: parsedState.callStartTime || null,\r\n controlPanelPosition: parsedState.controlPanelPosition || {\r\n x: 10,\r\n y: 10,\r\n },\r\n iframePosition: parsedState.iframePosition || {\r\n x: window.screen?.availWidth - 460,\r\n y: window.screen?.height - 580,\r\n },\r\n callData: parsedState.callData || {\r\n mobileNumber: \"\",\r\n callReferenceId: \"\",\r\n agent_id: \"\",\r\n status: \"\",\r\n type: \"\",\r\n event_time: \"\",\r\n phone_number: \"\",\r\n },\r\n conferenceLine:\r\n parsedState.conferenceLine &&\r\n Array.isArray(parsedState.conferenceLine) &&\r\n parsedState.conferenceLine.length > 0\r\n ? parsedState.conferenceLine\r\n : this.state.conferenceLine,\r\n agentStatus: parsedState.agentStatus,\r\n sdk: parsedState.sdk || null,\r\n isPermissionsLoaded: parsedState.isPermissionsLoaded || false,\r\n userPermissions: parsedState.userPermissions || null,\r\n menuEntitlements: parsedState.menuEntitlements || null,\r\n rootCallUuid: parsedState.rootCallUuid ?? null,\r\n transferLeadData: parsedState.transferLeadData ?? undefined,\r\n };\r\n }\r\n } catch (error) {\r\n console.warn(\"Failed to load SDK state:\", error);\r\n }\r\n }\r\n\r\n private saveToStorage(): void {\r\n try {\r\n const persistentState = {\r\n agentId: this.state.agentId,\r\n authorization: this.state.authorization,\r\n process: this.state.process,\r\n isInitialized: this.state.isInitialized,\r\n openConferenceDialog: this.state.openConferenceDialog,\r\n openCallTransferDialog: this.state.openCallTransferDialog,\r\n sdkConfig: this.state.sdkConfig,\r\n urlConfig: this.state.urlConfig,\r\n callStartTime: this.state.callStartTime,\r\n controlPanelPosition: this.state.controlPanelPosition,\r\n iframePosition: this.state.iframePosition,\r\n callData: this.state.callData,\r\n conferenceLine: this.state.conferenceLine,\r\n agentStatus: this.state.agentStatus,\r\n sdk: this.state.sdk,\r\n isPermissionsLoaded: this.state.isPermissionsLoaded,\r\n userPermissions: this.state.userPermissions,\r\n menuEntitlements: this.state.menuEntitlements,\r\n rootCallUuid: this.state.rootCallUuid,\r\n transferLeadData: this.state.transferLeadData,\r\n };\r\n setSession(this.STORAGE_KEY, persistentState);\r\n } catch (error) {\r\n console.warn(\"Failed to save SDK state:\", error);\r\n }\r\n }\r\n\r\n private notifyListeners(): void {\r\n this.listeners.forEach((listener) => listener());\r\n }\r\n\r\n private validateCredentials(apiKey: string, tenantId: string): void {\r\n if (!apiKey || typeof apiKey !== \"string\" || apiKey.trim().length === 0) {\r\n throw new Error(\"API key not available\");\r\n }\r\n if (\r\n !tenantId ||\r\n typeof tenantId !== \"string\" ||\r\n tenantId.trim().length === 0\r\n ) {\r\n throw new Error(\"Tenant ID not available\");\r\n }\r\n this.apiKey = apiKey.trim();\r\n this.tenantId = tenantId.trim();\r\n }\r\n\r\n public initialize(\r\n apiKey: string,\r\n tenantId: string,\r\n agentId: string,\r\n urlConfig?: URLConfig,\r\n initResult?: InitSDKRes,\r\n sdkConfig?: SDKConfig,\r\n rawBackendCallControls?: SDKConfig,\r\n ): void {\r\n this.validateCredentials(apiKey, tenantId);\r\n if (\r\n !agentId ||\r\n typeof agentId !== \"string\" ||\r\n agentId.trim().length === 0\r\n ) {\r\n throw new Error(\"Agent ID not available\");\r\n } else {\r\n this.state.agentId = agentId;\r\n this.state.openConferenceDialog = false;\r\n this.state.openCallTransferDialog = false;\r\n this.state.authorization = initResult;\r\n this.state.backendCallControls = rawBackendCallControls ?? null;\r\n this.state.sdkConfig = {\r\n disableEndCallButton: false,\r\n disableEndConference: false,\r\n disabledDialButton: false,\r\n disabledMoreOptionsButton: false,\r\n enableQueueName: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disableAlternateDialing: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n ...sdkConfig,\r\n ...initResult?.callControls,\r\n };\r\n this.state.urlConfig = {\r\n baseURL: urlConfig?.baseURL || \"\",\r\n iframeURL: urlConfig?.iframeURL || \"\",\r\n iframeAPIURL: urlConfig?.iframeAPIURL || \"\",\r\n webSocketURL: urlConfig?.webSocketURL || \"\",\r\n coreBaseURL: urlConfig?.coreBaseURL || \"\",\r\n id: initResult?.userInfo?.id ? String(initResult.userInfo.id) : \"\",\r\n password: urlConfig?.password || \"\",\r\n };\r\n this.state.isInitialized = true;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n }\r\n\r\n public getState(): SDKState {\r\n return { ...this.state };\r\n }\r\n\r\n public getCredentials(): {\r\n apiKey: string | undefined;\r\n tenantId: string | undefined;\r\n } {\r\n return { apiKey: this.apiKey, tenantId: this.tenantId };\r\n }\r\n public getSdkAuthToken(): string | undefined {\r\n return this.state.authorization?.accessToken;\r\n }\r\n\r\n public subscribe(listener: () => void): () => void {\r\n this.listeners.push(listener);\r\n return () => {\r\n const index = this.listeners.indexOf(listener);\r\n if (index > -1) {\r\n this.listeners.splice(index, 1);\r\n }\r\n };\r\n }\r\n\r\n public setTransferLeadData(data: any): void {\r\n this.state.transferLeadData = data;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public getTransferLeadData(): any {\r\n return this.state.transferLeadData;\r\n }\r\n\r\n public clearTransferLeadData(): void {\r\n this.state.transferLeadData = undefined;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n // public setHolding(isHolding: boolean): void {\r\n // \tthis.state.isHolding = isHolding;\r\n // \tthis.saveToStorage();\r\n // \tthis.notifyListeners();\r\n // }\r\n\r\n // public setMuted(isMuted: boolean): void {\r\n // \tthis.state.isMuted = isMuted;\r\n // \tthis.saveToStorage();\r\n // \tthis.notifyListeners();\r\n // }\r\n\r\n public setProcess(process: {\r\n process_id: number;\r\n process_name: string;\r\n }): void {\r\n this.state.process = process;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setControlPanelPosition(position: { x: number; y: number }): void {\r\n this.state.controlPanelPosition = position;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setIframePosition(position: { x: number; y: number }): void {\r\n this.state.iframePosition = position;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public startCall(): void {\r\n this.state.callStartTime = Date.now();\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public endCall(): void {\r\n this.state.callStartTime = null;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setInitCheck(): void {\r\n this.state.isInitialized = false;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setOpenConferenceDialog(open: boolean): void {\r\n this.state.openConferenceDialog = open;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setOpenCallTransferDialog(open: boolean): void {\r\n this.state.openCallTransferDialog = open;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setConsultInfo(info: ConsultInfo | null): void {\r\n this.state.consultInfo = info;\r\n this.notifyListeners();\r\n }\r\n\r\n public setRootCallUuid(uuid: string | null): void {\r\n this.state.rootCallUuid = uuid;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setAgentStatus(status: string): void {\r\n this.state.agentStatus = status;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public updateCallData(data: Partial<CallData>): void {\r\n this.state.callData = { ...this.state.callData, ...data };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public updateConferenceData(data: ConferenceLineTypes[]): void {\r\n this.state.conferenceLine = [...data];\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setConferenceLine(line: ConferenceLineTypes): void {\r\n if (\r\n !this.state.conferenceLine ||\r\n !Array.isArray(this.state.conferenceLine)\r\n ) {\r\n this.state.conferenceLine = this.getInitialState().conferenceLine;\r\n }\r\n\r\n const conferenceLineData = this.state.conferenceLine?.map(\r\n (each: ConferenceLineTypes) => {\r\n if (each.line === line.line) {\r\n return line;\r\n }\r\n return each;\r\n },\r\n );\r\n this.state.conferenceLine = conferenceLineData;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public resetConferenceLines(): void {\r\n this.state.conferenceLine = [\r\n {\r\n line: 1,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 2,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 3,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 4,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 5,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n ];\r\n\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public clearStorageAndReset(): void {\r\n try {\r\n removeSession(this.STORAGE_KEY);\r\n this.state = this.getInitialState();\r\n this.notifyListeners();\r\n } catch (error) {\r\n console.warn(\"Failed to clear:\", error);\r\n }\r\n }\r\n\r\n public getConferenceLines(): ConferenceLineTypes[] {\r\n return this.state.conferenceLine || [];\r\n }\r\n\r\n /**\r\n * Update SDK config with permission-based controls.\r\n * Merges the provided controls with existing config.\r\n */\r\n public updateSDKConfigFromPermissions(\r\n permissionControls: Partial<SDKConfig>,\r\n ): void {\r\n this.state.sdkConfig = {\r\n ...this.state.sdkConfig,\r\n ...permissionControls,\r\n };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n /**\r\n * Revert call consult controls back to the base permission-derived values.\r\n * Called when a CALL_STATE event arrives without call_consult_controls.\r\n */\r\n public resetConsultControls(): void {\r\n const base = this.getControlsConfig();\r\n this.state.sdkConfig = {\r\n ...this.state.sdkConfig,\r\n disableEndCallButton: base.disableEndCallButton,\r\n disableCallTransferButton: base.disableCallTransferButton,\r\n disableConferenceButton: base.disableConferenceButton,\r\n disableHoldButton: base.disableHoldButton,\r\n disableMuteButton: base.disableMuteButton,\r\n };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n // ============ Entitlement Logic (Ported from SDKPermissionManager) ============\r\n\r\n /**\r\n * Set user information (entitlements) from login response\r\n */\r\n public setSDKPermissions(userInfo: any): void {\r\n if (!userInfo) return;\r\n\r\n // In a real scenario, this would come from userInfo.entitlements?.sdk\r\n // For now, we use the structured format expected by the SDK\r\n\r\n const sdk: SDKEntitlements = userInfo.entitlements?.sdk;\r\n const sdkPermissions = Array.isArray(userInfo.permissions) ? userInfo.permissions : null;\r\n const sdkMenus = Array.isArray(userInfo.entitlements?.menus)\r\n ? userInfo.entitlements.menus\r\n : null;\r\n\r\n // const sdkMenus:any[] = [\r\n // {\r\n // \"code\": SDK_MENU_CODES.WILDCARD,\r\n // \"name\": \"Role Management\",\r\n // \"enabled\": true\r\n // },\r\n // // {\r\n // // \"code\": SDK_MENU_CODES.CALL_HISTORY,\r\n // // \"name\": \"Role Management\",\r\n // // \"enabled\": true\r\n // // }\r\n // ]\r\n\r\n // const sdkPermissions: any = [\r\n // \"campaigns:create\"\r\n // ]\r\n\r\n // const sdk: SDKEntitlements = {\r\n // calls: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.CALL_OUTBOUND,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.CALL_INBOUND,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // call_transfer: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_BLIND,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_ATTENDED,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_WARM,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // call_conference: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.CONFERENCE,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // };\r\n\r\n this.state.sdk = sdk;\r\n this.state.userPermissions = sdkPermissions\r\n this.state.menuEntitlements = sdkMenus\r\n this.state.isPermissionsLoaded = true;\r\n\r\n // Automatically update SDK config based on these new entitlements\r\n const permissionControls = this.getControlsConfig();\r\n this.updateSDKConfigFromPermissions(permissionControls);\r\n\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n /**\r\n * Check if a bit is enabled in entitlements\r\n */\r\n public isBitEnabled(\r\n category: keyof SDKEntitlements,\r\n bitCode: string,\r\n ): boolean {\r\n const sdk = this.state.sdk;\r\n if (!sdk) return false;\r\n\r\n const categoryEntitlement = sdk[category];\r\n if (!categoryEntitlement) return false;\r\n if (!categoryEntitlement.enabled) return false;\r\n\r\n if (!bitCode) return true; // Just checking category enabledness\r\n\r\n const bit = categoryEntitlement.items?.find(\r\n (item: any) => item.code === bitCode,\r\n );\r\n return bit ? bit.enabled : false;\r\n }\r\n\r\n /** Check if the user has a specific flat permission (e.g. \"calls:inbound\") */\r\n public hasPermission(permission: string): boolean {\r\n const perms = this.state.userPermissions;\r\n if (!perms) return false;\r\n return perms.includes(\"*\") || perms.includes(permission);\r\n }\r\n\r\n /** Check if any of the provided permissions is granted */\r\n public hasAnyPermission(permissions: string[]): boolean {\r\n return permissions.some((p) => this.hasPermission(p));\r\n }\r\n\r\n /** Check if all of the provided permissions are granted */\r\n public hasAllPermissions(permissions: string[]): boolean {\r\n return permissions.every((p) => this.hasPermission(p));\r\n }\r\n\r\n /** Check if a menu entitlement is enabled (e.g. \"campaign\"). Supports \"*\" wildcard. */\r\n public hasMenuFeature(code: string): boolean {\r\n const menus = this.state.menuEntitlements;\r\n if (!menus) return false;\r\n if (menus.some((m) => m.code === \"*\" && m.enabled)) return true;\r\n const entry = menus.find((m) => m.code === code);\r\n return entry ? entry.enabled : false;\r\n }\r\n\r\n /**\r\n * Get SDK controls configuration derived exclusively from structured entitlements.\r\n */\r\n public getControlsConfig(): ControlsFromPermissions {\r\n const { sdk, isPermissionsLoaded } = this.state;\r\n\r\n // If entitlements not loaded yet or missing, disable everything (Fail Closed)\r\n if (!isPermissionsLoaded || !sdk) {\r\n return {\r\n disabledDialButton: true,\r\n disableEndCallButton: true,\r\n disableCallTransferButton: true,\r\n disableBlindTransfer: true,\r\n disableAttendedTransfer: true,\r\n disableWarmTransfer: true,\r\n disableConferenceButton: true,\r\n disableHoldButton: true,\r\n disableMuteButton: true,\r\n disabledMoreOptionsButton: true,\r\n };\r\n }\r\n\r\n // --- Dial/Inbound Checks ---\r\n const isDialAllowed = this.isBitEnabled(\r\n \"calls\",\r\n SDK_PERMISSIONS.CALL_OUTBOUND,\r\n );\r\n const isInboundAllowed = this.isBitEnabled(\r\n \"calls\",\r\n SDK_PERMISSIONS.CALL_INBOUND,\r\n );\r\n const isAnyCallAllowed = isDialAllowed || isInboundAllowed;\r\n // AND with backend callControls: if backend disabled it, permissions alone can't re-enable it\r\n const backendDisabledEndCall = !!this.state.backendCallControls?.disableEndCallButton;\r\n\r\n // --- Call Controls ---\r\n const isHoldAllowed = isAnyCallAllowed;\r\n const isMuteAllowed = isAnyCallAllowed;\r\n const isEndCallAllowed = isAnyCallAllowed && !backendDisabledEndCall;\r\n const isConferenceAllowed = this.isBitEnabled(\"call_conference\", \"\");\r\n const isTransferEnabled = this.isBitEnabled(\"call_transfer\", \"\");\r\n\r\n // --- Transfer Controls ---\r\n const isBlindAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_BLIND,\r\n );\r\n const isAttendedAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_ATTENDED,\r\n );\r\n const isWarmAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_WARM,\r\n );\r\n\r\n return {\r\n disabledDialButton: !isDialAllowed,\r\n disableEndCallButton: !isEndCallAllowed,\r\n disableCallTransferButton: !isTransferEnabled,\r\n disableBlindTransfer: !isBlindAllowed,\r\n disableAttendedTransfer: !isAttendedAllowed,\r\n disableWarmTransfer: !isWarmAllowed,\r\n disableConferenceButton: !isConferenceAllowed,\r\n disableHoldButton: !isHoldAllowed,\r\n disableMuteButton: !isMuteAllowed,\r\n disabledMoreOptionsButton: false,\r\n };\r\n }\r\n}\r\n\r\nexport const sdkStateManager = new SDKStateManager();\r\n\r\nexport type { SDKStateManager };\r\n","import { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\n\r\n// export const IP = \"192.168.100.254\";\r\n\r\n// export const IFRAME_IP = \"10.10.95.25\"\r\n// export const IFRAME_URL = `https://${IFRAME_IP}:8089`;\r\n// export const IFRAME_API_URL = `https://${IFRAME_IP}:8000`;\r\n\r\n\r\n// export const BASE_URL = `http://${IP}:8095`;\r\n// export const WS_BASE_URL = `ws://${IP}:8095`;\r\n\r\n// export const IFRAME_URL = sdkStateManager?.getState()?.urlConfig?.iframeURL\r\n// export const IFRAME_API_URL = sdkStateManager?.getState()?.urlConfig?.iframeAPIURL\r\n\r\n// Dynamically get URLs from SDK state\r\nconst getBaseURL = () => sdkStateManager?.getState()?.urlConfig?.baseURL || \"\";\r\nconst getCoreURL = () => sdkStateManager?.getState()?.urlConfig?.coreBaseURL || \"\";\r\n\r\nexport const BASE_URL = getBaseURL();\r\nexport const CORE_URL = getCoreURL();\r\n\r\nexport const VERSION = {\r\n\tv1: \"/api/v1\",\r\n};\r\n\r\n// Dynamic endpoint getters that fetch URLs from SDK state at runtime\r\nexport const END_POINT = {\r\n\tget LOGIN() { return `${getBaseURL()}${VERSION.v1}/cti/login?provider=convox`; },\r\n\tget READY_AGENT() { return `${getCoreURL()}${VERSION.v1}/agents/ready`; },\r\n\tget UPDATE_AGENT_BREAK() { return `${getCoreURL()}${VERSION.v1}/agents/status`; },\r\n\tget CLICK_TO_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/dial`; },\r\n\tget HOLD_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hold`; },\r\n\tget MUTE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/mute`; },\r\n\tget UNMUTE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/mute`; },\r\n\tget END_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget LOGOUT() { return `${getBaseURL()}${VERSION.v1}/cti/logout?provider=convox`; },\r\n\r\n\tget CONFERENCE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/add`; },\r\n\tget CONFERENCE_MERGE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/merge`; },\r\n\tget CONFERENCE_CALL_HOLD_OR_UN_HOLD() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hold`; },\r\n\tget CONFERENCE_CALL_MUTE_OT_UN_MUTE() { return `${getCoreURL()}${VERSION.v1}/cti/calls/mute`; },\r\n\tget CONFERENCE_CALL_END() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget CONFERENCE_CALL_END_ALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget CONFERENCE_CALL_TRANSFER() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/transfer`; },\r\n\tget TRANSFER_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer-call`; },\r\n\tget TRANSFER_COMPLETE() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer/complete`; },\r\n\tget TRANSFER_CANCEL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer/cancel`; },\r\n\r\n\tget AGENTS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/users`; },\r\n\tget PROCESS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/processes-list`; },\r\n\tget BREAKS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/breaks`; },\r\n\tget TRANSFER_TO_DETAILS() { return `${getBaseURL()}${VERSION.v1}/cti/transfer-to-details?provider=convox`; },\r\n\tget SEND_NOTIFICATIONS() { return `${getBaseURL()}${VERSION.v1}/cti/notifications/send`; },\r\n\r\n\tget CALL_HISTORY() { return `${getBaseURL()}${VERSION.v1}/dashboard/call-history`; },\r\n\tget SENTIMENTAL_ANALYSIS() { return `${getBaseURL()}${VERSION.v1}/users/get_sentiment_analysis`; },\r\n\tget DISPOSITIONS() { return `${getBaseURL()}${VERSION.v1}/cti/calls/dispositions`; },\r\n\tget HOSPITALS_SERVICES() { return `${getBaseURL()}${VERSION.v1}/cti/hospital/services`; },\r\n\tget BLIEND_TRANSFER() { return `${getBaseURL()}${VERSION.v1}/cti/calls/blind_transfer?provider=convox`; },\r\n\r\n\tget AUTH_LOGOUT() { return `${getBaseURL()}${VERSION.v1}/auth/logout`; },\r\n\r\n\t// Permissions\r\n\tget USER_PERMISSIONS() { return `${getBaseURL()}${VERSION.v1}/rbac/users/me/permissions`; },\r\n\r\n\t// Supervisor Call Monitoring (Listen / Whisper / Barge via ChanSpy)\r\n\tget SUPERVISOR_CALL_LISTEN() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/listen`; },\r\n\tget SUPERVISOR_CALL_LEAVE() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/leave`; },\r\n\tget SUPERVISOR_CALL_CHANGE_MODE() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/mode`; },\r\n\r\n\t// Call History pages\r\n\tget CALLS_HISTORY() { return `${getBaseURL()}${VERSION.v1}/calls/history`; },\r\n\tget MISSED_CALLS() { return `${getBaseURL()}${VERSION.v1}/supervisor/missed-calls`; },\r\n\tRECORDING_BY_CALL: (call_uuid: string) => `${getBaseURL()}${VERSION.v1}/recordings/call/${call_uuid}`,\r\n\tTRANSCRIPT_BY_CALL: (call_uuid: string) => `${getBaseURL()}${VERSION.v1}/calls/${call_uuid}/transcript`,\r\n\tCALL_DATA_BY_CALL: (call_uuid: string) => `${getBaseURL()}${VERSION.v1}/cti/calls/${call_uuid}/call-data`,\r\n\tCALLSAGE_SENTIMENT: (call_id: string) => `${getBaseURL()}${VERSION.v1}/callsage?call_id=${encodeURIComponent(call_id)}&type=sentiment`,\r\n\tCALLSAGE_AUDIT: (call_id: string) => `${getBaseURL()}${VERSION.v1}/callsage?call_id=${encodeURIComponent(call_id)}&type=audit`,\r\n\r\n\t// Campaigns\r\n\tget CAMPAIGNS_GET_ALL() { return `${getBaseURL()}${VERSION.v1}/dialer/campaigns`; },\r\n\tget CAMPAIGNS_CREATE() { return `${getBaseURL()}${VERSION.v1}/dialer/campaigns`; },\r\n\tCAMPAIGNS_GET_BY_ID: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}`,\r\n\tCAMPAIGNS_UPDATE: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}`,\r\n\tCAMPAIGNS_ACTIVATE: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}/activate`,\r\n\tCAMPAIGNS_PAUSE: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}/pause`,\r\n\tCAMPAIGNS_ARCHIVE: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}/archive`,\r\n\tCAMPAIGNS_LEADS: (campaignId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads`,\r\n\tCAMPAIGNS_DELETE_LEAD: (campaignId: number | string, leadId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/${leadId}`,\r\n\tCAMPAIGNS_DIAL_PREVIEW: (campaignId: number | string, leadId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/${leadId}/dial-preview`,\r\n\tCAMPAIGNS_LEADS_UPLOAD_EXCEL: (campaignId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/upload/excel`,\r\n\tCAMPAIGNS_LEADS_TEMPLATE_EXCEL: (campaignId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/template/excel`,\r\n\tCAMPAIGNS_LEADS_EXPORT_EXCEL: (campaignId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/export/excel`,\r\n\r\n\t// Login Report\r\n\tget LOGIN_REPORT() { return `${getBaseURL()}${VERSION.v1}/reports/login-report`; },\r\n\tget LOGIN_REPORT_AGENTS() { return `${getBaseURL()}${VERSION.v1}/reports/login-report/agents`; },\r\n\tLOGIN_REPORT_AGENT_SESSIONS: (agentId: string) => `${getBaseURL()}${VERSION.v1}/reports/login-report/agents/${agentId}/sessions`,\r\n\tLOGIN_REPORT_AGENT_SESSIONS_EXPORT_EXCEL: (agentId: string) => `${getBaseURL()}${VERSION.v1}/reports/login-report/agents/${agentId}/sessions/export/excel`,\r\n\tget LOGIN_REPORT_EXPORT_EXCEL() { return `${getBaseURL()}${VERSION.v1}/reports/login-report/export/excel`; },\r\n\r\n\t// CDR Report\r\n\tget CDR_REPORT() { return `${getBaseURL()}${VERSION.v1}/reports/cdr-report`; },\r\n\tget CDR_REPORT_RECORDS() { return `${getBaseURL()}${VERSION.v1}/reports/cdr-report/records`; },\r\n\tget CDR_REPORT_EXPORT_EXCEL() { return `${getBaseURL()}${VERSION.v1}/reports/cdr-report/export/excel`; },\r\n\r\n\t// Audit Report — POST multipart/form-data (audio file + call metadata)\r\n\tget AUDIT_REPORT() { return `${getBaseURL()}${VERSION.v1}/reports/audit-report`; },\r\n\r\n\t// CDR Report filter sources (match what main app's CdrReport calls)\r\n\tget USERS_LIST() { return `${getBaseURL()}${VERSION.v1}/users/`; },\r\n\tget MASTER_QUEUES() { return `${getBaseURL()}${VERSION.v1}/master/queue`; },\r\n\r\n\t// Reports\r\n\tget AGENT_PERFORMANCE_REPORT() { return `${getBaseURL()}${VERSION.v1}/reports/agent-performance-report`; },\r\n\tget AGENT_PERFORMANCE_REPORT_AGENTS() { return `${getBaseURL()}${VERSION.v1}/reports/agent-performance-report/agents`; },\r\n\tget AGENT_PERFORMANCE_REPORT_EXPORT_EXCEL() { return `${getBaseURL()}${VERSION.v1}/reports/agent-performance-report/export/excel`; },\r\n\tAGENT_DETAIL_REPORT: (agentId: string) => `${getBaseURL()}${VERSION.v1}/reports/agent-detail-report/${agentId}`,\r\n\t// get CDR_REPORT() { return `${getBaseURL()}${VERSION.v1}/reports/cdr-report`; },\r\n\r\n\t// Queues (used by Campaigns → Queue Linking)\r\n\tget QUEUES_GET_ALL() { return `${getBaseURL()}${VERSION.v1}/master/queue`; },\r\n\tget QUEUES_CREATE() { return `${getBaseURL()}${VERSION.v1}/master/queue`; },\r\n\r\n\t// Processes\r\n\tget MASTER_PROCESS() { return `${getBaseURL()}${VERSION.v1}/master/process`; },\r\n\r\n\t// Management Dashboard\r\n\tget MANAGEMENT_DASHBOARD() { return `${getBaseURL()}${VERSION.v1}/reports/management-dashboard`; },\r\n\r\n\t// Supervisor Dashboard (Live Status)\r\n\tget DASHBOARD_TOP_STATS() { return `${getBaseURL()}${VERSION.v1}/supervisor/dashboard/top-stats`; },\r\n\tget DASHBOARD_AGENTS() { return `${getBaseURL()}${VERSION.v1}/supervisor/dashboard/agents`; },\r\n\tget DASHBOARD_QUEUES() { return `${getBaseURL()}${VERSION.v1}/supervisor/dashboard/queues`; },\r\n\tget DASHBOARD_ALERTS() { return `${getBaseURL()}${VERSION.v1}/supervisor/dashboard/alerts`; },\r\n\tget DASHBOARD_QUEUE_PULSE() { return `${getBaseURL()}${VERSION.v1}/supervisor/dashboard/queue-pulse`; },\r\n};\r\n\r\n// export const WS_END_POINT = {\r\n// \tWS: `${WS_BASE_URL}${VERSION.v1}/cti/ws`,\r\n// };\r\n\r\n// export const STORAGE_KEY = \"call-control-sdk-state\";\r\n","import axios, { AxiosInstance, AxiosResponse, AxiosError, InternalAxiosRequestConfig } from \"axios\";\r\nimport { BASE_URL } from \"./endPoint\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\nconst DEFAULT_TOKEN = sdkStateManager.getSdkAuthToken() ?? \"\";\r\n\r\nconst REQUEST_TIMEOUT = 60000;\r\n\r\nfunction getAuthToken(): string {\r\n\treturn sdkStateManager.getSdkAuthToken() ?? \"\";\r\n}\r\n\r\nfunction createAxiosInstance(): AxiosInstance {\r\n\tconst instance = axios.create({\r\n\t\t// baseURL: sdkStateManager.getState()?.urlConfig?.baseURL,\r\n\t\theaders: {\r\n\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\tAccept: \"application/json\",\r\n\t\t\t\"x-tenant-id\": sdkStateManager.getCredentials()?.tenantId ?? \"\",\r\n\t\t\t\"x-api-key\": sdkStateManager.getCredentials()?.apiKey ?? \"\",\r\n\t\t\tAuthorization: DEFAULT_TOKEN\r\n\t\t\t\t? (DEFAULT_TOKEN.startsWith(\"Bearer \") ? DEFAULT_TOKEN : `Bearer ${DEFAULT_TOKEN}`)\r\n\t\t\t\t: \"\",\r\n\t\t},\r\n\t\ttimeout: REQUEST_TIMEOUT,\r\n\t\twithCredentials: false,\r\n\t});\r\n\r\n\tinstance.interceptors.request.use(\r\n\t\t(config: InternalAxiosRequestConfig) => {\r\n\t\t\tconst token = getAuthToken();\r\n\r\n\t\t\tif (token && config.headers) {\r\n\t\t\t\t// Only add \"Bearer \" prefix if the token doesn't already have it\r\n\t\t\t\tconst authToken = token.startsWith(\"Bearer \") ? token : `Bearer ${token}`;\r\n\t\t\t\tconfig.headers.Authorization = authToken;\r\n\t\t\t}\r\n\r\n\t\t\t// Debug log for API calls\r\n\t\t\tconsole.log(\"API Request:\", {\r\n\t\t\t\turl: config.url,\r\n\t\t\t\tmethod: config.method,\r\n\t\t\t\thasToken: !!token,\r\n\t\t\t\ttokenStartsWithBearer: token?.startsWith(\"Bearer \"),\r\n\t\t\t\theaders: {\r\n\t\t\t\t\tAuthorization: config.headers.Authorization,\r\n\t\t\t\t\t\"x-tenant-id\": config.headers[\"x-tenant-id\"],\r\n\t\t\t\t\t\"x-api-key\": config.headers[\"x-api-key\"],\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t(config as any).metadata = { startTime: new Date().getTime() };\r\n\r\n\t\t\treturn config;\r\n\t\t},\r\n\t\t(error: AxiosError) => {\r\n\t\t\tconsole.error(\"Request interceptor error:\", error);\r\n\t\t\treturn Promise.reject(error);\r\n\t\t}\r\n\t);\r\n\r\n\tinstance.interceptors.response.use(\r\n\t\t(response: AxiosResponse) => {\r\n\t\t\treturn response;\r\n\t\t},\r\n\t\tasync (error: AxiosError) => {\r\n\t\t\tconst originalRequest = error.config as InternalAxiosRequestConfig & { _retry?: boolean };\r\n\r\n\t\t\tif (error.response?.status === 401 && !originalRequest._retry) {\r\n\t\t\t\tsdkStateManager.setInitCheck();\r\n\t\t\t\tconsole.warn(\"Unauthorized request, attempting retry...\");\r\n\t\t\t}\r\n\r\n\t\t\tif (!error.response) {\r\n\t\t\t\tconsole.error(\"Network error:\", error.message);\r\n\t\t\t\terror.message = \"Network error: Please check your internet connection\";\r\n\t\t\t}\r\n\r\n\t\t\tif (error.response && error.response.status >= 500) {\r\n\t\t\t\tconsole.error(\"Server error:\", error.response.status, error.response.data);\r\n\t\t\t\terror.message = \"Server error: Please try again later\";\r\n\t\t\t}\r\n\r\n\t\t\treturn Promise.reject(error);\r\n\t\t}\r\n\t);\r\n\r\n\treturn instance;\r\n}\r\n\r\nconst axiosInstance: AxiosInstance = createAxiosInstance();\r\n\r\n/* De-duplicate identical in-flight GET requests (same url + params).\r\n Concurrent identical GETs share one network call; blob/stream downloads are skipped. */\r\nconst inFlightGets = new Map<string, Promise<any>>();\r\nconst _rawGet = axiosInstance.get.bind(axiosInstance);\r\n(axiosInstance as any).get = (url: string, config?: any) => {\r\n\tif (config?.responseType && config.responseType !== \"json\") {\r\n\t\treturn _rawGet(url, config);\r\n\t}\r\n\tconst key = `${url}|${JSON.stringify(config?.params ?? {})}`;\r\n\tconst existing = inFlightGets.get(key);\r\n\tif (existing) return existing;\r\n\tconst req = _rawGet(url, config).finally(() => inFlightGets.delete(key));\r\n\tinFlightGets.set(key, req);\r\n\treturn req;\r\n};\r\n\r\n/**\r\n * Recursively find the first row array in a response body, preferring the given\r\n * keys. Handles flat arrays and arbitrary wrappers like { data: { leads: [...] } }.\r\n */\r\nexport const deepFindArray = <T = unknown>(\r\n\tbody: any,\r\n\tpreferredKeys: string[] = [],\r\n\tdepth = 0,\r\n): T[] => {\r\n\tif (Array.isArray(body)) return body as T[];\r\n\tif (!body || typeof body !== \"object\" || depth > 4) return [];\r\n\t// 1) Preferred keys first, so we grab the intended list (not an incidental array).\r\n\tfor (const k of preferredKeys) {\r\n\t\tif (Array.isArray(body[k])) return body[k] as T[];\r\n\t}\r\n\t// 2) Any direct array property at this level.\r\n\tfor (const k of Object.keys(body)) {\r\n\t\tif (Array.isArray(body[k])) return body[k] as T[];\r\n\t}\r\n\t// 3) Recurse into nested objects (handles { data: { leads: [...] } } and similar).\r\n\tfor (const k of Object.keys(body)) {\r\n\t\tconst v = body[k];\r\n\t\tif (v && typeof v === \"object\") {\r\n\t\t\tconst found = deepFindArray<T>(v, preferredKeys, depth + 1);\r\n\t\t\tif (found.length) return found;\r\n\t\t}\r\n\t}\r\n\treturn [];\r\n};\r\n\r\n/**\r\n * Recursively find the real total in a response body, wherever the envelope sits\r\n * (e.g. { total }, { data: { total } }, { leads: { data: [...], total } }).\r\n * Only descends into plain objects (never arrays), so it won't pick up a stray\r\n * `total`/`count` field on an individual row. Returns -1 when none is found.\r\n */\r\nexport const deepFindTotal = (body: any, depth = 0): number => {\r\n\tif (!body || typeof body !== \"object\" || depth > 4) return -1;\r\n\tfor (const key of [\"total\", \"totalCount\", \"totalRecords\", \"count\"]) {\r\n\t\tif (typeof body[key] === \"number\") return body[key];\r\n\t}\r\n\tfor (const k of Object.keys(body)) {\r\n\t\tconst v = body[k];\r\n\t\tif (v && typeof v === \"object\" && !Array.isArray(v)) {\r\n\t\t\tconst found = deepFindTotal(v, depth + 1);\r\n\t\t\tif (found >= 0) return found;\r\n\t\t}\r\n\t}\r\n\treturn -1;\r\n};\r\n\r\nexport default axiosInstance;\r\n","import { createContext, useContext, useState, ReactNode } from \"react\";\r\nimport { Snackbar, Alert, AlertColor } from \"@mui/material\";\r\n\r\ntype ToastContextType = {\r\n\tshowToast: (message: string, severity?: AlertColor) => void;\r\n};\r\n\r\nconst ToastContext = createContext<ToastContextType | undefined>(undefined);\r\n\r\nconst noopToast: ToastContextType = {\r\n\tshowToast: (message, severity) => {\r\n\t\tconsole.warn(`[Toast outside provider] ${severity ?? \"info\"}: ${message}`);\r\n\t},\r\n};\r\n\r\nexport const useToast = () => {\r\n\tconst ctx = useContext(ToastContext);\r\n\treturn ctx ?? noopToast;\r\n};\r\n\r\nexport const ToastProvider = ({ children }: { children: ReactNode }) => {\r\n\tconst [open, setOpen] = useState(false);\r\n\tconst [message, setMessage] = useState(\"\");\r\n\tconst [severity, setSeverity] = useState<AlertColor>(\"info\");\r\n\r\n\tconst showToast = (msg: string, sev: AlertColor = \"info\") => {\r\n\t\tsetMessage(msg);\r\n\t\tsetSeverity(sev);\r\n\t\tsetOpen(true);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<ToastContext.Provider value={{ showToast }}>\r\n\t\t\t{children}\r\n\t\t\t<Snackbar\r\n\t\t\t\topen={open}\r\n\t\t\t\tcolor={severity}\r\n\t\t\t\tautoHideDuration={3000}\r\n\t\t\t\tonClose={() => setOpen(false)}\r\n\t\t\t\tanchorOrigin={{ vertical: \"top\", horizontal: \"right\" }}\r\n\t\t\t>\r\n\t\t\t\t<Alert\r\n\t\t\t\t\tvariant=\"filled\"\r\n\t\t\t\t\tseverity={severity}\r\n\t\t\t\t\tonClose={() => setOpen(false)}\r\n\t\t\t\t\tsx={{ width: \"100%\" }}\r\n\t\t\t\t>\r\n\t\t\t\t\t{message}\r\n\t\t\t\t</Alert>\r\n\t\t\t</Snackbar>\r\n\t\t</ToastContext.Provider>\r\n\t);\r\n};\r\n","import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport type { CallData } from \"../../types\";\r\n\r\nexport const useGetCallerData = (): CallData => {\r\n\tconst sdkState = sdkStateManager.getState();\r\n\tconst { process_id, process_name, status, phone_number, agent_id, call_id, call_details } =\r\n\t\tsdkState.callData;\r\n\tconst initialLeadData = sdkStateManager.getTransferLeadData();\r\n\tconst initialCallData = {\r\n\t\tphone_number,\r\n\t\tstatus,\r\n\t\tcallReferenceId: call_id,\r\n\t\tagent_id,\r\n\t\tprocess_id,\r\n\t\tprocess_name,\r\n\t\tcall_details,\r\n\t\tauto_wrapup_time: sdkState.backendCallControls?.auto_wrapup_time ?? null,\r\n\t\t...(initialLeadData !== undefined && { lead_data: initialLeadData }),\r\n\t\tsocket_info: sdkState.callData,\r\n\t};\r\n\tconst [callData, setCallData] = useState<CallData>(initialCallData);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst unsubscribe = sdkStateManager.subscribe(() => {\r\n\t\t\tconst state = sdkStateManager.getState();\r\n\t\t\tconst { process_id, process_name, status, phone_number, agent_id, call_id, call_details, auto_wrapup_time } =\r\n\t\t\t\tstate.callData;\r\n\t\t\tconst lead_data = sdkStateManager.getTransferLeadData();\r\n\t\t\tconst currentCallData = {\r\n\t\t\t\tphone_number,\r\n\t\t\t\tstatus,\r\n\t\t\t\tcallReferenceId: call_id,\r\n\t\t\t\tagent_id,\r\n\t\t\t\tprocess_id,\r\n\t\t\t\tprocess_name,\r\n\t\t\t\tcall_details,\r\n\t\t\t\tauto_wrapup_time: auto_wrapup_time ?? state.backendCallControls?.auto_wrapup_time ?? null,\r\n\t\t\t\t...(lead_data !== undefined && { lead_data }),\r\n\t\t\t\tsocket_info: state.callData,\r\n\t\t\t};\r\n\t\t\tsetCallData(currentCallData);\r\n\t\t});\r\n\r\n\t\treturn unsubscribe;\r\n\t}, []);\r\n\r\n\treturn callData;\r\n};\r\n","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","import { memo } from \"react\";\r\nimport { ToastProvider } from \"../services/toastMessage\";\r\nimport React from \"react\";\r\nimport { SDKProviderProps } from \"../../types\";\r\n\r\nexport const SDKProvider = memo<SDKProviderProps>(({ children }) => {\r\n\treturn <ToastProvider>{children}</ToastProvider>;\r\n});\r\n\r\nSDKProvider.displayName = \"SDKProvider\";\r\n","import { useState, useEffect, useCallback } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport type { SDKEntitlements } from \"../permissions/types\";\r\n\r\nexport interface SDKPermissionsHook {\r\n permissions: string[];\r\n menuEntitlements: Array<{ code: string; name: string; enabled: boolean }>;\r\n isLoaded: boolean;\r\n hasPermission: (permission: string) => boolean;\r\n hasAnyPermission: (permissions: string[]) => boolean;\r\n hasAllPermissions: (permissions: string[]) => boolean;\r\n hasMenuFeature: (code: string) => boolean;\r\n isBitEnabled: (category: keyof SDKEntitlements, bitCode: string) => boolean;\r\n}\r\n\r\nexport function useSDKPermissions(): SDKPermissionsHook {\r\n const [state, setState] = useState(() => sdkStateManager.getState());\r\n\r\n useEffect(() => {\r\n const unsubscribe = sdkStateManager.subscribe(() => {\r\n setState(sdkStateManager.getState());\r\n });\r\n return unsubscribe;\r\n }, []);\r\n\r\n const hasPermission = useCallback(\r\n (permission: string) => sdkStateManager.hasPermission(permission),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.userPermissions],\r\n );\r\n\r\n const hasAnyPermission = useCallback(\r\n (permissions: string[]) => sdkStateManager.hasAnyPermission(permissions),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.userPermissions],\r\n );\r\n\r\n const hasAllPermissions = useCallback(\r\n (permissions: string[]) => sdkStateManager.hasAllPermissions(permissions),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.userPermissions],\r\n );\r\n\r\n const hasMenuFeature = useCallback(\r\n (code: string) => sdkStateManager.hasMenuFeature(code),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.menuEntitlements],\r\n );\r\n\r\n const isBitEnabled = useCallback(\r\n (category: keyof SDKEntitlements, bitCode: string) =>\r\n sdkStateManager.isBitEnabled(category, bitCode),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.sdk],\r\n );\r\n\r\n return {\r\n permissions: state.userPermissions ?? [],\r\n menuEntitlements: state.menuEntitlements ?? [],\r\n isLoaded: state.isPermissionsLoaded,\r\n hasPermission,\r\n hasAnyPermission,\r\n hasAllPermissions,\r\n hasMenuFeature,\r\n isBitEnabled,\r\n };\r\n}\r\n","import React from \"react\";\r\nimport { Box, Paper, Typography, useTheme } from \"@mui/material\";\r\nimport { alpha } from \"@mui/material/styles\";\r\nimport LockOutlinedIcon from \"@mui/icons-material/LockOutlined\";\r\n\r\ninterface SDKAccessDeniedProps {\r\n message?: string;\r\n}\r\n\r\nexport const SDKAccessDenied: React.FC<SDKAccessDeniedProps> = ({\r\n message = \"You don't have the necessary permissions to view this content.\",\r\n}) => {\r\n const theme = useTheme();\r\n\r\n return (\r\n <Box\r\n sx={{\r\n p: 4,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n minHeight: 250,\r\n }}\r\n >\r\n <Paper\r\n elevation={0}\r\n sx={{\r\n p: 4,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n bgcolor: alpha(theme.palette.error.main, 0.05),\r\n borderRadius: 3,\r\n border: \"1px dashed\",\r\n borderColor: alpha(theme.palette.error.main, 0.3),\r\n maxWidth: 420,\r\n textAlign: \"center\",\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n bgcolor: alpha(theme.palette.error.main, 0.1),\r\n color: \"error.main\",\r\n borderRadius: \"50%\",\r\n p: 2,\r\n display: \"flex\",\r\n mb: 2,\r\n }}\r\n >\r\n <LockOutlinedIcon sx={{ fontSize: 32 }} />\r\n </Box>\r\n <Typography variant=\"h6\" color=\"text.primary\" gutterBottom fontWeight=\"600\" sx={{ mb: 1 }}>\r\n Access Denied\r\n </Typography>\r\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 0 }}>\r\n {message}\r\n </Typography>\r\n </Paper>\r\n </Box>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport { useSDKPermissions } from \"../hooks/useSDKPermissions\";\r\nimport { SDKAccessDenied } from \"./SDKAccessDenied\";\r\n\r\ninterface SDKPermissionGuardProps {\r\n children?: React.ReactNode;\r\n /** Single permission code (e.g. \"calls:inbound\") */\r\n permission?: string;\r\n /** Multiple permission codes — ANY match grants access by default */\r\n permissions?: string[];\r\n /** When true, ALL permissions must be granted */\r\n requireAll?: boolean;\r\n /** One or more menu feature codes — ANY match grants access by default */\r\n menuFeature?: string | string[];\r\n /** When true, ALL menu features must be enabled */\r\n requireAllMenus?: boolean;\r\n /** Custom fallback rendered when access is denied */\r\n fallback?: React.ReactNode;\r\n /** Show the default Access Denied UI when denied. Defaults to true. */\r\n showFallback?: boolean;\r\n /** Callback fired when the guard denies access */\r\n onDenied?: () => void;\r\n}\r\n\r\nexport const SDKPermissionGuard: React.FC<SDKPermissionGuardProps> = ({\r\n children,\r\n permission,\r\n permissions,\r\n requireAll = false,\r\n menuFeature,\r\n requireAllMenus = false,\r\n fallback,\r\n showFallback = true,\r\n onDenied,\r\n}) => {\r\n const { isLoaded, hasPermission, hasAnyPermission, hasAllPermissions, hasMenuFeature } =\r\n useSDKPermissions();\r\n\r\n if (!isLoaded) return null;\r\n\r\n const isAllowed = checkAccess({\r\n permission,\r\n permissions,\r\n requireAll,\r\n menuFeature,\r\n requireAllMenus,\r\n hasPermission,\r\n hasAnyPermission,\r\n hasAllPermissions,\r\n hasMenuFeature,\r\n });\r\n\r\n if (!isAllowed) {\r\n onDenied?.();\r\n if (fallback !== undefined) return <>{fallback}</>;\r\n if (showFallback) return <SDKAccessDenied />;\r\n return null;\r\n }\r\n\r\n return <>{children}</>;\r\n};\r\n\r\nfunction checkAccess({\r\n permission,\r\n permissions,\r\n requireAll,\r\n menuFeature,\r\n requireAllMenus,\r\n hasPermission,\r\n hasAnyPermission,\r\n hasAllPermissions,\r\n hasMenuFeature,\r\n}: {\r\n permission?: string;\r\n permissions?: string[];\r\n requireAll: boolean;\r\n menuFeature?: string | string[];\r\n requireAllMenus: boolean;\r\n hasPermission: (p: string) => boolean;\r\n hasAnyPermission: (p: string[]) => boolean;\r\n hasAllPermissions: (p: string[]) => boolean;\r\n hasMenuFeature: (c: string) => boolean;\r\n}): boolean {\r\n const menuCodes = menuFeature\r\n ? Array.isArray(menuFeature) ? menuFeature : [menuFeature]\r\n : [];\r\n\r\n const hasNoGuards =\r\n !permission &&\r\n (!permissions || permissions.length === 0) &&\r\n menuCodes.length === 0;\r\n\r\n if (hasNoGuards) return true;\r\n\r\n if (menuCodes.length > 0) {\r\n const menuGranted = requireAllMenus\r\n ? menuCodes.every((c) => hasMenuFeature(c))\r\n : menuCodes.some((c) => hasMenuFeature(c));\r\n if (!menuGranted) return false;\r\n }\r\n\r\n if (permission && !hasPermission(permission)) return false;\r\n\r\n if (permissions && permissions.length > 0) {\r\n const granted = requireAll ? hasAllPermissions(permissions) : hasAnyPermission(permissions);\r\n if (!granted) return false;\r\n }\r\n\r\n return true;\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n\tAvatar,\r\n\tBox,\r\n\tCircularProgress,\r\n\tRating,\r\n\tStack,\r\n\tTooltip,\r\n\tTypography,\r\n} from \"@mui/material\";\r\nimport axiosInstance from \"../../../services/axios\";\r\nimport { END_POINT } from \"../../../services/endPoint\";\r\nimport type { CallHistoryItem, TranscriptData, SentimentMetric, ConversationTypeClassification } from \"../../callHistory/types\";\r\n\r\n// ──── Gauge ───────────────────────────────────────────────────────────────────\r\n\r\nconst GAUGE_COLORS = [\"#e74c3c\", \"#e67e22\", \"#f1c40f\", \"#a3d977\", \"#2ecc71\"];\r\n\r\nfunction scoreColor(score: number) {\r\n\tconst idx = Math.max(0, Math.min(4, Math.round(score) - 1));\r\n\treturn GAUGE_COLORS[idx];\r\n}\r\n\r\nfunction GaugeTooltip({ metric }: { metric?: SentimentMetric }) {\r\n\tif (!metric) return <>—</>;\r\n\treturn (\r\n\t\t<Box sx={{ maxWidth: 240 }}>\r\n\t\t\t{typeof metric.Model_Prediction_Confidence_Level === \"number\" && (\r\n\t\t\t\t<Typography sx={{ fontSize: \"0.75rem\", fontWeight: 600, mb: 0.5 }}>\r\n\t\t\t\t\tModel Confidence: {metric.Model_Prediction_Confidence_Level}%\r\n\t\t\t\t</Typography>\r\n\t\t\t)}\r\n\t\t\t<Typography sx={{ fontSize: \"0.72rem\", lineHeight: 1.4 }}>\r\n\t\t\t\t{metric.Observations ?? \"\"}\r\n\t\t\t</Typography>\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\nfunction Gauge({ score, label }: { score: number; label: string }) {\r\n\tconst max = 5;\r\n\tconst radius = 32;\r\n\tconst stroke = 7;\r\n\tconst circumference = 2 * Math.PI * radius;\r\n\tconst pct = Math.max(0, Math.min(1, score / max));\r\n\tconst dash = circumference * pct;\r\n\tconst color = scoreColor(score);\r\n\r\n\treturn (\r\n\t\t<Box sx={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", px: 1 }}>\r\n\t\t\t<Box sx={{ position: \"relative\", width: 80, height: 80 }}>\r\n\t\t\t\t<svg width={80} height={80} viewBox=\"0 0 80 80\">\r\n\t\t\t\t\t<circle cx={40} cy={40} r={radius} fill=\"none\" stroke=\"#eee\" strokeWidth={stroke} />\r\n\t\t\t\t\t<circle\r\n\t\t\t\t\t\tcx={40}\r\n\t\t\t\t\t\tcy={40}\r\n\t\t\t\t\t\tr={radius}\r\n\t\t\t\t\t\tfill=\"none\"\r\n\t\t\t\t\t\tstroke={color}\r\n\t\t\t\t\t\tstrokeWidth={stroke}\r\n\t\t\t\t\t\tstrokeLinecap=\"round\"\r\n\t\t\t\t\t\tstrokeDasharray={`${dash} ${circumference - dash}`}\r\n\t\t\t\t\t\ttransform=\"rotate(-90 40 40)\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t</svg>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\tinset: 0,\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\tfontSize: 18,\r\n\t\t\t\t\t\tfontWeight: 600,\r\n\t\t\t\t\t\tcolor: \"#444\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{score}\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t\t<Typography\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tmt: 0.5,\r\n\t\t\t\t\tfontSize: \"0.7rem\",\r\n\t\t\t\t\tcolor: \"primary.main\",\r\n\t\t\t\t\tfontWeight: 600,\r\n\t\t\t\t\ttextAlign: \"center\",\r\n\t\t\t\t\tlineHeight: 1.2,\r\n\t\t\t\t\tmaxWidth: 110,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t{label}\r\n\t\t\t</Typography>\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\n// ──── Classification Bar ──────────────────────────────────────────────────────\r\n\r\nfunction ClassificationBar({ classification }: { classification?: ConversationTypeClassification }) {\r\n\t// Build segments dynamically from all keys (mirrors CRM's linearProgressBar)\r\n\tconst COLOR_MAP: Record<string, string> = {\r\n\t\tInformational_Queries: \"#5bc0eb\",\r\n\t\tAction_Oriented_Queries: \"#3aa3d0\",\r\n\t\tEscalations_or_Complaints: \"#9b59b6\",\r\n\t};\r\n\tconst segments = Object.entries(classification ?? {})\r\n\t\t.filter(([, v]) => v != null)\r\n\t\t.map(([key, value]) => ({\r\n\t\t\tlabel: key.replaceAll(\"_\", \" \"),\r\n\t\t\tvalue: Number(value) || 0,\r\n\t\t\tcolor: COLOR_MAP[key] ?? \"#7e57c2\",\r\n\t\t}));\r\n\tconst total = segments.reduce((s, seg) => s + seg.value, 0) || 1;\r\n\r\n\treturn (\r\n\t\t<Box>\r\n\t\t\t<Stack direction=\"row\" spacing={2} mb={0.75} sx={{ flexWrap: \"wrap\", rowGap: 0.5 }}>\r\n\t\t\t\t{segments.map((s) => (\r\n\t\t\t\t\t<Typography key={s.label} sx={{ fontSize: \"0.72rem\", color: s.color, fontWeight: 600 }}>\r\n\t\t\t\t\t\t{s.label}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t))}\r\n\t\t\t</Stack>\r\n\t\t\t<Box sx={{ display: \"flex\", width: \"100%\", height: 8, borderRadius: 4, overflow: \"hidden\" }}>\r\n\t\t\t\t{segments.map((s) => (\r\n\t\t\t\t\t<Box key={s.label} sx={{ width: `${(s.value / total) * 100}%`, backgroundColor: s.color }} />\r\n\t\t\t\t))}\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\n// ──── Section Box ─────────────────────────────────────────────────────────────\r\n\r\nfunction SectionBox({ title, children }: { title: string; children: React.ReactNode }) {\r\n\treturn (\r\n\t\t<Box sx={(t) => ({ border: `1.5px solid ${t.palette.primary.main}`, borderRadius: 1, p: 1, mb: 1.25 })}>\r\n\t\t\t<Typography sx={{ fontSize: \"0.75rem\", fontWeight: 700, mb: 0.5 }}>{title}</Typography>\r\n\t\t\t{children}\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\n// ──── Resolve API response shape ──────────────────────────────────────────────\r\n\r\nfunction resolveTranscriptData(raw: any): TranscriptData | null {\r\n\tif (!raw) return null;\r\n\tconst payload = raw.data ?? raw;\r\n\r\n\t// New shape: { Call_Center_Interaction_Hospital_Service: {...}, transcription?: string }\r\n\tif (payload.Call_Center_Interaction_Hospital_Service) {\r\n\t\treturn {\r\n\t\t\ttranscription: payload.transcription,\r\n\t\t\tsentiment_analysis: {\r\n\t\t\t\tCall_Center_Interaction_Hospital_Service: payload.Call_Center_Interaction_Hospital_Service,\r\n\t\t\t},\r\n\t\t};\r\n\t}\r\n\t// Legacy shape: { transcription, sentiment_analysis: { Call_Center_Interaction_Hospital_Service } }\r\n\treturn payload as TranscriptData;\r\n}\r\n\r\n// ──── Main Transcript Component ───────────────────────────────────────────────\r\n\r\ninterface TranscriptProps {\r\n\trow: CallHistoryItem;\r\n}\r\n\r\nconst Transcript: React.FC<TranscriptProps> = ({ row }) => {\r\n\tconst [transcript, setTranscript] = useState<TranscriptData | null>(null);\r\n\tconst [loading, setLoading] = useState(true);\r\n\r\n\tuseEffect(() => {\r\n\t\tlet cancelled = false;\r\n\t\tsetLoading(true);\r\n\t\taxiosInstance\r\n\t\t\t.get(END_POINT.CALLSAGE_SENTIMENT(row.call_uuid))\r\n\t\t\t.then((res) => {\r\n\t\t\t\tif (!cancelled) setTranscript(resolveTranscriptData(res.data));\r\n\t\t\t})\r\n\t\t\t.catch(() => {\r\n\t\t\t\tif (!cancelled) setTranscript(null);\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tif (!cancelled) setLoading(false);\r\n\t\t\t});\r\n\t\treturn () => { cancelled = true; };\r\n\t}, [row.call_uuid]);\r\n\r\n\tif (loading) {\r\n\t\treturn (\r\n\t\t\t<Box display=\"flex\" justifyContent=\"center\" py={3}>\r\n\t\t\t\t<CircularProgress size={22} />\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n\r\n\tconst svc = transcript?.sentiment_analysis?.Call_Center_Interaction_Hospital_Service;\r\n\tconst summary = svc?.Call_Summary;\r\n\tconst breakdown = svc?.Sentiment_Analysis_Breakdown;\r\n\tconst patient = breakdown?.Patient_Sentiment_Analysis ?? {};\r\n\tconst agent = breakdown?.Agent_Sentiment_Analysis ?? {};\r\n\tconst oss = breakdown?.[\"Overall_Sentiment_Score_(OSS)\"];\r\n\tconst classification = svc?.Conversation_Type_Classification;\r\n\tconst positives = svc?.Key_Highlights_Issues_Identified?.Positive_Aspects ?? [];\r\n\tconst improvements = svc?.Key_Highlights_Issues_Identified?.Areas_for_Improvement ?? [];\r\n\tconst lines = (transcript?.transcription ?? \"\").split(\"\\n\").filter((l) => l.trim().length > 0);\r\n\r\n\t// Dynamic aspect iteration — mirrors CRM's processSentimentData approach\r\n\tconst patientAspects = Object.entries(patient).filter(([key]) => key !== \"Overall_Sentiment\");\r\n\tconst agentAspects = Object.entries(agent).filter(([key]) => key !== \"Overall_Agent_Performance\");\r\n\r\n\tconst patientAvg = patient[\"Overall_Sentiment\"]?.Sentiment_Score\r\n\t\t?? (patientAspects.reduce((sum, [, m]) => sum + (m?.Sentiment_Score ?? 0), 0) / (patientAspects.length || 1));\r\n\tconst agentAvg = agent[\"Overall_Agent_Performance\"]?.Sentiment_Score\r\n\t\t?? (agentAspects.reduce((sum, [, m]) => sum + (m?.Sentiment_Score ?? 0), 0) / (agentAspects.length || 1));\r\n\tconst overall = oss?.Sentiment_Score ?? (patientAvg + agentAvg) / 2;\r\n\r\n\tif (!svc && lines.length === 0) {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<Typography fontWeight={600} fontSize=\"0.85rem\" mb={0.5}>\r\n\t\t\t\t\tCall Details\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<Typography variant=\"body2\" fontSize=\"0.82rem\">\r\n\t\t\t\t\tCall UID: {row.call_uuid}\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<Typography variant=\"body2\" fontSize=\"0.82rem\">\r\n\t\t\t\t\tAgent: {row.agent_id ?? \"Unassigned\"}\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<Typography variant=\"body2\" fontSize=\"0.82rem\" color=\"#999\" mt={1}>\r\n\t\t\t\t\tNo transcript available for this call.\r\n\t\t\t\t</Typography>\r\n\t\t\t</>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" }, gap: 1.5 }}>\r\n\t\t\t{/* LEFT — Summary + Transcript (transcript hidden when not available) */}\r\n\t\t\t<Box>\r\n\t\t\t\t<Box sx={{ p: 1.25, border: \"1px solid #e0e0e0\", borderRadius: 1, backgroundColor: \"#fff\", mb: 1.25 }}>\r\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" mb={0.5}>\r\n\t\t\t\t\t\t<Typography sx={{ fontWeight: 700, fontSize: \"0.85rem\", color: \"primary.main\" }}>\r\n\t\t\t\t\t\t\tCall Summary\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" spacing={0.5}>\r\n\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.75rem\", color: \"#555\" }}>Overall Satisfaction:</Typography>\r\n\t\t\t\t\t\t\t<Rating size=\"small\" value={overall} precision={0.5} readOnly />\r\n\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t</Stack>\r\n\t\t\t\t\t<Typography sx={{ fontSize: \"0.78rem\", color: \"#444\", lineHeight: 1.45 }}>\r\n\t\t\t\t\t\t{summary ?? \"-\"}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t{lines.length > 0 ? (\r\n\t\t\t\t\t<Box sx={{ p: 1.25, border: \"1px solid #e0e0e0\", borderRadius: 1, backgroundColor: \"#fff\" }}>\r\n\t\t\t\t\t\t<Typography sx={{ fontWeight: 700, fontSize: \"0.85rem\", color: \"primary.main\", mb: 1 }}>\r\n\t\t\t\t\t\t\tTranscript\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t<Box sx={{ maxHeight: 360, overflowY: \"auto\", pr: 0.5 }}>\r\n\t\t\t\t\t\t\t{lines.map((line, idx) => {\r\n\t\t\t\t\t\t\t\tconst isPatient = line.trim().toLowerCase().startsWith(\"patient\");\r\n\t\t\t\t\t\t\t\tconst text = line.replace(/^\\s*(Patient|Agent)\\s*:\\s*/i, \"\");\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tkey={idx}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: isPatient ? \"flex-end\" : \"flex-start\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tmb: 0.75,\r\n\t\t\t\t\t\t\t\t\t\t\tgap: 0.75,\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{!isPatient && <Avatar sx={{ width: 22, height: 22, fontSize: 12 }} />}\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={(t) => ({\r\n\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"70%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tpx: 1.25,\r\n\t\t\t\t\t\t\t\t\t\t\t\tpy: 0.75,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: isPatient ? \"8px 8px 0 8px\" : \"8px 8px 8px 0\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: isPatient ? t.palette.primary.main : \"#fff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: isPatient ? t.palette.common.white : \"#222\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tborder: isPatient ? \"none\" : \"1px solid #e0e0e0\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.8rem\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1.4,\r\n\t\t\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{text}\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t{isPatient && <Avatar sx={{ width: 22, height: 22, fontSize: 12 }} />}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<Box sx={{ p: 1.25, border: \"1px solid #e0e0e0\", borderRadius: 1, backgroundColor: \"#fff\" }}>\r\n\t\t\t\t\t\t<Typography sx={{ fontWeight: 700, fontSize: \"0.9rem\", color: \"primary.main\", mb: 1 }}>\r\n\t\t\t\t\t\t\tKey Highlights & Issues Identified\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t<Box sx={{ maxHeight: 180, overflowY: \"auto\", pr: 0.5 }}>\r\n\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.82rem\", fontWeight: 700, color: \"#2ecc71\", mb: 0.5 }}>\r\n\t\t\t\t\t\t\t\t✅ Positive Aspects:\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t{positives.length > 0 ?\r\n\t\t\t\t\t\t\t\tpositives.map((p, i) => (\r\n\t\t\t\t\t\t\t\t\t<Typography key={i} sx={{ fontSize: \"0.78rem\", color: \"#333\", pl: 1.5, mb: 0.25 }}>\r\n\t\t\t\t\t\t\t\t\t\t• {p}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t:\t<Typography sx={{ fontSize: \"0.78rem\", color: \"#999\", pl: 1.5 }}>—</Typography>}\r\n\r\n\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.82rem\", fontWeight: 700, color: \"#e67e22\", mt: 1, mb: 0.5 }}>\r\n\t\t\t\t\t\t\t\t⚠️ Areas of Improvements:\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t{improvements.length > 0 ?\r\n\t\t\t\t\t\t\t\timprovements.map((p, i) => (\r\n\t\t\t\t\t\t\t\t\t<Typography key={i} sx={{ fontSize: \"0.78rem\", color: \"#333\", pl: 1.5, mb: 0.25 }}>\r\n\t\t\t\t\t\t\t\t\t\t• {p}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t:\t<Typography sx={{ fontSize: \"0.78rem\", color: \"#999\", pl: 1.5 }}>—</Typography>}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</Box>\r\n\r\n\t\t\t{/* RIGHT — Sentiment Analysis + Key Highlights (highlights hidden when moved to left) */}\r\n\t\t\t<Box>\r\n\t\t\t\t<Box sx={{ p: 1.25, border: \"1px solid #e0e0e0\", borderRadius: 1, backgroundColor: \"#fff\", mb: lines.length > 0 ? 1.25 : 0 }}>\r\n\t\t\t\t\t<Typography sx={{ fontWeight: 700, fontSize: \"0.9rem\", color: \"primary.main\", mb: 1 }}>\r\n\t\t\t\t\t\tSentiment Analysis\r\n\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: 1, mb: 1 }}>\r\n\t\t\t\t\t\t<SectionBox title=\"Patient Sentiment\">\r\n\t\t\t\t\t\t\t<Stack direction=\"row\" justifyContent=\"space-around\" flexWrap=\"wrap\" mb={0.5}>\r\n\t\t\t\t\t\t\t\t{patientAspects.map(([key, metric]) => (\r\n\t\t\t\t\t\t\t\t\t<Tooltip key={key} title={<GaugeTooltip metric={metric} />} arrow>\r\n\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t<Gauge\r\n\t\t\t\t\t\t\t\t\t\t\t\tscore={metric?.Sentiment_Score ?? 0}\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={key.replaceAll(\"_\", \" \")}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" spacing={0.5}>\r\n\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.7rem\", fontWeight: 600 }}>Patient Sentiment:</Typography>\r\n\t\t\t\t\t\t\t\t<Rating size=\"small\" value={patientAvg} precision={0.5} readOnly />\r\n\t\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t\t</SectionBox>\r\n\r\n\t\t\t\t\t\t<SectionBox title=\"Agent Performance\">\r\n\t\t\t\t\t\t\t<Stack direction=\"row\" justifyContent=\"space-around\" flexWrap=\"wrap\" mb={0.5}>\r\n\t\t\t\t\t\t\t\t{agentAspects.map(([key, metric]) => (\r\n\t\t\t\t\t\t\t\t\t<Tooltip key={key} title={<GaugeTooltip metric={metric} />} arrow>\r\n\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t<Gauge\r\n\t\t\t\t\t\t\t\t\t\t\t\tscore={metric?.Sentiment_Score ?? 0}\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={key.replaceAll(\"_\", \" \")}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" spacing={0.5}>\r\n\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.7rem\", fontWeight: 600 }}>Agent Performance:</Typography>\r\n\t\t\t\t\t\t\t\t<Rating size=\"small\" value={agentAvg} precision={0.5} readOnly />\r\n\t\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t\t</SectionBox>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<SectionBox title=\"Conversation Classification\">\r\n\t\t\t\t\t\t<ClassificationBar classification={classification} />\r\n\t\t\t\t\t</SectionBox>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t{lines.length > 0 && (\r\n\t\t\t\t\t<Box sx={{ p: 1.25, border: \"1px solid #e0e0e0\", borderRadius: 1, backgroundColor: \"#fff\" }}>\r\n\t\t\t\t\t\t<Typography sx={{ fontWeight: 700, fontSize: \"0.9rem\", color: \"primary.main\", mb: 1 }}>\r\n\t\t\t\t\t\t\tKey Highlights & Issues Identified\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t<Box sx={{ maxHeight: 180, overflowY: \"auto\", pr: 0.5 }}>\r\n\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.82rem\", fontWeight: 700, color: \"#2ecc71\", mb: 0.5 }}>\r\n\t\t\t\t\t\t\t\t✅ Positive Aspects:\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t{positives.length > 0 ?\r\n\t\t\t\t\t\t\t\tpositives.map((p, i) => (\r\n\t\t\t\t\t\t\t\t\t<Typography key={i} sx={{ fontSize: \"0.78rem\", color: \"#333\", pl: 1.5, mb: 0.25 }}>\r\n\t\t\t\t\t\t\t\t\t\t• {p}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t:\t<Typography sx={{ fontSize: \"0.78rem\", color: \"#999\", pl: 1.5 }}>—</Typography>}\r\n\r\n\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.82rem\", fontWeight: 700, color: \"#e67e22\", mt: 1, mb: 0.5 }}>\r\n\t\t\t\t\t\t\t\t⚠️ Areas of Improvements:\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t{improvements.length > 0 ?\r\n\t\t\t\t\t\t\t\timprovements.map((p, i) => (\r\n\t\t\t\t\t\t\t\t\t<Typography key={i} sx={{ fontSize: \"0.78rem\", color: \"#333\", pl: 1.5, mb: 0.25 }}>\r\n\t\t\t\t\t\t\t\t\t\t• {p}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t:\t<Typography sx={{ fontSize: \"0.78rem\", color: \"#999\", pl: 1.5 }}>—</Typography>}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n};\r\n\r\nexport default Transcript;\r\n","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","import React from \"react\";\r\nimport { Box, IconButton, Typography } from \"@mui/material\";\r\nimport ArrowBackIcon from \"@mui/icons-material/ArrowBack\";\r\n\r\ninterface SDKPageHeaderProps {\r\n\ttitle: string;\r\n\tsubtitle?: React.ReactNode;\r\n\tavatar?: React.ReactNode;\r\n\tshowBack?: boolean;\r\n\tonBack?: () => void;\r\n\tactions?: React.ReactNode;\r\n\tcount?: number;\r\n\tcountLabel?: string;\r\n}\r\n\r\nexport function SDKPageHeader({\r\n\ttitle,\r\n\tsubtitle,\r\n\tavatar,\r\n\tshowBack = false,\r\n\tonBack,\r\n\tactions,\r\n\tcount,\r\n\tcountLabel = \"items\",\r\n}: SDKPageHeaderProps) {\r\n\treturn (\r\n\t\t<Box sx={{ px: { xs: 2, md: 2.5 }, py: \"14px\" }}>\r\n\t\t\t<Box\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\talignItems: { xs: \"flex-start\", sm: \"center\" },\r\n\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\tflexDirection: { xs: \"column\", sm: \"row\" },\r\n\t\t\t\t\tgap: 1,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t{/* Left: back + avatar + title */}\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.25, minWidth: 0 }}>\r\n\t\t\t\t\t{showBack && (\r\n\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\tonClick={onBack}\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\twidth: 30, height: 30, flexShrink: 0,\r\n\t\t\t\t\t\t\t\tborder: \"none\", borderRadius: \"6px\",\r\n\t\t\t\t\t\t\t\tbackgroundColor: \"action.hover\", color: \"text.secondary\",\r\n\t\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: \"action.selected\", color: \"text.primary\" },\r\n\t\t\t\t\t\t\t\ttransition: \"all 0.15s ease\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<ArrowBackIcon sx={{ fontSize: 15 }} />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{avatar}\r\n\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\tfontSize: { xs: \"1.25rem\", sm: \"1.5rem\", lg: \"1.75rem\" },\r\n\t\t\t\t\t\t\t\tcolor: \"text.primary\",\r\n\t\t\t\t\t\t\t\tlineHeight: 1.3,\r\n\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\r\n\t\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\ttextOverflow: \"ellipsis\",\r\n\t\t\t\t\t\t\t\tpl: !showBack ? 0 : 2,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t{subtitle && (\r\n\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tfontSize: \"0.78rem\",\r\n\t\t\t\t\t\t\t\t\tcolor: \"text.secondary\",\r\n\t\t\t\t\t\t\t\t\tpl: !showBack ? 0 : 2,\r\n\t\t\t\t\t\t\t\t\tmt: 0.2,\r\n\t\t\t\t\t\t\t\t\tlineHeight: 1.4,\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{subtitle}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t{/* Right: count chip + actions */}\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flexShrink: 0 }}>\r\n\t\t\t\t\t{count !== undefined && (\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: \"flex\", alignItems: \"center\", gap: \"5px\",\r\n\t\t\t\t\t\t\t\tpx: \"10px\", height: 32,\r\n\t\t\t\t\t\t\t\tborder: \"1px solid\", borderColor: \"divider\",\r\n\t\t\t\t\t\t\t\tborderRadius: \"6px\", backgroundColor: \"background.paper\",\r\n\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Box sx={{ width: 6, height: 6, borderRadius: \"50%\", backgroundColor: \"#1A5F6C\", flexShrink: 0 }} />\r\n\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\" }}>\r\n\t\t\t\t\t\t\t\t{count} {countLabel}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{actions}\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n}\r\n","import { useState, useCallback } from \"react\";\r\nimport axiosInstance, { deepFindArray } from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type { CallHistoryItem, MissedCallDetails, TranscriptData } from \"./types\";\r\n\r\nconst MOCK_TRANSCRIPT: TranscriptData = {\r\n\ttranscription: [\r\n\t\t\"Agent: Welcome, please wait while your call is being transferred.\",\r\n\t\t\"Patient: Welcome, please wait while your call is being connected.\",\r\n\t\t\"Agent: Please wait while your call is connected.\",\r\n\t\t\"Agent: I will show you how you can also book new appointments if you need an appointment.\",\r\n\t\t\"Agent: And you can select your specialty.\",\r\n\t\t\"Patient: I am not getting it.\",\r\n\t\t\"Patient: Yes, I am speaking.\",\r\n\t\t\"Patient: I don't know what the reason is.\",\r\n\t\t\"Patient: Yes.\",\r\n\t\t\"Patient: I will do it according to the plan.\",\r\n\t\t\"Patient: I am not getting any information about that.\",\r\n\t\t\"Patient: Yeah, so I want to see the result.\",\r\n\t\t\"Patient: I am not doing it now.\",\r\n\t\t\"Agent: So we also have a new point.\",\r\n\t\t\"Agent: We can include that.\",\r\n\t\t\"Agent: So, um, these are the entities of the bank.\",\r\n\t\t\"Agent: If you have any questions, I can answer them for you.\",\r\n\t\t\"Patient: How much is it?\",\r\n\t\t\"Patient: No, I don't want to do it.\",\r\n\t\t\"Patient: I just got some calling.\",\r\n\t\t\"Patient: I will call now.\",\r\n\t].join(\"\\n\"),\r\n\tsentiment_analysis: {\r\n\t\tCall_Center_Interaction_Hospital_Service: {\r\n\t\t\tCall_Summary:\r\n\t\t\t\t\"The conversation involved a patient attempting to get information regarding booking an appointment and the status of their results. The agent provided some guidance but the patient expressed confusion and dissatisfaction with the information provided, leading to frustration.\",\r\n\t\t\tSentiment_Analysis_Breakdown: {\r\n\t\t\t\tPatient_Sentiment_Analysis: {\r\n\t\t\t\t\t\"Resolution_Confidence_Index_(RCI)\": {\r\n\t\t\t\t\t\tSentiment_Score: 1,\r\n\t\t\t\t\t\tObservations:\r\n\t\t\t\t\t\t\t\"The patient expressed confusion and dissatisfaction, stating 'I am not getting any information about that' and 'I am not doing it now', indicating a lack of clarity and resolution.\",\r\n\t\t\t\t\t\tModel_Prediction_Confidence_Level: 85,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"Tone_And_Emotional_Analysis_(TEA)\": {\r\n\t\t\t\t\t\tSentiment_Score: 2,\r\n\t\t\t\t\t\tObservations:\r\n\t\t\t\t\t\t\t\"The patient displayed frustration with statements like 'I don't know what the reason is' and 'I am not getting it', indicating a high level of dissatisfaction throughout the call.\",\r\n\t\t\t\t\t\tModel_Prediction_Confidence_Level: 80,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tOverall_Sentiment: {\r\n\t\t\t\t\t\tSentiment_Score: 1.5,\r\n\t\t\t\t\t\tObservations:\r\n\t\t\t\t\t\t\t\"The patient showed significant frustration and confusion, leading to a low overall sentiment.\",\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t\tAgent_Sentiment_Analysis: {\r\n\t\t\t\t\tEmpathy_Score: {\r\n\t\t\t\t\t\tSentiment_Score: 2,\r\n\t\t\t\t\t\tObservations:\r\n\t\t\t\t\t\t\t\"The agent attempted to provide information but lacked engagement and empathy, as evidenced by the unclear responses and minimal reassurance offered to the patient.\",\r\n\t\t\t\t\t\tModel_Prediction_Confidence_Level: 75,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tConfidence_Score: {\r\n\t\t\t\t\t\tSentiment_Score: 2,\r\n\t\t\t\t\t\tObservations:\r\n\t\t\t\t\t\t\t\"The agent's responses were somewhat unclear and lacked confidence, particularly when addressing the patient's inquiries, leading to a perception of hesitation.\",\r\n\t\t\t\t\t\tModel_Prediction_Confidence_Level: 70,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tOverall_Agent_Performance: {\r\n\t\t\t\t\t\tSentiment_Score: 2,\r\n\t\t\t\t\t\tObservations:\r\n\t\t\t\t\t\t\t\"The agent's performance was below expectations, lacking both empathy and clarity.\",\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t\t\"Overall_Sentiment_Score_(OSS)\": {\r\n\t\t\t\t\tSentiment_Score: 1.7,\r\n\t\t\t\t\tObservations:\r\n\t\t\t\t\t\t\"The overall conversation reflected a low satisfaction level from the patient, compounded by the agent's lack of clarity and engagement.\",\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\tConversation_Type_Classification: {\r\n\t\t\t\tInformational_Queries: \"40%\",\r\n\t\t\t\tAction_Oriented_Queries: \"40%\",\r\n\t\t\t\tEscalations_or_Complaints: \"20%\",\r\n\t\t\t},\r\n\t\t\tKey_Highlights_Issues_Identified: {\r\n\t\t\t\tPositive_Aspects: [\r\n\t\t\t\t\t\"The agent attempted to provide information about booking appointments.\",\r\n\t\t\t\t],\r\n\t\t\t\tAreas_for_Improvement: [\r\n\t\t\t\t\t\"The agent needs to improve clarity in communication and show more empathy towards patient concerns.\",\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t},\r\n\t},\r\n};\r\n\r\nexport interface CallHistoryParams {\r\n\tpage?: number;\r\n\tpageSize?: number;\r\n\tsearch?: string;\r\n\tcall_type?: \"INCOMING\" | \"OUTGOING\";\r\n}\r\n\r\nexport function useCallHistory() {\r\n\tconst [calls, setCalls] = useState<CallHistoryItem[]>([]);\r\n\t// Real total (server returns { ..., total }).\r\n\tconst [callsTotal, setCallsTotal] = useState(-1);\r\n\tconst [missedCalls, setMissedCalls] = useState<MissedCallDetails[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchCallHistory = useCallback(async (params?: CallHistoryParams) => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tconst page = params?.page ?? 1;\r\n\t\t\tconst pageSize = params?.pageSize ?? 10;\r\n\t\t\t// POST with query params: page (1-indexed), pageSize, search, call_type.\r\n\t\t\tconst query: Record<string, unknown> = { page, pageSize };\r\n\t\t\tif (params?.search) query.search = params.search;\r\n\t\t\tif (params?.call_type) query.call_type = params.call_type;\r\n\t\t\tconst res = await axiosInstance.post(END_POINT.CALLS_HISTORY, {}, { params: query });\r\n\t\t\t// Find the records array wherever it sits (flat array, { records }, { data: [...] }, ...).\r\n\t\t\tconst records = deepFindArray<CallHistoryItem>(res.data, [\"records\"]);\r\n\t\t\tconst d: any = res.data;\r\n\t\t\tconst total =\r\n\t\t\t\ttypeof d?.total === \"number\" ? d.total\r\n\t\t\t\t: typeof d?.count === \"number\" ? d.count\r\n\t\t\t\t: typeof d?.totalCount === \"number\" ? d.totalCount\r\n\t\t\t\t: -1;\r\n\t\t\tsetCalls(records);\r\n\t\t\tsetCallsTotal(total >= 0 ? total : records.length < pageSize ? (page - 1) * pageSize + records.length : -1);\r\n\t\t} catch {\r\n\t\t\tsetCalls([]);\r\n\t\t\tsetCallsTotal(-1);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchMissedCalls = useCallback(async () => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get(END_POINT.MISSED_CALLS);\r\n\t\t\tsetMissedCalls(Array.isArray(res.data?.data) ? res.data.data : []);\r\n\t\t} catch {\r\n\t\t\tsetMissedCalls([]);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchRecording = useCallback(async (call_uuid: string): Promise<Blob> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(call_uuid), {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst fetchTranscript = useCallback(async (_call_uuid: string): Promise<TranscriptData | null> => {\r\n\t\tawait new Promise((r) => setTimeout(r, 400));\r\n\t\treturn MOCK_TRANSCRIPT;\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tcalls,\r\n\t\tcallsTotal,\r\n\t\tmissedCalls,\r\n\t\tloading,\r\n\t\tfetchCallHistory,\r\n\t\tfetchMissedCalls,\r\n\t\tfetchRecording,\r\n\t\tfetchTranscript,\r\n\t};\r\n}\r\n","import React, { memo, useEffect, useState } from \"react\";\r\nimport {\r\n\tBox,\r\n\tTypography,\r\n\tTable,\r\n\tTableBody,\r\n\tTableCell,\r\n\tTableContainer,\r\n\tTableHead,\r\n\tTableRow,\r\n\tTablePagination,\r\n\tToggleButton,\r\n\tToggleButtonGroup,\r\n\tIconButton,\r\n\tCollapse,\r\n\tCircularProgress,\r\n\tChip,\r\n\tStack,\r\n\tSwitch,\r\n\tFormControlLabel,\r\n\tTooltip,\r\n\tInputAdornment,\r\n\tOutlinedInput,\r\n\tuseTheme,\r\n\tPaper,\r\n} from \"@mui/material\";\r\nimport Transcript from \"../common/components/Transcript\";\r\nimport KeyboardArrowDown from \"@mui/icons-material/KeyboardArrowDown\";\r\nimport PlayArrow from \"@mui/icons-material/PlayArrow\";\r\nimport ExpandLess from \"@mui/icons-material/ExpandLess\";\r\nimport Search from \"@mui/icons-material/Search\";\r\nimport Phone from \"@mui/icons-material/Phone\";\r\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\r\nimport AppButton from \"../common/components/AppButton\";\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPageHeader } from \"../../components/SDKPageHeader\";\r\nimport { useToast } from \"../../services/toastMessage\";\r\nimport { useCallHistory } from \"./useCallHistory\";\r\nimport type { CallHistoryItem, MissedCallDetails, CallFilter } from \"./types\";\r\n\r\n// ──── Header cell columns ────────────────────────────────────────────────────\r\n\r\nconst CALL_HISTORY_COLS = [\"Call UID\", \"Mobile\", \"Type\", \"Start Time\", \"End Time\", \"Recording\", \"Agent\", \"Details\"] as const;\r\nconst MISSED_CALLS_COLS = [\"Agent ID\", \"Agent Name\", \"Mobile No\", \"Type\", \"Actions\"] as const;\r\nconst CENTER_COLS = new Set([\"Type\", \"Recording\", \"Agent\", \"Details\", \"Actions\"]);\r\n\r\n// ──── Main content (needs SDKProvider above it for useToast) ─────────────────\r\n\r\nconst CallHistoryContent = memo(() => {\r\n\tconst theme = useTheme();\r\n\tconst { showToast } = useToast();\r\n\tconst { calls, callsTotal, missedCalls, loading, fetchCallHistory, fetchMissedCalls, fetchRecording } =\r\n\t\tuseCallHistory();\r\n\r\n\tconst [filter, setFilter] = useState<CallFilter>(\"ALL\");\r\n\tconst [search, setSearch] = useState(\"\");\r\n\tconst [showMissedCalls, setShowMissedCalls] = useState(false);\r\n\tconst [page, setPage] = useState(0);\r\n\tconst [rowsPerPage, setRowsPerPage] = useState(10);\r\n\r\n\t// Debounced search (sent to the server for call history).\r\n\tconst [debouncedSearch, setDebouncedSearch] = useState(\"\");\r\n\tuseEffect(() => {\r\n\t\tconst t = setTimeout(() => setDebouncedSearch(search.trim()), 400);\r\n\t\treturn () => clearTimeout(t);\r\n\t}, [search]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (showMissedCalls) {\r\n\t\t\tfetchMissedCalls();\r\n\t\t} else {\r\n\t\t\t// Call history is paginated + searched + filtered server-side.\r\n\t\t\tfetchCallHistory({\r\n\t\t\t\tpage: page + 1,\r\n\t\t\t\tpageSize: rowsPerPage,\r\n\t\t\t\tsearch: debouncedSearch || undefined,\r\n\t\t\t\tcall_type: filter === \"ALL\" ? undefined : filter,\r\n\t\t\t});\r\n\t\t}\r\n\t}, [showMissedCalls, page, rowsPerPage, filter, debouncedSearch, fetchCallHistory, fetchMissedCalls]);\r\n\r\n\t// Call history is filtered/searched server-side, so render the rows as-is.\r\n\tconst filteredCalls = calls;\r\n\r\n\tconst filteredMissedCalls = missedCalls\r\n\t\t.filter((c) => filter === \"ALL\" || c.callType?.toUpperCase() === filter)\r\n\t\t.filter((c) => {\r\n\t\t\tconst q = search.toLowerCase();\r\n\t\t\treturn (\r\n\t\t\t\tc.agentId?.toLowerCase().includes(q) ||\r\n\t\t\t\tc.username?.toLowerCase().includes(q) ||\r\n\t\t\t\tc.mobileNumber?.toLowerCase().includes(q)\r\n\t\t\t);\r\n\t\t});\r\n\r\n\treturn (\r\n\t\t<Box>\r\n\t\t\t{/* PAGE HEADER */}\r\n\t\t\t<SDKPageHeader\r\n\t\t\t\ttitle=\"Call History\"\r\n\t\t\t\tactions={\r\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" spacing={1}>\r\n\t\t\t\t\t\t<AppButton\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\tstartIcon={loading ? <CircularProgress size={14} color=\"inherit\" /> : <RefreshIcon sx={{ fontSize: \"0.95rem !important\" }} />}\r\n\t\t\t\t\t\t\tonClick={() =>\r\n\t\t\t\t\t\t\t\tshowMissedCalls\r\n\t\t\t\t\t\t\t\t\t? fetchMissedCalls()\r\n\t\t\t\t\t\t\t\t\t: fetchCallHistory({\r\n\t\t\t\t\t\t\t\t\t\tpage: page + 1,\r\n\t\t\t\t\t\t\t\t\t\tpageSize: rowsPerPage,\r\n\t\t\t\t\t\t\t\t\t\tsearch: debouncedSearch || undefined,\r\n\t\t\t\t\t\t\t\t\t\tcall_type: filter === \"ALL\" ? undefined : filter,\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tdisabled={loading}\r\n\t\t\t\t\t\t\tsx={{ height: 36 }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tRefresh\r\n\t\t\t\t\t\t</AppButton>\r\n\t\t\t\t\t\t<OutlinedInput\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\tvalue={search}\r\n\t\t\t\t\t\t\tonChange={(e) => { setSearch(e.target.value); setPage(0); }}\r\n\t\t\t\t\t\t\tplaceholder=\"Search\"\r\n\t\t\t\t\t\t\tsx={{ width: 220, fontSize: \"0.82rem\", height: 36 }}\r\n\t\t\t\t\t\t\tendAdornment={\r\n\t\t\t\t\t\t\t\t<InputAdornment position=\"end\">\r\n\t\t\t\t\t\t\t\t\t<Search sx={{ fontSize: 18, color: \"#999\" }} />\r\n\t\t\t\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Stack>\r\n\t\t\t\t}\r\n\t\t\t/>\r\n\r\n\t\t\t<Box py={1.5} px={2}>\r\n\t\t\t\t{/* FILTER BAR */}\r\n\t\t\t\t<Stack direction=\"row\" spacing={2} alignItems=\"center\" mb={2}>\r\n\t\t\t\t\t<FormControlLabel\r\n\t\t\t\t\t\tcontrol={\r\n\t\t\t\t\t\t\t<Switch\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tchecked={showMissedCalls}\r\n\t\t\t\t\t\t\t\tonChange={(_, checked) => { setShowMissedCalls(checked); setPage(0); }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tlabel={\r\n\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.8rem\", color: \"#555\" }}>\r\n\t\t\t\t\t\t\t\tMissed Calls\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsx={{ ml: 0 }}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<ToggleButtonGroup\r\n\t\t\t\t\t\tvalue={filter}\r\n\t\t\t\t\t\texclusive\r\n\t\t\t\t\t\tonChange={(_, v) => { if (v) { setFilter(v); setPage(0); } }}\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tborder: \"1px solid #ccc\",\r\n\t\t\t\t\t\t\tborderRadius: \"50px\",\r\n\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\"& .MuiToggleButton-root\": {\r\n\t\t\t\t\t\t\t\tborder: \"none\",\r\n\t\t\t\t\t\t\t\tborderRight: \"1px solid #ccc\",\r\n\t\t\t\t\t\t\t\tcolor: \"#555\",\r\n\t\t\t\t\t\t\t\tfontWeight: 600,\r\n\t\t\t\t\t\t\t\ttextTransform: \"uppercase\",\r\n\t\t\t\t\t\t\t\tfontSize: \"0.72rem\",\r\n\t\t\t\t\t\t\t\tpx: 2,\r\n\t\t\t\t\t\t\t\tpy: 0.5,\r\n\t\t\t\t\t\t\t\tborderRadius: 0,\r\n\t\t\t\t\t\t\t\t\"&:last-of-type\": { borderRight: \"none\" },\r\n\t\t\t\t\t\t\t\t\"&.Mui-selected\": {\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette.primary.main,\r\n\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: theme.palette.primary.dark },\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<ToggleButton value=\"ALL\">All</ToggleButton>\r\n\t\t\t\t\t\t<ToggleButton value=\"INCOMING\">Inbound</ToggleButton>\r\n\t\t\t\t\t\t<ToggleButton value=\"OUTGOING\">Outbound</ToggleButton>\r\n\t\t\t\t\t</ToggleButtonGroup>\r\n\t\t\t\t</Stack>\r\n\r\n\t\t\t\t{/* TABLE */}\r\n\t\t\t\t<TableContainer component={Paper} variant=\"outlined\" sx={{ display: 'flex', flexDirection: 'column' }}>\r\n\t\t\t\t <Box sx={{ overflowY: 'auto', maxHeight: 600 }}>\r\n\t\t\t\t\t<Table stickyHeader size=\"small\">\r\n\t\t\t\t\t\t{showMissedCalls ? (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t{MISSED_CALLS_COLS.map((col) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={col}\r\n\t\t\t\t\t\t\t\t\t\t\t\talign={CENTER_COLS.has(col) ? \"center\" : \"left\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ fontWeight: 600, backgroundColor: \"#f1f1f1\", fontSize: \"0.8rem\" }}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{col}\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t{loading ? (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={5} align=\"center\" sx={{ py: 4 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size={24} />\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t) : filteredMissedCalls.length === 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={5} align=\"center\" sx={{ py: 4, color: \"#999\", fontSize: \"0.82rem\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Records Found\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\tfilteredMissedCalls.slice(page * rowsPerPage, (page + 1) * rowsPerPage).map((row, i) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<MissedCallRow key={`${row.agentId}-${row.mobileNumber}-${i}`} row={row} />\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t{CALL_HISTORY_COLS.map((col) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={col}\r\n\t\t\t\t\t\t\t\t\t\t\t\talign={CENTER_COLS.has(col) ? \"center\" : \"left\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ fontWeight: 600, backgroundColor: \"#f1f1f1\", fontSize: \"0.8rem\" }}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{col}\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t{loading ? (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={8} align=\"center\" sx={{ py: 4 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress />\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t) : filteredCalls.length === 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={8} align=\"center\" sx={{ py: 4, color: \"#999\", fontSize: \"0.82rem\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Records Found\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\tfilteredCalls.map((row, i) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<ExpandableRow\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={row.call_uuid}\r\n\t\t\t\t\t\t\t\t\t\t\t\trow={row}\r\n\t\t\t\t\t\t\t\t\t\t\t\tstriped={i % 2 === 0}\r\n\t\t\t\t\t\t\t\t\t\t\t\tfetchRecording={fetchRecording}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonError={(msg) => showToast(msg, \"error\")}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Table>\r\n\t\t\t\t </Box>\r\n\t\t\t\t <TablePagination\r\n\t\t\t\t\t\tcomponent=\"div\"\r\n\t\t\t\t\t\tcount={showMissedCalls ? filteredMissedCalls.length : callsTotal}\r\n\t\t\t\t\t\tpage={page}\r\n\t\t\t\t\t\trowsPerPage={rowsPerPage}\r\n\t\t\t\t\t\tonPageChange={(_, p) => setPage(p)}\r\n\t\t\t\t\t\tonRowsPerPageChange={(e) => { setRowsPerPage(parseInt(e.target.value, 10)); setPage(0); }}\r\n\t\t\t\t\t\trowsPerPageOptions={[10, 15, 25, 50, 100]}\r\n\t\t\t\t\t\tsx={{ borderTop: '1px solid #e0e0e0' }}\r\n\t\t\t\t />\r\n\t\t\t\t</TableContainer>\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n});\r\n\r\nCallHistoryContent.displayName = \"CallHistoryContent\";\r\n\r\n// ──── Missed Call Row ─────────────────────────────────────────────────────────\r\n\r\nconst MissedCallRow = memo(({ row }: { row: MissedCallDetails }) => {\r\n\tconst theme = useTheme();\r\n\treturn (\r\n\t\t<TableRow hover>\r\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\", color: theme.palette.primary.main }}>\r\n\t\t\t\t{row.agentId}\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\" }}>{row.username}</TableCell>\r\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\" }}>\r\n\t\t\t\t{row.mobileNumber} ({row.callCount})\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\", textTransform: \"uppercase\" }}>\r\n\t\t\t\t{row.callType}\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell align=\"center\">\r\n\t\t\t\t<Phone sx={{ color: \"#c0392b\", fontSize: 20, cursor: \"pointer\" }} />\r\n\t\t\t</TableCell>\r\n\t\t</TableRow>\r\n\t);\r\n});\r\n\r\nMissedCallRow.displayName = \"MissedCallRow\";\r\n\r\n// ──── Expandable Row ──────────────────────────────────────────────────────────\r\n\r\nfunction ExpandableRow({\r\n\trow,\r\n\tstriped,\r\n\tfetchRecording,\r\n\tonError,\r\n}: {\r\n\trow: CallHistoryItem;\r\n\tstriped: boolean;\r\n\tfetchRecording: (call_uuid: string) => Promise<Blob>;\r\n\tonError: (msg: string) => void;\r\n}) {\r\n\tconst [open, setOpen] = useState(false);\r\n\tconst [audioURL, setAudioURL] = useState<string | null>(null);\r\n\tconst [loadingAudio, setLoadingAudio] = useState(false);\r\n\r\n\tconst handlePlay = async () => {\r\n\t\tif (!row.recording.available) return;\r\n\t\tsetLoadingAudio(true);\r\n\t\ttry {\r\n\t\t\tconst blob = await fetchRecording(row.call_uuid);\r\n\t\t\tsetAudioURL(URL.createObjectURL(blob));\r\n\t\t} catch {\r\n\t\t\tonError(\"Recording not available\");\r\n\t\t} finally {\r\n\t\t\tsetLoadingAudio(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleToggle = () => setOpen((prev) => !prev);\r\n\r\n\tconst bg = striped ? \"#fafafa\" : \"white\";\r\n\tconst cellSx = { fontSize: \"0.82rem\", backgroundColor: bg };\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<TableRow hover>\r\n\t\t\t\t<TableCell sx={{ ...cellSx, maxWidth: 130 }}>\r\n\t\t\t\t\t<Tooltip title={row.call_uuid} arrow>\r\n\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\tnoWrap\r\n\t\t\t\t\t\t\tsx={{ fontSize: 13, maxWidth: 130, overflow: \"hidden\", textOverflow: \"ellipsis\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{row.call_uuid}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell sx={cellSx}>{row.mobile_no}</TableCell>\r\n\r\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tlabel={row.call_type}\r\n\t\t\t\t\t\tcolor={row.call_type === \"INCOMING\" ? \"success\" : \"primary\"}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell sx={cellSx}>\r\n\t\t\t\t\t{new Date(row.start_time).toLocaleString()}\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell sx={cellSx}>\r\n\t\t\t\t\t{row.end_time ? new Date(row.end_time).toLocaleString() : \"—\"}\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\r\n\t\t\t\t\t{row.recording.available ? (\r\n\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\tonClick={handlePlay}\r\n\t\t\t\t\t\t\tdisabled={loadingAudio}\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{loadingAudio ? <CircularProgress size={18} /> : <PlayArrow />}\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<Chip size=\"small\" label=\"No File\" />\r\n\t\t\t\t\t)}\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\r\n\t\t\t\t\t{row.agent_id ?? \"\"}\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\r\n\t\t\t\t\t<IconButton onClick={handleToggle} size=\"small\">\r\n\t\t\t\t\t\t{open ? <ExpandLess /> : <KeyboardArrowDown />}\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</TableCell>\r\n\t\t\t</TableRow>\r\n\r\n\t\t\t{/* Audio player row */}\r\n\t\t\t{audioURL && (\r\n\t\t\t\t<TableRow>\r\n\t\t\t\t\t<TableCell colSpan={8} sx={{ p: 0 }}>\r\n\t\t\t\t\t\t<Box p={2}>\r\n\t\t\t\t\t\t\t<audio\r\n\t\t\t\t\t\t\t\tcontrols\r\n\t\t\t\t\t\t\t\tautoPlay\r\n\t\t\t\t\t\t\t\tsrc={audioURL}\r\n\t\t\t\t\t\t\t\tonEnded={() => {\r\n\t\t\t\t\t\t\t\t\tURL.revokeObjectURL(audioURL);\r\n\t\t\t\t\t\t\t\t\tsetAudioURL(null);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tstyle={{ width: \"100%\" }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</TableCell>\r\n\t\t\t\t</TableRow>\r\n\t\t\t)}\r\n\r\n\t\t\t{/* Details collapse row */}\r\n\t\t\t<TableRow>\r\n\t\t\t\t<TableCell colSpan={8} sx={{ p: 0 }}>\r\n\t\t\t\t\t<Collapse in={open} unmountOnExit>\r\n\t\t\t\t\t\t<Box p={2} bgcolor=\"#f9fafc\" borderTop=\"1px solid #eee\">\r\n\t\t\t\t\t\t\t{open && <Transcript row={row} />}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Collapse>\r\n\t\t\t\t</TableCell>\r\n\t\t\t</TableRow>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\n// ──── Default Export — wraps with SDKProvider for toast context ───────────────\r\n\r\nconst CallHistory: React.FC = () => (\r\n\t<SDKProvider>\r\n\t\t<CallHistoryContent />\r\n\t</SDKProvider>\r\n);\r\n\r\nexport default CallHistory;\r\n","import React from \"react\";\r\nimport { Button, SxProps, Theme, useTheme } from \"@mui/material\";\r\nimport { alpha } from \"@mui/material/styles\";\r\n\r\ntype SDKButtonVariant = \"primary\" | \"danger\" | \"cancel\" | \"outlined\";\r\n\r\ninterface SDKButtonProps {\r\n\tchildren: React.ReactNode;\r\n\tvariant?: SDKButtonVariant;\r\n\tonClick?: React.MouseEventHandler<HTMLButtonElement>;\r\n\tstartIcon?: React.ReactNode;\r\n\tendIcon?: React.ReactNode;\r\n\tdisabled?: boolean;\r\n\ttype?: \"button\" | \"submit\" | \"reset\";\r\n\tsize?: \"small\" | \"medium\" | \"large\";\r\n\tfullWidth?: boolean;\r\n\tsx?: SxProps<Theme>;\r\n}\r\n\r\nconst muiVariant: Record<SDKButtonVariant, \"contained\" | \"outlined\" | \"text\"> = {\r\n\tprimary: \"contained\",\r\n\tdanger: \"contained\",\r\n\tcancel: \"text\",\r\n\toutlined: \"outlined\",\r\n};\r\n\r\nexport function SDKButton({\r\n\tchildren,\r\n\tvariant = \"primary\",\r\n\tonClick,\r\n\tstartIcon,\r\n\tendIcon,\r\n\tdisabled = false,\r\n\ttype = \"button\",\r\n\tsize = \"medium\",\r\n\tfullWidth = false,\r\n\tsx,\r\n}: SDKButtonProps) {\r\n\tconst theme = useTheme();\r\n\tconst primary = theme.palette.primary.main;\r\n\tconst primaryDark = theme.palette.primary.dark;\r\n\r\n\tconst styles: Record<SDKButtonVariant, SxProps<Theme>> = {\r\n\t\tprimary: {\r\n\t\t\ttextTransform: \"none\",\r\n\t\t\tfontWeight: 600,\r\n\t\t\tbackgroundColor: primary,\r\n\t\t\tborderRadius: \"30px\",\r\n\t\t\tfontSize: \"0.82rem\",\r\n\t\t\tpx: 2,\r\n\t\t\tboxShadow: `0 2px 8px ${alpha(primary, 0.25)}`,\r\n\t\t\t\"&:hover\": {\r\n\t\t\t\tbackgroundColor: primaryDark,\r\n\t\t\t\tboxShadow: `0 4px 12px ${alpha(primary, 0.35)}`,\r\n\t\t\t},\r\n\t\t\t\"&.Mui-disabled\": {\r\n\t\t\t\tbackgroundColor: alpha(primary, 0.4),\r\n\t\t\t\tcolor: \"#fff\",\r\n\t\t\t},\r\n\t\t},\r\n\t\tdanger: {\r\n\t\t\ttextTransform: \"none\",\r\n\t\t\tfontWeight: 600,\r\n\t\t\tbackgroundColor: \"#d32f2f\",\r\n\t\t\tborderRadius: \"8px\",\r\n\t\t\tfontSize: \"0.82rem\",\r\n\t\t\tpx: 2,\r\n\t\t\t\"&:hover\": { backgroundColor: \"#b71c1c\" },\r\n\t\t\t\"&.Mui-disabled\": { backgroundColor: \"#e57373\", color: \"#fff\" },\r\n\t\t},\r\n\t\tcancel: {\r\n\t\t\ttextTransform: \"none\",\r\n\t\t\tfontWeight: 600,\r\n\t\t\tcolor: \"#666\",\r\n\t\t\tborderRadius: \"30px\",\r\n\t\t\tfontSize: \"0.82rem\",\r\n\t\t\tpx: 2,\r\n\t\t\tborder: \"1px solid #d0d0d0\",\r\n\t\t\t\"&:hover\": { backgroundColor: \"#f5f5f5\", borderColor: \"#bbb\" },\r\n\t\t},\r\n\t\toutlined: {\r\n\t\t\ttextTransform: \"none\",\r\n\t\t\tfontWeight: 600,\r\n\t\t\tcolor: primary,\r\n\t\t\tborderColor: primary,\r\n\t\t\tborderRadius: \"30px\",\r\n\t\t\tfontSize: \"0.82rem\",\r\n\t\t\tpx: 2,\r\n\t\t\t\"&:hover\": { borderColor: primaryDark, backgroundColor: alpha(primary, 0.05) },\r\n\t\t},\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Button\r\n\t\t\tvariant={muiVariant[variant]}\r\n\t\t\tonClick={onClick}\r\n\t\t\tstartIcon={startIcon}\r\n\t\t\tendIcon={endIcon}\r\n\t\t\tdisabled={disabled}\r\n\t\t\ttype={type}\r\n\t\t\tsize={size}\r\n\t\t\tfullWidth={fullWidth}\r\n\t\t\tsx={[styles[variant], ...(Array.isArray(sx) ? sx : [sx])]}\r\n\t\t>\r\n\t\t\t{children}\r\n\t\t</Button>\r\n\t);\r\n}\r\n","import { useState, useCallback } from \"react\";\r\nimport axiosInstance, { deepFindArray, deepFindTotal } from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tCampaign,\r\n\tCampaignCreatePayload,\r\n\tCreateQueuePayload,\r\n\tLead,\r\n\tLeadCallData,\r\n\tLeadCreatePayload,\r\n\tLeadsMeta,\r\n\tLeadsParams,\r\n\tLeadsResponse,\r\n\tQueue,\r\n} from \"./types\";\r\n\r\nexport function useCampaigns() {\r\n\tconst [campaigns, setCampaigns] = useState<Campaign[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchCampaigns = useCallback(async () => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get(END_POINT.CAMPAIGNS_GET_ALL);\r\n\t\t\tsetCampaigns(Array.isArray(res.data) ? res.data : []);\r\n\t\t} catch {\r\n\t\t\tsetCampaigns([]);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst getCampaignById = useCallback(async (id: number): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.CAMPAIGNS_GET_BY_ID(id));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst createCampaign = useCallback(async (data: CampaignCreatePayload): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_CREATE, data);\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst updateCampaign = useCallback(async (id: number, data: Partial<CampaignCreatePayload>): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.put(END_POINT.CAMPAIGNS_UPDATE(id), data);\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst activateCampaign = useCallback(async (id: number): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_ACTIVATE(id));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst pauseCampaign = useCallback(async (id: number): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_PAUSE(id));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst archiveCampaign = useCallback(async (id: number): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_ARCHIVE(id));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tcampaigns,\r\n\t\tloading,\r\n\t\tfetchCampaigns,\r\n\t\tgetCampaignById,\r\n\t\tcreateCampaign,\r\n\t\tupdateCampaign,\r\n\t\tactivateCampaign,\r\n\t\tpauseCampaign,\r\n\t\tarchiveCampaign,\r\n\t};\r\n}\r\n\r\nexport function useLeads() {\r\n\tconst [leads, setLeads] = useState<Lead[]>([]);\r\n\tconst [leadTotal, setLeadTotal] = useState(0);\r\n\tconst [leadsMeta, setLeadsMeta] = useState<LeadsMeta>(null);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchLeads = useCallback(async (campaignId: number, params?: LeadsParams, opts?: { silent?: boolean }): Promise<void> => {\r\n\t\tif (!opts?.silent) setLoading(true);\r\n\t\ttry {\r\n\t\t\tconst qs = new URLSearchParams();\r\n\t\t\tif (params?.page != null) qs.append(\"page\", String(params.page));\r\n\t\t\tif (params?.pageSize != null) qs.append(\"pageSize\", String(params.pageSize));\r\n\t\t\tif (params?.lead_status) qs.append(\"lead_status\", params.lead_status);\r\n\t\t\tif (params?.search) qs.append(\"search\", params.search);\r\n\t\t\tconst qsStr = qs.toString();\r\n\t\t\tconst url = `${END_POINT.CAMPAIGNS_LEADS(campaignId)}${qsStr ? `?${qsStr}` : \"\"}`;\r\n\t\t\tconst res = await axiosInstance.get<LeadsResponse>(url);\r\n\t\t\tconst body = res.data as any;\r\n\t\t\t// Find the leads array wherever it sits (flat array, { leads }, { data: { leads } },\r\n\t\t\t// { leads: { data: [...] } }, ...).\r\n\t\t\tconst fetchedLeads = deepFindArray<Lead>(body, [\"leads\"]);\r\n\t\t\tsetLeads(fetchedLeads);\r\n\t\t\t// The real total may sit at body.total, body.data.total, or body.leads.total.\r\n\t\t\tconst foundTotal = deepFindTotal(body);\r\n\t\t\tsetLeadTotal(foundTotal >= 0 ? foundTotal : fetchedLeads.length);\r\n\t\t\tsetLeadsMeta({\r\n\t\t\t\tisDialerEnabled: body?.isDialerEnabled ?? body?.data?.isDialerEnabled,\r\n\t\t\t\tdialingMode: body?.dialingMode ?? body?.data?.dialingMode,\r\n\t\t\t\tcampaignStatus: body?.campaignStatus ?? body?.data?.campaignStatus,\r\n\t\t\t});\r\n\t\t} catch {\r\n\t\t\tsetLeads([]);\r\n\t\t\tsetLeadTotal(0);\r\n\t\t\tsetLeadsMeta(null);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst createLead = useCallback(async (campaignId: number, data: LeadCreatePayload): Promise<Lead> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_LEADS(campaignId), data);\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst deleteLead = useCallback(async (campaignId: number, leadId: number): Promise<void> => {\r\n\t\tawait axiosInstance.delete(END_POINT.CAMPAIGNS_DELETE_LEAD(campaignId, leadId));\r\n\t}, []);\r\n\r\n\tconst dialPreview = useCallback(async (campaignId: number, leadId: number): Promise<{ message: string }> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_DIAL_PREVIEW(campaignId, leadId));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst getLeadCallData = useCallback(async (callUuid: string): Promise<LeadCallData> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.CALL_DATA_BY_CALL(callUuid));\r\n\t\t// API wraps the payload as { message, data }\r\n\t\treturn res.data?.data ?? res.data;\r\n\t}, []);\r\n\r\n\tconst uploadLeadsExcel = useCallback(async (campaignId: number, file: File): Promise<any> => {\r\n\t\tconst formData = new FormData();\r\n\t\tformData.append(\"file\", file);\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_LEADS_UPLOAD_EXCEL(campaignId), formData, {\r\n\t\t\theaders: { \"Content-Type\": \"multipart/form-data\" },\r\n\t\t});\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst downloadLeadTemplate = useCallback(async (campaignId: number): Promise<void> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.CAMPAIGNS_LEADS_TEMPLATE_EXCEL(campaignId), {\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 = \"lead_template.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 exportLeads = useCallback(async (campaignId: number): Promise<void> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.CAMPAIGNS_LEADS_EXPORT_EXCEL(campaignId), {\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 = \"leads_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\treturn {\r\n\t\tleads,\r\n\t\tleadTotal,\r\n\t\tleadsMeta,\r\n\t\tloading,\r\n\t\tfetchLeads,\r\n\t\tcreateLead,\r\n\t\tdeleteLead,\r\n\t\tdialPreview,\r\n\t\tgetLeadCallData,\r\n\t\tuploadLeadsExcel,\r\n\t\tdownloadLeadTemplate,\r\n\t\texportLeads,\r\n\t};\r\n}\r\n\r\nexport function useQueues() {\r\n\tconst [queues, setQueues] = useState<Queue[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchQueues = useCallback(async (): Promise<Queue[]> => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get(END_POINT.QUEUES_GET_ALL);\r\n\t\t\tconst list: Queue[] = Array.isArray(res.data)\r\n\t\t\t\t? res.data\r\n\t\t\t\t: Array.isArray(res.data?.data) ? res.data.data : [];\r\n\t\t\tsetQueues(list);\r\n\t\t\treturn list;\r\n\t\t} catch {\r\n\t\t\tsetQueues([]);\r\n\t\t\treturn [];\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst createQueue = useCallback(async (payload: CreateQueuePayload): Promise<Queue> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.QUEUES_CREATE, payload);\r\n\t\treturn res.data?.data ?? res.data;\r\n\t}, []);\r\n\r\n\treturn { queues, loading, fetchQueues, createQueue };\r\n}\r\n","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","export interface CampaignQueue {\r\n\tid: number;\r\n\tcampaignId: number;\r\n\tqueueId: number;\r\n\tpriorityOverride: number | null;\r\n\tminWaitBeforeCallback: number;\r\n\tcreatedAt: string;\r\n}\r\n\r\nexport interface Campaign {\r\n\tid: number;\r\n\ttenantId: number;\r\n\tname: string;\r\n\tdescription: string;\r\n\tcampaignType: string;\r\n\tstatus: string;\r\n\tdialingMode: string;\r\n\tmaxConcurrentCalls: number;\r\n\tcallsPerAgent: number;\r\n\tstartTime: string;\r\n\tendTime: string;\r\n\tdaysOfWeek: number[];\r\n\ttimezone: string;\r\n\tscheduledStart: string | null;\r\n\tscheduledEnd: string | null;\r\n\tmaxAttempts: number;\r\n\tretryIntervalMinutes: number;\r\n\tcallerId: string | null;\r\n\tringTimeoutSeconds: number;\r\n\tanswerTimeoutSeconds: number | null;\r\n\tagentType: string;\r\n\taiBotId: number | null;\r\n\tpriority: number;\r\n\ttotalLeads: number;\r\n\tcompletedLeads: number;\r\n\tsuccessfulCalls: number;\r\n\tsettings: Record<string, any>;\r\n\tcreatedAt: string;\r\n\tupdatedAt: string;\r\n\tcompletionRate: number;\r\n\tcampaignQueues: CampaignQueue[];\r\n}\r\n\r\nexport interface CampaignCreatePayload {\r\n\tname: string;\r\n\tdescription: string;\r\n\tcampaignType: string;\r\n\tdialingMode: string;\r\n\tmaxConcurrentCalls: number;\r\n\tcallsPerAgent: number;\r\n\tstartTime: string;\r\n\tendTime: string;\r\n\tdaysOfWeek: number[];\r\n\ttimezone: string;\r\n\tscheduledStart: string;\r\n\tscheduledEnd: string;\r\n\tmaxAttempts: number;\r\n\tretryIntervalMinutes: number;\r\n\tcallerId: string;\r\n\tringTimeoutSeconds: number;\r\n\tanswerTimeoutSeconds: number;\r\n\tagentType: string;\r\n\taiBotId: number | null;\r\n\tpriority: number;\r\n\tsettings: Record<string, any>;\r\n\tqueueLinks?: QueueLinkPayload[];\r\n}\r\n\r\nexport interface QueueLinkPayload {\r\n\tqueueId: number;\r\n\tpriorityOverride: number;\r\n\tminWaitBeforeCallback: number;\r\n}\r\n\r\nexport interface Lead {\r\n\tid: number;\r\n\tcampaignId: number;\r\n\tphoneNumber: string;\r\n\tcallerName: string;\r\n\tsource: string;\r\n\tsourceReference: string;\r\n\toriginalCallId: string;\r\n\toriginalQueueId: number;\r\n\tqueueName: string | null;\r\n\toriginalWaitTime: number;\r\n\tstatus: string;\r\n\tpriority: number;\r\n\tscheduledAt: string;\r\n\texpiresAt: string;\r\n\tattemptCount: number;\r\n\tlastAttemptAt: string;\r\n\tnextAttemptAt: string;\r\n\tlastOutcome: string;\r\n\tlastReason: string;\r\n\tcompletedAt: string;\r\n\tcustomData: Record<string, any>;\r\n\tnotes: string;\r\n\tcreatedAt: string;\r\n\tupdatedAt: string;\r\n\tlatestCallId: string | null;\r\n\tvoicemail: string | null;\r\n}\r\n\r\nexport interface LeadCallData {\r\n\tcallUuid: string;\r\n\tphoneNumber: string;\r\n\tcallStartTime: string | null;\r\n\tconnectTime: string | null;\r\n\tcallType: string;\r\n\tcallStatus: string;\r\n\tagentName: string | null;\r\n\tagentUserId: string | null;\r\n\tqueueName: string | null;\r\n\textension: string | null;\r\n\ttalkDurationSeconds: number;\r\n\ttalkDurationFmt: string;\r\n\tholdDurationSeconds: number;\r\n\tholdDurationFmt: string;\r\n\tmuteDurationSeconds: number;\r\n\tmuteDurationFmt: string;\r\n\twrapupDurationSeconds: number;\r\n\twrapupDurationFmt: string;\r\n\tringingDurationSeconds: number;\r\n\tringingDurationFmt: string;\r\n\tqueueDurationSeconds: number;\r\n\tqueueDurationFmt: string;\r\n\tivrDurationSeconds: number;\r\n\tivrDurationFmt: string;\r\n\tdisposition: string | null;\r\n\tagentSelectedDisposition: string | null;\r\n\tremarks: string | null;\r\n\twasTransferred: boolean;\r\n\trecordingPath: string | null;\r\n\thangupInitiator: string | null;\r\n}\r\n\r\nexport interface LeadCreatePayload {\r\n\tphoneNumber: string;\r\n\tcallerName: string;\r\n\tsource?: string;\r\n\tpriority?: number;\r\n\tnotes?: string;\r\n\tscheduledAt?: string;\r\n}\r\n\r\nexport interface LeadsResponse {\r\n\tisDialerEnabled: boolean;\r\n\tdialingMode: string;\r\n\tcampaignStatus: string;\r\n\tleads: Lead[];\r\n\ttotal: number;\r\n}\r\n\r\nexport interface LeadsParams {\r\n\tpage?: number;\r\n\tpageSize?: number;\r\n\tlead_status?: string;\r\n\tsearch?: string;\r\n}\r\n\r\nexport interface Queue {\r\n\tid: number;\r\n\tname: string;\r\n\tdescription: string;\r\n\tprocessId?: number;\r\n\tisActive: boolean;\r\n\tincludeInAbandonedCallback?: boolean;\r\n}\r\n\r\nexport interface CreateQueuePayload {\r\n\tname: string;\r\n\tdescription: string;\r\n\tisActive?: boolean;\r\n\tprocessId?: number;\r\n\tincludeInAbandonedCallback?: boolean;\r\n}\r\n\r\nexport type LeadsMeta = Pick<LeadsResponse, \"isDialerEnabled\" | \"dialingMode\" | \"campaignStatus\"> | null;\r\n\r\nexport const CAMPAIGN_TYPES = [\"OUTBOUND_CAMPAIGN\", \"ABANDONED_CALLBACK\"] as const;\r\n\r\nexport const DIALING_MODES_MAP: Record<string, string[]> = {\r\n\tOUTBOUND_CAMPAIGN: [\"PREVIEW\", \"AI_CALLBACK\"],\r\n\tABANDONED_CALLBACK: [\"PROGRESSIVE\", \"PREDICTIVE\"],\r\n};\r\n\r\nexport const AGENT_TYPES = [\"HUMAN\", \"AI\", \"HYBRID\"] as const;\r\n\r\nexport const LEAD_PRIORITY_OPTIONS: { label: string; value: number }[] = [\r\n\t{ label: \"HIGH\", value: 10 },\r\n\t{ label: \"MEDIUM\", value: 5 },\r\n\t{ label: \"LOW\", value: 1 },\r\n];\r\n\r\nexport const DAYS_OF_WEEK = [\r\n\t{ label: \"Sun\", value: 0 }, { label: \"Mon\", value: 1 }, { label: \"Tue\", value: 2 },\r\n\t{ label: \"Wed\", value: 3 }, { label: \"Thu\", value: 4 }, { label: \"Fri\", value: 5 },\r\n\t{ label: \"Sat\", value: 6 },\r\n] as const;\r\n\r\nexport const TIMEZONES = [\r\n\t\"Etc/UTC\", \"US/Eastern\", \"US/Central\", \"US/Mountain\", \"US/Pacific\",\r\n\t\"Europe/London\", \"Europe/Berlin\", \"Asia/Kolkata\", \"Asia/Tokyo\", \"Australia/Sydney\",\r\n] as const;\r\n\r\nexport const STATUS_COLORS: Record<string, string> = {\r\n\tdraft: \"#9e9e9e\",\r\n\tactive: \"#4caf50\",\r\n\tpaused: \"#ff9800\",\r\n\tcompleted: \"#2196f3\",\r\n\tarchived: \"#795548\",\r\n};\r\n\r\nexport const LEAD_STATUSES = [\r\n\t\"All states\", \"PENDING\", \"SCHEDULED\", \"IN_PROGRESS\",\r\n\t\"COMPLETED\", \"FAILED\", \"DO_NOT_CALL\", \"INVALID\", \"CANCELLED\",\r\n] as const;\r\n\r\nexport const defaultFormData: CampaignCreatePayload = {\r\n\tname: \"\", description: \"\", campaignType: \"OUTBOUND_CAMPAIGN\", dialingMode: \"PREVIEW\",\r\n\tmaxConcurrentCalls: 5, callsPerAgent: 1, startTime: \"09:00\", endTime: \"17:00\",\r\n\tdaysOfWeek: [1, 2, 3, 4, 5], timezone: \"Asia/Kolkata\", scheduledStart: \"\", scheduledEnd: \"\",\r\n\tmaxAttempts: 1, retryIntervalMinutes: 15, callerId: \"\", ringTimeoutSeconds: 30,\r\n\tanswerTimeoutSeconds: 30, agentType: \"HUMAN\", aiBotId: null, priority: 5, settings: {},\r\n\tqueueLinks: [],\r\n};\r\n","import type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\n// ─── Typography ───────────────────────────────────────────────────────────────\r\n\r\nexport const labelSx: SxProps<Theme> = {\r\n\tfontWeight: 600,\r\n\tfontSize: \"0.85rem\",\r\n\tcolor: \"#333\",\r\n\tmb: 0.5,\r\n};\r\n\r\nexport const sectionTitleSx: SxProps<Theme> = {\r\n\tfontWeight: 700,\r\n\tfontSize: \"1rem\",\r\n\tcolor: \"#1a1a1a\",\r\n\tmb: 1.5,\r\n\tmt: 0.5,\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n};\r\n\r\n// ─── Table ────────────────────────────────────────────────────────────────────\r\n\r\nexport const headCellSx: SxProps<Theme> = {\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tbgcolor: \"#f1f1f1\",\r\n\tcolor: \"#333\",\r\n\tfontWeight: 600,\r\n\twhiteSpace: \"nowrap\",\r\n\tfontSize: \"0.8rem\",\r\n\tpy: \"6px\",\r\n\tpx: \"12px\",\r\n};\r\n\r\nexport const bodyCellSx: SxProps<Theme> = {\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontSize: \"0.82rem\",\r\n\tpy: \"4px\",\r\n\tpx: \"12px\",\r\n};\r\n\r\nexport const tableRowSx: SxProps<Theme> = {\r\n\t\"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n\t\"&:last-child td, &:last-child th\": { border: 0 },\r\n};\r\n\r\n// ─── Campaign list card ───────────────────────────────────────────────────────\r\n\r\nexport const campaignCardBaseSx: SxProps<Theme> = {\r\n\tp: 1.5,\r\n\tmb: 0.75,\r\n\tborderRadius: \"12px\",\r\n\tcursor: \"pointer\",\r\n\tborder: \"1px solid #e8e8e8\",\r\n\tbackgroundColor: \"#fff\",\r\n\tboxShadow: \"0 1px 2px rgba(0,0,0,0.04)\",\r\n\ttransition: \"all 0.2s ease\",\r\n};\r\n\r\nexport const campaignCardSelectedSx: SxProps<Theme> = {\r\n\t...campaignCardBaseSx,\r\n\tborder: \"2px solid #1A5F6C\",\r\n\tbackgroundColor: \"#f0f7f8\",\r\n\tboxShadow: \"0 2px 8px rgba(26,95,108,0.12)\",\r\n};\r\n\r\n// ─── Input ────────────────────────────────────────────────────────────────────\r\n\r\nexport const inputSx: SxProps<Theme> = {\r\n\t\"& .MuiOutlinedInput-root\": {\r\n\t\tborderRadius: \"8px\",\r\n\t\tbackgroundColor: \"#fff\",\r\n\t\t\"&:hover fieldset\": { borderColor: \"#1A5F6C\" },\r\n\t\t\"&.Mui-focused fieldset\": { borderColor: \"#1A5F6C\" },\r\n\t},\r\n};\r\n\r\n// ─── Dialog ───────────────────────────────────────────────────────────────────\r\n\r\nexport const dialogHeaderSx: SxProps<Theme> = {\r\n\tpx: 2.5,\r\n\tpy: 1.5,\r\n\tborderBottom: \"1px solid #eee\",\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tjustifyContent: \"space-between\",\r\n};\r\n\r\nexport const dialogFooterSx: SxProps<Theme> = {\r\n\tpx: 2.5,\r\n\tpy: 1.5,\r\n\tborderTop: \"1px solid #eee\",\r\n\tdisplay: \"flex\",\r\n\tjustifyContent: \"flex-end\",\r\n\tgap: 1,\r\n};\r\n\r\n// ─── Buttons ──────────────────────────────────────────────────────────────────\r\n\r\nexport const primaryBtnSx: SxProps<Theme> = {\r\n\tdisplay: \"inline-flex\",\r\n\talignItems: \"center\",\r\n\tgap: 0.5,\r\n\tpx: 2.5,\r\n\tpy: 0.75,\r\n\tborderRadius: 1,\r\n\tborder: \"none\",\r\n\tbackgroundColor: \"#1A5F6C\",\r\n\tcolor: \"#fff\",\r\n\tcursor: \"pointer\",\r\n\tfontSize: \"0.85rem\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontWeight: 600,\r\n\t\"&:hover\": { backgroundColor: \"#164e57\" },\r\n\t\"&:disabled\": { opacity: 0.65, cursor: \"not-allowed\" },\r\n};\r\n\r\nexport const cancelBtnSx: SxProps<Theme> = {\r\n\tdisplay: \"inline-flex\",\r\n\talignItems: \"center\",\r\n\tpx: 2.5,\r\n\tpy: 0.75,\r\n\tborderRadius: 1,\r\n\tborder: \"1px solid #ccc\",\r\n\tbackgroundColor: \"#fff\",\r\n\tcursor: \"pointer\",\r\n\tfontSize: \"0.85rem\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\t\"&:hover\": { backgroundColor: \"#f5f5f5\" },\r\n};\r\n\r\nexport const dangerBtnSx: SxProps<Theme> = {\r\n\tdisplay: \"inline-flex\",\r\n\talignItems: \"center\",\r\n\tgap: 0.5,\r\n\tpx: 2.5,\r\n\tpy: 0.75,\r\n\tborderRadius: 1,\r\n\tborder: \"none\",\r\n\tbackgroundColor: \"#c0392b\",\r\n\tcolor: \"#fff\",\r\n\tcursor: \"pointer\",\r\n\tfontSize: \"0.85rem\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontWeight: 600,\r\n\t\"&:hover\": { backgroundColor: \"#a93226\" },\r\n\t\"&:disabled\": { opacity: 0.65, cursor: \"not-allowed\" },\r\n};\r\n\r\nexport const outlinedBtnSx: SxProps<Theme> = {\r\n\tdisplay: \"inline-flex\",\r\n\talignItems: \"center\",\r\n\tgap: 0.5,\r\n\tpx: 2,\r\n\tpy: 0.75,\r\n\tborderRadius: 1,\r\n\tborder: \"1px solid #1A5F6C\",\r\n\tbackgroundColor: \"#fff\",\r\n\tcolor: \"#1A5F6C\",\r\n\tcursor: \"pointer\",\r\n\tfontSize: \"0.82rem\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontWeight: 600,\r\n\t\"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n};\r\n\r\n// ─── Icon action buttons ──────────────────────────────────────────────────────\r\n\r\nexport const iconBtnBaseSx: SxProps<Theme> = {\r\n\tborder: \"1px solid #e0e0e0\",\r\n\tborderRadius: 1,\r\n};\r\n\r\nexport const iconBtnPrimarySx: SxProps<Theme> = {\r\n\tborder: \"1px solid #1A5F6C\",\r\n\tcolor: \"#1A5F6C\",\r\n\tborderRadius: 1,\r\n};\r\n\r\nexport const iconBtnSuccessSx: SxProps<Theme> = {\r\n\tborder: \"1px solid #4caf50\",\r\n\tcolor: \"#4caf50\",\r\n\tborderRadius: 1,\r\n};\r\n\r\nexport const iconBtnWarningSx: SxProps<Theme> = {\r\n\tborder: \"1px solid #ff9800\",\r\n\tcolor: \"#ff9800\",\r\n\tborderRadius: 1,\r\n};\r\n\r\nexport const iconBtnDangerSx: SxProps<Theme> = {\r\n\tborder: \"1px solid #c0392b\",\r\n\tcolor: \"#c0392b\",\r\n\tborderRadius: 1,\r\n};\r\n\r\n// ─── Chip helpers (returned as plain objects, not SxProps) ────────────────────\r\n\r\nexport const STATUS_COLORS: Record<string, string> = {\r\n\tdraft: \"#9e9e9e\",\r\n\tactive: \"#4caf50\",\r\n\tpaused: \"#ff9800\",\r\n\tcompleted: \"#2196f3\",\r\n\tarchived: \"#795548\",\r\n};\r\n\r\nexport function statusChipSx(status: string) {\r\n\tconst color = STATUS_COLORS[status?.toLowerCase()] ?? \"#9e9e9e\";\r\n\treturn {\r\n\t\theight: 22,\r\n\t\tfontSize: \"0.68rem\",\r\n\t\tfontWeight: 700,\r\n\t\ttextTransform: \"capitalize\" as const,\r\n\t\tborderRadius: \"6px\",\r\n\t\tbackgroundColor: color + \"18\",\r\n\t\tcolor,\r\n\t\tborder: `1px solid ${color}40`,\r\n\t};\r\n}\r\n\r\nexport function leadStatusChipSx(status: string) {\r\n\tconst s = status?.toUpperCase();\r\n\treturn {\r\n\t\theight: 22,\r\n\t\tfontSize: \"0.72rem\",\r\n\t\tfontWeight: 700,\r\n\t\ttextTransform: \"capitalize\" as const,\r\n\t\tborderRadius: \"6px\",\r\n\t\tbackgroundColor: s === \"COMPLETED\" ? \"#e8f5e9\"\r\n\t\t\t: s === \"FAILED\" ? \"#ffebee\"\r\n\t\t\t: s === \"DIALING\" ? \"#e3f2fd\"\r\n\t\t\t: \"#f5f5f5\",\r\n\t\tcolor: s === \"COMPLETED\" ? \"#2e7d32\"\r\n\t\t\t: s === \"FAILED\" ? \"#c62828\"\r\n\t\t\t: s === \"DIALING\" ? \"#1565c0\"\r\n\t\t\t: \"#666\",\r\n\t};\r\n}\r\n\r\nexport function leadPriorityChipSx(priority: number | null | undefined) {\r\n\tconst label = priority == null ? \"—\"\r\n\t\t: priority >= 8 ? \"HIGH\"\r\n\t\t: priority >= 4 ? \"MEDIUM\"\r\n\t\t: \"LOW\";\r\n\treturn {\r\n\t\tchip: {\r\n\t\t\theight: 22,\r\n\t\t\tfontSize: \"0.72rem\",\r\n\t\t\tfontWeight: 700,\r\n\t\t\tborderRadius: \"6px\",\r\n\t\t\tbackgroundColor: label === \"HIGH\" ? \"#ffebee\" : label === \"MEDIUM\" ? \"#e3f2fd\" : label === \"LOW\" ? \"#e8f5e9\" : \"#f5f5f5\",\r\n\t\t\tcolor: label === \"HIGH\" ? \"#c62828\" : label === \"MEDIUM\" ? \"#1565c0\" : label === \"LOW\" ? \"#2e7d32\" : \"#666\",\r\n\t\t},\r\n\t\tlabel,\r\n\t};\r\n}\r\n\r\nexport function daychipSx(selected: boolean) {\r\n\treturn {\r\n\t\tcursor: \"pointer\",\r\n\t\tbackgroundColor: selected ? \"#1A5F6C\" : \"transparent\",\r\n\t\tcolor: selected ? \"#fff\" : \"#333\",\r\n\t\tborderColor: \"#1A5F6C\",\r\n\t\tfontWeight: 500,\r\n\t\t\"&:hover\": {\r\n\t\t\tbackgroundColor: selected ? \"#164e57\" : \"#E3F2F5\",\r\n\t\t},\r\n\t};\r\n}\r\n","import React, { memo, useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n\tBox,\n\tChip,\n\tCircularProgress,\n\tFormControl,\n\tFormControlLabel,\n\tCheckbox,\n\tIconButton,\n\tInputAdornment,\n\tMenuItem,\n\tOutlinedInput,\n\tPaper,\n\tSelect,\n\tTab,\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableContainer,\n\tTableHead,\n\tTablePagination,\n\tTableRow,\n\tTabs,\n\tTextField,\n\tTooltip,\n\tTypography,\n\tuseTheme,\n} from \"@mui/material\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport ArchiveIcon from \"@mui/icons-material/Archive\";\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport DownloadIcon from \"@mui/icons-material/Download\";\nimport EditIcon from \"@mui/icons-material/Edit\";\nimport PauseIcon from \"@mui/icons-material/Pause\";\nimport PhoneIcon from \"@mui/icons-material/Phone\";\nimport PlayArrowIcon from \"@mui/icons-material/PlayArrow\";\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\nimport SearchIcon from \"@mui/icons-material/Search\";\nimport SettingsIcon from \"@mui/icons-material/Settings\";\nimport UploadFileIcon from \"@mui/icons-material/UploadFile\";\nimport VisibilityOutlinedIcon from \"@mui/icons-material/VisibilityOutlined\";\n\nimport { SDKProvider } from \"../../components/SDKProvider\";\nimport { SDKPageHeader } from \"../../components/SDKPageHeader\";\nimport { SDKButton } from \"../../components/SDKButton\";\nimport { SDKPermissionGuard } from \"../../components/SDKPermissionGuard\";\nimport { SDK_PERMISSIONS } from \"../../permissions/sdk-constants\";\nimport { useToast } from \"../../services/toastMessage\";\nimport { useSDKPermissions } from \"../../hooks/useSDKPermissions\";\nimport { useGetCallerData } from \"../../hooks/useGetCallerData\";\nimport { useCampaigns, useLeads, useQueues } from \"./useCampaigns\";\nimport { getRecordingByCall } from \"../cdrReport/useCdrReport\";\nimport type {\n\tCampaign,\n\tCampaignCreatePayload,\n\tCreateQueuePayload,\n\tLead,\n\tLeadCallData,\n\tLeadCreatePayload,\n\tQueue,\n\tQueueLinkPayload,\n} from \"./types\";\nimport {\n\tAGENT_TYPES,\n\tCAMPAIGN_TYPES,\n\tDAYS_OF_WEEK,\n\tdefaultFormData,\n\tDIALING_MODES_MAP,\n\tLEAD_PRIORITY_OPTIONS,\n\tLEAD_STATUSES,\n} from \"./types\";\nimport {\n\tlabelSx,\n\tsectionTitleSx,\n\theadCellSx,\n\tbodyCellSx,\n\ttableRowSx,\n\tinputSx,\n\tcampaignCardBaseSx,\n\tcampaignCardSelectedSx,\n\tdialogHeaderSx,\n\tdialogFooterSx,\n\tstatusChipSx,\n\tleadStatusChipSx,\n\tleadPriorityChipSx,\n\tdaychipSx,\n\tSTATUS_COLORS,\n} from \"./styles\";\n\n// ──── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction validatePhone(raw: string): string | null {\n\tconst trimmed = (raw || \"\").trim();\n\tif (!trimmed) return \"Phone number is required\";\n\tconst digits = trimmed.startsWith(\"+91\")\n\t\t? trimmed.slice(3)\n\t\t: trimmed.startsWith(\"91\") && trimmed.length === 12\n\t\t\t? trimmed.slice(2)\n\t\t\t: trimmed;\n\tif (!/^\\d{10}$/.test(digits)) return \"Must be 10 digits, 91+10, or +91+10\";\n\treturn null;\n}\n\nfunction campaignToFormData(c: Campaign): CampaignCreatePayload {\n\treturn {\n\t\tname: c.name || \"\",\n\t\tdescription: c.description || \"\",\n\t\tcampaignType: (c.campaignType || \"OUTBOUND_CAMPAIGN\").toUpperCase(),\n\t\tdialingMode: (c.dialingMode || \"PREVIEW\").toUpperCase(),\n\t\tmaxConcurrentCalls: c.maxConcurrentCalls ?? 5,\n\t\tcallsPerAgent: c.callsPerAgent ?? 1,\n\t\tstartTime: c.startTime ? c.startTime.slice(0, 5) : \"09:00\",\n\t\tendTime: c.endTime ? c.endTime.slice(0, 5) : \"17:00\",\n\t\tdaysOfWeek: c.daysOfWeek || [1, 2, 3, 4, 5],\n\t\ttimezone: c.timezone || \"Asia/Kolkata\",\n\t\tscheduledStart: c.scheduledStart || \"\",\n\t\tscheduledEnd: c.scheduledEnd || \"\",\n\t\tmaxAttempts: c.maxAttempts ?? 3,\n\t\tretryIntervalMinutes: c.retryIntervalMinutes ?? 15,\n\t\tcallerId: c.callerId || \"\",\n\t\tringTimeoutSeconds: c.ringTimeoutSeconds ?? 30,\n\t\tanswerTimeoutSeconds: c.answerTimeoutSeconds ?? 30,\n\t\tagentType: c.agentType || \"HUMAN\",\n\t\taiBotId: null,\n\t\tpriority: c.priority ?? 5,\n\t\tsettings: c.settings || {},\n\t\tqueueLinks: (c.campaignQueues || []).map((q) => ({\n\t\t\tqueueId: q.queueId,\n\t\t\tpriorityOverride: q.priorityOverride ?? 1,\n\t\t\tminWaitBeforeCallback: q.minWaitBeforeCallback ?? 0,\n\t\t})),\n\t};\n}\n\n// ──── Dialog tab sub-components ───────────────────────────────────────────────\n\ntype TabFormProps = {\n\tformData: CampaignCreatePayload;\n\tsetFormData: React.Dispatch<React.SetStateAction<CampaignCreatePayload>>;\n};\n\nfunction BasicInfoTab({ formData, setFormData, isEditMode }: TabFormProps & { isEditMode: boolean }) {\n\tconst handleChange = (field: keyof CampaignCreatePayload, value: any) => {\n\t\tsetFormData((prev) => {\n\t\t\tconst updated = { ...prev, [field]: value };\n\t\t\tif (field === \"campaignType\") {\n\t\t\t\tupdated.dialingMode = DIALING_MODES_MAP[value as string]?.[0] || \"\";\n\t\t\t}\n\t\t\treturn updated;\n\t\t});\n\t};\n\n\tconst mappedModes = DIALING_MODES_MAP[formData.campaignType] || [];\n\tconst availableModes = formData.dialingMode && !mappedModes.includes(formData.dialingMode)\n\t\t? [formData.dialingMode, ...mappedModes]\n\t\t: mappedModes;\n\n\treturn (\n\t\t<Box sx={{ p: 2.5 }}>\n\t\t\t<Typography sx={sectionTitleSx}>Basic Info</Typography>\n\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1.5fr 1fr\", lg: \"1.5fr 1fr 1fr\" }, gap: 2, mb: 2 }}>\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography sx={labelSx}>Campaign Name <span style={{ color: \"red\" }}>*</span></Typography>\n\t\t\t\t\t<TextField fullWidth size=\"small\" value={formData.name}\n\t\t\t\t\t\tonChange={(e) => handleChange(\"name\", e.target.value)} sx={inputSx} />\n\t\t\t\t</Box>\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography sx={labelSx}>Campaign Type <span style={{ color: \"red\" }}>*</span></Typography>\n\t\t\t\t\t<FormControl fullWidth size=\"small\">\n\t\t\t\t\t\t<Select value={formData.campaignType}\n\t\t\t\t\t\t\tonChange={(e) => handleChange(\"campaignType\", e.target.value)}\n\t\t\t\t\t\t\tdisabled={isEditMode}>\n\t\t\t\t\t\t\t{CAMPAIGN_TYPES.map((t) => <MenuItem key={t} value={t}>{t}</MenuItem>)}\n\t\t\t\t\t\t</Select>\n\t\t\t\t\t</FormControl>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t\t<Box sx={{ mb: 2 }}>\n\t\t\t\t<Typography sx={labelSx}>Description</Typography>\n\t\t\t\t<TextField fullWidth size=\"small\" multiline rows={3} value={formData.description}\n\t\t\t\t\tonChange={(e) => handleChange(\"description\", e.target.value)} sx={inputSx} />\n\t\t\t</Box>\n\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1fr 1fr\", lg: \"1fr 1fr 1fr\" }, gap: 2 }}>\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography sx={labelSx}>Dialing Mode <span style={{ color: \"red\" }}>*</span></Typography>\n\t\t\t\t\t<FormControl fullWidth size=\"small\">\n\t\t\t\t\t\t<Select value={formData.dialingMode}\n\t\t\t\t\t\t\tonChange={(e) => handleChange(\"dialingMode\", e.target.value)}>\n\t\t\t\t\t\t\t{availableModes.map((m) => <MenuItem key={m} value={m}>{m}</MenuItem>)}\n\t\t\t\t\t\t</Select>\n\t\t\t\t\t</FormControl>\n\t\t\t\t</Box>\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography sx={labelSx}>Priority</Typography>\n\t\t\t\t\t<FormControl fullWidth size=\"small\">\n\t\t\t\t\t\t<Select value={formData.priority ?? 5}\n\t\t\t\t\t\t\tonChange={(e) => handleChange(\"priority\", Number(e.target.value))}>\n\t\t\t\t\t\t\t{LEAD_PRIORITY_OPTIONS.map((o) => <MenuItem key={o.label} value={o.value}>{o.label}</MenuItem>)}\n\t\t\t\t\t\t</Select>\n\t\t\t\t\t</FormControl>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n\nfunction DialingConfigTab({ formData, setFormData }: TabFormProps) {\n\tconst handleChange = (field: keyof CampaignCreatePayload, value: any) =>\n\t\tsetFormData((prev) => ({ ...prev, [field]: value }));\n\n\treturn (\n\t\t<Box sx={{ p: 2.5 }}>\n\t\t\t<Typography sx={sectionTitleSx}>Dialing Configuration</Typography>\n\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1fr 1fr\", lg: \"1fr 1fr 1fr\" }, gap: 2 }}>\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography sx={labelSx}>Max Concurrent Calls <span style={{ color: \"red\" }}>*</span></Typography>\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"number\" value={formData.maxConcurrentCalls}\n\t\t\t\t\t\tonChange={(e) => handleChange(\"maxConcurrentCalls\", parseInt(e.target.value) || 1)}\n\t\t\t\t\t\tslotProps={{ htmlInput: { min: 1 } }} sx={inputSx} />\n\t\t\t\t</Box>\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography sx={labelSx}>Calls Per Agent</Typography>\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"number\" value={formData.callsPerAgent}\n\t\t\t\t\t\tonChange={(e) => handleChange(\"callsPerAgent\", parseFloat(e.target.value) || 1)}\n\t\t\t\t\t\tslotProps={{ htmlInput: { min: 0.1, step: 0.1 } }} sx={inputSx} />\n\t\t\t\t</Box>\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography sx={labelSx}>Ring Timeout (sec)</Typography>\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"number\" value={formData.ringTimeoutSeconds}\n\t\t\t\t\t\tonChange={(e) => handleChange(\"ringTimeoutSeconds\", parseInt(e.target.value) || 30)}\n\t\t\t\t\t\tslotProps={{ htmlInput: { min: 5 } }} sx={inputSx} />\n\t\t\t\t</Box>\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography sx={labelSx}>Answer Timeout (sec)</Typography>\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"number\" value={formData.answerTimeoutSeconds}\n\t\t\t\t\t\tonChange={(e) => handleChange(\"answerTimeoutSeconds\", parseInt(e.target.value) || 0)}\n\t\t\t\t\t\tslotProps={{ htmlInput: { min: 0 } }} sx={inputSx} />\n\t\t\t\t</Box>\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography sx={labelSx}>Max Attempts <span style={{ color: \"red\" }}>*</span></Typography>\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"number\" value={formData.maxAttempts || \"\"}\n\t\t\t\t\t\tonChange={(e) => handleChange(\"maxAttempts\", parseInt(e.target.value) || 0)}\n\t\t\t\t\t\tslotProps={{ htmlInput: { min: 1 } }} sx={inputSx} />\n\t\t\t\t</Box>\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography sx={labelSx}>Retry Interval (min)</Typography>\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"number\" value={formData.retryIntervalMinutes}\n\t\t\t\t\t\tonChange={(e) => handleChange(\"retryIntervalMinutes\", parseInt(e.target.value) || 5)}\n\t\t\t\t\t\tslotProps={{ htmlInput: { min: 1 } }} sx={inputSx} />\n\t\t\t\t</Box>\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography sx={labelSx}>Agent Type</Typography>\n\t\t\t\t\t<FormControl fullWidth size=\"small\">\n\t\t\t\t\t\t<Select value={formData.agentType}\n\t\t\t\t\t\t\tonChange={(e) => handleChange(\"agentType\", e.target.value)}>\n\t\t\t\t\t\t\t{AGENT_TYPES.map((t) => <MenuItem key={t} value={t}>{t}</MenuItem>)}\n\t\t\t\t\t\t</Select>\n\t\t\t\t\t</FormControl>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n\nfunction ScheduleTab({ formData, setFormData }: TabFormProps) {\n\tconst handleChange = (field: keyof CampaignCreatePayload, value: any) =>\n\t\tsetFormData((prev) => ({ ...prev, [field]: value }));\n\n\tconst toggleDay = (day: number) =>\n\t\tsetFormData((prev) => ({\n\t\t\t...prev,\n\t\t\tdaysOfWeek: prev.daysOfWeek.includes(day)\n\t\t\t\t? prev.daysOfWeek.filter((d) => d !== day)\n\t\t\t\t: [...prev.daysOfWeek, day].sort(),\n\t\t}));\n\n\treturn (\n\t\t<Box sx={{ p: 2.5 }}>\n\t\t\t<Typography sx={sectionTitleSx}>Operating Schedule</Typography>\n\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1fr 1fr\", lg: \"1fr 1fr 1fr\" }, gap: 2, mb: 2 }}>\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography sx={labelSx}>Start Time <span style={{ color: \"red\" }}>*</span></Typography>\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"time\" value={formData.startTime}\n\t\t\t\t\t\tonChange={(e) => handleChange(\"startTime\", e.target.value)} sx={inputSx} />\n\t\t\t\t</Box>\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography sx={labelSx}>End Time <span style={{ color: \"red\" }}>*</span></Typography>\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"time\" value={formData.endTime}\n\t\t\t\t\t\tonChange={(e) => handleChange(\"endTime\", e.target.value)} sx={inputSx} />\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t\t<Box sx={{ mb: 2 }}>\n\t\t\t\t<Typography sx={labelSx}>Timezone</Typography>\n\t\t\t\t<FormControl fullWidth size=\"small\">\n\t\t\t\t\t<Select value={formData.timezone} onChange={(e) => handleChange(\"timezone\", e.target.value)}>\n\t\t\t\t\t\t{[\"Etc/UTC\",\"US/Eastern\",\"US/Central\",\"US/Mountain\",\"US/Pacific\",\n\t\t\t\t\t\t \"Europe/London\",\"Europe/Berlin\",\"Asia/Kolkata\",\"Asia/Tokyo\",\"Australia/Sydney\"\n\t\t\t\t\t\t].map((tz) => <MenuItem key={tz} value={tz}>{tz}</MenuItem>)}\n\t\t\t\t\t</Select>\n\t\t\t\t</FormControl>\n\t\t\t</Box>\n\t\t\t<Box>\n\t\t\t\t<Typography sx={labelSx}>Days of Week</Typography>\n\t\t\t\t<Box sx={{ display: \"flex\", gap: 1, flexWrap: \"wrap\", mt: 0.5 }}>\n\t\t\t\t\t{DAYS_OF_WEEK.map((day) => (\n\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\tkey={day.value}\n\t\t\t\t\t\t\tlabel={day.label}\n\t\t\t\t\t\t\tonClick={() => toggleDay(day.value)}\n\t\t\t\t\t\t\tvariant={formData.daysOfWeek.includes(day.value) ? \"filled\" : \"outlined\"}\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tsx={daychipSx(formData.daysOfWeek.includes(day.value))}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n\n// ──── Queue Linking Tab ───────────────────────────────────────────────────────\n\nfunction QueueLinkingTab({\n\tformData, setFormData, editingCampaign, parentQueueNameMap, onQueuesRefreshed,\n}: TabFormProps & {\n\teditingCampaign: Campaign | null;\n\tparentQueueNameMap: Record<number, string>;\n\tonQueuesRefreshed?: (queues: Queue[]) => void;\n}) {\n\tconst { showToast } = useToast();\n\tconst { fetchQueues, createQueue } = useQueues();\n\n\tconst queueLinks = formData.queueLinks || [];\n\tconst isEditMode = !!editingCampaign;\n\tconst campaignQueues = editingCampaign?.campaignQueues || [];\n\n\tconst [allQueues, setAllQueues] = useState<Queue[]>([]);\n\tconst [queueNames, setQueueNames] = useState<Record<number, string>>({});\n\tconst [selectedQueueIds, setSelectedQueueIds] = useState<number[]>([]);\n\tconst [createOpen, setCreateOpen] = useState(false);\n\tconst [newQueue, setNewQueue] = useState<CreateQueuePayload>({ name: \"\", description: \"\" });\n\tconst [creatingQueue, setCreatingQueue] = useState(false);\n\n\tconst loadQueues = useCallback(async () => {\n\t\tconst list = await fetchQueues();\n\t\tsetAllQueues(list);\n\t\tconst map: Record<number, string> = {};\n\t\tlist.forEach((q) => { map[q.id] = q.name; });\n\t\tsetQueueNames(map);\n\t\tonQueuesRefreshed?.(list);\n\t}, [fetchQueues, onQueuesRefreshed]);\n\n\tuseEffect(() => { loadQueues(); }, [loadQueues]);\n\n\tconst handleCreateQueue = async () => {\n\t\tif (!newQueue.name.trim()) {\n\t\t\tshowToast(\"Queue name is required\", \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tsetCreatingQueue(true);\n\t\ttry {\n\t\t\tawait createQueue(newQueue);\n\t\t\tshowToast(\"Queue created successfully\", \"success\");\n\t\t\tsetCreateOpen(false);\n\t\t\tsetNewQueue({ name: \"\", description: \"\" });\n\t\t\tloadQueues();\n\t\t} catch (err: any) {\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Failed to create queue\", \"error\");\n\t\t} finally {\n\t\t\tsetCreatingQueue(false);\n\t\t}\n\t};\n\n\tconst linkedIds = new Set(\n\t\tisEditMode ? campaignQueues.map((q) => q.queueId) : queueLinks.map((q) => q.queueId),\n\t);\n\tconst availableQueues = allQueues.filter((q) => !linkedIds.has(q.id));\n\n\tconst handleAddQueues = () => {\n\t\tif (selectedQueueIds.length === 0) return;\n\t\tconst newLinks: QueueLinkPayload[] = selectedQueueIds.map((qId) => ({\n\t\t\tqueueId: qId, priorityOverride: 5, minWaitBeforeCallback: 0,\n\t\t}));\n\t\tsetFormData((prev) => ({ ...prev, queueLinks: [...(prev.queueLinks || []), ...newLinks] }));\n\t\tshowToast(`${selectedQueueIds.length} queue(s) added`, \"success\");\n\t\tsetSelectedQueueIds([]);\n\t};\n\n\tconst handleRemoveQueue = (queueId: number) => {\n\t\tsetFormData((prev) => ({\n\t\t\t...prev,\n\t\t\tqueueLinks: (prev.queueLinks || []).filter((q) => q.queueId !== queueId),\n\t\t}));\n\t\tshowToast(\"Queue removed\", \"success\");\n\t};\n\n\tconst handleCellUpdate = (queueId: number, field: keyof QueueLinkPayload, value: string) => {\n\t\tconst numVal = parseInt(value) || 0;\n\t\tsetFormData((prev) => ({\n\t\t\t...prev,\n\t\t\tqueueLinks: (prev.queueLinks || []).map((q) =>\n\t\t\t\tq.queueId === queueId ? { ...q, [field]: numVal } : q,\n\t\t\t),\n\t\t}));\n\t};\n\n\treturn (\n\t\t<Box sx={{ p: 2.5 }}>\n\t\t\t{/* Inline Create Queue dialog */}\n\t\t\t{createOpen && (\n\t\t\t\t<Box\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tposition: \"fixed\", inset: 0, zIndex: 1600,\n\t\t\t\t\t\tbackgroundColor: \"rgba(0,0,0,0.45)\",\n\t\t\t\t\t\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t>\n\t\t\t\t\t<Paper elevation={6} sx={{ width: { xs: \"90vw\", sm: 420 }, borderRadius: \"16px\", overflow: \"hidden\", boxShadow: \"0 8px 32px rgba(26,95,108,0.18)\" }}>\n\t\t\t\t\t\t<Box sx={{ ...dialogHeaderSx, backgroundColor: \"#1A5F6C\", color: \"#fff\" }}>\n\t\t\t\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\" fontFamily=\"poppins, Arial, sans-serif\">Create New Queue</Typography>\n\t\t\t\t\t\t\t<IconButton size=\"small\" onClick={() => !creatingQueue && setCreateOpen(false)} sx={{ color: \"#fff\" }}>✕</IconButton>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Box sx={{ p: 2.5, display: \"flex\", flexDirection: \"column\", gap: 1.5 }}>\n\t\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Queue Name <span style={{ color: \"red\" }}>*</span></Typography>\n\t\t\t\t\t\t\t\t<TextField fullWidth size=\"small\" value={newQueue.name}\n\t\t\t\t\t\t\t\t\tonChange={(e) => setNewQueue({ ...newQueue, name: e.target.value })} sx={inputSx} />\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Description</Typography>\n\t\t\t\t\t\t\t\t<TextField fullWidth size=\"small\" multiline rows={3} value={newQueue.description}\n\t\t\t\t\t\t\t\t\tonChange={(e) => setNewQueue({ ...newQueue, description: e.target.value })} sx={inputSx} />\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Box sx={dialogFooterSx}>\n\t\t\t\t\t\t\t<SDKButton variant=\"cancel\" onClick={() => setCreateOpen(false)} disabled={creatingQueue}>Cancel</SDKButton>\n\t\t\t\t\t\t\t<SDKButton onClick={handleCreateQueue} disabled={creatingQueue}\n\t\t\t\t\t\t\t\tstartIcon={creatingQueue ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\n\t\t\t\t\t\t\t\tCreate\n\t\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Paper>\n\t\t\t\t</Box>\n\t\t\t)}\n\n\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 2 }}>\n\t\t\t\t<Typography sx={sectionTitleSx}>Linked Queues</Typography>\n\t\t\t\t<SDKButton startIcon={<AddIcon />} onClick={() => setCreateOpen(true)}>\n\t\t\t\t\tCreate New Queue\n\t\t\t\t</SDKButton>\n\t\t\t</Box>\n\n\t\t\t{/* Add Queue — multi-select */}\n\t\t\t<Box sx={{\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\talignItems: { xs: \"stretch\", sm: \"center\" },\n\t\t\t\tflexDirection: { xs: \"column\", sm: \"row\" },\n\t\t\t\tgap: 1.5, mb: 2,\n\t\t\t}}>\n\t\t\t\t<FormControl size=\"small\" sx={{ flex: 2 }}>\n\t\t\t\t\t<Select\n\t\t\t\t\t\tmultiple\n\t\t\t\t\t\tvalue={selectedQueueIds}\n\t\t\t\t\t\tonChange={(e) => setSelectedQueueIds(e.target.value as number[])}\n\t\t\t\t\t\tdisplayEmpty\n\t\t\t\t\t\trenderValue={(selected) =>\n\t\t\t\t\t\t\t(selected as number[]).length === 0\n\t\t\t\t\t\t\t\t? <Typography sx={{ color: \"#999\", fontSize: \"0.85rem\" }}>Select queues to link</Typography>\n\t\t\t\t\t\t\t\t: (\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", flexWrap: \"wrap\", gap: 0.5 }}>\n\t\t\t\t\t\t\t\t\t\t{(selected as number[]).map((id) => (\n\t\t\t\t\t\t\t\t\t\t\t<Chip key={id} size=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={queueNames[id] || parentQueueNameMap[id] || `Queue #${id}`}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ height: 22, fontSize: \"0.75rem\", fontWeight: 600, backgroundColor: \"#e0f2f1\", color: \"#00695c\" }} />\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tborderRadius: \"8px\", fontSize: \"0.85rem\",\n\t\t\t\t\t\t\t\"& .MuiSelect-select\": { display: \"flex\", flexWrap: \"wrap\", gap: 0.5, py: 0.75 },\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tMenuProps={{\n\t\t\t\t\t\t\tPaperProps: { sx: { maxHeight: 250, borderRadius: \"8px\", mt: 0.5, boxShadow: \"0 4px 20px rgba(0,0,0,0.12)\" } },\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{availableQueues.length === 0\n\t\t\t\t\t\t\t? <MenuItem value=\"\" disabled>No available queues</MenuItem>\n\t\t\t\t\t\t\t: availableQueues.map((q) => (\n\t\t\t\t\t\t\t\t<MenuItem key={q.id} value={q.id} sx={{ py: 0.75, px: 1.5, fontSize: \"0.85rem\" }}>\n\t\t\t\t\t\t\t\t\t<Checkbox size=\"small\" checked={selectedQueueIds.includes(q.id)}\n\t\t\t\t\t\t\t\t\t\tsx={{ p: 0.5, mr: 1, color: \"#1A5F6C\", \"&.Mui-checked\": { color: \"#1A5F6C\" } }} />\n\t\t\t\t\t\t\t\t\t{q.name} (ID: {q.id})\n\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t</Select>\n\t\t\t\t</FormControl>\n\t\t\t\t<SDKButton onClick={handleAddQueues} disabled={selectedQueueIds.length === 0} sx={{ whiteSpace: \"nowrap\" }}>\n\t\t\t\t\tAdd To List\n\t\t\t\t</SDKButton>\n\t\t\t</Box>\n\n\t\t\t{/* Linked queues table */}\n\t\t\t{queueLinks.length === 0 ? (\n\t\t\t\t<Paper variant=\"outlined\" sx={{ p: 3, textAlign: \"center\", borderRadius: 2, borderStyle: \"dashed\" }}>\n\t\t\t\t\t<Typography sx={{ color: \"#999\", fontSize: \"0.9rem\" }}>\n\t\t\t\t\t\tNo queues linked yet. Select queues above to add.\n\t\t\t\t\t</Typography>\n\t\t\t\t</Paper>\n\t\t\t) : (\n\t\t\t\t<TableContainer component={Paper} variant=\"outlined\" sx={{ borderRadius: 2, overflow: \"visible\" }}>\n\t\t\t\t\t<Table size=\"small\">\n\t\t\t\t\t\t<TableHead>\n\t\t\t\t\t\t\t<TableRow sx={{ backgroundColor: \"#f1f1f1\" }}>\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Queue Name</TableCell>\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Priority Override</TableCell>\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Min Wait Before Callback</TableCell>\n\t\t\t\t\t\t\t\t<TableCell sx={{ ...(headCellSx as any), textAlign: \"right\" }}>Action</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t\t{queueLinks.map((q) => (\n\t\t\t\t\t\t\t\t<TableRow key={q.queueId} sx={tableRowSx}>\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\n\t\t\t\t\t\t\t\t\t\t{queueNames[q.queueId] || parentQueueNameMap[q.queueId] || `Queue #${q.queueId}`}\n\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\n\t\t\t\t\t\t\t\t\t\t<FormControl size=\"small\" sx={{ width: 120 }}>\n\t\t\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={q.priorityOverride ?? 5}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleCellUpdate(q.queueId, \"priorityOverride\", String(e.target.value))}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{LEAD_PRIORITY_OPTIONS.map((opt) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<MenuItem key={opt.label} value={opt.value}>{opt.label}</MenuItem>\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</Select>\n\t\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\n\t\t\t\t\t\t\t\t\t\t<TextField size=\"small\" type=\"number\"\n\t\t\t\t\t\t\t\t\t\t\tvalue={q.minWaitBeforeCallback}\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleCellUpdate(q.queueId, \"minWaitBeforeCallback\", e.target.value)}\n\t\t\t\t\t\t\t\t\t\t\tslotProps={{\n\t\t\t\t\t\t\t\t\t\t\t\thtmlInput: { min: 0, style: { fontSize: \"0.85rem\", padding: \"4px 8px\" } },\n\t\t\t\t\t\t\t\t\t\t\t\tinput: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tendAdornment: (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<InputAdornment position=\"end\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.75rem\", color: \"#666\" }}>s</Typography>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</InputAdornment>\n\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tsx={{ width: 100, \"& .MuiOutlinedInput-root\": { borderRadius: \"4px\" } }} />\n\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...(bodyCellSx as any), textAlign: \"right\" }}>\n\t\t\t\t\t\t\t\t\t\t<SDKButton variant=\"danger\" size=\"small\" onClick={() => handleRemoveQueue(q.queueId)}>\n\t\t\t\t\t\t\t\t\t\t\tRemove\n\t\t\t\t\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableBody>\n\t\t\t\t\t</Table>\n\t\t\t\t</TableContainer>\n\t\t\t)}\n\t\t</Box>\n\t);\n}\n\n// ──── Leads Tab (inside dialog) ───────────────────────────────────────────────\n\nfunction LeadsTabInDialog({\n\teditingCampaign,\n\tonLeadsChange,\n}: {\n\teditingCampaign: Campaign | null;\n\tonLeadsChange?: () => void;\n}) {\n\tconst { showToast } = useToast();\n\tconst showVoicemail = editingCampaign?.campaignType === \"AFTER_HOURS_CALLBACK\";\n\tconst { leads, fetchLeads, createLead, uploadLeadsExcel, downloadLeadTemplate } = useLeads();\n\tconst [adding, setAdding] = useState(false);\n\tconst [leadForm, setLeadForm] = useState<LeadCreatePayload>({ phoneNumber: \"\", callerName: \"\", priority: 5 });\n\tconst [search, setSearch] = useState(\"\");\n\tconst [uploadFile, setUploadFile] = useState<File | null>(null);\n\tconst [uploading, setUploading] = useState(false);\n\tconst uploadRef = useRef<HTMLInputElement>(null);\n\n\tuseEffect(() => {\n\t\tif (editingCampaign) fetchLeads(editingCampaign.id, { page: 1, pageSize: 100 });\n\t}, [editingCampaign, fetchLeads]);\n\n\tif (!editingCampaign) {\n\t\treturn (\n\t\t\t<Box sx={{ p: 4, textAlign: \"center\" }}>\n\t\t\t\t<Typography sx={{ color: \"#999\", fontSize: \"0.9rem\", fontFamily: \"poppins, Arial, sans-serif\" }}>\n\t\t\t\t\tSave the campaign first, then you can add leads.\n\t\t\t\t</Typography>\n\t\t\t</Box>\n\t\t);\n\t}\n\n\tconst handleAddLead = async () => {\n\t\tconst err = validatePhone(leadForm.phoneNumber);\n\t\tif (err) { showToast(err, \"warning\"); return; }\n\t\tsetAdding(true);\n\t\ttry {\n\t\t\tawait createLead(editingCampaign.id, { ...leadForm, priority: leadForm.priority ?? 5 });\n\t\t\tshowToast(\"Lead added successfully\", \"success\");\n\t\t\tsetLeadForm({ phoneNumber: \"\", callerName: \"\", priority: 5 });\n\t\t\tfetchLeads(editingCampaign.id, { page: 1, pageSize: 100 });\n\t\t\tonLeadsChange?.();\n\t\t} catch (err: any) {\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Failed to add lead\", \"error\");\n\t\t} finally { setAdding(false); }\n\t};\n\n\tconst handleUpload = async () => {\n\t\tif (!uploadFile) return;\n\t\tsetUploading(true);\n\t\ttry {\n\t\t\tawait uploadLeadsExcel(editingCampaign.id, uploadFile);\n\t\t\tshowToast(\"Leads uploaded successfully\", \"success\");\n\t\t\tsetUploadFile(null);\n\t\t\tif (uploadRef.current) uploadRef.current.value = \"\";\n\t\t\tfetchLeads(editingCampaign.id, { page: 1, pageSize: 100 });\n\t\t\tonLeadsChange?.();\n\t\t} catch (err: any) {\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Failed to upload leads\", \"error\");\n\t\t} finally { setUploading(false); }\n\t};\n\n\tconst handleDownload = async () => {\n\t\ttry { await downloadLeadTemplate(editingCampaign.id); }\n\t\tcatch (err: any) { showToast(err?.response?.data?.message || err?.message || \"Download failed\", \"error\"); }\n\t};\n\n\tconst filtered = leads.filter((l) =>\n\t\t!search || l.callerName?.toLowerCase().includes(search.toLowerCase()) || l.phoneNumber?.includes(search),\n\t);\n\n\treturn (\n\t\t<Box sx={{ p: 2.5 }}>\n\t\t\t<Typography sx={sectionTitleSx}>Add Lead Manually</Typography>\n\t\t\t<Paper variant=\"outlined\" sx={{ p: 2, mb: 2.5, borderRadius: 2 }}>\n\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1fr 1fr\", lg: \"1fr 1fr 1fr\" }, gap: 2, mb: 2 }}>\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<Typography sx={labelSx}>Phone Number <span style={{ color: \"red\" }}>*</span></Typography>\n\t\t\t\t\t\t<TextField fullWidth size=\"small\" placeholder=\"+1234567890\" value={leadForm.phoneNumber}\n\t\t\t\t\t\t\tonChange={(e) => setLeadForm((p) => ({ ...p, phoneNumber: e.target.value.replace(/[^0-9+\\-() ]/g, \"\") }))}\n\t\t\t\t\t\t\terror={!!leadForm.phoneNumber && !!validatePhone(leadForm.phoneNumber)}\n\t\t\t\t\t\t\thelperText={leadForm.phoneNumber ? validatePhone(leadForm.phoneNumber) || \"\" : \"\"}\n\t\t\t\t\t\t\tsx={inputSx} />\n\t\t\t\t\t</Box>\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<Typography sx={labelSx}>Caller Name</Typography>\n\t\t\t\t\t\t<TextField fullWidth size=\"small\" value={leadForm.callerName || \"\"}\n\t\t\t\t\t\t\tonChange={(e) => setLeadForm((p) => ({ ...p, callerName: e.target.value }))} sx={inputSx} />\n\t\t\t\t\t</Box>\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<Typography sx={labelSx}>Source</Typography>\n\t\t\t\t\t\t<TextField fullWidth size=\"small\" value={leadForm.source || \"\"}\n\t\t\t\t\t\t\tonChange={(e) => setLeadForm((p) => ({ ...p, source: e.target.value }))} sx={inputSx} />\n\t\t\t\t\t</Box>\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<Typography sx={labelSx}>Priority</Typography>\n\t\t\t\t\t\t<FormControl fullWidth size=\"small\">\n\t\t\t\t\t\t\t<Select value={leadForm.priority ?? 5}\n\t\t\t\t\t\t\t\tonChange={(e) => setLeadForm((p) => ({ ...p, priority: Number(e.target.value) }))}>\n\t\t\t\t\t\t\t\t{LEAD_PRIORITY_OPTIONS.map((opt) => <MenuItem key={opt.label} value={opt.value}>{opt.label}</MenuItem>)}\n\t\t\t\t\t\t\t</Select>\n\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t</Box>\n\t\t\t\t\t<Box sx={{ gridColumn: \"1 / -1\" }}>\n\t\t\t\t\t\t<Typography sx={labelSx}>Notes</Typography>\n\t\t\t\t\t\t<TextField fullWidth size=\"small\" multiline minRows={2} maxRows={8}\n\t\t\t\t\t\t\tvalue={leadForm.notes || \"\"}\n\t\t\t\t\t\t\tonChange={(e) => setLeadForm((p) => ({ ...p, notes: e.target.value }))} sx={inputSx} />\n\t\t\t\t\t</Box>\n\t\t\t\t</Box>\n\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: \"flex-end\" }}>\n\t\t\t\t\t<SDKButton onClick={handleAddLead} disabled={adding}\n\t\t\t\t\t\tstartIcon={adding ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\n\t\t\t\t\t\tAdd Lead\n\t\t\t\t\t</SDKButton>\n\t\t\t\t</Box>\n\t\t\t</Paper>\n\n\t\t\t<Typography sx={sectionTitleSx}>Upload Leads from File</Typography>\n\t\t\t<Paper variant=\"outlined\" sx={{ p: 2, mb: 2.5, borderRadius: 2 }}>\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.5, flexWrap: \"wrap\" }}>\n\t\t\t\t\t<SDKButton variant=\"outlined\" startIcon={<UploadFileIcon />} onClick={() => uploadRef.current?.click()}>\n\t\t\t\t\t\tChoose File\n\t\t\t\t\t</SDKButton>\n\t\t\t\t\t<input ref={uploadRef} type=\"file\" accept=\".csv,.xlsx,.xls\" hidden\n\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\tconst f = e.target.files?.[0];\n\t\t\t\t\t\t\tif (!f) return;\n\t\t\t\t\t\t\tif (![\".csv\", \".xlsx\", \".xls\"].some((ext) => f.name.toLowerCase().endsWith(ext))) {\n\t\t\t\t\t\t\t\tshowToast(\"Please select a CSV or Excel file\", \"warning\"); return;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetUploadFile(f);\n\t\t\t\t\t\t}} />\n\t\t\t\t\t<Typography sx={{ fontSize: \"0.82rem\", color: \"#666\", flex: 1, fontFamily: \"poppins, Arial, sans-serif\" }}>\n\t\t\t\t\t\t{uploadFile ? uploadFile.name : \"No file chosen\"}\n\t\t\t\t\t</Typography>\n\t\t\t\t\t{uploadFile && (\n\t\t\t\t\t\t<SDKButton variant=\"cancel\" size=\"small\"\n\t\t\t\t\t\t\tonClick={() => { setUploadFile(null); if (uploadRef.current) uploadRef.current.value = \"\"; }}>\n\t\t\t\t\t\t\tClear\n\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t)}\n\t\t\t\t\t<SDKButton variant=\"outlined\" startIcon={<DownloadIcon />} onClick={handleDownload}>\n\t\t\t\t\t\tSample Template\n\t\t\t\t\t</SDKButton>\n\t\t\t\t</Box>\n\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: \"flex-end\", mt: 1.5 }}>\n\t\t\t\t\t<SDKButton onClick={handleUpload} disabled={uploading || !uploadFile}\n\t\t\t\t\t\tstartIcon={uploading ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\n\t\t\t\t\t\tUpload\n\t\t\t\t\t</SDKButton>\n\t\t\t\t</Box>\n\t\t\t</Paper>\n\n\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 1.5 }}>\n\t\t\t\t<Typography sx={sectionTitleSx}>Leads ({leads.length})</Typography>\n\t\t\t\t<OutlinedInput size=\"small\" value={search} onChange={(e) => setSearch(e.target.value)} placeholder=\"Search...\"\n\t\t\t\t\tsx={{ width: 200, fontSize: \"0.85rem\", height: 34, borderRadius: \"20px\" }}\n\t\t\t\t\tstartAdornment={<InputAdornment position=\"start\"><SearchIcon sx={{ fontSize: 16, color: \"#aaa\" }} /></InputAdornment>} />\n\t\t\t</Box>\n\t\t\t{filtered.length === 0 ? (\n\t\t\t\t<Paper variant=\"outlined\" sx={{ p: 3, textAlign: \"center\", borderRadius: 2, borderStyle: \"dashed\" }}>\n\t\t\t\t\t<Typography sx={{ color: \"#999\", fontSize: \"0.9rem\" }}>\n\t\t\t\t\t\t{leads.length === 0 ? \"No leads yet.\" : \"No leads match your search.\"}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Paper>\n\t\t\t) : (\n\t\t\t\t<TableContainer component={Paper} variant=\"outlined\" sx={{ borderRadius: 2, overflow: \"visible\" }}>\n\t\t\t\t\t<Table size=\"small\">\n\t\t\t\t\t\t<TableHead>\n\t\t\t\t\t\t\t<TableRow sx={{ backgroundColor: \"#f1f1f1\" }}>\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Phone Number</TableCell>\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Status</TableCell>\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Source</TableCell>\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Attempts</TableCell>\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Last Outcome</TableCell>\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Notes</TableCell>\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Outcome</TableCell>{showVoicemail && <TableCell sx={headCellSx}>Voice Mail</TableCell>}\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t\t{filtered.map((lead) => (\n\t\t\t\t\t\t\t\t<TableRow key={lead.id} sx={tableRowSx}>\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.phoneNumber}</TableCell>\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\n\t\t\t\t\t\t\t\t\t\t<Chip label={lead.status || \"pending\"} size=\"small\" sx={leadStatusChipSx(lead.status)} />\n\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.source || \"\"}</TableCell>\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.attemptCount ?? 0}</TableCell>\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.lastOutcome || \"\"}</TableCell>\n\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...(bodyCellSx as any), maxWidth: 200, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\n\t\t\t\t\t\t\t\t\t\t{lead.notes ? <Tooltip title={lead.notes} arrow placement=\"top\"><span>{lead.notes}</span></Tooltip> : \"\"}\n\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.lastReason || \"\"}</TableCell>\n\t\t\t\t\t\t\t\t\t\t{showVoicemail && <TableCell sx={{ ...bodyCellSx, minWidth: 180 }}>{lead.originalCallId ? <CallRecording callUuid={lead.originalCallId} recordingPath={lead.voicemail} iconOnly /> : \"\"}</TableCell>}\n\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableBody>\n\t\t\t\t\t</Table>\n\t\t\t\t</TableContainer>\n\t\t\t)}\n\t\t</Box>\n\t);\n}\n\n// ──── Campaign Create / Edit Dialog ───────────────────────────────────────────\n\ninterface CampaignDialogProps {\n\topen: boolean;\n\teditingCampaign: Campaign | null;\n\tformData: CampaignCreatePayload;\n\tsetFormData: React.Dispatch<React.SetStateAction<CampaignCreatePayload>>;\n\tsaving: boolean;\n\tonSave: () => void;\n\tonClose: () => void;\n\tparentQueueNameMap: Record<number, string>;\n\tonQueuesRefreshed?: (queues: Queue[]) => void;\n\tonLeadsChange?: () => void;\n}\n\nconst CampaignDialog = memo(function CampaignDialog({\n\topen, editingCampaign, formData, setFormData, saving, onSave, onClose,\n\tparentQueueNameMap, onQueuesRefreshed, onLeadsChange,\n}: CampaignDialogProps) {\n\tconst { showToast } = useToast();\n\tconst [tab, setTab] = useState(0);\n\tuseEffect(() => { if (open) setTab(0); }, [open]);\n\tif (!open) return null;\n\n\tconst TAB_LABELS = [\"Basic Info\", \"Dialing Configuration\", \"Schedule & Operating Hours\", \"Queue Linking\", \"Leads\"];\n\tconst lastSaveTab = 3; // Save shows from tab 0..3 inclusive; Leads (4) is read-only management\n\tconst leadsTabDisabled = !editingCampaign;\n\n\t// In edit mode, keep the Update button disabled until the form actually changes.\n\tconst isDirty = !editingCampaign\n\t\t|| JSON.stringify(formData) !== JSON.stringify(campaignToFormData(editingCampaign));\n\n\tconst validateTab = (t: number): boolean => {\n\t\tif (t === 0) {\n\t\t\tif (!formData.name.trim()) { showToast(\"Please fill Campaign Name\", \"warning\"); return false; }\n\t\t\tif (!formData.campaignType) { showToast(\"Please fill Campaign Type\", \"warning\"); return false; }\n\t\t\tif (!formData.dialingMode) { showToast(\"Please fill Dialing Mode\", \"warning\"); return false; }\n\t\t}\n\t\tif (t === 1) {\n\t\t\tif (!formData.maxConcurrentCalls) { showToast(\"Please fill Max Concurrent Calls\", \"warning\"); return false; }\n\t\t\tif (!formData.maxAttempts) { showToast(\"Please fill Max Attempts\", \"warning\"); return false; }\n\t\t}\n\t\tif (t === 2) {\n\t\t\tif (!formData.startTime) { showToast(\"Please fill Start Time\", \"warning\"); return false; }\n\t\t\tif (!formData.endTime) { showToast(\"Please fill End Time\", \"warning\"); return false; }\n\t\t}\n\t\treturn true;\n\t};\n\n\tconst handleTabChange = (newTab: number) => {\n\t\tif (newTab === 4 && leadsTabDisabled) return;\n\t\tif (newTab > tab && !validateTab(tab)) return;\n\t\tsetTab(newTab);\n\t};\n\n\treturn (\n\t\t<Box\n\t\t\tsx={{\n\t\t\t\tposition: \"fixed\", inset: 0, zIndex: 1300,\n\t\t\t\tbackgroundColor: \"rgba(0,0,0,0.45)\",\n\t\t\t\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n\t\t\t}}\n\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t>\n\t\t\t<Paper\n\t\t\t\televation={6}\n\t\t\t\tsx={{\n\t\t\t\t\twidth: { xs: \"95vw\", sm: 720, md: 880 },\n\t\t\t\t\tmaxHeight: \"92vh\",\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\tborderRadius: \"16px\",\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\tboxShadow: \"0 8px 32px rgba(26,95,108,0.18)\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* Header */}\n\t\t\t\t<Box sx={{\n\t\t\t\t\t...dialogHeaderSx,\n\t\t\t\t\tbackgroundColor: \"#1A5F6C\",\n\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\t\"& .MuiIconButton-root\": { color: \"#fff\" },\n\t\t\t\t}}>\n\t\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\" fontFamily=\"poppins, Arial, sans-serif\">\n\t\t\t\t\t\t{editingCampaign ? \"Edit Campaign\" : \"Create Campaign\"}\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<IconButton size=\"small\" onClick={onClose} sx={{ color: \"#fff\" }}>✕</IconButton>\n\t\t\t\t</Box>\n\n\t\t\t\t{/* Tabs */}\n\t\t\t\t<Tabs\n\t\t\t\t\tvalue={tab}\n\t\t\t\t\tonChange={(_, v) => handleTabChange(v)}\n\t\t\t\t\tvariant=\"scrollable\"\n\t\t\t\t\tscrollButtons=\"auto\"\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tborderBottom: \"1px solid #eee\",\n\t\t\t\t\t\tminHeight: 44,\n\t\t\t\t\t\t\"& .MuiTab-root\": {\n\t\t\t\t\t\t\tfontSize: \"0.85rem\",\n\t\t\t\t\t\t\tminHeight: 44,\n\t\t\t\t\t\t\ttextTransform: \"none\",\n\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\tfontFamily: \"poppins, Arial, sans-serif\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"& .Mui-selected\": { color: \"#1A5F6C\" },\n\t\t\t\t\t}}\n\t\t\t\t\tTabIndicatorProps={{ style: { height: 3, backgroundColor: \"#1A5F6C\", borderRadius: \"3px 3px 0 0\" } }}\n\t\t\t\t>\n\t\t\t\t\t{TAB_LABELS.map((label, i) => (\n\t\t\t\t\t\t<Tab key={label} label={label} value={i} disabled={i === 4 && leadsTabDisabled} />\n\t\t\t\t\t))}\n\t\t\t\t</Tabs>\n\n\t\t\t\t{/* Tab content */}\n\t\t\t\t<Box sx={{ flex: 1, overflowY: \"auto\", minHeight: 380 }}>\n\t\t\t\t\t{tab === 0 && <BasicInfoTab formData={formData} setFormData={setFormData} isEditMode={!!editingCampaign} />}\n\t\t\t\t\t{tab === 1 && <DialingConfigTab formData={formData} setFormData={setFormData} />}\n\t\t\t\t\t{tab === 2 && <ScheduleTab formData={formData} setFormData={setFormData} />}\n\t\t\t\t\t{tab === 3 && (\n\t\t\t\t\t\t<QueueLinkingTab\n\t\t\t\t\t\t\tformData={formData}\n\t\t\t\t\t\t\tsetFormData={setFormData}\n\t\t\t\t\t\t\teditingCampaign={editingCampaign}\n\t\t\t\t\t\t\tparentQueueNameMap={parentQueueNameMap}\n\t\t\t\t\t\t\tonQueuesRefreshed={onQueuesRefreshed}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{tab === 4 && (\n\t\t\t\t\t\t<LeadsTabInDialog\n\t\t\t\t\t\t\teditingCampaign={editingCampaign}\n\t\t\t\t\t\t\tonLeadsChange={onLeadsChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\n\t\t\t\t{/* Footer — wizard nav */}\n\t\t\t\t<Box sx={dialogFooterSx}>\n\t\t\t\t\t<SDKButton variant=\"cancel\" onClick={onClose}>Cancel</SDKButton>\n\t\t\t\t\t{tab > 0 && (\n\t\t\t\t\t\t<SDKButton variant=\"outlined\" onClick={() => setTab((t) => t - 1)}>Back</SDKButton>\n\t\t\t\t\t)}\n\t\t\t\t\t{tab < lastSaveTab && (\n\t\t\t\t\t\t<SDKButton onClick={() => handleTabChange(tab + 1)}>Next</SDKButton>\n\t\t\t\t\t)}\n\t\t\t\t\t{tab === lastSaveTab && (\n\t\t\t\t\t\t<SDKPermissionGuard\n\t\t\t\t\t\t\tpermissions={[\n\t\t\t\t\t\t\t\teditingCampaign\n\t\t\t\t\t\t\t\t\t? SDK_PERMISSIONS.CAMPAIGNS_UPDATE\n\t\t\t\t\t\t\t\t\t: SDK_PERMISSIONS.CAMPAIGNS_CREATE,\n\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\tshowFallback={false}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SDKButton onClick={onSave} disabled={saving || !isDirty}\n\t\t\t\t\t\t\t\tstartIcon={saving ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\n\t\t\t\t\t\t\t\t{editingCampaign ? \"Update\" : \"Create\"}\n\t\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t\t</SDKPermissionGuard>\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\t\t\t</Paper>\n\t\t</Box>\n\t);\n});\n\n// ──── Add Lead Dialog ─────────────────────────────────────────────────────────\n\ninterface AddLeadDialogProps {\n\topen: boolean;\n\tdata: LeadCreatePayload;\n\tonChange: (data: LeadCreatePayload) => void;\n\tsaving: boolean;\n\tonSave: () => void;\n\tonClose: () => void;\n}\n\nconst AddLeadDialog = memo(function AddLeadDialog({\n\topen, data, onChange, saving, onSave, onClose,\n}: AddLeadDialogProps) {\n\tif (!open) return null;\n\tconst phoneError = data.phoneNumber ? validatePhone(data.phoneNumber) : null;\n\n\treturn (\n\t\t<Box\n\t\t\tsx={{\n\t\t\t\tposition: \"fixed\", inset: 0, zIndex: 1400,\n\t\t\t\tbackgroundColor: \"rgba(0,0,0,0.45)\",\n\t\t\t\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n\t\t\t}}\n\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t>\n\t\t\t<Paper elevation={6} sx={{ width: { xs: \"95vw\", sm: 560, lg: 720 }, borderRadius: \"16px\", overflow: \"hidden\", boxShadow: \"0 8px 32px rgba(26,95,108,0.18)\" }}>\n\t\t\t\t<Box sx={{ ...dialogHeaderSx, backgroundColor: \"#1A5F6C\", color: \"#fff\" }}>\n\t\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\" fontFamily=\"poppins, Arial, sans-serif\">Add Lead</Typography>\n\t\t\t\t\t<IconButton size=\"small\" onClick={onClose} sx={{ color: \"#fff\" }}>✕</IconButton>\n\t\t\t\t</Box>\n\t\t\t\t<Box sx={{ p: 2.5 }}>\n\t\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1fr 1fr\", lg: \"1fr 1fr 1fr\" }, gap: 2 }}>\n\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t<Typography sx={labelSx}>Phone Number <span style={{ color: \"red\" }}>*</span></Typography>\n\t\t\t\t\t\t\t<TextField fullWidth size=\"small\" placeholder=\"+1234567890\"\n\t\t\t\t\t\t\t\tvalue={data.phoneNumber}\n\t\t\t\t\t\t\t\tonChange={(e) => onChange({ ...data, phoneNumber: e.target.value.replace(/[^0-9+\\-() ]/g, \"\") })}\n\t\t\t\t\t\t\t\terror={!!phoneError} helperText={phoneError || \"\"} sx={inputSx} />\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t<Typography sx={labelSx}>Caller Name</Typography>\n\t\t\t\t\t\t\t<TextField fullWidth size=\"small\" value={data.callerName || \"\"}\n\t\t\t\t\t\t\t\tonChange={(e) => onChange({ ...data, callerName: e.target.value })} sx={inputSx} />\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t<Typography sx={labelSx}>Source</Typography>\n\t\t\t\t\t\t\t<TextField fullWidth size=\"small\" value={data.source || \"\"}\n\t\t\t\t\t\t\t\tonChange={(e) => onChange({ ...data, source: e.target.value })} sx={inputSx} />\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t<Typography sx={labelSx}>Priority</Typography>\n\t\t\t\t\t\t\t<FormControl fullWidth size=\"small\">\n\t\t\t\t\t\t\t\t<Select value={data.priority ?? 5}\n\t\t\t\t\t\t\t\t\tonChange={(e) => onChange({ ...data, priority: Number(e.target.value) })}>\n\t\t\t\t\t\t\t\t\t{LEAD_PRIORITY_OPTIONS.map((o) => <MenuItem key={o.label} value={o.value}>{o.label}</MenuItem>)}\n\t\t\t\t\t\t\t\t</Select>\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Box sx={{ gridColumn: \"1 / -1\" }}>\n\t\t\t\t\t\t\t<Typography sx={labelSx}>Notes</Typography>\n\t\t\t\t\t\t\t<TextField fullWidth size=\"small\" multiline minRows={2} maxRows={8}\n\t\t\t\t\t\t\t\tvalue={data.notes || \"\"}\n\t\t\t\t\t\t\t\tonChange={(e) => onChange({ ...data, notes: e.target.value })} sx={inputSx} />\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Box>\n\t\t\t\t</Box>\n\t\t\t\t<Box sx={dialogFooterSx}>\n\t\t\t\t\t<SDKButton variant=\"cancel\" onClick={onClose}>Cancel</SDKButton>\n\t\t\t\t\t<SDKButton onClick={onSave} disabled={saving}\n\t\t\t\t\t\tstartIcon={saving ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\n\t\t\t\t\t\tAdd Lead\n\t\t\t\t\t</SDKButton>\n\t\t\t\t</Box>\n\t\t\t</Paper>\n\t\t</Box>\n\t);\n});\n\n// ──── Confirm Dialog ──────────────────────────────────────────────────────────\n\nfunction ConfirmDialog({\n\topen, title, message, loading, onConfirm, onClose,\n}: { open: boolean; title: string; message: string; loading?: boolean; onConfirm: () => void; onClose: () => void; }) {\n\tif (!open) return null;\n\treturn (\n\t\t<Box\n\t\t\tsx={{ position: \"fixed\", inset: 0, zIndex: 1500, backgroundColor: \"rgba(0,0,0,0.45)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}\n\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t>\n\t\t\t<Paper elevation={6} sx={{ width: { xs: \"90vw\", sm: 400 }, borderRadius: \"16px\", overflow: \"hidden\", boxShadow: \"0 8px 32px rgba(0,0,0,0.18)\" }}>\n\t\t\t\t<Box sx={{ ...dialogHeaderSx, borderBottom: \"none\", pb: 0 }}>\n\t\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\" fontFamily=\"poppins, Arial, sans-serif\">{title}</Typography>\n\t\t\t\t\t<IconButton size=\"small\" onClick={onClose}>✕</IconButton>\n\t\t\t\t</Box>\n\t\t\t\t<Box sx={{ px: 2.5, py: 1.5 }}>\n\t\t\t\t\t<Typography fontSize=\"0.85rem\" color=\"#555\" fontFamily=\"poppins, Arial, sans-serif\">{message}</Typography>\n\t\t\t\t</Box>\n\t\t\t\t<Box sx={dialogFooterSx}>\n\t\t\t\t\t<SDKButton variant=\"cancel\" onClick={onClose}>Cancel</SDKButton>\n\t\t\t\t\t<SDKButton variant=\"danger\" onClick={onConfirm} disabled={loading}\n\t\t\t\t\t\tstartIcon={loading ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\n\t\t\t\t\t\tConfirm\n\t\t\t\t\t</SDKButton>\n\t\t\t\t</Box>\n\t\t\t</Paper>\n\t\t</Box>\n\t);\n}\n\n// ──── Call Recording player ───────────────────────────────────────────────────\n\nconst fmtRecordingDuration = (s: number): string => {\n\tif (!isFinite(s) || s < 0) return \"\";\n\tconst m = Math.floor(s / 60);\n\tconst sec = Math.floor(s % 60);\n\treturn `${m}:${sec.toString().padStart(2, \"0\")}`;\n};\n\nfunction CallRecording({ callUuid, recordingPath, iconOnly = false }: { callUuid: string; recordingPath: string | null; iconOnly?: boolean }) {\n\tconst [audioUrl, setAudioUrl] = useState<string | null>(null);\n\tconst [loading, setLoading] = useState(false);\n\tconst [error, setError] = useState(false);\n\tconst [durationSec, setDurationSec] = useState<number | null>(null);\n\tconst [currentSec, setCurrentSec] = useState(0);\n\tconst unavailable = !recordingPath;\n\tconst totalLabel = durationSec != null ? fmtRecordingDuration(durationSec) : \"\";\n\n\tconst handlePlay = async () => {\n\t\tif (audioUrl) return;\n\t\ttry {\n\t\t\tsetLoading(true);\n\t\t\tsetError(false);\n\t\t\tconst blob = await getRecordingByCall(callUuid);\n\t\t\tsetAudioUrl(URL.createObjectURL(blob));\n\t\t} catch {\n\t\t\tsetError(true);\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t};\n\n\tconst handleDownload = async () => {\n\t\ttry {\n\t\t\tconst blob = audioUrl ? await fetch(audioUrl).then((r) => r.blob()) : await getRecordingByCall(callUuid);\n\t\t\tconst url = URL.createObjectURL(blob);\n\t\t\tconst a = document.createElement(\"a\");\n\t\t\ta.href = url;\n\t\t\ta.download = `recording_${callUuid}.wav`;\n\t\t\ta.click();\n\t\t\tURL.revokeObjectURL(url);\n\t\t} catch {\n\t\t\t/* ignore */\n\t\t}\n\t};\n\n\tif (iconOnly) {\n\t\tif (audioUrl) {\n\t\t\treturn (\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\n\t\t\t\t\t<audio controls autoPlay src={audioUrl}\n\t\t\t\t\t\tonLoadedMetadata={(e) => setDurationSec(e.currentTarget.duration)}\n\t\t\t\t\t\tonTimeUpdate={(e) => setCurrentSec(e.currentTarget.currentTime)}\n\t\t\t\t\t\tonEnded={() => { URL.revokeObjectURL(audioUrl); setAudioUrl(null); setCurrentSec(0); }}\n\t\t\t\t\t\tstyle={{ height: 32, maxWidth: 170 }} />\n\t\t\t\t\t{totalLabel && (\n\t\t\t\t\t\t<Typography sx={{ fontSize: 12, fontWeight: 600, color: \"#1A5F6C\", whiteSpace: \"nowrap\" }}>\n\t\t\t\t\t\t\t{fmtRecordingDuration(currentSec)} / {totalLabel}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t)}\n\t\t\t\t\t<Tooltip title=\"Download\"><IconButton size=\"small\" onClick={handleDownload} sx={{ color: \"#1565c0\" }}><DownloadIcon sx={{ fontSize: 16 }} /></IconButton></Tooltip>\n\t\t\t\t</Box>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<Tooltip title={unavailable ? \"No recording available for this call.\" : error ? \"Recording unavailable\" : \"Play voicemail\"}>\n\t\t\t\t<span>\n\t\t\t\t\t<IconButton size=\"small\" onClick={handlePlay} disabled={unavailable || loading || error} sx={{ color: unavailable ? \"#bdbdbd\" : \"#1A5F6C\" }}>\n\t\t\t\t\t\t{loading ? <CircularProgress size={16} color=\"inherit\" /> : <PlayArrowIcon sx={{ fontSize: 18 }} />}\n\t\t\t\t\t</IconButton>\n\t\t\t\t</span>\n\t\t\t</Tooltip>\n\t\t);\n\t}\n\n\tif (unavailable) {\n\t\treturn <Typography sx={{ fontSize: \"0.82rem\", color: \"#999\" }} fontFamily=\"poppins, Arial, sans-serif\">No recording available for this call.</Typography>;\n\t}\n\n\tif (audioUrl) {\n\t\treturn (\n\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n\t\t\t\t<audio controls autoPlay src={audioUrl} onEnded={() => { URL.revokeObjectURL(audioUrl); setAudioUrl(null); }} style={{ height: 38, flex: 1 }} />\n\t\t\t\t<Tooltip title=\"Download\"><IconButton size=\"small\" onClick={handleDownload} sx={{ color: \"#1565c0\" }}><DownloadIcon sx={{ fontSize: 18 }} /></IconButton></Tooltip>\n\t\t\t</Box>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n\t\t\t<SDKButton variant=\"outlined\" onClick={handlePlay} disabled={loading || error} startIcon={loading ? <CircularProgress size={16} color=\"inherit\" /> : <PlayArrowIcon sx={{ fontSize: 16 }} />}>\n\t\t\t\t{error ? \"Recording unavailable\" : \"Play recording\"}\n\t\t\t</SDKButton>\n\t\t\t<Tooltip title=\"Download\"><span><IconButton size=\"small\" onClick={handleDownload} disabled={loading || error} sx={{ color: \"#1565c0\" }}><DownloadIcon sx={{ fontSize: 18 }} /></IconButton></span></Tooltip>\n\t\t</Box>\n\t);\n}\n\n// ──── Call Data Dialog ───────────────────────────────────────────────────────\n\nfunction CallDataDialog({\n\topen, lead, data, loading, error, onClose,\n}: { open: boolean; lead: Lead | null; data: LeadCallData | null; loading: boolean; error: string | null; onClose: () => void; }) {\n\tif (!open) return null;\n\tconst fmt = (v: string | null) => (v ? new Date(v).toLocaleString() : \"—\");\n\n\t// Reusable field-card + section-title styles keep every value cell identical.\n\tconst fieldCardSx = {\n\t\tdisplay: \"flex\", flexDirection: \"column\", gap: 0.25,\n\t\tp: 1, borderRadius: \"8px\", backgroundColor: \"#fafafa\", border: \"1px solid #eee\",\n\t};\n\tconst fieldLabelSx = {\n\t\tfontSize: \"0.66rem\", fontWeight: 600, color: \"#888\",\n\t\ttextTransform: \"uppercase\" as const, letterSpacing: 0.3,\n\t};\n\tconst fieldValueSx = {\n\t\tfontSize: \"0.82rem\", fontWeight: 600, color: \"#1a1a1a\", wordBreak: \"break-word\" as const,\n\t};\n\tconst sectionTitle = {\n\t\tfontSize: \"0.7rem\", fontWeight: 700, color: \"#1A5F6C\",\n\t\ttextTransform: \"uppercase\" as const, letterSpacing: 0.5, mb: 0.75,\n\t};\n\n\tconst fieldCard = (label: string, value: React.ReactNode, full?: boolean) => (\n\t\t<Box key={label} sx={{ ...fieldCardSx, ...(full ? { gridColumn: \"1 / -1\" } : {}) }}>\n\t\t\t<Typography sx={fieldLabelSx} fontFamily=\"poppins, Arial, sans-serif\">{label}</Typography>\n\t\t\t<Typography sx={fieldValueSx} fontFamily=\"poppins, Arial, sans-serif\">{value}</Typography>\n\t\t</Box>\n\t);\n\n\tconst overview: Array<[string, React.ReactNode]> = data ? [\n\t\t[\"Phone Number\", data.phoneNumber || \"—\"],\n\t\t[\"Call Type\", data.callType || \"—\"],\n\t\t[\"Call Status\", data.callStatus || \"—\"],\n\t\t[\"Disposition\", data.disposition || \"—\"],\n\t\t[\"Agent Disposition\", data.agentSelectedDisposition || \"—\"],\n\t\t[\"Transferred\", data.wasTransferred ? \"Yes\" : \"No\"],\n\t\t[\"Hangup By\", data.hangupInitiator || \"—\"],\n\t] : [];\n\tconst agentQueue: Array<[string, React.ReactNode]> = data ? [\n\t\t[\"Agent\", data.agentName || \"—\"],\n\t\t[\"Agent ID\", data.agentUserId || \"—\"],\n\t\t[\"Extension\", data.extension || \"—\"],\n\t\t[\"Queue\", data.queueName || \"—\"],\n\t] : [];\n\tconst timing: Array<[string, React.ReactNode]> = data ? [\n\t\t[\"Start Time\", fmt(data.callStartTime)],\n\t\t[\"Connect Time\", fmt(data.connectTime)],\n\t] : [];\n\tconst durations: Array<[string, React.ReactNode]> = data ? [\n\t\t[\"Talk\", data.talkDurationFmt || \"—\"],\n\t\t[\"Ringing\", data.ringingDurationFmt || \"—\"],\n\t\t[\"Hold\", data.holdDurationFmt || \"—\"],\n\t\t[\"Mute\", data.muteDurationFmt || \"—\"],\n\t\t[\"Wrap-up\", data.wrapupDurationFmt || \"—\"],\n\t\t[\"Queue\", data.queueDurationFmt || \"—\"],\n\t\t[\"IVR\", data.ivrDurationFmt || \"—\"],\n\t] : [];\n\n\tconst twoColGrid = { display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1fr 1fr\" }, gap: 1.25 };\n\tconst compactGrid = { display: \"grid\", gridTemplateColumns: \"repeat(auto-fill, minmax(96px, 1fr))\", gap: 1.25 };\n\n\treturn (\n\t\t<Box sx={{ position: \"fixed\", inset: 0, zIndex: 1500, backgroundColor: \"rgba(0,0,0,0.45)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }} onClick={(e) => e.stopPropagation()}>\n\t\t\t<Paper elevation={6} sx={{ width: { xs: \"92vw\", sm: 600 }, maxHeight: \"85vh\", display: \"flex\", flexDirection: \"column\", borderRadius: \"16px\", overflow: \"hidden\", boxShadow: \"0 8px 32px rgba(26,95,108,0.18)\" }}>\n\t\t\t\t<Box sx={{ ...dialogHeaderSx, backgroundColor: \"#1A5F6C\", color: \"#fff\" }}>\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\" fontFamily=\"poppins, Arial, sans-serif\">Call Details</Typography>\n\t\t\t\t\t\t{lead?.phoneNumber ? (\n\t\t\t\t\t\t\t<Typography fontSize=\"0.72rem\" sx={{ opacity: 0.85 }} fontFamily=\"poppins, Arial, sans-serif\">Latest call for {lead.phoneNumber}</Typography>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</Box>\n\t\t\t\t\t<IconButton size=\"small\" onClick={onClose} sx={{ color: \"#fff\" }}>✕</IconButton>\n\t\t\t\t</Box>\n\t\t\t\t<Box sx={{ px: 2.5, py: 2, overflowY: \"auto\" }}>\n\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: \"center\", py: 4 }}><CircularProgress size={30} /></Box>\n\t\t\t\t\t) : error ? (\n\t\t\t\t\t\t<Typography fontSize=\"0.85rem\" color=\"#d32f2f\" textAlign=\"center\" sx={{ py: 3 }} fontFamily=\"poppins, Arial, sans-serif\">{error}</Typography>\n\t\t\t\t\t) : data ? (\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\n\t\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t\t<Typography sx={sectionTitle} fontFamily=\"poppins, Arial, sans-serif\">Call Overview</Typography>\n\t\t\t\t\t\t\t\t<Box sx={twoColGrid}>{overview.map(([l, v]) => fieldCard(l, v))}</Box>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t\t<Typography sx={sectionTitle} fontFamily=\"poppins, Arial, sans-serif\">Agent &amp; Queue</Typography>\n\t\t\t\t\t\t\t\t<Box sx={twoColGrid}>{agentQueue.map(([l, v]) => fieldCard(l, v))}</Box>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t\t<Typography sx={sectionTitle} fontFamily=\"poppins, Arial, sans-serif\">Timing</Typography>\n\t\t\t\t\t\t\t\t<Box sx={twoColGrid}>{timing.map(([l, v]) => fieldCard(l, v))}</Box>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t\t<Typography sx={sectionTitle} fontFamily=\"poppins, Arial, sans-serif\">Durations</Typography>\n\t\t\t\t\t\t\t\t<Box sx={compactGrid}>{durations.map(([l, v]) => fieldCard(l, v))}</Box>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t\t<Typography sx={sectionTitle} fontFamily=\"poppins, Arial, sans-serif\">Remarks</Typography>\n\t\t\t\t\t\t\t\t<Box sx={{ ...fieldCardSx, minHeight: 44 }}>\n\t\t\t\t\t\t\t\t\t<Typography sx={fieldValueSx} fontFamily=\"poppins, Arial, sans-serif\">{data.remarks || \"—\"}</Typography>\n\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t\t<Typography sx={sectionTitle} fontFamily=\"poppins, Arial, sans-serif\">Recording</Typography>\n\t\t\t\t\t\t\t\t<Box sx={fieldCardSx}>\n\t\t\t\t\t\t\t\t\t<CallRecording callUuid={data.callUuid} recordingPath={data.recordingPath} />\n\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t) : null}\n\t\t\t\t</Box>\n\t\t\t\t<Box sx={dialogFooterSx}>\n\t\t\t\t\t<SDKButton variant=\"cancel\" onClick={onClose}>Close</SDKButton>\n\t\t\t\t</Box>\n\t\t\t</Paper>\n\t\t</Box>\n\t);\n}\n\n// ──── Import Leads Dialog ─────────────────────────────────────────────────────\n\nfunction ImportLeadsDialog({\n\topen, file, onFileChange, uploading, onUpload, onDownloadTemplate, onClose,\n}: {\n\topen: boolean;\n\tfile: File | null;\n\tonFileChange: (f: File | null) => void;\n\tuploading: boolean;\n\tonUpload: () => void;\n\tonDownloadTemplate: () => void;\n\tonClose: () => void;\n}) {\n\tconst fileRef = useRef<HTMLInputElement>(null);\n\tif (!open) return null;\n\n\treturn (\n\t\t<Box\n\t\t\tsx={{ position: \"fixed\", inset: 0, zIndex: 1400, backgroundColor: \"rgba(0,0,0,0.45)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}\n\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t>\n\t\t\t<Paper elevation={6} sx={{ width: { xs: \"90vw\", sm: 460 }, borderRadius: \"16px\", overflow: \"hidden\", boxShadow: \"0 8px 32px rgba(26,95,108,0.18)\" }}>\n\t\t\t\t<Box sx={{ ...dialogHeaderSx, backgroundColor: \"#1A5F6C\", color: \"#fff\" }}>\n\t\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\" fontFamily=\"poppins, Arial, sans-serif\">Import Leads</Typography>\n\t\t\t\t\t<IconButton size=\"small\" onClick={onClose} sx={{ color: \"#fff\" }}>✕</IconButton>\n\t\t\t\t</Box>\n\t\t\t\t<Box sx={{ p: 2.5 }}>\n\t\t\t\t\t<Typography fontSize=\"0.82rem\" color=\"#555\" fontFamily=\"poppins, Arial, sans-serif\" mb={2}>\n\t\t\t\t\t\tUpload a CSV or Excel file. Use the template for the correct format.\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.5, flexWrap: \"wrap\", mb: 1.5 }}>\n\t\t\t\t\t\t<SDKButton variant=\"outlined\" startIcon={<UploadFileIcon />}\n\t\t\t\t\t\t\tonClick={() => fileRef.current?.click()}>\n\t\t\t\t\t\t\tChoose File\n\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t\t<input ref={fileRef} type=\"file\" accept=\".csv,.xlsx,.xls\" hidden\n\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\tconst f = e.target.files?.[0];\n\t\t\t\t\t\t\t\tif (!f) return;\n\t\t\t\t\t\t\t\tif ([\".csv\",\".xlsx\",\".xls\"].some((ext) => f.name.toLowerCase().endsWith(ext))) onFileChange(f);\n\t\t\t\t\t\t\t}} />\n\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.82rem\", color: \"#666\", flex: 1, fontFamily: \"poppins, Arial, sans-serif\" }}>\n\t\t\t\t\t\t\t{file ? file.name : \"No file chosen\"}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t{file && (\n\t\t\t\t\t\t\t<SDKButton variant=\"cancel\" size=\"small\"\n\t\t\t\t\t\t\t\tonClick={() => { onFileChange(null); if (fileRef.current) fileRef.current.value = \"\"; }}>\n\t\t\t\t\t\t\t\tClear\n\t\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Box>\n\t\t\t\t\t<SDKButton variant=\"outlined\" startIcon={<DownloadIcon />} onClick={onDownloadTemplate}>\n\t\t\t\t\t\tDownload Template\n\t\t\t\t\t</SDKButton>\n\t\t\t\t</Box>\n\t\t\t\t<Box sx={dialogFooterSx}>\n\t\t\t\t\t<SDKButton variant=\"cancel\" onClick={onClose}>Cancel</SDKButton>\n\t\t\t\t\t<SDKButton onClick={onUpload} disabled={uploading || !file}\n\t\t\t\t\t\tstartIcon={uploading ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\n\t\t\t\t\t\tUpload\n\t\t\t\t\t</SDKButton>\n\t\t\t\t</Box>\n\t\t\t</Paper>\n\t\t</Box>\n\t);\n}\n\n// ──── Main content ────────────────────────────────────────────────────────────\n\nconst CampaignsContent = memo(function CampaignsContent() {\n\tconst theme = useTheme();\n\tconst { showToast } = useToast();\n\tconst { isBitEnabled } = useSDKPermissions();\n\tconst callerData = useGetCallerData();\n\tconst isAgentIdle = callerData.status === \"IDLE\";\n\tconst hasOutboundPermission = isBitEnabled(\"calls\", SDK_PERMISSIONS.CALL_OUTBOUND);\n\n\tconst {\n\t\tcampaigns, loading,\n\t\tfetchCampaigns, getCampaignById,\n\t\tcreateCampaign, updateCampaign,\n\t\tactivateCampaign, pauseCampaign, archiveCampaign,\n\t} = useCampaigns();\n\n\tconst {\n\t\tleads, leadTotal, leadsMeta, loading: leadsLoading,\n\t\tfetchLeads, createLead, deleteLead, dialPreview, getLeadCallData,\n\t\tuploadLeadsExcel, downloadLeadTemplate, exportLeads,\n\t} = useLeads();\n\n\tconst { fetchQueues } = useQueues();\n\n\t// Queue name lookup for the leads table\n\tconst [queueNameMap, setQueueNameMap] = useState<Record<number, string>>({});\n\n\tuseEffect(() => {\n\t\tfetchQueues().then((qs) => {\n\t\t\tconst map: Record<number, string> = {};\n\t\t\tqs.forEach((q) => { map[q.id] = q.name; });\n\t\t\tsetQueueNameMap(map);\n\t\t}).catch(() => { /* ignore */ });\n\t}, [fetchQueues]);\n\n\tconst handleQueuesRefreshed = useCallback((qs: Queue[]) => {\n\t\tconst map: Record<number, string> = {};\n\t\tqs.forEach((q) => { map[q.id] = q.name; });\n\t\tsetQueueNameMap(map);\n\t}, []);\n\n\t// Selection & filter\n\tconst [selectedId, setSelectedId] = useState<number | null>(null);\n\tconst [showArchived, setShowArchived] = useState(false);\n\tconst [campaignListCollapsed, setCampaignListCollapsed] = useState(false);\n\n\t// Campaign dialog\n\tconst [dialogOpen, setDialogOpen] = useState(false);\n\tconst [editingCampaign, setEditingCampaign] = useState<Campaign | null>(null);\n\tconst [formData, setFormData] = useState<CampaignCreatePayload>(defaultFormData);\n\tconst [saving, setSaving] = useState(false);\n\n\t// Archive confirm\n\tconst [archiveOpen, setArchiveOpen] = useState(false);\n\tconst [archiveTarget, setArchiveTarget] = useState<Campaign | null>(null);\n\tconst [archiving, setArchiving] = useState(false);\n\n\t// Leads\n\tconst [leadPage, setLeadPage] = useState(0);\n\tconst [leadRowsPerPage, setLeadRowsPerPage] = useState(10);\n\tconst [leadSearch, setLeadSearch] = useState(\"\");\n\tconst [debouncedSearch, setDebouncedSearch] = useState(\"\");\n\tconst [leadStatusFilter, setLeadStatusFilter] = useState(\"All states\");\n\tconst debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\t// Add lead dialog\n\tconst [addLeadOpen, setAddLeadOpen] = useState(false);\n\tconst [addLeadData, setAddLeadData] = useState<LeadCreatePayload>({ phoneNumber: \"\", callerName: \"\", priority: 5 });\n\tconst [addLeadSaving, setAddLeadSaving] = useState(false);\n\n\t// Import dialog\n\tconst [importOpen, setImportOpen] = useState(false);\n\tconst [importFile, setImportFile] = useState<File | null>(null);\n\tconst [importing, setImporting] = useState(false);\n\n\t// Delete lead confirm\n\tconst [deleteLeadOpen, setDeleteLeadOpen] = useState(false);\n\tconst [deleteLeadTarget, setDeleteLeadTarget] = useState<Lead | null>(null);\n\tconst [deletingLead, setDeletingLead] = useState(false);\n\n\t// View call data\n\tconst [callDataOpen, setCallDataOpen] = useState(false);\n\tconst [callDataLead, setCallDataLead] = useState<Lead | null>(null);\n\tconst [callDataLoading, setCallDataLoading] = useState(false);\n\tconst [callData, setCallData] = useState<LeadCallData | null>(null);\n\tconst [callDataError, setCallDataError] = useState<string | null>(null);\n\n\tconst handleViewCallData = useCallback(async (lead: Lead) => {\n\t\tconst callId = lead.latestCallId;\n\t\tif (!callId) return;\n\t\tsetCallDataLead(lead);\n\t\tsetCallDataOpen(true);\n\t\tsetCallData(null);\n\t\tsetCallDataError(null);\n\t\tsetCallDataLoading(true);\n\t\ttry {\n\t\t\tconst data = await getLeadCallData(callId);\n\t\t\tsetCallData(data);\n\t\t} catch (e: any) {\n\t\t\tsetCallDataError(e?.response?.data?.message || \"Failed to load call data\");\n\t\t} finally {\n\t\t\tsetCallDataLoading(false);\n\t\t}\n\t}, [getLeadCallData]);\n\n\t// Dial loading\n\tconst [dialLoading, setDialLoading] = useState<number | null>(null);\n\n\tconst selected = campaigns.find((c) => c.id === selectedId) ?? null;\n\tconst showVoicemail = selected?.campaignType === \"AFTER_HOURS_CALLBACK\";\n\tconst visibleCampaigns = campaigns.filter((c) =>\n\t\tshowArchived ? true : c.status?.toLowerCase() !== \"archived\"\n\t);\n\n\t// Switch campaigns: reset leads filters/search/page so they don't carry over\n\tconst handleSelectCampaign = useCallback((id: number) => {\n\t\tif (id === selectedId) return;\n\t\tsetLeadStatusFilter(\"All states\");\n\t\tsetLeadSearch(\"\");\n\t\tsetDebouncedSearch(\"\");\n\t\tsetLeadPage(0);\n\t\tsetSelectedId(id);\n\t}, [selectedId]);\n\n\tuseEffect(() => { fetchCampaigns(); }, [fetchCampaigns]);\n\n\tuseEffect(() => {\n\t\tdebounceRef.current = setTimeout(() => setDebouncedSearch(leadSearch.trim()), 400);\n\t\treturn () => { if (debounceRef.current) clearTimeout(debounceRef.current); };\n\t}, [leadSearch]);\n\n\tuseEffect(() => {\n\t\tif (!selectedId) return;\n\t\tsetLeadPage(0);\n\t\tfetchLeads(selectedId, {\n\t\t\tpage: 1, pageSize: leadRowsPerPage,\n\t\t\tlead_status: leadStatusFilter !== \"All states\" ? leadStatusFilter : undefined,\n\t\t\tsearch: debouncedSearch || undefined,\n\t\t});\n\t}, [selectedId, leadRowsPerPage, leadStatusFilter, debouncedSearch, fetchLeads]);\n\n\tconst refetchLeads = useCallback((page = leadPage, silent = false) => {\n\t\tif (!selectedId) return;\n\t\tfetchLeads(selectedId, {\n\t\t\tpage: page + 1, pageSize: leadRowsPerPage,\n\t\t\tlead_status: leadStatusFilter !== \"All states\" ? leadStatusFilter : undefined,\n\t\t\tsearch: debouncedSearch || undefined,\n\t\t}, { silent });\n\t}, [selectedId, leadPage, leadRowsPerPage, leadStatusFilter, debouncedSearch, fetchLeads]);\n\n\t// Auto-refresh the leads table every 3 seconds (silent — no loading spinner)\n\tuseEffect(() => {\n\t\tif (!selectedId) return;\n\t\tconst intervalId = setInterval(() => { refetchLeads(leadPage, true); }, 3000);\n\t\treturn () => clearInterval(intervalId);\n\t}, [selectedId, leadPage, refetchLeads]);\n\n\t// ── Campaign CRUD ──\n\n\tconst handleOpenCreate = () => {\n\t\tsetEditingCampaign(null);\n\t\tsetFormData(defaultFormData);\n\t\tsetDialogOpen(true);\n\t};\n\n\tconst handleOpenEdit = async (c: Campaign) => {\n\t\tsetEditingCampaign(c);\n\t\tsetFormData(campaignToFormData(c));\n\t\tsetDialogOpen(true);\n\t\ttry {\n\t\t\tconst fresh = await getCampaignById(c.id);\n\t\t\tsetEditingCampaign(fresh);\n\t\t\tsetFormData(campaignToFormData(fresh));\n\t\t} catch { /* keep existing */ }\n\t};\n\n\tconst handleSave = async () => {\n\t\tif (!formData.name.trim()) { showToast(\"Campaign name is required\", \"warning\"); return; }\n\t\tsetSaving(true);\n\t\tconst startTime = formData.startTime?.length === 5 ? `${formData.startTime}:00` : formData.startTime;\n\t\tconst endTime = formData.endTime?.length === 5 ? `${formData.endTime}:00` : formData.endTime;\n\t\t// Date pickers give YYYY-MM-DD; the API expects an ISO datetime.\n\t\tconst toIso = (d?: string) => (d ? new Date(d).toISOString() : undefined);\n\t\tconst scheduledStart = toIso(formData.scheduledStart);\n\t\tconst scheduledEnd = toIso(formData.scheduledEnd);\n\t\ttry {\n\t\t\tif (editingCampaign) {\n\t\t\t\tconst updatePayload: Record<string, any> = { ...formData, startTime, endTime };\n\t\t\t\tif (scheduledStart) updatePayload.scheduledStart = scheduledStart; else delete updatePayload.scheduledStart;\n\t\t\t\tif (scheduledEnd) updatePayload.scheduledEnd = scheduledEnd; else delete updatePayload.scheduledEnd;\n\t\t\t\tawait updateCampaign(editingCampaign.id, updatePayload);\n\t\t\t\tshowToast(\"Campaign updated\", \"success\");\n\t\t\t} else {\n\t\t\t\tconst payload: Record<string, any> = { ...formData, startTime, endTime };\n\t\t\t\tif (scheduledStart) payload.scheduledStart = scheduledStart; else delete payload.scheduledStart;\n\t\t\t\tif (scheduledEnd) payload.scheduledEnd = scheduledEnd; else delete payload.scheduledEnd;\n\t\t\t\tif (!payload.callerId) delete payload.callerId;\n\t\t\t\tif (!payload.answerTimeoutSeconds) delete payload.answerTimeoutSeconds;\n\t\t\t\tif (payload.aiBotId == null) delete payload.aiBotId;\n\t\t\t\tif (!payload.queueLinks?.length) delete payload.queueLinks;\n\t\t\t\tif (payload.settings && !Object.keys(payload.settings).length) delete payload.settings;\n\t\t\t\tconst created = await createCampaign(payload as CampaignCreatePayload);\n\t\t\t\tshowToast(\"Campaign created\", \"success\");\n\t\t\t\tsetSelectedId(created.id);\n\t\t\t}\n\t\t\tsetDialogOpen(false);\n\t\t\tfetchCampaigns();\n\t\t} catch (err: any) {\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Failed to save campaign\", \"error\");\n\t\t} finally { setSaving(false); }\n\t};\n\n\tconst handleStart = async (c: Campaign) => {\n\t\ttry { await activateCampaign(c.id); showToast(\"Campaign started\", \"success\"); fetchCampaigns(); }\n\t\tcatch (err: any) { showToast(err?.response?.data?.message || err?.message || \"Failed to start\", \"error\"); }\n\t};\n\n\tconst handlePause = async (c: Campaign) => {\n\t\ttry { await pauseCampaign(c.id); showToast(\"Campaign paused\", \"success\"); fetchCampaigns(); }\n\t\tcatch (err: any) { showToast(err?.response?.data?.message || err?.message || \"Failed to pause\", \"error\"); }\n\t};\n\n\tconst confirmArchive = async () => {\n\t\tif (!archiveTarget) return;\n\t\tsetArchiving(true);\n\t\ttry {\n\t\t\tawait archiveCampaign(archiveTarget.id);\n\t\t\tshowToast(\"Campaign archived\", \"success\");\n\t\t\tsetArchiveOpen(false); setArchiveTarget(null); fetchCampaigns();\n\t\t} catch (err: any) {\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Failed to archive\", \"error\");\n\t\t} finally { setArchiving(false); }\n\t};\n\n\t// ── Leads ──\n\n\tconst handleAddLead = async () => {\n\t\tif (!selectedId) return;\n\t\tconst err = validatePhone(addLeadData.phoneNumber);\n\t\tif (err) { showToast(err, \"warning\"); return; }\n\t\tsetAddLeadSaving(true);\n\t\ttry {\n\t\t\tawait createLead(selectedId, addLeadData);\n\t\t\tshowToast(\"Lead added\", \"success\");\n\t\t\tsetAddLeadOpen(false);\n\t\t\tsetAddLeadData({ phoneNumber: \"\", callerName: \"\", priority: 5 });\n\t\t\trefetchLeads(0); setLeadPage(0);\n\t\t} catch (err: any) {\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Failed to add lead\", \"error\");\n\t\t} finally { setAddLeadSaving(false); }\n\t};\n\n\tconst handleImport = async () => {\n\t\tif (!selectedId || !importFile) return;\n\t\tsetImporting(true);\n\t\ttry {\n\t\t\tconst result = await uploadLeadsExcel(selectedId, importFile);\n\t\t\tshowToast(result?.message || \"Leads uploaded\", \"success\");\n\t\t\tsetImportFile(null); setImportOpen(false);\n\t\t\trefetchLeads(0); setLeadPage(0);\n\t\t} catch (err: any) {\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Upload failed\", \"error\");\n\t\t} finally { setImporting(false); }\n\t};\n\n\tconst handleExport = async () => {\n\t\tif (!selectedId) return;\n\t\ttry { await exportLeads(selectedId); showToast(\"Leads exported\", \"success\"); }\n\t\tcatch (err: any) { showToast(err?.response?.data?.message || err?.message || \"Export failed\", \"error\"); }\n\t};\n\n\tconst handleDownloadTemplate = async () => {\n\t\tif (!selectedId) return;\n\t\ttry { await downloadLeadTemplate(selectedId); }\n\t\tcatch (err: any) { showToast(err?.response?.data?.message || err?.message || \"Download failed\", \"error\"); }\n\t};\n\n\tconst handleDialPreview = async (leadId: number) => {\n\t\tif (!selectedId) return;\n\t\tsetDialLoading(leadId);\n\t\ttry {\n\t\t\tconst res = await dialPreview(selectedId, leadId);\n\t\t\tshowToast(res?.message || \"Preview dial initiated\", \"success\");\n\t\t} catch (err: any) {\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Dial failed\", \"error\");\n\t\t} finally { setDialLoading(null); }\n\t};\n\n\tconst confirmDeleteLead = async () => {\n\t\tif (!selectedId || !deleteLeadTarget) return;\n\t\tsetDeletingLead(true);\n\t\ttry {\n\t\t\tawait deleteLead(selectedId, deleteLeadTarget.id);\n\t\t\tshowToast(\"Lead deleted\", \"success\");\n\t\t\tsetDeleteLeadOpen(false); setDeleteLeadTarget(null);\n\t\t\trefetchLeads(leadPage);\n\t\t} catch (err: any) {\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Delete failed\", \"error\");\n\t\t} finally { setDeletingLead(false); }\n\t};\n\n\tconst sc = selected;\n\tconst scActive = sc?.status?.toLowerCase() === \"active\";\n\tconst scDraft = sc?.status?.toLowerCase() === \"draft\";\n\tconst scPaused = sc?.status?.toLowerCase() === \"paused\";\n\tconst scArchived = sc?.status?.toLowerCase() === \"archived\";\n\n\t// ── Render ──\n\n\treturn (\n\t\t<Box sx={{ fontFamily: \"poppins, Arial, sans-serif\" }}>\n\n\t\t\t{/* PAGE HEADER */}\n\t\t\t<SDKPageHeader\n\t\t\t\ttitle=\"Call Scheduling\"\n\t\t\t\tactions={\n\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n\t\t\t\t\t\t<SDKButton startIcon={<RefreshIcon />}\n\t\t\t\t\t\t\tonClick={() => { fetchCampaigns(); if (selectedId) refetchLeads(); }}>\n\t\t\t\t\t\t\tRefresh\n\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t\t<SDKPermissionGuard\n\t\t\t\t\t\t\tpermissions={[\n\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_CREATE,\n\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\tshowFallback={false}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SDKButton startIcon={<AddIcon />} onClick={handleOpenCreate}>\n\t\t\t\t\t\t\t\tNew Campaign\n\t\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t\t</SDKPermissionGuard>\n\t\t\t\t\t</Box>\n\t\t\t\t}\n\t\t\t/>\n\n\t\t\t{/* TWO-COLUMN LAYOUT */}\n\t\t\t<Box sx={{ display: \"flex\", flexDirection: { xs: \"column\", md: \"row\" }, gap: 1.5, p: 1.5 }}>\n\n\t\t\t\t{/* LEFT — Campaign list */}\n\t\t\t\t<Paper\n\t\t\t\t\televation={0}\n\t\t\t\t\tsx={{\n\t\t\t\t\t\twidth: campaignListCollapsed\n\t\t\t\t\t\t\t? { xs: \"100%\", md: 48 }\n\t\t\t\t\t\t\t: { xs: \"100%\", md: 280, lg: 320 },\n\t\t\t\t\t\tminWidth: campaignListCollapsed\n\t\t\t\t\t\t\t? { xs: \"auto\", md: 48 }\n\t\t\t\t\t\t\t: { xs: \"auto\", md: 240 },\n\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\tborderRadius: \"16px\",\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\tmaxHeight: { xs: campaignListCollapsed ? \"auto\" : 260, md: \"calc(100vh - 160px)\" },\n\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\tborder: \"1px solid #e0e0e0\",\n\t\t\t\t\t\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\n\t\t\t\t\t\ttransition: \"width 0.2s ease, min-width 0.2s ease\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{campaignListCollapsed ? (\n\t\t\t\t\t\t<Box sx={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\tflexDirection: { xs: \"row\", md: \"column\" },\n\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\tgap: 0.75,\n\t\t\t\t\t\t\tp: 0.75,\n\t\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\t\toverflowY: { xs: \"visible\", md: \"auto\" },\n\t\t\t\t\t\t\toverflowX: { xs: \"auto\", md: \"visible\" },\n\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t<Tooltip title=\"Expand campaigns\" arrow placement=\"right\">\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tonClick={() => setCampaignListCollapsed(false)}\n\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\tcolor: \"#1A5F6C\",\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#f0f7f8\",\n\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: \"#e0eff1\" },\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ChevronRightIcon fontSize=\"small\" />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t{visibleCampaigns.map((c, idx) => {\n\t\t\t\t\t\t\t\tconst isSel = c.id === selectedId;\n\t\t\t\t\t\t\t\tconst status = (c.status || \"draft\").toLowerCase();\n\t\t\t\t\t\t\t\tconst statusColor = STATUS_COLORS[status] ?? \"#9e9e9e\";\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\t\t\t\tkey={c.id}\n\t\t\t\t\t\t\t\t\t\tarrow\n\t\t\t\t\t\t\t\t\t\tplacement=\"right\"\n\t\t\t\t\t\t\t\t\t\ttitle={`${c.name} • ${c.status || \"draft\"}`}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleSelectCampaign(c.id)}\n\t\t\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\t\t\twidth: 32,\n\t\t\t\t\t\t\t\t\t\t\t\theight: 32,\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: isSel ? \"#fff\" : \"#fafafa\",\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#333\",\n\t\t\t\t\t\t\t\t\t\t\t\tfontFamily: \"poppins, Arial, sans-serif\",\n\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.8rem\",\n\t\t\t\t\t\t\t\t\t\t\t\tborderLeft: `3px solid ${statusColor}`,\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: isSel\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `-3px 0 8px ${statusColor}66`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: `-2px 0 4px ${statusColor}33`,\n\t\t\t\t\t\t\t\t\t\t\t\ttransition: \"box-shadow 0.15s ease\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `-3px 0 8px ${statusColor}80`,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{idx + 1}\n\t\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t<Box sx={{\n\t\t\t\t\t\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n\t\t\t\t\t\tpx: 2, py: 1.25, borderBottom: \"1px solid #eee\", backgroundColor: \"#fafafa\", gap: 1,\n\t\t\t\t\t}}>\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, minWidth: 0 }}>\n\t\t\t\t\t\t\t<Tooltip title=\"Minimize\" arrow>\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tonClick={() => setCampaignListCollapsed(true)}\n\t\t\t\t\t\t\t\t\tsx={{ p: 0.5, color: \"#666\" }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ChevronLeftIcon fontSize=\"small\" />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t<Typography sx={{ fontWeight: 700, fontSize: \"0.95rem\", color: \"#333\", fontFamily: \"poppins, Arial, sans-serif\" }}>\n\t\t\t\t\t\t\t\tCampaigns\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<FormControlLabel\n\t\t\t\t\t\t\tcontrol={\n\t\t\t\t\t\t\t\t<Checkbox size=\"small\" checked={showArchived}\n\t\t\t\t\t\t\t\t\tonChange={(e) => setShowArchived(e.target.checked)} sx={{ p: 0.5 }} />\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlabel={<Typography sx={{ fontSize: \"0.78rem\", color: \"#666\" }}>Show archived</Typography>}\n\t\t\t\t\t\t\tsx={{ mr: 0 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Box>\n\n\t\t\t\t\t<Box sx={{ flex: 1, overflow: \"auto\", p: 1 }}>\n\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: \"center\", py: 4 }}>\n\t\t\t\t\t\t\t\t<CircularProgress size={24} sx={{ color: \"#1A5F6C\" }} />\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t) : visibleCampaigns.length === 0 ? (\n\t\t\t\t\t\t\t<Typography sx={{ textAlign: \"center\", py: 3, color: \"#999\", fontSize: \"0.85rem\" }}>\n\t\t\t\t\t\t\t\tNo campaigns\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tvisibleCampaigns.map((c) => {\n\t\t\t\t\t\t\t\tconst isSel = c.id === selectedId;\n\t\t\t\t\t\t\t\tconst wStr = `${c.startTime?.slice(0, 5) || \"09:00\"}–${c.endTime?.slice(0, 5) || \"17:00\"}`;\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<Paper\n\t\t\t\t\t\t\t\t\t\tkey={c.id}\n\t\t\t\t\t\t\t\t\t\televation={0}\n\t\t\t\t\t\t\t\t\t\tonClick={() => handleSelectCampaign(c.id)}\n\t\t\t\t\t\t\t\t\t\tsx={isSel ? campaignCardSelectedSx : {\n\t\t\t\t\t\t\t\t\t\t\t...campaignCardBaseSx,\n\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { borderColor: \"#1A5F6C\", backgroundColor: \"#f5fafb\", boxShadow: \"0 2px 6px rgba(26,95,108,0.1)\" },\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", mb: 0.5 }}>\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontWeight: 600, fontSize: \"0.88rem\", color: \"#1a1a1a\", fontFamily: \"poppins, Arial, sans-serif\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\t{c.name}\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t\t<Chip label={c.status || \"draft\"} size=\"small\" sx={statusChipSx(c.status)} />\n\t\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.73rem\", color: \"#999\", fontFamily: \"poppins, Arial, sans-serif\" }}>\n\t\t\t\t\t\t\t\t\t\t\t{c.dialingMode} · TZ: {c.timezone || \"Etc/UTC\"} · {wStr}\n\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t</Paper>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Box>\n\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</Paper>\n\n\t\t\t\t{/* RIGHT — Detail + Leads */}\n\t\t\t\t<Box sx={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 1.5, minWidth: 0, overflow: \"hidden\" }}>\n\t\t\t\t\t{!sc ? (\n\t\t\t\t\t\t<Paper\n\t\t\t\t\t\t\televation={0}\n\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\tborderRadius: \"16px\",\n\t\t\t\t\t\t\t\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n\t\t\t\t\t\t\t\tminHeight: 200, border: \"2px dashed #d0d0d0\", backgroundColor: \"#fafafa\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Box sx={{ textAlign: \"center\" }}>\n\t\t\t\t\t\t\t\t<SettingsIcon sx={{ fontSize: 40, color: \"#ccc\", mb: 1 }} />\n\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.95rem\", color: \"#999\", fontFamily: \"poppins, Arial, sans-serif\" }}>\n\t\t\t\t\t\t\t\t\tSelect a campaign to view details\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t</Paper>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{/* Campaign detail card */}\n\t\t\t\t\t\t\t<Paper\n\t\t\t\t\t\t\t\televation={0}\n\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\tborderRadius: \"16px\",\n\t\t\t\t\t\t\t\t\tp: { xs: 1.5, sm: 2.5 },\n\t\t\t\t\t\t\t\t\tborder: \"1px solid #e0e0e0\",\n\t\t\t\t\t\t\t\t\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Title + Action buttons */}\n\t\t\t\t\t\t\t\t<Box sx={{\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\", alignItems: { xs: \"flex-start\", sm: \"center\" },\n\t\t\t\t\t\t\t\t\tjustifyContent: \"space-between\", flexWrap: \"wrap\", gap: 1, mb: 2,\n\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flexWrap: \"wrap\" }}>\n\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontWeight: 700, fontSize: { xs: \"1rem\", sm: \"1.2rem\" }, color: \"#1a1a1a\", fontFamily: \"poppins, Arial, sans-serif\" }}>\n\t\t\t\t\t\t\t\t\t\t\t{sc.name}\n\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t<Chip label={sc.status || \"draft\"} size=\"small\" sx={statusChipSx(sc.status)} />\n\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t\t{!scArchived && (\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 1, flexWrap: \"wrap\" }}>\n\t\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\n\t\t\t\t\t\t\t\t\t\t\t\tpermissions={[\n\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_UPDATE,\n\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\n\t\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<SDKButton variant=\"outlined\" startIcon={<EditIcon />}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleOpenEdit(sc)}>\n\t\t\t\t\t\t\t\t\t\t\t\t\tEdit\n\t\t\t\t\t\t\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\n\t\t\t\t\t\t\t\t\t\t\t{(scDraft || scPaused) && (\n\t\t\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\n\t\t\t\t\t\t\t\t\t\t\t\t\tpermissions={[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_CONTROL,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\n\t\t\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SDKButton startIcon={<PlayArrowIcon />} onClick={() => handleStart(sc)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ backgroundColor: \"#4caf50\", \"&:hover\": { backgroundColor: \"#388e3c\" } }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tStart\n\t\t\t\t\t\t\t\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{scActive && (\n\t\t\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\n\t\t\t\t\t\t\t\t\t\t\t\t\tpermissions={[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_CONTROL,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\n\t\t\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SDKButton startIcon={<PauseIcon />} onClick={() => handlePause(sc)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ backgroundColor: \"#ff9800\", boxShadow: \"0 2px 8px rgba(255,152,0,0.25)\", \"&:hover\": { backgroundColor: \"#f57c00\" } }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tPause\n\t\t\t\t\t\t\t\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\n\t\t\t\t\t\t\t\t\t\t\t\tpermissions={[\n\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_DELETE,\n\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\n\t\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<SDKButton variant=\"danger\" startIcon={<ArchiveIcon />}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => { setArchiveTarget(sc); setArchiveOpen(true); }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\tArchive\n\t\t\t\t\t\t\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\n\t\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</Box>\n\n\t\t\t\t\t\t\t\t{/* Stats row — matches original 4-card grid with accent left border */}\n\t\t\t\t\t\t\t\t{sc.description && (\n\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.85rem\", color: \"#666\", mb: 1.5, fontFamily: \"poppins, Arial, sans-serif\", lineHeight: 1.5 }}>\n\t\t\t\t\t\t\t\t\t\t{sc.description}\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\toverflowX: \"auto\",\n\t\t\t\t\t\t\t\t\t\tpb: 0.5,\n\t\t\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar\": { height: 6 },\n\t\t\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar-track\": { backgroundColor: \"#f0f0f0\", borderRadius: 3 },\n\t\t\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": {\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#c0c0c0\",\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: \"#a0a0a0\" },\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"nowrap\",\n\t\t\t\t\t\t\t\t\t\tgap: 1.5,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{[\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\taccent: \"#1565c0\",\n\t\t\t\t\t\t\t\t\t\t\tfields: [\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Type\", value: sc.campaignType || \"N/A\" },\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Mode\", value: sc.dialingMode || \"N/A\" },\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\taccent: \"#2e7d32\",\n\t\t\t\t\t\t\t\t\t\t\tfields: [\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Agent\", value: sc.agentType || \"HUMAN\" },\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Dialer\", value: leadsMeta?.isDialerEnabled ? \"Enabled\" : \"Disabled\" },\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\taccent: \"#c62828\",\n\t\t\t\t\t\t\t\t\t\t\tfields: [\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Priority\", value: leadPriorityChipSx(sc.priority).label },\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Max Concurrent\", value: String(sc.maxConcurrentCalls ?? 1) },\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\taccent: \"#283593\",\n\t\t\t\t\t\t\t\t\t\t\tfields: [\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Retry\", value: `${sc.retryIntervalMinutes ?? 15}min / ${sc.maxAttempts ?? 3} attempts` },\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Leads\", value: `${sc.totalLeads ?? 0} total / ${sc.completedLeads ?? 0} completed / ${sc.successfulCalls ?? 0} success` },\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t].map((card, idx) => (\n\t\t\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\t\t\t\t\t\t\tgap: 0.5,\n\t\t\t\t\t\t\t\t\t\t\t\tpx: 1.5,\n\t\t\t\t\t\t\t\t\t\t\t\tpy: 1,\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#fafafa\",\n\t\t\t\t\t\t\t\t\t\t\t\tborderLeft: `3px solid ${card.accent}`,\n\t\t\t\t\t\t\t\t\t\t\t\tflex: \"0 0 auto\",\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: 180,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{card.fields.map((field) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<Box key={field.label} sx={{ display: \"flex\", alignItems: \"center\", gap: 0.75 }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.72rem\", fontWeight: 600, color: \"#888\", whiteSpace: \"nowrap\", flexShrink: 0 }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{field.label}:\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.75rem\", fontWeight: 700, color: \"#333\", whiteSpace: \"nowrap\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{field.value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t</Paper>\n\n\t\t\t\t\t\t\t{/* Leads section */}\n\t\t\t\t\t\t\t<SDKPermissionGuard permission={SDK_PERMISSIONS.CAMPAIGNS_LEADS_READ} showFallback={false}>\n\t\t\t\t\t\t\t<Paper\n\t\t\t\t\t\t\t\televation={0}\n\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\tborderRadius: \"16px\",\n\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\t\t\tborder: \"1px solid #e0e0e0\",\n\t\t\t\t\t\t\t\t\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Leads toolbar — matches original layout */}\n\t\t\t\t\t\t\t\t<Box sx={{\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\talignItems: { xs: \"flex-start\", sm: \"center\" },\n\t\t\t\t\t\t\t\t\tjustifyContent: \"space-between\",\n\t\t\t\t\t\t\t\t\tflexDirection: { xs: \"column\", sm: \"row\" },\n\t\t\t\t\t\t\t\t\tgap: 1,\n\t\t\t\t\t\t\t\t\tpx: { xs: 1.5, sm: 2 },\n\t\t\t\t\t\t\t\t\tpy: 1.5,\n\t\t\t\t\t\t\t\t\tborderBottom: \"1px solid #eee\",\n\t\t\t\t\t\t\t\t\tbackgroundColor: \"#fafafa\",\n\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t{/* Left: title + action buttons */}\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flexWrap: \"wrap\" }}>\n\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontWeight: 700, fontSize: \"1rem\", color: \"#1a1a1a\", fontFamily: \"poppins, Arial, sans-serif\" }}>\n\t\t\t\t\t\t\t\t\t\t\tLeads\n\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\n\t\t\t\t\t\t\t\t\t\t\tpermissions={[\n\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_LEADS_IMPORT,\n\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<SDKButton variant=\"outlined\" onClick={() => setImportOpen(true)} disabled={scArchived} startIcon={<UploadFileIcon sx={{ fontSize: 15 }} />} size=\"small\">\n\t\t\t\t\t\t\t\t\t\t\t\tImport Leads\n\t\t\t\t\t\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\n\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\n\t\t\t\t\t\t\t\t\t\t\tpermissions={[\n\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_READ,\n\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\n\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<SDKButton variant=\"primary\" onClick={handleExport} disabled={leadsLoading || leadTotal === 0} startIcon={<DownloadIcon sx={{ fontSize: 15 }} />} size=\"small\">\n\t\t\t\t\t\t\t\t\t\t\t\tExport Excel\n\t\t\t\t\t\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\n\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\n\t\t\t\t\t\t\t\t\t\t\tpermissions={[\n\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_LEADS_CREATE,\n\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<SDKButton variant=\"primary\" onClick={() => setAddLeadOpen(true)} disabled={scArchived} startIcon={<AddIcon sx={{ fontSize: 15 }} />} size=\"small\">\n\t\t\t\t\t\t\t\t\t\t\t\tAdd Lead\n\t\t\t\t\t\t\t\t\t\t\t</SDKButton>\n\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\n\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t\t{/* Right: search + status filter */}\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, width: { xs: \"100%\", sm: \"auto\" } }}>\n\t\t\t\t\t\t\t\t\t\t<OutlinedInput\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\tvalue={leadSearch}\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => { setLeadSearch(e.target.value); setLeadPage(0); }}\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Search number...\"\n\t\t\t\t\t\t\t\t\t\t\tsx={{ width: { xs: \"100%\", sm: 200 }, fontSize: \"0.85rem\", height: 34, borderRadius: \"20px\" }}\n\t\t\t\t\t\t\t\t\t\t\tstartAdornment={<InputAdornment position=\"start\"><SearchIcon sx={{ fontSize: 16, color: \"#aaa\" }} /></InputAdornment>}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<FormControl size=\"small\" sx={{ minWidth: 130 }}>\n\t\t\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={leadStatusFilter}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => { setLeadStatusFilter(e.target.value); setLeadPage(0); }}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ height: 34, borderRadius: \"30px\", fontSize: \"0.85rem\" }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{LEAD_STATUSES.map((s) => <MenuItem key={s} value={s}>{s}</MenuItem>)}\n\t\t\t\t\t\t\t\t\t\t\t</Select>\n\t\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t</Box>\n\n\t\t\t\t\t\t\t\t{/* Horizontal scroll wrapper — thin scrollbar, minWidth so columns don't squish */}\n\t\t\t\t\t\t\t\t<Box sx={{\n\t\t\t\t\t\t\t\t\toverflowX: \"auto\",\n\t\t\t\t\t\t\t\t\toverflowY: \"visible\",\n\t\t\t\t\t\t\t\t\tWebkitOverflowScrolling: \"touch\",\n\t\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar\": { height: 4 },\n\t\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": { backgroundColor: \"#ccc\", borderRadius: 2 },\n\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t<Table size=\"small\" sx={{ minWidth: 980 }}>\n\t\t\t\t\t\t\t\t\t\t<TableHead>\n\t\t\t\t\t\t\t\t\t\t\t<TableRow sx={{ backgroundColor: \"#f1f1f1\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\t{[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Number\", \"Status\", \"Priority\", \"Source\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Call ID\", \"Queue Name\", \"Attempts\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Created At\", \"Last Attempt\", \"Next Attempt\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Last Outcome\", \"Completed At\", \"Notes\", \"Outcome\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t...(showVoicemail ? [\"Voice Mail\"] : []),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Actions\",\n\t\t\t\t\t\t\t\t\t\t\t\t].map((col) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell key={col} sx={{ ...headCellSx, ...(col === \"Actions\" ? { textAlign: \"center\" } : {}) }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{col}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t\t\t\t\t\t{leadsLoading ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={showVoicemail ? 16 : 15} align=\"center\" sx={{ py: 4 }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size={24} sx={{ color: \"#1A5F6C\" }} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t\t\t) : leads.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={showVoicemail ? 16 : 15} align=\"center\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ py: 4, color: \"#999\", fontFamily: \"poppins, Arial, sans-serif\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tNo leads found. Add leads using \"Add Lead\" or \"Import Leads\".\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\tleads.map((lead) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst nonDeletable = [\"IN_PROGRESS\", \"COMPLETED\", \"FAILED\", \"DO_NOT_CALL\"];\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst leadStatus = (lead.status || \"\").toUpperCase();\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst deleteDisabled = nonDeletable.includes(leadStatus);\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst isDialerEnabled = !!leadsMeta?.isDialerEnabled;\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst isCompleted = leadStatus === \"COMPLETED\";\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst isInProgress = leadStatus === \"IN_PROGRESS\";\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst isDialable =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisDialerEnabled\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& hasOutboundPermission\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& isAgentIdle\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& !isCompleted\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& !isInProgress\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& dialLoading !== lead.id;\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst dialTooltip =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!isDialerEnabled ? \"Dialer is not enabled\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: !hasOutboundPermission ? \"No outbound call permission\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: isCompleted ? \"Lead is completed\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: isInProgress ? \"Lead is in progress\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: !isAgentIdle ? \"Agent is not idle\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: dialLoading === lead.id ? \"Dialing…\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: `Call ${lead.phoneNumber}`;\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst { chip: prioChip, label: prioLabel } = leadPriorityChipSx(lead.priority);\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableRow key={lead.id} sx={tableRowSx}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.phoneNumber}</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip label={lead.status || \"pending\"} size=\"small\" sx={leadStatusChipSx(lead.status)} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip label={prioLabel} size=\"small\" sx={prioChip} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.source || \"\"}</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...bodyCellSx, maxWidth: 140, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={lead.originalCallId || \"\"}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{lead.originalCallId || \"\"}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.queueName || \"\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.attemptCount ?? 0}</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...bodyCellSx, whiteSpace: \"nowrap\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.createdAt ? new Date(lead.createdAt).toLocaleString() : \"\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...bodyCellSx, whiteSpace: \"nowrap\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.lastAttemptAt ? new Date(lead.lastAttemptAt).toLocaleString() : \"\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...bodyCellSx, whiteSpace: \"nowrap\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.nextAttemptAt ? new Date(lead.nextAttemptAt).toLocaleString() : \"\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.lastOutcome || \"\"}</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...bodyCellSx, whiteSpace: \"nowrap\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.completedAt ? new Date(lead.completedAt).toLocaleString() : \"\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...bodyCellSx, maxWidth: 150, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.notes ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={lead.notes} arrow placement=\"top\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{lead.notes}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : \"\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.lastReason || \"\"}</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{showVoicemail && <TableCell sx={{ ...bodyCellSx, minWidth: 180 }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.originalCallId\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? <CallRecording callUuid={lead.originalCallId} recordingPath={lead.voicemail} iconOnly />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...bodyCellSx, textAlign: \"center\", whiteSpace: \"nowrap\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{/* Dial button */}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={dialTooltip}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleDialPreview(lead.id)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!isDialable}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: isDialable ? \"#2e7d32\" : \"#bdbdbd\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: isDialable ? \"#e8f5e9\" : \"transparent\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransition: \"all 0.2s ease-in-out\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: isDialable ? \"#43a047\" : \"transparent\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: isDialable ? \"#fff\" : \"#bdbdbd\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransform: isDialable ? \"scale(1.2)\" : \"none\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: isDialable ? \"0 0 8px rgba(67,160,71,0.5)\" : \"none\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{dialLoading === lead.id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? <CircularProgress size={16} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: <PhoneIcon sx={{ fontSize: 18 }} />}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{/* View call data */}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={lead.latestCallId ? \"View call details\" : \"No call data available\"}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleViewCallData(lead)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!lead.latestCallId}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tml: 0.5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: lead.latestCallId ? \"#1A5F6C\" : \"#bdbdbd\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: \"transparent\" },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<VisibilityOutlinedIcon sx={{ fontSize: 18 }} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{/* Delete button */}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpermissions={[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_LEADS_DELETE,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeleteDisabled\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? `Cannot delete — status is ${leadStatus.toLowerCase().replace(\"_\", \" \")}`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: `Delete lead ${lead.phoneNumber}`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => { setDeleteLeadTarget(lead); setDeleteLeadOpen(true); }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={deleteDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tml: 0.5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: deleteDisabled ? \"#bdbdbd\" : \"#c62828\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: deleteDisabled ? \"transparent\" : \"#ffebee\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransition: \"all 0.2s ease-in-out\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: deleteDisabled ? \"transparent\" : \"#d32f2f\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: deleteDisabled ? \"#bdbdbd\" : \"#fff\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransform: deleteDisabled ? \"none\" : \"scale(1.2)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: deleteDisabled ? \"none\" : \"0 0 8px rgba(211,47,47,0.5)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<DeleteIcon sx={{ fontSize: 18 }} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</TableBody>\n\t\t\t\t\t\t\t\t\t</Table>\n\t\t\t\t\t\t\t\t</Box>\n\n\t\t\t\t\t\t\t\t{leads.length > 0 && (\n\t\t\t\t\t\t\t\t\t<TablePagination\n\t\t\t\t\t\t\t\t\t\tcomponent=\"div\"\n\t\t\t\t\t\t\t\t\t\tcount={leadTotal}\n\t\t\t\t\t\t\t\t\t\tpage={leadPage}\n\t\t\t\t\t\t\t\t\t\trowsPerPage={leadRowsPerPage}\n\t\t\t\t\t\t\t\t\t\tonPageChange={(_, p) => { setLeadPage(p); refetchLeads(p); }}\n\t\t\t\t\t\t\t\t\t\tonRowsPerPageChange={(e) => { setLeadRowsPerPage(parseInt(e.target.value, 10)); setLeadPage(0); }}\n\t\t\t\t\t\t\t\t\t\trowsPerPageOptions={[10, 15, 25, 50, 100]}\n\t\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.82rem\",\n\t\t\t\t\t\t\t\t\t\t\t\"& .MuiTablePagination-toolbar\": { minHeight: 40, px: 1 },\n\t\t\t\t\t\t\t\t\t\t\t\"& .MuiTablePagination-selectLabel, & .MuiTablePagination-displayedRows\": { fontSize: \"0.82rem\" },\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Paper>\n\t\t\t\t\t\t\t</SDKPermissionGuard>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\t\t\t</Box>\n\n\t\t\t{/* ── Dialogs ── */}\n\t\t\t<CampaignDialog\n\t\t\t\topen={dialogOpen}\n\t\t\t\teditingCampaign={editingCampaign}\n\t\t\t\tformData={formData}\n\t\t\t\tsetFormData={setFormData}\n\t\t\t\tsaving={saving}\n\t\t\t\tonSave={handleSave}\n\t\t\t\tonClose={() => setDialogOpen(false)}\n\t\t\t\tparentQueueNameMap={queueNameMap}\n\t\t\t\tonQueuesRefreshed={handleQueuesRefreshed}\n\t\t\t\tonLeadsChange={() => { fetchCampaigns(); if (selectedId) refetchLeads(); }}\n\t\t\t/>\n\t\t\t<AddLeadDialog\n\t\t\t\topen={addLeadOpen}\n\t\t\t\tdata={addLeadData}\n\t\t\t\tonChange={setAddLeadData}\n\t\t\t\tsaving={addLeadSaving}\n\t\t\t\tonSave={handleAddLead}\n\t\t\t\tonClose={() => { setAddLeadOpen(false); setAddLeadData({ phoneNumber: \"\", callerName: \"\", priority: 5 }); }}\n\t\t\t/>\n\t\t\t<ImportLeadsDialog\n\t\t\t\topen={importOpen}\n\t\t\t\tfile={importFile}\n\t\t\t\tonFileChange={setImportFile}\n\t\t\t\tuploading={importing}\n\t\t\t\tonUpload={handleImport}\n\t\t\t\tonDownloadTemplate={handleDownloadTemplate}\n\t\t\t\tonClose={() => { setImportOpen(false); setImportFile(null); }}\n\t\t\t/>\n\t\t\t<ConfirmDialog\n\t\t\t\topen={archiveOpen}\n\t\t\t\ttitle=\"Archive Campaign\"\n\t\t\t\tmessage={`Archive \"${archiveTarget?.name}\"? It will no longer run.`}\n\t\t\t\tloading={archiving}\n\t\t\t\tonConfirm={confirmArchive}\n\t\t\t\tonClose={() => { setArchiveOpen(false); setArchiveTarget(null); }}\n\t\t\t/>\n\t\t\t<ConfirmDialog\n\t\t\t\topen={deleteLeadOpen}\n\t\t\t\ttitle=\"Delete Lead\"\n\t\t\t\tmessage={`Delete lead ${deleteLeadTarget?.phoneNumber}? This cannot be undone.`}\n\t\t\t\tloading={deletingLead}\n\t\t\t\tonConfirm={confirmDeleteLead}\n\t\t\t\tonClose={() => { setDeleteLeadOpen(false); setDeleteLeadTarget(null); }}\n\t\t\t/>\n\t\t\t<CallDataDialog\n\t\t\t\topen={callDataOpen}\n\t\t\t\tlead={callDataLead}\n\t\t\t\tdata={callData}\n\t\t\t\tloading={callDataLoading}\n\t\t\t\terror={callDataError}\n\t\t\t\tonClose={() => { setCallDataOpen(false); setCallData(null); setCallDataError(null); setCallDataLead(null); }}\n\t\t\t/>\n\t\t</Box>\n\t);\n});\n\n// ──── Default export — wrapped with SDKProvider ───────────────────────────────\n\nconst Campaigns: React.FC = () => (\n\t<SDKProvider>\n\t\t<CampaignsContent />\n\t</SDKProvider>\n);\n\nexport default Campaigns;\n","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 { Fragment } from \"react\";\r\nimport { Typography } from \"@mui/material\";\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\nimport { DateTimePicker } from \"@mui/x-date-pickers/DateTimePicker\";\r\nimport { DatePicker } from \"@mui/x-date-pickers/DatePicker\";\r\n\r\nconst pickerSx = {\r\n width: 170,\r\n \"& .MuiOutlinedInput-root\": { borderRadius: \"6px\", height: 32, px: 0.5 },\r\n \"& .MuiInputBase-input\": { py: 0, px: \"4px\", fontSize: \"0.72rem\" },\r\n \"& .MuiInputAdornment-root\": { ml: 0 },\r\n \"& .MuiInputAdornment-root .MuiSvgIcon-root\": { fontSize: \"0.8rem\" },\r\n \"& .MuiOutlinedInput-notchedOutline\": { borderColor: \"#c0c8d4\" },\r\n \"& .MuiPickersSectionList-root\": { py: \"4px\", px: 0, fontSize: 12 },\r\n};\r\n\r\ninterface DateRangePickerProps {\r\n startDate: Dayjs | null;\r\n endDate: Dayjs | null;\r\n onStartChange: (val: Dayjs | null) => void;\r\n onEndChange: (val: Dayjs | null) => void;\r\n showTime?: boolean;\r\n}\r\n\r\nexport default function DateRangePicker({\r\n startDate,\r\n endDate,\r\n onStartChange,\r\n onEndChange,\r\n showTime = true,\r\n}: DateRangePickerProps) {\r\n const Picker = showTime ? DateTimePicker : DatePicker;\r\n const format = showTime ? \"DD-MM-YYYY hh:mm A\" : undefined;\r\n const now = dayjs();\r\n const minKey = showTime ? \"minDateTime\" : \"minDate\";\r\n const maxKey = showTime ? \"maxDateTime\" : \"maxDate\";\r\n\r\n const clampFuture = (v: Dayjs | null): Dayjs | null => {\r\n if (!v) return v;\r\n const current = dayjs();\r\n return v.isAfter(current) ? current : v;\r\n };\r\n\r\n const handleStartChange = (v: Dayjs | null) => {\r\n const clamped = clampFuture(v);\r\n onStartChange(clamped);\r\n if (clamped && endDate && endDate.isBefore(clamped)) {\r\n onEndChange(clamped);\r\n }\r\n };\r\n\r\n const handleEndChange = (v: Dayjs | null) => {\r\n let clamped = clampFuture(v);\r\n if (clamped && startDate && clamped.isBefore(startDate)) {\r\n clamped = startDate;\r\n }\r\n onEndChange(clamped);\r\n };\r\n\r\n const startMax = endDate && endDate.isBefore(now) ? endDate : now;\r\n const startPickerBounds = { [maxKey]: startMax };\r\n const endPickerBounds = {\r\n [maxKey]: now,\r\n ...(startDate ? { [minKey]: startDate } : {}),\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <Picker\r\n value={startDate}\r\n onChange={(v) => handleStartChange(v as Dayjs | null)}\r\n disableFuture\r\n {...startPickerBounds}\r\n {...(format ? { format } : {})}\r\n slotProps={{ textField: { size: \"small\" as const, sx: pickerSx } }}\r\n />\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"#7a8599\" }}>to</Typography>\r\n <Picker\r\n value={endDate}\r\n onChange={(v) => handleEndChange(v as Dayjs | null)}\r\n disableFuture\r\n {...endPickerBounds}\r\n {...(format ? { format } : {})}\r\n slotProps={{ textField: { size: \"small\" as const, sx: pickerSx } }}\r\n />\r\n </Fragment>\r\n );\r\n}\r\n","import { useState, useEffect } from \"react\";\r\nimport {\r\n Checkbox,\r\n FormControl,\r\n InputLabel,\r\n MenuItem,\r\n Select,\r\n CircularProgress,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport axiosInstance from \"../../../services/axios\";\r\nimport { END_POINT } from \"../../../services/endPoint\";\r\n\r\ninterface User {\r\n id: number;\r\n userId: string;\r\n firstName: string;\r\n lastName: string;\r\n role: any;\r\n}\r\n\r\nasync function getUsers(params?: { role?: string; pageSize?: number }): Promise<User[]> {\r\n const res = await axiosInstance.get(END_POINT.USERS_LIST, { params });\r\n return Array.isArray(res.data) ? res.data : Array.isArray(res.data?.data) ? res.data.data : [];\r\n}\r\n\r\nexport interface AgentOption {\r\n id: number;\r\n userId: string;\r\n displayName: string;\r\n}\r\n\r\ninterface AgentMultiSelectProps {\r\n value: AgentOption[];\r\n onChange: (agents: AgentOption[]) => void;\r\n agents?: AgentOption[];\r\n label?: string;\r\n placeholder?: string;\r\n role?: string;\r\n minWidth?: number;\r\n disabled?: boolean;\r\n setIsAllUsersSelected?: (allSelected: boolean) => void;\r\n}\r\n\r\nconst SELECT_ALL_ID = -999;\r\n\r\nexport default function AgentMultiSelect({\r\n value,\r\n onChange,\r\n agents: externalAgents,\r\n label = \"Agents\",\r\n placeholder = \"All Agents\",\r\n role = \"\",\r\n minWidth = 160,\r\n disabled = false,\r\n setIsAllUsersSelected,\r\n}: AgentMultiSelectProps) {\r\n const [internalAgents, setInternalAgents] = useState<AgentOption[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n\r\n const agents = externalAgents ?? internalAgents;\r\n\r\n useEffect(() => {\r\n if (externalAgents) return;\r\n let cancelled = false;\r\n (async () => {\r\n try {\r\n setLoading(true);\r\n const users = await getUsers(role ? { role, pageSize: 500 } : { pageSize: 500 });\r\n if (cancelled) return;\r\n // An empty `role` lists all users (all roles) instead of agents only.\r\n const filtered = role\r\n ? (users || []).filter((u: User) => {\r\n const roleName =\r\n typeof u.role === \"object\" && u.role !== null ? u.role.name : u.role;\r\n return roleName === role;\r\n })\r\n : (users || []);\r\n setInternalAgents(\r\n filtered.map((u: User) => ({\r\n id: u.id,\r\n userId: u.userId,\r\n displayName:\r\n [u.firstName, u.lastName].filter(Boolean).join(\" \") || u.userId,\r\n })),\r\n );\r\n } catch {\r\n /* silently fail */\r\n } finally {\r\n if (!cancelled) setLoading(false);\r\n }\r\n })();\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [externalAgents, role]);\r\n\r\n const selectedIds = value.map((a) => a.id);\r\n const allSelected = agents.length > 0 && value.length === agents.length;\r\n\r\n const handleChange = (ids: number[]) => {\r\n setIsAllUsersSelected?.(ids.includes(SELECT_ALL_ID));\r\n if (ids.includes(SELECT_ALL_ID)) {\r\n onChange(allSelected ? [] : [...agents]);\r\n } else {\r\n onChange(agents.filter((a) => ids.includes(a.id)));\r\n }\r\n };\r\n\r\n const renderValue = (selected: unknown) => {\r\n const sel = selected as number[];\r\n if (sel.length === 0 || sel.length === agents.length) return placeholder;\r\n return `${sel.length} Agent(s)`;\r\n };\r\n\r\n return (\r\n <FormControl size=\"small\" sx={{ minWidth }} disabled={disabled || loading}>\r\n <InputLabel sx={{ fontSize: \"0.76rem\" }}>{label}</InputLabel>\r\n <Select\r\n multiple\r\n value={selectedIds}\r\n label={label}\r\n onChange={(e) => handleChange(e.target.value as number[])}\r\n renderValue={renderValue}\r\n sx={{ fontSize: \"0.76rem\", height: 32, borderRadius: \"6px\" }}\r\n MenuProps={{\r\n variant: \"menu\",\r\n PaperProps: {\r\n sx: {\r\n maxHeight: 280,\r\n \"& .MuiMenuItem-root\": { fontSize: \"0.76rem\", minHeight: 32, py: 0.3 },\r\n },\r\n },\r\n }}\r\n >\r\n {loading && (\r\n <MenuItem disabled>\r\n <CircularProgress size={16} sx={{ mr: 1 }} /> Loading…\r\n </MenuItem>\r\n )}\r\n {!loading && (\r\n <MenuItem value={SELECT_ALL_ID}>\r\n <Checkbox checked={allSelected} indeterminate={value.length > 0 && !allSelected} size=\"small\" />\r\n Select All\r\n </MenuItem>\r\n )}\r\n {!loading &&\r\n agents.map((agent) => (\r\n <MenuItem key={agent.id} value={agent.id}>\r\n <Checkbox checked={selectedIds.includes(agent.id)} size=\"small\" />\r\n <Typography noWrap sx={{ fontSize: \"0.76rem\", maxWidth: 180 }} title={agent.displayName}>\r\n {agent.displayName}\r\n </Typography>\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n );\r\n}\r\n\r\nexport function toAgentOptions(users: User[]): AgentOption[] {\r\n return users.map((u) => ({\r\n id: u.id,\r\n userId: u.userId,\r\n displayName:\r\n [u.firstName, u.lastName].filter(Boolean).join(\" \") || u.userId,\r\n }));\r\n}\r\n","import 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 { useCallback, useState } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tLoginAgentRowResponse,\r\n\tLoginReportParams,\r\n\tLoginReportResponse,\r\n\tLoginSessionResponse,\r\n} from \"./types\";\r\n\r\nexport interface Queue {\r\n\tid: number;\r\n\tname: string;\r\n\tdescription: string;\r\n\tprocessId?: number;\r\n\tisActive: boolean;\r\n}\r\n\r\nexport async function fetchQueues(): Promise<Queue[]> {\r\n\tconst res = await axiosInstance.get(END_POINT.MASTER_QUEUES);\r\n\tif (Array.isArray(res.data)) return res.data;\r\n\tif (Array.isArray(res.data?.data)) return res.data.data;\r\n\treturn [];\r\n}\r\n\r\nexport async function getQueues(): Promise<Queue[]> {\r\n\treturn fetchQueues();\r\n}\r\n\r\nexport async function getLoginReportAgents(params: LoginReportParams): Promise<LoginAgentRowResponse[]> {\r\n\tconst qs = buildLoginReportQueryString(params);\r\n\tconst res = await axiosInstance.get<LoginAgentRowResponse[]>(`${END_POINT.LOGIN_REPORT_AGENTS}${qs}`);\r\n\treturn Array.isArray(res.data) ? res.data : [];\r\n}\r\n\r\n/**\r\n * Combined login report — returns summary + the current page of agent rows.\r\n * Used for server-side pagination (the combined endpoint honours page/pageSize/search).\r\n */\r\nexport async function getLoginReport(params: LoginReportParams): Promise<LoginReportResponse> {\r\n\tconst qs = buildLoginReportQueryString(params);\r\n\tconst res = await axiosInstance.get<LoginReportResponse>(`${END_POINT.LOGIN_REPORT}${qs}`);\r\n\treturn res.data;\r\n}\r\n\r\nexport async function getAgentLoginSessions(\r\n\tagentId: string,\r\n\tparams?: { start_date?: string; end_date?: string },\r\n): Promise<LoginSessionResponse[]> {\r\n\tconst qs = buildSessionQueryString(params);\r\n\tconst res = await axiosInstance.get<LoginSessionResponse[]>(\r\n\t\t`${END_POINT.LOGIN_REPORT_AGENT_SESSIONS(agentId)}${qs}`,\r\n\t);\r\n\treturn Array.isArray(res.data) ? res.data : [];\r\n}\r\n\r\nexport async function exportLoginReportToExcel(params: LoginReportParams): Promise<void> {\r\n\tconst qs = buildLoginReportQueryString(params);\r\n\tconst res = await axiosInstance.get(`${END_POINT.LOGIN_REPORT_EXPORT_EXCEL}${qs}`, { responseType: \"blob\" });\r\n\ttriggerBlobDownload(new Blob([res.data]), `login-report-${params.start_date ?? \"export\"}.xlsx`);\r\n}\r\n\r\nexport async function exportAgentLoginSessionsToExcel(\r\n\tagentId: string,\r\n\tparams?: { start_date?: string; end_date?: string },\r\n): Promise<void> {\r\n\tconst qs = buildSessionQueryString(params);\r\n\tconst res = await axiosInstance.get(\r\n\t\t`${END_POINT.LOGIN_REPORT_AGENT_SESSIONS_EXPORT_EXCEL(agentId)}${qs}`,\r\n\t\t{ responseType: \"blob\" },\r\n\t);\r\n\ttriggerBlobDownload(new Blob([res.data]), `login_sessions_${agentId}.xlsx`);\r\n}\r\n\r\nfunction buildLoginReportQueryString(params: LoginReportParams): 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) for (const id of params.agent_id) qs.append(\"agent_id\", id);\r\n\tif (params.queue_id) for (const id of params.queue_id) qs.append(\"queue_id\", String(id));\r\n\tif (params.process_id) for (const id of params.process_id) qs.append(\"process_id\", String(id));\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\nfunction buildSessionQueryString(params?: { start_date?: string; end_date?: string }): 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\tconst str = qs.toString();\r\n\treturn str ? `?${str}` : \"\";\r\n}\r\n\r\nfunction triggerBlobDownload(blob: Blob, filename: string): void {\r\n\tconst url = URL.createObjectURL(blob);\r\n\tconst a = document.createElement(\"a\");\r\n\ta.href = url;\r\n\ta.download = filename;\r\n\tdocument.body.appendChild(a);\r\n\ta.click();\r\n\ta.remove();\r\n\tURL.revokeObjectURL(url);\r\n}\r\n\r\nexport function useLoginReport() {\r\n\tconst [agents, setAgents] = useState<LoginAgentRowResponse[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(\"\");\r\n\r\n\tconst fetchAgents = useCallback(async (params: LoginReportParams): Promise<void> => {\r\n\t\tsetLoading(true);\r\n\t\tsetError(\"\");\r\n\t\ttry {\r\n\t\t\tconst qs = buildLoginReportQueryString(params);\r\n\t\t\tconst res = await axiosInstance.get<LoginAgentRowResponse[]>(\r\n\t\t\t\t`${END_POINT.LOGIN_REPORT_AGENTS}${qs}`,\r\n\t\t\t);\r\n\t\t\tsetAgents(Array.isArray(res.data) ? res.data : []);\r\n\t\t} catch (err: any) {\r\n\t\t\tsetAgents([]);\r\n\t\t\tsetError(\r\n\t\t\t\terr?.response?.data?.message ||\r\n\t\t\t\t\terr?.response?.data?.detail ||\r\n\t\t\t\t\terr?.message ||\r\n\t\t\t\t\t\"Failed to fetch login report\",\r\n\t\t\t);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchSummary = useCallback(async (params: LoginReportParams): Promise<LoginReportResponse> => {\r\n\t\tconst qs = buildLoginReportQueryString(params);\r\n\t\tconst res = await axiosInstance.get<LoginReportResponse>(\r\n\t\t\t`${END_POINT.LOGIN_REPORT}${qs}`,\r\n\t\t);\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst fetchAgentSessions = useCallback(\r\n\t\tasync (agentId: string, params?: { start_date?: string; end_date?: string }): Promise<LoginSessionResponse[]> => {\r\n\t\t\tconst qs = buildSessionQueryString(params);\r\n\t\t\tconst res = await axiosInstance.get<LoginSessionResponse[]>(\r\n\t\t\t\t`${END_POINT.LOGIN_REPORT_AGENT_SESSIONS(agentId)}${qs}`,\r\n\t\t\t);\r\n\t\t\treturn Array.isArray(res.data) ? res.data : [];\r\n\t\t},\r\n\t\t[],\r\n\t);\r\n\r\n\tconst exportReportExcel = useCallback(async (params: LoginReportParams): Promise<void> => {\r\n\t\tconst qs = buildLoginReportQueryString(params);\r\n\t\tconst res = await axiosInstance.get(\r\n\t\t\t`${END_POINT.LOGIN_REPORT_EXPORT_EXCEL}${qs}`,\r\n\t\t\t{ responseType: \"blob\" },\r\n\t\t);\r\n\t\ttriggerBlobDownload(new Blob([res.data]), `login-report-${params.start_date ?? \"export\"}.xlsx`);\r\n\t}, []);\r\n\r\n\tconst exportAgentSessionsExcel = useCallback(\r\n\t\tasync (agentId: string, params?: { start_date?: string; end_date?: string }): Promise<void> => {\r\n\t\t\tconst qs = buildSessionQueryString(params);\r\n\t\t\tconst res = await axiosInstance.get(\r\n\t\t\t\t`${END_POINT.LOGIN_REPORT_AGENT_SESSIONS_EXPORT_EXCEL(agentId)}${qs}`,\r\n\t\t\t\t{ responseType: \"blob\" },\r\n\t\t\t);\r\n\t\t\ttriggerBlobDownload(new Blob([res.data]), `login_sessions_${agentId}.xlsx`);\r\n\t\t},\r\n\t\t[],\r\n\t);\r\n\r\n\treturn {\r\n\t\tagents,\r\n\t\tloading,\r\n\t\terror,\r\n\t\tsetError,\r\n\t\tfetchAgents,\r\n\t\tfetchSummary,\r\n\t\tfetchAgentSessions,\r\n\t\texportReportExcel,\r\n\t\texportAgentSessionsExcel,\r\n\t};\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","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","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n Alert,\n Box,\n Chip,\n CircularProgress,\n Dialog,\n DialogContent,\n DialogTitle,\n IconButton,\n Paper,\n Stack,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TablePagination,\n TableSortLabel,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport AppButton from \"../common/components/AppButton\";\n\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport ReportFilterBar, { type QuickRange } from \"../common/components/ReportFilterBar\";\nimport DownloadIcon from \"@mui/icons-material/Download\";\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\n\nimport dayjs, { Dayjs } from \"dayjs\";\nimport isoWeek from \"dayjs/plugin/isoWeek\";\n\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\nimport {\n getLoginReport,\n getAgentLoginSessions,\n exportLoginReportToExcel,\n exportAgentLoginSessionsToExcel,\n getQueues,\n type Queue,\n} from \"./useLoginReport\";\nimport type { LoginReportParams, LoginAgentRowResponse, LoginSessionResponse } from \"./types\";\nimport { deepFindArray } from \"../../services/axios\";\nimport { type AgentOption } from \"../common/components/AgentMultiSelect\";\nimport { headCellSx } from \"../common/utils/tableStyles\";\nimport PageHeader from \"../common/components/PageHeader\";\nimport SearchBar from \"../common/components/SearchBar\";\n\nimport { SDKProvider } from \"../../components/SDKProvider\";\nimport { SDKPermissionGuard } from \"../../components/SDKPermissionGuard\";\nimport { SDK_PERMISSIONS } from \"../../permissions/sdk-constants\";\n\ndayjs.extend(isoWeek);\n\ntype SortKey =\n | \"fullName\"\n | \"agentId\"\n | \"processNames\"\n | \"queueNames\"\n | \"numLogins\"\n | \"firstLoginTime\"\n | \"lastLogoutTime\"\n | \"workingDurationFormatted\"\n | \"breakDurationFormatted\"\n | \"loginDurationFormatted\"\n | \"utilisationPct\";\n\ntype SortDir = \"asc\" | \"desc\";\n\nconst FONT = \"'Inter', 'Segoe UI', 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif\";\n\nconst COLORS = {\n navy: \"#0d2a56\",\n blue: \"#1565c8\",\n green: \"#0a9a62\",\n amber: \"#c47c00\",\n red: \"#cc2a2a\",\n purple: \"#6b3fbf\",\n bg: \"transparent\",\n surface: \"transparent\",\n} as const;\n\nconst DEFAULT_ROWS_PER_PAGE = 10;\n\nconst comparator = (a: LoginAgentRowResponse, b: LoginAgentRowResponse, key: SortKey): number => {\n const av = a[key];\n const bv = b[key];\n if (typeof av === \"number\" && typeof bv === \"number\") return av - bv;\n return String(av ?? \"\").localeCompare(String(bv ?? \"\"));\n};\n\nfunction LoginReportContent() {\n const [startDate, setStartDate] = useState<Dayjs | null>(dayjs().startOf(\"day\"));\n const [endDate, setEndDate] = useState<Dayjs | null>(dayjs());\n const [activeQuickDate, setActiveQuickDate] = useState<\"today\" | \"week\" | \"month\" | null>(\"today\");\n const [searchText, setSearchText] = useState(\"\");\n\n const [selectedAgents, setSelectedAgents] = useState<AgentOption[]>([]);\n const [isAllUsersSelected, setIsAllUsersSelected] = useState(false);\n\n const [queues, setQueues] = useState<Queue[]>([]);\n const [selectedQueues, setSelectedQueues] = useState<Queue[]>([]);\n\n const [reportData, setReportData] = useState<LoginAgentRowResponse[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n\n const [page, setPage] = useState(0);\n const [rowsPerPage, setRowsPerPage] = useState(DEFAULT_ROWS_PER_PAGE);\n const [totalCount, setTotalCount] = useState(-1);\n const [sortKey, setSortKey] = useState<SortKey>(\"fullName\");\n const [sortDir, setSortDir] = useState<SortDir>(\"asc\");\n\n // Debounced search (sent to the server)\n const [debouncedSearch, setDebouncedSearch] = useState(\"\");\n const debounceRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n useEffect(() => {\n debounceRef.current = setTimeout(() => setDebouncedSearch(searchText.trim()), 400);\n return () => clearTimeout(debounceRef.current);\n }, [searchText]);\n\n const [dialogOpen, setDialogOpen] = useState(false);\n const [selectedRow, setSelectedRow] = useState<LoginAgentRowResponse | null>(null);\n const [sessions, setSessions] = useState<LoginSessionResponse[]>([]);\n const [sessionsLoading, setSessionsLoading] = useState(false);\n\n useEffect(() => {\n getQueues().then((data) => setQueues(data || [])).catch(() => setError(\"Failed to load queues\"));\n }, []);\n\n const handleQuickRangeChange = (range: QuickRange) => { setActiveQuickDate(range || null); };\n\n const handleRefresh = () => {\n if (activeQuickDate) {\n const now = dayjs();\n let sd = now.startOf(\"day\");\n const ed = now;\n if (activeQuickDate === \"week\") sd = now.startOf(\"week\").startOf(\"day\");\n else if (activeQuickDate === \"month\") sd = now.startOf(\"month\").startOf(\"day\");\n // Setting the dates re-triggers the auto-fetch effect below.\n setStartDate(sd);\n setEndDate(ed);\n } else {\n fetchReport(page);\n }\n };\n\n const fetchReport = useCallback(\n async (pageNum: number) => {\n const sd = startDate;\n const ed = endDate;\n\n if (!sd || !ed) {\n setError(\"Select a valid date range\");\n return;\n }\n\n const params: LoginReportParams = {\n start_date: sd.format(\"YYYY-MM-DDTHH:mm:ss\"),\n end_date: ed.format(\"YYYY-MM-DDTHH:mm:ss\"),\n agent_id: !isAllUsersSelected && selectedAgents.length > 0\n ? selectedAgents.map((a) => a.userId)\n : undefined,\n queue_id: selectedQueues.length > 0 && selectedQueues.length < queues.length\n ? selectedQueues.map((q) => q.id)\n : undefined,\n search: debouncedSearch || undefined,\n page: pageNum + 1,\n pageSize: rowsPerPage,\n };\n\n try {\n setError(\"\");\n setLoading(true);\n const res = await getLoginReport(params);\n const agents = deepFindArray<LoginAgentRowResponse>(res, [\"agents\"]);\n setReportData(agents);\n // Real total from the response (falls back defensively to the summary count).\n const total =\n (res as any)?.total ??\n (res as any)?.pagination?.total ??\n res?.summary?.totalAgentsLoggedIn;\n setTotalCount(typeof total === \"number\" ? total : agents.length);\n } catch (err: any) {\n setError(err?.message || \"Failed to fetch login report\");\n setReportData([]);\n } finally {\n setLoading(false);\n }\n },\n [startDate, endDate, selectedAgents, isAllUsersSelected, selectedQueues, debouncedSearch, rowsPerPage],\n );\n\n useEffect(() => {\n setPage(0);\n fetchReport(0);\n }, [fetchReport]);\n\n const handlePageChange = useCallback(\n (_event: React.MouseEvent<HTMLButtonElement> | null, newPage: number) => {\n setPage(newPage);\n fetchReport(newPage);\n },\n [fetchReport],\n );\n\n // Sorting is applied client-side to the current page; search + paging are server-side.\n const filteredData = useMemo(() => {\n const rows = [...reportData];\n rows.sort((a, b) => {\n const cmp = comparator(a, b, sortKey);\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n return rows;\n }, [reportData, sortKey, sortDir]);\n\n const paginatedData = filteredData;\n\n const handleSort = (key: SortKey) => {\n if (sortKey === key) {\n setSortDir((d) => (d === \"asc\" ? \"desc\" : \"asc\"));\n } else {\n setSortKey(key);\n setSortDir(\"asc\");\n }\n };\n\n const openDialog = async (row: LoginAgentRowResponse) => {\n setSelectedRow(row);\n setSessions([]);\n setDialogOpen(true);\n setSessionsLoading(true);\n try {\n const sd = startDate ?? dayjs();\n const ed = endDate ?? dayjs();\n const data = await getAgentLoginSessions(row.agentId, {\n start_date: sd.format(\"YYYY-MM-DDTHH:mm:ss\"),\n end_date: ed.format(\"YYYY-MM-DDTHH:mm:ss\"),\n });\n setSessions(data);\n } catch {\n setSessions([]);\n } finally {\n setSessionsLoading(false);\n }\n };\n\n const closeDialog = () => {\n setDialogOpen(false);\n setTimeout(() => {\n setSelectedRow(null);\n setSessions([]);\n }, 300);\n };\n\n const handleExportExcel = async () => {\n const sd = startDate ?? dayjs();\n const ed = endDate ?? dayjs();\n const params: LoginReportParams = {\n start_date: sd.format(\"YYYY-MM-DDTHH:mm:ss\"),\n end_date: ed.format(\"YYYY-MM-DDTHH:mm:ss\"),\n agent_id: !isAllUsersSelected && selectedAgents.length > 0\n ? selectedAgents.map((a) => a.userId)\n : undefined,\n queue_id: selectedQueues.length > 0 && selectedQueues.length < queues.length\n ? selectedQueues.map((q) => q.id)\n : undefined,\n search: debouncedSearch || undefined,\n };\n try {\n await exportLoginReportToExcel(params);\n } catch (err: any) {\n setError(err?.message || \"Failed to export Excel\");\n }\n };\n\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <Box sx={{ height: \"100%\", display: \"flex\", flexDirection: \"column\", fontFamily: FONT }}>\n <PageHeader\n title=\"Login Report\"\n actions={\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <SearchBar\n value={searchText}\n onChange={(val) => { setSearchText(val); setPage(0); }}\n placeholder=\"Search name, ID...\"\n width={250}\n />\n <SDKPermissionGuard\n permissions={[SDK_PERMISSIONS.REPORTS_AGENT_LOGIN_MANAGE, SDK_PERMISSIONS.REPORTS_AGENT_LOGIN_EXPORT]}\n showFallback={false}\n >\n <AppButton\n startIcon={<DownloadIcon sx={{ fontSize: \"0.95rem !important\" }} />}\n disabled={!reportData.length}\n onClick={handleExportExcel}\n sx={{ height: 36 }}\n >\n Export Excel\n </AppButton>\n </SDKPermissionGuard>\n </Stack>\n }\n />\n\n <Box sx={{ flex: 1, overflow: \"auto\", py: 0.8, px: 0 }}>\n <Box sx={{ mb: 0.8 }}>\n <ReportFilterBar\n startDate={startDate}\n endDate={endDate}\n onStartChange={setStartDate}\n onEndChange={setEndDate}\n quickRange={activeQuickDate || \"\"}\n onQuickRangeChange={handleQuickRangeChange}\n showAgentSelect\n selectedAgents={selectedAgents}\n onAgentsChange={setSelectedAgents}\n setIsAllUsersSelected={setIsAllUsersSelected}\n showQueueSelect\n queues={queues}\n selectedQueues={selectedQueues}\n onQueuesChange={setSelectedQueues}\n extra={\n <AppButton\n startIcon={<RefreshIcon sx={{ fontSize: \"0.9rem !important\" }} />}\n disabled={loading}\n onClick={handleRefresh}\n sx={{ height: 32 }}\n >\n Refresh\n </AppButton>\n }\n />\n\n {error && (\n <Alert severity=\"error\" sx={{ mt: 1, fontFamily: FONT, fontSize: \"0.78rem\" }}>\n {error}\n </Alert>\n )}\n </Box>\n\n {loading && (\n <Box sx={{ textAlign: \"center\", py: 2.5 }}>\n <CircularProgress sx={{ color: COLORS.blue }} size={28} />\n </Box>\n )}\n\n <Paper\n elevation={0}\n sx={{\n borderRadius: \"8px\",\n border: \"1px solid #e0e7ef\",\n overflow: \"hidden\",\n mb: 2,\n }}\n >\n <TableContainer>\n <Table\n size=\"small\"\n sx={{\n minWidth: 1100,\n fontFamily: FONT,\n \"& .MuiTableCell-root\": {\n fontFamily: FONT,\n fontSize: \"0.75rem\",\n borderBottom: \"1px solid #eef1f6\",\n py: 0.6,\n px: 1,\n },\n }}\n >\n <TableHead>\n <TableRow>\n {(\n [\n { id: \"fullName\" as SortKey, label: \"User Name\" },\n { id: \"agentId\" as SortKey, label: \"User ID\" },\n { id: \"queueNames\" as SortKey, label: \"Queues\" },\n { id: \"numLogins\" as SortKey, label: \"Logins\" },\n { id: \"firstLoginTime\" as SortKey, label: \"First Login\" },\n { id: \"lastLogoutTime\" as SortKey, label: \"Last Logout\" },\n { id: \"workingDurationFormatted\" as SortKey, label: \"Working Duration\" },\n { id: \"breakDurationFormatted\" as SortKey, label: \"Break Duration\" },\n { id: \"loginDurationFormatted\" as SortKey, label: \"Login Duration\" },\n { id: \"utilisationPct\" as SortKey, label: \"Utilisation %\" },\n ] as { id: SortKey; label: string }[]\n ).map((col) => (\n <TableCell key={col.id} sx={headCellSx}>\n <TableSortLabel\n active={sortKey === col.id}\n direction={sortKey === col.id ? sortDir : \"asc\"}\n onClick={() => handleSort(col.id)}\n sx={{\n \"&.MuiTableSortLabel-root\": { color: \"#333\" },\n \"&.MuiTableSortLabel-root:hover\": { color: \"#555\" },\n \"&.Mui-active\": { color: \"#333\" },\n \"& .MuiTableSortLabel-icon\": { color: \"#333 !important\" },\n }}\n >\n {col.label}\n </TableSortLabel>\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n\n <TableBody>\n {paginatedData.map((row, idx) => {\n const isLoggedIn = !row.lastLogoutTime;\n return (\n <TableRow\n key={`${row.agentId}-${idx}`}\n hover\n sx={{\n backgroundColor: \"#fff\",\n \"&:hover\": { backgroundColor: \"#f0f7f8\" },\n }}\n >\n <TableCell sx={{ fontWeight: 600, color: COLORS.navy, fontSize: \"0.75rem\" }}>\n {row.fullName || \"—\"}\n </TableCell>\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>{row.agentId || \"—\"}</TableCell>\n <TableCell>\n {row.queueNames ? (\n <Chip\n label={row.queueNames}\n size=\"small\"\n sx={{\n fontFamily: FONT,\n backgroundColor: \"#f0ebfa\",\n color: COLORS.purple,\n fontWeight: 500,\n fontSize: \"0.67rem\",\n height: 22,\n }}\n />\n ) : (\n \"—\"\n )}\n </TableCell>\n <TableCell sx={{ textAlign: \"center\" }}>\n <Chip\n label={row.numLogins}\n size=\"small\"\n onClick={(e) => { e.stopPropagation(); openDialog(row); }}\n sx={{\n fontFamily: FONT,\n backgroundColor: COLORS.navy,\n color: \"#fff\",\n fontWeight: 600,\n minWidth: 28,\n height: 20,\n fontSize: \"0.67rem\",\n cursor: \"pointer\",\n \"&:hover\": { backgroundColor: COLORS.blue },\n }}\n />\n </TableCell>\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\n {row.firstLoginTime\n ? dayjs(row.firstLoginTime).format(\"DD MMM YYYY hh:mm A\")\n : \"—\"}\n </TableCell>\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\n {isLoggedIn ? (\n <Chip\n label=\"LOGGED-IN\"\n size=\"small\"\n sx={{\n fontFamily: FONT,\n backgroundColor: COLORS.green,\n color: \"#fff\",\n fontWeight: 600,\n fontSize: \"0.65rem\",\n height: 20,\n }}\n />\n ) : (\n dayjs(row.lastLogoutTime).format(\"DD MMM YYYY hh:mm A\")\n )}\n </TableCell>\n <TableCell\n sx={{ fontWeight: 600, color: COLORS.blue, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}\n >\n {row.workingDurationFormatted || \"—\"}\n </TableCell>\n <TableCell\n sx={{ fontWeight: 500, color: COLORS.amber, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}\n >\n {row.breakDurationFormatted || \"—\"}\n </TableCell>\n <TableCell sx={{ fontWeight: 500, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>\n {row.loginDurationFormatted || \"—\"}\n </TableCell>\n <TableCell sx={{ minWidth: 120 }}>\n {row.utilisationPct != null ? (() => {\n const pct = Math.min(row.utilisationPct, 100);\n const barColor =\n pct >= 80 ? \"#10b981\" : pct >= 60 ? \"#f59e0b\" : \"#ef4444\";\n const bgTint =\n pct >= 80 ? \"#d1fae5\" : pct >= 60 ? \"#fef3c7\" : \"#fee2e2\";\n return (\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.8 }}>\n <Box\n sx={{\n position: \"relative\",\n flex: 1,\n height: 7,\n borderRadius: 4,\n backgroundColor: bgTint,\n overflow: \"hidden\",\n }}\n >\n <Box\n sx={{\n width: `${pct}%`,\n height: \"100%\",\n borderRadius: 4,\n background: `linear-gradient(90deg, ${barColor}cc, ${barColor})`,\n transition: \"width 0.4s ease\",\n }}\n />\n </Box>\n <Chip\n label={`${Math.round(pct)}%`}\n size=\"small\"\n sx={{\n fontFamily: FONT,\n height: 18,\n minWidth: 38,\n fontSize: \"0.63rem\",\n fontWeight: 700,\n backgroundColor: bgTint,\n color: barColor,\n \"& .MuiChip-label\": { px: 0.6 },\n }}\n />\n </Box>\n );\n })() : (\n \"—\"\n )}\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </TableContainer>\n\n <TablePagination\n component=\"div\"\n count={totalCount}\n page={page}\n onPageChange={handlePageChange}\n rowsPerPage={rowsPerPage}\n rowsPerPageOptions={[10, 15, 25, 50, 100]}\n onRowsPerPageChange={(e) => { setRowsPerPage(parseInt(e.target.value, 10)); setPage(0); }}\n sx={{ borderTop: \"1px solid #eef1f6\", fontFamily: FONT, \"& .MuiTablePagination-displayedRows\": { fontFamily: FONT, fontSize: \"0.73rem\" }, \"& .MuiTablePagination-selectLabel\": { fontFamily: FONT, fontSize: \"0.73rem\" } }}\n />\n </Paper>\n\n <Dialog\n open={dialogOpen}\n onClose={(_e, reason) => { if (reason !== 'backdropClick') closeDialog(); }}\n maxWidth=\"md\"\n fullWidth\n PaperProps={{\n sx: {\n borderRadius: \"12px\",\n fontFamily: FONT,\n overflow: \"hidden\",\n boxShadow: \"0 8px 32px rgba(0,0,0,0.18)\",\n maxWidth: 450,\n },\n }}\n >\n <DialogTitle\n sx={{\n fontFamily: FONT,\n background: \"linear-gradient(135deg, var(--primary-color-dark, #14505b), var(--primary-color, #1A5F6C))\",\n color: \"#fff\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n py: 1.5,\n px: 2.5,\n }}\n >\n <Box>\n <Typography variant=\"h6\" sx={{ fontFamily: FONT, fontWeight: 700, fontSize: \"0.95rem\", letterSpacing: \"0.3px\" }}>\n Login Sessions\n </Typography>\n <Typography\n variant=\"body2\"\n sx={{ fontFamily: FONT, opacity: 0.9, fontSize: \"0.76rem\", mt: 0.3 }}\n >\n {selectedRow?.fullName} &bull; {selectedRow?.numLogins} session{selectedRow?.numLogins !== 1 ? \"s\" : \"\"}\n </Typography>\n </Box>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\n <AppButton\n size=\"small\"\n startIcon={<DownloadIcon sx={{ fontSize: \"0.85rem !important\" }} />}\n onClick={async () => {\n if (!selectedRow) return;\n try {\n await exportAgentLoginSessionsToExcel(selectedRow.agentId, {\n start_date: (startDate ?? dayjs()).format(\"YYYY-MM-DDTHH:mm:ss\"),\n end_date: (endDate ?? dayjs()).format(\"YYYY-MM-DDTHH:mm:ss\"),\n });\n } catch (err: any) {\n setError(err?.message || \"Failed to export Excel\");\n }\n }}\n sx={{ whiteSpace: \"nowrap\" }}\n >\n Export to Excel\n </AppButton>\n <IconButton\n onClick={closeDialog}\n size=\"small\"\n sx={{\n color: \"#fff\",\n backgroundColor: \"rgba(255,255,255,0.1)\",\n \"&:hover\": { backgroundColor: \"rgba(255,255,255,0.2)\" },\n }}\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n </DialogTitle>\n\n <DialogContent sx={{ p: 0, backgroundColor: \"#f8fafb\" }}>\n {sessionsLoading ? (\n <Box sx={{ p: 4, textAlign: \"center\" }}>\n <CircularProgress size={28} sx={{ color: \"var(--primary-color, #1A5F6C)\" }} />\n </Box>\n ) : sessions.length > 0 ? (\n <Box sx={{ p: 1.5, maxHeight: 300, overflowY: \"auto\" }}>\n {Object.entries(\n sessions.reduce<Record<string, LoginSessionResponse[]>>((acc, s) => {\n const dateKey = s.loginTime\n ? dayjs(s.loginTime).format(\"DD MMM YYYY\")\n : \"Unknown Date\";\n if (!acc[dateKey]) acc[dateKey] = [];\n acc[dateKey].push(s);\n return acc;\n }, {})\n ).map(([date, dateSessions]) => (\n <Paper\n key={date}\n elevation={0}\n sx={{\n mb: 1.5,\n borderRadius: \"10px\",\n border: \"1px solid #e4eaf0\",\n overflow: \"hidden\",\n backgroundColor: \"#fff\",\n }}\n >\n <Box\n sx={{\n px: 1.5,\n py: 0.8,\n backgroundColor: \"#f0f5f4\",\n borderBottom: \"1px solid #e4eaf0\",\n }}\n >\n <Typography\n sx={{\n fontFamily: FONT,\n fontWeight: 700,\n fontSize: \"0.8rem\",\n color: \"var(--primary-color-dark, #14505b)\",\n letterSpacing: \"0.3px\",\n }}\n >\n {date}\n </Typography>\n </Box>\n <Box sx={{ px: 1.5, py: 1 }}>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 2,\n pb: 0.5,\n mb: 0.5,\n borderBottom: \"1px solid #e4eaf0\",\n }}\n >\n <Typography\n sx={{\n flex: 1,\n fontFamily: FONT,\n fontSize: \"0.72rem\",\n fontWeight: 700,\n color: \"#555\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n }}\n >\n Login\n </Typography>\n <Typography\n sx={{\n flex: 1,\n fontFamily: FONT,\n fontSize: \"0.72rem\",\n fontWeight: 700,\n color: \"#555\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n }}\n >\n Logout\n </Typography>\n </Box>\n {dateSessions.map((s, i) => (\n <Box\n key={i}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 2,\n py: 0.6,\n borderBottom: i < dateSessions.length - 1 ? \"1px dashed #e8ecf0\" : \"none\",\n }}\n >\n <Typography\n component=\"span\"\n sx={{\n flex: 1,\n fontFamily: FONT,\n fontSize: \"0.78rem\",\n fontWeight: 500,\n color: s.loginTime ? COLORS.green : \"#9e9e9e\",\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.4,\n }}\n >\n <span style={{ fontSize: \"0.9rem\" }}>{\"↙\"}</span>\n {s.loginTime ? dayjs(s.loginTime).format(\"DD MMM YYYY h:mm:ss A\") : \"Missing\"}\n </Typography>\n <Typography\n component=\"span\"\n sx={{\n flex: 1,\n fontFamily: FONT,\n fontSize: \"0.78rem\",\n fontWeight: 500,\n color: s.logoutTime ? COLORS.red : \"#9e9e9e\",\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.4,\n }}\n >\n <span style={{ fontSize: \"0.9rem\" }}>{\"↗\"}</span>\n {s.logoutTime ? dayjs(s.logoutTime).format(\"DD MMM YYYY h:mm:ss A\") : \"Missing\"}\n </Typography>\n </Box>\n ))}\n </Box>\n </Paper>\n ))}\n </Box>\n ) : (\n <Box sx={{ p: 4, textAlign: \"center\" }}>\n <Typography sx={{ fontFamily: FONT, color: \"#9e9e9e\", fontStyle: \"italic\", fontSize: \"0.82rem\" }}>\n No sessions found\n </Typography>\n </Box>\n )}\n </DialogContent>\n </Dialog>\n </Box>\n </Box>\n </LocalizationProvider>\n );\n}\n\nconst LoginReport: React.FC = () => (\n <SDKProvider>\n <LoginReportContent />\n </SDKProvider>\n);\n\nexport default LoginReport;\n","import React, { useEffect, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport {\r\n Avatar,\r\n Box,\r\n Typography,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow,\r\n Tabs,\r\n Tab,\r\n LinearProgress,\r\n useTheme,\r\n Dialog,\r\n IconButton,\r\n GlobalStyles,\r\n CircularProgress,\r\n Alert,\r\n ToggleButton,\r\n ToggleButtonGroup,\r\n} from \"@mui/material\";\r\nimport { alpha } from \"@mui/material/styles\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport LaunchIcon from \"@mui/icons-material/Launch\";\r\nimport CheckCircleOutlineIcon from \"@mui/icons-material/CheckCircleOutlined\";\r\nimport HighlightOffIcon from \"@mui/icons-material/HighlightOff\";\r\nimport RemoveCircleOutlineIcon from \"@mui/icons-material/RemoveCircleOutlined\";\r\nimport axiosInstance from \"../../../services/axios\";\r\nimport { END_POINT } from \"../../../services/endPoint\";\r\nimport type { CdrRecordResponse } from \"../../cdrReport/types\";\r\n\r\n// ─── API response types ────────────────────────────────────────────────────────\r\n\r\ninterface AuditMetadata {\r\n Hospital_Name?: string;\r\n \"Process/Department\"?: string;\r\n Call_Disposition?: string;\r\n Call_Category?: string;\r\n Call_Type?: string;\r\n Call_Date_Time?: string;\r\n Call_Duration?: string;\r\n Agent_Name?: string;\r\n Employee_ID?: string;\r\n Team_Leader?: string;\r\n Auditor_Name?: string;\r\n Language?: string;\r\n Recording_ID?: string;\r\n}\r\n\r\ninterface ExecutiveAuditSummary {\r\n Overall_Audit_Score_Percentage?: number | string;\r\n Audit_Result?: string;\r\n First_Call_Resolution_FCR?: string;\r\n Patient_Sentiment?: string;\r\n Process_Adherence?: string;\r\n Communication_Effectiveness?: string;\r\n Compliance_Status?: string;\r\n Customer_Experience?: string;\r\n Knowledge_Accuracy?: string;\r\n Empathy_Handling?: string;\r\n Risk_Severity?: string;\r\n}\r\n\r\ninterface ScorecardEntry {\r\n Weightage?: number;\r\n Score_Obtained?: number | string;\r\n Remarks?: string;\r\n}\r\n\r\ninterface QualityScorecard {\r\n Opening_and_Greeting?: ScorecardEntry;\r\n Verification_and_Authentication?: ScorecardEntry;\r\n Communication_and_Soft_Skills?: ScorecardEntry;\r\n Process_and_Workflow_Adherence?: ScorecardEntry;\r\n Resolution_Accuracy?: ScorecardEntry;\r\n Empathy_and_Patient_Assurance?: ScorecardEntry;\r\n Call_Handling?: ScorecardEntry;\r\n CRM_Documentation_Alignment?: ScorecardEntry;\r\n Closing_and_Customer_Education?: ScorecardEntry;\r\n Total_Score?: number;\r\n Final_Rating?: string;\r\n}\r\n\r\ninterface DispositionFramework {\r\n dispositionType?: string;\r\n frameworks?: Array<{\r\n expectedFramework?: string;\r\n status?: string;\r\n remarks?: string;\r\n }>;\r\n}\r\n\r\ninterface ChecklistItem {\r\n parameter?: string;\r\n expectedStandard?: string;\r\n status?: string;\r\n remarks?: string;\r\n qaObservation?: string;\r\n}\r\n\r\ninterface ChecklistGroup {\r\n items?: ChecklistItem[];\r\n}\r\n\r\ntype ObsRecord = Record<string, { Status?: string; Remarks?: string; Observation_Impact?: string }>;\r\n\r\ninterface SectionWiseAuditObservations {\r\n Opening_and_Greeting?: ObsRecord;\r\n Verification_and_Authentication?: ObsRecord;\r\n Communication_and_Soft_Skills?: ObsRecord;\r\n Process_and_Workflow_Adherence?: ChecklistGroup[];\r\n Empathy_and_Patient_Assurance?: ObsRecord;\r\n Call_Handling?: ObsRecord;\r\n Call_Closure_and_Customer_Education?: ObsRecord;\r\n}\r\n\r\ninterface RootCauseItem {\r\n Observation?: string;\r\n Root_Cause?: string;\r\n Impact?: string;\r\n Severity?: string;\r\n}\r\n\r\ninterface AuditorRecommendation {\r\n Key_Strengths?: string[] | string;\r\n Improvement_Areas?: string[] | string;\r\n}\r\n\r\nexport interface NewAuditApiResponse {\r\n Audit_Metadata?: AuditMetadata;\r\n Conversation_Type_Classification?: Record<string, string>;\r\n Call_Summary?: string;\r\n transcript?: string;\r\n Executive_Audit_Summary?: ExecutiveAuditSummary;\r\n Quality_Scorecard?: QualityScorecard;\r\n Disposition_Based_Quality_Framework?: DispositionFramework[];\r\n Section_Wise_Audit_Observations_Checklist?: SectionWiseAuditObservations;\r\n Root_Cause_Analysis?: RootCauseItem[];\r\n Auditor_Recommendation?: AuditorRecommendation;\r\n Final_Auditor_Remarks?: string;\r\n}\r\n\r\n\r\nfunction toStringArray(value: string[] | string | undefined): string[] {\r\n if (!value) return [];\r\n if (Array.isArray(value)) return value;\r\n return value.split(\"\\n\").map((l) => l.replace(/^\\s*[\\*\\-]\\s*/, \"\").trim()).filter(Boolean);\r\n}\r\n\r\n// ─── Colour helpers ────────────────────────────────────────────────────────────\r\n\r\nconst STATUS_COLOUR: Record<string, { color: string; bg: string }> = {\r\n completed: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n complied: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n pass: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n compliant: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n achieved: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n strong: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n excellent: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n low: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n no: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n good: { color: \"#1565c0\", bg: \"#e3f2fd\" },\r\n partial: { color: \"#e65100\", bg: \"#fff3e0\" },\r\n moderate: { color: \"#e65100\", bg: \"#fff3e0\" },\r\n medium: { color: \"#e65100\", bg: \"#fff3e0\" },\r\n missed: { color: \"#c62828\", bg: \"#ffebee\" },\r\n fail: { color: \"#c62828\", bg: \"#ffebee\" },\r\n high: { color: \"#c62828\", bg: \"#ffebee\" },\r\n yes: { color: \"#c62828\", bg: \"#ffebee\" },\r\n \"n/a\": { color: \"#757575\", bg: \"#f5f5f5\" },\r\n na: { color: \"#757575\", bg: \"#f5f5f5\" },\r\n};\r\n\r\nfunction resolveColour(label: string): { color: string; bg: string } {\r\n const key = label.toLowerCase().trim();\r\n if (STATUS_COLOUR[key]) return STATUS_COLOUR[key];\r\n const stripped = key.replace(/[^a-z]/g, \"\");\r\n return STATUS_COLOUR[stripped] ?? { color: \"#555\", bg: \"#f0f0f0\" };\r\n}\r\n\r\nfunction StatusBadge({ label }: { label: string }) {\r\n const { color, bg } = resolveColour(label);\r\n return (\r\n <Box sx={{ display: \"inline-flex\", alignItems: \"center\", px: \"7px\", py: \"2px\", borderRadius: \"4px\", backgroundColor: bg, whiteSpace: \"nowrap\" }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", fontWeight: 600, color, letterSpacing: \"0.02em\" }}>\r\n {label.toUpperCase()}\r\n </Typography>\r\n </Box>\r\n );\r\n}\r\n\r\nfunction StatusIconBadge({ label }: { label: string }) {\r\n const key = label.toLowerCase().replace(/[^a-z]/g, \"\");\r\n let icon: React.ReactNode;\r\n if (key === \"complied\" || key === \"completed\" || key === \"pass\") {\r\n icon = <CheckCircleOutlineIcon sx={{ fontSize: 15, color: \"#2e7d32\" }} />;\r\n } else if (key === \"partial\") {\r\n icon = <RemoveCircleOutlineIcon sx={{ fontSize: 15, color: \"#e65100\" }} />;\r\n } else if (key === \"na\") {\r\n icon = <RemoveCircleOutlineIcon sx={{ fontSize: 15, color: \"#757575\" }} />;\r\n } else {\r\n icon = <HighlightOffIcon sx={{ fontSize: 15, color: \"#c62828\" }} />;\r\n }\r\n return (\r\n <Box sx={{ display: \"inline-flex\", alignItems: \"center\", gap: \"4px\" }}>\r\n {icon}\r\n <StatusBadge label={label} />\r\n </Box>\r\n );\r\n}\r\n\r\ninterface ProgressValue { score: number; max: number }\r\n\r\nfunction ProgressCell({ value, primary }: { value: ProgressValue; primary: string }) {\r\n const pct = Math.min(Math.round((value.score / value.max) * 100), 100);\r\n const barColor = pct < 80 ? \"#c62828\" : primary;\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, minWidth: 100 }}>\r\n <LinearProgress variant=\"determinate\" value={pct} sx={{ flex: 1, height: 5, borderRadius: 3, backgroundColor: alpha(barColor, 0.12), \"& .MuiLinearProgress-bar\": { backgroundColor: barColor, borderRadius: 3 } }} />\r\n <Typography sx={{ fontSize: \"0.68rem\", color: \"text.secondary\", minWidth: 28, textAlign: \"right\" }}>{pct}%</Typography>\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Shared styles ─────────────────────────────────────────────────────────────\r\n\r\nconst TH: SxProps<Theme> = { fontSize: \"0.72rem\", fontWeight: 700, color: \"text.secondary\", py: \"7px\", px: \"10px\", backgroundColor: \"#f5f7f8\", borderBottom: \"1px solid\", borderColor: \"divider\", whiteSpace: \"nowrap\" };\r\nconst TD: SxProps<Theme> = { fontSize: \"0.75rem\", color: \"text.primary\", py: \"6px\", px: \"10px\", borderBottom: \"1px solid\", borderColor: \"divider\", verticalAlign: \"middle\" };\r\n\r\nfunction SectionTitle({ children }: { children: React.ReactNode }) {\r\n return (\r\n <Typography sx={{ fontSize: \"0.78rem\", fontWeight: 700, color: \"text.primary\", mb: \"8px\", mt: \"4px\" }}>\r\n {children}\r\n </Typography>\r\n );\r\n}\r\n\r\n// ─── Transcript bubbles (mirrors Transcript.tsx chat layout) ───────────────────\r\n\r\nfunction TranscriptBubbles({ text }: { text: string }) {\r\n const lines = text.split(\"\\n\").filter((l) => l.trim().length > 0);\r\n if (!lines.length) {\r\n return <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\" }}>No transcript available.</Typography>;\r\n }\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: \"6px\" }}>\r\n {lines.map((line, idx) => {\r\n const isPatient = line.trim().toLowerCase().startsWith(\"patient\");\r\n const text = line.replace(/^\\s*(Patient|Agent)\\s*:\\s*/i, \"\");\r\n return (\r\n <Box key={idx} sx={{ display: \"flex\", justifyContent: isPatient ? \"flex-end\" : \"flex-start\", alignItems: \"flex-end\", gap: \"6px\" }}>\r\n {!isPatient && <Avatar sx={{ width: 22, height: 22, fontSize: 12 }} />}\r\n <Box\r\n sx={(t) => ({\r\n maxWidth: \"70%\",\r\n px: \"10px\",\r\n py: \"7px\",\r\n borderRadius: isPatient ? \"8px 8px 0 8px\" : \"8px 8px 8px 0\",\r\n backgroundColor: isPatient ? t.palette.primary.main : \"#fff\",\r\n color: isPatient ? t.palette.common.white : \"#222\",\r\n border: isPatient ? \"none\" : \"1px solid #e0e0e0\",\r\n fontSize: \"0.78rem\",\r\n lineHeight: 1.5,\r\n })}\r\n >\r\n {text}\r\n </Box>\r\n {isPatient && <Avatar sx={{ width: 22, height: 22, fontSize: 12 }} />}\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Overview Tab ──────────────────────────────────────────────────────────────\r\n\r\nfunction OverviewTab({ data }: { data: NewAuditApiResponse }) {\r\n const meta = data.Audit_Metadata ?? {};\r\n const kvItems = [\r\n { label: \"Hospital Name\", value: meta.Hospital_Name ?? \"N/A\" },\r\n { label: \"Call Duration\", value: meta.Call_Duration ?? \"N/A\" },\r\n { label: \"Department\", value: meta[\"Process/Department\"] ?? \"N/A\" },\r\n { label: \"Agent Name\", value: meta.Agent_Name ?? \"N/A\" },\r\n { label: \"Call Disposition\", value: meta.Call_Disposition ?? \"N/A\" },\r\n { label: \"Employee ID\", value: meta.Employee_ID ?? \"N/A\" },\r\n { label: \"Call Category\", value: meta.Call_Category ?? \"N/A\" },\r\n { label: \"Team Leader\", value: meta.Team_Leader ?? \"N/A\" },\r\n { label: \"Call Type\", value: meta.Call_Type ?? \"N/A\" },\r\n { label: \"Auditor Name\", value: meta.Auditor_Name ?? \"N/A\" },\r\n { label: \"Call Date & Time\", value: meta.Call_Date_Time ?? \"N/A\" },\r\n { label: \"Language\", value: meta.Language ?? \"N/A\" },\r\n { label: \"Recording ID\", value: meta.Recording_ID ?? \"N/A\" },\r\n ];\r\n const half = Math.ceil(kvItems.length / 2);\r\n const col1 = kvItems.slice(0, half);\r\n const col2 = kvItems.slice(half);\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n {/* Audit Metadata */}\r\n <Box>\r\n <SectionTitle>Audit Metadata</SectionTitle>\r\n <Box sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\", backgroundColor: \"background.paper\" }}>\r\n <Box sx={{ display: \"flex\" }}>\r\n {[col1, col2].map((chunk, ci) => (\r\n <Box key={ci} sx={{ flex: \"1 1 240px\", minWidth: 0, borderRight: ci === 0 ? \"1px solid\" : \"none\", borderColor: \"divider\" }}>\r\n {chunk.map((item, ii) => (\r\n <Box key={ii} sx={{ display: \"flex\", alignItems: \"baseline\", borderBottom: ii < chunk.length - 1 ? \"1px solid\" : \"none\", borderColor: \"divider\", px: \"10px\", py: \"6px\", gap: 1 }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"text.secondary\", minWidth: 140, flexShrink: 0 }}>{item.label}</Typography>\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.primary\", fontWeight: 500 }}>\r\n {item.value}\r\n </Typography>\r\n </Box>\r\n ))}\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n {/* Call Summary */}\r\n <Box>\r\n <SectionTitle>Call Summary</SectionTitle>\r\n <Box sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", backgroundColor: \"background.paper\", px: \"14px\", py: \"10px\", maxHeight: 160, overflowY: \"auto\" }}>\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\", lineHeight: 1.7 }}>\r\n {data.Call_Summary ?? \"No summary available.\"}\r\n </Typography>\r\n </Box>\r\n </Box>\r\n\r\n {/* Call Transcription */}\r\n <Box>\r\n <SectionTitle>Call Transcription</SectionTitle>\r\n <Box sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", backgroundColor: \"#f9f9f9\", px: \"14px\", py: \"12px\", maxHeight: 320, overflowY: \"auto\" }}>\r\n <TranscriptBubbles text={data.transcript ?? \"\"} />\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Scorecard Tab ─────────────────────────────────────────────────────────────\r\n\r\nconst SCORECARD_PARAMS: Array<{ key: keyof QualityScorecard; label: string; defaultMax: number }> = [\r\n { key: \"Opening_and_Greeting\", label: \"Opening & Greeting\", defaultMax: 10 },\r\n { key: \"Verification_and_Authentication\", label: \"Verification & Authentication\", defaultMax: 10 },\r\n { key: \"Communication_and_Soft_Skills\", label: \"Communication & Soft Skills\", defaultMax: 15 },\r\n { key: \"Process_and_Workflow_Adherence\", label: \"Process & Workflow Adherence\", defaultMax: 20 },\r\n { key: \"Resolution_Accuracy\", label: \"Resolution Accuracy\", defaultMax: 20 },\r\n { key: \"Empathy_and_Patient_Assurance\", label: \"Empathy & Patient Assurance\", defaultMax: 10 },\r\n { key: \"Call_Handling\", label: \"Call Handling\", defaultMax: 5 },\r\n { key: \"CRM_Documentation_Alignment\", label: \"CRM Documentation Alignment\", defaultMax: 5 },\r\n { key: \"Closing_and_Customer_Education\", label: \"Closing & Customer Education\", defaultMax: 5 },\r\n];\r\n\r\nfunction ScorecardTab({ data, primary }: { data: NewAuditApiResponse; primary: string }) {\r\n const sc = data.Quality_Scorecard ?? {};\r\n const summary = data.Executive_Audit_Summary ?? {};\r\n\r\n const rawScore = sc.Total_Score ?? summary.Overall_Audit_Score_Percentage ?? 0;\r\n const overallScore = typeof rawScore === \"string\" ? parseFloat(rawScore.replace(\"%\", \"\")) || 0 : rawScore;\r\n const pct = Math.min(Math.round((overallScore / 100) * 100), 100);\r\n const resultBadge = summary.Audit_Result ?? sc.Final_Rating ?? \"N/A\";\r\n\r\n const metrics = [\r\n { label: \"Audit Result\", value: summary.Audit_Result ?? \"N/A\" },\r\n { label: \"First Call Resolution\", value: summary.First_Call_Resolution_FCR ?? \"N/A\" },\r\n { label: \"Patient Experience\", value: summary.Customer_Experience ?? summary.Patient_Sentiment ?? \"N/A\" },\r\n { label: \"Process Adherence\", value: summary.Process_Adherence ?? \"N/A\" },\r\n { label: \"Effective Communication\", value: summary.Communication_Effectiveness ?? \"N/A\" },\r\n ];\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2.5 }}>\r\n {/* Overall score + metric cards */}\r\n <Box sx={{ display: \"flex\", gap: 2, flexWrap: \"wrap\", alignItems: \"stretch\" }}>\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", backgroundColor: \"background.paper\", px: 3, py: 2, minWidth: 140, gap: 0.5 }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"text.secondary\", fontWeight: 600, mb: 0.5, letterSpacing: \"0.04em\" }}>OVERALL SCORE</Typography>\r\n <Box sx={{ display: \"flex\", alignItems: \"baseline\", gap: \"3px\" }}>\r\n <Typography sx={{ fontSize: \"2.4rem\", fontWeight: 700, color: primary, lineHeight: 1 }}>{overallScore}</Typography>\r\n <Typography sx={{ fontSize: \"0.85rem\", color: \"text.secondary\", fontWeight: 600 }}>/100</Typography>\r\n </Box>\r\n <Box sx={{ width: \"100%\", mt: 0.75 }}>\r\n <LinearProgress variant=\"determinate\" value={pct} sx={{ height: 6, borderRadius: 3, backgroundColor: alpha(primary, 0.12), \"& .MuiLinearProgress-bar\": { backgroundColor: primary, borderRadius: 3 } }} />\r\n </Box>\r\n <Box sx={{ mt: 0.75 }}><StatusBadge label={resultBadge} /></Box>\r\n </Box>\r\n <Box sx={{ flex: 1, minWidth: 260, display: \"flex\", flexDirection: \"column\", gap: \"8px\", alignSelf: \"stretch\" }}>\r\n <Box sx={{ flex: 1, display: \"grid\", gridTemplateColumns: \"repeat(3, 1fr)\", gap: \"8px\" }}>\r\n {metrics.slice(0, 3).map((m) => (\r\n <Box key={m.label} sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"6px\", backgroundColor: \"background.paper\", px: \"10px\", py: \"8px\", display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", gap: \"6px\" }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"text.secondary\", lineHeight: 1.3, textAlign: \"center\" }}>{m.label}</Typography>\r\n <StatusBadge label={m.value} />\r\n </Box>\r\n ))}\r\n </Box>\r\n <Box sx={{ flex: 1, display: \"grid\", gridTemplateColumns: \"repeat(3, 1fr)\", gap: \"8px\" }}>\r\n {metrics.slice(3).map((m) => (\r\n <Box key={m.label} sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"6px\", backgroundColor: \"background.paper\", px: \"10px\", py: \"8px\", display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", gap: \"6px\" }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"text.secondary\", lineHeight: 1.3, textAlign: \"center\" }}>{m.label}</Typography>\r\n <StatusBadge label={m.value} />\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n {/* Quality Scorecard table */}\r\n <Box>\r\n <SectionTitle>Quality Scorecard</SectionTitle>\r\n <TableContainer sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\" }}>\r\n <Table size=\"small\">\r\n <TableHead>\r\n <TableRow>\r\n {[\r\n { label: \"Evaluation Parameter\", align: \"left\", minWidth: 180 },\r\n { label: \"Weightage\", align: \"center\", minWidth: 90 },\r\n { label: \"Score\", align: \"center\", minWidth: 80 },\r\n { label: \"\", align: \"left\", minWidth: 120 },\r\n { label: \"Remarks\", align: \"left\", minWidth: 160 },\r\n ].map((col, i) => (\r\n <TableCell key={i} sx={{ ...TH, textAlign: col.align as any, minWidth: col.minWidth }}>{col.label}</TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {SCORECARD_PARAMS.map((p) => {\r\n const entry = sc[p.key] as ScorecardEntry | undefined;\r\n const rawEntryScore = entry?.Score_Obtained;\r\n const score = typeof rawEntryScore === \"string\" ? parseFloat(rawEntryScore) || 0 : (rawEntryScore ?? 0);\r\n const max = entry?.Weightage ?? p.defaultMax;\r\n return (\r\n <TableRow key={p.key}>\r\n <TableCell sx={{ ...TD }}>{p.label}</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\" }}>{max}</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\" }}>{rawEntryScore ?? \"—\"}</TableCell>\r\n <TableCell sx={{ ...TD }}><ProgressCell value={{ score, max }} primary={primary} /></TableCell>\r\n <TableCell sx={{ ...TD }}>{entry?.Remarks ?? \"—\"}</TableCell>\r\n </TableRow>\r\n );\r\n })}\r\n <TableRow sx={{ backgroundColor: \"#f5f7f8\", \"& td\": { borderBottom: 0 } }}>\r\n <TableCell sx={{ ...TD, fontWeight: 700 }}>Total Score</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\", fontWeight: 700 }}>100</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\", fontWeight: 700 }}>{overallScore}</TableCell>\r\n <TableCell sx={{ ...TD }}><ProgressCell value={{ score: overallScore, max: 100 }} primary={primary} /></TableCell>\r\n <TableCell sx={{ ...TD, fontWeight: 700 }}><StatusBadge label={sc.Final_Rating ?? resultBadge} /></TableCell>\r\n </TableRow>\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Audit Checklist Tab ───────────────────────────────────────────────────────\r\n\r\ninterface ChecklistRow { parameter: string; expectedStandard: string; status: string; remarks: string; qaObservation: string }\r\n\r\nconst OPENING_LABELS: Record<string, string> = { Standard_Greeting_Used: \"Standard Greeting Used\", Hospital_Name_Mentioned: \"Hospital Name Mentioned\", Agent_Introduction_Provided: \"Agent Introduction Provided\", Professional_Tone_Maintained: \"Professional Tone Maintained\" };\r\nconst OPENING_EXPECTED: Record<string, string> = { Standard_Greeting_Used: \"Agent must greet as per approved hospital script\", Hospital_Name_Mentioned: \"Mandatory hospital identification\", Agent_Introduction_Provided: \"Agent must introduce self\", Professional_Tone_Maintained: \"Warm and professional tone expected\" };\r\n\r\nconst VERIFICATION_LABELS: Record<string, string> = { Patient_Name_Captured: \"Patient Name Captured\", \"Existing_New_Patient_Validation\": \"Existing/New Patient Validation\", Registered_Mobile_Number_Verified: \"Registered Mobile Number Verified\", \"Secondary_Authentication_DOB_UHID\": \"Secondary Authentication (DOB/UHID)\" };\r\nconst VERIFICATION_EXPECTED: Record<string, string> = { Patient_Name_Captured: \"Mandatory for identification\", \"Existing_New_Patient_Validation\": \"Required for workflow routing\", Registered_Mobile_Number_Verified: \"Mandatory authentication step\", \"Secondary_Authentication_DOB_UHID\": \"Recommended compliance practice\" };\r\n\r\nconst COMM_LABELS: Record<string, string> = { Clarity_of_Speech: \"Clarity of Speech\", Active_Listening_Demonstrated: \"Active Listening Demonstrated\", Avoidance_of_Dead_Air: \"Avoidance of Dead Air\", Professional_Language_Usage: \"Professional Language Usage\", Empathy_Statements_Used: \"Empathy Statements Used\" };\r\nconst COMM_EXPECTED: Record<string, string> = { Clarity_of_Speech: \"Clear and understandable communication\", Active_Listening_Demonstrated: \"Agent should acknowledge caller inputs\", Avoidance_of_Dead_Air: \"Minimal silence during call\", Professional_Language_Usage: \"No slang/rude language\", Empathy_Statements_Used: \"Emotional acknowledgement expected\" };\r\n\r\nconst EMPATHY_LABELS: Record<string, string> = { Patient_Concern_Acknowledged: \"Patient Concern Acknowledged\", Empathy_Toward_Patient_Condition: \"Empathy Toward Patient Condition\", Severity_Red_Flag_Probing: \"Severity/Red Flag Probing\", Professional_Behaviour_Maintained: \"Professional Behaviour Maintained\" };\r\nconst EMPATHY_EXPECTED: Record<string, string> = { Patient_Concern_Acknowledged: \"Agent should acknowledge caller concern\", Empathy_Toward_Patient_Condition: \"Empathetic reassurance expected\", Severity_Red_Flag_Probing: \"Escalation probing recommended where applicable\", Professional_Behaviour_Maintained: \"Calm and respectful handling required\" };\r\n\r\nconst CALL_HANDLING_LABELS: Record<string, string> = { \"Placing the Call on Hold\": \"Placing the Call on Hold\", Resuming_After_Hold: \"Resuming After Hold\", Apologizing_for_Inconvenience: \"Apologizing for Inconvenience\", Offering_Further_Assistance: \"Offering Further Assistance\" };\r\nconst CALL_HANDLING_EXPECTED: Record<string, string> = { \"Placing the Call on Hold\": \"Inform customer before placing on hold\", Resuming_After_Hold: \"Thank customer for holding\", Apologizing_for_Inconvenience: \"Apologize for any delays\", Offering_Further_Assistance: \"Ask if further help is needed\" };\r\n\r\nconst CLOSURE_LABELS: Record<string, string> = { Additional_Assistance_Offered: \"Additional Assistance Offered\", Professional_Closing_Provided: \"Professional Closing Provided\", \"Wellness/Courtesy_Statement_Used\": \"Wellness/Courtesy Statement Used\" };\r\nconst CLOSURE_EXPECTED: Record<string, string> = { Additional_Assistance_Offered: \"Mandatory closure check\", Professional_Closing_Provided: \"Standard closure etiquette expected\", \"Wellness/Courtesy_Statement_Used\": \"Positive healthcare closure preferred\" };\r\n\r\nconst EXCLUDED_KEYS = new Set([\"Patient_Data_Handling\", \"Recontact_Information_Shared\"]);\r\n\r\nfunction obsRecordToRows(record: ObsRecord | undefined, labelMap: Record<string, string>, expectedMap: Record<string, string>): ChecklistRow[] {\r\n return Object.entries(record ?? {})\r\n .filter(([key]) => !EXCLUDED_KEYS.has(key))\r\n .map(([key, val]) => ({\r\n parameter: labelMap[key] ?? key.replace(/_/g, \" \"),\r\n expectedStandard: expectedMap[key] ?? \"—\",\r\n status: val.Status ?? \"N/A\",\r\n remarks: val.Remarks ?? \"—\",\r\n qaObservation: val.Observation_Impact ?? \"—\",\r\n }));\r\n}\r\n\r\nfunction processWorkflowRows(groups: ChecklistGroup[] | undefined): ChecklistRow[] {\r\n return (groups ?? []).flatMap((g) =>\r\n (g?.items ?? []).map((item) => ({\r\n parameter: item.parameter ?? \"—\",\r\n expectedStandard: item.expectedStandard ?? \"—\",\r\n status: item.status ?? \"N/A\",\r\n remarks: item.remarks ?? \"—\",\r\n qaObservation: item.qaObservation ?? \"—\",\r\n })),\r\n );\r\n}\r\n\r\nconst CHECKLIST_COLS = [\r\n { key: \"parameter\", label: \"Audit Parameter\", minWidth: 180 },\r\n { key: \"expectedStandard\", label: \"Expected Standard\", minWidth: 200 },\r\n { key: \"status\", label: \"Status\", minWidth: 130 },\r\n { key: \"remarks\", label: \"Remarks\", minWidth: 160 },\r\n { key: \"qaObservation\", label: \"QA Observation / Impact\", minWidth: 180 },\r\n];\r\n\r\nfunction ChecklistTable({ title, rows }: { title: string; rows: ChecklistRow[] }) {\r\n const visibleRows = rows;\r\n if (!visibleRows.length) return null;\r\n return (\r\n <Box>\r\n <SectionTitle>{title}</SectionTitle>\r\n <TableContainer sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\" }}>\r\n <Table size=\"small\">\r\n <TableHead>\r\n <TableRow>\r\n {CHECKLIST_COLS.map((col) => (\r\n <TableCell key={col.key} sx={{ ...TH, minWidth: col.minWidth }}>{col.label}</TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {visibleRows.map((row, ri) => (\r\n <TableRow key={ri} sx={{ \"&:last-child td\": { borderBottom: 0 } }}>\r\n <TableCell sx={{ ...TD }}>{row.parameter}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.expectedStandard}</TableCell>\r\n <TableCell sx={{ ...TD }}><StatusIconBadge label={row.status} /></TableCell>\r\n <TableCell sx={{ ...TD }}>{row.remarks}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.qaObservation}</TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Box>\r\n );\r\n}\r\n\r\nfunction DispositionFrameworkTable({ data }: { data: NewAuditApiResponse }) {\r\n const rows = (data.Disposition_Based_Quality_Framework ?? []).flatMap((df) =>\r\n (df?.frameworks ?? []).map((fw) => ({\r\n dispositionType: df.dispositionType ?? \"—\",\r\n expectedFramework: fw.expectedFramework ?? \"—\",\r\n status: fw.status ?? \"N/A\",\r\n remarks: fw.remarks ?? \"—\",\r\n })),\r\n ).filter((r) => r.expectedFramework.toLowerCase().trim() !== \"clinical sensitivity handling\");\r\n\r\n if (!rows.length) {\r\n return <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\" }}>No disposition framework data available.</Typography>;\r\n }\r\n\r\n return (\r\n <Box>\r\n <SectionTitle>Disposition-Based Quality Framework</SectionTitle>\r\n <TableContainer sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\" }}>\r\n <Table size=\"small\">\r\n <TableHead>\r\n <TableRow>\r\n {[\r\n { label: \"Disposition Type\", minWidth: 160 },\r\n { label: \"Expected Framework\", minWidth: 200 },\r\n { label: \"Status\", minWidth: 120 },\r\n { label: \"Remarks\", minWidth: 160 },\r\n ].map((col, i) => (\r\n <TableCell key={i} sx={{ ...TH, minWidth: col.minWidth }}>{col.label}</TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {rows.map((row, ri) => (\r\n <TableRow key={ri} sx={{ \"&:last-child td\": { borderBottom: 0 } }}>\r\n <TableCell sx={{ ...TD }}>{row.dispositionType}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.expectedFramework}</TableCell>\r\n <TableCell sx={{ ...TD }}><StatusIconBadge label={row.status} /></TableCell>\r\n <TableCell sx={{ ...TD }}>{row.remarks}</TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Box>\r\n );\r\n}\r\n\r\nfunction AuditChecklistContent({ data }: { data: NewAuditApiResponse }) {\r\n const obs = data.Section_Wise_Audit_Observations_Checklist ?? {};\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n <DispositionFrameworkTable data={data} />\r\n <ChecklistTable title=\"Opening & Greeting\" rows={obsRecordToRows(obs.Opening_and_Greeting, OPENING_LABELS, OPENING_EXPECTED)} />\r\n <ChecklistTable title=\"Verification & Authentication\" rows={obsRecordToRows(obs.Verification_and_Authentication, VERIFICATION_LABELS, VERIFICATION_EXPECTED)} />\r\n <ChecklistTable title=\"Communication Effectiveness\" rows={obsRecordToRows(obs.Communication_and_Soft_Skills, COMM_LABELS, COMM_EXPECTED)} />\r\n <ChecklistTable title=\"Process & Workflow Adherence\" rows={processWorkflowRows(obs.Process_and_Workflow_Adherence)} />\r\n <ChecklistTable title=\"Empathy & Patient Assurance\" rows={obsRecordToRows(obs.Empathy_and_Patient_Assurance, EMPATHY_LABELS, EMPATHY_EXPECTED)} />\r\n <ChecklistTable title=\"Call Handling\" rows={obsRecordToRows(obs.Call_Handling, CALL_HANDLING_LABELS, CALL_HANDLING_EXPECTED)} />\r\n <ChecklistTable title=\"Call Closure & Customer Education\" rows={obsRecordToRows(obs.Call_Closure_and_Customer_Education, CLOSURE_LABELS, CLOSURE_EXPECTED)} />\r\n </Box>\r\n );\r\n}\r\n\r\nfunction AuditChecklistTab({ data, primary: _primary }: { data: NewAuditApiResponse; primary: string }) {\r\n const [view, setView] = useState<\"overview\" | \"detailed\">(\"overview\");\r\n const obs = data.Section_Wise_Audit_Observations_Checklist ?? {};\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n <Box sx={{ display: \"flex\", justifyContent: \"flex-start\" }}>\r\n <ToggleButtonGroup\r\n value={view}\r\n exclusive\r\n onChange={(_, v) => v && setView(v)}\r\n size=\"small\"\r\n sx={{\r\n \"& .MuiToggleButton-root\": {\r\n fontSize: \"0.72rem\",\r\n fontWeight: 600,\r\n textTransform: \"none\",\r\n px: 1.5,\r\n py: \"4px\",\r\n border: \"1px solid\",\r\n borderColor: \"divider\",\r\n color: \"text.secondary\",\r\n \"&.Mui-selected\": { backgroundColor: _primary, color: \"#fff\", borderColor: _primary, \"&:hover\": { backgroundColor: _primary } },\r\n },\r\n }}\r\n >\r\n <ToggleButton value=\"overview\">Overview</ToggleButton>\r\n <ToggleButton value=\"detailed\">Detailed</ToggleButton>\r\n </ToggleButtonGroup>\r\n </Box>\r\n\r\n {view === \"overview\" && <DispositionFrameworkTable data={data} />}\r\n\r\n {view === \"detailed\" && (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n <ChecklistTable title=\"Opening & Greeting\" rows={obsRecordToRows(obs.Opening_and_Greeting, OPENING_LABELS, OPENING_EXPECTED)} />\r\n <ChecklistTable title=\"Verification & Authentication\" rows={obsRecordToRows(obs.Verification_and_Authentication, VERIFICATION_LABELS, VERIFICATION_EXPECTED)} />\r\n <ChecklistTable title=\"Communication Effectiveness\" rows={obsRecordToRows(obs.Communication_and_Soft_Skills, COMM_LABELS, COMM_EXPECTED)} />\r\n <ChecklistTable title=\"Process & Workflow Adherence\" rows={processWorkflowRows(obs.Process_and_Workflow_Adherence)} />\r\n <ChecklistTable title=\"Empathy & Patient Assurance\" rows={obsRecordToRows(obs.Empathy_and_Patient_Assurance, EMPATHY_LABELS, EMPATHY_EXPECTED)} />\r\n <ChecklistTable title=\"Call Handling\" rows={obsRecordToRows(obs.Call_Handling, CALL_HANDLING_LABELS, CALL_HANDLING_EXPECTED)} />\r\n <ChecklistTable title=\"Call Closure & Customer Education\" rows={obsRecordToRows(obs.Call_Closure_and_Customer_Education, CLOSURE_LABELS, CLOSURE_EXPECTED)} />\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Root Cause Analysis Tab ───────────────────────────────────────────────────\r\n\r\nfunction RootCauseAnalysisTab({ data, primary }: { data: NewAuditApiResponse; primary: string }) {\r\n const rcaRows = data.Root_Cause_Analysis ?? [];\r\n const rec = data.Auditor_Recommendation ?? {};\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n <Box>\r\n <SectionTitle>Root Cause Analysis</SectionTitle>\r\n {rcaRows.length > 0 ? (\r\n <TableContainer sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\" }}>\r\n <Table size=\"small\">\r\n <TableHead>\r\n <TableRow>\r\n {[{ label: \"Observation\", minWidth: 180 }, { label: \"Root Cause\", minWidth: 200 }, { label: \"Impact\", minWidth: 200 }, { label: \"Severity\", minWidth: 90 }].map((col, i) => (\r\n <TableCell key={i} sx={{ ...TH, minWidth: col.minWidth }}>{col.label}</TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {rcaRows.map((row, ri) => (\r\n <TableRow key={ri} sx={{ \"&:last-child td\": { borderBottom: 0 } }}>\r\n <TableCell sx={{ ...TD }}>{row.Observation ?? \"—\"}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.Root_Cause ?? \"—\"}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.Impact ?? \"—\"}</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\" }}>{row.Severity ? <StatusBadge label={row.Severity} /> : \"—\"}</TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n ) : (\r\n <Box sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", px: \"14px\", py: \"10px\", backgroundColor: \"background.paper\" }}>\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\" }}>No significant root causes identified for this interaction.</Typography>\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n {(toStringArray(rec.Key_Strengths).length > 0 || toStringArray(rec.Improvement_Areas).length > 0) && (\r\n <Box>\r\n <SectionTitle>Auditor's Recommendation</SectionTitle>\r\n <Box sx={{ display: \"flex\", gap: 2, flexWrap: \"wrap\" }}>\r\n {[\r\n { title: \"Key Strengths\", items: toStringArray(rec.Key_Strengths), color: \"#2e7d32\" },\r\n { title: \"Improvement Areas\", items: toStringArray(rec.Improvement_Areas), color: \"#e65100\" },\r\n ].filter((g) => (g.items?.length ?? 0) > 0).map((g) => (\r\n <Box key={g.title} sx={{ flex: \"1 1 200px\", border: \"1px solid\", borderColor: \"divider\", borderRadius: \"6px\", backgroundColor: \"background.paper\", px: \"14px\", py: \"10px\" }}>\r\n <Typography sx={{ fontSize: \"0.78rem\", fontWeight: 600, color: \"text.primary\", mb: \"8px\" }}>{g.title}</Typography>\r\n {g.items?.map((item, ii) => (\r\n <Box key={ii} sx={{ display: \"flex\", alignItems: \"flex-start\", gap: \"7px\", mb: \"5px\" }}>\r\n <Box sx={{ width: 5, height: 5, borderRadius: \"50%\", backgroundColor: g.color, mt: \"5px\", flexShrink: 0 }} />\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\", lineHeight: 1.5 }}>{item}</Typography>\r\n </Box>\r\n ))}\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n {data.Final_Auditor_Remarks && (\r\n <Box sx={{ border: \"1px solid\", borderLeft: \"3px solid\", borderColor: \"divider\", borderLeftColor: primary, borderRadius: \"6px\", px: \"14px\", py: \"10px\", backgroundColor: alpha(primary, 0.04) }}>\r\n <Typography sx={{ fontSize: \"0.78rem\", fontWeight: 600, color: primary, mb: \"6px\" }}>Final Auditor Remarks</Typography>\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\", lineHeight: 1.6 }}>{data.Final_Auditor_Remarks}</Typography>\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Static tabs ───────────────────────────────────────────────────────────────\r\n\r\nconst STATIC_TABS = [\r\n { id: \"overview\", label: \"Overview\" },\r\n { id: \"scorecard\", label: \"Scorecard\" },\r\n { id: \"checklist\", label: \"Audit Checklist\" },\r\n { id: \"rca\", label: \"Root Cause Analysis\" },\r\n];\r\n\r\n// ─── Data hook ─────────────────────────────────────────────────────────────────\r\n\r\nfunction useAuditReportData(callUuid?: string, active = true) {\r\n const [activeTab, setActiveTab] = useState(0);\r\n const [apiData, setApiData] = useState<NewAuditApiResponse | null>(null);\r\n const [auditLoading, setAuditLoading] = useState(false);\r\n const [auditError, setAuditError] = useState<string | null>(null);\r\n\r\n useEffect(() => {\r\n setApiData(null);\r\n setAuditError(null);\r\n setActiveTab(0);\r\n\r\n if (!active || !callUuid) return;\r\n\r\n let cancelled = false;\r\n setAuditLoading(true);\r\n axiosInstance\r\n .get<NewAuditApiResponse>(END_POINT.CALLSAGE_AUDIT(callUuid))\r\n .then((res) => { if (!cancelled) setApiData(res.data); })\r\n .catch((err: any) => {\r\n if (!cancelled) setAuditError(err?.response?.data?.message ?? err?.message ?? \"Failed to generate audit report\");\r\n })\r\n .finally(() => { if (!cancelled) setAuditLoading(false); });\r\n return () => { cancelled = true; };\r\n }, [active, callUuid]);\r\n\r\n return { activeTab, setActiveTab, apiData, auditLoading, auditError };\r\n}\r\n\r\n// ─── Print layout ──────────────────────────────────────────────────────────────\r\n\r\nconst PRINT_ROOT_ID = \"audit-report-print-root\";\r\n\r\nconst PRINT_STYLES = (\r\n <GlobalStyles\r\n styles={{\r\n [`#${PRINT_ROOT_ID}`]: { position: \"absolute\", width: \"1px\", height: \"1px\", overflow: \"hidden\", clip: \"rect(0 0 0 0)\", clipPath: \"inset(50%)\", whiteSpace: \"nowrap\", pointerEvents: \"none\" },\r\n \"@media print\": {\r\n \"body *\": { visibility: \"hidden\" },\r\n [`#${PRINT_ROOT_ID}`]: { visibility: \"visible\", position: \"absolute\", top: 0, left: 0, width: \"100%\", height: \"auto\", overflow: \"visible\", clip: \"auto\", clipPath: \"none\", whiteSpace: \"normal\", padding: \"0 8mm\", boxSizing: \"border-box\" },\r\n [`#${PRINT_ROOT_ID} *`]: { visibility: \"visible\", printColorAdjust: \"exact\", WebkitPrintColorAdjust: \"exact\" } as React.CSSProperties,\r\n },\r\n }}\r\n />\r\n);\r\n\r\n// ─── Inner component (shared by dialog + full-page) ───────────────────────────\r\n\r\ninterface AuditReportInnerProps {\r\n callUuid?: string;\r\n active?: boolean;\r\n primary: string;\r\n onClose?: () => void;\r\n onMaximize?: () => void;\r\n}\r\n\r\nfunction buildHeaderBadges(data: NewAuditApiResponse): Array<{ label: string; value: string; asBadge?: boolean }> {\r\n const sc = data.Quality_Scorecard ?? {};\r\n const summary = data.Executive_Audit_Summary ?? {};\r\n const meta = data.Audit_Metadata ?? {};\r\n return [\r\n { label: \"Call Disposition\", value: meta.Call_Disposition ?? \"N/A\" },\r\n { label: \"Result\", value: summary.Audit_Result ?? \"N/A\", asBadge: true },\r\n { label: \"Score\", value: `${sc.Total_Score ?? summary.Overall_Audit_Score_Percentage ?? 0}/100` },\r\n ];\r\n}\r\n\r\nfunction AuditReportInner({ callUuid, active = true, primary, onClose, onMaximize }: AuditReportInnerProps) {\r\n const { activeTab, setActiveTab, apiData, auditLoading, auditError } = useAuditReportData(callUuid, active);\r\n\r\n const headerBadges = apiData ? buildHeaderBadges(apiData) : [];\r\n const subtitle = apiData\r\n ? [apiData.Audit_Metadata?.Agent_Name, apiData.Audit_Metadata?.Hospital_Name, apiData.Audit_Metadata?.Call_Date_Time].filter(Boolean).join(\" · \") || undefined\r\n : undefined;\r\n\r\n const iconButtonSx = {\r\n flexShrink: 0, width: 28, height: 28, borderRadius: \"6px\", backgroundColor: \"action.hover\", color: \"text.secondary\",\r\n \"&:hover\": { backgroundColor: \"action.selected\", color: \"text.primary\" },\r\n transition: \"all 0.15s ease\",\r\n } as const;\r\n\r\n function renderTab() {\r\n if (!apiData) return null;\r\n switch (activeTab) {\r\n case 0: return <OverviewTab data={apiData} />;\r\n case 1: return <ScorecardTab data={apiData} primary={primary} />;\r\n case 2: return <AuditChecklistTab data={apiData} primary={primary} />;\r\n case 3: return <RootCauseAnalysisTab data={apiData} primary={primary} />;\r\n default: return null;\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {PRINT_STYLES}\r\n {createPortal(\r\n <div id={PRINT_ROOT_ID}>\r\n <Box sx={{ mb: 2.5, pb: 1.5, borderBottom: \"2px solid\", borderColor: \"divider\" }}>\r\n <Typography sx={{ fontSize: \"1.2rem\", fontWeight: 700, color: \"text.primary\" }}>Audit Report</Typography>\r\n {subtitle && <Typography sx={{ fontSize: \"0.8rem\", color: \"text.secondary\", mt: \"4px\" }}>{subtitle}</Typography>}\r\n </Box>\r\n {apiData && (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 3 }}>\r\n <OverviewTab data={apiData} />\r\n <ScorecardTab data={apiData} primary={primary} />\r\n <Box>\r\n <SectionTitle>Audit Checklist</SectionTitle>\r\n <AuditChecklistContent data={apiData} />\r\n </Box>\r\n <RootCauseAnalysisTab data={apiData} primary={primary} />\r\n </Box>\r\n )}\r\n </div>,\r\n document.body,\r\n )}\r\n\r\n {/* Title bar */}\r\n <Box sx={{ px: { xs: 2, md: 2.5 }, py: \"12px\", display: \"flex\", alignItems: \"flex-start\", justifyContent: \"space-between\", gap: 1, borderBottom: \"1px solid\", borderColor: \"divider\", flexShrink: 0 }}>\r\n <Box sx={{ minWidth: 0 }}>\r\n <Typography sx={{ fontWeight: 700, fontSize: { xs: \"1rem\", sm: \"1.2rem\" }, color: \"text.primary\", lineHeight: 1.3 }}>Audit Report</Typography>\r\n {subtitle && <Typography sx={{ fontSize: \"0.78rem\", color: \"text.secondary\", mt: \"3px\" }}>{subtitle}</Typography>}\r\n </Box>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.75, flexShrink: 0 }}>\r\n {onMaximize && (\r\n <IconButton size=\"small\" onClick={onMaximize} title=\"Open in new tab\" sx={iconButtonSx}>\r\n <LaunchIcon sx={{ fontSize: 14 }} />\r\n </IconButton>\r\n )}\r\n {onClose && (\r\n <IconButton size=\"small\" onClick={onClose} title=\"Close\" sx={iconButtonSx}>\r\n <CloseIcon sx={{ fontSize: 15 }} />\r\n </IconButton>\r\n )}\r\n </Box>\r\n </Box>\r\n\r\n {/* Header badges */}\r\n {headerBadges.length > 0 && (\r\n <Box sx={{ px: { xs: 2, md: 2.5 }, py: \"8px\", display: \"flex\", alignItems: \"center\", gap: \"8px\", flexWrap: \"wrap\", borderBottom: \"1px solid\", borderColor: \"divider\", backgroundColor: \"#f5f7f8\", flexShrink: 0 }}>\r\n {headerBadges.map((badge, i) =>\r\n badge.asBadge ? (\r\n <StatusBadge key={i} label={badge.value} />\r\n ) : (\r\n <Box key={i} sx={{ display: \"flex\", alignItems: \"center\", gap: \"5px\", px: \"9px\", height: 26, border: \"1px solid\", borderColor: \"divider\", borderRadius: \"5px\", backgroundColor: \"background.paper\" }}>\r\n <Box sx={{ width: 5, height: 5, borderRadius: \"50%\", backgroundColor: primary, flexShrink: 0 }} />\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"text.secondary\", whiteSpace: \"nowrap\" }}>\r\n <Box component=\"span\" sx={{ fontWeight: 600, color: \"text.primary\", mr: \"3px\" }}>{badge.label}:</Box>\r\n {badge.value}\r\n </Typography>\r\n </Box>\r\n ),\r\n )}\r\n </Box>\r\n )}\r\n\r\n {/* Static tabs */}\r\n <Box sx={{ borderBottom: \"1px solid\", borderColor: \"divider\", backgroundColor: \"background.paper\", flexShrink: 0 }}>\r\n <Tabs\r\n value={activeTab}\r\n onChange={(_, v) => setActiveTab(v)}\r\n variant=\"scrollable\"\r\n scrollButtons=\"auto\"\r\n sx={{\r\n minHeight: 40,\r\n px: { xs: 1, md: 2 },\r\n \"& .MuiTab-root\": { fontSize: \"0.78rem\", fontWeight: 600, minHeight: 40, textTransform: \"none\", color: \"text.secondary\", py: 0, px: 1.5, \"&.Mui-selected\": { color: primary } },\r\n \"& .MuiTabs-indicator\": { backgroundColor: primary, height: 2 },\r\n }}\r\n >\r\n {STATIC_TABS.map((tab) => (\r\n <Tab key={tab.id} label={tab.label} disableRipple />\r\n ))}\r\n </Tabs>\r\n </Box>\r\n\r\n {/* Tab content */}\r\n <Box sx={{ flex: 1, overflow: \"auto\", px: { xs: 2, md: 2.5 }, py: 2 }}>\r\n {auditLoading && (\r\n <Box sx={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\", py: 6 }}>\r\n <CircularProgress size={32} />\r\n </Box>\r\n )}\r\n {!auditLoading && auditError && (\r\n <Alert severity=\"warning\" sx={{ mb: 2, fontSize: \"0.78rem\" }}>{auditError}</Alert>\r\n )}\r\n {!auditLoading && !auditError && !apiData && (\r\n <Box sx={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\", py: 6 }}>\r\n <Typography sx={{ fontSize: \"0.78rem\", color: \"text.secondary\" }}>No audit data available.</Typography>\r\n </Box>\r\n )}\r\n {!auditLoading && apiData && renderTab()}\r\n </Box>\r\n </>\r\n );\r\n}\r\n\r\n// ─── \"Open in new tab\" URL resolver (host-configurable) ─────────────────────────\r\n//\r\n// The maximize button opens the full-page audit report in a new browser tab.\r\n// This SDK runs inside different host apps that may mount the audit-report route\r\n// at a different path, behind a router `basename`, or with hash routing — so the\r\n// host decides how that URL is built. The default targets a ROOT-level\r\n// \"/audit-report/:callUuid\" route (what ahs-cti-ui registers); a host that mounts\r\n// the route elsewhere should call `setAuditReportUrlResolver` once at startup.\r\n\r\n/** Builds the URL the maximize button opens for a given call. */\r\nexport type AuditReportUrlResolver = (callUuid: string) => string;\r\n\r\nlet auditReportUrlResolver: AuditReportUrlResolver = (callUuid) =>\r\n `/audit-report/${encodeURIComponent(callUuid)}`;\r\n\r\n/**\r\n * Configure how the audit-report maximize button builds its new-tab URL.\r\n * Call once during host-app startup, alongside registering the route that\r\n * renders `SDKPages.AuditReportPage`.\r\n *\r\n * @example\r\n * // Route registered at \"/reports/audit-report/:callUuid\":\r\n * setAuditReportUrlResolver((id) => `/reports/audit-report/${encodeURIComponent(id)}`);\r\n * // Hash router:\r\n * setAuditReportUrlResolver((id) => `/#/audit-report/${encodeURIComponent(id)}`);\r\n */\r\nexport function setAuditReportUrlResolver(resolver: AuditReportUrlResolver): void {\r\n auditReportUrlResolver = resolver;\r\n}\r\n\r\n// ─── Public exports ────────────────────────────────────────────────────────────\r\n\r\ninterface AuditReportDialogProps {\r\n open: boolean;\r\n onClose: () => void;\r\n width?: string;\r\n rowData?: CdrRecordResponse;\r\n /**\r\n * Per-instance override of the maximize behaviour. When provided it takes\r\n * precedence over the globally-configured resolver — useful for in-app\r\n * navigation instead of opening a new tab.\r\n */\r\n onMaximize?: (callUuid: string) => void;\r\n}\r\n\r\n/**\r\n * Audit report shown in a modal dialog. The maximize button opens the same\r\n * report full-screen in a new browser tab. The URL is built by the\r\n * host-configured resolver (see `setAuditReportUrlResolver`).\r\n */\r\nexport default function AuditReportDialog({ open, onClose, width = \"80vw\", rowData, onMaximize }: AuditReportDialogProps) {\r\n const theme = useTheme();\r\n const primary = theme.palette.primary.main;\r\n const callUuid = rowData?.callUuid;\r\n\r\n const handleMaximize = () => {\r\n if (!callUuid) return;\r\n if (onMaximize) {\r\n onMaximize(callUuid);\r\n return;\r\n }\r\n // NOTE: open WITHOUT \"noopener\" so the new tab inherits a copy of this\r\n // tab's sessionStorage (auth session + API token live there) — otherwise\r\n // the new tab boots logged-out.\r\n window.open(auditReportUrlResolver(callUuid), \"_blank\");\r\n };\r\n\r\n return (\r\n <Dialog\r\n open={open}\r\n onClose={(_e, reason) => { if (reason !== 'backdropClick') onClose(); }}\r\n fullWidth\r\n slotProps={{\r\n paper: {\r\n sx: { width, maxWidth: width, height: \"90vh\", display: \"flex\", flexDirection: \"column\", overflow: \"hidden\", borderRadius: \"10px\" },\r\n },\r\n }}\r\n >\r\n {open && (\r\n <AuditReportInner\r\n callUuid={callUuid}\r\n active={open}\r\n primary={primary}\r\n onClose={onClose}\r\n onMaximize={callUuid ? handleMaximize : undefined}\r\n />\r\n )}\r\n </Dialog>\r\n );\r\n}\r\n\r\n/**\r\n * Stand-alone full-page audit report rendered by the `/audit-report/:callUuid` route.\r\n */\r\nexport function AuditReportFullPage({ callUuid }: { callUuid?: string }) {\r\n const theme = useTheme();\r\n const primary = theme.palette.primary.main;\r\n\r\n return (\r\n <Box sx={{ height: \"100vh\", display: \"flex\", flexDirection: \"column\", overflow: \"hidden\", backgroundColor: \"background.paper\" }}>\r\n <AuditReportInner callUuid={callUuid} active primary={primary} />\r\n </Box>\r\n );\r\n}\r\n\r\n","import React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport {\r\n Alert,\r\n Box,\r\n Chip,\r\n Paper,\r\n Stack,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow,\r\n TablePagination,\r\n TableSortLabel,\r\n CircularProgress,\r\n IconButton,\r\n Tooltip,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport AppButton from \"../common/components/AppButton\";\r\nimport AuditReportDialog from \"../common/components/AuditReport\";\r\n\r\nimport ReportFilterBar, {\r\n type QuickRange,\r\n} from \"../common/components/ReportFilterBar\";\r\nimport DownloadIcon from \"@mui/icons-material/Download\";\r\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\r\nimport PlayArrowIcon from \"@mui/icons-material/PlayArrow\";\r\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\r\nimport AssignmentIcon from \"@mui/icons-material/Assignment\";\r\n\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\nimport isoWeek from \"dayjs/plugin/isoWeek\";\r\n\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport {\r\n getCdrReport,\r\n exportCdrReportToExcel,\r\n getRecordingByCall,\r\n getQueues,\r\n type Queue,\r\n} from \"./useCdrReport\";\r\nimport { deepFindArray } from \"../../services/axios\";\r\nimport type { CdrReportParams, CdrRecordResponse } from \"./types\";\r\nimport { type AgentOption } from \"../common/components/AgentMultiSelect\";\r\nimport { headCellSx } from \"../common/utils/tableStyles\";\r\nimport PageHeader from \"../common/components/PageHeader\";\r\nimport SearchBar from \"../common/components/SearchBar\";\r\n\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPermissionGuard } from \"../../components/SDKPermissionGuard\";\r\nimport { SDK_PERMISSIONS } from \"../../permissions/sdk-constants\";\r\n\r\ndayjs.extend(isoWeek);\r\n\r\nconst FONT =\r\n \"'Inter', 'Segoe UI', 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif\";\r\n\r\nconst COLORS = {\r\n navy: \"#0d2a56\",\r\n blue: \"#1565c8\",\r\n green: \"#0a9a62\",\r\n amber: \"#c47c00\",\r\n red: \"#cc2a2a\",\r\n purple: \"#6b3fbf\",\r\n bg: \"transparent\",\r\n surface: \"transparent\",\r\n} as const;\r\n\r\nconst DEFAULT_PAGE_SIZE = 15;\r\n\r\ntype SortKey =\r\n | \"phoneNumber\"\r\n | \"callStartTime\"\r\n | \"callType\"\r\n | \"callStatus\"\r\n | \"agentName\"\r\n | \"queueName\"\r\n | \"extension\"\r\n | \"talkDurationFmt\"\r\n | \"holdDurationFmt\"\r\n | \"ringingDurationFmt\"\r\n | \"queueDurationFmt\"\r\n | \"wrapupDurationFmt\"\r\n | \"disposition\"\r\n | \"remarks\"\r\n | \"wasTransferred\";\r\n\r\ntype SortDir = \"asc\" | \"desc\";\r\n\r\nconst comparator = (\r\n a: CdrRecordResponse,\r\n b: CdrRecordResponse,\r\n key: SortKey,\r\n): number => {\r\n const av = a[key as keyof CdrRecordResponse];\r\n const bv = b[key as keyof CdrRecordResponse];\r\n if (typeof av === \"number\" && typeof bv === \"number\") return av - bv;\r\n if (typeof av === \"boolean\" && typeof bv === \"boolean\")\r\n return (av ? 1 : 0) - (bv ? 1 : 0);\r\n return String(av ?? \"\").localeCompare(String(bv ?? \"\"));\r\n};\r\n\r\nfunction CallTypePill({ value }: { value: string }) {\r\n const v = (value || \"\").toLowerCase();\r\n let color = \"#6b7b8d\";\r\n let bg = \"transparent\";\r\n if (v.includes(\"inbound\")) {\r\n color = COLORS.green;\r\n bg = \"#e6f7ef\";\r\n } else if (v.includes(\"outbound\")) {\r\n color = COLORS.blue;\r\n bg = \"#e3eefa\";\r\n } else if (v.includes(\"internal\")) {\r\n color = COLORS.purple;\r\n bg = \"#f0e8ff\";\r\n }\r\n return (\r\n <Chip\r\n label={value}\r\n size=\"small\"\r\n sx={{\r\n fontFamily: FONT,\r\n bgcolor: bg,\r\n color,\r\n fontWeight: 600,\r\n fontSize: \"0.65rem\",\r\n height: 20,\r\n borderRadius: \"6px\",\r\n }}\r\n />\r\n );\r\n}\r\n\r\nfunction StatusPill({ value }: { value: string }) {\r\n const v = (value || \"\").toLowerCase();\r\n let color = \"#6b7b8d\";\r\n let bg = \"transparent\";\r\n if (v.includes(\"answered\")) {\r\n color = COLORS.green;\r\n bg = \"#e6f7ef\";\r\n } else if (v.includes(\"abandoned\") || v.includes(\"missed\")) {\r\n color = COLORS.red;\r\n bg = \"#fce8e8\";\r\n }\r\n return (\r\n <Chip\r\n label={value}\r\n size=\"small\"\r\n sx={{\r\n fontFamily: FONT,\r\n bgcolor: bg,\r\n color,\r\n fontWeight: 600,\r\n fontSize: \"0.65rem\",\r\n height: 20,\r\n borderRadius: \"6px\",\r\n }}\r\n />\r\n );\r\n}\r\n\r\nconst fmtRecordingDuration = (s: number): string => {\r\n if (!isFinite(s) || s < 0) return \"\";\r\n const m = Math.floor(s / 60);\r\n const sec = Math.floor(s % 60);\r\n return `${m}:${sec.toString().padStart(2, \"0\")}`;\r\n};\r\n\r\nfunction RecordingCell({\r\n callUuid,\r\n recordingPath,\r\n}: {\r\n callUuid: string;\r\n recordingPath: string | null;\r\n}) {\r\n const [audioUrl, setAudioUrl] = useState<string | null>(null);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState(false);\r\n const [durationSec, setDurationSec] = useState<number | null>(null);\r\n const [currentSec, setCurrentSec] = useState(0);\r\n const unavailable = recordingPath === null;\r\n const totalLabel = durationSec != null ? fmtRecordingDuration(durationSec) : \"\";\r\n\r\n const handlePlay = async () => {\r\n if (audioUrl) return;\r\n try {\r\n setLoading(true);\r\n setError(false);\r\n const blob = await getRecordingByCall(callUuid);\r\n const url = URL.createObjectURL(blob);\r\n setAudioUrl(url);\r\n } catch {\r\n setError(true);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleDownload = async () => {\r\n try {\r\n const blob = audioUrl\r\n ? await fetch(audioUrl).then((r) => r.blob())\r\n : await getRecordingByCall(callUuid);\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = `recording_${callUuid}.wav`;\r\n a.click();\r\n URL.revokeObjectURL(url);\r\n } catch {\r\n /* ignore */\r\n }\r\n };\r\n\r\n if (audioUrl) {\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n <audio\r\n controls\r\n autoPlay\r\n src={audioUrl}\r\n onLoadedMetadata={(e) => setDurationSec(e.currentTarget.duration)}\r\n onTimeUpdate={(e) => setCurrentSec(e.currentTarget.currentTime)}\r\n onEnded={() => {\r\n if (audioUrl.startsWith(\"blob:\")) URL.revokeObjectURL(audioUrl);\r\n setAudioUrl(null);\r\n setCurrentSec(0);\r\n }}\r\n style={{ width: 180, height: 30 }}\r\n />\r\n {totalLabel && (\r\n <Typography sx={{ fontSize: 12, fontWeight: 600, color: COLORS.navy, whiteSpace: \"nowrap\" }}>\r\n {fmtRecordingDuration(currentSec)} / {totalLabel}\r\n </Typography>\r\n )}\r\n <Tooltip title=\"Download\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleDownload}\r\n sx={{ color: COLORS.blue, p: 0.4 }}\r\n >\r\n <FileDownloadIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\r\n <Tooltip title={unavailable || error ? \"Recording Unavailable\" : \"Play\"}>\r\n <span>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handlePlay}\r\n disabled={loading || error || unavailable}\r\n sx={{ color: unavailable ? \"#b0b8c8\" : COLORS.green, p: 0.4 }}\r\n >\r\n {loading ? (\r\n <CircularProgress size={14} />\r\n ) : (\r\n <PlayArrowIcon sx={{ fontSize: 16 }} />\r\n )}\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n <Tooltip\r\n title={unavailable || error ? \"Recording Unavailable\" : \"Download\"}\r\n >\r\n <span>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleDownload}\r\n disabled={loading || error || unavailable}\r\n sx={{ color: unavailable ? \"#b0b8c8\" : COLORS.blue, p: 0.4 }}\r\n >\r\n <FileDownloadIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n {totalLabel && (\r\n <Typography sx={{ fontSize: 12, fontWeight: 600, color: COLORS.navy, whiteSpace: \"nowrap\", ml: 0.3 }}>\r\n {totalLabel}\r\n </Typography>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\nfunction CdrReportContent() {\r\n const [startDate, setStartDate] = useState<Dayjs | null>(\r\n dayjs().startOf(\"day\"),\r\n );\r\n const [endDate, setEndDate] = useState<Dayjs | null>(dayjs());\r\n const [activeQuickDate, setActiveQuickDate] = useState<\r\n \"today\" | \"week\" | \"month\" | null\r\n >(\"today\");\r\n const [searchText, setSearchText] = useState(\"\");\r\n\r\n const [selectedAgents, setSelectedAgents] = useState<AgentOption[]>([]);\r\n const [isAllUsersSelected, setIsAllUsersSelected] = useState(false);\r\n\r\n const [queues, setQueues] = useState<Queue[]>([]);\r\n const [selectedQueues, setSelectedQueues] = useState<Queue[]>([]);\r\n\r\n const [callType, setCallType] = useState<string>(\"\");\r\n const [callStatus, setCallStatus] = useState<string>(\"\");\r\n\r\n const [records, setRecords] = useState<CdrRecordResponse[]>([]);\r\n const [totalRecords, setTotalRecords] = useState(0);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState(\"\");\r\n\r\n const [page, setPage] = useState(0);\r\n const [rowsPerPage, setRowsPerPage] = useState(DEFAULT_PAGE_SIZE);\r\n const [sortKey, setSortKey] = useState<SortKey>(\"callStartTime\");\r\n const [sortDir, setSortDir] = useState<SortDir>(\"desc\");\r\n\r\n const [auditDialogOpen, setAuditDialogOpen] = useState(false);\r\n const [selectedAuditRow, setSelectedAuditRow] =\r\n useState<CdrRecordResponse | null>(null);\r\n\r\n useEffect(() => {\r\n getQueues()\r\n .then((data) => setQueues(data || []))\r\n .catch(() => setError(\"Failed to load filter options\"));\r\n }, []);\r\n\r\n const handleQuickRangeChange = (range: QuickRange) => {\r\n setActiveQuickDate(range || null);\r\n };\r\n\r\n const [debouncedSearch, setDebouncedSearch] = useState(\"\");\r\n const debounceRef = useRef<ReturnType<typeof setTimeout>>(undefined);\r\n\r\n useEffect(() => {\r\n debounceRef.current = setTimeout(\r\n () => setDebouncedSearch(searchText.trim()),\r\n 400,\r\n );\r\n return () => clearTimeout(debounceRef.current);\r\n }, [searchText]);\r\n\r\n const fetchReport = useCallback(\r\n async (pageNum: number) => {\r\n const sd = startDate ?? dayjs();\r\n const ed = endDate ?? dayjs();\r\n\r\n if (!sd || !ed) {\r\n setError(\"Select a valid date range\");\r\n return;\r\n }\r\n\r\n const params: CdrReportParams = {\r\n start_date: sd.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: ed.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n agent_id:\r\n !isAllUsersSelected && selectedAgents.length > 0\r\n ? selectedAgents.map((a) => a.id)\r\n : undefined,\r\n // All queues selected → send no queue_id (backend returns all).\r\n queue_id:\r\n selectedQueues.length > 0 && selectedQueues.length < queues.length\r\n ? selectedQueues.map((q) => q.id)\r\n : undefined,\r\n call_type: callType || undefined,\r\n status: callStatus || undefined,\r\n search: debouncedSearch || undefined,\r\n page: pageNum + 1,\r\n pageSize: rowsPerPage,\r\n };\r\n\r\n try {\r\n setError(\"\");\r\n setLoading(true);\r\n const response: any = await getCdrReport(params);\r\n setRecords(\r\n deepFindArray<CdrRecordResponse>(response, [\"data\", \"records\"]),\r\n );\r\n setTotalRecords(\r\n response?.records?.total ??\r\n response?.total ??\r\n response?.data?.total ??\r\n 0,\r\n );\r\n } catch (err: any) {\r\n setError(err?.message || \"Failed to fetch CDR report\");\r\n setRecords([]);\r\n } finally {\r\n setLoading(false);\r\n }\r\n },\r\n [\r\n startDate,\r\n endDate,\r\n selectedAgents,\r\n isAllUsersSelected,\r\n selectedQueues,\r\n callType,\r\n callStatus,\r\n debouncedSearch,\r\n rowsPerPage,\r\n ],\r\n );\r\n\r\n useEffect(() => {\r\n setPage(0);\r\n fetchReport(0);\r\n }, [fetchReport]);\r\n\r\n const handleRefresh = () => {\r\n if (activeQuickDate) {\r\n const now = dayjs();\r\n let sd = now.startOf(\"day\");\r\n const ed = now;\r\n if (activeQuickDate === \"week\") sd = now.startOf(\"week\").startOf(\"day\");\r\n else if (activeQuickDate === \"month\")\r\n sd = now.startOf(\"month\").startOf(\"day\");\r\n setStartDate(sd);\r\n setEndDate(ed);\r\n } else {\r\n fetchReport(page);\r\n }\r\n };\r\n\r\n const handlePageChange = useCallback(\r\n (_event: React.MouseEvent<HTMLButtonElement> | null, newPage: number) => {\r\n setPage(newPage);\r\n fetchReport(newPage);\r\n },\r\n [fetchReport],\r\n );\r\n\r\n const handleSort = (key: SortKey) => {\r\n if (sortKey === key) {\r\n setSortDir((d) => (d === \"asc\" ? \"desc\" : \"asc\"));\r\n } else {\r\n setSortKey(key);\r\n setSortDir(\"asc\");\r\n }\r\n };\r\n\r\n const sortedRecords = useMemo(() => {\r\n const rows = [...records];\r\n rows.sort((a, b) => {\r\n const cmp = comparator(a, b, sortKey);\r\n return sortDir === \"asc\" ? cmp : -cmp;\r\n });\r\n return rows;\r\n }, [records, sortKey, sortDir]);\r\n\r\n const handleExportExcel = async () => {\r\n const sd = startDate ?? dayjs();\r\n const ed = endDate ?? dayjs();\r\n const params: CdrReportParams = {\r\n start_date: sd.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: ed.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n agent_id:\r\n !isAllUsersSelected && selectedAgents.length > 0\r\n ? selectedAgents.map((a) => a.id)\r\n : undefined,\r\n queue_id:\r\n selectedQueues.length > 0 && selectedQueues.length < queues.length\r\n ? selectedQueues.map((q) => q.id)\r\n : undefined,\r\n call_type: callType || undefined,\r\n status: callStatus || undefined,\r\n search: debouncedSearch || undefined,\r\n };\r\n try {\r\n await exportCdrReportToExcel(params);\r\n } catch (err: any) {\r\n setError(err?.message || \"Failed to export Excel\");\r\n }\r\n };\r\n\r\n return (\r\n <LocalizationProvider dateAdapter={AdapterDayjs}>\r\n <Box\r\n sx={{\r\n height: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n fontFamily: FONT,\r\n }}\r\n >\r\n <PageHeader\r\n title=\"CDR Report\"\r\n actions={\r\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\r\n <SearchBar\r\n value={searchText}\r\n onChange={setSearchText}\r\n placeholder=\"Search phone, agent...\"\r\n width={250}\r\n />\r\n <SDKPermissionGuard\r\n permissions={[\r\n SDK_PERMISSIONS.REPORTS_CDR_EXPORT,\r\n SDK_PERMISSIONS.REPORTS_CDR_MANAGE,\r\n ]}\r\n showFallback={false}\r\n >\r\n <AppButton\r\n startIcon={\r\n <DownloadIcon sx={{ fontSize: \"0.95rem !important\" }} />\r\n }\r\n disabled={!records.length}\r\n onClick={handleExportExcel}\r\n sx={{ height: 36 }}\r\n >\r\n Export Excel\r\n </AppButton>\r\n </SDKPermissionGuard>\r\n </Stack>\r\n }\r\n />\r\n\r\n <Box sx={{ flex: 1, overflow: \"auto\", py: 0.8, px: 0 }}>\r\n <Box sx={{ mb: 0.8 }}>\r\n <ReportFilterBar\r\n startDate={startDate}\r\n endDate={endDate}\r\n onStartChange={setStartDate}\r\n onEndChange={setEndDate}\r\n quickRange={activeQuickDate || \"\"}\r\n onQuickRangeChange={handleQuickRangeChange}\r\n showAgentSelect\r\n selectedAgents={selectedAgents}\r\n onAgentsChange={setSelectedAgents}\r\n setIsAllUsersSelected={setIsAllUsersSelected}\r\n showQueueSelect\r\n queues={queues}\r\n selectedQueues={selectedQueues}\r\n onQueuesChange={setSelectedQueues}\r\n showCallTypeSelect\r\n selectedCallType={callType}\r\n onCallTypeChange={setCallType}\r\n showStatusSelect\r\n selectedStatus={callStatus}\r\n onStatusChange={setCallStatus}\r\n extra={\r\n <AppButton\r\n startIcon={\r\n <RefreshIcon sx={{ fontSize: \"0.9rem !important\" }} />\r\n }\r\n disabled={loading}\r\n onClick={handleRefresh}\r\n sx={{ height: 32 }}\r\n >\r\n Refresh\r\n </AppButton>\r\n }\r\n />\r\n\r\n {error && (\r\n <Alert\r\n severity=\"error\"\r\n sx={{ mt: 1, fontFamily: FONT, fontSize: \"0.78rem\" }}\r\n >\r\n {error}\r\n </Alert>\r\n )}\r\n </Box>\r\n\r\n {loading && (\r\n <Box sx={{ textAlign: \"center\", py: 2.5 }}>\r\n <CircularProgress sx={{ color: COLORS.blue }} size={28} />\r\n </Box>\r\n )}\r\n\r\n <Paper\r\n elevation={0}\r\n sx={{\r\n borderRadius: \"8px\",\r\n border: \"1px solid #e0e7ef\",\r\n overflow: \"hidden\",\r\n mb: 2,\r\n }}\r\n >\r\n <TableContainer>\r\n <Table\r\n size=\"small\"\r\n sx={{\r\n minWidth: 1400,\r\n fontFamily: FONT,\r\n \"& .MuiTableCell-root\": {\r\n fontFamily: FONT,\r\n fontSize: \"0.75rem\",\r\n borderBottom: \"1px solid #eef1f6\",\r\n py: 0.6,\r\n px: 1,\r\n },\r\n }}\r\n >\r\n <TableHead>\r\n <TableRow>\r\n <TableCell\r\n sx={{ ...(headCellSx as object), minWidth: 110, textAlign: \"center\" }}\r\n >\r\n Audit Report\r\n </TableCell>\r\n <TableCell\r\n sx={{ ...(headCellSx as object), minWidth: 100 }}\r\n >\r\n Recording\r\n </TableCell>\r\n {(\r\n [\r\n { id: \"phoneNumber\" as SortKey, label: \"Phone Number\" },\r\n { id: \"callStartTime\" as SortKey, label: \"Call Start\" },\r\n { id: \"callType\" as SortKey, label: \"Call Type\" },\r\n { id: \"callStatus\" as SortKey, label: \"Status\" },\r\n { id: \"agentName\" as SortKey, label: \"User Name\" },\r\n { id: \"queueName\" as SortKey, label: \"Queues\" },\r\n { id: \"extension\" as SortKey, label: \"Extension\" },\r\n {\r\n id: \"talkDurationFmt\" as SortKey,\r\n label: \"Talk Duration\",\r\n },\r\n {\r\n id: \"holdDurationFmt\" as SortKey,\r\n label: \"Hold Duration\",\r\n },\r\n {\r\n id: \"ringingDurationFmt\" as SortKey,\r\n label: \"Ringing Duration\",\r\n },\r\n {\r\n id: \"queueDurationFmt\" as SortKey,\r\n label: \"Queue Duration\",\r\n },\r\n {\r\n id: \"wrapupDurationFmt\" as SortKey,\r\n label: \"Wrapup Duration\",\r\n },\r\n { id: \"disposition\" as SortKey, label: \"Disposition\" },\r\n { id: \"remarks\" as SortKey, label: \"Remarks\" },\r\n {\r\n id: \"wasTransferred\" as SortKey,\r\n label: \"Transferred\",\r\n },\r\n ] as { id: SortKey; label: string }[]\r\n ).map((col) => (\r\n <TableCell key={col.id} sx={headCellSx}>\r\n <TableSortLabel\r\n active={sortKey === col.id}\r\n direction={sortKey === col.id ? sortDir : \"asc\"}\r\n onClick={() => handleSort(col.id)}\r\n sx={{\r\n \"&.MuiTableSortLabel-root\": { color: \"#333\" },\r\n \"&.MuiTableSortLabel-root:hover\": { color: \"#555\" },\r\n \"&.Mui-active\": { color: \"#333\" },\r\n \"& .MuiTableSortLabel-icon\": {\r\n color: \"#333 !important\",\r\n },\r\n }}\r\n >\r\n {col.label}\r\n </TableSortLabel>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n\r\n <TableBody>\r\n {sortedRecords.map((row, idx) => (\r\n <TableRow\r\n key={row.callUuid || idx}\r\n hover\r\n sx={{\r\n backgroundColor: \"#fff\",\r\n \"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n }}\r\n >\r\n <TableCell sx={{ textAlign: \"center\", verticalAlign: \"middle\" }}>\r\n <Tooltip title=\"View Audit Report\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => {\r\n setSelectedAuditRow(row);\r\n setAuditDialogOpen(true);\r\n }}\r\n sx={{ color: COLORS.blue, p: 0.4 }}\r\n >\r\n <AssignmentIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </Tooltip>\r\n </TableCell>\r\n <TableCell sx={{ verticalAlign: \"middle\" }}>\r\n {row.callUuid ? (\r\n <RecordingCell\r\n callUuid={row.callUuid}\r\n recordingPath={row.recordingPath}\r\n />\r\n ) : null}\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n fontWeight: 600,\r\n color: COLORS.navy,\r\n fontSize: \"0.75rem\",\r\n }}\r\n >\r\n {row.phoneNumber || \"\"}\r\n </TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n {row.callStartTime\r\n ? dayjs(row.callStartTime).format(\r\n \"DD MMM YYYY hh:mm A\",\r\n )\r\n : \"\"}\r\n </TableCell>\r\n <TableCell>\r\n <CallTypePill value={row.callType || \"\"} />\r\n </TableCell>\r\n <TableCell>\r\n <StatusPill value={row.callStatus || \"\"} />\r\n </TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n {row.agentName || \"\"}\r\n </TableCell>\r\n <TableCell>\r\n {row.queueName ? (\r\n <Chip\r\n label={row.queueName}\r\n size=\"small\"\r\n sx={{\r\n fontFamily: FONT,\r\n backgroundColor: \"#f0ebfa\",\r\n color: COLORS.purple,\r\n fontWeight: 500,\r\n fontSize: \"0.67rem\",\r\n height: 22,\r\n }}\r\n />\r\n ) : null}\r\n </TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n {row.extension || \"\"}\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n fontWeight: 600,\r\n color: COLORS.blue,\r\n fontSize: \"0.75rem\",\r\n fontVariantNumeric: \"tabular-nums\",\r\n }}\r\n >\r\n {row.talkDurationFmt || \"\"}\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n fontWeight: 500,\r\n color: COLORS.amber,\r\n fontSize: \"0.75rem\",\r\n fontVariantNumeric: \"tabular-nums\",\r\n }}\r\n >\r\n {row.holdDurationFmt || \"\"}\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n fontWeight: 500,\r\n fontSize: \"0.75rem\",\r\n fontVariantNumeric: \"tabular-nums\",\r\n }}\r\n >\r\n {row.ringingDurationFmt || \"\"}\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n fontWeight: 500,\r\n fontSize: \"0.75rem\",\r\n fontVariantNumeric: \"tabular-nums\",\r\n }}\r\n >\r\n {row.queueDurationFmt || \"\"}\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n fontWeight: 500,\r\n fontSize: \"0.75rem\",\r\n fontVariantNumeric: \"tabular-nums\",\r\n }}\r\n >\r\n {row.wrapupDurationFmt || \"\"}\r\n </TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n {row.disposition || \"\"}\r\n </TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n {row.remarks ? (\r\n <Tooltip title={row.remarks}>\r\n <span\r\n style={{\r\n display: \"inline-block\",\r\n maxWidth: 180,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n verticalAlign: \"bottom\",\r\n }}\r\n >\r\n {row.remarks}\r\n </span>\r\n </Tooltip>\r\n ) : (\r\n \"\"\r\n )}\r\n </TableCell>\r\n <TableCell>\r\n {row.wasTransferred ? (\r\n <Chip\r\n label=\"Yes\"\r\n size=\"small\"\r\n sx={{\r\n fontFamily: FONT,\r\n backgroundColor: \"#e6f7ef\",\r\n color: COLORS.green,\r\n fontWeight: 600,\r\n fontSize: \"0.65rem\",\r\n height: 20,\r\n borderRadius: \"6px\",\r\n }}\r\n />\r\n ) : (\r\n <Chip\r\n label=\"No\"\r\n size=\"small\"\r\n sx={{\r\n fontFamily: FONT,\r\n backgroundColor: \"transparent\",\r\n color: \"#6b7b8d\",\r\n fontWeight: 600,\r\n fontSize: \"0.65rem\",\r\n height: 20,\r\n borderRadius: \"6px\",\r\n }}\r\n />\r\n )}\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n\r\n <TablePagination\r\n component=\"div\"\r\n count={totalRecords}\r\n page={page}\r\n onPageChange={handlePageChange}\r\n rowsPerPage={rowsPerPage}\r\n rowsPerPageOptions={[10, 15, 25, 50, 100]}\r\n onRowsPerPageChange={(e) => {\r\n setRowsPerPage(parseInt(e.target.value, 10));\r\n setPage(0);\r\n }}\r\n sx={{\r\n borderTop: \"1px solid #eef1f6\",\r\n fontFamily: FONT,\r\n \"& .MuiTablePagination-displayedRows\": {\r\n fontFamily: FONT,\r\n fontSize: \"0.73rem\",\r\n },\r\n \"& .MuiTablePagination-selectLabel\": {\r\n fontFamily: FONT,\r\n fontSize: \"0.73rem\",\r\n },\r\n }}\r\n />\r\n </Paper>\r\n </Box>\r\n </Box>\r\n\r\n <AuditReportDialog\r\n open={auditDialogOpen}\r\n onClose={() => {\r\n setAuditDialogOpen(false);\r\n setSelectedAuditRow(null);\r\n }}\r\n rowData={selectedAuditRow ?? undefined}\r\n />\r\n </LocalizationProvider>\r\n );\r\n}\r\n\r\nconst CdrReport: React.FC = () => (\r\n <SDKProvider>\r\n <CdrReportContent />\r\n </SDKProvider>\r\n);\r\n\r\nexport default CdrReport;\r\n","import React from \"react\";\r\nimport { AuditReportFullPage } from \"../common/components/AuditReport\";\r\n\r\n/**\r\n * Stand-alone audit report page. Opened in a new browser tab from the audit\r\n * report dialog's maximize button (route: `/audit-report/:callUuid`).\r\n */\r\nexport default function AuditReportPage({ callUuid }: { callUuid?: string }) {\r\n return <AuditReportFullPage callUuid={callUuid} />;\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type { AgentPerfReportParams, AgentPerfReportResponse, AgentPerfRow, ReportData, ReportRequestPayload } from \"./types\";\r\n\r\nfunction fmtSecs(s: number): string {\r\n\tif (!s || s <= 0) return \"00:00:00\";\r\n\tconst h = Math.floor(s / 3600);\r\n\tconst m = Math.floor((s % 3600) / 60);\r\n\tconst sc = Math.floor(s % 60);\r\n\treturn [h, m, sc].map((x) => String(x).padStart(2, \"0\")).join(\":\");\r\n}\r\n\r\nexport function validateReportPayload(payload: Partial<ReportRequestPayload>): { isValid: boolean; error?: string } {\r\n\tif (!payload.startDate || !payload.startTime) return { isValid: false, error: \"Start date/time required\" };\r\n\tif (!payload.endDate || !payload.endTime) return { isValid: false, error: \"End date/time required\" };\r\n\tif (!payload.loginUsersOnly && !payload.agents) return { isValid: false, error: \"Select at least one agent\" };\r\n\treturn { isValid: true };\r\n}\r\n\r\n// Map a raw AgentPerfRow into the legacy ReportData shape the table renders.\r\nfunction mapAgentPerfRow(a: AgentPerfRow): ReportData {\r\n\treturn {\r\n\t\tagentDetails: { agentId: a.agentId, fullName: a.fullName, process: a.processName, queueNames: a.queueNames },\r\n\t\tcalls: { totalCalls: a.totalCalls, answered: a.answeredCalls, missed: a.missedCalls },\r\n\t\tinCalls: { total: a.inCalls },\r\n\t\toutCalls: { total: a.outCalls },\r\n\t\taverage: { holdTime: fmtSecs(a.holdTimeSeconds), wrapUp: fmtSecs(a.wrapupSeconds), aht: fmtSecs(a.ahtSeconds), ringing: \"00:00:00\", dialing: \"00:00:00\" },\r\n\t\tloginDetails: { loggedInDuration: fmtSecs(a.loginDurationSeconds), talkTime: fmtSecs(a.talkTimeSeconds), idleTime: fmtSecs(a.idleTimeSeconds) },\r\n\t\tbreaks: { shortBreak: fmtSecs(a.breakTimeSeconds), breakCount: a.breakCount, lunch: \"00:00:00\", tea: \"00:00:00\", training: \"00:00:00\", meeting: \"00:00:00\" },\r\n\t\tloginStats: { firstLogin: a.firstLoginTime || \"\", noOfLogins: 0 },\r\n\t\tadherence: { pct: a.adherencePct ?? null },\r\n\t};\r\n}\r\n\r\nexport async function getUserPerformanceReport(payload: ReportRequestPayload): Promise<ReportData[]> {\r\n\tconst params: AgentPerfReportParams = {\r\n\t\tstart_date: payload.startDate,\r\n\t\tend_date: payload.endDate,\r\n\t\tagent_id: payload.agents,\r\n\t\tqueue_id: payload.queueIds && payload.queueIds.length > 0 ? payload.queueIds : undefined,\r\n\t\t// Always send page + pageSize; callers that don't paginate get the full list.\r\n\t\tpage: payload.page ?? 1,\r\n\t\tpageSize: payload.pageSize ?? 500,\r\n\t\tsearch: payload.search,\r\n\t};\r\n\t// Use the combined endpoint, which honours page/pageSize/search.\r\n\tconst res = await axiosInstance.get<AgentPerfReportResponse>(\r\n\t\t`${END_POINT.AGENT_PERFORMANCE_REPORT}${buildQs(params)}`,\r\n\t);\r\n\tconst agentsPage: any = (res.data as any)?.agents;\r\n\tconst agents: AgentPerfRow[] = Array.isArray(agentsPage)\r\n\t\t? agentsPage\r\n\t\t: Array.isArray(agentsPage?.data)\r\n\t\t\t? agentsPage.data\r\n\t\t\t: [];\r\n\treturn agents.map(mapAgentPerfRow);\r\n}\r\n\r\n/**\r\n * Paginated variant — returns the mapped rows for the current page plus the\r\n * real total (so the table shows \"1–25 of N\").\r\n */\r\nexport async function getUserPerformanceReportPaged(\r\n\tpayload: ReportRequestPayload,\r\n): Promise<{ rows: ReportData[]; total: number }> {\r\n\tconst params: AgentPerfReportParams = {\r\n\t\tstart_date: payload.startDate,\r\n\t\tend_date: payload.endDate,\r\n\t\tagent_id: payload.agents,\r\n\t\tqueue_id: payload.queueIds && payload.queueIds.length > 0 ? payload.queueIds : undefined,\r\n\t\tpage: payload.page ?? 1,\r\n\t\tpageSize: payload.pageSize ?? 10,\r\n\t\tsearch: payload.search,\r\n\t};\r\n\tconst res = await axiosInstance.get<AgentPerfReportResponse>(\r\n\t\t`${END_POINT.AGENT_PERFORMANCE_REPORT}${buildQs(params)}`,\r\n\t);\r\n\tconst data = res.data;\r\n\t// `agents` is a paginated envelope ({ data, total, ... }); support a bare array for older shapes.\r\n\tconst agentsPage: any = (data as any)?.agents;\r\n\tconst rawRows: AgentPerfRow[] = Array.isArray(agentsPage)\r\n\t\t? agentsPage\r\n\t\t: Array.isArray(agentsPage?.data)\r\n\t\t\t? agentsPage.data\r\n\t\t\t: [];\r\n\tconst rows = rawRows.map(mapAgentPerfRow);\r\n\tconst total =\r\n\t\tagentsPage?.total ??\r\n\t\t(data as any)?.total ??\r\n\t\t(data as any)?.pagination?.total ??\r\n\t\tdata?.summary?.agentsLoggedIn ??\r\n\t\trows.length;\r\n\treturn { rows, total };\r\n}\r\n\r\nexport interface Queue {\r\n\tid: number;\r\n\tname: string;\r\n\tdescription: string;\r\n\tprocessId?: number;\r\n\tisActive: boolean;\r\n}\r\n\r\nexport interface Process {\r\n\tid: number;\r\n\tname: string;\r\n\tdescription: string;\r\n\tisActive: boolean;\r\n}\r\n\r\nexport async function fetchQueues(): Promise<Queue[]> {\r\n\tconst res = await axiosInstance.get(END_POINT.MASTER_QUEUES);\r\n\tif (Array.isArray(res.data)) return res.data;\r\n\tif (Array.isArray(res.data?.data)) return res.data.data;\r\n\treturn [];\r\n}\r\n\r\nexport async function fetchProcesses(): Promise<Process[]> {\r\n\tconst res = await axiosInstance.get(END_POINT.MASTER_PROCESS);\r\n\tif (Array.isArray(res.data)) return res.data;\r\n\tif (Array.isArray(res.data?.data)) return res.data.data;\r\n\treturn [];\r\n}\r\n\r\nfunction buildQs(params: AgentPerfReportParams): 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) for (const id of params.agent_id) qs.append(\"agent_id\", id);\r\n\tif (params.queue_id) for (const id of params.queue_id) qs.append(\"queue_id\", String(id));\r\n\tif (params.process_id) for (const id of params.process_id) qs.append(\"process_id\", String(id));\r\n\tif (params.top_n) qs.append(\"top_n\", String(params.top_n));\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\nexport function useAgentPerformanceReport() {\r\n\tconst [agents, setAgents] = useState<AgentPerfRow[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(\"\");\r\n\r\n\tconst fetchAgents = useCallback(async (params: AgentPerfReportParams) => {\r\n\t\tsetLoading(true);\r\n\t\tsetError(\"\");\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<AgentPerfRow[]>(\r\n\t\t\t\t`${END_POINT.AGENT_PERFORMANCE_REPORT_AGENTS}${params}`,\r\n\t\t\t);\r\n\t\t\tsetAgents(Array.isArray(res.data) ? res.data : []);\r\n\t\t} catch (err: any) {\r\n\t\t\tsetError(err?.response?.data?.message || err?.message || \"Failed to fetch performance report\");\r\n\t\t\tsetAgents([]);\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: AgentPerfReportParams) => {\r\n\t\tconst res = await axiosInstance.get(\r\n\t\t\t`${END_POINT.AGENT_PERFORMANCE_REPORT_EXPORT_EXCEL}${buildQs(params)}`,\r\n\t\t\t{ responseType: \"blob\" },\r\n\t\t);\r\n\t\tconst url = URL.createObjectURL(new Blob([res.data]));\r\n\t\tconst a = document.createElement(\"a\");\r\n\t\ta.href = url;\r\n\t\ta.download = `agent-performance-${params.start_date ?? \"export\"}.xlsx`;\r\n\t\ta.click();\r\n\t\tURL.revokeObjectURL(url);\r\n\t}, []);\r\n\r\n\treturn { agents, loading, error, setError, fetchAgents, exportExcel };\r\n}\r\n\r\nexport async function exportAgentPerformanceToExcel(params: AgentPerfReportParams): Promise<void> {\r\n\tconst res = await axiosInstance.get(\r\n\t\t`${END_POINT.AGENT_PERFORMANCE_REPORT_EXPORT_EXCEL}${buildQs(params)}`,\r\n\t\t{ responseType: \"blob\" },\r\n\t);\r\n\tconst url = URL.createObjectURL(new Blob([res.data]));\r\n\tconst a = document.createElement(\"a\");\r\n\ta.href = url;\r\n\ta.download = `agent-performance-${params.start_date ?? \"export\"}.xlsx`;\r\n\ta.click();\r\n\tURL.revokeObjectURL(url);\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tAgentDetailReportParams,\r\n\tAgentDetailReportResponse,\r\n\tCdrReportParams,\r\n\tCdrReportResponse,\r\n} from \"./types\";\r\n\r\nfunction buildCdrQs(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) for (const id of params.agent_id) qs.append(\"agent_id\", String(id));\r\n\tif (params.queue_id) for (const id of params.queue_id) qs.append(\"queue_id\", String(id));\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\nexport function useAgentDetailReport() {\r\n\tconst [detail, setDetail] = useState<AgentDetailReportResponse | null>(null);\r\n\tconst [detailLoading, setDetailLoading] = useState(false);\r\n\tconst [detailError, setDetailError] = useState(\"\");\r\n\r\n\tconst fetchDetail = useCallback(\r\n\t\tasync (agentId: string, params: AgentDetailReportParams) => {\r\n\t\t\tif (!agentId) return;\r\n\t\t\tsetDetailLoading(true);\r\n\t\t\tsetDetailError(\"\");\r\n\t\t\ttry {\r\n\t\t\t\tconst qs = new URLSearchParams();\r\n\t\t\t\tif (params.start_date) qs.append(\"start_date\", params.start_date);\r\n\t\t\t\tif (params.end_date) qs.append(\"end_date\", params.end_date);\r\n\t\t\t\tconst qsStr = qs.toString();\r\n\t\t\t\tconst url = `${END_POINT.AGENT_DETAIL_REPORT(agentId)}${qsStr ? `?${qsStr}` : \"\"}`;\r\n\t\t\t\tconst res = await axiosInstance.get<AgentDetailReportResponse>(url);\r\n\t\t\t\tsetDetail(res.data);\r\n\t\t\t} catch (err: any) {\r\n\t\t\t\tsetDetailError(err?.response?.data?.message || err?.message || \"Failed to load agent detail\");\r\n\t\t\t\tsetDetail(null);\r\n\t\t\t} finally {\r\n\t\t\t\tsetDetailLoading(false);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[],\r\n\t);\r\n\r\n\treturn { detail, detailLoading, detailError, setDetailError, fetchDetail };\r\n}\r\n\r\nexport function useAgentCdrRecords() {\r\n\tconst [records, setRecords] = useState<CdrReportResponse[\"records\"][\"data\"]>([]);\r\n\tconst [total, setTotal] = useState(0);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(\"\");\r\n\r\n\tconst fetchCdr = useCallback(async (params: CdrReportParams) => {\r\n\t\tsetLoading(true);\r\n\t\tsetError(\"\");\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<CdrReportResponse>(\r\n\t\t\t\t`${END_POINT.CDR_REPORT}${buildCdrQs(params)}`,\r\n\t\t\t);\r\n\t\t\tsetRecords(res.data?.records?.data || []);\r\n\t\t\tsetTotal(res.data?.records?.total || 0);\r\n\t\t} catch (err: any) {\r\n\t\t\tsetError(err?.response?.data?.message || err?.message || \"Failed to load call history\");\r\n\t\t\tsetRecords([]);\r\n\t\t\tsetTotal(0);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn { records, total, loading, error, setError, fetchCdr };\r\n}\r\n\r\nexport async function fetchRecordingBlob(callUuid: string): Promise<Blob> {\r\n\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(callUuid), {\r\n\t\tresponseType: \"blob\",\r\n\t});\r\n\treturn res.data as Blob;\r\n}\r\n\r\nexport async function getAgentDetailReport(\r\n\tagentId: string,\r\n\tparams?: AgentDetailReportParams,\r\n): Promise<AgentDetailReportResponse> {\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\tconst qsStr = qs.toString();\r\n\tconst res = await axiosInstance.get<AgentDetailReportResponse>(\r\n\t\t`${END_POINT.AGENT_DETAIL_REPORT(agentId)}${qsStr ? `?${qsStr}` : \"\"}`,\r\n\t);\r\n\treturn res.data;\r\n}\r\n\r\nexport async function getCdrReport(params: CdrReportParams): Promise<CdrReportResponse> {\r\n\tconst qs = buildCdrQs(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 getRecordingByCall(callUuid: string): Promise<Blob> {\r\n\treturn fetchRecordingBlob(callUuid);\r\n}\r\n","import React, { useState, useEffect, useMemo, useCallback } from \"react\";\n\nimport {\n Box, Typography, Table, TableBody, TableCell, TableContainer,\n TableHead, TableRow, TablePagination, IconButton, Chip,\n CircularProgress, Alert,\n} from \"@mui/material\";\nimport AppButton from \"../common/components/AppButton\";\nimport SearchIcon from \"@mui/icons-material/Search\";\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\nimport PlayArrowIcon from \"@mui/icons-material/PlayArrow\";\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\nimport Tooltip from \"@mui/material/Tooltip\";\nimport {\n BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip as RTooltip,\n PieChart, Pie, Cell, Legend, ResponsiveContainer, LabelList,\n} from \"recharts\";\nimport dayjs, { type Dayjs } from \"dayjs\";\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\nimport { DatePicker } from \"@mui/x-date-pickers/DatePicker\";\nimport { getAgentDetailReport, getCdrReport, getRecordingByCall } from \"./useAgentDetailReport\";\nimport { deepFindArray } from \"../../services/axios\";\nimport { sdkStateManager } from \"../../hooks/sdk-state\";\nimport type {\n AgentDetailReportResponse,\n AgentDetailProfile,\n CdrRecordResponse,\n CdrReportParams,\n ReportData,\n} from \"./types\";\nimport PageHeader from \"../common/components/PageHeader\";\n\nimport { SDKProvider } from \"../../components/SDKProvider\";\n\nconst C = {\n navy: \"#0d2a56\", blue: \"#1565c8\", green: \"#0a9a62\", amber: \"#c47c00\",\n red: \"#cc2a2a\", purple: \"#6b3fbf\", teal: \"#0b7a8f\",\n bg: \"#fff\", surface: \"#fff\", s2: \"#f7f9fc\", s3: \"#eef2f7\",\n b1: \"rgba(20,50,100,.07)\", b2: \"rgba(20,50,100,.13)\",\n t1: \"#0d1e35\", t2: \"#364f6e\", t3: \"#7a93b5\", t4: \"#bccad9\",\n blt: \"#e8f0fc\", glt: \"#e4f6ef\", alt: \"#fdf3e0\", rlt: \"#fde8e8\",\n plt: \"#f0eafa\", tlt: \"#e3f4f7\",\n};\n\nconst monoSx = { fontFamily: \"'JetBrains Mono', monospace\", fontSize: 11, fontWeight: 600 };\nconst QUEUE_COLORS = [C.blue, C.green, C.purple, C.amber, C.teal, C.red, C.navy];\n\nfunction StatCard({ value, label, color }: { value: string | number; label: string; color: string }) {\n return (\n <Box sx={{\n px: 1.5, py: 1.2,\n borderRadius: \"10px\",\n backgroundColor: \"#fafafa\",\n border: \"1px solid #e0e0e0\",\n borderLeftWidth: \"3px\",\n borderLeftStyle: \"solid\",\n borderLeftColor: color,\n }}>\n <Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.72rem\", fontWeight: 600, color: \"#888\", mb: 0.3 }}>\n {label}\n </Typography>\n <Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.95rem\", fontWeight: 700, color: \"#1a1a1a\" }}>\n {value}\n </Typography>\n </Box>\n );\n}\n\nfunction StatusChip({ status }: { status: string }) {\n const s = status?.toLowerCase();\n const isAns = s === \"answered\";\n const isAband = s === \"abandoned\";\n return (\n <Chip label={status || \"—\"} size=\"small\" sx={{\n fontSize: 11, fontWeight: 700, height: 22,\n background: isAns ? C.glt : isAband ? C.alt : C.rlt,\n color: isAns ? C.green : isAband ? C.amber : C.red,\n border: `1px solid ${isAns ? \"rgba(10,154,98,.2)\" : isAband ? \"rgba(196,124,0,.2)\" : \"rgba(204,42,42,.2)\"}`,\n fontFamily: \"'JetBrains Mono', monospace\",\n }} />\n );\n}\n\nfunction CallTypeChip({ type }: { type: string }) {\n const isIn = type?.toLowerCase() === \"inbound\";\n return (\n <Chip label={type || \"—\"} size=\"small\" sx={{\n fontSize: 11, fontWeight: 700, height: 22,\n background: isIn ? C.glt : C.blt,\n color: isIn ? C.green : C.blue,\n border: `1px solid ${isIn ? \"rgba(10,154,98,.2)\" : \"rgba(21,101,200,.2)\"}`,\n fontFamily: \"'JetBrains Mono', monospace\",\n }} />\n );\n}\n\nfunction RecordingCell({ callUuid, recordingPath }: { callUuid: string; recordingPath: string | null }) {\n const [audioUrl, setAudioUrl] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n\n if (!recordingPath) {\n return (\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\n <Tooltip title=\"No recording available\">\n <span>\n <IconButton size=\"small\" disabled sx={{ p: 0.4 }}>\n <PlayArrowIcon sx={{ fontSize: 16 }} />\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title=\"No recording available\">\n <span>\n <IconButton size=\"small\" disabled sx={{ p: 0.4 }}>\n <FileDownloadIcon sx={{ fontSize: 16 }} />\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n );\n }\n\n const handlePlay = async () => {\n if (audioUrl) return;\n try {\n setLoading(true);\n setError(false);\n const blob = await getRecordingByCall(callUuid);\n const url = URL.createObjectURL(blob);\n setAudioUrl(url);\n } catch {\n setError(true);\n } finally {\n setLoading(false);\n }\n };\n\n const handleDownload = async () => {\n try {\n const blob = audioUrl\n ? await fetch(audioUrl).then((r) => r.blob())\n : await getRecordingByCall(callUuid);\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `recording_${callUuid}.wav`;\n a.click();\n URL.revokeObjectURL(url);\n } catch {\n /* ignore */\n }\n };\n\n if (audioUrl) {\n return (\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\n <audio\n controls\n autoPlay\n src={audioUrl}\n onEnded={() => { if (audioUrl.startsWith(\"blob:\")) URL.revokeObjectURL(audioUrl); setAudioUrl(null); }}\n style={{ width: 140, height: 30 }}\n />\n <Tooltip title=\"Download\">\n <IconButton size=\"small\" onClick={handleDownload} sx={{ color: C.blue, p: 0.4 }}>\n <FileDownloadIcon sx={{ fontSize: 16 }} />\n </IconButton>\n </Tooltip>\n </Box>\n );\n }\n\n return (\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\n <Tooltip title={error ? \"Recording unavailable\" : \"Play\"}>\n <span>\n <IconButton size=\"small\" onClick={handlePlay} disabled={loading || error} sx={{ color: C.green, p: 0.4 }}>\n {loading ? <CircularProgress size={14} /> : <PlayArrowIcon sx={{ fontSize: 16 }} />}\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title={error ? \"Recording unavailable\" : \"Download\"}>\n <span>\n <IconButton size=\"small\" onClick={handleDownload} disabled={loading || error} sx={{ color: C.blue, p: 0.4 }}>\n <FileDownloadIcon sx={{ fontSize: 16 }} />\n </IconButton>\n </span>\n </Tooltip>\n {error && <Chip label=\"No File\" size=\"small\" sx={{ fontSize: \"0.6rem\", height: 18 }} />}\n </Box>\n );\n}\n\nconst cdrHeadSx = {\n bgcolor: \"#f1f1f1\", color: \"#333\", fontWeight: 600,\n whiteSpace: \"nowrap\" as const, fontSize: \"14px\",\n py: 0.7, px: 1,\n};\n\nexport interface AgentDetailReportProps {\n agentRow?: ReportData | null;\n onBack?: () => void;\n from?: \"REPORTS_LIST\" | string;\n initialStartDate?: Dayjs | null;\n initialEndDate?: Dayjs | null;\n initialQuickRange?: string;\n}\n\nfunction AgentDetailReportContent({ agentRow: propAgentRow, onBack, from, initialStartDate, initialEndDate, initialQuickRange }: AgentDetailReportProps = {}) {\n const agentRow: ReportData | null = propAgentRow || null;\n const isFromReportsList = from === \"REPORTS_LIST\";\n const agentIdFromRow = isFromReportsList\n ? agentRow?.agentDetails?.agentId || \"\"\n : sdkStateManager.getState().agentId || agentRow?.agentDetails?.agentId || \"\";\n\n const [quickRange, setQuickRange] = useState<string>(initialQuickRange || \"today\");\n const [startDate, setStartDate] = useState<Dayjs | null>(initialStartDate ?? dayjs());\n const [endDate, setEndDate] = useState<Dayjs | null>(initialEndDate ?? dayjs());\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const syncFilterToUrl = (_sd: Dayjs, _ed: Dayjs, _range: string) => { /* no-op in SDK context */ };\n\n const [activeTab, setActiveTab] = useState(0);\n\n const [detail, setDetail] = useState<AgentDetailReportResponse | null>(null);\n const [detailLoading, setDetailLoading] = useState(!isFromReportsList);\n const [detailError, setDetailError] = useState(\"\");\n\n const [cdrRecords, setCdrRecords] = useState<CdrRecordResponse[]>([]);\n const [cdrTotal, setCdrTotal] = useState(0);\n const [cdrPage, setCdrPage] = useState(0);\n const [cdrPageSize, setCdrPageSize] = useState(10);\n const [cdrLoading, setCdrLoading] = useState(false);\n const [cdrError, setCdrError] = useState(\"\");\n\n const profile: AgentDetailProfile | null = detail?.profile || null;\n const agentName = profile?.fullName || agentRow?.agentDetails?.fullName || \"Unknown Agent\";\n const showInitialSpinner = !isFromReportsList && detailLoading && !profile && !agentRow?.agentDetails?.fullName;\n\n const setQuick = (range: string) => {\n setQuickRange(range);\n const today = dayjs();\n let sd: Dayjs = today;\n const ed: Dayjs = today;\n if (range === \"week\") sd = today.startOf(\"week\");\n else if (range === \"month\") sd = today.startOf(\"month\");\n setStartDate(sd);\n setEndDate(ed);\n syncFilterToUrl(sd, ed, range);\n };\n\n const fetchDetailFn = async (sd: Dayjs, ed: Dayjs) => {\n if (!agentIdFromRow) return;\n try {\n setDetailLoading(true);\n setDetailError(\"\");\n const res = await getAgentDetailReport(agentIdFromRow, {\n start_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\n end_date: ed.isSame(dayjs(), \"day\") ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\") : ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\n });\n setDetail(res);\n } catch (err: any) {\n setDetailError(err?.message || \"Failed to load agent detail\");\n } finally {\n setDetailLoading(false);\n }\n };\n\n const fetchCdrFn = async (sd: Dayjs, ed: Dayjs, page: number, pageSize: number) => {\n if (!agentIdFromRow) return;\n try {\n setCdrLoading(true);\n setCdrError(\"\");\n const params: CdrReportParams = {\n start_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\n end_date: ed.isSame(dayjs(), \"day\") ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\") : ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\n search: agentIdFromRow,\n page: page + 1,\n pageSize: pageSize,\n };\n const res: any = await getCdrReport(params);\n setCdrRecords(deepFindArray<CdrRecordResponse>(res, [\"data\", \"records\"]));\n setCdrTotal(res?.records?.total ?? res?.total ?? res?.data?.total ?? 0);\n } catch (err: any) {\n setCdrError(err?.message || \"Failed to load call history\");\n } finally {\n setCdrLoading(false);\n }\n };\n\n const handleSearch = (sd?: Dayjs | null, ed?: Dayjs | null) => {\n const fromDate = sd ?? startDate;\n const toDate = ed ?? endDate;\n if (!fromDate || !toDate) return;\n fetchDetailFn(fromDate, toDate);\n setCdrPage(0);\n if (activeTab === 1) fetchCdrFn(fromDate, toDate, 0, cdrPageSize);\n };\n\n useEffect(() => {\n if (agentIdFromRow) fetchDetailFn(startDate ?? dayjs(), endDate ?? dayjs());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [agentIdFromRow]);\n\n useEffect(() => {\n if (activeTab === 1 && startDate && endDate) {\n fetchCdrFn(startDate, endDate, cdrPage, cdrPageSize);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeTab, cdrPage, cdrPageSize]);\n\n const hourlyCallData = useMemo(() => {\n return (detail?.hourlyCalls || []).map((h) => ({\n hour: String(h.hourOfDay).padStart(2, \"0\"),\n answered: h.answeredCalls,\n abandoned: h.missedCalls,\n }));\n }, [detail]);\n\n const timeUtilData = useMemo(() => {\n const tu = detail?.timeUtilisation;\n if (!tu) return [];\n const total = tu.totalLoginSeconds || 1;\n return [\n { name: \"On Call / Handle\", value: tu.onCallSeconds, pct: (tu.onCallSeconds / total) * 100, formatted: tu.onCallFormatted, color: C.blue },\n { name: \"Idle\", value: tu.idleSeconds, pct: (tu.idleSeconds / total) * 100, formatted: tu.idleFormatted, color: \"#e8a0a0\" },\n { name: \"Break\", value: tu.breakSeconds, pct: (tu.breakSeconds / total) * 100, formatted: tu.breakFormatted, color: C.amber },\n ];\n }, [detail]);\n\n const talkDurationBuckets = useMemo(() => {\n const items = [...(detail?.talkDistribution || [])].sort((a, b) => a.bucketOrder - b.bucketOrder);\n const total = items.reduce((s, b) => s + (b.callCount || 0), 0);\n return items.map((b) => ({\n bucket: b.bucketLabel,\n count: b.callCount,\n minSeconds: b.minSeconds,\n maxSeconds: b.maxSeconds,\n pct: total > 0 ? (b.callCount / total) * 100 : 0,\n }));\n }, [detail]);\n\n const talkDurationTotal = useMemo(\n () => talkDurationBuckets.reduce((s, b) => s + (b.count || 0), 0),\n [talkDurationBuckets],\n );\n\n const queuePieData = useMemo(() => {\n return (detail?.callsByQueue || []).map((q, i) => ({\n name: q.queueName,\n value: q.callCount,\n pctOfTotal: q.pctOfTotal,\n color: QUEUE_COLORS[i % QUEUE_COLORS.length],\n }));\n }, [detail]);\n\n const queueMetrics = useMemo(() => {\n const items = detail?.queueMetrics || [];\n const grandTotal = items.reduce((sum, q) => sum + q.totalCalls, 0);\n return items.map((q, i) => ({\n ...q,\n pctOfTotal: grandTotal > 0 ? (q.totalCalls / grandTotal) * 100 : 0,\n answerRate: q.totalCalls > 0 ? (q.answeredCalls / q.totalCalls) * 100 : 0,\n color: QUEUE_COLORS[i % QUEUE_COLORS.length],\n }));\n }, [detail]);\n\n const hourlyChartTitle = useMemo(() => {\n if (quickRange === \"today\") return \"Hourly Call Volume — Today\";\n if (quickRange === \"month\") return `Hourly Call Volume — ${dayjs().format(\"MMMM YYYY\")}`;\n if (quickRange === \"week\") return \"Hourly Call Volume — This Week\";\n if (startDate && endDate) {\n if (startDate.isSame(endDate, \"day\")) return `Hourly Call Volume — ${startDate.format(\"DD MMM YYYY\")}`;\n return `Hourly Call Volume — ${startDate.format(\"DD MMM YYYY\")} to ${endDate.format(\"DD MMM YYYY\")}`;\n }\n return \"Hourly Call Volume\";\n }, [quickRange, startDate, endDate]);\n\n const handleBack = useCallback(() => {\n onBack?.();\n }, [onBack]);\n\n if (!agentIdFromRow) {\n return (\n <Box sx={{ p: 4, textAlign: \"center\" }}>\n <Typography sx={{ color: C.t3, mb: 2 }}>No agent selected.</Typography>\n {isFromReportsList && (\n <AppButton onClick={handleBack}>\n Go Back\n </AppButton>\n )}\n </Box>\n );\n }\n\n if (showInitialSpinner) {\n return (\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", minHeight: 400 }}>\n <CircularProgress size={36} />\n </Box>\n );\n }\n\n const tabs = [\"Overview\", \"Call History\", \"Break Details\"];\n\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <Box sx={{ background: C.bg, minHeight: \"100vh\" }}>\n <PageHeader\n title={agentName}\n showBack={isFromReportsList}\n onBack={handleBack}\n />\n\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flexWrap: \"wrap\", pb: 1.5, px: 2 }}>\n <DatePicker value={startDate} onChange={(val) => { const d = val as Dayjs | null; setStartDate(d); setQuickRange(\"custom\"); if (d && endDate) syncFilterToUrl(d, endDate, \"custom\"); }} slotProps={{ textField: { size: \"small\", sx: { width: 150, \"& .MuiOutlinedInput-root\": { borderRadius: \"7px\", fontSize: 12, height: 30 }, \"& .MuiInputBase-input\": { py: \"4px\", fontSize: 12 } } } }} />\n <Typography sx={{ fontSize: 12, color: C.t3 }}>to</Typography>\n <DatePicker value={endDate} onChange={(val) => { const d = val as Dayjs | null; setEndDate(d); setQuickRange(\"custom\"); if (startDate && d) syncFilterToUrl(startDate, d, \"custom\"); }} slotProps={{ textField: { size: \"small\", sx: { width: 150, \"& .MuiOutlinedInput-root\": { borderRadius: \"7px\", fontSize: 12, height: 30 }, \"& .MuiInputBase-input\": { py: \"4px\", fontSize: 12 } } } }} />\n <AppButton variant={quickRange === \"today\" ? \"primary\" : \"outlined\"} onClick={() => { setQuick(\"today\"); handleSearch(dayjs(), dayjs()); }} sx={{ whiteSpace: \"nowrap\" }}>Today</AppButton>\n <AppButton variant={quickRange === \"week\" ? \"primary\" : \"outlined\"} onClick={() => { setQuick(\"week\"); handleSearch(dayjs().startOf(\"week\"), dayjs()); }} sx={{ whiteSpace: \"nowrap\" }}>This Week</AppButton>\n <AppButton variant={quickRange === \"month\" ? \"primary\" : \"outlined\"} onClick={() => { setQuick(\"month\"); handleSearch(dayjs().startOf(\"month\"), dayjs()); }} sx={{ whiteSpace: \"nowrap\" }}>This Month</AppButton>\n </Box>\n\n <Box sx={{ py: 2, px: 2, position: \"relative\" }}>\n {detailLoading && (\n <Box sx={{ position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0, background: \"rgba(240,244,248,0.7)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", zIndex: 10 }}>\n <CircularProgress />\n </Box>\n )}\n\n {detailError && <Alert severity=\"error\" sx={{ mb: 2 }} onClose={() => setDetailError(\"\")}>{detailError}</Alert>}\n\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr 1fr\", sm: \"repeat(3, 1fr)\", md: \"repeat(5, 1fr)\" }, gap: 1.5, mb: 2 }}>\n {[\n { v: profile?.totalCalls ?? 0, l: \"Total Calls\", c: C.navy },\n { v: profile?.answeredCalls ?? 0, l: \"Answered\", c: C.green },\n { v: profile?.missedCalls ?? 0, l: \"Missed\", c: C.red },\n { v: profile?.avgAhtFormatted || \"00:00:00\", l: \"Avg AHT\", c: C.purple },\n { v: `${(profile?.answerRate ?? 0).toFixed(1)}%`, l: \"Answer Rate\", c: C.green },\n { v: profile?.loginDurationFormatted || \"00:00:00\", l: \"Login Duration\", c: C.blue },\n { v: profile?.productionFormatted || \"00:00:00\", l: \"Production\", c: C.blue },\n { v: profile?.handleTimeFormatted || \"00:00:00\", l: \"Handle Time\", c: C.purple },\n { v: profile?.breakTimeFormatted || \"00:00:00\", l: \"Break Time\", c: C.amber },\n { v: `${(profile?.adherencePct ?? 0).toFixed(1)}%`, l: `Adherence${profile?.adherenceGrade ? ` (${profile.adherenceGrade})` : \"\"}`, c: C.teal },\n ].map((kpi, i) => (\n <Box key={i} sx={{\n px: 1.5, py: 1.2,\n borderRadius: \"10px\",\n backgroundColor: \"#fafafa\",\n borderLeft: `3px solid ${kpi.c}`,\n border: \"1px solid #e0e0e0\",\n borderLeftWidth: \"3px\",\n borderLeftStyle: \"solid\",\n borderLeftColor: kpi.c,\n }}>\n <Typography sx={{\n fontFamily: \"poppins, Arial, sans-serif\",\n fontSize: \"0.72rem\", fontWeight: 600, color: \"#888\", mb: 0.3,\n }}>\n {kpi.l}\n </Typography>\n <Typography sx={{\n fontFamily: \"poppins, Arial, sans-serif\",\n fontSize: \"0.95rem\", fontWeight: 700, color: \"#1a1a1a\",\n }}>\n {kpi.v}\n </Typography>\n </Box>\n ))}\n </Box>\n\n <Box sx={{ display: \"flex\", alignItems: { xs: \"flex-start\", sm: \"center\" }, justifyContent: \"space-between\", flexDirection: { xs: \"column\", sm: \"row\" }, gap: 1, borderBottom: `2px solid ${C.b1}`, mb: 2 }}>\n <Box sx={{ display: \"flex\", gap: 0.5, flexWrap: \"wrap\" }}>\n {tabs.map((tab, idx) => (\n <Box key={tab} onClick={() => setActiveTab(idx)}\n sx={{\n px: 2, py: 1, fontSize: 13, fontWeight: 600, cursor: \"pointer\",\n color: activeTab === idx ? C.blue : C.t3,\n borderBottom: `2px solid ${activeTab === idx ? C.blue : \"transparent\"}`,\n mb: \"-2px\", transition: \"all .15s\", \"&:hover\": { color: C.t1 },\n }}>\n {tab}\n </Box>\n ))}\n </Box>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: \"-2px\" }}>\n <AppButton\n size=\"small\"\n startIcon={<RefreshIcon />}\n disabled={detailLoading || cdrLoading}\n onClick={() => handleSearch()}\n >\n Refresh\n </AppButton>\n <AppButton size=\"small\" startIcon={<SearchIcon />} onClick={() => handleSearch()}>\n Search\n </AppButton>\n </Box>\n </Box>\n\n {activeTab === 0 && (\n <Box>\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" }, gap: 2, mb: 2 }}>\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>{hourlyChartTitle}</Typography>\n <Chip label={agentName} size=\"small\" sx={{ fontSize: 11, fontWeight: 700, background: C.blt, color: C.blue, border: `1px solid rgba(21,101,200,.2)` }} />\n </Box>\n <Box sx={{ p: 2, height: 260 }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={hourlyCallData} barGap={1}>\n <CartesianGrid strokeDasharray=\"3 3\" stroke={C.b1} />\n <XAxis dataKey=\"hour\" tick={{ fontSize: 11, fill: C.t3 }} />\n <YAxis tick={{ fontSize: 11, fill: C.t3 }} allowDecimals={false} />\n <RTooltip labelFormatter={(label) => `${String(label).padStart(2, \"0\")}:00`} contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }} />\n <Legend wrapperStyle={{ fontSize: 11 }} />\n <Bar dataKey=\"answered\" name=\"Answered\" fill={C.blue} radius={[3, 3, 0, 0]} />\n <Bar dataKey=\"abandoned\" name=\"Abandoned\" fill={C.red} radius={[3, 3, 0, 0]} />\n </BarChart>\n </ResponsiveContainer>\n </Box>\n </Box>\n\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}` }}>\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Time Utilisation Breakdown</Typography>\n </Box>\n <Box sx={{ p: 2, height: 260 }}>\n {timeUtilData.length > 0 ? (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n <Pie data={timeUtilData} cx=\"50%\" cy=\"50%\" innerRadius={60} outerRadius={95} dataKey=\"value\" nameKey=\"name\" minAngle={8}>\n {timeUtilData.map((entry, idx) => <Cell key={idx} fill={entry.color} />)}\n </Pie>\n <RTooltip formatter={(_val, name, entry) => [`${(entry as any).payload.formatted} (${(entry as any).payload.pct.toFixed(1)}%)`, name]} contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }} />\n <Legend wrapperStyle={{ fontSize: 12 }} formatter={(value: string) => <span style={{ color: C.t1, fontWeight: 500 }}>{value}</span>} />\n </PieChart>\n </ResponsiveContainer>\n ) : (\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"100%\", color: C.t3, fontSize: 13 }}>No data</Box>\n )}\n </Box>\n </Box>\n </Box>\n\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\", mb: 2 }}>\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Talk Duration Distribution</Typography>\n <Chip label={`${talkDurationTotal} call${talkDurationTotal === 1 ? \"\" : \"s\"}`} size=\"small\" sx={{ fontSize: 11, fontWeight: 700, background: C.glt, color: C.green, border: `1px solid rgba(10,154,98,.2)` }} />\n </Box>\n <Box sx={{ p: 2, height: 260 }}>\n {talkDurationBuckets.length > 0 ? (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={talkDurationBuckets} margin={{ top: 16, right: 16, left: 0, bottom: 20 }}>\n <CartesianGrid strokeDasharray=\"3 3\" stroke={C.b1} />\n <XAxis dataKey=\"bucket\" tick={{ fontSize: 11, fill: C.t3 }} label={{ value: \"Talking Duration\", position: \"insideBottom\", offset: -5, style: { fontSize: 11, fontWeight: 600, fill: C.t2 } }} />\n <YAxis tick={{ fontSize: 11, fill: C.t3 }} allowDecimals={false} label={{ value: \"Call Count\", angle: -90, position: \"insideLeft\", offset: 10, style: { fontSize: 11, fontWeight: 600, fill: C.t2 } }} />\n <RTooltip\n contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\n labelFormatter={(label, payload) => {\n const p = payload?.[0]?.payload as { minSeconds?: number; maxSeconds?: number } | undefined;\n if (!p) return String(label);\n return `${label} (${p.minSeconds}–${p.maxSeconds}s)`;\n }}\n formatter={(val, _name, entry) => {\n const pct = (entry as any)?.payload?.pct;\n return [`${val} call${val === 1 ? \"\" : \"s\"}${pct != null ? ` (${pct.toFixed(1)}%)` : \"\"}`, \"Calls\"];\n }}\n />\n <Bar dataKey=\"count\" name=\"Calls\" fill={C.teal} radius={[4, 4, 0, 0]}>\n <LabelList dataKey=\"count\" position=\"top\" style={{ fontSize: 11, fontWeight: 700, fill: C.t1 }} />\n </Bar>\n </BarChart>\n </ResponsiveContainer>\n ) : (\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"100%\", color: C.t3, fontSize: 13 }}>No data</Box>\n )}\n </Box>\n </Box>\n\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" }, gap: 2 }}>\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}` }}>\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Calls by Queue</Typography>\n </Box>\n <Box sx={{ p: 2, height: 260 }}>\n {queuePieData.length > 0 ? (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n <Pie data={queuePieData} cx=\"50%\" cy=\"50%\" outerRadius={90} dataKey=\"value\" nameKey=\"name\">\n {queuePieData.map((entry, idx) => <Cell key={idx} fill={entry.color} />)}\n </Pie>\n <RTooltip\n contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\n formatter={(val, name, entry) => {\n const pct = (entry as any)?.payload?.pctOfTotal;\n return [`${val} calls${pct != null ? ` (${pct.toFixed(1)}%)` : \"\"}`, name];\n }}\n />\n <Legend wrapperStyle={{ fontSize: 12 }} formatter={(value: string) => <span style={{ color: C.t1, fontWeight: 500 }}>{value}</span>} />\n </PieChart>\n </ResponsiveContainer>\n ) : (\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"100%\", color: C.t3, fontSize: 13 }}>No queue data</Box>\n )}\n </Box>\n </Box>\n\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}` }}>\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Queue Performance Metrics</Typography>\n </Box>\n <Box sx={{ p: 2 }}>\n {queueMetrics.length > 0 ? queueMetrics.map((q) => (\n <Box key={q.queueName} sx={{ mb: 2, \"&:last-child\": { mb: 0 } }}>\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 0.3 }}>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <Box sx={{ width: 10, height: 10, borderRadius: \"50%\", background: q.color, flexShrink: 0 }} />\n <Typography sx={{ fontSize: 13, fontWeight: 700, color: C.t1 }}>{q.queueName}</Typography>\n </Box>\n <Typography sx={{ ...monoSx, fontSize: 13, fontWeight: 800, color: q.color }}>\n {q.totalCalls} calls\n <Typography component=\"span\" sx={{ ...monoSx, color: C.t3, ml: 0.5 }}>\n ({q.answeredCalls} ans / {q.missedCalls} miss)\n </Typography>\n </Typography>\n </Box>\n <Box sx={{ height: 6, background: C.s3, borderRadius: 3, overflow: \"hidden\", mb: 0.3 }}>\n <Box sx={{ height: \"100%\", width: `${q.pctOfTotal ?? 0}%`, background: q.color, borderRadius: 3 }} />\n </Box>\n <Box sx={{ display: \"flex\", flexWrap: \"wrap\", columnGap: 1.5, rowGap: 0.2 }}>\n <Typography sx={{ fontSize: 11, color: C.t3 }}>{(q.pctOfTotal ?? 0).toFixed(0)}% of total</Typography>\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Ans: {(q.answerRate ?? 0).toFixed(0)}%</Typography>\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Talk: <span style={{ ...monoSx, color: C.t2 }}>{q.avgTalkFormatted}</span></Typography>\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Hold: <span style={{ ...monoSx, color: C.t2 }}>{q.avgHoldFormatted}</span></Typography>\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Wrap: <span style={{ ...monoSx, color: C.t2 }}>{q.avgWrapupFormatted}</span></Typography>\n <Typography sx={{ fontSize: 11, color: C.t3 }}>AHT: <span style={{ ...monoSx, color: C.t2 }}>{q.avgAhtFormatted}</span></Typography>\n </Box>\n </Box>\n )) : (\n <Box sx={{ textAlign: \"center\", py: 4, color: C.t3, fontSize: 13 }}>No queue data</Box>\n )}\n </Box>\n </Box>\n </Box>\n </Box>\n )}\n\n {activeTab === 1 && (\n <Box sx={{ borderRadius: \"8px\", border: \"1px solid #e0e7ef\", overflow: \"hidden\", background: \"transparent\" }}>\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Call History</Typography>\n <Chip label={`${cdrTotal} records`} size=\"small\" sx={{ fontSize: 11, fontWeight: 700, background: C.s2, color: C.t3, border: `1px solid ${C.b2}` }} />\n </Box>\n </Box>\n {cdrError && <Alert severity=\"error\" sx={{ mx: 2, mt: 1 }} onClose={() => setCdrError(\"\")}>{cdrError}</Alert>}\n <TableContainer sx={{ position: \"relative\" }}>\n {cdrLoading && (\n <Box sx={{ position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0, background: \"rgba(255,255,255,0.7)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", zIndex: 5 }}>\n <CircularProgress size={28} />\n </Box>\n )}\n <Table size=\"small\" sx={{\n minWidth: 1400,\n \"& .MuiTableCell-root\": { fontSize: \"0.75rem\", borderBottom: \"1px solid #eef1f6\", py: 0.6, px: 1 },\n }}>\n <TableHead>\n <TableRow>\n {[\n \"Phone Number\", \"Call Start\", \"Call Type\", \"Status\", \"Queue\", \"Extension\",\n \"Talk Duration\", \"Hold Duration\", \"Ringing Duration\", \"Wrapup Duration\",\n \"Disposition\", \"Transferred\", \"Recording\",\n ].map((label) => (\n <TableCell key={label} sx={cdrHeadSx}>{label}</TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {cdrRecords.map((row, idx) => (\n <TableRow key={row.callUuid || idx} hover sx={{\n backgroundColor: \"#fff\",\n \"&:hover\": { backgroundColor: \"#f0f7f8\" },\n }}>\n <TableCell sx={{ fontWeight: 600, color: C.navy, fontSize: \"0.75rem\" }}>{row.phoneNumber || \"\"}</TableCell>\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\n {row.callStartTime ? dayjs(row.callStartTime).format(\"DD MMM YYYY hh:mm A\") : \"\"}\n </TableCell>\n <TableCell><CallTypeChip type={row.callType || \"\"} /></TableCell>\n <TableCell><StatusChip status={row.callStatus || \"\"} /></TableCell>\n <TableCell>\n {row.queueName\n ? <Chip label={row.queueName} size=\"small\" sx={{ backgroundColor: \"#f0ebfa\", color: C.purple, fontWeight: 500, fontSize: \"0.67rem\", height: 22 }} />\n : \"\"}\n </TableCell>\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>{row.extension || \"\"}</TableCell>\n <TableCell sx={{ fontWeight: 600, color: C.blue, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.talkDurationFmt || \"\"}</TableCell>\n <TableCell sx={{ fontWeight: 500, color: C.amber, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.holdDurationFmt || \"\"}</TableCell>\n <TableCell sx={{ fontWeight: 500, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.ringingDurationFmt || \"\"}</TableCell>\n <TableCell sx={{ fontWeight: 500, color: C.purple, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.wrapupDurationFmt || \"\"}</TableCell>\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>{row.disposition || \"\"}</TableCell>\n <TableCell>\n {row.wasTransferred\n ? <Chip label=\"Yes\" size=\"small\" sx={{ backgroundColor: \"#e6f7ef\", color: C.green, fontWeight: 600, fontSize: \"0.65rem\", height: 20, borderRadius: \"6px\" }} />\n : <Chip label=\"No\" size=\"small\" sx={{ backgroundColor: \"transparent\", color: \"#6b7b8d\", fontWeight: 600, fontSize: \"0.65rem\", height: 20, borderRadius: \"6px\" }} />}\n </TableCell>\n <TableCell>\n {row.callUuid ? <RecordingCell callUuid={row.callUuid} recordingPath={row.recordingPath ?? null} /> : \"\"}\n </TableCell>\n </TableRow>\n ))}\n {!cdrLoading && cdrRecords.length === 0 && (\n <TableRow><TableCell colSpan={13} sx={{ textAlign: \"center\", py: 4, color: C.t3, fontSize: 13 }}>No call records found</TableCell></TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n <TablePagination\n component=\"div\" count={cdrTotal} page={cdrPage}\n onPageChange={(_, p) => setCdrPage(p)} rowsPerPage={cdrPageSize}\n onRowsPerPageChange={(e) => { setCdrPageSize(parseInt(e.target.value, 10)); setCdrPage(0); }}\n rowsPerPageOptions={[10, 15, 25, 50, 100]}\n sx={{ borderTop: \"1px solid #eef1f6\", \"& .MuiTablePagination-displayedRows\": { fontSize: \"0.73rem\" }, \"& .MuiTablePagination-selectLabel\": { fontSize: \"0.73rem\" } }}\n />\n </Box>\n )}\n\n {activeTab === 2 && (\n <Box>\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr 1fr\", md: \"repeat(3, 1fr)\", lg: \"repeat(4, 1fr)\" }, gap: { xs: 1.5, lg: 2 }, mb: 2 }}>\n <StatCard value={profile?.breakTimeFormatted || \"00:00:00\"} label=\"Total Break Time\" color={C.amber} />\n <StatCard value={profile?.breaksTaken ?? 0} label=\"Breaks Taken\" color={C.purple} />\n <StatCard value={profile?.productionFormatted || \"00:00:00\"} label=\"Production Time\" color={C.green} />\n <StatCard value={profile?.loginDurationFormatted || \"00:00:00\"} label=\"Login Duration\" color={C.teal} />\n </Box>\n\n <Box>\n <Typography sx={{ fontSize: \"0.72rem\", fontWeight: 700, color: \"#888\", textTransform: \"uppercase\", letterSpacing: 0.8, mb: 1, fontFamily: \"poppins, Arial, sans-serif\" }}>\n Attendance Summary\n </Typography>\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr 1fr\", md: \"repeat(4, 1fr)\" }, gap: 1.5 }}>\n {[\n { label: \"First Login\", value: profile?.firstLoginTime ? dayjs(profile.firstLoginTime).format(\"YYYY-MM-DD HH:mm:ss\") : \"—\", color: C.blue },\n { label: \"Adherence Score\", value: `${profile?.adherencePct ?? 0}%`, color: C.green },\n { label: \"Adherence Grade\", value: profile?.adherenceGrade || \"—\", color: C.purple },\n { label: \"Answer Rate\", value: `${(profile?.answerRate ?? 0).toFixed(1)}%`, color: C.teal },\n ].map((item) => (\n <Box key={item.label} sx={{\n px: 1.5, py: 1.2, borderRadius: \"10px\",\n backgroundColor: \"#fafafa\", border: \"1px solid #e0e0e0\",\n borderLeftWidth: \"3px\", borderLeftStyle: \"solid\", borderLeftColor: item.color,\n }}>\n <Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.72rem\", fontWeight: 600, color: \"#888\", mb: 0.3 }}>{item.label}</Typography>\n <Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.95rem\", fontWeight: 700, color: \"#1a1a1a\" }}>{item.value}</Typography>\n </Box>\n ))}\n </Box>\n </Box>\n </Box>\n )}\n </Box>\n </Box>\n </LocalizationProvider>\n );\n}\n\nconst AgentDetailReport: React.FC<AgentDetailReportProps> = (props) => (\n <SDKProvider>\n <AgentDetailReportContent {...props} />\n </SDKProvider>\n);\n\nexport default AgentDetailReport;\n","import React, { useState, useEffect, useCallback, useMemo, useRef } from \"react\";\nimport {\n Box, Paper, Table, TableBody, TableCell, TableContainer, TableHead,\n TableRow, TableSortLabel, TablePagination, CircularProgress, Alert,\n Stack, IconButton, Tooltip,\n} from \"@mui/material\";\nimport AppButton from \"../common/components/AppButton\";\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\nimport VisibilityIcon from \"@mui/icons-material/Visibility\";\nimport dayjs, { Dayjs } from \"dayjs\";\nimport isoWeek from \"dayjs/plugin/isoWeek\";\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\n\ndayjs.extend(isoWeek);\n\nimport {\n fetchQueues, fetchProcesses,\n getUserPerformanceReportPaged, validateReportPayload, exportAgentPerformanceToExcel,\n type Queue,\n} from \"./useAgentPerformanceReport\";\nimport type { AgentPerfReportParams, ReportData, ReportRequestPayload } from \"./types\";\nimport { type AgentOption } from \"../common/components/AgentMultiSelect\";\nimport ReportFilterBar, { type QuickRange, type ProcessOption } from \"../common/components/ReportFilterBar\";\nimport { headCellSx as headSx, sortLabelSx, reportBodyCellSx as bodySx } from \"../common/utils/tableStyles\";\nimport PageHeader from \"../common/components/PageHeader\";\nimport SearchBar from \"../common/components/SearchBar\";\n\nimport { SDKProvider } from \"../../components/SDKProvider\";\nimport { SDKPermissionGuard } from \"../../components/SDKPermissionGuard\";\nimport { SDK_PERMISSIONS } from \"../../permissions/sdk-constants\";\nimport AgentDetailReport from \"../agentDetailReport\";\n\nconst C = {\n navy: \"#0d2a56\", blue: \"#1565c8\", green: \"#0a9a62\", amber: \"#c47c00\",\n red: \"#cc2a2a\", purple: \"#6b3fbf\", teal: \"#0b7a8f\",\n bg: \"transparent\", surface: \"#fff\", s2: \"#f7f9fc\", s3: \"#eef2f7\",\n b1: \"rgba(20,50,100,.07)\", b2: \"rgba(20,50,100,.13)\",\n t1: \"#0d1e35\", t2: \"#364f6e\", t3: \"#7a93b5\", t4: \"#bccad9\",\n blt: \"#e8f0fc\", glt: \"#e4f6ef\", alt: \"#fdf3e0\", rlt: \"#fde8e8\",\n plt: \"#f0eafa\", tlt: \"#e3f4f7\",\n};\n\ntype Order = \"asc\" | \"desc\";\ntype SortKey = string;\n\nfunction parseDur(d: string): number {\n if (!d || d === \"00:00:00\") return 0;\n const p = d.split(\":\").map(Number);\n if (p.length === 3) return p[0] * 3600 + p[1] * 60 + p[2];\n if (p.length === 2) return p[0] * 60 + p[1];\n return 0;\n}\n\nfunction fmtDur(s: number): string {\n if (!s || s <= 0) return \"00:00:00\";\n const h = Math.floor(s / 3600);\n const m = Math.floor((s % 3600) / 60);\n const sc = Math.floor(s % 60);\n return [h, m, sc].map((x) => String(x).padStart(2, \"0\")).join(\":\");\n}\n\nfunction getVal(row: ReportData, key: string): any {\n switch (key) {\n case \"id\": return row.agentDetails?.agentId || \"\";\n case \"name\": return row.agentDetails?.fullName || \"\";\n case \"process\": return row.agentDetails?.process || \"\";\n case \"queue\": return row.agentDetails?.queueNames || \"\";\n case \"total\": return row.calls?.totalCalls ?? 0;\n case \"ans\": return row.calls?.answered ?? 0;\n case \"miss\": return row.calls?.missed ?? 0;\n case \"inTotal\": return row.inCalls?.total ?? 0;\n case \"outTotal\": return row.outCalls?.total ?? 0;\n case \"aht\": return parseDur(row.average?.aht || \"00:00:00\");\n case \"loginDur\": return parseDur(row.loginDetails?.loggedInDuration || \"00:00:00\");\n case \"talk\": return parseDur(row.loginDetails?.talkTime || \"00:00:00\");\n case \"hold\": return parseDur(row.average?.holdTime || \"00:00:00\");\n case \"wrapup\": return parseDur(row.average?.wrapUp || \"00:00:00\");\n case \"breakTime\": return parseDur(row.breaks?.lunch || \"00:00:00\") + parseDur(row.breaks?.tea || \"00:00:00\") + parseDur(row.breaks?.training || \"00:00:00\") + parseDur(row.breaks?.meeting || \"00:00:00\") + parseDur(row.breaks?.shortBreak || \"00:00:00\");\n case \"idle\": return parseDur(row.loginDetails?.idleTime || \"00:00:00\");\n case \"adherence\": return row.adherence?.pct ?? null;\n case \"firstLogin\": return row.loginStats?.firstLogin || \"\";\n default: return \"\";\n }\n}\n\ninterface ColDef { key: string; label: string; group: string; fmt?: (row: ReportData) => any; align?: \"left\" | \"right\" | \"center\"; }\n\nconst COLUMNS: ColDef[] = [\n { key: \"id\", label: \"User ID\", group: \"Agent\" },\n { key: \"name\", label: \"Full Name\", group: \"Agent\" },\n { key: \"queue\", label: \"Queues\", group: \"Agent\" },\n { key: \"total\", label: \"Total Calls\", group: \"Calls\", align: \"right\" },\n { key: \"ans\", label: \"Answered\", group: \"Calls\", align: \"right\" },\n { key: \"miss\", label: \"Missed\", group: \"Calls\", align: \"right\" },\n { key: \"inTotal\", label: \"Inbound\", group: \"Calls\", align: \"right\" },\n { key: \"outTotal\", label: \"Outbound\", group: \"Calls\", align: \"right\" },\n { key: \"aht\", label: \"AHT\", group: \"Time\", align: \"right\" },\n { key: \"loginDur\", label: \"Login Dur\", group: \"Time\", align: \"right\" },\n { key: \"talk\", label: \"Talk Time\", group: \"Time\", align: \"right\" },\n { key: \"hold\", label: \"Hold Time\", group: \"Time\", align: \"right\" },\n { key: \"wrapup\", label: \"Wrapup Time\", group: \"Time\", align: \"right\" },\n { key: \"breakTime\", label: \"Break Time\", group: \"Breaks\", align: \"right\" },\n { key: \"idle\", label: \"Idle Time\", group: \"Time\", align: \"right\" },\n { key: \"firstLogin\", label: \"First Login\", group: \"Login\" },\n { key: \"adherence\", label: \"Adherence %\", group: \"Agent\", align: \"right\" },\n];\n\nfunction AgentPerformanceReportContent() {\n const [startDate, setStartDate] = useState<Dayjs | null>(dayjs().startOf(\"day\"));\n const [endDate, setEndDate] = useState<Dayjs | null>(dayjs());\n const [quickRange, setQuickRange] = useState<string>(\"today\");\n const [selectedUsers, setSelectedUsers] = useState<AgentOption[]>([]);\n const [isAllUsersSelected, setIsAllUsersSelected] = useState(false);\n const [processes, setProcesses] = useState<ProcessOption[]>([]);\n const [process, setProcess] = useState(\"\");\n const [search, setSearch] = useState(\"\");\n const [loginUsersOnly] = useState(true);\n\n const [queues, setQueues] = useState<Queue[]>([]);\n const [selectedQueues, setSelectedQueues] = useState<Queue[]>([]);\n\n const [data, setData] = useState<ReportData[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n const [selectedAgent, setSelectedAgent] = useState<ReportData | null>(null);\n\n const [orderBy, setOrderBy] = useState<SortKey>(\"total\");\n const [order, setOrder] = useState<Order>(\"desc\");\n const [page, setPage] = useState(0);\n const [rowsPerPage, setRowsPerPage] = useState(10);\n const [totalCount, setTotalCount] = useState(-1);\n const [visibleCols] = useState<Set<string>>(new Set(COLUMNS.map((c) => c.key)));\n\n // Debounced search (sent to the server)\n const [debouncedSearch, setDebouncedSearch] = useState(\"\");\n const debounceRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n useEffect(() => {\n debounceRef.current = setTimeout(() => setDebouncedSearch(search.trim()), 400);\n return () => clearTimeout(debounceRef.current);\n }, [search]);\n\n useEffect(() => {\n fetchProcesses().then((p) => {\n const mapped = p.map((x) => ({ label: x.name, value: x.name }));\n setProcesses(mapped);\n if (mapped.length) setProcess(mapped[0].value);\n }).catch(() => { });\n fetchQueues().then((data) => setQueues(data || [])).catch(() => { });\n }, []);\n\n const handleQuickRangeChange = (range: QuickRange) => {\n setQuickRange(range);\n };\n\n const handleRefresh = () => {\n if (quickRange === \"today\" || quickRange === \"week\" || quickRange === \"month\") {\n const now = dayjs();\n let sd = now.startOf(\"day\");\n const ed = now;\n if (quickRange === \"week\") sd = now.startOf(\"week\").startOf(\"day\");\n else if (quickRange === \"month\") sd = now.startOf(\"month\").startOf(\"day\");\n // Setting the dates re-triggers the auto-fetch effect below.\n setStartDate(sd);\n setEndDate(ed);\n } else {\n fetchReport(page);\n }\n };\n\n const fetchReport = useCallback(async (pageNum: number) => {\n const fromDate = startDate;\n const toDate = endDate;\n if (!fromDate || !toDate) { setError(\"Select date range\"); return; }\n\n const payload: ReportRequestPayload = {\n startDate: fromDate.format(\"YYYY-MM-DDTHH:mm:ss\"),\n endDate: toDate.format(\"YYYY-MM-DDTHH:mm:ss\"),\n startTime: fromDate.format(\"HH:mm:ss\"),\n endTime: toDate.format(\"HH:mm:ss\"),\n process,\n agents: isAllUsersSelected ? [] : selectedUsers.map((u) => u.userId),\n loginUsersOnly,\n queueIds: selectedQueues.length > 0 && selectedQueues.length < queues.length ? selectedQueues.map((q) => q.id) : undefined,\n search: debouncedSearch || undefined,\n page: pageNum + 1,\n pageSize: rowsPerPage,\n };\n\n const valid = validateReportPayload(payload);\n if (!valid.isValid) { setError(valid.error || \"Invalid\"); return; }\n\n try {\n setLoading(true);\n setError(\"\");\n const { rows, total } = await getUserPerformanceReportPaged(payload);\n setData(rows);\n setTotalCount(typeof total === \"number\" ? total : rows.length);\n } catch (err: any) {\n setError(err?.message || \"Failed to fetch report\");\n setData([]);\n } finally {\n setLoading(false);\n }\n }, [startDate, endDate, process, selectedUsers, isAllUsersSelected, selectedQueues, loginUsersOnly, debouncedSearch, rowsPerPage]);\n\n useEffect(() => {\n setPage(0);\n fetchReport(0);\n }, [fetchReport]);\n\n const handlePageChange = useCallback(\n (_event: React.MouseEvent<HTMLButtonElement> | null, newPage: number) => {\n setPage(newPage);\n fetchReport(newPage);\n },\n [fetchReport],\n );\n\n // Search + paging are server-side; sorting is applied client-side to the current page.\n const sorted = useMemo(() => {\n return [...data].sort((a, b) => {\n const av = getVal(a, orderBy);\n const bv = getVal(b, orderBy);\n if (typeof av === \"number\" && typeof bv === \"number\") return order === \"asc\" ? av - bv : bv - av;\n return order === \"asc\" ? String(av).localeCompare(String(bv)) : String(bv).localeCompare(String(av));\n });\n }, [data, orderBy, order]);\n\n const paged = sorted;\n\n const handleSort = (key: string) => {\n setOrder(orderBy === key && order === \"asc\" ? \"desc\" : \"asc\");\n setOrderBy(key);\n };\n\n const handleExportExcel = async () => {\n const fromDate = startDate;\n const toDate = endDate;\n if (!fromDate || !toDate) { setError(\"Select date range\"); return; }\n const params: AgentPerfReportParams = {\n start_date: fromDate.format(\"YYYY-MM-DDTHH:mm:ss\"),\n end_date: toDate.format(\"YYYY-MM-DDTHH:mm:ss\"),\n agent_id: !isAllUsersSelected && selectedUsers.length > 0\n ? selectedUsers.map((u) => u.userId)\n : undefined,\n queue_id: selectedQueues.length > 0 && selectedQueues.length < queues.length\n ? selectedQueues.map((q) => q.id)\n : undefined,\n search: debouncedSearch || undefined,\n };\n try {\n await exportAgentPerformanceToExcel(params);\n } catch (err: any) {\n setError(err?.message || \"Failed to export Excel\");\n }\n };\n\n const renderCellValue = (row: ReportData, col: ColDef) => {\n const v = getVal(row, col.key);\n const durKeys = [\"aht\", \"loginDur\", \"talk\", \"hold\", \"wrapup\", \"breakTime\", \"idle\"];\n if (durKeys.includes(col.key)) return fmtDur(v);\n if (col.key === \"adherence\") return v != null ? `${v}%` : \"—\";\n if (col.key === \"firstLogin\") return v ? dayjs(v).format(\"DD MMM YYYY hh:mm A\") : \"\";\n return v ?? \"\";\n };\n\n const activeCols = COLUMNS.filter((c) => visibleCols.has(c.key));\n\n if (selectedAgent) {\n return (\n <AgentDetailReport\n agentRow={selectedAgent}\n onBack={() => setSelectedAgent(null)}\n initialStartDate={startDate}\n initialEndDate={endDate}\n initialQuickRange={quickRange}\n from=\"REPORTS_LIST\"\n />\n );\n }\n\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <Box sx={{ background: C.bg, minHeight: \"100vh\" }}>\n <PageHeader\n title=\" Performance Report\"\n actions={\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <SearchBar\n value={search}\n onChange={setSearch}\n placeholder=\"Search name, ID...\"\n width={250}\n />\n <SDKPermissionGuard\n permissions={[SDK_PERMISSIONS.REPORTS_AGENT_PERFORMANCE_EXPORT, SDK_PERMISSIONS.REPORTS_AGENT_PERFORMANCE_MANAGE]}\n showFallback={false}\n >\n <AppButton\n startIcon={<FileDownloadIcon sx={{ fontSize: \"0.95rem !important\" }} />}\n disabled={!data.length}\n onClick={handleExportExcel}\n sx={{ height: 36 }}\n >\n Export Excel\n </AppButton>\n </SDKPermissionGuard>\n </Stack>\n }\n />\n\n <ReportFilterBar\n startDate={startDate}\n endDate={endDate}\n onStartChange={setStartDate}\n onEndChange={setEndDate}\n quickRange={quickRange}\n onQuickRangeChange={handleQuickRangeChange}\n showAgentSelect\n selectedAgents={selectedUsers}\n onAgentsChange={setSelectedUsers}\n setIsAllUsersSelected={setIsAllUsersSelected}\n showQueueSelect\n queues={queues}\n selectedQueues={selectedQueues}\n onQueuesChange={setSelectedQueues}\n showProcessSelect\n processes={processes}\n selectedProcess={process}\n onProcessChange={setProcess}\n extra={\n <AppButton\n startIcon={<RefreshIcon sx={{ fontSize: \"0.9rem !important\" }} />}\n disabled={loading}\n onClick={handleRefresh}\n sx={{ height: 32 }}\n >\n Refresh\n </AppButton>\n }\n />\n\n {error && <Alert severity=\"error\" sx={{ mx: 2.5, mt: 1.5 }} onClose={() => setError(\"\")}>{error}</Alert>}\n\n <Box sx={{ py: 2, px: 1, overflow: \"auto\", position: \"relative\" }}>\n {loading && (\n <Box sx={{ position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0, background: \"rgba(240,244,248,0.7)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", zIndex: 10 }}>\n <CircularProgress />\n </Box>\n )}\n\n <Paper elevation={0} sx={{ borderRadius: \"8px\", border: \"1px solid #e0e7ef\", overflow: \"hidden\", mb: 2 }}>\n <TableContainer>\n <Table size=\"small\" sx={{\n minWidth: 1400,\n \"& .MuiTableCell-root\": { fontSize: \"0.75rem\", borderBottom: \"1px solid #eef1f6\", py: 0.6, px: 1 },\n }}>\n <TableHead>\n <TableRow>\n {activeCols.map((col) => (\n <TableCell key={col.key} align={col.align || \"left\"} sx={headSx}>\n <TableSortLabel active={orderBy === col.key} direction={orderBy === col.key ? order : \"asc\"} onClick={() => handleSort(col.key)} sx={sortLabelSx}>\n {col.label}\n </TableSortLabel>\n </TableCell>\n ))}\n <TableCell sx={{ ...headSx, width: 48 }}>Detail</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {paged.map((row, idx) => (\n <TableRow key={idx} hover onClick={() => setSelectedAgent(row)} sx={{\n backgroundColor: \"#fff\",\n \"&:hover\": { backgroundColor: \"#f0f7f8\" },\n cursor: \"pointer\",\n }}>\n {activeCols.map((col) => (\n <TableCell key={col.key} align={col.align || \"left\"} sx={bodySx}>\n {renderCellValue(row, col)}\n </TableCell>\n ))}\n <TableCell sx={bodySx} align=\"center\">\n <IconButton size=\"small\" onClick={(e) => { e.stopPropagation(); setSelectedAgent(row); }} sx={{ color: C.blue }}>\n <VisibilityIcon sx={{ fontSize: 16 }} />\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n {paged.length === 0 && (\n <TableRow><TableCell colSpan={activeCols.length + 1} sx={{ textAlign: \"center\", py: 4, color: C.t3, fontSize: 13 }}>No data found</TableCell></TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n\n <TablePagination\n component=\"div\" count={totalCount} page={page}\n onPageChange={handlePageChange} rowsPerPage={rowsPerPage}\n onRowsPerPageChange={(e) => { setRowsPerPage(parseInt(e.target.value, 10)); setPage(0); }}\n rowsPerPageOptions={[10, 15, 25, 50, 100]}\n sx={{ borderTop: \"1px solid #eef1f6\", \"& .MuiTablePagination-displayedRows\": { fontSize: \"0.73rem\" }, \"& .MuiTablePagination-selectLabel\": { fontSize: \"0.73rem\" } }}\n />\n </Paper>\n </Box>\n </Box>\n </LocalizationProvider>\n );\n}\n\nconst AgentPerformanceReport: React.FC = () => (\n <SDKProvider>\n <AgentPerformanceReportContent />\n </SDKProvider>\n);\n\nexport default AgentPerformanceReport;\n","import { useCallback, useEffect, useRef, useState } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tDashboardAgentCard,\r\n\tDashboardAlert,\r\n\tDashboardQueueData,\r\n\tDashboardQueuePulse,\r\n\tDashboardTopStats,\r\n} from \"./types\";\r\n\r\nexport const POLL_INTERVAL_MS = 5000;\r\nexport const LONG_CALL_SECS = 420;\r\nexport const WAITING_THRESHOLD = 3;\r\n\r\n// ─── Helpers ──────────────────────────────────────────────────────────────────\r\n\r\nexport function parseDur(dur: string): number {\r\n\tconst p = (dur || \"00:00:00\").split(\":\").map(Number);\r\n\treturn (p[0] || 0) * 3600 + (p[1] || 0) * 60 + (p[2] || 0);\r\n}\r\n\r\nexport function fmtDur(s: number): string {\r\n\tconst h = Math.floor(s / 3600);\r\n\tconst m = Math.floor((s % 3600) / 60);\r\n\tconst sc = s % 60;\r\n\treturn [h, m, sc].map((x) => String(x).padStart(2, \"0\")).join(\":\");\r\n}\r\n\r\nexport type AgentStatusKey = \"s-oncall-in\" | \"s-oncall-out\" | \"s-wrapup\" | \"s-break\" | \"s-idle\";\r\n\r\nexport const STATUS_PRIORITY: Record<AgentStatusKey, number> = {\r\n\t\"s-oncall-in\": 0,\r\n\t\"s-oncall-out\": 1,\r\n\t\"s-break\": 2,\r\n\t\"s-wrapup\": 3,\r\n\t\"s-idle\": 4,\r\n};\r\n\r\nexport function getAgentStatusKey(status: string, callDirection: string | null): AgentStatusKey {\r\n\tconst lower = (status || \"\").toLowerCase();\r\n\tif (lower.includes(\"idle\") || lower.includes(\"ready\") || lower.includes(\"available\")) return \"s-idle\";\r\n\tif (lower.includes(\"break\") || lower.includes(\"pause\")) return \"s-break\";\r\n\tif (lower.includes(\"wrap\") || lower.includes(\"acw\")) return \"s-wrapup\";\r\n\tif (lower.includes(\"outbound\") || lower.includes(\"outgoing\") || lower.includes(\"dialing\")) return \"s-oncall-out\";\r\n\tif (\r\n\t\tlower.includes(\"call\") || lower.includes(\"busy\") || lower.includes(\"oncall\") ||\r\n\t\tlower.includes(\"on-call\") || lower.includes(\"on_call\") || lower.includes(\"incoming\") ||\r\n\t\tlower.includes(\"ringing\") || lower.includes(\"connected\")\r\n\t) {\r\n\t\treturn callDirection === \"OUTBOUND\" ? \"s-oncall-out\" : \"s-oncall-in\";\r\n\t}\r\n\treturn \"s-idle\";\r\n}\r\n\r\nexport function getSortedAgents(list: DashboardAgentCard[]): DashboardAgentCard[] {\r\n\treturn [...list].sort(\r\n\t\t(a, b) =>\r\n\t\t\t(STATUS_PRIORITY[getAgentStatusKey(a.status, a.callDirection)] ?? 9) -\r\n\t\t\t(STATUS_PRIORITY[getAgentStatusKey(b.status, b.callDirection)] ?? 9),\r\n\t);\r\n}\r\n\r\n// ─── API functions ────────────────────────────────────────────────────────────\r\n\r\nasync function fetchTopStats(): Promise<DashboardTopStats> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_TOP_STATS);\r\n\treturn res.data;\r\n}\r\n\r\nasync function fetchAgents(): Promise<DashboardAgentCard[]> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_AGENTS);\r\n\treturn res.data;\r\n}\r\n\r\nasync function fetchQueues(): Promise<DashboardQueueData[]> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_QUEUES);\r\n\treturn res.data;\r\n}\r\n\r\nasync function fetchAlerts(): Promise<DashboardAlert[]> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_ALERTS);\r\n\treturn res.data;\r\n}\r\n\r\nasync function fetchQueuePulse(): Promise<DashboardQueuePulse> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_QUEUE_PULSE);\r\n\treturn res.data;\r\n}\r\n\r\n// ─── Hook ─────────────────────────────────────────────────────────────────────\r\n\r\nexport interface UseLiveStatusReturn {\r\n\tisLoading: boolean;\r\n\ttopStats: DashboardTopStats | null;\r\n\tagents: DashboardAgentCard[];\r\n\tqueues: DashboardQueueData[];\r\n\talerts: DashboardAlert[];\r\n\tqueuePulse: DashboardQueuePulse | null;\r\n\tdurations: Record<string, number>;\r\n\tclockStr: string;\r\n\tdateStr: string;\r\n\trefresh: () => void;\r\n}\r\n\r\nexport function useLiveStatus(): UseLiveStatusReturn {\r\n\tconst [isLoading, setIsLoading] = useState(true);\r\n\tconst [topStats, setTopStats] = useState<DashboardTopStats | null>(null);\r\n\tconst [agents, setAgents] = useState<DashboardAgentCard[]>([]);\r\n\tconst [queues, setQueues] = useState<DashboardQueueData[]>([]);\r\n\tconst [alerts, setAlerts] = useState<DashboardAlert[]>([]);\r\n\tconst [queuePulse, setQueuePulse] = useState<DashboardQueuePulse | null>(null);\r\n\tconst [durations, setDurations] = useState<Record<string, number>>({});\r\n\tconst [clockStr, setClockStr] = useState(\"--:--:--\");\r\n\tconst [dateStr, setDateStr] = useState(\"\");\r\n\r\n\tconst agentsRef = useRef(agents);\r\n\tagentsRef.current = agents;\r\n\r\n\tconst fetchDashboard = useCallback(async () => {\r\n\t\ttry {\r\n\t\t\tconst [topStatsRes, agentsRes, queuesRes, alertsRes, pulseRes] = await Promise.allSettled([\r\n\t\t\t\tfetchTopStats(),\r\n\t\t\t\tfetchAgents(),\r\n\t\t\t\tfetchQueues(),\r\n\t\t\t\tfetchAlerts(),\r\n\t\t\t\tfetchQueuePulse(),\r\n\t\t\t]);\r\n\r\n\t\t\tif (topStatsRes.status === \"fulfilled\" && topStatsRes.value) setTopStats(topStatsRes.value);\r\n\t\t\tif (agentsRes.status === \"fulfilled\" && agentsRes.value?.length) {\r\n\t\t\t\tsetAgents(agentsRes.value);\r\n\t\t\t\tconst m: Record<string, number> = {};\r\n\t\t\t\tagentsRes.value.forEach((a) => {\r\n\t\t\t\t\tm[a.agentId] = parseDur(a.statusDuration || \"00:00:00\");\r\n\t\t\t\t});\r\n\t\t\t\tsetDurations(m);\r\n\t\t\t}\r\n\t\t\tif (queuesRes.status === \"fulfilled\" && queuesRes.value) setQueues(queuesRes.value);\r\n\t\t\tif (alertsRes.status === \"fulfilled\" && alertsRes.value) setAlerts(alertsRes.value);\r\n\t\t\tif (pulseRes.status === \"fulfilled\" && pulseRes.value) setQueuePulse(pulseRes.value);\r\n\t\t} catch {\r\n\t\t\t// keep current data on unexpected error\r\n\t\t} finally {\r\n\t\t\tsetIsLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\t// Initial fetch + polling\r\n\tuseEffect(() => {\r\n\t\tfetchDashboard();\r\n\t\tconst iv = setInterval(fetchDashboard, POLL_INTERVAL_MS);\r\n\t\treturn () => clearInterval(iv);\r\n\t}, [fetchDashboard]);\r\n\r\n\t// Clock + duration ticker\r\n\tuseEffect(() => {\r\n\t\tconst iv = setInterval(() => {\r\n\t\t\tconst now = new Date();\r\n\t\t\tsetClockStr(\r\n\t\t\t\t[now.getHours(), now.getMinutes(), now.getSeconds()]\r\n\t\t\t\t\t.map((v) => String(v).padStart(2, \"0\"))\r\n\t\t\t\t\t.join(\":\"),\r\n\t\t\t);\r\n\t\t\tsetDateStr(\r\n\t\t\t\tnow.toLocaleDateString(\"en-US\", {\r\n\t\t\t\t\tweekday: \"long\",\r\n\t\t\t\t\tyear: \"numeric\",\r\n\t\t\t\t\tmonth: \"long\",\r\n\t\t\t\t\tday: \"numeric\",\r\n\t\t\t\t}),\r\n\t\t\t);\r\n\t\t\tsetDurations((prev) => {\r\n\t\t\t\tconst next = { ...prev };\r\n\t\t\t\tfor (const key of Object.keys(next)) next[key] = next[key] + 1;\r\n\t\t\t\treturn next;\r\n\t\t\t});\r\n\t\t}, 1000);\r\n\t\treturn () => clearInterval(iv);\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tisLoading,\r\n\t\ttopStats,\r\n\t\tagents,\r\n\t\tqueues,\r\n\t\talerts,\r\n\t\tqueuePulse,\r\n\t\tdurations,\r\n\t\tclockStr,\r\n\t\tdateStr,\r\n\t\trefresh: fetchDashboard,\r\n\t};\r\n}\r\n","import { Box, styled } from \"@mui/material\";\r\nimport { keyframes } from \"@mui/material/styles\";\r\nimport type { AgentStatusKey } from \"./useLiveStatus\";\r\n\r\n// ─── Keyframes ────────────────────────────────────────────────────────────────\r\n\r\nexport const pulse = keyframes`\r\n 0%, 100% { transform: scale(1); opacity: 1; }\r\n 50% { transform: scale(1.6); opacity: 0.3; }\r\n`;\r\n\r\nexport const slideUp = keyframes`\r\n from { transform: translateY(16px); opacity: 0; }\r\n to { transform: translateY(0); opacity: 1; }\r\n`;\r\n\r\nexport const flashBg = keyframes`\r\n 0%, 100% { background: #fdf3e0; }\r\n 50% { background: #fff7e0; }\r\n`;\r\n\r\nexport const rowBlink = keyframes`\r\n 0%, 100% { background: rgba(204,42,42,.07); }\r\n 50% { background: rgba(204,42,42,.2); }\r\n`;\r\n\r\nexport const ticker = keyframes`\r\n 0% { transform: translateX(0); }\r\n 100% { transform: translateX(-50%); }\r\n`;\r\n\r\n// ─── Color tokens ─────────────────────────────────────────────────────────────\r\n\r\nexport const C = {\r\n\tbg0: \"#eef2f7\", bg1: \"#ffffff\", bg2: \"#f4f7fb\", bg3: \"#e4eaf3\", bg4: \"#d5dfee\",\r\n\tb1: \"rgba(30,60,120,.08)\", b2: \"rgba(30,60,120,.14)\",\r\n\tt1: \"#0d1e35\", t2: \"#3a5278\", t3: \"#7a93b5\", t4: \"#b0c0d5\",\r\n\tgreen: \"#0a9a62\", greenLt: \"#e4f6ef\", greenBd: \"rgba(10,154,98,.2)\",\r\n\tamber: \"#c47c00\", amberLt: \"#fdf3e0\", amberBd: \"rgba(196,124,0,.2)\",\r\n\tblue: \"#1565c8\", blueLt: \"#e8f0fc\", blueBd: \"rgba(21,101,200,.2)\",\r\n\tred: \"#cc2a2a\", redLt: \"#fde8e8\", redBd: \"rgba(204,42,42,.2)\",\r\n\tpurple: \"#6b3fbf\", purpleLt: \"#f0eafa\", purpleBd: \"rgba(107,63,191,.2)\",\r\n\tteal: \"#0b7a8f\", tealLt: \"#e3f4f7\", tealBd: \"rgba(11,122,143,.2)\",\r\n\torange: \"#c45a00\", orangeLt: \"#fdf0e4\",\r\n\tnavy: \"#1A5F6C\",\r\n};\r\n\r\nexport const STATUS_COLORS: Record<AgentStatusKey, { bg: string; border: string; bar: string; text: string }> = {\r\n\t\"s-oncall-in\": { bg: \"#fff8e1\", border: \"rgba(196,124,0,.3)\", bar: \"#e68a00\", text: \"#b36b00\" },\r\n\t\"s-oncall-out\": { bg: \"#e3f2fd\", border: \"rgba(21,101,200,.3)\", bar: \"#1976d2\", text: \"#0d47a1\" },\r\n\t\"s-wrapup\": { bg: \"#f3e5f5\", border: \"rgba(107,63,191,.3)\", bar: \"#8e24aa\", text: \"#6a1b9a\" },\r\n\t\"s-break\": { bg: \"#ffebee\", border: \"rgba(204,42,42,.3)\", bar: \"#e53935\", text: \"#c62828\" },\r\n\t\"s-idle\": { bg: \"#e8f5e9\", border: \"rgba(46,125,50,.25)\", bar: \"#2e7d32\", text: \"#1b5e20\" },\r\n};\r\n\r\n// ─── Wallboard root ───────────────────────────────────────────────────────────\r\n\r\nexport const WallboardRoot = styled(Box, {\r\n\tshouldForwardProp: (prop) => prop !== \"isTv\",\r\n})<{ isTv?: boolean }>(({ theme, isTv }) => ({\r\n\tdisplay: \"grid\",\r\n\tgridTemplateRows: \"auto auto 1fr auto\",\r\n\tminHeight: isTv ? \"100vh\" : \"calc(100vh - 60px)\",\r\n\theight: isTv ? \"100vh\" : \"calc(100vh - 60px)\",\r\n\tfontFamily: \"'Poppins', Arial, sans-serif\",\r\n\tbackground: \"transparent\",\r\n\tcolor: C.t1,\r\n\t[theme.breakpoints.up(\"lg\")]: {\r\n\t\theight: isTv ? \"100vh\" : \"calc(100vh - 60px)\",\r\n\t\toverflow: \"hidden\",\r\n\t},\r\n}));\r\n\r\n// ─── Top bar ──────────────────────────────────────────────────────────────────\r\n\r\nexport const TopBar = styled(Box)(({ theme }) => ({\r\n\tbackground: C.navy,\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tjustifyContent: \"space-between\",\r\n\tpadding: \"0 10px\",\r\n\theight: 34,\r\n\tminHeight: 34,\r\n\tborderBottom: `1px solid ${C.blue}`,\r\n\tflexWrap: \"wrap\" as const,\r\n\tgap: 4,\r\n\t[theme.breakpoints.up(\"sm\")]: { padding: \"0 14px\", flexWrap: \"nowrap\" as const },\r\n}));\r\n\r\nexport const BrandLogo = styled(Box)({\r\n\twidth: 22, height: 22, borderRadius: 4, background: \"#fff\",\r\n\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"center\", overflow: \"hidden\",\r\n});\r\n\r\nexport const LiveBadge = styled(Box)({\r\n\tdisplay: \"flex\", alignItems: \"center\", gap: 4,\r\n\tbackground: \"rgba(10,154,98,.2)\", border: \"1px solid rgba(10,154,98,.4)\",\r\n\tborderRadius: 12, padding: \"2px 7px\",\r\n\tfontSize: 8, fontWeight: 700, letterSpacing: 1.5, color: \"#0ef5a8\", textTransform: \"uppercase\" as const,\r\n});\r\n\r\nexport const PulseDot = styled(\"span\")({\r\n\twidth: 5, height: 5, borderRadius: \"50%\", background: \"#0ef5a8\",\r\n\tdisplay: \"inline-block\",\r\n\tanimation: `${pulse} 1.5s ease infinite`,\r\n});\r\n\r\n// ─── KPI Strip ────────────────────────────────────────────────────────────────\r\n\r\nexport const KpiStrip = styled(Box)(({ theme }) => ({\r\n\tdisplay: \"grid\",\r\n\tgridTemplateColumns: \"repeat(auto-fit, minmax(72px, 1fr))\",\r\n\tbackground: \"transparent\",\r\n\tborderBottom: `1px solid ${C.b1}`,\r\n\t[theme.breakpoints.up(\"xl\")]: {\r\n\t\tgridTemplateColumns: \"repeat(14, 1fr)\",\r\n\t},\r\n}));\r\n\r\nexport const KpiCell = styled(Box)<{ accentColor: string }>(({ accentColor }) => ({\r\n\tpadding: \"4px 0 3px 8px\",\r\n\tborderRight: `1px solid ${C.b1}`,\r\n\tborderBottom: `1px solid ${C.b1}`,\r\n\tposition: \"relative\" as const,\r\n\tcursor: \"default\",\r\n\t\"&:last-child\": { borderRight: \"none\" },\r\n\t\"&::after\": {\r\n\t\tcontent: '\"\"', position: \"absolute\" as const, bottom: 0, left: 0, width: \"100%\", height: 2,\r\n\t\tbackground: accentColor,\r\n\t},\r\n\t\"@media (min-width: 960px)\": { padding: \"5px 0 4px 6px\" },\r\n}));\r\n\r\nexport const KpiValue = styled(\"div\")<{ kcolor: string }>(({ kcolor, theme }) => ({\r\n\tfontFamily: \"'Poppins', Arial, sans-serif\",\r\n\tfontSize: 15,\r\n\tfontWeight: 800,\r\n\tlineHeight: 1,\r\n\tcolor: kcolor,\r\n\t[(theme as any).breakpoints.up(\"md\")]: { fontSize: 17 },\r\n\t[(theme as any).breakpoints.up(\"lg\")]: { fontSize: 20 },\r\n}));\r\n\r\nexport const KpiLabel = styled(\"div\")({\r\n\tfontSize: 8,\r\n\tletterSpacing: 0.8,\r\n\ttextTransform: \"uppercase\" as const,\r\n\tcolor: C.t3,\r\n\tfontWeight: 600,\r\n\tmarginTop: 1,\r\n});\r\n\r\n// ─── Body grid ────────────────────────────────────────────────────────────────\r\n\r\nexport const BodyGrid = styled(Box)(({ theme }) => ({\r\n\tdisplay: \"grid\",\r\n\tgridTemplateColumns: \"1fr\",\r\n\tmarginTop: 0,\r\n\toverflow: \"auto\",\r\n\tminHeight: 0,\r\n\t[theme.breakpoints.up(\"md\")]: { gridTemplateColumns: \"2fr 1fr\" },\r\n\t[theme.breakpoints.up(\"lg\")]: { gridTemplateColumns: \"2fr 1fr\", overflow: \"hidden\" },\r\n}));\r\n\r\nexport const Panel = styled(Box)(({ theme }) => ({\r\n\tdisplay: \"flex\", flexDirection: \"column\" as const, overflow: \"auto\", minHeight: 0,\r\n\tborderRight: `1px solid ${C.b1}`,\r\n\t[theme.breakpoints.up(\"lg\")]: { overflow: \"hidden\" },\r\n}));\r\n\r\nexport const PanelHeader = styled(Box)({\r\n\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\r\n\tpadding: \"4px 10px\", background: \"transparent\", borderBottom: `1px solid ${C.b1}`, flexShrink: 0,\r\n});\r\n\r\nexport const PhTitle = styled(\"span\")({\r\n\tfontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 10, fontWeight: 700,\r\n\tletterSpacing: 1.2, textTransform: \"uppercase\" as const, color: C.t2,\r\n});\r\n\r\nexport const Badge = styled(\"span\")<{ bg: string; color: string; border: string }>(({ bg, color, border }) => ({\r\n\tfontFamily: \"'JetBrains Mono', monospace\", fontSize: 9, fontWeight: 700,\r\n\tpadding: \"1px 6px\", borderRadius: 3, letterSpacing: 0.2,\r\n\tbackground: bg, color, border: `1px solid ${border}`,\r\n}));\r\n\r\nexport const StatusDot = styled(\"span\")<{ dotColor: string; animated?: boolean }>(({ dotColor, animated }) => ({\r\n\twidth: 5, height: 5, borderRadius: \"50%\", flexShrink: 0, background: dotColor,\r\n\t...(animated ? { animation: `${pulse} 1.3s ease infinite` } : {}),\r\n}));\r\n\r\n// ─── Agent table ──────────────────────────────────────────────────────────────\r\n\r\nexport const AgentTable = styled(\"table\")({\r\n\twidth: \"100%\", borderCollapse: \"collapse\", tableLayout: \"auto\",\r\n});\r\n\r\nexport const AgTh = styled(\"th\")({\r\n\tpadding: \"4px 8px\", fontSize: 8, letterSpacing: 0.8, textTransform: \"uppercase\" as const,\r\n\tcolor: C.t3, fontWeight: 600, textAlign: \"left\" as const,\r\n\tborderBottom: `1px solid ${C.b2}`, background: C.bg2,\r\n\twhiteSpace: \"nowrap\" as const, position: \"sticky\" as const, top: 0, zIndex: 1,\r\n});\r\n\r\nexport const AgTd = styled(\"td\")({\r\n\tpadding: \"4px 8px\", fontSize: 11, borderBottom: `1px solid ${C.b1}`,\r\n\tverticalAlign: \"middle\",\r\n});\r\n\r\nexport const PageInfo = styled(Box)({\r\n\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\r\n\tpadding: \"2px 10px\", fontSize: 8, color: C.t3, background: C.bg2,\r\n\tflexShrink: 0, borderTop: `1px solid ${C.b1}`,\r\n});\r\n\r\n// ─── Queue ────────────────────────────────────────────────────────────────────\r\n\r\nexport const QName = styled(\"span\")({\r\n\tfontWeight: 600, color: C.t1, fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 11,\r\n\t\"@media (min-width: 1280px)\": { fontSize: 12 },\r\n});\r\n\r\nexport const QNum = styled(\"span\")<{ numColor?: string }>(({ numColor }) => ({\r\n\tfontFamily: \"'JetBrains Mono', monospace\", fontWeight: 700, fontSize: 11, color: numColor || C.t1,\r\n}));\r\n\r\nexport const QBar = styled(Box)({ height: 4, background: C.bg3, borderRadius: 2, overflow: \"hidden\", width: 56 });\r\n\r\nexport const QBarFill = styled(Box)<{ w: number; barColor: string }>(({ w, barColor }) => ({\r\n\theight: \"100%\", borderRadius: 3, width: `${w}%`, background: barColor,\r\n}));\r\n\r\n// ─── Section header ───────────────────────────────────────────────────────────\r\n\r\nexport const SbHeader = styled(Box)({\r\n\tpadding: \"7px 12px\", display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\r\n\tbackground: C.bg2, borderBottom: `1px solid ${C.b1}`,\r\n});\r\n\r\nexport const SbTitle = styled(\"span\")({\r\n\tfontSize: 9, fontWeight: 700, letterSpacing: 1.5, textTransform: \"uppercase\" as const, color: C.t3,\r\n});\r\n\r\n// ─── No data ──────────────────────────────────────────────────────────────────\r\n\r\nexport const NoDataBox = styled(Box)({\r\n\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"center\",\r\n\tpadding: \"12px 8px\", fontSize: 10, fontWeight: 600,\r\n\tcolor: C.t3, letterSpacing: 0.5, fontFamily: \"'Poppins', Arial, sans-serif\",\r\n});\r\n\r\n// ─── Footer ticker ────────────────────────────────────────────────────────────\r\n\r\nexport const Footer = styled(Box)({\r\n\tbackground: C.navy, borderTop: \"1px solid rgba(255,255,255,.08)\",\r\n\tdisplay: \"flex\", alignItems: \"center\", overflow: \"hidden\",\r\n\tminHeight: 18, height: 18,\r\n\tposition: \"sticky\", bottom: 0, zIndex: 5,\r\n});\r\n\r\nexport const TickerLabel = styled(\"div\")({\r\n\tflexShrink: 0, padding: \"0 8px\", fontSize: 7, fontWeight: 700, letterSpacing: 1.2,\r\n\ttextTransform: \"uppercase\" as const, color: \"rgba(255,255,255,.4)\",\r\n\tborderRight: \"1px solid rgba(255,255,255,.1)\", whiteSpace: \"nowrap\" as const,\r\n});\r\n\r\nexport const TickerTrack = styled(Box)({ flex: 1, overflow: \"hidden\", position: \"relative\" as const });\r\n\r\nexport const TickerInner = styled(Box)({\r\n\tdisplay: \"flex\", animation: `${ticker} 50s linear infinite`, whiteSpace: \"nowrap\" as const,\r\n});\r\n\r\nexport const TickerSpan = styled(\"span\")<{ isWarn?: boolean; isGood?: boolean }>(({ isWarn, isGood }) => ({\r\n\tfontSize: 9, color: \"rgba(255,255,255,.55)\", padding: \"0 16px\", letterSpacing: 0.3,\r\n\t\"& b\": {\r\n\t\tcolor: isWarn ? \"#fcd34d\" : isGood ? \"#6ee7b7\" : \"rgba(255,255,255,.85)\", fontWeight: 600,\r\n\t},\r\n}));\r\n\r\n// ─── Supervisor monitoring ────────────────────────────────────────────────────\r\n\r\nexport const MonitorBtn = styled(\"button\")<{ variant: \"listen\" | \"whisper\" | \"barge\" | \"stop\" }>(({ variant }) => {\r\n\tconst colors = {\r\n\t\tlisten: { bg: \"#e3f2fd\", color: \"#1976d2\", hoverBg: \"#bbdefb\" },\r\n\t\twhisper: { bg: \"#fff3e0\", color: \"#ef6c00\", hoverBg: \"#ffe0b2\" },\r\n\t\tbarge: { bg: \"#fce4ec\", color: \"#c2185b\", hoverBg: \"#f8bbd0\" },\r\n\t\tstop: { bg: \"#ffebee\", color: \"#c62828\", hoverBg: \"#ffcdd2\" },\r\n\t};\r\n\tconst c = colors[variant];\r\n\treturn {\r\n\t\tpadding: \"2px 5px\",\r\n\t\tborder: \"none\",\r\n\t\tborderRadius: 3,\r\n\t\tcursor: \"pointer\",\r\n\t\tfontSize: 8,\r\n\t\tfontWeight: 600,\r\n\t\tdisplay: \"flex\",\r\n\t\talignItems: \"center\",\r\n\t\tgap: 2,\r\n\t\tbackground: c.bg,\r\n\t\tcolor: c.color,\r\n\t\ttransition: \"all 0.2s\",\r\n\t\t\"&:hover\": { background: c.hoverBg },\r\n\t\t\"&:disabled\": { opacity: 0.5, cursor: \"not-allowed\" },\r\n\t};\r\n});\r\n\r\nexport const MonitorCard = styled(Box)({\r\n\tposition: \"fixed\",\r\n\tbottom: 20,\r\n\tright: 20,\r\n\twidth: 296,\r\n\tbackground: \"#fff\",\r\n\tborderRadius: 14,\r\n\tboxShadow: \"0 8px 32px rgba(13,30,53,0.18), 0 2px 8px rgba(13,30,53,0.08)\",\r\n\tzIndex: 1001,\r\n\toverflow: \"hidden\",\r\n\tanimation: `${slideUp} 0.2s cubic-bezier(.22,.68,0,1.2)`,\r\n});\r\n","import React, { useCallback, useState, useEffect } from \"react\";\r\nimport { Box, CircularProgress } from \"@mui/material\";\r\nimport { useCallMonitoring } from \"../../hooks/useCallMonitoring\";\r\nimport type { SupervisorMonitorMode } from \"../../hooks/useCallMonitoring\";\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPermissionGuard } from \"../../components/SDKPermissionGuard\";\r\nimport { SDK_PERMISSIONS } from \"../../permissions/sdk-constants\";\r\nimport { useToast } from \"../../services/toastMessage\";\r\n\r\nimport {\r\n\tuseLiveStatus,\r\n\tgetSortedAgents,\r\n\tgetAgentStatusKey,\r\n\tfmtDur,\r\n\tLONG_CALL_SECS,\r\n\tWAITING_THRESHOLD,\r\n} from \"./useLiveStatus\";\r\nimport type { DashboardAgentCard } from \"./types\";\r\nimport type { MonitoringSession } from \"./types\";\r\nimport {\r\n\tC,\r\n\tSTATUS_COLORS,\r\n\tWallboardRoot,\r\n\tTopBar,\r\n\tBrandLogo,\r\n\tLiveBadge,\r\n\tPulseDot,\r\n\tKpiStrip,\r\n\tKpiCell,\r\n\tKpiValue,\r\n\tKpiLabel,\r\n\tBodyGrid,\r\n\tPanel,\r\n\tPanelHeader,\r\n\tPhTitle,\r\n\tBadge,\r\n\tStatusDot,\r\n\tAgentTable,\r\n\tAgTh,\r\n\tAgTd,\r\n\tPageInfo,\r\n\tQName,\r\n\tQNum,\r\n\tQBar,\r\n\tQBarFill,\r\n\tSbHeader,\r\n\tSbTitle,\r\n\tNoDataBox,\r\n\tFooter,\r\n\tTickerLabel,\r\n\tTickerTrack,\r\n\tTickerInner,\r\n\tTickerSpan,\r\n\tMonitorBtn,\r\n\tMonitorCard,\r\n\tslideUp,\r\n\tpulse,\r\n\trowBlink,\r\n} from \"./styles\";\r\n\r\n// ─── Agent Table Row ──────────────────────────────────────────────────────────\r\n\r\ninterface AgentTableRowProps {\r\n\tagent: DashboardAgentCard;\r\n\tdurSecs: number;\r\n\tonMonitor?: (agent: DashboardAgentCard, mode: SupervisorMonitorMode) => void;\r\n\tactiveMonitoring?: MonitoringSession | null;\r\n\tonStopMonitoring?: () => void;\r\n}\r\n\r\nconst AgentTableRow: React.FC<AgentTableRowProps> = React.memo(({\r\n\tagent,\r\n\tdurSecs,\r\n\tonMonitor,\r\n\tactiveMonitoring,\r\n\tonStopMonitoring,\r\n}) => {\r\n\tconst statusKey = getAgentStatusKey(agent.status, agent.callDirection);\r\n\tconst sc = STATUS_COLORS[statusKey];\r\n\tconst isOnCall = statusKey === \"s-oncall-in\" || statusKey === \"s-oncall-out\";\r\n\tconst isLong = isOnCall && durSecs >= LONG_CALL_SECS;\r\n\tconst isBeingMonitored = activeMonitoring?.agentId === agent.agentId;\r\n\r\n\tconst statusColor = isOnCall\r\n\t\t? agent.callDirection === \"OUTBOUND\" ? C.blue : C.green\r\n\t\t: sc.text;\r\n\tconst durColor = isLong ? C.red : statusColor;\r\n\r\n\treturn (\r\n\t\t<tr style={{ background: isLong ? \"rgba(204,42,42,.07)\" : sc.bg, transition: \"background 0.3s\" }}>\r\n\t\t\t{/* Name */}\r\n\t\t\t<AgTd sx={{ borderLeft: `2px solid ${sc.bar}`, pl: \"8px\", maxWidth: 160 }}>\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"4px\" }}>\r\n\t\t\t\t\t<Box sx={{ fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 11, fontWeight: 700, color: C.t1, whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\" }}>\r\n\t\t\t\t\t\t{agent.agentName}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t{isLong && (\r\n\t\t\t\t\t\t<Box component=\"span\" sx={{ fontSize: 7, fontWeight: 700, color: C.red, letterSpacing: 0.3, flexShrink: 0 }}>!7m</Box>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Extension */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 9, color: C.t3 }}>{agent.extension || \"—\"}</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Status */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"4px\", flexWrap: \"nowrap\" }}>\r\n\t\t\t\t\t<StatusDot dotColor={statusColor} animated={isOnCall} />\r\n\t\t\t\t\t<Box sx={{ fontSize: 8, fontWeight: 700, letterSpacing: 0.6, textTransform: \"uppercase\", color: statusColor, whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t{agent.status}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Duration */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 11, fontWeight: 700, color: durColor, whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t{fmtDur(durSecs)}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Caller number */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 9, color: C.t3 }}>\r\n\t\t\t\t\t{agent.activeCallerNumber || \"—\"}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Queue */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontSize: 9, color: C.t3, whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\", maxWidth: 110 }}>\r\n\t\t\t\t\t{agent.queueNames || \"—\"}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Calls today */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 10, fontWeight: 700, color: C.t2 }}>\r\n\t\t\t\t\t{agent.callsToday}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Monitor actions — only for on-call agents */}\r\n\t\t\t{onMonitor !== undefined && (\r\n\t\t\t\t<AgTd>\r\n\t\t\t\t\t{isOnCall && onMonitor && (\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: \"3px\", flexWrap: \"nowrap\", alignItems: \"center\" }}>\r\n\t\t\t\t\t\t\t{isBeingMonitored ? (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 7, color: C.green, fontWeight: 600, display: \"flex\", alignItems: \"center\", gap: \"2px\", whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t<StatusDot dotColor={C.green} animated />\r\n\t\t\t\t\t\t\t\t\t\t{activeMonitoring?.mode.toUpperCase()}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t<MonitorBtn variant=\"stop\" onClick={onStopMonitoring}>⏹ Stop</MonitorBtn>\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t<SDKPermissionGuard permission={SDK_PERMISSIONS.SUPERVISOR_MONITOR_LISTEN} showFallback={false}>\r\n\t\t\t\t\t\t\t\t\t\t<MonitorBtn variant=\"listen\" onClick={() => onMonitor(agent, \"listen\")} title=\"Start listening\">👂</MonitorBtn>\r\n\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t\t<SDKPermissionGuard permission={SDK_PERMISSIONS.SUPERVISOR_MONITOR_WHISPER} showFallback={false}>\r\n\t\t\t\t\t\t\t\t\t\t<MonitorBtn variant=\"whisper\" onClick={() => onMonitor(agent, \"whisper\")} title=\"Whisper to agent\">🗣</MonitorBtn>\r\n\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t\t<SDKPermissionGuard permission={SDK_PERMISSIONS.SUPERVISOR_MONITOR_BARGE} showFallback={false}>\r\n\t\t\t\t\t\t\t\t\t\t<MonitorBtn variant=\"barge\" onClick={() => onMonitor(agent, \"barge\")} title=\"Barge in to call\">📢</MonitorBtn>\r\n\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</AgTd>\r\n\t\t\t)}\r\n\t\t</tr>\r\n\t);\r\n});\r\n\r\n// ─── Main Component ───────────────────────────────────────────────────────────\r\n\r\ninterface LiveStatusPageProps {\r\n\tisTvDashboard?: boolean;\r\n}\r\n\r\nfunction LiveStatusPageInner({ isTvDashboard = false }: LiveStatusPageProps) {\r\n\tconst toast = useToast();\r\n\tconst {\r\n\t\tisLoading,\r\n\t\ttopStats,\r\n\t\tagents,\r\n\t\tqueues,\r\n\t\talerts,\r\n\t\tqueuePulse,\r\n\t\tdurations,\r\n\t\tclockStr,\r\n\t\tdateStr,\r\n\t} = useLiveStatus();\r\n\r\n\t// Supervisor monitoring state\r\n\tconst { startMonitoring, stopMonitoring, changeMode, isLoading: monitoringLoading } = useCallMonitoring();\r\n\tconst [monitoringSession, setMonitoringSession] = useState<MonitoringSession | null>(null);\r\n\tconst [showMonitorModal, setShowMonitorModal] = useState(false);\r\n\tconst [selectedAgent, setSelectedAgent] = useState<DashboardAgentCard | null>(null);\r\n\tconst [selectedMode, setSelectedMode] = useState<SupervisorMonitorMode>(\"listen\");\r\n\tconst [monitoringError, setMonitoringError] = useState<string | null>(null);\r\n\r\n\t// Open monitor modal\r\n\tconst handleOpenMonitorModal = useCallback((agent: DashboardAgentCard, mode: SupervisorMonitorMode) => {\r\n\t\tsetSelectedAgent(agent);\r\n\t\tsetSelectedMode(mode);\r\n\t\tsetShowMonitorModal(true);\r\n\t\tsetMonitoringError(null);\r\n\t}, []);\r\n\r\n\t// Start monitoring\r\n\tconst handleStartMonitoring = useCallback(async () => {\r\n\t\tif (!selectedAgent) return;\r\n\t\tif (!selectedAgent.activeCallUuid) {\r\n\t\t\tsetMonitoringError(\"No active call found for this agent\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetMonitoringError(null);\r\n\r\n\t\tconst response = await startMonitoring({\r\n\t\t\tcall_id: selectedAgent.activeCallUuid,\r\n\t\t\tagent_extension: selectedAgent.extension || \"\",\r\n\t\t\tmode: selectedMode,\r\n\t\t});\r\n\r\n\t\tif (response?.success && response?.session_id) {\r\n\t\t\tsetMonitoringSession({\r\n\t\t\t\tsessionId: response.session_id,\r\n\t\t\t\tagentId: selectedAgent.agentId,\r\n\t\t\t\tagentName: selectedAgent.agentName,\r\n\t\t\t\tagentExt: selectedAgent.extension || \"\",\r\n\t\t\t\tmode: selectedMode,\r\n\t\t\t\tcallUuid: selectedAgent.activeCallUuid,\r\n\t\t\t\tstartTime: Date.now(),\r\n\t\t\t});\r\n\t\t\tsetShowMonitorModal(false);\r\n\t\t\tif (response.message) toast.showToast(response.message, \"success\");\r\n\t\t} else {\r\n\t\t\tsetMonitoringError(response?.message || \"Failed to start monitoring\");\r\n\t\t}\r\n\t}, [selectedAgent, selectedMode, startMonitoring, toast]);\r\n\r\n\t// Stop monitoring\r\n\tconst handleStopMonitoring = useCallback(async () => {\r\n\t\tif (!monitoringSession) return;\r\n\t\tconst response = await stopMonitoring({ call_uuid: monitoringSession.callUuid });\r\n\t\tif (response?.success && response?.message) toast.showToast(response.message, \"success\");\r\n\t\tsetMonitoringSession(null);\r\n\t}, [monitoringSession, stopMonitoring, toast]);\r\n\r\n\t// Change mode\r\n\tconst handleChangeMode = useCallback(async (newMode: SupervisorMonitorMode) => {\r\n\t\tif (!monitoringSession) return;\r\n\t\tconst response = await changeMode({ call_uuid: monitoringSession.callUuid, mode: newMode });\r\n\t\tif (response?.success) {\r\n\t\t\tsetMonitoringSession((prev) => prev ? { ...prev, mode: newMode } : null);\r\n\t\t\tif (response.message) toast.showToast(response.message, \"success\");\r\n\t\t}\r\n\t}, [monitoringSession, changeMode, toast]);\r\n\r\n\t// Close modal\r\n\tconst handleCloseMonitorModal = useCallback(() => {\r\n\t\tsetShowMonitorModal(false);\r\n\t\tsetSelectedAgent(null);\r\n\t\tsetMonitoringError(null);\r\n\t}, []);\r\n\r\n\t// Auto-stop when monitored agent's call ends\r\n\tuseEffect(() => {\r\n\t\tif (!monitoringSession) return;\r\n\t\tconst agent = agents.find((a) => a.agentId === monitoringSession.agentId);\r\n\t\tif (!agent) return;\r\n\t\tconst isOnCall = agent.status?.toUpperCase() === \"ONCALL\";\r\n\t\tconst callUuidChanged = agent.activeCallUuid !== monitoringSession.callUuid;\r\n\t\tif (!isOnCall || callUuidChanged) {\r\n\t\t\tsetMonitoringSession(null);\r\n\t\t\tsetShowMonitorModal(false);\r\n\t\t\ttoast.showToast(\"Monitoring ended — agent call has ended.\", \"info\");\r\n\t\t}\r\n\t}, [agents, monitoringSession, toast]);\r\n\r\n\t// Derived counts\r\n\tconst sorted = getSortedAgents(agents);\r\n\tconst oncallCount = topStats?.onCall ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection).startsWith(\"s-oncall\")).length;\r\n\tconst breakCount = topStats?.onBreak ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-break\").length;\r\n\tconst longCallCount = agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-oncall-in\" && (durations[a.agentId] || 0) >= LONG_CALL_SECS).length;\r\n\r\n\tconst kpiTotalAgents = topStats?.totalAgents ?? agents.length;\r\n\tconst kpiLoginCount = topStats?.loggedIn ?? agents.length;\r\n\tconst kpiIdleCount = topStats?.idleReady ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-idle\").length;\r\n\tconst kpiOnCallCount = topStats?.onCall ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection).startsWith(\"s-oncall\")).length;\r\n\tconst kpiWrapup = topStats?.wrapup ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-wrapup\").length;\r\n\tconst kpiBreak = topStats?.onBreak ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-break\").length;\r\n\tconst kpiNotLogged = topStats?.notLogged ?? Math.max(0, kpiTotalAgents - kpiLoginCount);\r\n\r\n\tconst tickerItems = queues.map((q) => ({\r\n\t\ttext: `${q.queueName} Queue — <b>${q.waitingCalls > 0 ? q.waitingCalls + \" waiting\" : \"all clear\"}</b> · avg ${q.avgWaitFormatted}`,\r\n\t\twarn: q.waitingCalls > 0,\r\n\t\tgood: q.waitingCalls === 0,\r\n\t}));\r\n\r\n\tif (isLoading) {\r\n\t\treturn (\r\n\t\t\t<Box sx={{\r\n\t\t\t\theight: \"100vh\", display: \"flex\", flexDirection: \"column\",\r\n\t\t\t\talignItems: \"center\", justifyContent: \"center\", background: \"transparent\", gap: 2,\r\n\t\t\t}}>\r\n\t\t\t\t<CircularProgress size={48} sx={{ color: C.blue }} />\r\n\t\t\t\t<Box sx={{ fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 16, fontWeight: 600, color: C.t2, letterSpacing: 1, textTransform: \"uppercase\" }}>\r\n\t\t\t\t\tLoading Live Status...\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<WallboardRoot isTv={isTvDashboard}>\r\n\r\n\t\t\t{/* ══ TOP BAR (TV only) ════════════════════════════════════ */}\r\n\t\t\t{isTvDashboard && (\r\n\t\t\t\t<TopBar>\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"10px\" }}>\r\n\t\t\t\t\t\t<BrandLogo>\r\n\t\t\t\t\t\t\t<svg viewBox=\"0 0 26 26\" fill=\"none\" width={16} height={16}>\r\n\t\t\t\t\t\t\t\t<rect width=\"26\" height=\"26\" rx=\"5\" fill=\"#1A5F6C\" />\r\n\t\t\t\t\t\t\t\t<path d=\"M5 18 Q5 8 13 8 Q21 8 21 18\" stroke=\"#1565c8\" strokeWidth=\"2.5\" fill=\"none\" strokeLinecap=\"round\" />\r\n\t\t\t\t\t\t\t\t<path d=\"M9 18 Q9 12 13 12 Q17 12 17 18\" stroke=\"#0a9a62\" strokeWidth=\"2\" fill=\"none\" strokeLinecap=\"round\" />\r\n\t\t\t\t\t\t\t\t<circle cx=\"13\" cy=\"19\" r=\"2\" fill=\"#1565c8\" />\r\n\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t</BrandLogo>\r\n\t\t\t\t\t\t<Box sx={{ color: \"#fff\" }}>\r\n\t\t\t\t\t\t\t<Box sx={{ fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 13, fontWeight: 800, letterSpacing: 1.2, lineHeight: 1 }}>AHS</Box>\r\n\t\t\t\t\t\t\t<Box sx={{ fontSize: 7.5, letterSpacing: 1, color: \"rgba(255,255,255,.45)\", textTransform: \"uppercase\" }}>Supervisor Wallboard</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<LiveBadge>\r\n\t\t\t\t\t\t\t<PulseDot />\r\n\t\t\t\t\t\t\tLIVE\r\n\t\t\t\t\t\t</LiveBadge>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box sx={{ textAlign: \"right\" }}>\r\n\t\t\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 14, fontWeight: 700, color: \"#fff\", letterSpacing: 1.5, lineHeight: 1 }}>{clockStr}</Box>\r\n\t\t\t\t\t\t<Box sx={{ fontSize: 7.5, color: \"rgba(255,255,255,.4)\", letterSpacing: 0.5, mt: \"1px\" }}>{dateStr}</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</TopBar>\r\n\t\t\t)}\r\n\r\n\t\t\t{/* ══ KPI STRIP ══════════════════════════════════════════════ */}\r\n\t\t\t<KpiStrip>\r\n\t\t\t\t<KpiCell accentColor=\"#94a3b8\"><KpiValue kcolor={C.t1}>{kpiTotalAgents}</KpiValue><KpiLabel>Total Agents</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.green}><KpiValue kcolor={C.green}>{kpiLoginCount}</KpiValue><KpiLabel>Logged In</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor=\"#cbd5e1\"><KpiValue kcolor=\"#94a3b8\">{kpiNotLogged}</KpiValue><KpiLabel>Not Logged</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.teal}><KpiValue kcolor={C.teal}>{kpiIdleCount}</KpiValue><KpiLabel>Idle / Ready</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.amber}><KpiValue kcolor={C.amber}>{kpiOnCallCount}</KpiValue><KpiLabel>On Call</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.green}><KpiValue kcolor={C.green}>{topStats?.inboundToday ?? 0}</KpiValue><KpiLabel>Inbound</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.blue}><KpiValue kcolor={C.blue}>{topStats?.outboundToday ?? 0}</KpiValue><KpiLabel>Outbound</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.purple}><KpiValue kcolor={C.purple}>{kpiWrapup}</KpiValue><KpiLabel>Wrapup</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.red}><KpiValue kcolor={C.red}>{kpiBreak}</KpiValue><KpiLabel>On Break</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.blue}><KpiValue kcolor={C.blue}>{topStats?.callsToday ?? 0}</KpiValue><KpiLabel>Calls Today</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.red}><KpiValue kcolor={C.red}>{topStats?.abandonedToday ?? 0}</KpiValue><KpiLabel>Abandoned</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.green}><KpiValue kcolor={C.green}>{topStats?.slaThisHrPct != null ? `${topStats.slaThisHrPct}%` : \"—\"}</KpiValue><KpiLabel>SLA This Hr</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.amber}><KpiValue kcolor={C.amber}>{topStats?.avgSpeedAnswerFormatted ?? \"00:00\"}</KpiValue><KpiLabel>Avg Speed Ans</KpiLabel></KpiCell>\r\n\t\t\t</KpiStrip>\r\n\r\n\t\t\t{/* ══ BODY ══════════════════════════════════════════════════ */}\r\n\t\t\t<BodyGrid>\r\n\r\n\t\t\t\t{/* Column 1: Agent Status */}\r\n\t\t\t\t<Panel>\r\n\t\t\t\t\t<PanelHeader>\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t<PhTitle>Agent Status</PhTitle>\r\n\t\t\t\t\t\t\t<Badge bg={C.amberLt} color={C.amber} border={C.amberBd}>{oncallCount} On-Call</Badge>\r\n\t\t\t\t\t\t\t<Badge bg={C.redLt} color={C.red} border={C.redBd}>{breakCount} Break</Badge>\r\n\t\t\t\t\t\t\t{longCallCount > 0 && (\r\n\t\t\t\t\t\t\t\t<Badge bg={C.redLt} color={C.red} border={C.redBd}>{longCallCount} Long</Badge>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box sx={{ fontSize: 8, color: C.t3 }}>{agents.length} agents</Box>\r\n\t\t\t\t\t</PanelHeader>\r\n\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\toverflowX: \"auto\", overflowY: \"auto\", flex: 1, minHeight: 0,\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar\": { width: 3, height: 3 },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-track\": { background: C.bg2, borderRadius: 2 },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": { background: C.t4, borderRadius: 2, \"&:hover\": { background: C.t3 } },\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<AgentTable>\r\n\t\t\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"20%\" }}>Agent</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"7%\" }}>Ext</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"14%\" }}>Status</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"10%\" }}>Duration</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"12%\" }}>Caller</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"17%\" }}>Queue</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"6%\" }}>Calls</AgTh>\r\n\t\t\t\t\t\t\t\t\t{!isTvDashboard && <AgTh style={{ width: \"14%\" }}>Actions</AgTh>}\r\n\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t</thead>\r\n\t\t\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t\t\t{sorted.length > 0 ? sorted.map((a) => (\r\n\t\t\t\t\t\t\t\t\t<AgentTableRow\r\n\t\t\t\t\t\t\t\t\t\tkey={a.agentId}\r\n\t\t\t\t\t\t\t\t\t\tagent={a}\r\n\t\t\t\t\t\t\t\t\t\tdurSecs={durations[a.agentId] || 0}\r\n\t\t\t\t\t\t\t\t\t\tonMonitor={isTvDashboard ? undefined : handleOpenMonitorModal}\r\n\t\t\t\t\t\t\t\t\t\tactiveMonitoring={monitoringSession}\r\n\t\t\t\t\t\t\t\t\t\tonStopMonitoring={handleStopMonitoring}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)) : (\r\n\t\t\t\t\t\t\t\t\t<tr><AgTd colSpan={isTvDashboard ? 7 : 8}><NoDataBox>No data available</NoDataBox></AgTd></tr>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</tbody>\r\n\t\t\t\t\t\t</AgentTable>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<PageInfo>\r\n\t\t\t\t\t\t<span>{agents.length} agents · {oncallCount} on call · {agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-idle\").length} idle</span>\r\n\t\t\t\t\t\t<span>Auto-refreshes every 5s</span>\r\n\t\t\t\t\t</PageInfo>\r\n\t\t\t\t</Panel>\r\n\r\n\t\t\t\t{/* Column 2: Queue Performance + Queue Pulse + Live Alerts */}\r\n\t\t\t\t<Panel sx={{ borderRight: `1px solid ${C.b1}`, maxHeight: { xs: \"none\", lg: \"calc(100vh - 96px)\" } }}>\r\n\t\t\t\t\t<PanelHeader>\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t<PhTitle>Queue Performance</PhTitle>\r\n\t\t\t\t\t\t\t<Badge bg={C.greenLt} color={C.green} border={C.greenBd}>All Healthy</Badge>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Badge bg={C.bg2} color={C.t3} border={C.b2}>Live SLA</Badge>\r\n\t\t\t\t\t</PanelHeader>\r\n\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\tflex: 1, minHeight: 0,\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar\": { width: 3 },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-track\": { background: C.bg2, borderRadius: 2 },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": { background: C.t4, borderRadius: 2, \"&:hover\": { background: C.t3 } },\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<Box sx={{ overflowX: \"auto\", \"&::-webkit-scrollbar\": { height: 3 }, \"&::-webkit-scrollbar-track\": { background: C.bg2, borderRadius: 2 }, \"&::-webkit-scrollbar-thumb\": { background: C.t4, borderRadius: 2 } }}>\r\n\t\t\t\t\t\t\t<AgentTable>\r\n\t\t\t\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t\t<AgTh>Queue</AgTh><AgTh>Agents</AgTh><AgTh>Active</AgTh><AgTh>Waiting</AgTh>\r\n\t\t\t\t\t\t\t\t\t\t<AgTh>Avg Wait</AgTh><AgTh>Load</AgTh><AgTh>SLA%</AgTh><AgTh>C/hr</AgTh>\r\n\t\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t</thead>\r\n\t\t\t\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t\t\t\t{queues.length > 0 ? queues.map((q) => {\r\n\t\t\t\t\t\t\t\t\t\tconst loadColor = q.loadPct > 50 ? C.red : q.loadPct > 25 ? C.amber : C.green;\r\n\t\t\t\t\t\t\t\t\t\tconst slaColor = q.slaPct >= 95 ? C.green : q.slaPct >= 85 ? C.amber : C.red;\r\n\t\t\t\t\t\t\t\t\t\tconst isWaitingHigh = q.waitingCalls > WAITING_THRESHOLD;\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box component=\"tr\" key={q.queueId} sx={isWaitingHigh ? { animation: `${rowBlink} 1s ease infinite` } : q.slaPct < 90 ? { background: \"rgba(204,42,42,.04)\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QName>{q.queueName}</QName></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={C.blue}>{q.totalAgents}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={C.amber}>{q.activeAgents}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={isWaitingHigh ? C.red : q.waitingCalls > 0 ? C.red : C.green}>{q.waitingCalls}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={C.green}>{q.avgWaitFormatted}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"5px\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<QBar><QBarFill w={q.loadPct} barColor={loadColor} /></QBar>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 10, color: C.t3 }}>{q.loadPct}%</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={slaColor}>{q.slaPct}%</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={C.blue}>{q.callsPerHour}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t}) : (\r\n\t\t\t\t\t\t\t\t\t\t<tr><AgTd colSpan={8}><NoDataBox>No data available</NoDataBox></AgTd></tr>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</tbody>\r\n\t\t\t\t\t\t\t</AgentTable>\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{/* ── Queue Pulse ── */}\r\n\t\t\t\t\t\t<Box sx={{ borderTop: `1px solid ${C.b1}` }}>\r\n\t\t\t\t\t\t\t<SbHeader>\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"7px\" }}>\r\n\t\t\t\t\t\t\t\t\t<svg width=\"11\" height=\"11\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n\t\t\t\t\t\t\t\t\t\t<path d=\"M1 8h2l2-5 2 9 2-7 2 5 1-2h3\" stroke={C.blue} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\" />\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t<SbTitle>Queue Pulse</SbTitle>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t<Badge bg={C.greenLt} color={C.green} border={C.greenBd}>Live</Badge>\r\n\t\t\t\t\t\t\t</SbHeader>\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr 1fr\", borderBottom: `1px solid ${C.b1}` }}>\r\n\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t{ label: \"In Queue\", value: queuePulse?.runningInQueue ?? 0, color: C.amber, bg: C.amberLt },\r\n\t\t\t\t\t\t\t\t\t{ label: \"Ready\", value: queuePulse?.readyAgents ?? 0, color: C.green, bg: C.greenLt },\r\n\t\t\t\t\t\t\t\t\t{ label: \"Avg Wait\", value: queuePulse?.avgWaitFormatted ?? \"--:--\", color: C.blue, bg: C.blueLt },\r\n\t\t\t\t\t\t\t\t].map((s) => (\r\n\t\t\t\t\t\t\t\t\t<Box key={s.label} sx={{ p: \"12px\", borderRight: `1px solid ${C.b1}`, \"&:last-child\": { borderRight: \"none\" }, background: s.bg }}>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 20, fontWeight: 800, color: s.color, lineHeight: 1 }}>{s.value}</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 8, letterSpacing: 0.8, textTransform: \"uppercase\", color: s.color, mt: \"4px\", fontWeight: 600, opacity: 0.75 }}>{s.label}</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{/* ── Live Alerts ── */}\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t<SbHeader>\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"7px\" }}>\r\n\t\t\t\t\t\t\t\t\t<svg width=\"11\" height=\"11\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n\t\t\t\t\t\t\t\t\t\t<path d=\"M8 1.5a5 5 0 0 1 5 5v2.5l1 2H2l1-2V6.5a5 5 0 0 1 5-5z\" stroke={alerts.length > 0 ? C.amber : C.t3} strokeWidth=\"1.4\" strokeLinejoin=\"round\" />\r\n\t\t\t\t\t\t\t\t\t\t<path d=\"M6.5 13a1.5 1.5 0 0 0 3 0\" stroke={alerts.length > 0 ? C.amber : C.t3} strokeWidth=\"1.4\" strokeLinecap=\"round\" />\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t<SbTitle>Live Alerts</SbTitle>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t<Badge bg={alerts.length > 0 ? C.amberLt : C.bg2} color={alerts.length > 0 ? C.amber : C.t3} border={alerts.length > 0 ? C.amberBd : C.b2}>{alerts.length}</Badge>\r\n\t\t\t\t\t\t\t</SbHeader>\r\n\t\t\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\t\t\toverflowY: \"auto\", maxHeight: 220,\r\n\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar\": { width: 3 },\r\n\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar-track\": { background: C.bg2, borderRadius: 2 },\r\n\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": { background: C.t4, borderRadius: 2, \"&:hover\": { background: C.t3 } },\r\n\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t{alerts.length > 0 ? alerts.map((a, i) => {\r\n\t\t\t\t\t\t\t\t\tconst sk = a.severity?.toLowerCase() === \"critical\" ? \"red\" : a.severity?.toLowerCase() === \"warning\" ? \"amber\" : \"blue\";\r\n\t\t\t\t\t\t\t\t\tconst ALERT_COLORS: Record<string, { bg: string; color: string }> = {\r\n\t\t\t\t\t\t\t\t\t\tred: { bg: C.redLt, color: C.red },\r\n\t\t\t\t\t\t\t\t\t\tamber: { bg: C.amberLt, color: C.amber },\r\n\t\t\t\t\t\t\t\t\t\tblue: { bg: C.blueLt, color: C.blue },\r\n\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\tconst ac = ALERT_COLORS[sk] ?? ALERT_COLORS.blue;\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t<Box key={i} sx={{ display: \"flex\", gap: \"10px\", px: \"12px\", py: \"9px\", borderBottom: `1px solid ${C.b1}`, background: i % 2 === 0 ? \"transparent\" : C.bg2 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ width: 8, height: 8, borderRadius: \"50%\", background: ac.color, flexShrink: 0, mt: \"3px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ flex: 1, minWidth: 0 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 11, fontWeight: 600, color: C.t1, mb: \"2px\" }}>{a.alertTitle}</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 9, color: C.t3, lineHeight: 1.4 }}>{a.alertMessage}</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ flexShrink: 0, display: \"flex\", flexDirection: \"column\", alignItems: \"flex-end\", gap: \"4px\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 7, fontWeight: 700, px: \"5px\", py: \"1px\", borderRadius: \"3px\", background: ac.bg, color: ac.color, textTransform: \"uppercase\", letterSpacing: 0.5 }}>{a.severity}</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 9, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{(() => { try { const [h, m] = a.alertTime.split(\":\"); const hr = parseInt(h, 10); return `${hr % 12 || 12}:${m} ${hr >= 12 ? \"PM\" : \"AM\"}`; } catch { return a.alertTime; } })()}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}) : <NoDataBox>No active alerts</NoDataBox>}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Panel>\r\n\r\n\t\t\t</BodyGrid>\r\n\r\n\t\t\t{/* ══ FOOTER TICKER ══════════════════════════════════════════ */}\r\n\t\t\t<Footer>\r\n\t\t\t\t<TickerLabel>AHS Live</TickerLabel>\r\n\t\t\t\t<TickerTrack>\r\n\t\t\t\t\t<TickerInner>\r\n\t\t\t\t\t\t{[...tickerItems, ...tickerItems].map((t, i) => (\r\n\t\t\t\t\t\t\t<TickerSpan key={i} isWarn={t.warn} isGood={t.good} dangerouslySetInnerHTML={{ __html: t.text }} />\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</TickerInner>\r\n\t\t\t\t</TickerTrack>\r\n\t\t\t</Footer>\r\n\r\n\t\t\t{/* ══ SUPERVISOR MONITOR MODAL ════════════════════════════════ */}\r\n\t\t\t{showMonitorModal && selectedAgent && (() => {\r\n\t\t\t\tconst modeConfig = {\r\n\t\t\t\t\tlisten: { icon: \"👂\", label: \"Listen\", desc: \"Silent – agent unaware\", accent: C.blue, accentLt: \"#e3f2fd\", accentText: \"#1565c0\" },\r\n\t\t\t\t\twhisper: { icon: \"🗣️\", label: \"Whisper\", desc: \"Only agent hears you\", accent: \"#ef6c00\", accentLt: \"#fff3e0\", accentText: \"#e65100\" },\r\n\t\t\t\t\tbarge: { icon: \"📢\", label: \"Barge\", desc: \"Both parties hear you\", accent: \"#c2185b\", accentLt: \"#fce4ec\", accentText: \"#880e4f\" },\r\n\t\t\t\t} as const;\r\n\t\t\t\tconst m = modeConfig[selectedMode];\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Box onClick={handleCloseMonitorModal} sx={{ position: \"fixed\", inset: 0, zIndex: 1000 }} />\r\n\t\t\t\t\t\t<MonitorCard>\r\n\t\t\t\t\t\t\t<Box sx={{ height: 3, background: m.accent }} />\r\n\t\t\t\t\t\t\t<Box sx={{ p: \"12px 14px\" }}>\r\n\t\t\t\t\t\t\t\t{/* Header */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 1.5 }}>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ width: 32, height: 32, borderRadius: \"10px\", background: m.accentLt, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", fontSize: 16 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{m.icon}\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontWeight: 700, fontSize: 13, color: C.t1, lineHeight: 1.2 }}>Monitor Call</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 10, color: C.t3 }}>{selectedAgent.agentName} · ext {selectedAgent.extension || \"\"}</Box>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"button\" onClick={handleCloseMonitorModal} sx={{ border: \"none\", background: \"none\", cursor: \"pointer\", color: C.t4, fontSize: 18, lineHeight: 1, p: 0, \"&:hover\": { color: C.t2 } }}>×</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{/* Call snapshot */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: \"4px 0\", background: C.bg2, borderRadius: \"8px\", p: \"8px 10px\", mb: 1.5 }}>\r\n\t\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t\t[\"Customer\", selectedAgent.activeCallerNumber || \"—\"],\r\n\t\t\t\t\t\t\t\t\t\t[\"Duration\", fmtDur(durations[selectedAgent.agentId] || 0)],\r\n\t\t\t\t\t\t\t\t\t].map(([label, value]) => (\r\n\t\t\t\t\t\t\t\t\t\t<React.Fragment key={label}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 10, color: C.t3, fontWeight: 500 }}>{label}</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 10, fontWeight: 600, color: C.t1, textAlign: \"right\" }}>{value}</Box>\r\n\t\t\t\t\t\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{/* Mode pills */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: \"6px\", mb: 1.5 }}>\r\n\t\t\t\t\t\t\t\t\t{([\"listen\", \"whisper\", \"barge\"] as const).map((mode) => {\r\n\t\t\t\t\t\t\t\t\t\tconst mc = modeConfig[mode];\r\n\t\t\t\t\t\t\t\t\t\tconst active = selectedMode === mode;\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box key={mode} onClick={() => setSelectedMode(mode)} sx={{ flex: 1, textAlign: \"center\", py: \"5px\", borderRadius: \"20px\", fontSize: 9, fontWeight: 700, letterSpacing: 0.4, cursor: \"pointer\", textTransform: \"uppercase\", transition: \"all 0.15s\", background: active ? mc.accent : C.bg2, color: active ? \"#fff\" : C.t3, border: `1px solid ${active ? mc.accent : \"transparent\"}`, \"&:hover\": { background: active ? mc.accent : C.bg3 } }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{mc.icon} {mc.label}\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{/* Mode hint */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 10, color: m.accentText, background: m.accentLt, borderRadius: \"6px\", px: 1.25, py: 0.75, mb: 1.5, display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t<span style={{ fontSize: 11 }}>ℹ️</span> {m.desc} · Your dialer will ring to connect.\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{/* Error */}\r\n\t\t\t\t\t\t\t\t{monitoringError && (\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ mb: 1.5, px: 1.25, py: 0.75, background: C.redLt, borderRadius: \"6px\", color: C.red, fontSize: 11 }}>\r\n\t\t\t\t\t\t\t\t\t\t{monitoringError}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{/* Actions */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: \"8px\" }}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"button\" onClick={handleCloseMonitorModal} sx={{ flex: 1, py: \"7px\", border: `1px solid ${C.b2}`, borderRadius: \"8px\", cursor: \"pointer\", fontSize: 11, fontWeight: 500, background: \"transparent\", color: C.t2, \"&:hover\": { background: C.bg2 } }}>Cancel</Box>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"button\" onClick={handleStartMonitoring} disabled={monitoringLoading} sx={{ flex: 2, py: \"7px\", border: \"none\", borderRadius: \"8px\", cursor: monitoringLoading ? \"not-allowed\" : \"pointer\", fontSize: 11, fontWeight: 700, background: m.accent, color: \"#fff\", opacity: monitoringLoading ? 0.7 : 1, transition: \"opacity 0.15s\", \"&:hover\": { opacity: monitoringLoading ? 0.7 : 0.88 } }}>\r\n\t\t\t\t\t\t\t\t\t\t{monitoringLoading ? \"Starting…\" : `▶ Start ${m.label}`}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</MonitorCard>\r\n\t\t\t\t\t</>\r\n\t\t\t\t);\r\n\t\t\t})()}\r\n\r\n\t\t\t{/* ══ ACTIVE MONITORING INDICATOR ════════════════════════════ */}\r\n\t\t\t{monitoringSession && (() => {\r\n\t\t\t\tconst sessionModeConfig = {\r\n\t\t\t\t\tlisten: { icon: \"👂\", accent: C.blue, accentLt: \"#e3f2fd\", label: \"Listen\" },\r\n\t\t\t\t\twhisper: { icon: \"🗣️\", accent: \"#ef6c00\", accentLt: \"#fff3e0\", label: \"Whisper\" },\r\n\t\t\t\t\tbarge: { icon: \"📢\", accent: \"#c2185b\", accentLt: \"#fce4ec\", label: \"Barge\" },\r\n\t\t\t\t} as const;\r\n\t\t\t\tconst sm = sessionModeConfig[monitoringSession.mode as keyof typeof sessionModeConfig] ?? sessionModeConfig.listen;\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<Box sx={{ position: \"fixed\", bottom: 20, right: 20, width: 268, background: \"#fff\", borderRadius: \"14px\", boxShadow: \"0 8px 28px rgba(13,30,53,0.16), 0 2px 6px rgba(13,30,53,0.08)\", zIndex: 999, overflow: \"hidden\", animation: `${slideUp} 0.22s cubic-bezier(.22,.68,0,1.2)` }}>\r\n\t\t\t\t\t\t<Box sx={{ height: 3, background: sm.accent }} />\r\n\t\t\t\t\t\t<Box sx={{ p: \"10px 12px\" }}>\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", mb: 1 }}>\r\n\t\t\t\t\t\t\t\t<Box sx={{ width: 8, height: 8, borderRadius: \"50%\", background: C.green, flexShrink: 0, animation: `${pulse} 1.6s ease infinite` }} />\r\n\t\t\t\t\t\t\t\t<Box sx={{ fontWeight: 700, fontSize: 11, color: C.t1, textTransform: \"uppercase\", letterSpacing: 0.6 }}>\r\n\t\t\t\t\t\t\t\t\t{sm.icon} {sm.label} Active\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t<Box sx={{ ml: \"auto\", fontFamily: \"'JetBrains Mono', monospace\", fontSize: 11, fontWeight: 600, color: sm.accent }}>\r\n\t\t\t\t\t\t\t\t\t{fmtDur(Math.floor((Date.now() - monitoringSession.startTime) / 1000))}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t<Box sx={{ fontSize: 11, color: C.t2, mb: 1, pl: \"16px\" }}>\r\n\t\t\t\t\t\t\t\t{monitoringSession.agentName}\r\n\t\t\t\t\t\t\t\t<Box component=\"span\" sx={{ color: C.t4, mx: 0.5 }}>·</Box>\r\n\t\t\t\t\t\t\t\text {monitoringSession.agentExt}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t<Box sx={{ borderTop: `1px solid ${C.b1}`, mb: 1 }} />\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: \"5px\" }}>\r\n\t\t\t\t\t\t\t\t{([\"listen\", \"whisper\", \"barge\"] as const).filter(m => m !== monitoringSession.mode).map((mode) => {\r\n\t\t\t\t\t\t\t\t\tconst mc = sessionModeConfig[mode];\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t<MonitorBtn key={mode} variant={mode} onClick={() => handleChangeMode(mode)} style={{ flex: 1, justifyContent: \"center\", padding: \"4px 0\", fontSize: 9, borderRadius: 4 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{mc.icon} {mc.label}\r\n\t\t\t\t\t\t\t\t\t\t</MonitorBtn>\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t<MonitorBtn variant=\"stop\" onClick={handleStopMonitoring} style={{ flex: 1, justifyContent: \"center\", padding: \"4px 0\", fontSize: 9, borderRadius: 4 }}>\r\n\t\t\t\t\t\t\t\t\t⏹ Stop\r\n\t\t\t\t\t\t\t\t</MonitorBtn>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t);\r\n\t\t\t})()}\r\n\r\n\t\t</WallboardRoot>\r\n\t);\r\n}\r\n\r\n// ─── SDK-wrapped export ───────────────────────────────────────────────────────\r\n\r\nexport default function LiveStatusPage(props: LiveStatusPageProps) {\r\n\treturn (\r\n\t\t<SDKProvider>\r\n\t\t\t<LiveStatusPageInner {...props} />\r\n\t\t</SDKProvider>\r\n\t);\r\n}\r\n","import axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type { MgmtDashboardParams, MgmtDashboardResponse } from \"./types\";\r\n\r\nfunction buildQs(params: MgmtDashboardParams): 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 != null) qs.append(\"agent_id\", String(params.agent_id));\r\n\tconst str = qs.toString();\r\n\treturn str ? `?${str}` : \"\";\r\n}\r\n\r\nexport async function getManagementDashboard(params: MgmtDashboardParams): Promise<MgmtDashboardResponse> {\r\n\tconst res = await axiosInstance.get<MgmtDashboardResponse>(\r\n\t\t`${END_POINT.MANAGEMENT_DASHBOARD}${buildQs(params)}`,\r\n\t);\r\n\treturn res.data;\r\n}\r\n","import React, { useState, useEffect, useCallback, useMemo, useRef } from \"react\";\r\nimport {\r\n\tBox, Paper, Stack, Typography, CircularProgress, Alert,\r\n\tTable, TableBody, TableCell, TableContainer, TableHead, TableRow,\r\n\tTextField, InputAdornment, Chip, Radio, RadioGroup, FormControlLabel,\r\n} from \"@mui/material\";\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport {\r\n\tComposedChart, Bar, Line, XAxis, YAxis, CartesianGrid,\r\n\tTooltip as RTooltip, ResponsiveContainer,\r\n} from \"recharts\";\r\n\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\r\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\r\n\r\nimport PageHeader from \"../common/components/PageHeader\";\r\nimport ReportFilterBar, { type QuickRange } from \"../common/components/ReportFilterBar\";\r\nimport AppButton from \"../common/components/AppButton\";\r\nimport { headCellSx as sharedHeadSx } from \"../common/utils/tableStyles\";\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { getManagementDashboard } from \"./useManagementDashboard\";\r\nimport type { MgmtDashboardResponse } from \"./types\";\r\n\r\n/* ═══════════════════════ COLORS ═══════════════════════ */\r\nconst C = {\r\n\tnavy: \"#1a3a6b\", blue: \"#2b6cb0\", green: \"#276749\", amber: \"#c47c00\",\r\n\tred: \"#c53030\", teal: \"#0b7a8f\",\r\n\tsurface: \"#fff\", s2: \"#f7f9fc\", s3: \"#eef2f7\",\r\n\tb1: \"rgba(20,50,100,.07)\", b2: \"rgba(20,50,100,.13)\",\r\n\tt1: \"#2d3748\", t2: \"#4a5568\", t3: \"#718096\",\r\n\tblt: \"#e8f0fc\", glt: \"#e4f6ef\", alt: \"#fdf3e0\", rlt: \"#fde8e8\", tlt: \"#e3f4f7\",\r\n};\r\n\r\n/* ═══════════════════════ STYLES ═══════════════════════ */\r\nconst headSx = { ...sharedHeadSx as object, py: 1, px: 1.5 };\r\nconst cellSx = { fontSize: 12, py: 0.8, px: 1.5, borderBottom: `1px solid ${C.b1}` };\r\nconst monoSx = { fontFamily: \"'JetBrains Mono', monospace\", fontSize: 12, fontWeight: 700 };\r\nconst labelSx = { fontSize: 11, fontWeight: 700, letterSpacing: 0.7, textTransform: \"uppercase\" as const, color: C.t2 };\r\nconst cardPaper = { background: C.surface, border: `1px solid #dce3ef`, borderRadius: \"6px\", overflow: \"hidden\", boxShadow: \"0 1px 4px rgba(0,0,0,.09)\" };\r\nconst cardHeader = { px: 1.5, py: 1, background: C.s2, borderBottom: `1px solid ${C.b1}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" };\r\n\r\n/* ═══════════════════════ EMPTY STATE ═══════════════════════ */\r\nconst EMPTY: MgmtDashboardResponse = {\r\n\tinbound: { total: 0, answered: 0, unanswered: 0, answered_pct: 0, unanswered_pct: 0 },\r\n\toutbound: { total: 0, answered: 0, unanswered: 0, answered_pct: 0, unanswered_pct: 0 },\r\n\ttotals: { total_calls: 0, total_answered: 0, highest_duration: \"00:00:00\", lowest_duration: \"00:00:00\", calls_lt_30sec: 0, avg_inbound_duration: \"00:00:00\", avg_outbound_duration: \"00:00:00\" },\r\n\tabandoned:{ total: 0, called_back: 0, to_call: 0, called_back_pct: 0, to_call_pct: 0, avg_callback_duration: \"00:00:00\" },\r\n\tivr: { total: 0, called_back: 0, to_call: 0, called_back_pct: 0, to_call_pct: 0 },\r\n\twaiting: { avg_wait_time: \"00:00:00\", avg_lang_selection: \"00:00:00\", avg_queue_wait: \"00:00:00\" },\r\n\tcht: [],\r\n\tqueue_calls: [],\r\n\thourly_chart: [],\r\n\trepeated_calls: [],\r\n};\r\n\r\n/* ═══════════════════════ SUB-COMPONENTS ═══════════════════════ */\r\n\r\nfunction DirectionCard({ title, data }: Readonly<{\r\n\ttitle: string;\r\n\tdata: MgmtDashboardResponse[\"inbound\"];\r\n}>) {\r\n\treturn (\r\n\t\t<Paper sx={cardPaper}>\r\n\t\t\t<Box sx={cardHeader}>\r\n\t\t\t\t<Typography sx={labelSx}>{title}</Typography>\r\n\t\t\t</Box>\r\n\t\t\t<Box sx={{ p: 1.5 }}>\r\n\t\t\t\t<Typography sx={{ fontFamily: \"'Barlow Condensed', sans-serif\", fontSize: 32, fontWeight: 800, color: C.navy, lineHeight: 1, mb: 1.2 }}>\r\n\t\t\t\t\t{data.total.toLocaleString()}\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: 1, borderTop: `2px solid ${C.s3}`, pt: 1 }}>\r\n\t\t\t\t\t{[\r\n\t\t\t\t\t\t{ label: \"ANSWERED\", value: data.answered, pct: data.answered_pct, color: C.blue },\r\n\t\t\t\t\t\t{ label: \"UNANSWERED\", value: data.unanswered, pct: data.unanswered_pct, color: C.t3 },\r\n\t\t\t\t\t].map(({ label, value, pct, color }) => (\r\n\t\t\t\t\t\t<Box key={label}>\r\n\t\t\t\t\t\t\t<Typography sx={{ fontSize: 10, fontWeight: 700, letterSpacing: 0.5, color: C.t3, mb: 0.3 }}>{label}</Typography>\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"baseline\", gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 18, fontWeight: 700, color }}>{value.toLocaleString()}</Typography>\r\n\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3 }}>{pct.toFixed(1)}%</Typography>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t</Paper>\r\n\t);\r\n}\r\n\r\nfunction QueueCallsCard({ data }: Readonly<{ data: MgmtDashboardResponse[\"queue_calls\"] }>) {\r\n\treturn (\r\n\t\t<Paper sx={cardPaper}>\r\n\t\t\t<Box sx={cardHeader}>\r\n\t\t\t\t<Typography sx={labelSx}>Queue Wise Calls</Typography>\r\n\t\t\t</Box>\r\n\t\t\t<Box sx={{ p: 1.5 }}>\r\n\t\t\t\t{data.length === 0 && <Typography sx={{ fontSize: 12, color: C.t3, textAlign: \"center\", py: 2 }}>No data</Typography>}\r\n\t\t\t\t{data.map((q, i) => (\r\n\t\t\t\t\t<Box key={q.queue_name} sx={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", py: 0.6, borderBottom: `1px solid #f0f0f0`, \"&:last-child\": { borderBottom: \"none\" } }}>\r\n\t\t\t\t\t\t<Typography sx={{ fontSize: 12, fontWeight: 600, color: C.t2 }}>{q.queue_name}</Typography>\r\n\t\t\t\t\t\t<Box sx={{ background: i === 0 ? \"#3182ce\" : \"#90cdf4\", color: i === 0 ? \"#fff\" : \"#1a365d\", borderRadius: \"4px\", px: 1.2, py: 0.3, minWidth: 44, textAlign: \"center\", fontSize: 14, fontWeight: 700 }}>\r\n\t\t\t\t\t\t\t{q.call_count}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t))}\r\n\t\t\t</Box>\r\n\t\t</Paper>\r\n\t);\r\n}\r\n\r\nfunction AbandonedCard({ data }: Readonly<{ data: MgmtDashboardResponse[\"abandoned\"] }>) {\r\n\treturn (\r\n\t\t<Paper sx={cardPaper}>\r\n\t\t\t<Box sx={cardHeader}>\r\n\t\t\t\t<Typography sx={labelSx}>Abandoned Patients</Typography>\r\n\t\t\t</Box>\r\n\t\t\t<Box sx={{ p: 1.5 }}>\r\n\t\t\t\t<Typography sx={{ fontFamily: \"'Barlow Condensed', sans-serif\", fontSize: 30, fontWeight: 800, color: C.navy, lineHeight: 1, mb: 1 }}>\r\n\t\t\t\t\t{data.total.toLocaleString()}\r\n\t\t\t\t</Typography>\r\n\t\t\t\t{[\r\n\t\t\t\t\t{ label: \"Called Back Patients\", value: data.called_back, pct: data.called_back_pct },\r\n\t\t\t\t\t{ label: \"To be Called Patients\", value: data.to_call, pct: data.to_call_pct },\r\n\t\t\t\t].map(({ label, value, pct }) => (\r\n\t\t\t\t\t<Box key={label} sx={{ mb: 0.4 }}>\r\n\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3, display: \"inline\" }}>{label} </Typography>\r\n\t\t\t\t\t\t<Typography sx={{ fontSize: 13, fontWeight: 700, color: C.blue, display: \"inline\" }}>{value} </Typography>\r\n\t\t\t\t\t\t<Typography sx={{ fontSize: 11, fontWeight: 700, color: \"#48bb78\", display: \"inline\" }}>{pct.toFixed(1)}%</Typography>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t))}\r\n\t\t\t</Box>\r\n\t\t</Paper>\r\n\t);\r\n}\r\n\r\nfunction AvgCallbackCard({ duration }: Readonly<{ duration: string }>) {\r\n\treturn (\r\n\t\t<Paper sx={cardPaper}>\r\n\t\t\t<Box sx={cardHeader}>\r\n\t\t\t\t<Typography sx={labelSx}>Avg Callback Duration</Typography>\r\n\t\t\t</Box>\r\n\t\t\t<Box sx={{ p: 1.5 }}>\r\n\t\t\t\t<Typography sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 26, fontWeight: 700, color: C.navy, mt: 1, letterSpacing: 1 }}>\r\n\t\t\t\t\t{duration}\r\n\t\t\t\t</Typography>\r\n\t\t\t</Box>\r\n\t\t</Paper>\r\n\t);\r\n}\r\n\r\nfunction IvrCard({ data }: Readonly<{ data: MgmtDashboardResponse[\"ivr\"] }>) {\r\n\treturn (\r\n\t\t<Paper sx={cardPaper}>\r\n\t\t\t<Box sx={cardHeader}>\r\n\t\t\t\t<Typography sx={labelSx}>IVR Patients</Typography>\r\n\t\t\t</Box>\r\n\t\t\t<Box sx={{ p: 1.5 }}>\r\n\t\t\t\t<Typography sx={{ fontFamily: \"'Barlow Condensed', sans-serif\", fontSize: 30, fontWeight: 800, color: C.navy, lineHeight: 1, mb: 1 }}>\r\n\t\t\t\t\t{data.total.toLocaleString()}\r\n\t\t\t\t</Typography>\r\n\t\t\t\t{[\r\n\t\t\t\t\t{ label: \"Called Back\", value: data.called_back, pct: data.called_back_pct },\r\n\t\t\t\t\t{ label: \"To Be Called\", value: data.to_call, pct: data.to_call_pct },\r\n\t\t\t\t].map(({ label, value, pct }) => (\r\n\t\t\t\t\t<Box key={label} sx={{ mb: 0.4 }}>\r\n\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3, display: \"inline\" }}>{label} </Typography>\r\n\t\t\t\t\t\t<Typography sx={{ fontSize: 13, fontWeight: 700, color: C.blue, display: \"inline\" }}>{value} </Typography>\r\n\t\t\t\t\t\t<Typography sx={{ fontSize: 11, fontWeight: 700, color: \"#48bb78\", display: \"inline\" }}>{pct.toFixed(1)}%</Typography>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t))}\r\n\t\t\t</Box>\r\n\t\t</Paper>\r\n\t);\r\n}\r\n\r\nfunction statusColor(status: string) {\r\n\tconst s = status?.toUpperCase();\r\n\tif (s === \"ANSWERED\") return C.green;\r\n\tif (s === \"CANCEL\") return C.red;\r\n\tif (s === \"ABANDONED\") return \"#c05621\";\r\n\treturn C.t2;\r\n}\r\n\r\n/* ═══════════════════════ MAIN CONTENT ═══════════════════════ */\r\n\r\nfunction ManagementDashboardContent() {\r\n\tconst [startDate, setStartDate] = useState<Dayjs | null>(dayjs().startOf(\"day\"));\r\n\tconst [endDate, setEndDate] = useState<Dayjs | null>(dayjs());\r\n\tconst [quickRange, setQuickRange] = useState(\"today\");\r\n\r\n\tconst [data, setData] = useState<MgmtDashboardResponse>(EMPTY);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(\"\");\r\n\tconst [repeatedSearch, setRepeatedSearch] = useState(\"\");\r\n\tconst [chartDir, setChartDir] = useState<\"inbound\" | \"outbound\">(\"inbound\");\r\n\tconst chartRef = useRef<HTMLDivElement>(null);\r\n\r\n\tconst fetchDashboard = useCallback(async () => {\r\n\t\tif (!startDate || !endDate) return;\r\n\t\tsetLoading(true);\r\n\t\tsetError(\"\");\r\n\t\ttry {\r\n\t\t\tconst result = await getManagementDashboard({\r\n\t\t\t\tstart_date: startDate.format(\"YYYY-MM-DD\"),\r\n\t\t\t\tend_date: endDate.format(\"YYYY-MM-DD\"),\r\n\t\t\t});\r\n\t\t\tsetData(result);\r\n\t\t} catch (err: any) {\r\n\t\t\tsetError(err?.response?.data?.detail || err?.message || \"Failed to load dashboard\");\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, [startDate, endDate]);\r\n\r\n\tuseEffect(() => { fetchDashboard(); }, [fetchDashboard]);\r\n\r\n\tconst handleQuickRangeChange = (range: QuickRange) => setQuickRange(range);\r\n\r\n\tconst filteredRepeated = useMemo(() => {\r\n\t\tif (!repeatedSearch) return data.repeated_calls;\r\n\t\tconst q = repeatedSearch.toLowerCase();\r\n\t\treturn data.repeated_calls.filter((r) =>\r\n\t\t\tr.phone_number.toLowerCase().includes(q) ||\r\n\t\t\tr.latest_status.toLowerCase().includes(q) ||\r\n\t\t\tr.latest_call_type.toLowerCase().includes(q)\r\n\t\t);\r\n\t}, [data.repeated_calls, repeatedSearch]);\r\n\r\n\tconst hourlyData = useMemo(() => {\r\n\t\tconst map = new Map(data.hourly_chart.map((h) => [h.hour, h]));\r\n\t\treturn Array.from({ length: 24 }, (_, h) => ({\r\n\t\t\thour: `${String(h).padStart(2, \"0\")}`,\r\n\t\t\tanswered: map.get(h)?.answered ?? 0,\r\n\t\t\tabandoned: map.get(h)?.abandoned ?? 0,\r\n\t\t\tagents: map.get(h)?.agents ?? 0,\r\n\t\t}));\r\n\t}, [data.hourly_chart]);\r\n\r\n\tconst downloadChart = () => {\r\n\t\tconst svgEl = chartRef.current?.querySelector(\"svg\");\r\n\t\tif (!svgEl) return;\r\n\t\tconst svgData = new XMLSerializer().serializeToString(svgEl);\r\n\t\tconst canvas = document.createElement(\"canvas\");\r\n\t\tconst img = new Image();\r\n\t\timg.onload = () => {\r\n\t\t\tcanvas.width = img.width;\r\n\t\t\tcanvas.height = img.height;\r\n\t\t\tconst ctx = canvas.getContext(\"2d\");\r\n\t\t\tif (!ctx) return;\r\n\t\t\tctx.fillStyle = \"#fff\";\r\n\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\t\t\tctx.drawImage(img, 0, 0);\r\n\t\t\tconst a = document.createElement(\"a\");\r\n\t\t\ta.download = `hourly_chart_${chartDir}.png`;\r\n\t\t\ta.href = canvas.toDataURL(\"image/png\");\r\n\t\t\ta.click();\r\n\t\t};\r\n\t\timg.src = \"data:image/svg+xml;base64,\" + btoa(unescape(encodeURIComponent(svgData)));\r\n\t};\r\n\r\n\treturn (\r\n\t\t<LocalizationProvider dateAdapter={AdapterDayjs}>\r\n\t\t\t<Box sx={{ background: \"transparent\", minHeight: \"100vh\" }}>\r\n\r\n\t\t\t\t{/* ── HEADER ── */}\r\n\t\t\t\t<PageHeader\r\n\t\t\t\t\ttitle=\"Management Dashboard\"\r\n\t\t\t\t\tactions={\r\n\t\t\t\t\t\t<Stack direction=\"row\" spacing={1} alignItems=\"center\">\r\n\t\t\t\t\t\t\t<AppButton\r\n\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\tstartIcon={<RefreshIcon sx={{ fontSize: \"0.95rem !important\" }} />}\r\n\t\t\t\t\t\t\t\tonClick={fetchDashboard}\r\n\t\t\t\t\t\t\t\tdisabled={loading}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tRefresh\r\n\t\t\t\t\t\t\t</AppButton>\r\n\t\t\t\t\t\t\t<AppButton\r\n\t\t\t\t\t\t\t\tstartIcon={<FileDownloadIcon sx={{ fontSize: \"0.95rem !important\" }} />}\r\n\t\t\t\t\t\t\t\tdisabled={loading || data.totals.total_calls === 0}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tconst rows = data.repeated_calls.map((r) => Object.values(r).join(\",\"));\r\n\t\t\t\t\t\t\t\t\tconst csv = [\"Phone,Date,Count,Status,Type,Comments\", ...rows].join(\"\\n\");\r\n\t\t\t\t\t\t\t\t\tconst a = document.createElement(\"a\");\r\n\t\t\t\t\t\t\t\t\ta.href = URL.createObjectURL(new Blob([csv], { type: \"text/csv\" }));\r\n\t\t\t\t\t\t\t\t\ta.download = `mgmt_dashboard_${startDate?.format(\"YYYY-MM-DD\")}.csv`;\r\n\t\t\t\t\t\t\t\t\ta.click();\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tExport CSV\r\n\t\t\t\t\t\t\t</AppButton>\r\n\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t{/* ── FILTER BAR ── */}\r\n\t\t\t\t<ReportFilterBar\r\n\t\t\t\t\tstartDate={startDate}\r\n\t\t\t\t\tendDate={endDate}\r\n\t\t\t\t\tonStartChange={setStartDate}\r\n\t\t\t\t\tonEndChange={setEndDate}\r\n\t\t\t\t\tshowTime={false}\r\n\t\t\t\t\tquickRange={quickRange}\r\n\t\t\t\t\tonQuickRangeChange={handleQuickRangeChange}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<Alert severity=\"error\" sx={{ mx: 2.5, mt: 1.5 }} onClose={() => setError(\"\")}>{error}</Alert>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{loading && (\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: \"center\", py: 5 }}>\r\n\t\t\t\t\t\t<CircularProgress size={36} />\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{!loading && (\r\n\t\t\t\t\t<Box sx={{ px: { xs: 1, md: 2 }, py: 1.5 }}>\r\n\r\n\t\t\t\t\t\t{/* ═══ ROW 1 — 6 stat cards ═══ */}\r\n\t\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\tgridTemplateColumns: { xs: \"1fr\", sm: \"repeat(2, 1fr)\", md: \"repeat(3, 1fr)\", lg: \"1.3fr 1.2fr 1.1fr 0.75fr 1.3fr 1.1fr\" },\r\n\t\t\t\t\t\t\tgap: 1.2,\r\n\t\t\t\t\t\t\tmb: 1.2,\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t<DirectionCard title=\"Inbound Calls\" data={data.inbound} />\r\n\t\t\t\t\t\t\t<QueueCallsCard data={data.queue_calls} />\r\n\t\t\t\t\t\t\t<AbandonedCard data={data.abandoned} />\r\n\t\t\t\t\t\t\t<AvgCallbackCard duration={data.abandoned.avg_callback_duration} />\r\n\t\t\t\t\t\t\t<DirectionCard title=\"Outbound Calls\" data={data.outbound} />\r\n\t\t\t\t\t\t\t<IvrCard data={data.ivr} />\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{/* ═══ ROW 2 — 4 metric cards ═══ */}\r\n\t\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\tgridTemplateColumns: { xs: \"1fr\", sm: \"repeat(2, 1fr)\", lg: \"1fr 1fr 1.6fr 1.6fr\" },\r\n\t\t\t\t\t\t\tgap: 1.2,\r\n\t\t\t\t\t\t\tmb: 1.2,\r\n\t\t\t\t\t\t}}>\r\n\r\n\t\t\t\t\t\t\t{/* Summary */}\r\n\t\t\t\t\t\t\t<Paper sx={cardPaper}>\r\n\t\t\t\t\t\t\t\t<Box sx={cardHeader}><Typography sx={labelSx}>Summary</Typography></Box>\r\n\t\t\t\t\t\t\t\t<Box sx={{ p: 1.5 }}>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"baseline\", gap: 0.5, mb: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontFamily: \"'Barlow Condensed', sans-serif\", fontSize: 22, fontWeight: 800, color: C.navy }}>{data.totals.total_answered.toLocaleString()}</Typography>\r\n\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 14, color: C.t3 }}>/</Typography>\r\n\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontFamily: \"'Barlow Condensed', sans-serif\", fontSize: 22, fontWeight: 800, color: C.t3 }}>{data.totals.total_calls.toLocaleString()}</Typography>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3, mb: 1 }}>Total Calls</Typography>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ mt: 1 }}>\r\n\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3, mb: 0.3 }}>Call Duration</Typography>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 2 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 10, color: C.t3 }}>Highest</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ ...monoSx, color: C.blue, fontSize: 13 }}>{data.totals.highest_duration}</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 10, color: C.t3 }}>Lowest</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ ...monoSx, color: C.blue, fontSize: 13 }}>{data.totals.lowest_duration}</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ mt: 1 }}>\r\n\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3, display: \"inline\" }}>Calls &lt; 30 sec: </Typography>\r\n\t\t\t\t\t\t\t\t\t\t<Typography sx={{ ...monoSx, color: C.blue, display: \"inline\", fontSize: 13 }}>{data.totals.calls_lt_30sec.toLocaleString()}</Typography>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Paper>\r\n\r\n\t\t\t\t\t\t\t{/* Avg Duration */}\r\n\t\t\t\t\t\t\t<Paper sx={cardPaper}>\r\n\t\t\t\t\t\t\t\t<Box sx={cardHeader}><Typography sx={labelSx}>Avg Total Calls Duration</Typography></Box>\r\n\t\t\t\t\t\t\t\t<Box sx={{ p: 1.5 }}>\r\n\t\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t\t{ label: \"Inbound\", value: data.totals.avg_inbound_duration },\r\n\t\t\t\t\t\t\t\t\t\t{ label: \"Outbound\", value: data.totals.avg_outbound_duration },\r\n\t\t\t\t\t\t\t\t\t].map(({ label, value }) => (\r\n\t\t\t\t\t\t\t\t\t\t<Box key={label} sx={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", py: 1, borderBottom: `1px solid ${C.b1}`, \"&:last-child\": { borderBottom: \"none\" } }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 12, fontWeight: 600, color: C.t2 }}>{label}</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ ...monoSx, fontSize: 16, color: C.blue }}>{value}</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Paper>\r\n\r\n\t\t\t\t\t\t\t{/* Inbound Avg Waiting */}\r\n\t\t\t\t\t\t\t<Paper sx={cardPaper}>\r\n\t\t\t\t\t\t\t\t<Box sx={cardHeader}><Typography sx={labelSx}>Inbound Average Waiting</Typography></Box>\r\n\t\t\t\t\t\t\t\t<Box sx={{ p: 1.5, display: \"grid\", gridTemplateColumns: \"1fr 1fr 1fr\", gap: 1, mt: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t\t{ label: \"Waiting Time\", value: data.waiting.avg_wait_time },\r\n\t\t\t\t\t\t\t\t\t\t{ label: \"Language Selection\", value: data.waiting.avg_lang_selection },\r\n\t\t\t\t\t\t\t\t\t\t{ label: \"Queue Waiting\", value: data.waiting.avg_queue_wait },\r\n\t\t\t\t\t\t\t\t\t].map(({ label, value }) => (\r\n\t\t\t\t\t\t\t\t\t\t<Box key={label} sx={{ textAlign: \"center\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 10, fontWeight: 600, color: C.t3, mb: 0.5 }}>{label}</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ ...monoSx, fontSize: 18, color: C.blue }}>{value}</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Paper>\r\n\r\n\t\t\t\t\t\t\t{/* CHT Table */}\r\n\t\t\t\t\t\t\t<Paper sx={cardPaper}>\r\n\t\t\t\t\t\t\t\t<Box sx={cardHeader}><Typography sx={labelSx}>Average CHT</Typography></Box>\r\n\t\t\t\t\t\t\t\t<TableContainer>\r\n\t\t\t\t\t\t\t\t\t<Table size=\"small\">\r\n\t\t\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={headSx}>Call Type</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={headSx}>Call Handling Time</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={headSx}>Talk Duration</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={headSx}>Hold Duration</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t\t\t{data.cht.length === 0 && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableRow><TableCell colSpan={4} sx={{ textAlign: \"center\", py: 2, color: C.t3, fontSize: 12 }}>No data</TableCell></TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t{data.cht.map((row) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableRow key={row.call_type} hover>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...cellSx, fontWeight: 600, color: C.t2 }}>{row.call_type}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...cellSx, ...monoSx, color: C.blue }}>{row.call_handling_time}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...cellSx, ...monoSx, color: C.blue }}>{row.talk_duration}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...cellSx, ...monoSx, color: C.blue }}>{row.hold_duration}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t\t\t\t</TableContainer>\r\n\t\t\t\t\t\t\t</Paper>\r\n\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{/* ═══ ROW 3 — Chart + Repeated Calls ═══ */}\r\n\t\t\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", lg: \"1fr 1fr\" }, gap: 1.2 }}>\r\n\r\n\t\t\t\t\t\t\t{/* Hourly Chart */}\r\n\t\t\t\t\t\t\t<Paper sx={cardPaper}>\r\n\t\t\t\t\t\t\t\t<Box sx={{ ...cardHeader, flexWrap: \"wrap\", gap: 1 }}>\r\n\t\t\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Avg Hour Wise Inbound Calls vs Agents</Typography>\r\n\t\t\t\t\t\t\t\t\t\t<Stack direction=\"row\" spacing={1.5} sx={{ mt: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ color: \"#f6a623\", label: \"Answered\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ color: \"#90a4c0\", label: \"Abandoned\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ color: \"#4a5568\", label: \"Agents\" },\r\n\t\t\t\t\t\t\t\t\t\t\t].map(({ color, label }) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box key={label} sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ width: 12, height: 12, borderRadius: \"2px\", background: color }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3 }}>{label}</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", flexDirection: \"column\", alignItems: \"flex-end\", gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t\t<RadioGroup row value={chartDir} onChange={(e) => setChartDir(e.target.value as \"inbound\" | \"outbound\")}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{ \"& .MuiFormControlLabel-root\": { mr: 0.5 }, \"& .MuiFormControlLabel-label\": { fontSize: 12 } }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<FormControlLabel value=\"inbound\" control={<Radio size=\"small\" />} label=\"Inbound\" />\r\n\t\t\t\t\t\t\t\t\t\t\t<FormControlLabel value=\"outbound\" control={<Radio size=\"small\" />} label=\"Outbound\" />\r\n\t\t\t\t\t\t\t\t\t\t</RadioGroup>\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={downloadChart}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{ fontSize: 11, color: \"#3182ce\", cursor: \"pointer\", border: \"1px solid #bee3f8\", borderRadius: \"4px\", px: 1, py: 0.3 }}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t⬇ DOWNLOAD\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t<Box ref={chartRef} sx={{ p: 1.5, height: 260 }}>\r\n\t\t\t\t\t\t\t\t\t<ResponsiveContainer width=\"100%\" height=\"100%\">\r\n\t\t\t\t\t\t\t\t\t\t<ComposedChart data={hourlyData} margin={{ top: 4, right: 30, left: -20, bottom: 0 }} barGap={1}>\r\n\t\t\t\t\t\t\t\t\t\t\t<CartesianGrid strokeDasharray=\"3 3\" stroke={C.b2} vertical={false} />\r\n\t\t\t\t\t\t\t\t\t\t\t<XAxis dataKey=\"hour\" tick={{ fontSize: 9, fill: C.t3 }} interval={1} />\r\n\t\t\t\t\t\t\t\t\t\t\t<YAxis yAxisId=\"left\" tick={{ fontSize: 9, fill: C.t3 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t<YAxis yAxisId=\"right\" orientation=\"right\" tick={{ fontSize: 9, fill: C.t3 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t<RTooltip\r\n\t\t\t\t\t\t\t\t\t\t\t\tcontentStyle={{ fontSize: 11, borderRadius: 6, border: `1px solid ${C.b2}` }}\r\n\t\t\t\t\t\t\t\t\t\t\t\tformatter={(v, n: string) => [v, n.charAt(0).toUpperCase() + n.slice(1)]}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t<Bar yAxisId=\"left\" dataKey=\"answered\" fill=\"#f6a623\" radius={[2, 2, 0, 0]} maxBarSize={14} />\r\n\t\t\t\t\t\t\t\t\t\t\t<Bar yAxisId=\"left\" dataKey=\"abandoned\" fill=\"#90a4c0\" radius={[2, 2, 0, 0]} maxBarSize={14} />\r\n\t\t\t\t\t\t\t\t\t\t\t<Line yAxisId=\"right\" type=\"monotone\" dataKey=\"agents\" stroke=\"#4a5568\" strokeWidth={1.5} dot={{ r: 2, fill: \"#4a5568\" }} />\r\n\t\t\t\t\t\t\t\t\t\t</ComposedChart>\r\n\t\t\t\t\t\t\t\t\t</ResponsiveContainer>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Paper>\r\n\r\n\t\t\t\t\t\t\t{/* Repeated Calls Table */}\r\n\t\t\t\t\t\t\t<Paper sx={cardPaper}>\r\n\t\t\t\t\t\t\t\t<Box sx={cardHeader}>\r\n\t\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Repeated Calls</Typography>\r\n\t\t\t\t\t\t\t\t\t<Chip label={data.repeated_calls.length} size=\"small\" sx={{ background: C.rlt, color: C.red, fontWeight: 700, fontSize: 11 }} />\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t<Box sx={{ px: 1.5, py: 1 }}>\r\n\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\tplaceholder=\"Search…\"\r\n\t\t\t\t\t\t\t\t\t\tvalue={repeatedSearch}\r\n\t\t\t\t\t\t\t\t\t\tonChange={(e) => setRepeatedSearch(e.target.value)}\r\n\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t\tslotProps={{ input: { startAdornment: <InputAdornment position=\"start\"><SearchIcon sx={{ fontSize: 16, color: C.t3 }} /></InputAdornment> } }}\r\n\t\t\t\t\t\t\t\t\t\tsx={{ \"& .MuiInputBase-root\": { fontSize: 12 } }}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t<TableContainer sx={{ maxHeight: 260, overflow: \"auto\" }}>\r\n\t\t\t\t\t\t\t\t\t<Table size=\"small\" stickyHeader>\r\n\t\t\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={headSx}>Phone Number</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={headSx}>Date</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={headSx}>No of Calls</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={headSx}>Latest Status</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={headSx}>Latest Call Type</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={headSx}>Comments</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t\t\t{filteredRepeated.length === 0 && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableRow><TableCell colSpan={6} sx={{ textAlign: \"center\", py: 2, color: C.t3, fontSize: 12 }}>No repeated calls</TableCell></TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t{filteredRepeated.map((r) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableRow key={`${r.phone_number}-${r.date}`} hover>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...cellSx, ...monoSx, fontSize: 11 }}>{r.phone_number}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...cellSx, fontSize: 11 }}>{r.date}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...cellSx, fontWeight: 700, color: C.navy, fontSize: 13 }}>{r.call_count}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...cellSx, fontSize: 11, fontWeight: 600, color: statusColor(r.latest_status) }}>{r.latest_status}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...cellSx, fontSize: 11 }}>{r.latest_call_type}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...cellSx, fontSize: 11, color: C.t3 }}>{r.comments}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t\t\t\t</TableContainer>\r\n\t\t\t\t\t\t\t</Paper>\r\n\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</Box>\r\n\t\t</LocalizationProvider>\r\n\t);\r\n}\r\n\r\nconst ManagementDashboard: React.FC = () => (\r\n\t<SDKProvider>\r\n\t\t<ManagementDashboardContent />\r\n\t</SDKProvider>\r\n);\r\n\r\nexport default ManagementDashboard;\r\n","import React from \"react\";\r\nimport { Box } from \"@mui/material\";\r\n\r\nconst CARO_VOICE_AI_URL = \"https://dev-ai-voice.achalahealth.com:3100/executive-dashboard\";\r\n\r\nexport default function CaroVoiceAIPage() {\r\n\treturn (\r\n\t\t<Box sx={{ width: \"100%\", height: \"calc(100vh - 64px)\" }}>\r\n\t\t\t<iframe\r\n\t\t\t\tsrc={CARO_VOICE_AI_URL}\r\n\t\t\t\ttitle=\"Caro Voice AI\"\r\n\t\t\t\tstyle={{ width: \"100%\", height: \"100%\", border: \"none\" }}\r\n\t\t\t\tallow=\"microphone; camera; clipboard-read; clipboard-write\"\r\n\t\t\t/>\r\n\t\t</Box>\r\n\t);\r\n}\r\n","import React from \"react\";\r\nimport { Box } from \"@mui/material\";\r\n\r\nconst htmlContent = `<!DOCTYPE html>\r\n<html>\r\n<head>\r\n <title>Quality Audit Dashboard</title>\r\n <style>\r\n * { margin: 0; padding: 0; box-sizing: border-box; }\r\n html, body { width: 100%; height: 100%; overflow: hidden; background: #fff; }\r\n #viz-wrapper {\r\n width: 100vw;\r\n height: 100vh;\r\n overflow: hidden;\r\n position: relative;\r\n }\r\n #viz1780590363108 {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 1500px;\r\n height: 927px;\r\n transform-origin: top left;\r\n }\r\n </style>\r\n</head>\r\n<body>\r\n<div id=\"viz-wrapper\">\r\n <div class='tableauPlaceholder' id='viz1780590363108' style='position: absolute'><noscript><a href='#'><img alt='Dashboard Updated ' src='https://public.tableau.com/static/images/Qu/QualityAudit/DashboardUpdated_1/1_rss.png' style='border: none' /></a></noscript><object class='tableauViz' style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='embed_code_version' value='3' /> <param name='site_root' value='' /><param name='name' value='QualityAudit/DashboardUpdated_1' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Qu/QualityAudit/DashboardUpdated_1/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='language' value='en-US' /><param name='filter' value='publish=yes' /></object></div>\r\n</div>\r\n<script type='text/javascript'>\r\n var divElement = document.getElementById('viz1780590363108');\r\n var vizElement = divElement.getElementsByTagName('object')[0];\r\n vizElement.style.width = '1500px';\r\n vizElement.style.height = '927px';\r\n var scriptElement = document.createElement('script');\r\n scriptElement.src = 'https://public.tableau.com/javascripts/api/viz_v1.js';\r\n vizElement.parentNode.insertBefore(scriptElement, vizElement);\r\n\r\n function scaleViz() {\r\n var scaleX = window.innerWidth / 1500;\r\n var scaleY = window.innerHeight / 927;\r\n var scale = Math.min(scaleX, scaleY);\r\n divElement.style.transform = 'scale(' + scale + ')';\r\n }\r\n scaleViz();\r\n window.addEventListener('resize', scaleViz);\r\n</script>\r\n</body>\r\n</html>`;\r\n\r\nexport default function QualityAuditDashboardPage() {\r\n\treturn (\r\n\t\t<Box sx={{ width: \"100%\", height: \"calc(100vh - 64px)\", overflow: \"hidden\" }}>\r\n\t\t\t<iframe\r\n\t\t\t\tsrcDoc={htmlContent}\r\n\t\t\t\ttitle=\"Quality Audit Dashboard\"\r\n\t\t\t\tstyle={{ width: \"100%\", height: \"100%\", border: \"none\", display: \"block\" }}\r\n\t\t\t/>\r\n\t\t</Box>\r\n\t);\r\n}\r\n","import React from \"react\";\r\nimport { Box } from \"@mui/material\";\r\n\r\nconst htmlContent = `<!DOCTYPE html>\r\n<html>\r\n<head>\r\n <title>CARO Quality Audit Dashboard</title>\r\n <style>\r\n * { margin: 0; padding: 0; box-sizing: border-box; }\r\n html, body { width: 100%; height: 100%; overflow: hidden; background: #fff; }\r\n #viz-wrapper {\r\n width: 100vw;\r\n height: 100vh;\r\n overflow: hidden;\r\n position: relative;\r\n }\r\n #viz1780591059698 {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 1500px;\r\n height: 927px;\r\n transform-origin: top left;\r\n }\r\n </style>\r\n</head>\r\n<body>\r\n<div id=\"viz-wrapper\">\r\n <div class='tableauPlaceholder' id='viz1780591059698' style='position: absolute'><noscript><a href='#'><img alt='Dashboard Updated ' src='https://public.tableau.com/static/images/Qu/QualityAuditCaro/DashboardUpdated/1_rss.png' style='border: none' /></a></noscript><object class='tableauViz' style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='embed_code_version' value='3' /> <param name='site_root' value='' /><param name='name' value='QualityAuditCaro/DashboardUpdated' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Qu/QualityAuditCaro/DashboardUpdated/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='language' value='en-US' /><param name='filter' value='publish=yes' /></object></div>\r\n</div>\r\n<script type='text/javascript'>\r\n var divElement = document.getElementById('viz1780591059698');\r\n var vizElement = divElement.getElementsByTagName('object')[0];\r\n vizElement.style.width = '1500px';\r\n vizElement.style.height = '927px';\r\n var scriptElement = document.createElement('script');\r\n scriptElement.src = 'https://public.tableau.com/javascripts/api/viz_v1.js';\r\n vizElement.parentNode.insertBefore(scriptElement, vizElement);\r\n\r\n function scaleViz() {\r\n var scaleX = window.innerWidth / 1500;\r\n var scaleY = window.innerHeight / 927;\r\n var scale = Math.min(scaleX, scaleY);\r\n divElement.style.transform = 'scale(' + scale + ')';\r\n }\r\n scaleViz();\r\n window.addEventListener('resize', scaleViz);\r\n</script>\r\n</body>\r\n</html>`;\r\n\r\nexport default function CaroQualityAuditDashboardPage() {\r\n\treturn (\r\n\t\t<Box sx={{ width: \"100%\", height: \"calc(100vh - 64px)\", overflow: \"hidden\" }}>\r\n\t\t\t<iframe\r\n\t\t\t\tsrcDoc={htmlContent}\r\n\t\t\t\ttitle=\"CARO Quality Audit Dashboard\"\r\n\t\t\t\tstyle={{ width: \"100%\", height: \"100%\", border: \"none\", display: \"block\" }}\r\n\t\t\t/>\r\n\t\t</Box>\r\n\t);\r\n}\r\n","import { eventTracker } from \"./lib/hooks/eventsTracker\";\r\nimport { sdkStateManager } from \"./lib/hooks/sdk-state\";\r\nimport { useLogout } from \"./lib/hooks/useLogout\";\r\nimport { useEndCall } from \"./lib/hooks/useEndCall\";\r\nimport { SDKConfig, URLConfig } from \"./types\";\r\nimport { useClickToCall } from \"./lib/hooks/useClickToCall\";\r\nimport { useGetCallerData } from \"./lib/hooks/useGetCallerData\";\r\nimport { useGetAuthorizationToken } from \"./lib/hooks/useGetAuthorizationToken\";\r\nimport { useSDKState } from \"./lib/hooks/useSDKState\";\r\nimport { useCallMonitoring } from \"./lib/hooks/useCallMonitoring\";\r\nimport {\r\n SDK_PERMISSIONS,\r\n SDK_MENU_CODES,\r\n SDK_WILDCARD,\r\n type SDKPermissionState,\r\n type ControlsFromPermissions,\r\n type SDKPermissionContextValue,\r\n} from \"./lib/permissions\";\r\n\r\nexport { CallControlPanel } from \"./lib/components/callControlPanel\";\r\nexport { SDKPages } from \"./lib/pages\";\r\nexport {\r\n setAuditReportUrlResolver,\r\n type AuditReportUrlResolver,\r\n} from \"./lib/pages/common/components/AuditReport\";\r\nexport { SDKPermissionGuard } from \"./lib/components/SDKPermissionGuard\";\r\nexport { SDKAccessDenied } from \"./lib/components/SDKAccessDenied\";\r\nexport { useSDKPermissions } from \"./lib/hooks/useSDKPermissions\";\r\nexport type { SDKPermissionsHook } from \"./lib/hooks/useSDKPermissions\";\r\n\r\nexport type { CallControlPanelProps, CallData, SDKConfig } from \"./types\";\r\nexport type {\r\n SDKPermissionState,\r\n ControlsFromPermissions,\r\n SDKPermissionContextValue,\r\n};\r\n\r\ninterface InitSDKParams {\r\n apiKey: string;\r\n tenantId: string;\r\n agentId: string;\r\n sessionId?: string;\r\n sdkConfig?: SDKConfig;\r\n urlConfig?: URLConfig;\r\n}\r\n\r\nexport interface SDKInitResult {\r\n accessToken: string;\r\n expiration: string;\r\n ticketId: string;\r\n callControls: any;\r\n userInfo: any;\r\n}\r\n\r\nexport async function initSDK({\r\n apiKey,\r\n tenantId,\r\n agentId,\r\n sdkConfig,\r\n urlConfig,\r\n}: InitSDKParams): Promise<SDKInitResult> {\r\n if (!apiKey || typeof apiKey !== \"string\" || apiKey.trim().length === 0) {\r\n throw new Error(\"SDK initialization failed: API key is required\");\r\n }\r\n\r\n if (\r\n !tenantId ||\r\n typeof tenantId !== \"string\" ||\r\n tenantId.trim().length === 0\r\n ) {\r\n throw new Error(\"SDK initialization failed: Tenant ID is required\");\r\n }\r\n\r\n if (!agentId || typeof agentId !== \"string\" || agentId.trim().length === 0) {\r\n throw new Error(\"SDK initialization failed: Agent ID is required\");\r\n }\r\n\r\n try {\r\n const initResult = await eventTracker.init({\r\n apiKey: apiKey.trim(),\r\n tenantId: tenantId.trim(),\r\n agentId: agentId.trim(),\r\n password: urlConfig?.password,\r\n accessToken: urlConfig?.accessToken,\r\n baseUrl: urlConfig?.coreBaseURL,\r\n });\r\n\r\n if (!initResult) {\r\n sdkStateManager.setInitCheck();\r\n throw new Error(\"SDK initialization failed\");\r\n }\r\n\r\n // To store all permissions,sdk & menus from init api response to STATE\r\n if (initResult.userInfo) {\r\n sdkStateManager.setSDKPermissions(initResult.userInfo);\r\n }\r\n\r\n // using stored permissions from response determining which items enables ONLY IN callcontrolpanel (hold,transfer)\r\n const permissionControlsConfig = sdkStateManager.getControlsConfig();\r\n\r\n // Remaining enalblement controls spreaded here along with callcontrolpanel controls\r\n // Combined to single control config\r\n const callcontrolConfig = {\r\n ...(initResult.callControls || {}),\r\n ...permissionControlsConfig,\r\n ...(sdkConfig || {}),\r\n // sdkPosition: 'vertical'\r\n };\r\n\r\n const res = {\r\n accessToken: initResult.accessToken,\r\n expiration: initResult.expiration,\r\n ticketId: initResult.ticketId,\r\n callControls: callcontrolConfig,\r\n userInfo: initResult.userInfo,\r\n };\r\n\r\n console.info(\"SDK initialized successfully\");\r\n\r\n sdkStateManager.initialize(\r\n apiKey.trim(),\r\n tenantId.trim(),\r\n agentId.trim(),\r\n urlConfig,\r\n res,\r\n callcontrolConfig,\r\n initResult.callControls,\r\n );\r\n\r\n return res;\r\n } catch (error) {\r\n sdkStateManager.setInitCheck();\r\n\r\n if (error instanceof Error) {\r\n throw error;\r\n }\r\n\r\n throw new Error(`SDK initialization failed: ${String(error)}`);\r\n }\r\n}\r\n\r\nexport function getSDKVersion(): string {\r\n return \"6.x.x\";\r\n}\r\n\r\nexport function isSDKInitialized(): boolean {\r\n return sdkStateManager.getState().isInitialized;\r\n}\r\n\r\nexport {\r\n useLogout,\r\n useEndCall,\r\n useClickToCall,\r\n useGetCallerData,\r\n useGetAuthorizationToken,\r\n useSDKState,\r\n useCallMonitoring,\r\n};\r\nexport type { UseClickToCallReturn, CallInitiationFunction, StartCalltHookStateTypes } from \"./lib/hooks/useClickToCall\";\r\nexport type { UseEndCallReturn, HookStateTypes, CallTerminationFunction } from \"./lib/hooks/useEndCall\";\r\nexport type { UseLogoutReturn, LogoutFunction, LogoutHookStateTypes } from \"./lib/hooks/useLogout\";\r\nexport { useClickToConference } from \"./lib/hooks/useClickToConference\";\r\nexport type { UseClickToConferenceReturn, ConferenceCallPayload as ConferenceCallHookPayload } from \"./lib/hooks/useClickToConference\";\r\n\r\nexport { sdkStateManager } from \"./lib/hooks/sdk-state\";\r\n\r\nexport {\r\n clickToCall,\r\n clickToConference,\r\n endCall,\r\n logout,\r\n startMonitoring,\r\n stopMonitoring,\r\n changeMonitorMode,\r\n setTransferLeadData,\r\n} from \"./lib/angular-services\";\r\nexport type {\r\n StartCallPayload,\r\n ConferenceCallPayload,\r\n EndCallPayload,\r\n SupervisorMonitorMode,\r\n StartMonitoringPayload,\r\n StopMonitoringPayload,\r\n ChangeModePayload,\r\n} from \"./lib/angular-services\";\r\n\r\nexport type {\r\n UseCallMonitoringReturn,\r\n} from \"./lib/hooks/useCallMonitoring\";\r\n\r\n// Entitlement exports\r\nexport { SDK_PERMISSIONS, SDK_MENU_CODES, SDK_WILDCARD };\r\n","import { sdkStateManager } from \"./sdk-state\";\r\n\r\nexport interface EventTrackerConfig {\r\n\tapiKey: string;\r\n\ttenantId: string;\r\n\tagentId: string;\r\n\tpassword?: string;\r\n\taccessToken?: string;\r\n\tbaseUrl?: string;\r\n\r\n\tretryAttempts?: number;\r\n\tqueueSize?: number;\r\n\tflushInterval?: number;\r\n}\r\n\r\nexport interface EventData {\r\n\t[key: string]: any;\r\n}\r\n\r\nexport interface EventTrackerInstance {\r\n\tinit(config: EventTrackerConfig): Promise<string | null>;\r\n\tisInitialized(): boolean;\r\n\tgetConfig(): EventTrackerConfig | null;\r\n}\r\n\r\nclass EventTrackerSDK implements EventTrackerInstance {\r\n\tprivate config: EventTrackerConfig | null = null;\r\n\tprivate ticketId: string | null = null;\r\n\tprivate baseUrl: string = \"\";\r\n\tprivate flushTimer: ReturnType<typeof setInterval> | null = null;\r\n\r\n\tasync init(config: EventTrackerConfig): Promise<any | null> {\r\n\t\tthis.config = {\r\n\t\t\tretryAttempts: 3,\r\n\t\t\tqueueSize: 100,\r\n\t\t\tflushInterval: 5000,\r\n\t\t\t...config,\r\n\t\t};\r\n\r\n\t\tthis.baseUrl = config.baseUrl || (typeof window !== \"undefined\" ? window.location.origin : \"\");\r\n\r\n\t\tconst ticket = await this.createTicket();\r\n\r\n\t\tthis.startPeriodicFlush();\r\n\r\n\t\treturn ticket;\r\n\t}\r\n\r\n\tisInitialized(): boolean {\r\n\t\treturn this.config !== null && this.ticketId !== null;\r\n\t}\r\n\r\n\tgetConfig(): EventTrackerConfig | null {\r\n\t\treturn this.config;\r\n\t}\r\n\r\n\tgetTicketId(): string | null {\r\n\t\treturn this.ticketId;\r\n\t}\r\n\r\n\tprivate async createTicket(): Promise<any | null> {\r\n\t\tif (!this.config) {\r\n\t\t\tthrow new Error(\"EventTracker not initialized\");\r\n\t\t}\r\n\r\n\t\t// If an accessToken is already provided, skip the login API call\r\n\t\t// if (this.config.accessToken) {\r\n\t\t// \treturn { accessToken: this.config.accessToken };\r\n\t\t// }\r\n\r\n\t\ttry {\r\n\t\t\t\tconst response = await this.makeRequest(\"/api/v1/auth/login\", { // login with base url - same as main application\r\n\t\t\t\tmethod: \"POST\",\r\n\t\t\t\theaders: {\r\n\t\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\t\t},\r\n\t\t\t\tbody: JSON.stringify({\r\n\t\t\t\t\tuserId: String(this.config.agentId ?? \"\"),\r\n\t\t\t\t\t// sessionId: this.config.sessionId,\r\n\t\t\t\t\tpassword: this.config.password\r\n\t\t\t\t}),\r\n\t\t\t});\r\n\r\n\t\t\t// if (!response.ok) {\r\n\t\t\t// \tsdkStateManager.setInitCheck();\r\n\t\t\t// \tthrow new Error(`Failed to initialize: ${response.status} ${response.statusText}`);\r\n\t\t\t// }\r\n\r\n\t\t\tconst data = await response.json();\r\n\t\t\tthis.ticketId = data.ticketId;\r\n\r\n\r\n\t\t\treturn data;\r\n\t\t} catch (error) {\r\n\r\n\t\t\tthrow error;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async makeRequest(url: string, options: RequestInit): Promise<Response> {\r\n\t\tconst fullUrl = `${this.baseUrl}${url}`;\r\n\t\tconst maxRetries = this.config?.retryAttempts || 3;\r\n\r\n\t\tfor (let attempt = 1; attempt <= maxRetries; attempt++) {\r\n\t\t\ttry {\r\n\t\t\t\tconst response = await fetch(fullUrl, options);\r\n\t\t\t\treturn response;\r\n\t\t\t} catch (error) {\r\n\t\t\t\tif (attempt === maxRetries) {\r\n\t\t\t\t\tthrow error;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst delay = Math.min(1000 * Math.pow(2, attempt - 1), 10000);\r\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, delay));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthrow new Error(\"Max retries exceeded\");\r\n\t}\r\n\r\n\tprivate startPeriodicFlush(): void {\r\n\t\tif (this.flushTimer) {\r\n\t\t\tclearInterval(this.flushTimer);\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n}\r\n\r\nexport const eventTracker = new EventTrackerSDK();\r\n\r\nif (typeof window !== \"undefined\") {\r\n\t(window as any).EventTracker = eventTracker;\r\n}\r\n","import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nimport axiosInstance from \"../services/axios\";\r\nimport { removeSession } from \"@react-solutions/vault\";\r\n// import { USB_LIGHT_ALL_OFF, USB_LIGHT_REQUEST } from \"../services/usbLight\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\nimport { useToast } from \"../services/toastMessage\";\r\n\r\nexport type LogoutFunction = () => Promise<any>;\r\n\r\nexport type LogoutHookStateTypes = {\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\nexport interface UseLogoutReturn extends LogoutHookStateTypes {\r\n\tlogout: LogoutFunction;\r\n}\r\n\r\nexport interface LogoutPayload {\r\n\taction: string;\r\n\tuserId: string;\r\n}\r\n\r\nexport const useLogout = () => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst [success, setSuccess] = useState(false);\r\n\r\n\tconst [isError, setIsError] = useState(false);\r\n\r\n\tconst [error, setError] = useState(null);\r\n\r\n\tconst [data, setData] = useState(null);\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst handleLogout = useCallback(async () => {\r\n\t\tsetLoading(true);\r\n\r\n\t\ttry {\r\n\t\t\tawait axiosInstance.post(END_POINT.AUTH_LOGOUT);\r\n\t\t} catch (err: any) {\r\n\t\t\tconst message = err?.response?.data?.message || \"Logout failed. Please try again.\";\r\n\t\t\tshowToast(message, \"error\");\r\n\t\t} finally {\r\n\t\t\tsdkStateManager.clearStorageAndReset();\r\n\t\t\tremoveSession(STORAGE_KEY);\r\n\t\t\tsetSuccess(true);\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tlogout: handleLogout,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError: isError,\r\n\t\terror: error,\r\n\t\tdata: data,\r\n\t};\r\n};\r\n","import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nimport axiosInstance from \"../services/axios\";\r\nimport { getSession } from \"@react-solutions/vault\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\n\r\nexport type HookStateTypes = {\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\nexport interface EndCallPayload {\r\n\tcall_id?: string;\r\n\tagent_id?: string;\r\n\tset_followUp?: string;\r\n\tcallback_date?: string;\r\n\tcallback_hrs?: number;\r\n\tcallback_mins?: number;\r\n\tmobile_number?: string;\r\n\tlist_comments?: string;\r\n\tcall_reference_id?: string;\r\n\tis_mark_as_break?: boolean;\r\n\tdisposition?: string;\r\n\tline_number?: number;\r\n\treason?: string;\r\n\tpatientLog?: any;\r\n}\r\n\r\nexport type CallTerminationFunction = (data: EndCallPayload) => Promise<any>;\r\n\r\nexport interface UseEndCallReturn extends HookStateTypes {\r\n\thandleEndCall: CallTerminationFunction;\r\n}\r\n\r\nexport const useEndCall = () => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst [success, setSuccess] = useState(false);\r\n\r\n\tconst [isError, setIsError] = useState(false);\r\n\r\n\tconst [error, setError] = useState(null);\r\n\r\n\tconst [data, setData] = useState(null);\r\n\r\n\tconst handleEndCall = useCallback(\r\n\t\tasync (data: EndCallPayload = {}) => {\r\n\t\t\tconst state = getSession(STORAGE_KEY) as any;\r\n\r\n\t\t\tsetLoading(true);\r\n\r\n\t\t\tconst payload = {\r\n\t\t\t\tcall_id: data?.call_id ?? state?.callData?.call_id ?? \"\",\r\n\t\t\t\tagent_id: data?.agent_id ?? state?.agentId ?? \"\",\r\n\t\t\t\tset_followUp: data?.set_followUp ?? \"N\",\r\n\t\t\t\tcallback_date: data?.callback_date ?? \"\",\r\n\t\t\t\tcallback_hrs: data?.callback_hrs ?? 0,\r\n\t\t\t\tcallback_mins: data?.callback_mins ?? 0,\r\n\t\t\t\tmobile_number: data?.mobile_number ?? state?.callData?.phone_number ?? \"\",\r\n\t\t\t\tlist_comments: data?.list_comments ?? \"\",\r\n\t\t\t\tcall_reference_id: data?.call_reference_id ?? state?.callData?.call_id ?? \"\",\r\n\t\t\t\tis_mark_as_break: data?.is_mark_as_break ?? false,\r\n\t\t\t\tdisposition: data?.disposition ?? \"RES\",\r\n\t\t\t\tline_number: data?.line_number ?? 0,\r\n\t\t\t\treason: data?.reason ?? \"normal\",\r\n\t\t\t};\r\n\r\n\t\t\treturn axiosInstance\r\n\t\t\t\t.post(END_POINT.END_CALL, payload)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\t\tsdkStateManager.endCall();\r\n\r\n\t\t\t\t\tsetData(res?.data);\r\n\r\n\t\t\t\t\tsetSuccess(true);\r\n\r\n\t\t\t\t\treturn res?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tsetIsError(true);\r\n\r\n\t\t\t\t\tsetError(err);\r\n\r\n\t\t\t\t\treturn err?.response?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tsetLoading(false);\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[]\r\n\t);\r\n\r\n\treturn {\r\n\t\thandleEndCall,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError: isError,\r\n\t\terror: error,\r\n\t\tdata: data,\r\n\t};\r\n};\r\n","import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport { getSession } from \"@react-solutions/vault\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\nimport { da } from \"date-fns/locale\";\r\n\r\nexport interface StartCallPayload {\r\n\tmobileNumber: string;\r\n\tuser?: string;\r\n\tauto_answer?: boolean;\r\n\tcall_id?: string;\r\n\treference_id?: string;\r\n\tcall_source?: string;\r\n\tcaseId?: string;\r\n\tisWrapup?: boolean;\r\n\tparentCallUuid?: string;\r\n}\r\n\r\nexport type CallInitiationFunction = (data: StartCallPayload) => Promise<any>;\r\n\r\nexport type StartCalltHookStateTypes = {\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\nexport interface UseClickToCallReturn extends StartCalltHookStateTypes {\r\n\thandleStartCall: CallInitiationFunction;\r\n}\r\n\r\nexport const useClickToCall = () => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst [success, setSuccess] = useState(false);\r\n\r\n\tconst [isError, setIsError] = useState(false);\r\n\r\n\tconst [error, setError] = useState(null);\r\n\r\n\tconst [data, setData] = useState(null);\r\n\r\n\tconst handleStartCall = useCallback(async (data: StartCallPayload) => {\r\n\t\tconst state = getSession(STORAGE_KEY) as any;\r\n\t\tconst status = state?.callData?.status;\r\n\r\n\t\tsetLoading(true);\r\n\r\n\t\tif (status === \"IDLE\" || status === \"ONCALL\" || status === \"WRAPUP\") {\r\n\t\t\t// rootCallUuid chaining only runs when disableAlternateDialing is true;\r\n\t\t\t// otherwise parentCallUuid stays \"\" and the chain is cleared.\r\n\t\t\t// Caller-supplied parentCallUuid still wins as an explicit override.\r\n\t\t\tconst liveState = sdkStateManager.getState();\r\n\t\t\tconst isWrapupCall = status === \"WRAPUP\";\r\n\r\n\t\t\tlet parentCallUuid = \"\";\r\n\t\t\tif (data?.parentCallUuid) {\r\n\t\t\t\tparentCallUuid = data.parentCallUuid;\r\n\t\t\t} else if (liveState.sdkConfig?.disableAlternateDialing) {\r\n\t\t\t\tif (isWrapupCall) {\r\n\t\t\t\t\tif (liveState.rootCallUuid) {\r\n\t\t\t\t\t\tparentCallUuid = liveState.rootCallUuid;\r\n\t\t\t\t\t} else if (state?.callData?.call_id) {\r\n\t\t\t\t\t\tparentCallUuid = state.callData.call_id;\r\n\t\t\t\t\t\tsdkStateManager.setRootCallUuid(parentCallUuid);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (liveState.rootCallUuid) {\r\n\t\t\t\t\tsdkStateManager.setRootCallUuid(null);\r\n\t\t\t\t}\r\n\t\t\t} else if (liveState.rootCallUuid) {\r\n\t\t\t\tsdkStateManager.setRootCallUuid(null);\r\n\t\t\t}\r\n\r\n\t\t\tconst payload = {\r\n\t\t\t\tphone_number: data?.mobileNumber,\r\n\t\t\t\tuser: data?.user ?? state?.agentId ?? \"\",\r\n\t\t\t\tauto_answer: data?.auto_answer ?? false,\r\n\t\t\t\tcall_id: state?.callData?.call_id ?? data?.call_id ?? \"\",\r\n\t\t\t\treference_id: data?.reference_id ?? \"\",\r\n\t\t\t\tcall_source: data?.call_source ?? \"\",\r\n\t\t\t\tcaseId: data?.caseId ?? \"\",\r\n\t\t\t\tisWrapup: data?.isWrapup ?? false,\r\n\t\t\t\tparentCallUuid:data?.parentCallUuid ?? data.parentCallUuid ?? parentCallUuid ?? \"\" ,\r\n\t\t\t};\r\n\r\n\t\t\treturn axiosInstance\r\n\t\t\t\t.post(END_POINT.CLICK_TO_CALL, payload)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\t\tsetData(res?.data);\r\n\r\n\t\t\t\t\tsetSuccess(true);\r\n\r\n\t\t\t\t\treturn res?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tsetIsError(true);\r\n\r\n\t\t\t\t\tsetError(err);\r\n\r\n\t\t\t\t\treturn err?.response?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tsetLoading(false);\r\n\t\t\t\t});\r\n\t\t} else {\r\n\t\t\tsetLoading(false);\r\n\t\t\talert(\"Agent is not ready\");\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\thandleStartCall,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError: isError,\r\n\t\terror: error,\r\n\t\tdata: data,\r\n\t};\r\n};\r\n\r\n\r\n","import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nexport const useGetAuthorizationToken = () => {\r\n\tconst [token, setToken] = useState<string | undefined>(sdkStateManager.getSdkAuthToken());\r\n\r\n\tuseEffect(() => {\r\n\t\tconst unsubscribe = sdkStateManager.subscribe(() => {\r\n\t\t\tsetToken(sdkStateManager.getSdkAuthToken());\r\n\t\t});\r\n\r\n\t\treturn unsubscribe;\r\n\t}, []);\r\n\r\n\treturn token;\r\n};\r\n","import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport type { SDKState } from \"../../types\";\r\n\r\nexport function useSDKState(): SDKState {\r\n\tconst [state, setState] = useState<SDKState>(sdkStateManager.getState());\r\n\r\n\tuseEffect(() => {\r\n\t\tconst unsubscribe = sdkStateManager.subscribe(() => {\r\n\t\t\tsetState(sdkStateManager.getState());\r\n\t\t});\r\n\r\n\t\treturn unsubscribe;\r\n\t}, []);\r\n\r\n\treturn state;\r\n}\r\n","import { memo, useCallback } from \"react\";\r\nimport type { CallControlPanelProps } from \"../../types\";\r\nimport { CallControls } from \"./callControls\";\r\nimport { SDKProvider } from \"./SDKProvider\";\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\nimport { SDK_PERMISSIONS } from \"../permissions\";\r\n\r\nexport const CallControlPanel = memo<CallControlPanelProps>(({ onDataChange }) => {\r\n\tconst { sdk } = useSDKState();\r\n\r\n\tconst handleDataChange = useCallback(\r\n\t\t(data: any) => {\r\n\t\t\ttry {\r\n\t\t\t\tif (onDataChange && typeof onDataChange === \"function\") {\r\n\t\t\t\t\tonDataChange(data);\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {\r\n\t\t\t\tconsole.error(\"Error in CallControlPanel data change handler:\", error);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onDataChange]\r\n\t);\r\n\r\n\tconst sdkObject = sdk?.calls;\r\n\tconst hasDialerAccess =\r\n\t\tsdkObject?.enabled &&\r\n\t\tsdkObject?.items?.some(\r\n\t\t\t(item: any) =>\r\n\t\t\t\titem.code === SDK_PERMISSIONS.CALL_OUTBOUND ||\r\n\t\t\t\titem.code === SDK_PERMISSIONS.CALL_INBOUND,\r\n\t\t);\r\n\r\n\tif (!hasDialerAccess) return null;\r\n\r\n\treturn (\r\n\t\t<SDKProvider>\r\n\t\t\t<CallControls onDataChange={handleDataChange} />\r\n\t\t</SDKProvider>\r\n\t);\r\n});\r\n\r\nCallControlPanel.displayName = \"CallControlPanel\";\r\n","import CallEnd from \"@mui/icons-material/CallEnd\";\r\nimport Close from \"@mui/icons-material/Close\";\r\nimport DragIndicator from \"@mui/icons-material/DragIndicator\";\r\nimport Group from \"@mui/icons-material/Group\";\r\nimport KeyboardArrowDown from \"@mui/icons-material/KeyboardArrowDown\";\r\nimport Layers from \"@mui/icons-material/Layers\";\r\nimport Mic from \"@mui/icons-material/Mic\";\r\nimport MicOff from \"@mui/icons-material/MicOff\";\r\nimport Pause from \"@mui/icons-material/Pause\";\r\nimport Pending from \"@mui/icons-material/Pending\";\r\nimport Phone from \"@mui/icons-material/Phone\";\r\nimport PlayArrow from \"@mui/icons-material/PlayArrow\";\r\nimport SupportAgent from \"@mui/icons-material/SupportAgent\";\r\nimport TransferWithinAStation from \"@mui/icons-material/TransferWithinAStation\";\r\nimport Upcoming from \"@mui/icons-material/Upcoming\";\r\nimport WifiCalling3 from \"@mui/icons-material/WifiCalling3\";\r\nimport SendRounded from \"@mui/icons-material/SendRounded\";\r\nimport SmsSharp from \"@mui/icons-material/SmsSharp\";\r\nimport MoreVert from \"@mui/icons-material/MoreVert\";\r\nimport {\r\n\tBox,\r\n\tButton,\r\n\tChip,\r\n\tCircularProgress,\r\n\tFade,\r\n\tIconButton,\r\n\tMenu,\r\n\tMenuItem,\r\n\tPaper,\r\n\tTextField,\r\n\tTooltip,\r\n\tTypography,\r\n\tuseTheme,\r\n} from \"@mui/material\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\n\r\nimport {\r\n\tCallHistoryDialog,\r\n\tCallTransferDialog,\r\n\tConferenceDialog,\r\n\tEndCallDispositionDialog,\r\n\tProcessorListDialog,\r\n} from \"./dialog\";\r\n\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\nimport { useDraggable } from \"../hooks/useDraggable\";\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport { usePostRequest } from \"../services/request\";\r\nimport axiosInstance from \"../services/axios\";\r\nimport { useToast } from \"../services/toastMessage\";\r\nimport { createMicController, MicController } from \"../services/micController\";\r\nimport useStyles from \"./styles\";\r\n\r\nimport { CallControlPanelProps, CallStatus } from \"../../types\";\r\n\r\nimport { createAudioElement, cleanupAudioResources } from \"../utils/audioLoader\";\r\nimport { getSession } from \"@react-solutions/vault\";\r\n// import { USB_LIGHT_FLASH, USB_LIGHT_ON, USB_LIGHT_REQUEST } from \"../services/usbLight\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\n\r\nconst getCombineConfrenceData = (localState: any, apiData: any) => {\r\n\tconst localConfrenceData = localState?.conferenceLine;\r\n\tconst apiConferenceData = apiData?.conferencestatus;\r\n\tconst updatedConferenceData = localConfrenceData.map((item: any) => {\r\n\t\tif (item?.line === 1) {\r\n\t\t\tconst statusKey = `line_${item.line}_status`;\r\n\t\t\treturn {\r\n\t\t\t\t...item,\r\n\t\t\t\tline: 1,\r\n\t\t\t\tstatus: apiConferenceData?.[statusKey] ?? localState?.callData?.status,\r\n\t\t\t\tphone: localState?.callData?.phone_number ?? \"\",\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tconst statusKey = `line_${item.line}_status`;\r\n\t\t\tconst phoneKey = `line_${item.line}_phonenumber`;\r\n\r\n\t\t\tconst newStatus = apiConferenceData ? (apiConferenceData[statusKey] ?? \"IDLE\") : item.status;\r\n\t\t\tlet newPhone = apiConferenceData?.[phoneKey];\r\n\r\n\t\t\tif (newPhone === null || newPhone === \"0\" || newPhone === undefined) {\r\n\t\t\t\tnewPhone = newStatus === \"IDLE\" ? \"\" : item.phone;\r\n\t\t\t}\r\n\r\n\t\t\treturn {\r\n\t\t\t\t...item,\r\n\t\t\t\tstatus: newStatus,\r\n\t\t\t\tphone: newPhone,\r\n\t\t\t};\r\n\t\t}\r\n\t});\r\n\r\n\treturn updatedConferenceData;\r\n};\r\n\r\nconst formatDuration = (seconds: number): string => {\r\n\tconst mins = Math.floor(seconds / 60);\r\n\tconst secs = seconds % 60;\r\n\treturn `${mins.toString().padStart(2, \"0\")}:${secs.toString().padStart(2, \"0\")}`;\r\n};\r\n\r\nexport function CallControls({ onDataChange }: CallControlPanelProps) {\r\n\tconst theme = useTheme();\r\n\tconst state = useSDKState();\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst { disabled, enabled, outlined } = useStyles({\r\n\t\tdisabled: state.sdkConfig?.disabled || {},\r\n\t\tenabled: state.sdkConfig?.enabled || {},\r\n\t\toutlined: state.sdkConfig?.outlined || {},\r\n\t});\r\n\r\n\tconst micRef = useRef<MicController | null>(null);\r\n\tconst webSocketRef = useRef<WebSocket | null>(null);\r\n\tconst audioRef = useRef<HTMLAudioElement | null>(null);\r\n\tconst reconnectTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\tconst pingIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\r\n\tconst reconnectAttemptsRef = useRef<number>(0);\r\n\tconst hasFlashedRef = useRef(false);\r\n\tconst lastEventTimeRef = useRef<string | null>(null);\r\n\tconst conferenceAutoOpenedRef = useRef<boolean>(false);\r\n\t// ── NEW: ref to record when hold started ──────────────────────────────────\r\n\tconst holdStartTimeRef = useRef<number | null>(null);\r\n\t// ── NEW: ref to record when mute started ──────────────────────────────────\r\n\tconst muteStartTimeRef = useRef<number | null>(null);\r\n\r\n\tconst maxReconnectAttempts = 60;\r\n\tconst baseReconnectDelay = 2000;\r\n\tconst maxReconnectDelay = 30000;\r\n\r\n\tconst [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [statusAnchorEl, setStatusAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [dialerAnchorEl, setDialerAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [ambulanceAnchorEl, setAmbulanceAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [moreOptionsAnchorEl, setMoreOptionsAnchorEl] = useState<null | HTMLElement>(null);\r\n\r\n\tconst [showIframe, setShowIframe] = useState<boolean>(true);\r\n\tconst [openCallDisposition, setOpenCallDisposition] = useState<boolean>(false);\r\n\tconst [openProcessorDialog, setOpenProcessorDialog] = useState<boolean>(false);\r\n\tconst [openCallHistoryDialog, setOpenCallHistoryDialog] = useState<boolean>(false);\r\n\r\n\tconst [processList, setProcessList] = useState<\r\n\t\t| {\r\n\t\t\tprocess_id: number;\r\n\t\t\tprocess_name: string;\r\n\t\t}[]\r\n\t\t| null\r\n\t>(null);\r\n\r\n\tconst [breaksList, setBreaksList] = useState<\r\n\t\t| {\r\n\t\t\ttype: string;\r\n\t\t\tduration: string;\r\n\t\t\tdescription: string;\r\n\t\t\tactive: boolean;\r\n\t\t}[]\r\n\t\t| null\r\n\t>(null);\r\n\r\n\r\n\tconst [phoneNumber, setPhoneNumber] = useState<string>(\"\");\r\n\tconst [callDuration, setCallDuration] = useState<number>(0);\r\n\tconst [callWrapuptime, setCallWrapuptime] = useState<number | null>(null);\r\n\t// Hold duration state\r\n\tconst [holdDuration, setHoldDuration] = useState<number>(0);\r\n\t// ── NEW: mute duration state ──────────────────────────────────────────────\r\n\tconst [muteDuration, setMuteDuration] = useState<number>(0);\r\n\r\n\tconst { position, isDragging, dragRef, handleMouseDown, handleTouchStart } = useDraggable(\r\n\t\tstate.controlPanelPosition,\r\n\t\t(newPosition) => sdkStateManager.setControlPanelPosition(newPosition)\r\n\t);\r\n\r\n\tconst {\r\n\t\tposition: iframePosition,\r\n\t\tisDragging: iframeIsDragging,\r\n\t\tdragRef: iframeDragRef,\r\n\t\thandleMouseDown: iframeHandleMouseDown,\r\n\t\thandleTouchStart: iframeHandleTouchStart,\r\n\t} = useDraggable(state.iframePosition, (newPosition) =>\r\n\t\tsdkStateManager.setIframePosition(newPosition)\r\n\t);\r\n\r\n\tconst [clickToCall, { isLoading: clickToCallLoading }] = usePostRequest<{\r\n\t\tphone_number: string;\r\n\t\tuser: string;\r\n\t\tauto_answer: boolean;\r\n\t\tcall_id: string;\r\n\t\treference_id: string;\r\n\t\tcall_source: string;\r\n\t\tcaseId: string;\r\n\t\tisWrapup: boolean;\r\n\t\tparentCallUuid: string;\r\n\t}>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsetPhoneNumber(\"\");\r\n\t\t\tsetDialerAnchorEl(null);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [holdOrUnHold, { isLoading: holdOrUnHoldLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tuser_id: string;\r\n\t\tcall_uuid: string;\r\n\t\tline_number: number;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst [muteOrUnMute, { isLoading: muteOrUnMuteLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tdirection: string;\r\n\t\tuser_id: string;\r\n\t\tcall_uuid: string;\r\n\t\tline_number: number;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst [readyAgentStatus, { isLoading: agentReadyLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\trefno?: string;\r\n\t\tuserId: string;\r\n\t}>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setAgentStatus(\"\");\r\n\t\t},\r\n\t});\r\n\r\n\tconst [updateAgentStatus, { isLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tbreak_type: string;\r\n\t\tuserId: string;\r\n\t}>();\r\n\r\n\tconst [sendNotification] = usePostRequest<{\r\n\t\tphone_number: string;\r\n\t\ttype: string;\r\n\t}>();\r\n\r\n\tconst [endCall, { isLoading: endCallLoading }] = usePostRequest<{\r\n\t\tcall_id: string;\r\n\t\tagent_id: string;\r\n\t\tset_followUp: string;\r\n\t\tcallback_date: string;\r\n\t\tcallback_hrs: number;\r\n\t\tcallback_mins: number;\r\n\t\tmobile_number: string;\r\n\t\tlist_comments: string;\r\n\t\tcall_reference_id: string;\r\n\t\tis_mark_as_break: boolean;\r\n\t\tdisposition: string;\r\n\t\tline_number: number;\r\n\t\treason: string;\r\n\t}>({\r\n\t\tdisabledSuccessToast: true,\r\n\t\tonSuccess: (res: any) => {\r\n\t\t\tsdkStateManager.endCall();\r\n\t\t\tsetOpenCallDisposition(false);\r\n\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\tshowToast(res?.message || \"Call ended successfully\", \"success\");\r\n\t\t},\r\n\t});\r\n\r\n\tconst handleCloseQueueCounts = () => {\r\n\t\tsetAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleOpenDialer = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetShowIframe(true);\r\n\t\tsetDialerAnchorEl(event.currentTarget);\r\n\t};\r\n\tconst handleOpenAbulanceServices = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetAmbulanceAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleOpenMoreOptions = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetMoreOptionsAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleCloseDialer = () => {\r\n\t\tsetDialerAnchorEl(null);\r\n\t};\r\n\tconst handleCloseAmbulance = () => {\r\n\t\tsetAmbulanceAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleCloseMoreOptions = () => {\r\n\t\tsetMoreOptionsAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleOpenAgentStatus = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetStatusAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleCloseAgentStatus = () => {\r\n\t\tsetStatusAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleAgentReady = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: \"READYAGENT\",\r\n\t\t\tuserId: String(state.agentId ?? \"\"),\r\n\t\t};\r\n\r\n\t\treadyAgentStatus(END_POINT.READY_AGENT, payload);\r\n\t};\r\n\r\n\tconst handleUpdateAgentStatus = (status: string) => {\r\n\t\tsetStatusAnchorEl(null);\r\n\t\tconst currentStatus = state.callData?.status?.toUpperCase() as CallStatus;\r\n\t\tif ([CallStatus.ONCALL, CallStatus.RINGING, CallStatus.DIALING, CallStatus.WRAPUP].includes(currentStatus)) {\r\n\t\t\tshowToast(\"Cannot put agent on break while on a call\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst payload = {\r\n\t\t\taction: \"AGENTBREAK\",\r\n\t\t\tbreak_type: status,\r\n\t\t\tuserId: String(state.agentId ?? \"\"),\r\n\t\t};\r\n\t\tupdateAgentStatus(END_POINT.UPDATE_AGENT_BREAK, payload).then(() => {\r\n\t\t\tsdkStateManager.setAgentStatus(status);\r\n\t\t});\r\n\t};\r\n\r\n\tconst handleStartCall = (number: string) => {\r\n\t\tif (number.length !== 10) {\r\n\t\t\tshowToast(\"Invalid phone number\", \"error\");\r\n\t\t} else if (!/^\\d+$/.test(number)) {\r\n\t\t\tshowToast(\"Invalid phone number\", \"error\");\r\n\t\t} else {\r\n\t\t\t// rootCallUuid chaining only runs when disableAlternateDialing is true\r\n\t\t\t// (host opts out of the alternate dialog and relies on the built-in flow);\r\n\t\t\t// otherwise parentCallUuid stays \"\" and the chain is cleared.\r\n\t\t\tconst currentStatus = (state.callData?.status ?? \"\").toUpperCase();\r\n\t\t\tconst isWrapupCall = currentStatus === CallStatus.WRAPUP;\r\n\r\n\t\t\tlet parentCallUuid = \"\";\r\n\t\t\tif (!state.sdkConfig?.disableAlternateDialing) {\r\n\t\t\t\tif (isWrapupCall) {\r\n\t\t\t\t\tif (state.rootCallUuid) {\r\n\t\t\t\t\t\tparentCallUuid = state.rootCallUuid;\r\n\t\t\t\t\t} else if (state.callData?.call_id) {\r\n\t\t\t\t\t\tparentCallUuid = state.callData.call_id;\r\n\t\t\t\t\t\tsdkStateManager.setRootCallUuid(parentCallUuid);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (state.rootCallUuid) {\r\n\t\t\t\t\tsdkStateManager.setRootCallUuid(null);\r\n\t\t\t\t}\r\n\t\t\t} else if (state.rootCallUuid) {\r\n\t\t\t\tsdkStateManager.setRootCallUuid(null);\r\n\t\t\t}\r\n\r\n\t\t\tconst payload = {\r\n\t\t\t\tphone_number: number,\r\n\t\t\t\tuser: state.agentId,\r\n\t\t\t\tauto_answer: false,\r\n\t\t\t\tcall_id: \"\",\r\n\t\t\t\treference_id: \"\",\r\n\t\t\t\tcall_source: \"\",\r\n\t\t\t\tcaseId: \"\",\r\n\t\t\t\tisWrapup: isWrapupCall,\r\n\t\t\t\tparentCallUuid,\r\n\t\t\t};\r\n\r\n\t\t\tclickToCall(END_POINT.CLICK_TO_CALL, payload);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleHoldToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.hold === 1 ? CallStatus.UNHOLD : CallStatus.HOLD,\r\n\t\t\tuser_id: String(state.agentId ?? \"\"),\r\n\t\t\tcall_uuid: state.callData?.call_id ?? \"\",\r\n\t\t\tline_number: 0,\r\n\t\t};\r\n\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t};\r\n\r\n\tconst handleMuteToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.mute === 1 ? CallStatus.UNMUTE : CallStatus.MUTE,\r\n\t\t\tdirection: \"both\",\r\n\t\t\tuser_id: String(state.agentId ?? \"\"),\r\n\t\t\tcall_uuid: state.callData?.call_id ?? \"\",\r\n\t\t\tline_number: 0,\r\n\t\t};\r\n\r\n\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t};\r\n\r\n\tconst handleEndCall = (data: {\r\n\t\tdisposition: { label: string; value: string; id?: number };\r\n\t\tfollowUp: { label: string; value: string };\r\n\t\tcallbackDate: string;\r\n\t\tcallbackHrs: string;\r\n\t\tcallbackMins: string;\r\n\t\tselected_break?: boolean;\r\n\t\tnotes?: string;\r\n\t}) => {\r\n\t\tconst payload = {\r\n\t\t\tcall_id: state.callData?.call_id ?? \"\",\r\n\t\t\tagent_id: state.agentId ?? \"\",\r\n\t\t\tset_followUp: data?.followUp?.value ?? \"\",\r\n\t\t\tcallback_date: data?.callbackDate ?? \"\",\r\n\t\t\tcallback_hrs: Number(data?.callbackHrs) || 0,\r\n\t\t\tcallback_mins: Number(data?.callbackMins) || 0,\r\n\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\tlist_comments: data?.notes ?? \"\",\r\n\t\t\tcall_reference_id: state.callData?.call_id ?? \"\",\r\n\t\t\tis_mark_as_break: data?.selected_break ?? false,\r\n\t\t\tdisposition: data?.disposition?.value ?? \"\",\r\n\t\t\tline_number: 0,\r\n\t\t\treason: \"normal\",\r\n\t\t};\r\n\r\n\t\tsetPhoneNumber(\"\");\r\n\t\tendCall(END_POINT.END_CALL, payload);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tconst handleBeforeUnload = (e: BeforeUnloadEvent) => {\r\n\t\t\te.preventDefault();\r\n\t\t};\r\n\r\n\t\twindow.addEventListener(\"beforeunload\", handleBeforeUnload);\r\n\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener(\"beforeunload\", handleBeforeUnload);\r\n\t\t};\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst mic = createMicController();\r\n\t\tmicRef.current = mic;\r\n\r\n\t\tmic.start().catch((err) => {\r\n\t\t\tconsole.error(\"Failed to start mic:\", err);\r\n\t\t});\r\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\r\n\t\t\tconst fullState = getSession(STORAGE_KEY) as any;\r\n\t\t\tconst key = event.key?.toLowerCase();\r\n\r\n\t\t\tif (!event.altKey || fullState?.callData?.status !== CallStatus.ONCALL) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"m\" && String(fullState?.callData?.mute) === \"0\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tmicRef.current?.mute();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.MUTE,\r\n\t\t\t\t\tdirection: \"both\",\r\n\t\t\t\t\tuser_id: String(fullState.agentId ?? \"\"),\r\n\t\t\t\t\tcall_uuid: fullState?.callData?.call_id ?? \"\",\r\n\t\t\t\t\tline_number: 0,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"u\" && String(fullState?.callData?.mute) === \"1\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.UNMUTE,\r\n\t\t\t\t\tdirection: \"both\",\r\n\t\t\t\t\tuser_id: String(fullState.agentId ?? \"\"),\r\n\t\t\t\t\tcall_uuid: fullState?.callData?.call_id ?? \"\",\r\n\t\t\t\t\tline_number: 0,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t\t\t\tmicRef.current?.unmute();\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"h\" && String(fullState?.callData?.hold) === \"0\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.HOLD,\r\n\t\t\t\t\tuser_id: String(fullState.agentId ?? \"\"),\r\n\t\t\t\t\tcall_uuid: fullState?.callData?.call_id ?? \"\",\r\n\t\t\t\t\tline_number: 0,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"r\" && String(fullState?.callData?.hold) === \"1\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.UNHOLD,\r\n\t\t\t\t\tuser_id: String(fullState.agentId ?? \"\"),\r\n\t\t\t\t\tcall_uuid: fullState?.callData?.call_id ?? \"\",\r\n\t\t\t\t\tline_number: 0,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\twindow.addEventListener(\"keydown\", handleKeyDown);\r\n\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener(\"keydown\", handleKeyDown);\r\n\t\t};\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tlet interval: ReturnType<typeof setInterval>;\r\n\t\tlet wrapUpinterval: ReturnType<typeof setInterval>;\r\n\r\n\t\tif (state.callData.status && state.callData.status === CallStatus.ONCALL) {\r\n\t\t\tinterval = setInterval(() => {\r\n\t\t\t\tconst elapsed = state.callStartTime\r\n\t\t\t\t\t? Math.floor((Date.now() - Number(state.callStartTime)) / 1000)\r\n\t\t\t\t\t: 0;\r\n\r\n\t\t\t\tsetCallDuration(elapsed);\r\n\t\t\t}, 1000);\r\n\t\t} else {\r\n\t\t\tsetCallDuration(0);\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tstate.callData.status &&\r\n\t\t\tstate.callData.status === CallStatus.WRAPUP &&\r\n\t\t\tcallWrapuptime !== null\r\n\t\t) {\r\n\t\t\twrapUpinterval = setInterval(() => {\r\n\t\t\t\tsetCallWrapuptime((prevTime) => {\r\n\t\t\t\t\tif (prevTime === null || prevTime <= 1) {\r\n\t\t\t\t\t\tclearInterval(wrapUpinterval);\r\n\t\t\t\t\t\thandleEndCall({\r\n\t\t\t\t\t\t\tdisposition: { label: \"Auto Wrapup\", value: \"AUTO_WRAPUP\" },\r\n\t\t\t\t\t\t\tfollowUp: { label: \"No\", value: \"N\" },\r\n\t\t\t\t\t\t\tcallbackDate: \"\",\r\n\t\t\t\t\t\t\tcallbackHrs: \"\",\r\n\t\t\t\t\t\t\tcallbackMins: \"\",\r\n\t\t\t\t\t\t\tselected_break: false,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn prevTime - 1;\r\n\t\t\t\t});\r\n\t\t\t}, 1000);\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (interval) clearInterval(interval);\r\n\t\t\tif (wrapUpinterval) clearInterval(wrapUpinterval);\r\n\t\t};\r\n\t}, [state.callData.status]);\r\n\r\n\t// Hold duration timer\r\n\tuseEffect(() => {\r\n\t\tlet holdInterval: ReturnType<typeof setInterval>;\r\n\r\n\t\tconst isOnCall =\r\n\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL;\r\n\t\tconst isOnHold = state.callData?.hold === 1;\r\n\r\n\t\tif (isOnHold && isOnCall) {\r\n\t\t\tif (!holdStartTimeRef.current) {\r\n\t\t\t\tholdStartTimeRef.current = Date.now();\r\n\t\t\t}\r\n\t\t\tholdInterval = setInterval(() => {\r\n\t\t\t\tsetHoldDuration(\r\n\t\t\t\t\tMath.floor((Date.now() - holdStartTimeRef.current!) / 1000)\r\n\t\t\t\t);\r\n\t\t\t}, 1000);\r\n\t\t} else {\r\n\t\t\tholdStartTimeRef.current = null;\r\n\t\t\tsetHoldDuration(0);\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (holdInterval) clearInterval(holdInterval);\r\n\t\t};\r\n\t}, [state.callData?.hold, state.callData?.status]);\r\n\r\n\t// ── NEW: mute duration timer ──────────────────────────────────────────────\r\n\tuseEffect(() => {\r\n\t\tlet muteInterval: ReturnType<typeof setInterval>;\r\n\r\n\t\tconst isOnCall =\r\n\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL;\r\n\t\tconst isMuted = state.callData?.mute === 1;\r\n\t\tconst isHeld = state.callData?.hold === 1;\r\n\r\n\t\tif (isMuted && isOnCall && !isHeld) {\r\n\t\t\t// Record start time only once when mute begins\r\n\t\t\tif (!muteStartTimeRef.current) {\r\n\t\t\t\tmuteStartTimeRef.current = Date.now();\r\n\t\t\t}\r\n\t\t\tmuteInterval = setInterval(() => {\r\n\t\t\t\tsetMuteDuration(\r\n\t\t\t\t\tMath.floor((Date.now() - muteStartTimeRef.current!) / 1000)\r\n\t\t\t\t);\r\n\t\t\t}, 1000);\r\n\t\t} else {\r\n\t\t\t// Reset when mute is released or call ends\r\n\t\t\tmuteStartTimeRef.current = null;\r\n\t\t\tsetMuteDuration(0);\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (muteInterval) clearInterval(muteInterval);\r\n\t\t};\r\n\t}, [state.callData?.mute, state.callData?.status]);\r\n\t// ─────────────────────────────────────────────────────────────────────────\r\n\r\n\tuseEffect(() => {\r\n\t\tcreateAudioElement()\r\n\t\t\t.then((audio) => {\r\n\t\t\t\taudioRef.current = audio;\r\n\t\t\t})\r\n\t\t\t.catch((error) => {\r\n\t\t\t\tconsole.error(\"Failed to load audio element:\", error);\r\n\t\t\t});\r\n\r\n\t\treturn () => {\r\n\t\t\tif (audioRef.current) {\r\n\t\t\t\taudioRef.current.pause();\r\n\t\t\t\taudioRef.current.currentTime = 0;\r\n\t\t\t\taudioRef.current.src = \"\"; // Clear source\r\n\t\t\t\taudioRef.current = null;\r\n\t\t\t}\r\n\t\t\t// Cleanup blob URLs\r\n\t\t\tcleanupAudioResources();\r\n\t\t};\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onDataChange && state.callData) {\r\n\t\t\tconst { process_id, process_name, status, phone_number, agent_id, call_id, call_details } =\r\n\t\t\t\tstate.callData;\r\n\t\t\tconst lead_data = sdkStateManager.getTransferLeadData();\r\n\t\t\tconst callData = {\r\n\t\t\t\tphone_number,\r\n\t\t\t\tstatus,\r\n\t\t\t\tcallReferenceId: call_id,\r\n\t\t\t\tagent_id,\r\n\t\t\t\tprocess_id,\r\n\t\t\t\tprocess_name,\r\n\t\t\t\tcall_details,\r\n\t\t\t\tauto_wrapup_time: state.backendCallControls?.auto_wrapup_time ?? null,\r\n\t\t\t\t...(lead_data !== undefined && { lead_data }),\r\n\t\t\t\tsocket_info: state.callData\r\n\t\t\t};\r\n\t\t\tonDataChange(callData);\r\n\t\t}\r\n\t}, [state.callData, onDataChange]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (state.agentId) {\r\n\t\t\t// axiosInstance\r\n\t\t\t// \t.post(END_POINT.PROCESS_LIST, {\r\n\t\t\t// \t\tuserId: state.agentId,\r\n\t\t\t// \t\taction: \"GETAGENTPROCESSLIST\",\r\n\t\t\t// \t\trefno: \"1234221233\",\r\n\t\t\t// \t})\r\n\t\t\t// \t.then((res) => {\r\n\t\t\t// \t\t// if (res && res.data?.data && res?.data?.data?.length > 1) {\r\n\t\t\t// \t\t// \tsetProcessList(res.data.data);\r\n\t\t\t// \t\t// \tsetOpenProcessorDialog(true);\r\n\t\t\t// \t\t// } else {\r\n\t\t\t// \t\t\tconst data = {\r\n\t\t\t// \t\t\t\"process_id\": 101,\r\n\t\t\t// \t\t\t\"process_name\": \"ConVoxProcess\"\r\n\t\t\t// \t\t}\r\n\t\t\t// \t\t\tsetProcessList([data]);\r\n\r\n\t\t\t// \t\t\tsdkStateManager.setProcess(data);\r\n\t\t\t// \t\t\t// setOpenProcessorDialog(false);\r\n\t\t\t// \t\t// }\r\n\t\t\t// \t})\r\n\t\t\t// \t.catch((err) => {\r\n\t\t\t// \t\t\tconst data = {\r\n\t\t\t// \t\t\t\"process_id\": 101,\r\n\t\t\t// \t\t\t\"process_name\": \"ConVoxProcess\"\r\n\t\t\t// \t\t}\r\n\t\t\t// \t\t\tsetProcessList([data]);\r\n\r\n\t\t\t// \t\t\tsdkStateManager.setProcess(data);\r\n\t\t\t// \t\tshowToast(err.response.data.message, \"error\");\r\n\t\t\t// \t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.get(END_POINT.BREAKS_LIST)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res && res.data?.data && res?.data?.data?.length) {\r\n\t\t\t\t\t\tsetBreaksList(res.data.data);\r\n\t\t\t\t\t\tconst liveStatus = sdkStateManager.getState().callData?.status;\r\n\t\t\t\t\t\tif (!liveStatus) {\r\n\t\t\t\t\t\t\thandleUpdateAgentStatus(res.data.data[0].type);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tshowToast(err.response.data.message, \"error\");\r\n\t\t\t\t});\r\n\t\t}\r\n\t}, [state.agentId]);\r\n\r\n\tconst connectWebSocket = () => {\r\n\t\tif (!state.agentId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (reconnectTimeoutRef.current) {\r\n\t\t\tclearTimeout(reconnectTimeoutRef.current);\r\n\t\t\treconnectTimeoutRef.current = null;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\twebSocketRef.current = new WebSocket(`${state.urlConfig?.webSocketURL}/api/v1/ws/agent/events?token=${state.authorization?.accessToken}`);\r\n\r\n\t\t\twebSocketRef.current.onopen = () => {\r\n\t\t\t\tconsole.log(\"🌐 WebSocket connection established\");\r\n\t\t\t\treconnectAttemptsRef.current = 0;\r\n\r\n\t\t\t\tif (pingIntervalRef.current) {\r\n\t\t\t\t\tclearInterval(pingIntervalRef.current);\r\n\t\t\t\t}\r\n\t\t\t\tpingIntervalRef.current = setInterval(() => {\r\n\t\t\t\t\tif (webSocketRef.current && webSocketRef.current.readyState === WebSocket.OPEN) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\twebSocketRef.current.send(JSON.stringify({ type: \"ping\" }));\r\n\t\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\t\tconsole.error(\"Failed to send ping:\", error);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 30000);\r\n\t\t\t};\r\n\r\n\t\t\twebSocketRef.current.onmessage = (event) => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst data = JSON.parse(event.data);\r\n\r\n\t\t\t\t\tif (data.type === \"pong\") {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst sdkState = getSession(STORAGE_KEY) as any;\r\n\t\t\t\t\tconst confrence = getCombineConfrenceData(sdkState, data);\r\n\t\t\t\t\t// console.log( \"📊 Parsed JSON:\", data);\r\n\t\t\t\t\tconst callData = {\r\n\t\t\t\t\t\t...data,\r\n\t\t\t\t\t\tagent_id: data?.agent_id,\r\n\t\t\t\t\t\tstatus: data?.status,\r\n\t\t\t\t\t\ttype: data?.type,\r\n\t\t\t\t\t\tevent_time: data?.event_time,\r\n\t\t\t\t\t\tphone_number: data?.phone_number,\r\n\t\t\t\t\t\tcall_id: data?.call_id,\r\n\t\t\t\t\t\tprocess_id: data?.process_id,\r\n\t\t\t\t\t\tprocess_name: data?.process_name,\r\n\t\t\t\t\t\thold: data?.hold,\r\n\t\t\t\t\t\tmute: data?.mute,\r\n\t\t\t\t\t\tmode: data?.mode,\r\n\t\t\t\t\t\tqueue_name: data?.queue_name,\r\n\t\t\t\t\t\tauto_wrapup_time: data?.auto_wrapup_time ?? null,\r\n\t\t\t\t\t\t...(data?.call_details !== undefined && { call_details: data.call_details }),\r\n\t\t\t\t\t\t...(data?.break_details !== undefined && { break_details: data.break_details }),\r\n\t\t\t\t\t\t...(data?.call_sage !== undefined && { call_sage: data.call_sage }),\r\n\t\t\t\t\t};\r\n\t\t\t\t\tsdkStateManager.updateCallData(callData);\r\n\t\t\t\t\tsdkStateManager.updateConferenceData([...confrence]);\r\n\t\t\t\t\tsdkStateManager.setConsultInfo(data.consult_info ?? null);\r\n\r\n\t\t\t\t\tconst conferenceStatus = data?.conferencestatus;\r\n\t\t\t\t\tif (conferenceStatus) {\r\n\t\t\t\t\t\tconst hasAnsweredSecondaryLine = Object.keys(conferenceStatus).some((key) => {\r\n\t\t\t\t\t\t\tconst match = key.match(/^line_(\\d+)_status$/);\r\n\t\t\t\t\t\t\tif (!match) return false;\r\n\t\t\t\t\t\t\tconst lineNum = Number(match[1]);\r\n\t\t\t\t\t\t\tif (lineNum <= 1) return false;\r\n\t\t\t\t\t\t\tconst status = String(conferenceStatus[key] ?? \"\").toUpperCase();\r\n\t\t\t\t\t\t\treturn status === CallStatus.ONCALL;\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif (hasAnsweredSecondaryLine) {\r\n\t\t\t\t\t\t\tif (!conferenceAutoOpenedRef.current) {\r\n\t\t\t\t\t\t\t\tsdkStateManager.setOpenConferenceDialog(true);\r\n\t\t\t\t\t\t\t\tconferenceAutoOpenedRef.current = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tconferenceAutoOpenedRef.current = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconferenceAutoOpenedRef.current = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (data?.call_consult_controls) {\r\n\t\t\t\t\t\tsdkStateManager.updateSDKConfigFromPermissions(data.call_consult_controls);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsdkStateManager.resetConsultControls();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ([CallStatus.RINGING, CallStatus.DIALING].includes(data.status as CallStatus)) {\r\n\t\t\t\t\t\tsetShowIframe(true);\r\n\t\t\t\t\t\tsetCallWrapuptime(sdkState?.sdkConfig?.auto_wrapup_time ?? null);\r\n\t\t\t\t\t\tsdkStateManager.updateConferenceData([\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 1,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 2,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 3,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 4,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 5,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t]);\r\n\r\n\t\t\t\t\t\tif (data?.mode !== \"manual\" && audioRef.current && state?.sdkConfig?.enableRingtone) {\r\n\t\t\t\t\t\t\taudioRef.current.play().catch((error) => {\r\n\t\t\t\t\t\t\t\tconsole.error(\"Failed to play ringtone:\", error);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (audioRef.current) {\r\n\t\t\t\t\t\t\taudioRef.current.pause();\r\n\t\t\t\t\t\t\taudioRef.current.currentTime = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (data.status === CallStatus.IDLE) {\r\n\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_ON(\"green\"));\r\n\t\t\t\t\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t\t\t\t\t\tsdkStateManager.setOpenConferenceDialog(false);\r\n\t\t\t\t\t\tsdkStateManager.clearTransferLeadData();\r\n\t\t\t\t\t} else if (data.status === CallStatus.ONCALL) {\r\n\r\n\t\t\t\t\t\t// Start timer for new call OR transfer\r\n\t\t\t\t\t\tif (data.status === CallStatus.ONCALL) {\r\n\t\t\t\t\t\t\tsdkStateManager.startCall();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!showIframe) {\r\n\t\t\t\t\t\t\tsetShowIframe(true);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (data?.mute !== 1 && data?.hold !== 1) {\r\n\t\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_ON(\"red\"));\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"red\", 1));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (\r\n\t\t\t\t\t\t(data?.mute === 1 || data?.hold === 1) &&\r\n\t\t\t\t\t\tdata.status === CallStatus.ONCALL\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"red\", 1));\r\n\t\t\t\t\t} else if (data.status === CallStatus.BREAK) {\r\n\t\t\t\t\t\tconst breakTime = sdkState?.sdkConfig?.break_time;\r\n\t\t\t\t\t\tconst eventTime = data?.event_time ?? null;\r\n\r\n\t\t\t\t\t\tif (eventTime !== lastEventTimeRef.current) {\r\n\t\t\t\t\t\t\thasFlashedRef.current = false;\r\n\t\t\t\t\t\t\tlastEventTimeRef.current = eventTime;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlet isOverLimit = false;\r\n\t\t\t\t\t\tif (breakTime && eventTime) {\r\n\t\t\t\t\t\t\tconst differenceInMinutes =\r\n\t\t\t\t\t\t\t\t(new Date().getTime() - new Date(eventTime).getTime()) / 60000;\r\n\r\n\t\t\t\t\t\t\tif (Number(differenceInMinutes.toFixed(0)) >= Number(breakTime)) {\r\n\t\t\t\t\t\t\t\tisOverLimit = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (isOverLimit) {\r\n\t\t\t\t\t\t\tif (!hasFlashedRef.current) {\r\n\t\t\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"yellow\", 1));\r\n\t\t\t\t\t\t\t\thasFlashedRef.current = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_ON(\"yellow\"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (data.status === CallStatus.WRAPUP) {\r\n\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"green\", 1));\r\n\t\t\t\t\t\tsdkStateManager.endCall();\r\n\t\t\t\t\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t\t\t\t\t\tsdkStateManager.setOpenConferenceDialog(false);\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch {\r\n\t\t\t\t\tconsole.error(\"📨 Raw message:\", event.data);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\twebSocketRef.current.onclose = (event) => {\r\n\t\t\t\tif (pingIntervalRef.current) {\r\n\t\t\t\t\tclearInterval(pingIntervalRef.current);\r\n\t\t\t\t\tpingIntervalRef.current = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (event.code !== 1000 && reconnectAttemptsRef.current < maxReconnectAttempts) {\r\n\t\t\t\t\treconnectAttemptsRef.current += 1;\r\n\t\t\t\t\tconst delay = Math.min(\r\n\t\t\t\t\t\tbaseReconnectDelay * Math.pow(2, reconnectAttemptsRef.current - 1),\r\n\t\t\t\t\t\tmaxReconnectDelay\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tconsole.warn(\r\n\t\t\t\t\t\t`🔄 Attempting to reconnect WebSocket (attempt ${reconnectAttemptsRef.current}/${maxReconnectAttempts}) in ${delay}ms`\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\treconnectTimeoutRef.current = setTimeout(() => {\r\n\t\t\t\t\t\tconnectWebSocket();\r\n\t\t\t\t\t}, delay);\r\n\t\t\t\t} else if (reconnectAttemptsRef.current >= maxReconnectAttempts) {\r\n\t\t\t\t\tshowToast(\"WebSocket connection failed. Please refresh the page.\", \"error\");\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\twebSocketRef.current.onerror = (error) => {\r\n\t\t\t\tconsole.error(\"❌ WebSocket error:\", error);\r\n\t\t\t};\r\n\t\t} catch (error) {\r\n\t\t\tif (reconnectAttemptsRef.current < maxReconnectAttempts) {\r\n\t\t\t\treconnectAttemptsRef.current += 1;\r\n\t\t\t\tconst delay = Math.min(\r\n\t\t\t\t\tbaseReconnectDelay * Math.pow(2, reconnectAttemptsRef.current - 1),\r\n\t\t\t\t\tmaxReconnectDelay\r\n\t\t\t\t);\r\n\t\t\t\treconnectTimeoutRef.current = setTimeout(() => {\r\n\t\t\t\t\tconnectWebSocket();\r\n\t\t\t\t}, delay);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (state.agentId) {\r\n\t\t\tconnectWebSocket();\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (reconnectTimeoutRef.current) {\r\n\t\t\t\tclearTimeout(reconnectTimeoutRef.current);\r\n\t\t\t\treconnectTimeoutRef.current = null;\r\n\t\t\t}\r\n\t\t\tif (pingIntervalRef.current) {\r\n\t\t\t\tclearInterval(pingIntervalRef.current);\r\n\t\t\t\tpingIntervalRef.current = null;\r\n\t\t\t}\r\n\t\t\tif (webSocketRef.current) {\r\n\t\t\t\twebSocketRef.current.close(1000, \"Component unmounting\");\r\n\t\t\t\twebSocketRef.current = null;\r\n\t\t\t}\r\n\t\t\treconnectAttemptsRef.current = 0;\r\n\t\t};\r\n\t}, [state.agentId]);\r\n\r\n\tconst handleSendSMS = (data: any) => {\r\n\t\tsendNotification(END_POINT.SEND_NOTIFICATIONS, {\r\n\t\t\tphone_number: data?.phone_number ?? \"\",\r\n\t\t\ttype: \"ambulance\",\r\n\t\t});\r\n\t};\r\n\r\n\tif (!state.isInitialized) {\r\n\t\treturn (\r\n\t\t\t<Box>\r\n\t\t\t\t{Boolean(openProcessorDialog) && (\r\n\t\t\t\t\t<ProcessorListDialog\r\n\t\t\t\t\t\tprocessList={processList}\r\n\t\t\t\t\t\topen={openProcessorDialog}\r\n\t\t\t\t\t\tsetOpen={setOpenProcessorDialog}\r\n\t\t\t\t\t\thandleSelectedProcessor={(data: { process_id: number; process_name: string }) => {\r\n\t\t\t\t\t\t\tsdkStateManager.setProcess(data);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n\r\n\t// Derived flags used in JSX\r\n\tconst isOnHold =\r\n\t\tstate.callData?.hold === 1 &&\r\n\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL;\r\n\r\n\t// ── NEW: derived mute flag ────────────────────────────────────────────────\r\n\tconst isMuted =\r\n\t\tstate.callData?.mute === 1 &&\r\n\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL;\r\n\t// ─────────────────────────────────────────────────────────────────────────\r\n\r\n\tconst isVertical = state.sdkConfig?.sdkPosition === \"vertical\";\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Box>\r\n\t\t\t\t<Fade in={true} timeout={300}>\r\n\t\t\t\t\t<Paper\r\n\t\t\t\t\t\tref={state.sdkConfig?.isDraggable ? dragRef : null}\r\n\t\t\t\t\t\televation={\r\n\t\t\t\t\t\t\tisDragging ? 4\r\n\t\t\t\t\t\t\t\t: state.sdkConfig?.isDraggable ? 1\r\n\t\t\t\t\t\t\t\t\t: 0\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tposition: state.sdkConfig?.isDraggable ? \"fixed\" : \"relative\",\r\n\t\t\t\t\t\t\tleft: state.sdkConfig?.isDraggable ? position.x : \"auto\",\r\n\t\t\t\t\t\t\ttop: state.sdkConfig?.isDraggable ? position.y : \"auto\",\r\n\t\t\t\t\t\t\tdisplay: \"inline-block\",\r\n\t\t\t\t\t\t\twidth: isVertical ? \"180px\" : \"auto\",\r\n\t\t\t\t\t\t\tflexShrink: 0,\r\n\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\r\n\t\t\t\t\t\t\tp: 0.5,\r\n\t\t\t\t\t\t\tborderRadius: 3,\r\n\t\t\t\t\t\t\tbgcolor: \"background.paper\",\r\n\t\t\t\t\t\t\tzIndex: state.sdkConfig?.isDraggable ? Number.MAX_SAFE_INTEGER : 0,\r\n\t\t\t\t\t\t\ttransition: theme.transitions.create([\"box-shadow\", \"transform\"], {\r\n\t\t\t\t\t\t\t\tduration: theme.transitions.duration.short,\r\n\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\tuserSelect: \"none\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\tflexDirection: isVertical ? \"column\" : \"row\",\r\n\t\t\t\t\t\t\t\talignItems: isVertical ? \"stretch\" : \"center\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\tflexDirection: isVertical ? \"column\" : \"row\",\r\n\t\t\t\t\t\t\t\t\talignItems: isVertical ? \"stretch\" : \"center\",\r\n\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\tmargin: isVertical ? \"10px 8px 4px 8px\" : \"0px 10px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{state.sdkConfig?.isDraggable && (\r\n\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\tcomponent=\"div\"\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tcursor: \"all-scroll\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tonMouseDown={handleMouseDown}\r\n\t\t\t\t\t\t\t\t\t\tonTouchStart={handleTouchStart}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<DragIndicator />\r\n\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{state.sdkConfig?.enableQueueName &&\r\n\t\t\t\t\t\t\t\t\tstate?.callData?.queue_name &&\r\n\t\t\t\t\t\t\t\t\tstate?.callData?.mode !== \"manual\" && (\r\n\t\t\t\t\t\t\t\t\t\t<Chip label={state?.callData?.queue_name} />\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.sdkConfig?.disabledDialButton ? \"Outbound call feature is disabled\" : \"Dial\"}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t{isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstartIcon={<WifiCalling3 />}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t![\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disabledDialButton &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!((state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableAlternateDialing)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenDialer(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t((state.callData.status?.toUpperCase() as CallStatus) === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!!state.sdkConfig?.disableAlternateDialing)\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"flex-start\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpx: 2,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t((state.callData.status?.toUpperCase() as CallStatus) === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!!state.sdkConfig?.disableAlternateDialing)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) ? \"action.selected\" : \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderColor: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t((state.callData.status?.toUpperCase() as CallStatus) === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!!state.sdkConfig?.disableAlternateDialing)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) ? \"action.selected\" : \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tDial\r\n\t\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t![\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disabledDialButton &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!((state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableAlternateDialing)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenDialer(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t((state.callData.status?.toUpperCase() as CallStatus) === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!!state.sdkConfig?.disableAlternateDialing)\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<WifiCalling3\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor:\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t([\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t((state.callData.status?.toUpperCase() as CallStatus) === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!!state.sdkConfig?.disableAlternateDialing))\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"action.selected\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t{/* ── UPDATED: call duration + hold duration + mute duration display ── */}\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tonClick={() => setShowIframe(true)}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\r\n\t\t\t\t\t\t\t\t\t\tminWidth: \"52px\",\r\n\t\t\t\t\t\t\t\t\t\tmarginRight: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{state.callData?.status?.toUpperCase() === CallStatus.BREAK && state.callData?.break_details?.value ? (\r\n\t\t\t\t\t\t\t\t\t\t<Tooltip title={state.callData.break_details.value}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder: \"1.5px solid\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderColor: \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"50px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpx: \"8px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpy: \"3px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"80px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tminWidth: '80px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextAlign: 'center'\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"700\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1.2,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextOverflow: \"ellipsis\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"uppercase\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{state.callData.break_details.value}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: isOnHold\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"warning.main\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isMuted\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"error.main\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"18px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1.2,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{state.callData.status === CallStatus.WRAPUP && callWrapuptime !== null\r\n\t\t\t\t\t\t\t\t\t\t\t\t? formatDuration(callWrapuptime)\r\n\t\t\t\t\t\t\t\t\t\t\t\t: formatDuration(callDuration)}\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{/* Hold badge — only visible while call is on hold */}\r\n\t\t\t\t\t\t\t\t\t{isOnHold && (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tgap: \"3px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"warning.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tpx: \"5px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tpy: \"1px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tmt: \"2px\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Pause sx={{ fontSize: \"11px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"11px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{formatDuration(holdDuration)}\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{/* ── NEW: Mute badge — only visible while call is muted ── */}\r\n\t\t\t\t\t\t\t\t\t{isMuted && !isOnHold && (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tgap: \"3px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"error.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tpx: \"5px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tpy: \"1px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tmt: \"2px\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<MicOff sx={{ fontSize: \"11px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"11px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{formatDuration(muteDuration)}\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t{/* ─────────────────────────────────────────────────────── */}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t{/* ─────────────────────────────────────────────────── */}\r\n\r\n\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\tsx={{ padding: \"18px 0px\" }}\r\n\t\t\t\t\t\t\t\t\tlabel={\r\n\t\t\t\t\t\t\t\t\t\tisLoading || agentReadyLoading ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"bold\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"60px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"20px\" />\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"bold\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"60px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextAlign: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{state.callData?.status?.toUpperCase() ?? \"N/A\"}\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tonClick={handleOpenAgentStatus}\r\n\t\t\t\t\t\t\t\t\tdeleteIcon={<KeyboardArrowDown color=\"primary\" />}\r\n\t\t\t\t\t\t\t\t\tonDelete={handleOpenAgentStatus}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\tflexDirection: isVertical ? \"column\" : \"row\",\r\n\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\talignItems: isVertical ? \"stretch\" : \"center\",\r\n\t\t\t\t\t\t\t\t\tmargin: isVertical ? \"0px 8px 8px 8px\" : \"0px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Tooltip title={\"Agent Ready\"}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"contained\"\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <SupportAgent /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleAgentReady();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tclasses={{\r\n\t\t\t\t\t\t\t\t\t\t\troot:\r\n\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"enabled\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t...(\r\n\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? outlined\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: enabled\r\n\t\t\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t\t\t\t...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }),\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tdisabled={agentReadyLoading}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Agent Ready\" : <SupportAgent />}\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={\r\n\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableHoldButton ? \"Hold feature is disabled\" :\r\n\t\t\t\t\t\t\t\t\t\t(state.callData?.hold === 1 ? \"Resume\" : \"Hold\")\r\n\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"contained\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\tholdOrUnHoldLoading ? undefined :\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 ? <PlayArrow /> : <Pause />\r\n\t\t\t\t\t\t\t\t\t\t\t) : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!state.sdkConfig?.disableHoldButton) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleHoldToggle();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableHoldButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t((state.callData?.status?.toUpperCase() as CallStatus) !==\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold !== 1) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tholdOrUnHoldLoading ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableHoldButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{holdOrUnHoldLoading ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ color: theme.palette.primary.main }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t) : isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 ? \"Resume\" : \"Hold\"\r\n\t\t\t\t\t\t\t\t\t\t\t) : state.callData?.hold === 1 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<PlayArrow />\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Pause />\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={\r\n\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableMuteButton ? \"Mute feature is disabled\" :\r\n\t\t\t\t\t\t\t\t\t\t(state.callData?.mute === 1 ? \"Unmute\" : \"Mute\")\r\n\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"contained\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\tmuteOrUnMuteLoading ? undefined :\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute === 1 ? <MicOff /> : <Mic />\r\n\t\t\t\t\t\t\t\t\t\t\t) : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!state.sdkConfig?.disableMuteButton) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleMuteToggle();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableMuteButton || state.callData?.hold === 1\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: (state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t((state.callData?.status?.toUpperCase() as CallStatus) !==\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute !== 1) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tmuteOrUnMuteLoading ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableMuteButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{muteOrUnMuteLoading ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ color: theme.palette.primary.main }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t) : isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute === 1 ? \"Unmute\" : \"Mute\"\r\n\t\t\t\t\t\t\t\t\t\t\t) : state.callData?.mute === 1 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<MicOff />\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Mic />\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.sdkConfig?.disableCallTransferButton ? \"Transfer Call feature is disabled\" : \"Transfer Call\"}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={state.openCallTransferDialog ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <TransferWithinAStation /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableCallTransferButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsdkStateManager.setOpenCallTransferDialog(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.openCallTransferDialog\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: (state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL && !state.sdkConfig?.disableCallTransferButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) !== CallStatus.ONCALL ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableCallTransferButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Transfer\" : <TransferWithinAStation />}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.sdkConfig?.disableConferenceButton ? \"Conference Call feature is disabled\" : \"Conference Call\"}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={state.openConferenceDialog ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <Group /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableConferenceButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsdkStateManager.setOpenConferenceDialog(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.openConferenceDialog\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: (state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL && !state.sdkConfig?.disableConferenceButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) !== CallStatus.ONCALL ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableConferenceButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Conference\" : <Group />}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t{state.sdkConfig?.enableSmsServices && (\r\n\t\t\t\t\t\t\t\t\t<Tooltip title={\"Send SMS\"}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={Boolean(ambulanceAnchorEl) ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <SmsSharp /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.ONCALL, CallStatus.WRAPUP].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenAbulanceServices(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tBoolean(ambulanceAnchorEl)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: [CallStatus.ONCALL, CallStatus.WRAPUP].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t![CallStatus.ONCALL, CallStatus.WRAPUP].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Send SMS\" : <SmsSharp />}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.sdkConfig?.disableEndCallButton ? \"End Call feature is disabled\" : \"End Call\"}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableEndCallButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"contained\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical && !endCallLoading ? <CallEnd /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableEndCallButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetOpenCallDisposition(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableEndCallButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...enabled,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRight: \"1px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"error.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tminWidth: \"60px !important\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \" 0px 2px 1px #5f3f3f\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: `1px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"40px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \" 0px 2px 1px #5f3f3f\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:active\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...disabled,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tminWidth: \"60px !important\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t![\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tendCallLoading ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableEndCallButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{endCallLoading ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"20px\" color=\"error\" />\r\n\t\t\t\t\t\t\t\t\t\t\t) : isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"End Call\"\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CallEnd />\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t{!state.sdkConfig?.disabledMoreOptionsButton &&\r\n\t\t\t\t\t\t\t\t\tprocessList &&\r\n\t\t\t\t\t\t\t\t\tprocessList?.length > 1 && (\r\n\t\t\t\t\t\t\t\t\t\t<Tooltip title={\"Switch Process\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant={Boolean(moreOptionsAnchorEl) ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <MoreVert /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.IDLE].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenMoreOptions(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={Boolean(moreOptionsAnchorEl)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t![CallStatus.BREAK, CallStatus.IDLE].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Switch Process\" : <MoreVert />}\r\n\t\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Paper>\r\n\t\t\t\t</Fade>\r\n\t\t\t</Box>\r\n\r\n\t\t\t<Fade\r\n\t\t\t\tin={true}\r\n\t\t\t\ttimeout={300}\r\n\t\t\t>\r\n\t\t\t\t<Paper\r\n\t\t\t\t\tref={iframeDragRef}\r\n\t\t\t\t\televation={iframeIsDragging ? 4 : 1}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\tleft: iframePosition.x,\r\n\t\t\t\t\t\ttop: iframePosition.y,\r\n\t\t\t\t\t\tborderRadius: 2,\r\n\t\t\t\t\t\tbgcolor: \"background.paper\",\r\n\t\t\t\t\t\tzIndex: Number.MAX_SAFE_INTEGER,\r\n\t\t\t\t\t\ttransition: theme.transitions.create([\"box-shadow\", \"transform\"], {\r\n\t\t\t\t\t\t\tduration: theme.transitions.duration.short,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tvisibility: showIframe && !state.sdkConfig?.disableSoftPhone ? \"visible\" : \"hidden\",\r\n\t\t\t\t\t\tuserSelect: \"none\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\tcursor: \"all-scroll\",\r\n\t\t\t\t\t\t\tpadding: \"0px 10px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonMouseDown={iframeHandleMouseDown}\r\n\t\t\t\t\t\tonTouchStart={iframeHandleTouchStart}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<DragIndicator\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\ttransform: \"rotate(90deg)\",\r\n\t\t\t\t\t\t\t\tcolor: \"#7b7b7b\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t/>{\" \"}\r\n\t\t\t\t\t\t<Typography variant=\"subtitle1\" fontWeight={600} sx={{ textAlign: \"center\" }}>\r\n\t\t\t\t\t\t\tahs-cti\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t<IconButton onClick={() => setShowIframe(false)}>\r\n\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<iframe\r\n\t\t\t\t\t\t\t// src={`https://localhost:8443/index.html?user_id=${state.urlConfig?.id}&api_url=${state.urlConfig?.iframeAPIURL}&token=${state.authorization?.accessToken}`}\r\n\t\t\t\t\t\t\tsrc={`${state.urlConfig?.iframeURL}/static/phone/index.html?user_id=${state.urlConfig?.id}&api_url=${state.urlConfig?.iframeAPIURL}&token=${state.authorization?.accessToken}`}\r\n\t\t\t\t\t\t\t// src={`${state.urlConfig?.iframeURL}/static/phone/cti_index.html?user_id=${state.urlConfig?.id}&api_url=${state.urlConfig?.iframeAPIURL}`}\r\n\t\t\t\t\t\t\theight={380}\r\n\r\n\t\t\t\t\t\t\twidth={420}\r\n\t\t\t\t\t\t\tallow=\"camera; microphone; autoplay\"\r\n\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\tborder: \"none\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t></iframe>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Fade>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={dialerAnchorEl}\r\n\t\t\t\topen={Boolean(dialerAnchorEl)}\r\n\t\t\t\tonClose={handleCloseDialer}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tall: \"unset\",\r\n\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\ttype=\"tel\"\r\n\t\t\t\t\t\tvalue={phoneNumber}\r\n\t\t\t\t\t\tplaceholder=\"Enter Mobile No.\"\r\n\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\thtmlInput: {\r\n\t\t\t\t\t\t\t\tinputMode: \"numeric\",\r\n\t\t\t\t\t\t\t\tmaxLength: 11,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\tconst value = e.target.value;\r\n\t\t\t\t\t\t\tif (/^\\d*$/.test(value)) {\r\n\t\t\t\t\t\t\t\tsetPhoneNumber(value);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonPaste={(e) => {\r\n\t\t\t\t\t\t\tconst pasted = e.clipboardData.getData(\"text\");\r\n\t\t\t\t\t\t\tif (!/^\\d*$/.test(pasted)) {\r\n\t\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonKeyDown={(e) => {\r\n\t\t\t\t\t\t\tif (e.key === \"Enter\") {\r\n\t\t\t\t\t\t\t\thandleStartCall(phoneNumber);\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tconst allowedKeys = [\r\n\t\t\t\t\t\t\t\t\"Backspace\",\r\n\t\t\t\t\t\t\t\t\"Delete\",\r\n\t\t\t\t\t\t\t\t\"Tab\",\r\n\t\t\t\t\t\t\t\t\"ArrowLeft\",\r\n\t\t\t\t\t\t\t\t\"ArrowRight\",\r\n\t\t\t\t\t\t\t\t\"ArrowUp\",\r\n\t\t\t\t\t\t\t\t\"ArrowDown\",\r\n\t\t\t\t\t\t\t\t\"Home\",\r\n\t\t\t\t\t\t\t\t\"End\",\r\n\t\t\t\t\t\t\t];\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t!/^\\d$/.test(e.key) &&\r\n\t\t\t\t\t\t\t\t!allowedKeys.includes(e.key) &&\r\n\t\t\t\t\t\t\t\t!(e.ctrlKey || e.metaKey)\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\tcolor=\"info\"\r\n\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\thandleStartCall(phoneNumber);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{clickToCallLoading ? (\r\n\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tcolor: theme.palette.success.main,\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<Phone color=\"success\" />\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={ambulanceAnchorEl}\r\n\t\t\t\topen={Boolean(ambulanceAnchorEl)}\r\n\t\t\t\tonClose={handleCloseAmbulance}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tall: \"unset\",\r\n\t\t\t\t\t\tpadding: \" 0px 20px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Tooltip title=\"Ambulance Service\">\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\thandleSendSMS(state.callData);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tAmbulance\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: \"green\",\r\n\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\t\t\tmarginLeft: \"14px\",\r\n\t\t\t\t\t\t\t\t\tpadding: \"2px 6px\",\r\n\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tSend\r\n\t\t\t\t\t\t\t\t<SendRounded\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tmarginLeft: \"8px\",\r\n\t\t\t\t\t\t\t\t\t\twidth: \"18px\",\r\n\t\t\t\t\t\t\t\t\t\ttransform: \"rotate(-16deg)\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={moreOptionsAnchorEl}\r\n\t\t\t\topen={Boolean(moreOptionsAnchorEl)}\r\n\t\t\t\tonClose={handleCloseMoreOptions}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tall: \"unset\",\r\n\t\t\t\t\t\tpadding: \" 0px 20px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{processList?.map((item) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tkey={item?.process_id}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Tooltip title={item?.process_name ?? \"\"}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\tstate?.process?.process_id === item?.process_id ? \"contained\" : \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\tsdkStateManager.setProcess(item);\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{item?.process_name ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={statusAnchorEl}\r\n\t\t\t\topen={Boolean(statusAnchorEl)}\r\n\t\t\t\tonClose={handleCloseAgentStatus}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t{!breaksList || breaksList?.length === 0 ? (\r\n\t\t\t\t\t<MenuItem onClick={() => handleUpdateAgentStatus(\"Lunch\")}>- Break</MenuItem>\r\n\t\t\t\t) : (\r\n\t\t\t\t\tbreaksList?.map((item) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\tkey={item?.type}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t// hilight background of selected\r\n\t\t\t\t\t\t\t\t\tbackgroundColor:\r\n\t\t\t\t\t\t\t\t\t\tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t\t\"primary.main\"\r\n\t\t\t\t\t\t\t\t\t\t\t: \"transparent\",\r\n\t\t\t\t\t\t\t\t\tcolor:\r\n\t\t\t\t\t\t\t\t\t\tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t\t\"white\"\r\n\t\t\t\t\t\t\t\t\t\t\t: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\":hover\": {\r\n\t\t\t\t\t\t\t\t\t\tbackgroundColor:\r\n\t\t\t\t\t\t\t\t\t\t\tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"primary.dark\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"selected.hover\",\r\n\t\t\t\t\t\t\t\t\t\t// color:\r\n\t\t\t\t\t\t\t\t\t\t// \tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t// \t\t\"primary.main\"\r\n\t\t\t\t\t\t\t\t\t\t// \t:\t\"primary.main\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tonClick={() => handleUpdateAgentStatus(item?.type)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t- {item?.type}\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})\r\n\t\t\t\t)}\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={anchorEl}\r\n\t\t\t\topen={Boolean(anchorEl)}\r\n\t\t\t\tonClose={handleCloseQueueCounts}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\tjustifyContent: \"flex-start\",\r\n\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\tpadding: \"0px 10px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\ticon={<Layers color=\"secondary\" />}\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tlabel=\"Waiting - 25\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmargin: \"4px 2px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\ticon={<Pending color=\"info\" />}\r\n\t\t\t\t\t\tlabel=\"Pending - 99+\"\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmargin: \"4px 2px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\ticon={<Upcoming color=\"success\" />}\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tlabel=\"Upcoming - 66\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmargin: \"4px 2px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t{Boolean(state.openConferenceDialog) && <ConferenceDialog />}\r\n\r\n\t\t\t{Boolean(state.openCallTransferDialog) && (\r\n\t\t\t\t<CallTransferDialog open={state.openCallTransferDialog} />\r\n\t\t\t)}\r\n\r\n\t\t\t{Boolean(openCallDisposition) && (\r\n\t\t\t\t<EndCallDispositionDialog\r\n\t\t\t\t\topen={openCallDisposition}\r\n\t\t\t\t\tsetOpen={setOpenCallDisposition}\r\n\t\t\t\t\tonSubmitDisposition={handleEndCall}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\r\n\t\t\t{Boolean(openCallHistoryDialog) && (\r\n\t\t\t\t<CallHistoryDialog\r\n\t\t\t\t\topen={openCallHistoryDialog}\r\n\t\t\t\t\tsetOpen={setOpenCallHistoryDialog}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nimport Airlines from \"@mui/icons-material/Airlines\";\r\nimport Call from \"@mui/icons-material/Call\";\r\nimport CallEnd from \"@mui/icons-material/CallEnd\";\r\nimport CallSplit from \"@mui/icons-material/CallSplit\";\r\nimport Close from \"@mui/icons-material/Close\";\r\nimport MemoryOutlined from \"@mui/icons-material/MemoryOutlined\";\r\nimport Pause from \"@mui/icons-material/Pause\";\r\nimport PhoneDisabled from \"@mui/icons-material/PhoneDisabled\";\r\nimport PlayArrow from \"@mui/icons-material/PlayArrow\";\r\nimport RecordVoiceOver from \"@mui/icons-material/RecordVoiceOver\";\r\nimport Roofing from \"@mui/icons-material/Roofing\";\r\nimport SupportAgent from \"@mui/icons-material/SupportAgent\";\r\nimport TransferWithinAStation from \"@mui/icons-material/TransferWithinAStation\";\r\nimport Upcoming from \"@mui/icons-material/Upcoming\";\r\nimport {\r\n\tBox,\r\n\tButton,\r\n\tDialog,\r\n\tIconButton,\r\n\tMenu,\r\n\tMenuItem,\r\n\tPaper,\r\n\tTextField,\r\n\tTypography,\r\n\tAutocomplete,\r\n\tTooltip,\r\n\tuseTheme,\r\n\tTableContainer,\r\n\tTable,\r\n\tTableHead,\r\n\tTableRow,\r\n\tTableCell,\r\n\tTableBody,\r\n\tCircularProgress,\r\n\tCheckbox,\r\n} from \"@mui/material\";\r\n\r\nimport React, { useEffect, useMemo, useState } from \"react\";\r\n\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\nimport { useGetRequest, usePostRequest } from \"../services/request\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\nimport { useToast } from \"../services/toastMessage\";\r\nimport useStyles from \"./styles\";\r\n\r\nimport { ConferenceLineTypes, CallStatus } from \"../../types\";\r\n\r\ntype TransferCallRequest = {\r\n\tmobile_number?: string;\r\n\tuserid?: string;\r\n\ttype?: string;\r\n\ttransfer_to?: string;\r\n\tcallreferenceid?: string;\r\n\tprocessid?: string;\r\n\tprocess_name?: string;\r\n};\r\n\r\ntype BlindTransferCallRequest = {\r\n\taction: string;\r\n\tuserid: string;\r\n\tcallreferenceid: string;\r\n\tblind_transfer_no: any;\r\n};\r\n\r\nconst ConferenceTableRow = ({ each, isLineDialing }: any) => {\r\n\tconst state = useSDKState();\r\n\tconst theme = useTheme();\r\n\tconst { showToast } = useToast();\r\n\tconst { disabled, enabled } = useStyles({\r\n\t\tdisabled: state.sdkConfig?.disabled || {},\r\n\t\tenabled: state.sdkConfig?.enabled || {},\r\n\t\toutlined: state.sdkConfig?.outlined || {},\r\n\t});\r\n\r\n\tconst [conferenceCallStart, setConferenceCallStart] = useState(false);\r\n\tconst [conferenceCallMerge, setConferenceCallMerge] = useState(false);\r\n\tconst [conferenceCallHoldOrUnHold, setConferenceCallHoldOrUnHold] = useState(false);\r\n\tconst [conferenceCallEnd, setConferenceCallEnd] = useState(false);\r\n\r\n\t// While any line is still dialing or on call (i.e. being set up before it joins\r\n\t// the conference), holding/resuming any line must be blocked.\r\n\tconst anyLineDialingOrOnCall = state?.conferenceLine?.some(\r\n\t\t(line: any) => line?.status === CallStatus.DIALING || line?.status === CallStatus.ONCALL,\r\n\t);\r\n\r\n\t// Hold/Resume is only actionable on lines already in the conference or on hold.\r\n\t// A dialing/on-call line is therefore disabled (its status isn't CONFERENCE/HOLD),\r\n\t// and while any line is still dialing or on call every line's Hold is disabled.\r\n\t// Also disabled while a hold/unhold request is in flight.\r\n\tconst holdEnabled =\r\n\t\t(each?.status === CallStatus.CONFERENCE || each?.status === CallStatus.HOLD) &&\r\n\t\t!anyLineDialingOrOnCall &&\r\n\t\t!conferenceCallHoldOrUnHold;\r\n\r\n\t// Check if the entered phone number is same as the active call number (used only as a call guard, not for UI error)\r\n\tconst isSameAsActiveCall = each?.phone === state.callData?.phone_number && !!each?.phone;\r\n\r\n\t// Show error on the DUPLICATE occurrence: any lower-numbered conference line already has the same phone\r\n\tconst isDuplicateInConference =\r\n\t\t!!each?.phone &&\r\n\t\teach?.line !== 1 &&\r\n\t\t(state.conferenceLine as ConferenceLineTypes[])?.some(\r\n\t\t\t(line) => line.line < each.line && line.phone === each?.phone && !!line.phone,\r\n\t\t);\r\n\r\n\t// Only flag duplicates — no error on line 1 (active call) and no error on the first use of a number\r\n\tconst hasPhoneConflict = isDuplicateInConference;\r\n\r\n\tconst phoneConflictHelperText = isDuplicateInConference ? \"Number already used in another conference line\" : \"\";\r\n\r\n\tconst onConferenceLineUpdate = (line: ConferenceLineTypes, data: any) => {\r\n\t\tsdkStateManager.setConferenceLine({ ...line, ...data });\r\n\t};\r\n\r\n\tconst onConferenceCallStart = (line: ConferenceLineTypes, data: any) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\r\n\t\t// Block dialing the same number as the active call\r\n\t\tif (line_used.phone === state.callData?.phone_number) {\r\n\t\t\tshowToast(\"Cannot conference with the active call number\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Block dialing a number already used in another conference line\r\n\t\tconst isDuplicateNumber = (state.conferenceLine as ConferenceLineTypes[])?.some(\r\n\t\t\t(l) => l.line !== line_used.line && l.phone === line_used.phone && !!l.phone,\r\n\t\t);\r\n\t\tif (isDuplicateNumber) {\r\n\t\t\tshowToast(\"Number already used in another conference line\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!line_used.phone || line_used.phone.length < 10) {\r\n\t\t\tshowToast(\"Invalid phone number\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetConferenceCallStart(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: `CALL${line_used.line}`,\r\n\t\t\t// line_used: Number(line_used.line),\r\n\t\t\t// thirdparty_no: line_used.phone,\r\n\t\t\ttarget: line_used.phone,\r\n\t\t\tline_number: Number(line_used.line),\r\n\t\t\tuserid: state.agentId ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallStart(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst onMergeConferenceCall = (line: ConferenceLineTypes, data: any) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\t\tsetConferenceCallMerge(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: `CONFERENCE`,\r\n\t\t\tline_used: String(line_used.line),\r\n\t\t\tthirdparty_no: line_used.phone,\r\n\t\t\tuserid: state.agentId ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t\tcall_id: state.callData?.call_id ?? \"\",\r\n\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_MERGE_CALL, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tif (state.callData?.hold === 1) {\r\n\t\t\t\t\thandleHoldToggle();\r\n\t\t\t\t}\r\n\t\t\t\tif (state.callData?.mute === 1) {\r\n\t\t\t\t\thandleMuteToggle();\r\n\t\t\t\t}\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallMerge(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst onHoldOrUnHoldConferenceCall = (line: ConferenceLineTypes, data: any, type: string) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\t\tsetConferenceCallHoldOrUnHold(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: type === \"HOLDUSER\" ? \"HOLD\" : \"UNHOLD\",\r\n\t\t\toperation: type,\r\n\t\t\thold_channel_no: type === \"HOLDUSER\" ? `hold${line_used.line}` : `unhold${line_used.line}`,\r\n\t\t\tuserid: state.agentId ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\r\n\t\t\tcall_uuid: state.callData?.call_id ?? \"\",\r\n\t\t\tline_number: Number(line_used.line),\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_HOLD_OR_UN_HOLD, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallHoldOrUnHold(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst onEndConferenceCall = (line: ConferenceLineTypes, data: any) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\r\n\t\t// ✅ FIX: Prevent accidental hangup of the primary call channel via conference controls\r\n\t\tif (line_used.line === 1) {\r\n\t\t\tshowToast(\"Cannot end the primary call from conference controls\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetConferenceCallEnd(true);\r\n\r\n\t\t// Backend HangupRequest schema: call_id (required), agent_id, mobile_number,\r\n\t\t// line_number, reason. Pass line_number = the conference line being dropped\r\n\t\t// (line_number = 0 means full-call hangup, so it must be > 0 here).\r\n\t\tconst payload = {\r\n\t\t\tcall_id: state.callData?.call_id ?? \"\",\r\n\t\t\tagent_id: state.agentId ?? \"\",\r\n\t\t\tmobile_number: line_used.phone ?? \"\",\r\n\t\t\tline_number: Number(line_used.line),\r\n\t\t\treason: \"normal\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_END, payload)\r\n\t\t\t.then(() => {\r\n\t\t\t\tshowToast(\"Call disconnected successfully\", \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallEnd(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst [holdOrUnHold] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tuser_id: string;\r\n\t\tcall_uuid: string;\r\n\t\tline_number: number;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst [muteOrUnMute] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tdirection: string;\r\n\t\tuser_id: string;\r\n\t\tcall_uuid: string;\r\n\t\tline_number: number;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst handleHoldToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.hold === 1 ? CallStatus.UNHOLD : CallStatus.HOLD,\r\n\t\t\tuser_id: String(state.agentId ?? \"\"),\r\n\t\t\tcall_uuid: state.callData?.call_id ?? \"\",\r\n\t\t\tline_number: 0,\r\n\t\t};\r\n\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t};\r\n\r\n\tconst handleMuteToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.mute === 1 ? CallStatus.UNMUTE : CallStatus.MUTE,\r\n\t\t\tdirection: \"both\",\r\n\t\t\tuser_id: String(state.agentId ?? \"\"),\r\n\t\t\tcall_uuid: state.callData?.call_id ?? \"\",\r\n\t\t\tline_number: 0,\r\n\t\t};\r\n\r\n\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<TableRow\r\n\t\t\tkey={each.line}\r\n\t\t\tsx={{\r\n\t\t\t\tborder: \"2px solid #fff\",\r\n\t\t\t}}\r\n\t\t>\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\tflex: 1,\r\n\t\t\t\t\twidth: \"100px\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Typography>Line {each?.line ?? \"\"}. </Typography>\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\twidth: \"150px\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Typography\r\n\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tpx: 1,\r\n\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\twidth: \"150px\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{each?.status ?? \"\"}\r\n\t\t\t\t</Typography>\r\n\t\t\t</TableCell>\r\n\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\tflex: 1,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<TextField\r\n\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\ttype=\"tel\"\r\n\t\t\t\t\tplaceholder=\"Phone Number\"\r\n\t\t\t\t\tfullWidth\r\n\t\t\t\t\tvalue={each?.phone || \"\"}\r\n\t\t\t\t\terror={hasPhoneConflict}\r\n\t\t\t\t\thelperText={phoneConflictHelperText}\r\n\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\thtmlInput: {\r\n\t\t\t\t\t\t\tinputMode: \"numeric\",\r\n\t\t\t\t\t\t\tmaxLength: 11,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\teach?.line === 1 ||\r\n\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\tCallStatus.DISCONNECTED,\r\n\t\t\t\t\t\t\tCallStatus.CONFERENCE,\r\n\t\t\t\t\t\t\tCallStatus.HOLD,\r\n\t\t\t\t\t\t\tCallStatus.MUTE,\r\n\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t].includes(each?.status ?? \"\") ||\r\n\t\t\t\t\t\tisLineDialing\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonKeyDown={(e) => {\r\n\t\t\t\t\t\tconst allowedKeys = [\r\n\t\t\t\t\t\t\t\"Backspace\",\r\n\t\t\t\t\t\t\t\"Delete\",\r\n\t\t\t\t\t\t\t\"Tab\",\r\n\t\t\t\t\t\t\t\"ArrowLeft\",\r\n\t\t\t\t\t\t\t\"ArrowRight\",\r\n\t\t\t\t\t\t\t\"ArrowUp\",\r\n\t\t\t\t\t\t\t\"ArrowDown\",\r\n\t\t\t\t\t\t\t\"Home\",\r\n\t\t\t\t\t\t\t\"End\",\r\n\t\t\t\t\t\t];\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t!/^\\d$/.test(e.key) &&\r\n\t\t\t\t\t\t\t!allowedKeys.includes(e.key) &&\r\n\t\t\t\t\t\t\t!(e.ctrlKey || e.metaKey)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tonPaste={(e) => {\r\n\t\t\t\t\t\tconst pasted = e.clipboardData.getData(\"text\");\r\n\t\t\t\t\t\tif (!/^\\d*$/.test(pasted)) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\tconst v = e.target.value;\r\n\t\t\t\t\t\tif (/^\\d*$/.test(v)) {\r\n\t\t\t\t\t\t\tonConferenceLineUpdate(each, { phone: v });\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\tflex: 1,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\tjustifyContent: \"flex-start\",\r\n\t\t\t\t\t\tgap: \"10px\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{each?.line === 1 && (\r\n\t\t\t\t\t\t<Tooltip title={each?.status !== CallStatus.HOLD ? \"Hold\" : \"Resume\"}>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={holdEnabled ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tsx={holdEnabled ? { ...enabled } : { ...disabled }}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tif (each.status === CallStatus.HOLD) {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: false }, \"UNHOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: true }, \"HOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={!holdEnabled}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{each.status === CallStatus.HOLD ? (\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tgap: \"5px\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"98px\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: holdEnabled ? \"#fff\" : \"inherit\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tUnhold\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t{conferenceCallHoldOrUnHold ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"16px\" sx={{ color: theme.palette.primary.main }} />\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<PlayArrow />\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tgap: \"5px\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"98px\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{ color: holdEnabled ? \"#fff\" : \"inherit\", fontSize: \"12px\" }}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tHold\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t{conferenceCallHoldOrUnHold ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"16px\" sx={{ color: theme.palette.primary.main }} />\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<Pause />\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (() => {\r\n\t\t\t\t\t\tconst hasMinDigits = (each?.phone?.length ?? 0) >= 3;\r\n\t\t\t\t\t\tconst callDisabled =\r\n\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE ||\r\n\t\t\t\t\t\t\tisLineDialing ||\r\n\t\t\t\t\t\t\thasPhoneConflict ||\r\n\t\t\t\t\t\t\t!hasMinDigits;\r\n\t\t\t\t\t\tconst tooltipTitle = hasPhoneConflict\r\n\t\t\t\t\t\t\t? phoneConflictHelperText || \"Cannot dial this number\"\r\n\t\t\t\t\t\t\t: !each?.phone\r\n\t\t\t\t\t\t\t\t? \"Enter mobile number\"\r\n\t\t\t\t\t\t\t\t: !hasMinDigits\r\n\t\t\t\t\t\t\t\t\t? \"Enter at least 3 digits\"\r\n\t\t\t\t\t\t\t\t\t: \"Call\";\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<Tooltip title={tooltipTitle}>\r\n\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tvariant={callDisabled ? \"outlined\" : \"contained\"}\r\n\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\tcallDisabled\r\n\t\t\t\t\t\t\t\t\t\t\t\t? { ...disabled }\r\n\t\t\t\t\t\t\t\t\t\t\t\t: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t...enabled,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.success.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"success.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `0px 2px 1px ${theme.palette.success.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.success.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:active\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"success.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\tonConferenceCallStart(each, {});\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tdisabled={callDisabled}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{conferenceCallStart ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"20px\" color=\"success\" />\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<Call\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: callDisabled ? \"default\" : \"#f3f2f2\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})()}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip title=\"Merge Call\">\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={each?.status === CallStatus.ONCALL ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tsx={each?.status === CallStatus.ONCALL ? { ...enabled } : { ...disabled }}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tonMergeConferenceCall(each, { isMergeCall: true });\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={each?.status !== CallStatus.ONCALL}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{conferenceCallMerge ? <CircularProgress size=\"20px\" /> : <CallSplit />}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip title={each?.status !== CallStatus.HOLD ? \"Hold\" : \"Resume\"}>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={holdEnabled ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tsx={holdEnabled ? { ...enabled } : { ...disabled }}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tif (each.status === CallStatus.HOLD) {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: false }, \"UNHOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: true }, \"HOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={!holdEnabled}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{conferenceCallHoldOrUnHold ? (\r\n\t\t\t\t\t\t\t\t\t<CircularProgress size=\"20px\" sx={{ color: theme.palette.primary.main }} />\r\n\t\t\t\t\t\t\t\t) : each.status === CallStatus.HOLD ? (\r\n\t\t\t\t\t\t\t\t\t<PlayArrow />\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t<Pause />\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip title=\"End Call\">\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE && each?.status !== CallStatus.DISCONNECTED\r\n\t\t\t\t\t\t\t\t\t\t? \"contained\"\r\n\t\t\t\t\t\t\t\t\t\t: \"outlined\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE && each?.status !== CallStatus.DISCONNECTED ?\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t...enabled,\r\n\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `0px 2px 1px ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\"&:active\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t: {\r\n\t\t\t\t\t\t\t\t\t\t\t...disabled,\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tonEndConferenceCall(each, {\r\n\t\t\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\teach?.status === CallStatus.IDLE ||\r\n\t\t\t\t\t\t\t\t\teach?.status === CallStatus.DISCONNECTED ||\r\n\t\t\t\t\t\t\t\t\tconferenceCallEnd\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{conferenceCallEnd ? <CircularProgress size=\"20px\" color=\"error\" /> : <CallEnd />}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t</TableCell>\r\n\t\t</TableRow>\r\n\t);\r\n};\r\n\r\nexport function ConferenceDialog() {\r\n\tconst state = useSDKState();\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [conferenceCallEndAll, setConferenceCallEndAll] = useState(false);\r\n\r\n\tconst handleClose = () => {\r\n\t\tsdkStateManager.setOpenConferenceDialog(false);\r\n\t};\r\n\r\n\tconst onEndAllConferenceCalls = () => {\r\n\t\tsetConferenceCallEndAll(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: \"ENDCONFERENCE\",\r\n\t\t\tuserid: state.agentId ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t\tprocessid: state.process?.process_id?.toString() ?? \"\",\r\n\t\t\tprocess_name: state.process?.process_name ?? \"\",\r\n\t\t\tcallreferenceid: state.callData?.call_id ?? \"\",\r\n\t\t\tcall_id: state.callData?.call_id ?? \"\",\r\n\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_END_ALL, payload)\r\n\t\t\t.then(() => {\r\n\t\t\t\tshowToast(\"Call disconnected successfully\", \"success\");\r\n\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\thandleClose();\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallEndAll(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst handleTransferConferenceCall = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: \"TRANSFERAPI\",\r\n\t\t\tuserid: state.agentId ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t\tprocessid: state.process?.process_id?.toString() ?? \"\",\r\n\t\t\tprocess_name: state.process?.process_name ?? \"\",\r\n\t\t\tcallreferenceid: state.callData?.call_id ?? \"\",\r\n\t\t\tcall_id: state.callData?.call_id ?? \"\",\r\n\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_TRANSFER, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\thandleClose();\r\n\t\t\t\t// ✅ FIX: Do NOT call sdkStateManager.endCall() here.\r\n\t\t\t\t// The WebSocket will push the correct WRAPUP event — let it drive state.\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst isLineDialing = state?.conferenceLine?.some((item) => item?.status === CallStatus.DIALING);\r\n\tconst conferenceLineCount =\r\n\t\tstate?.conferenceLine?.filter((item) => item?.status === CallStatus.CONFERENCE)?.length ?? 0;\r\n\r\n\tconst isHold = state?.conferenceLine?.some((item) => item?.status === CallStatus.HOLD);\r\n\tconst isOnCall = state?.conferenceLine?.some((item) => item?.status === CallStatus.ONCALL);\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={state.openConferenceDialog}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"md\"}\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 800 } } }}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"0px 16px\",\r\n\t\t\t\t\t\t\tpaddingBottom: \"6px\",\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 2px #e7e5e5ff\",\r\n\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\tcolor=\"primary.main\"\r\n\t\t\t\t\t\t\tsx={{ textTransform: \"uppercase\", fontWeight: \"bold\", fontSize: \"14px\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{state?.agentId ?? \"\"} conference\r\n\t\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t{/* <Button\r\n\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\tonClick={handleTransferConferenceCall}\r\n\t\t\t\t\t\t\t\tdisabled={conferenceLineCount <= 1 || isHold || isLineDialing || isOnCall}\r\n\t\t\t\t\t\t\t\tstartIcon={<TransferWithinAStation />}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tExit Conference\r\n\t\t\t\t\t\t\t</Button> */}\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tonClick={handleClose}\r\n\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Close sx={{ color: \"primary.main\" }} />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 2px #e7e5e5ff\",\r\n\t\t\t\t\t\t\tmargin: \"0px 15px\",\r\n\t\t\t\t\t\t\tborderRadius: \"20px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<TableContainer\r\n\t\t\t\t\t\t\tcomponent={Paper}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\toutline: \"0px solid gray !important\",\r\n\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 6px #e7e5e5ff\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Table sx={{ border: \"4px solid #ffffff !important\" }}>\r\n\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t<TableRow sx={{ border: \"2px solid #f3f3f3ff !important\" }}>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ padding: \"6px\" }}>Line</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ padding: \"6px\" }}>Status</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ padding: \"6px\" }}>Mobile Number</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ padding: \"6px\" }}>Call Actions</TableCell>\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t{state?.conferenceLine.map((each: any) => (\r\n\t\t\t\t\t\t\t\t\t\t<ConferenceTableRow key={each.line} each={each} isLineDialing={isLineDialing} />\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t\t</TableContainer>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box sx={{ textAlign: \"center\", m: 2 }}>\r\n\t\t\t\t\t\t<Tooltip title={state.sdkConfig?.disableEndConference ? \"End Conference feature is disabled\" : \"\"}>\r\n\t\t\t\t\t\t\t<Box component=\"span\">\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\t\tsize=\"large\"\r\n\t\t\t\t\t\t\t\t\tonClick={onEndAllConferenceCalls}\r\n\t\t\t\t\t\t\t\t\tdisabled={conferenceCallEndAll || conferenceLineCount <= 0 || state.sdkConfig?.disableEndConference}\r\n\t\t\t\t\t\t\t\t\tsx={{ px: 2, borderRadius: \"20px\", textTransform: \"capitalize\" }}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{conferenceCallEndAll ? (\r\n\t\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{ marginRight: \"8px\" }}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.sdkConfig?.disableEndConference}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: state.sdkConfig?.disableEndConference ? \"action.disabledBackground\" : \"error.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: state.sdkConfig?.disableEndConference ? \"action.disabledBackground\" : \"error.dark\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\tmarginRight: \"8px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: \"28px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\theight: \"28px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"white\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"50%\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<PhoneDisabled sx={{ color: state.sdkConfig?.disableEndConference ? \"action.disabled\" : \"white\", fontSize: \"16px\", fontWeight: \"600\" }} />\r\n\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\tEnd Conference\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function CallTransferDialog({ open }: any) {\r\n\tconst state = useSDKState();\r\n\tconst [mobileNumber, setMobileNumber] = useState(\"\");\r\n\r\n\t// ✅ FIX: Removed sdkStateManager.endCall() and sdkStateManager.resetConferenceLines()\r\n\t// from onSuccess. These were forcing the initial agent to IDLE immediately on the\r\n\t// client side, before the WebSocket pushed the correct WRAPUP event.\r\n\t// For a blind transfer the server will push:\r\n\t// - Initial agent → WRAPUP (via WebSocket)\r\n\t// - Transferred-to agent → RINGING → ONCALL (via WebSocket)\r\n\t// We must NOT touch local call state here — only close the dialog.\r\n\tconst [transferCall, { isLoading: isTransferLoading }] = usePostRequest<TransferCallRequest>({\r\n\t\tonSuccess: () => {\r\n\t\t\t// Close dialog only. Let WebSocket events drive all state transitions.\r\n\t\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [initiateConsultCall] = usePostRequest<any>({});\r\n\r\n\tconst [completeConsultTransfer, { isLoading: isCompleteConsultLoading }] = usePostRequest<any>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setConsultInfo(null);\r\n\t\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [cancelConsultTransfer, { isLoading: isCancelConsultLoading }] = usePostRequest<any>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setConsultInfo(null);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [currentselecteTab, setCurrentselecteTab] = useState(\"queues\");\r\n\tconst [transferMenuAnchor, setTransferMenuAnchor] = useState<null | HTMLElement>(null);\r\n\tconst [pendingTransferData, setPendingTransferData] = useState<{ data: any; type: string } | null>(null);\r\n\r\n\tconst blindEnabled = !state.sdkConfig?.disableBlindTransfer;\r\n\tconst attendedEnabled = !state.sdkConfig?.disableAttendedTransfer;\r\n\tconst enabledTransferModeCount = (blindEnabled ? 1 : 0) + (attendedEnabled ? 1 : 0);\r\n\tconst singleTransferMode: \"DEFAULT\" | \"CONSULT\" | null =\r\n\t\tenabledTransferModeCount === 1 ? (blindEnabled ? \"DEFAULT\" : \"CONSULT\") : null;\r\n\r\n\tconst [getIdelAgentsList, { data: idleAgentsList, isLoading: isIdleAgentsListLoading }] =\r\n\t\tusePostRequest<any>({ disabledSuccessToast: true });\r\n\r\n\tconst [\r\n\t\tgetHospitalsServicesList,\r\n\t\t{ data: hospitalsServicesList, isLoading: isHospitalsServicesListLoading },\r\n\t] = useGetRequest<any>({ disabledSuccessToast: true });\r\n\r\n\tconst [\r\n\t\tgetProcessAndQueuesList,\r\n\t\t{ data: processAndQueuesList, isLoading: isProcessAndQueuesListLoading },\r\n\t] = usePostRequest<{\r\n\t\tstatus: string;\r\n\t\tactive: boolean;\r\n\t\tprocess?: any[];\r\n\t\tqueue?: any[];\r\n\t}>({ disabledSuccessToast: true });\r\n\r\n\tconst handleClose = () => {\r\n\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t};\r\n\r\n\tconst handleTransferCall = (data: any, type: string, mode: \"CONSULT\" | \"DEFAULT\" = \"DEFAULT\") => {\r\n\t\tconst lead_data = sdkStateManager.getTransferLeadData();\r\n\t\tif (type === \"PROCESS\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\t\tuserid: state.agentId,\r\n\t\t\t\ttype: \"PROCESS\",\r\n\t\t\t\ttransfer_to: data?.process_name ?? \"\",\r\n\t\t\t\tcallreferenceid: state.callData?.call_id ?? \"\",\r\n\t\t\t\tprocessid: String(state.callData?.process_id ?? \"\"),\r\n\t\t\t\tprocess_name: state.callData?.process_name ?? \"\",\r\n\t\t\t\t...(lead_data !== undefined && { lead_data }),\r\n\t\t\t};\r\n\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t} else if (type === \"QUEUE\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\t\tuserid: state.agentId,\r\n\t\t\t\ttype: \"QUEUE\",\r\n\t\t\t\ttransfer_to: data?.queue_name ?? \"\",\r\n\t\t\t\tcallreferenceid: state.callData?.call_id ?? \"\",\r\n\t\t\t\tprocessid: String(state.callData?.process_id ?? \"\"),\r\n\t\t\t\tprocess_name: state.callData?.process_name ?? \"\",\r\n\t\t\t\t...(lead_data !== undefined && { lead_data }),\r\n\t\t\t};\r\n\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t} else if (type === \"AGENT\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\t\tuserid: state.agentId,\r\n\t\t\t\ttype: \"AGENT\",\r\n\t\t\t\ttransfer_type: mode === \"CONSULT\" ? \"ATTENDED\" : \"BLIND\",\r\n\t\t\t\ttransfer_to: data?.user_id?.toString() ?? \"\",\r\n\t\t\t\tcallreferenceid: state.callData?.call_id ?? \"\",\r\n\t\t\t\tprocessid: String(state.callData?.process_id ?? \"\"),\r\n\t\t\t\tprocess_name: state.callData?.process_name ?? \"\",\r\n\t\t\t\t...(lead_data !== undefined && { lead_data }),\r\n\t\t\t};\r\n\t\t\tif (mode === \"CONSULT\") {\r\n\t\t\t\tinitiateConsultCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t\t} else {\r\n\t\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t\t}\r\n\t\t} else if (type === \"OTHER\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\t// action: mode === \"CONSULT\" ? \"ATTENDED\" : \"BLIND_TRANSFER\",\r\n\t\t\t\ttransfer_type: mode === \"CONSULT\" ? \"ATTENDED\" : \"BLIND\",\r\n\t\t\t\ttype: \"OTHER\",\r\n\t\t\t\ttransfer_to: data?.mobile_number ?? \"\",\r\n\t\t\t\tuserid: state.agentId,\r\n\t\t\t\tcallreferenceid: state.callData?.call_id ?? \"\",\r\n\t\t\t\t// blind_transfer_no: data?.mobile_number ?? \"\",\r\n\t\t\t\t...(lead_data !== undefined && { lead_data }),\r\n\t\t\t};\r\n\t\t\tif (mode === \"CONSULT\") {\r\n\t\t\t\tinitiateConsultCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t\t} else {\r\n\t\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleTransferClick = (e: React.MouseEvent<HTMLElement>, data: any, type: string) => {\r\n\t\tif (singleTransferMode) {\r\n\t\t\thandleTransferCall(data, type, singleTransferMode);\r\n\t\t} else {\r\n\t\t\tsetPendingTransferData({ data, type });\r\n\t\t\tsetTransferMenuAnchor(e.currentTarget);\r\n\t\t}\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tgetIdelAgentsList(END_POINT.AGENTS_LIST, { status: \"IDLE\", active: true });\r\n\t\tgetProcessAndQueuesList(END_POINT.TRANSFER_TO_DETAILS, { status: \"ACTIVE\", active: true });\r\n\t\tgetHospitalsServicesList(END_POINT.HOSPITALS_SERVICES);\r\n\t}, []);\r\n\r\n\t// Auto-refresh the idle agents list every 3s, but only while the dialog is\r\n\t// open and the Agents tab is selected. The list is volatile (agents go\r\n\t// idle/busy constantly), so we keep it fresh; the interval is torn down as\r\n\t// soon as the user leaves the tab or closes the dialog.\r\n\tuseEffect(() => {\r\n\t\tif (!open || currentselecteTab !== \"agents\") return;\r\n\t\tconst intervalId = setInterval(() => {\r\n\t\t\tgetIdelAgentsList(END_POINT.AGENTS_LIST, { status: \"IDLE\", active: true });\r\n\t\t}, 2000);\r\n\t\treturn () => clearInterval(intervalId);\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [open, currentselecteTab]);\r\n\r\n\t// Only block the dialog with the loader on the *initial* agents fetch. Once\r\n\t// we have data, background refreshes update the list silently (no flicker).\r\n\tconst idleAgentsLoaderActive = isIdleAgentsListLoading && !idleAgentsList?.data;\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"md\"}\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 600 } } }}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t\tposition: \"relative\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography variant=\"body1\" sx={{ flex: 1 }}> Call Transfer</Typography>\r\n\t\t\t\t\t\t<Box sx={{ position: \"absolute\", left: \"50%\", transform: \"translateX(-50%)\" }}>\r\n\t\t\t\t\t\t\t{state.consultInfo && (state.consultInfo.status?.toUpperCase() as CallStatus) === CallStatus.RINGING && (\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t<Typography variant=\"body1\" sx={{ whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\tTrying to consult\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={{ display: \"inline-flex\", gap: \"3px\", alignItems: \"flex-end\", height: \"14px\" }}>\r\n\t\t\t\t\t\t\t\t\t\t{[0, 1, 2].map((i) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box key={i} component=\"span\" sx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"@keyframes jumpDot\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"0%, 60%, 100%\": { transform: \"translateY(0)\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"30%\": { transform: \"translateY(-5px)\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\tanimation: \"jumpDot 1s ease-in-out infinite\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tanimationDelay: `${i * 0.15}s`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"14px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"inline-block\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}>.</Box>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{state.consultInfo && (state.consultInfo.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL && (\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\tstartIcon={isCompleteConsultLoading ? <CircularProgress size={14} /> : <TransferWithinAStation sx={{ fontSize: 16 }} />}\r\n\t\t\t\t\t\t\t\t\t\tdisabled={isCompleteConsultLoading || isCancelConsultLoading}\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\tif (state.consultInfo) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tcompleteConsultTransfer(END_POINT.TRANSFER_COMPLETE, {}, {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tparams: { call_uuid: state.consultInfo.call_uuid },\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\tTransfer\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\t\t\tstartIcon={isCancelConsultLoading ? <CircularProgress size={14} /> : <PhoneDisabled sx={{ fontSize: 16 }} />}\r\n\t\t\t\t\t\t\t\t\t\tdisabled={isCancelConsultLoading || isCompleteConsultLoading}\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\tif (state.consultInfo) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tcancelConsultTransfer(END_POINT.TRANSFER_CANCEL, {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstatus: state.consultInfo.status,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tparticipant_identifier: state.consultInfo.participant_identifier,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tchannel_id: state.consultInfo.channel_id,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcall_uuid: state.consultInfo.call_uuid,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbridge_id: state.consultInfo.bridge_id,\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\tCancel\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box sx={{ flex: 1, display: \"flex\", justifyContent: \"flex-end\" }}>\r\n\t\t\t\t\t\t\t<IconButton onClick={handleClose}>\r\n\t\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box sx={{ margin: \"10px\", borderRadius: \"10px\" }}>\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 1, margin: \"10px\" }}>\r\n\t\t\t\t\t\t\t{/* <Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"process\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => setCurrentselecteTab(\"process\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tProcess\r\n\t\t\t\t\t\t\t</Button> */}\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"queues\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => setCurrentselecteTab(\"queues\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tQueues\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"agents\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetCurrentselecteTab(\"agents\");\r\n\t\t\t\t\t\t\t\t\tgetIdelAgentsList(END_POINT.AGENTS_LIST, { status: \"IDLE\", active: true });\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tAgents\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t{/* {!state.sdkConfig?.disableBlindTransfer && ( */}\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"others\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => setCurrentselecteTab(\"others\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tOthers\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t{/* )} */}\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{(isProcessAndQueuesListLoading ||\r\n\t\t\t\t\t\t\tidleAgentsLoaderActive ||\r\n\t\t\t\t\t\t\tisHospitalsServicesListLoading ||\r\n\t\t\t\t\t\t\tisTransferLoading) && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\theight: \"80px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<CircularProgress />\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!idleAgentsLoaderActive &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\t!isTransferLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"process\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns:\r\n\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process &&\r\n\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"repeat(2, 1fr)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"repeat(1, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{processAndQueuesList?.data?.process &&\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.map((process: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<MemoryOutlined sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{process.process_name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={state.consultInfo ? \"Please complete or cancel the ongoing consult transfer before proceeding.\" : \"\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.consultInfo}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleTransferCall(process, \"PROCESS\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tp: 2,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Upcoming color=\"primary\" />\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"20px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Process Found\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!idleAgentsLoaderActive &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\t!isTransferLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"queues\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns:\r\n\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue &&\r\n\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue?.length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"repeat(2, 1fr)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"repeat(1, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{processAndQueuesList?.data?.queue &&\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue?.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue?.map((queue: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Airlines sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{queue.queue_name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{processAndQueuesList?.data?.process?.find(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(process: any) => process.process_id === queue.process_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)?.process_name ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"gray\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\"(\" +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.find(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(process: any) => process.process_id === queue.process_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)?.process_name +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\")\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={state.consultInfo ? \"Please complete or cancel the ongoing consult transfer before proceeding.\" : \"\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.consultInfo}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleTransferCall(queue, \"QUEUE\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tp: 2,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Upcoming color=\"primary\" />\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"20px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Queues Found\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!idleAgentsLoaderActive &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\t!isTransferLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"agents\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns:\r\n\t\t\t\t\t\t\t\t\t\t\tidleAgentsList?.data && idleAgentsList?.data?.length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"repeat(2, 1fr)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"repeat(1, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{idleAgentsList?.data && idleAgentsList?.data?.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\tidleAgentsList?.data?.map((agent: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SupportAgent sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{agent.name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={state.consultInfo ? \"Please complete or cancel the ongoing consult transfer before proceeding.\" : \"\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.consultInfo}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => handleTransferClick(e, agent, \"AGENT\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tp: 2,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Upcoming color=\"primary\" />\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"20px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Agents Found\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!idleAgentsLoaderActive &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\t!isTransferLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"others\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns: \"repeat(2, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{hospitalsServicesList?.data &&\r\n\t\t\t\t\t\t\t\t\t\thospitalsServicesList?.data?.length > 0 &&\r\n\t\t\t\t\t\t\t\t\t\thospitalsServicesList?.data?.map((service: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Roofing sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={`${service?.description ?? \"\"}`}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ color: \"text.secondary\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{service.name}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"9px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"gray\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextOverflow: \"ellipsis\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"160px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{service?.description ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={state.consultInfo ? \"Please complete or cancel the ongoing consult transfer before proceeding.\" : (service?.phone_number ?? \"\")}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.consultInfo}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => handleTransferClick(e, { mobile_number: service?.phone_number ?? \"\" }, \"OTHER\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{(() => {\r\n\t\t\t\t\t\t\t\t\t\t\tconst isSameAsActiveCall =\r\n\t\t\t\t\t\t\t\t\t\t\t\t!!mobileNumber && mobileNumber === (state.callData?.phone_number ?? \"\");\r\n\t\t\t\t\t\t\t\t\t\t\tconst hasMinDigits = mobileNumber.length >= 3;\r\n\t\t\t\t\t\t\t\t\t\t\tconst transferDisabled =\r\n\t\t\t\t\t\t\t\t\t\t\t\t!!state.consultInfo || !hasMinDigits || isSameAsActiveCall;\r\n\t\t\t\t\t\t\t\t\t\t\tconst tooltipTitle = state.consultInfo\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"Please complete or cancel the ongoing consult transfer before proceeding.\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: isSameAsActiveCall\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"Cannot transfer to the same number\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: !mobileNumber\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"Enter mobile number\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: !hasMinDigits\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"Enter at least 3 digits\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: `Call To - ${mobileNumber}`;\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname=\"others\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel=\"Mobile number\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"tel\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={mobileNumber}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terror={isSameAsActiveCall}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thelperText={isSameAsActiveCall ? \"Cannot transfer to the same number\" : \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonKeyDown={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst allowedKeys = [\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Backspace\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Delete\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Tab\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"ArrowLeft\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"ArrowRight\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"ArrowUp\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"ArrowDown\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Home\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"End\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t];\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!/^\\d$/.test(e.key) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!allowedKeys.includes(e.key) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!(e.ctrlKey || e.metaKey)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonPaste={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst pasted = e.clipboardData.getData(\"text\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!/^\\d*$/.test(pasted)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst v = e.target.value;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (/^\\d*$/.test(v)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetMobileNumber(v);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thtmlInput: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinputMode: \"numeric\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxLength: 11,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tformHelperText: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twhiteSpace: \"normal\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twordBreak: \"break-word\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1.2,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Enter mobile number\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tautoComplete=\"off\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={tooltipTitle}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={transferDisabled}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => handleTransferClick(e, { mobile_number: mobileNumber ?? \"\" }, \"OTHER\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t})()}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\r\n\t\t\t{/* Transfer Mode Menu */}\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={transferMenuAnchor}\r\n\t\t\t\topen={Boolean(transferMenuAnchor)}\r\n\t\t\t\tonClose={() => setTransferMenuAnchor(null)}\r\n\t\t\t\tanchorOrigin={{ vertical: \"top\", horizontal: \"left\" }}\r\n\t\t\t\ttransformOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n\t\t\t>\r\n\t\t\t\t{blindEnabled && (\r\n\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\tif (pendingTransferData) handleTransferCall(pendingTransferData.data, pendingTransferData.type, \"DEFAULT\");\r\n\t\t\t\t\t\t\tsetTransferMenuAnchor(null);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tsx={{ gap: 1 }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<TransferWithinAStation fontSize=\"small\" color=\"primary\" />\r\n\t\t\t\t\t\tTransfer\r\n\t\t\t\t\t</MenuItem>\r\n\t\t\t\t)}\r\n\t\t\t\t{attendedEnabled && (\r\n\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\tif (pendingTransferData) handleTransferCall(pendingTransferData.data, pendingTransferData.type, \"CONSULT\");\r\n\t\t\t\t\t\t\tsetTransferMenuAnchor(null);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tsx={{ gap: 1 }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<RecordVoiceOver fontSize=\"small\" color=\"primary\" />\r\n\t\t\t\t\t\tConsult then Transfer\r\n\t\t\t\t\t</MenuItem>\r\n\t\t\t\t)}\r\n\t\t\t</Menu>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function EndCallDispositionDialog({ open, setOpen, onSubmitDisposition }: any) {\r\n\tconst [getDispositions, data] = useGetRequest();\r\n\r\n\tconst [formData, setFormData] = useState({\r\n\t\tdisposition: { label: \"\", value: \"\", id: 0 },\r\n\t\tfollowUp: { label: \"No\", value: \"N\" },\r\n\t\tcallbackDate: \"\",\r\n\t\tcallbackHrs: \"\",\r\n\t\tcallbackMins: \"\",\r\n\t\tselected_break: false,\r\n\t\tnotes: \"\",\r\n\t});\r\n\tconst followUpOptions = [\r\n\t\t{ label: \"Yes\", value: \"Y\" },\r\n\t\t{ label: \"No\", value: \"N\" },\r\n\t];\r\n\r\n\tconst handleChange = (\r\n\t\tfield: keyof typeof formData,\r\n\t\tvalue: { label: string } | null | string | boolean\r\n\t) => {\r\n\t\tsetFormData((prev) => ({ ...prev, [field]: value }));\r\n\t};\r\n\r\n\tconst handleReset = () => {\r\n\t\tsetFormData({\r\n\t\t\tdisposition: { label: \"\", value: \"\", id: 0 },\r\n\t\t\tfollowUp: { label: \"No\", value: \"N\" },\r\n\t\t\tcallbackDate: \"\",\r\n\t\t\tcallbackHrs: \"\",\r\n\t\t\tcallbackMins: \"\",\r\n\t\t\tselected_break: false,\r\n\t\t\tnotes: \"\",\r\n\t\t});\r\n\t};\r\n\r\n\tconst handleClose = () => {\r\n\t\thandleReset();\r\n\t\tsetOpen(false);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tgetDispositions(END_POINT.DISPOSITIONS);\r\n\t}, []);\r\n\r\n\tconst dispositionsOptions = useMemo(() => {\r\n\t\treturn (\r\n\t\t\tdata?.data?.data\r\n\t\t\t\t?.filter((item: any) => item.name !== \"Resolved\")\r\n\t\t\t\t?.map((item: any) => ({\r\n\t\t\t\t\tlabel: item.name,\r\n\t\t\t\t\tvalue: item.code,\r\n\t\t\t\t\tid: item.disposition_id,\r\n\t\t\t\t}))\r\n\t\t\t\t?.sort((a: any, b: any) => a.label.localeCompare(b.label)) || []\r\n\t\t);\r\n\t}, [data?.data?.data]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"sm\"}\r\n\t\t\t\tfullWidth\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 600 } } }}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tminWidth: '650px'\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\tsx={{ m: 1 }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{\" \"}\r\n\t\t\t\t\t\t\tCall Disposition\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\tmargin: \"10px\",\r\n\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{ display: \"flex\", gap: 2 }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\tvalue={formData.disposition}\r\n\t\t\t\t\t\t\t\toptions={dispositionsOptions}\r\n\t\t\t\t\t\t\t\tgetOptionLabel={(opt) => opt.label}\r\n\t\t\t\t\t\t\t\tonChange={(_, val) => handleChange(\"disposition\", val)}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t{...params}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Disposition\"\r\n\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\toptions={followUpOptions}\r\n\t\t\t\t\t\t\t\tgetOptionLabel={(opt) => opt.label}\r\n\t\t\t\t\t\t\t\tvalue={formData.followUp}\r\n\t\t\t\t\t\t\t\tonChange={(_, val) => handleChange(\"followUp\", val)}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t{...params}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Follow Up\"\r\n\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{ display: \"flex\", gap: 2, mt: 2 }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{/* <Autocomplete\r\n\t\t\t\t\t\t\t\toptions={breakOptions}\r\n\t\t\t\t\t\t\t\tgetOptionLabel={(opt) => opt.label}\r\n\t\t\t\t\t\t\t\tvalue={formData.selected_break}\r\n\t\t\t\t\t\t\t\tonChange={(_, val) => handleChange(\"selected_break\", val)}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t{...params}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Break\"\r\n\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t/> */}\r\n\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tflex: \"1\",\r\n\t\t\t\t\t\t\t\t\tborder: \"1px solid #bdbdbd\",\r\n\t\t\t\t\t\t\t\t\tborderRadius: \"5px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\t\tname=\"selected_break\"\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tchecked={formData.selected_break}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => {\r\n\t\t\t\t\t\t\t\t\t\thandleChange(\"selected_break\", event.target.checked);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\t\tinput: { \"aria-label\": \"controlled\" },\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t/>{\" \"}\r\n\t\t\t\t\t\t\t\tMark as break\r\n\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t{formData?.followUp?.label?.toLowerCase() === \"yes\" ? (\r\n\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tlabel=\"Callback Date\"\r\n\t\t\t\t\t\t\t\t\ttype=\"date\"\r\n\t\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\t\tinputLabel: { shrink: true },\r\n\t\t\t\t\t\t\t\t\t\thtmlInput: {\r\n\t\t\t\t\t\t\t\t\t\t\tmin: new Date().toISOString().split(\"T\")[0],\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tvalue={formData.callbackDate}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\t\t\thandleChange(\"callbackDate\", e.target.value);\r\n\t\t\t\t\t\t\t\t\t\tconst isToday = e.target.value === new Date().toISOString().split(\"T\")[0];\r\n\t\t\t\t\t\t\t\t\t\tif (isToday) {\r\n\t\t\t\t\t\t\t\t\t\t\tconst now = new Date();\r\n\t\t\t\t\t\t\t\t\t\t\tconst currentHr = now.getHours();\r\n\t\t\t\t\t\t\t\t\t\t\tif (formData.callbackHrs && Number(formData.callbackHrs) < currentHr) {\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleChange(\"callbackHrs\", \"\");\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleChange(\"callbackMins\", \"\");\r\n\t\t\t\t\t\t\t\t\t\t\t} else if (formData.callbackHrs && Number(formData.callbackHrs) === currentHr && formData.callbackMins && Number(formData.callbackMins) < now.getMinutes()) {\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleChange(\"callbackMins\", \"\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t<Box sx={{ flex: 1 }}></Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t{formData?.followUp?.label?.toLowerCase() === \"yes\" && (\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{ display: \"flex\", gap: 2, mt: 2 }}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\toptions={Array.from({ length: 24 }, (_, i) => String(i).padStart(2, \"0\"))}\r\n\t\t\t\t\t\t\t\t\tgetOptionDisabled={(option) => {\r\n\t\t\t\t\t\t\t\t\t\tconst isToday = formData.callbackDate === new Date().toISOString().split(\"T\")[0];\r\n\t\t\t\t\t\t\t\t\t\treturn isToday && Number(option) < new Date().getHours();\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tvalue={formData.callbackHrs || null}\r\n\t\t\t\t\t\t\t\t\tonChange={(_, value) => handleChange(\"callbackHrs\", value || \"\")}\r\n\t\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t\t<TextField {...params} label=\"Hours (0-23)\" />\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\toptions={Array.from({ length: 60 }, (_, i) => String(i).padStart(2, \"0\"))}\r\n\t\t\t\t\t\t\t\t\tgetOptionDisabled={(option) => {\r\n\t\t\t\t\t\t\t\t\t\tconst isToday = formData.callbackDate === new Date().toISOString().split(\"T\")[0];\r\n\t\t\t\t\t\t\t\t\t\tconst now = new Date();\r\n\t\t\t\t\t\t\t\t\t\tconst isCurrentHr = isToday && formData.callbackHrs === String(now.getHours()).padStart(2, \"0\");\r\n\t\t\t\t\t\t\t\t\t\treturn isCurrentHr && Number(option) < now.getMinutes();\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tvalue={formData.callbackMins || null}\r\n\t\t\t\t\t\t\t\t\tonChange={(_, value) => handleChange(\"callbackMins\", value || \"\")}\r\n\t\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t\t<TextField {...params} label=\"Minutes (0-59)\" />\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t<Box sx={{ mt: 2 }}>\r\n\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tlabel=\"Notes\"\r\n\t\t\t\t\t\t\t\tmultiline\r\n\t\t\t\t\t\t\t\tminRows={2}\r\n\t\t\t\t\t\t\t\tmaxRows={4}\r\n\t\t\t\t\t\t\t\tvalue={formData.notes}\r\n\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"notes\", e.target.value)}\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{ textAlign: \"right\", m: 2 }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\tsize=\"large\"\r\n\t\t\t\t\t\t\tonClick={handleClose}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tpx: 2,\r\n\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tcancel\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"contained\"\r\n\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\tsize=\"large\"\r\n\t\t\t\t\t\t\tonClick={() => onSubmitDisposition(formData)}\r\n\t\t\t\t\t\t\tsx={{ px: 2, borderRadius: \"10px\", textTransform: \"capitalize\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tSubmit\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function ProcessorListDialog({\r\n\topen,\r\n\tsetOpen,\r\n\tprocessList = null,\r\n\thandleSelectedProcessor,\r\n}: any) {\r\n\tconst handleClose = () => {\r\n\t\tsetOpen(false);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={false}\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 500 } } }}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography variant=\"body1\"> Process List</Typography>\r\n\t\t\t\t\t\t<IconButton onClick={handleClose}>\r\n\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\tpadding: \"6px 10px\",\r\n\t\t\t\t\t\t\tmargin: \"10px\",\r\n\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{processList.length > 0 ?\r\n\t\t\t\t\t\t\tprocessList?.map((process: any, index: any) => (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\r\n\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\thandleSelectedProcessor(process);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<SupportAgent sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t{process.process_name}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t: null}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function CallHistoryDialog({ open, setOpen }: any) {\r\n\tconst handleClose = () => {\r\n\t\tsetOpen(false);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"md\"}\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 500 } } }}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography variant=\"body1\"> Call History</Typography>\r\n\t\t\t\t\t\t<IconButton onClick={handleClose}>\r\n\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\tmargin: \"10px\",\r\n\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\ttextAlign: \"center\",\r\n\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\tfontWeight: \"bold\",\r\n\t\t\t\t\t\t\tp: 6,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\tComing Soon...\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { type AxiosRequestConfig } from \"axios\";\r\nimport { useCallback, useReducer } from \"react\";\r\n\r\nimport axiosInstance from \"./axios\";\r\nimport { useToast } from \"./toastMessage\";\r\nimport {\r\n\tRequestResult,\r\n\tUseGetRequest,\r\n\tRequestOptions,\r\n\tUsePostRequest,\r\n\tUsePutRequest,\r\n\tUseDeleteRequest,\r\n\tUsePatchRequest,\r\n} from \"../../types\";\r\n\r\nconst initialState = {\r\n\tisLoading: false,\r\n\tisSuccess: false,\r\n\tisError: false,\r\n\terror: null,\r\n\tdata: null,\r\n};\r\n\r\nconst reducer = (state: typeof initialState, action: { type: string; payload: any }) => {\r\n\tif (action.type === \"isLoading\") {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisLoading: action.payload,\r\n\t\t};\r\n\t} else if (action.type === \"isSuccess\") {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisSuccess: true,\r\n\t\t\tdata: action.payload,\r\n\t\t};\r\n\t} else if (action.type === \"isError\") {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisError: true,\r\n\t\t\terror: action.payload,\r\n\t\t};\r\n\t} else if (action.type === \"reset\") {\r\n\t\treturn {\r\n\t\t\tisLoading: false,\r\n\t\t\tisSuccess: false,\r\n\t\t\tisError: false,\r\n\t\t\terror: null,\r\n\t\t\tdata: null,\r\n\t\t};\r\n\t}\r\n\tthrow Error(\"Unknown action.\");\r\n};\r\n\r\nexport const useGetRequest = <T = UseGetRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst getRequest = useCallback(\r\n\t\t(url: string, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.get(url, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, config);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, config);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, config);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [getRequest, state];\r\n};\r\n\r\nexport const usePostRequest = <T = UsePostRequest>(\r\n\tprops: RequestOptions = {}\r\n): [\r\n\t(_url: string, _payload: T, _config?: AxiosRequestConfig) => Promise<any>,\r\n\tRequestResult<T>,\r\n] => {\r\n\tconst { onSuccess = null, onError = null, disabledSuccessToast = false } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst postRequest = useCallback(\r\n\t\tasync (url: string, payload: T, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\ttry {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst res = await axiosInstance.post(url, payload, config);\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonSuccess?.(res.data, payload);\r\n\t\t\t\t\tif (!disabledSuccessToast) {\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (err: any) {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, payload);\r\n\t\t\t\t}\r\n\t\t\t} finally {\r\n\t\t\t\tdispatch({\r\n\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\tpayload: false,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [postRequest, state];\r\n};\r\n\r\nexport const usePutRequest = <T = UsePutRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _payload: T, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst putRequest = useCallback(\r\n\t\t(url: string, payload: T, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.put(url, payload, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, payload);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, payload);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, payload);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [putRequest, state];\r\n};\r\n\r\nexport const useDeleteRequest = <T = UseDeleteRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst deleteRequest = useCallback(\r\n\t\t(url: string, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.delete(url, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, config);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, config);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, config);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [deleteRequest, state];\r\n};\r\n\r\nexport const usePatchRequest = <T = UsePatchRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _payload: T, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst patchRequest = useCallback(\r\n\t\t(url: string, payload: T, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.patch(url, payload, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, payload);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, payload);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, payload);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [patchRequest, state];\r\n};\r\n","import { SxProps, useTheme } from \"@mui/material\";\r\n\r\nconst useStyles = ({\r\n disabled,\r\n enabled,\r\n outlined,\r\n}: {\r\n disabled: SxProps;\r\n enabled: SxProps;\r\n outlined: SxProps;\r\n}): {\r\n disabled: SxProps;\r\n enabled: SxProps;\r\n outlined: SxProps;\r\n} => {\r\n const theme = useTheme();\r\n return {\r\n disabled: {\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n minWidth: \"40px !important\",\r\n borderRadius: \"16px\",\r\n border: `1px solid ${theme.palette.grey[300]}`,\r\n backgroundColor: theme.palette.grey[100],\r\n color: theme.palette.action.disabled,\r\n opacity: 0.6,\r\n boxShadow: \"none\",\r\n cursor: \"not-allowed\",\r\n height: \"40px\",\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.grey[100],\r\n boxShadow: \"none\",\r\n border: `1px solid ${theme.palette.grey[300]}`,\r\n },\r\n \"&:active\": {\r\n backgroundColor: theme.palette.grey[100],\r\n boxShadow: \"none\",\r\n },\r\n // MUI sets `pointer-events: none` on disabled buttons, which hides the\r\n // cursor. Re-enable pointer events so `not-allowed` shows; the native\r\n // `disabled` attribute still blocks the click. Re-enabling pointer events\r\n // also revives MUI's hover/active visuals, so pin the muted look across\r\n // every interactive state — the button must never appear to \"light up\".\r\n \"&.Mui-disabled\": {\r\n pointerEvents: \"auto\",\r\n cursor: \"not-allowed\",\r\n backgroundColor: theme.palette.grey[100],\r\n color: theme.palette.action.disabled,\r\n borderColor: theme.palette.grey[300],\r\n boxShadow: \"none\",\r\n \"&:hover, &:focus, &:focus-visible, &:active\": {\r\n backgroundColor: theme.palette.grey[100],\r\n borderColor: theme.palette.grey[300],\r\n boxShadow: \"none\",\r\n },\r\n },\r\n ...disabled,\r\n },\r\n enabled: {\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n minWidth: \"40px !important\",\r\n borderRadius: \"16px\",\r\n boxShadow: \" 0px 2px 1px rgba(0, 0, 0, 0.507)\",\r\n border: `1px solid ${theme.palette.primary.main}`,\r\n height: \"40px\",\r\n \"&:hover\": {\r\n boxShadow: \" 0px 2px 1px rgba(0, 0, 0, 0.507)\",\r\n border: `1px solid ${theme.palette.primary.main}`,\r\n },\r\n \"&:active\": {\r\n bgcolor: \"primary.main\",\r\n boxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n },\r\n ...enabled,\r\n },\r\n outlined: {\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n minWidth: \"40px !important\",\r\n borderRadius: \"16px\",\r\n backgroundColor: theme.palette.grey[200],\r\n boxShadow: `0px 2px 1px ${theme.palette.primary.light}`,\r\n border: `0px solid ${theme.palette.primary.main}`,\r\n height: \"40px\",\r\n \"&:hover\": {\r\n boxShadow: `0px 2px 1px ${theme.palette.primary.main}`,\r\n border: `0px solid ${theme.palette.primary.main}`,\r\n },\r\n \"&:active\": {\r\n bgcolor: \"primary.main\",\r\n boxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n },\r\n ...outlined,\r\n },\r\n };\r\n};\r\n\r\nexport default useStyles;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { type MouseEvent, type TouchEvent, useCallback, useRef, useState } from \"react\";\r\n\r\ninterface Position {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\ninterface UseDraggableReturn {\r\n\tposition: Position;\r\n\tisDragging: boolean;\r\n\tdragRef: any;\r\n\thandleMouseDown: (_e: MouseEvent<HTMLDivElement>) => void;\r\n\thandleTouchStart: (_e: TouchEvent<HTMLDivElement>) => void;\r\n}\r\n\r\nexport function useDraggable(\r\n\tinitialPosition: Position,\r\n\tonPositionChange?: (_position: Position) => void\r\n): UseDraggableReturn {\r\n\tconst [position, setPosition] = useState<Position>(initialPosition);\r\n\r\n\tconst [isDragging, setIsDragging] = useState(false);\r\n\r\n\tconst dragRef = useRef<HTMLDivElement>();\r\n\r\n\tconst dragStart = useRef<Position>({ x: 0, y: 0 });\r\n\r\n\tconst elementStart = useRef<Position>({ x: 0, y: 0 });\r\n\r\n\tconst updatePosition = useCallback(\r\n\t\t(newPosition: Position) => {\r\n\t\t\tconst element = dragRef.current;\r\n\t\t\tif (!element) return;\r\n\r\n\t\t\tconst rect = element.getBoundingClientRect();\r\n\t\t\tconst viewportWidth = window.innerWidth;\r\n\t\t\tconst viewportHeight = window.innerHeight;\r\n\r\n\t\t\tconst constrainedPosition = {\r\n\t\t\t\tx: Math.max(0, Math.min(newPosition.x, viewportWidth - rect.width)),\r\n\t\t\t\ty: Math.max(0, Math.min(newPosition.y, viewportHeight - rect.height)),\r\n\t\t\t};\r\n\r\n\t\t\tsetPosition(constrainedPosition);\r\n\t\t\tonPositionChange?.(constrainedPosition);\r\n\t\t},\r\n\t\t[onPositionChange]\r\n\t);\r\n\r\n\tconst handleStart = useCallback(\r\n\t\t(clientX: number, clientY: number) => {\r\n\t\t\tsetIsDragging(true);\r\n\t\t\tdragStart.current = { x: clientX, y: clientY };\r\n\t\t\telementStart.current = position;\r\n\r\n\t\t\tconst handleMove = (moveClientX: number, moveClientY: number) => {\r\n\t\t\t\tconst deltaX = moveClientX - dragStart.current.x;\r\n\t\t\t\tconst deltaY = moveClientY - dragStart.current.y;\r\n\r\n\t\t\t\tupdatePosition({\r\n\t\t\t\t\tx: elementStart.current.x + deltaX,\r\n\t\t\t\t\ty: elementStart.current.y + deltaY,\r\n\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\t\tconst handleMouseMove = (e: globalThis.MouseEvent) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\thandleMove(e.clientX, e.clientY);\r\n\t\t\t};\r\n\r\n\t\t\tconst handleTouchMove = (e: globalThis.TouchEvent) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tconst touch = e.touches[0];\r\n\t\t\t\tif (touch) {\r\n\t\t\t\t\thandleMove(touch.clientX, touch.clientY);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tconst handleEnd = () => {\r\n\t\t\t\tsetIsDragging(false);\r\n\t\t\t\tdocument.removeEventListener(\"mousemove\", handleMouseMove);\r\n\t\t\t\tdocument.removeEventListener(\"mouseup\", handleEnd);\r\n\t\t\t\tdocument.removeEventListener(\"touchmove\", handleTouchMove);\r\n\t\t\t\tdocument.removeEventListener(\"touchend\", handleEnd);\r\n\t\t\t};\r\n\r\n\t\t\tdocument.addEventListener(\"mousemove\", handleMouseMove);\r\n\t\t\tdocument.addEventListener(\"mouseup\", handleEnd);\r\n\t\t\tdocument.addEventListener(\"touchmove\", handleTouchMove, {\r\n\t\t\t\tpassive: false,\r\n\t\t\t});\r\n\t\t\tdocument.addEventListener(\"touchend\", handleEnd);\r\n\t\t},\r\n\t\t[position, updatePosition]\r\n\t);\r\n\r\n\tconst handleMouseDown = useCallback(\r\n\t\t(e: MouseEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\thandleStart(e.clientX, e.clientY);\r\n\t\t},\r\n\t\t[handleStart]\r\n\t);\r\n\r\n\tconst handleTouchStart = useCallback(\r\n\t\t(e: TouchEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tconst touch = e.touches[0];\r\n\t\t\tif (touch) {\r\n\t\t\t\thandleStart(touch.clientX, touch.clientY);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[handleStart]\r\n\t);\r\n\r\n\treturn {\r\n\t\tposition,\r\n\t\tisDragging,\r\n\t\tdragRef,\r\n\t\thandleMouseDown,\r\n\t\thandleTouchStart,\r\n\t};\r\n}\r\n","// micController.ts\r\n\r\nexport type MicController = {\r\n\tstart: () => Promise<void>;\r\n\tstop: () => void;\r\n\tmute: () => void;\r\n\tunmute: () => void;\r\n\ttoggleMute: () => void;\r\n\tisMuted: () => boolean;\r\n\tgetStream: () => MediaStream | null;\r\n};\r\n\r\nexport function createMicController(\r\n\tconstraints: MediaStreamConstraints = { audio: true }\r\n): MicController {\r\n\tlet stream: MediaStream | null = null;\r\n\tlet muted = false;\r\n\r\n\tasync function start() {\r\n\t\tif (stream) return; // already started\r\n\t\tstream = await navigator.mediaDevices.getUserMedia(constraints);\r\n\t\t// default: unmuted\r\n\t\tstream.getAudioTracks().forEach((track) => (track.enabled = true));\r\n\t\tmuted = false;\r\n\t}\r\n\r\n\tfunction setEnabled(enabled: boolean) {\r\n\t\tif (!stream) return;\r\n\t\tstream.getAudioTracks().forEach((track) => (track.enabled = enabled));\r\n\t\tmuted = !enabled;\r\n\t}\r\n\r\n\tfunction mute() {\r\n\t\tsetEnabled(false);\r\n\t}\r\n\r\n\tfunction unmute() {\r\n\t\tsetEnabled(true);\r\n\t}\r\n\r\n\tfunction toggleMute() {\r\n\t\tif (muted) {\r\n\t\t\tunmute();\r\n\t\t} else {\r\n\t\t\tmute();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction stop() {\r\n\t\tif (!stream) return;\r\n\t\tstream.getTracks().forEach((t) => t.stop());\r\n\t\tstream = null;\r\n\t\tmuted = false;\r\n\t}\r\n\r\n\tfunction isMuted() {\r\n\t\treturn muted;\r\n\t}\r\n\r\n\tfunction getStream() {\r\n\t\treturn stream;\r\n\t}\r\n\r\n\treturn {\r\n\t\tstart,\r\n\t\tstop,\r\n\t\tmute,\r\n\t\tunmute,\r\n\t\ttoggleMute,\r\n\t\tisMuted,\r\n\t\tgetStream,\r\n\t};\r\n}\r\n","/**\r\n * Audio loader utility for handling MP3 files as buffers/blobs\r\n * This ensures the audio works correctly in bundled npm packages\r\n */\r\n\r\n// Import the MP3 file - bundler will handle this\r\n// @ts-ignore - MP3 module declaration\r\nimport incomingRingtoneUrl from \"../ringtones/incoming.mp3\";\r\n\r\nlet audioBlobUrl: string | null = null;\r\nlet audioBuffer: ArrayBuffer | null = null;\r\n\r\n/**\r\n * Loads the audio file as a blob URL for reliable playback\r\n * @returns Promise<string> - Blob URL or direct URL for the audio file\r\n */\r\nexport async function loadAudioAsBlob(): Promise<string> {\r\n\tif (audioBlobUrl) {\r\n\t\treturn audioBlobUrl;\r\n\t}\r\n\r\n\t// If the URL is already a data URL or absolute URL, use it directly\r\n\tif (\r\n\t\tincomingRingtoneUrl.startsWith(\"data:\") ||\r\n\t\tincomingRingtoneUrl.startsWith(\"http://\") ||\r\n\t\tincomingRingtoneUrl.startsWith(\"https://\") ||\r\n\t\tincomingRingtoneUrl.startsWith(\"blob:\")\r\n\t) {\r\n\t\treturn incomingRingtoneUrl;\r\n\t}\r\n\r\n\t// Try to fetch and convert to blob URL\r\n\ttry {\r\n\t\tconst response = await fetch(incomingRingtoneUrl);\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`HTTP ${response.status}: ${response.statusText}`);\r\n\t\t}\r\n\r\n\t\tconst blob = await response.blob();\r\n\r\n\t\t// Verify it's a valid blob\r\n\t\tif (blob.size === 0) {\r\n\t\t\tthrow new Error(\"Empty blob\");\r\n\t\t}\r\n\r\n\t\taudioBlobUrl = URL.createObjectURL(blob);\r\n\t\treturn audioBlobUrl;\r\n\t} catch (error) {\r\n\t\t// If fetch fails, the bundler may have already processed the URL\r\n\t\t// Return the original URL - it should work if tsup processed it correctly\r\n\t\tconsole.error(\"Could not create blob URL, using direct URL:\", error);\r\n\t\treturn incomingRingtoneUrl;\r\n\t}\r\n}\r\n\r\n/**\r\n * Loads the audio file as an ArrayBuffer\r\n * @returns Promise<ArrayBuffer> - Audio file as buffer\r\n */\r\nexport async function loadAudioAsBuffer(): Promise<ArrayBuffer> {\r\n\tif (audioBuffer) {\r\n\t\treturn audioBuffer;\r\n\t}\r\n\r\n\ttry {\r\n\t\tconst response = await fetch(incomingRingtoneUrl);\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`Failed to load audio: ${response.statusText}`);\r\n\t\t}\r\n\r\n\t\taudioBuffer = await response.arrayBuffer();\r\n\t\treturn audioBuffer;\r\n\t} catch (error) {\r\n\t\tconsole.error(\"Error loading audio as buffer:\", error);\r\n\t\tthrow error;\r\n\t}\r\n}\r\n\r\n/**\r\n * Creates an Audio element from the blob URL\r\n * @returns Promise<HTMLAudioElement> - Audio element ready to play\r\n */\r\nexport async function createAudioElement(): Promise<HTMLAudioElement> {\r\n\tconst audio = new Audio();\r\n\r\n\t// Set up audio properties before setting source\r\n\taudio.loop = true;\r\n\taudio.volume = 0.7;\r\n\taudio.preload = \"auto\";\r\n\r\n\t// Try multiple approaches to load the audio\r\n\tlet audioUrl: string = \"\";\r\n\r\n\t// First, try to get blob URL\r\n\ttry {\r\n\t\taudioUrl = await loadAudioAsBlob();\r\n\t} catch (error) {\r\n\t\tconsole.warn(\"Failed to load audio as blob, trying direct URL:\", error);\r\n\t\taudioUrl = incomingRingtoneUrl;\r\n\t}\r\n\r\n\t// Set up error handling with retry logic\r\n\tconst tryLoadAudio = async (url: string): Promise<boolean> => {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tconst checkCanPlay = () => {\r\n\t\t\t\t// Check if audio can play\r\n\t\t\t\tconst canPlay = audio.readyState >= HTMLMediaElement.HAVE_FUTURE_DATA;\r\n\t\t\t\tif (canPlay) {\r\n\t\t\t\t\tresolve(true);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Check for errors\r\n\t\t\t\tif (audio.error) {\r\n\t\t\t\t\tresolve(false);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Wait a bit and check again\r\n\t\t\t\tsetTimeout(checkCanPlay, 100);\r\n\t\t\t};\r\n\r\n\t\t\taudio.addEventListener(\"canplay\", () => resolve(true), { once: true });\r\n\t\t\taudio.addEventListener(\"error\", () => resolve(false), { once: true });\r\n\t\t\taudio.src = url;\r\n\t\t\taudio.load();\r\n\r\n\t\t\t// Timeout after 2 seconds\r\n\t\t\tsetTimeout(() => resolve(false), 2000);\r\n\t\t});\r\n\t};\r\n\r\n\t// Try loading with the primary URL\r\n\tlet loaded = await tryLoadAudio(audioUrl);\r\n\r\n\t// If that fails, try the original import URL directly\r\n\tif (!loaded && audioUrl !== incomingRingtoneUrl) {\r\n\t\tloaded = await tryLoadAudio(incomingRingtoneUrl);\r\n\t\tif (loaded) {\r\n\t\t\taudioUrl = incomingRingtoneUrl;\r\n\t\t}\r\n\t}\r\n\r\n\treturn audio;\r\n}\r\n\r\n/**\r\n * Cleanup function to revoke blob URLs and free memory\r\n */\r\nexport function cleanupAudioResources(): void {\r\n\tif (audioBlobUrl) {\r\n\t\tURL.revokeObjectURL(audioBlobUrl);\r\n\t\taudioBlobUrl = null;\r\n\t}\r\n\taudioBuffer = null;\r\n}\r\n\r\n/**\r\n * Get the audio URL (blob URL or fallback to direct URL)\r\n * @returns string - Audio URL\r\n */\r\nexport function getAudioUrl(): string {\r\n\treturn audioBlobUrl || incomingRingtoneUrl;\r\n}\r\n","import React from \"react\";\r\nimport { SDKPermissionGuard } from \"../components/SDKPermissionGuard\";\r\nimport { SDK_MENU_CODES } from \"../permissions\";\r\n\r\n// ─── helper ──────────────────────────────────────────────────────────────────\r\n\r\nfunction withGuard(\r\n\tmenuCodes: string | string[],\r\n\tloader: () => Promise<{ default: React.FC<any> }>,\r\n): React.LazyExoticComponent<React.FC<any>> {\r\n\treturn React.lazy(async () => {\r\n\t\tconst mod = await loader();\r\n\t\tconst Page = mod.default;\r\n\t\tconst Guarded: React.FC<any> = (props) => (\r\n\t\t\t<SDKPermissionGuard menuFeature={menuCodes}>\r\n\t\t\t\t<Page {...props} />\r\n\t\t\t</SDKPermissionGuard>\r\n\t\t);\r\n\t\treturn { default: Guarded };\r\n\t});\r\n}\r\n\r\n// ─── page list ────────────────────────────────────────────────────────────────\r\n// Add new SDK pages here — one entry per page, guard is applied automatically.\r\n\r\nexport const SDKPages = {\r\n\tCallHistory: withGuard(SDK_MENU_CODES.CALL_HISTORY, () => import(\"./callHistory\")),\r\n\tCampaigns: withGuard(SDK_MENU_CODES.CAMPAIGNS, () => import(\"./campaigns\")),\r\n\tLoginReport: withGuard(SDK_MENU_CODES.LOGIN_REPORT, () => import(\"./loginReport\")),\r\n\tCdrReports: withGuard(SDK_MENU_CODES.CDR_REPORT, () => import(\"./cdrReport\")),\r\n\tAuditReportPage: withGuard(SDK_MENU_CODES.CDR_REPORT, () => import(\"./auditReport\")),\r\n\tAgentPerformanceReport: withGuard(SDK_MENU_CODES.AGENT_PERFORMANCE_REPORT, () => import(\"./agentPerformanceReport\")),\r\n\tAgentDetailReport: withGuard(SDK_MENU_CODES.AGENT_DETAIL_REPORT, () => import(\"./agentDetailReport\")),\r\n\tLiveStatus: withGuard(SDK_MENU_CODES.LIVE_STATUS, () => import(\"./liveStatus\")),\r\n\tManagementDashboard: withGuard(SDK_MENU_CODES.MANAGEMENT_DASHBOARD, () => import(\"./managementDashboard\")),\r\n\tCaroVoiceAI: withGuard(SDK_MENU_CODES.CARO_VOICE_AI, () => import(\"./caroVoiceAI\")),\r\n\tQualityAuditDashboard: withGuard(SDK_MENU_CODES.MANAGEMENT_DASHBOARD, () => import(\"./qualityAuditDashboard\")),\r\n\tCaroQualityAuditDashboard: withGuard(SDK_MENU_CODES.MANAGEMENT_DASHBOARD, () => import(\"./caroQualityAuditDashboard\"))\r\n} as const;\r\n","import { useCallback, useEffect, useRef, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport { getSession } from \"@react-solutions/vault\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\n\r\nexport interface ConferenceCallPayload {\r\n mobileNumber: string;\r\n lineNumber?: number;\r\n}\r\n\r\nexport interface UseClickToConferenceReturn {\r\n handleStartConferenceCall: (payload: ConferenceCallPayload) => Promise<any>;\r\n isLoading: boolean;\r\n isSuccess: boolean;\r\n isError: boolean;\r\n error: any;\r\n data: any;\r\n}\r\n\r\nexport const useClickToConference = (): UseClickToConferenceReturn => {\r\n const [loading, setLoading] = useState(false);\r\n const [success, setSuccess] = useState(false);\r\n const [isError, setIsError] = useState(false);\r\n const [error, setError] = useState<any>(null);\r\n const [data, setData] = useState<any>(null);\r\n\r\n // Track the line we dialed so we can watch for its socket update\r\n const pendingLineRef = useRef<number | null>(null);\r\n // Track the last seen conference state to detect changes\r\n const prevConferenceRef = useRef<any[]>([]);\r\n\r\n useEffect(() => {\r\n if (pendingLineRef.current === null) return;\r\n\r\n const unsubscribe = sdkStateManager.subscribe(() => {\r\n const state = sdkStateManager.getState();\r\n const targetLine = pendingLineRef.current;\r\n\r\n if (targetLine === null) return;\r\n\r\n const line = (state.conferenceLine as any[])?.find(\r\n (l) => l.line === targetLine,\r\n );\r\n\r\n // Socket has updated the line away from IDLE — conference is live\r\n if (line && line.status !== \"IDLE\") {\r\n pendingLineRef.current = null;\r\n prevConferenceRef.current = [];\r\n sdkStateManager.setOpenConferenceDialog(true);\r\n }\r\n });\r\n\r\n return unsubscribe;\r\n }, [loading]);\r\n\r\n const handleStartConferenceCall = useCallback(\r\n async (payload: ConferenceCallPayload): Promise<any> => {\r\n const state = getSession(STORAGE_KEY) as any;\r\n\r\n if (state?.callData?.status !== \"ONCALL\") {\r\n const msg = \"Conference call requires an active call (ONCALL status)\";\r\n setIsError(true);\r\n setError(new Error(msg));\r\n throw new Error(msg);\r\n }\r\n\r\n const availableLine =\r\n payload.lineNumber != null\r\n ? state?.conferenceLine?.find(\r\n (l: any) => l.line === payload.lineNumber,\r\n )\r\n : state?.conferenceLine\r\n ?.filter((l: any) => l.line !== 1)\r\n ?.find((l: any) => l.status === \"IDLE\" && !l?.isCallStart);\r\n\r\n if (!availableLine) {\r\n const msg = \"No available conference line found\";\r\n setIsError(true);\r\n setError(new Error(msg));\r\n throw new Error(msg);\r\n }\r\n\r\n const requestPayload = {\r\n action: \"EXTERNAL_CONFERENCE\",\r\n operation: `CALL${availableLine.line}`,\r\n target: payload.mobileNumber,\r\n line_number: Number(availableLine.line),\r\n userid: state.agentId,\r\n process: state.callData?.process_name ?? \"\",\r\n };\r\n\r\n setLoading(true);\r\n setIsError(false);\r\n setError(null);\r\n setSuccess(false);\r\n\r\n // Record which line we are waiting on so the subscriber can watch it\r\n pendingLineRef.current = availableLine.line;\r\n\r\n return axiosInstance\r\n .post(END_POINT.CONFERENCE_CALL, requestPayload)\r\n .then((res) => {\r\n setData(res?.data);\r\n setSuccess(true);\r\n return res?.data;\r\n })\r\n .catch((err) => {\r\n pendingLineRef.current = null;\r\n setIsError(true);\r\n setError(err);\r\n return err?.response?.data;\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n },\r\n [],\r\n );\r\n\r\n return {\r\n handleStartConferenceCall,\r\n isLoading: loading,\r\n isSuccess: success,\r\n isError,\r\n error,\r\n data,\r\n };\r\n};\r\n","import { removeSession } from \"@react-solutions/vault\";\r\n\r\nimport axiosInstance from \"../services/axios\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\nimport type { EndCallPayload } from \"../hooks/useEndCall\";\r\n\r\n// ─── Types ────────────────────────────────────────────────────────────────────\r\n\r\nexport interface StartCallPayload {\r\n mobileNumber: string;\r\n user?: string;\r\n auto_answer?: boolean;\r\n call_id?: string;\r\n reference_id?: string;\r\n call_source?: string;\r\n caseId?: string;\r\n isWrapup?: boolean;\r\n parentCallUuid?: string;\r\n}\r\n\r\nexport interface ConferenceCallPayload {\r\n mobileNumber: string;\r\n lineNumber?: number;\r\n}\r\n\r\nexport type { EndCallPayload };\r\n\r\nexport type SupervisorMonitorMode = \"listen\" | \"whisper\" | \"barge\";\r\n\r\nexport interface StartMonitoringPayload {\r\n call_id: string;\r\n mode: SupervisorMonitorMode;\r\n supervisor_extension?: string;\r\n agent_extension?: string;\r\n}\r\n\r\nexport interface StopMonitoringPayload {\r\n call_uuid: string;\r\n session_id?: string;\r\n}\r\n\r\nexport interface ChangeModePayload {\r\n call_uuid: string;\r\n mode: SupervisorMonitorMode;\r\n session_id?: string;\r\n}\r\n\r\n// ─── Actions ──────────────────────────────────────────────────────────────────\r\n\r\nexport function clickToCall(payload: StartCallPayload): Promise<any> {\r\n const state = sdkStateManager.getState() as any;\r\n\r\n // if (state?.callData?.status !== \"IDLE\" && state?.callData?.status !== \"ONCALL\"){\r\n // return Promise.reject(new Error(\"Agent is not ready\"));\r\n // }\r\n\r\n const body = {\r\n phone_number: payload.mobileNumber,\r\n user: payload.user ?? state?.agentId ?? \"\",\r\n auto_answer: payload.auto_answer ?? false,\r\n call_id: payload.call_id ?? state?.callData?.call_id ?? \"\",\r\n reference_id: payload.reference_id ?? \"\",\r\n call_source: payload.call_source ?? \"\",\r\n caseId: payload.caseId ?? \"\",\r\n isWrapup: payload.isWrapup ?? false,\r\n parentCallUuid: payload.parentCallUuid ?? \"\",\r\n };\r\n\r\n return axiosInstance\r\n .post(END_POINT.CLICK_TO_CALL, body)\r\n .then((res) => {\r\n try { sdkStateManager.resetConferenceLines(); } catch (_) {}\r\n return res.data;\r\n })\r\n .catch((err) => {\r\n return err?.response?.data;\r\n });\r\n \r\n}\r\n\r\nexport function clickToConference(payload: ConferenceCallPayload): Promise<any> {\r\n const state = sdkStateManager.getState() as any;\r\n\r\n // if (state?.callData?.status !== \"ONCALL\") {\r\n // return Promise.reject(new Error(\"Conference call requires an active call (ONCALL status)\"));\r\n // }\r\n\r\n const availableLine =\r\n payload.lineNumber != null\r\n ? state?.conferenceLine?.find((l: any) => l.line === payload.lineNumber)\r\n : state?.conferenceLine\r\n ?.filter((l: any) => l.line !== 1)\r\n ?.find((l: any) => l.status === \"IDLE\" && !l?.isCallStart);\r\n\r\n if (!availableLine) {\r\n return Promise.reject(new Error(\"No available conference line found\"));\r\n }\r\n\r\n const body = {\r\n action: \"EXTERNAL_CONFERENCE\",\r\n operation: `CALL${availableLine.line}`,\r\n target: payload.mobileNumber,\r\n line_number: Number(availableLine.line),\r\n userid: state.agentId,\r\n process: state.callData?.process_name ?? \"\",\r\n };\r\n\r\n return axiosInstance\r\n .post(END_POINT.CONFERENCE_CALL, body)\r\n .then((res) => {\r\n try { sdkStateManager.setOpenConferenceDialog(true); } catch (_) {}\r\n return res.data;\r\n })\r\n .catch((err) => {\r\n return err?.response?.data;\r\n });\r\n}\r\n\r\nexport async function endCall(options: EndCallPayload = {}): Promise<any> {\r\n const state = sdkStateManager.getState() as any;\r\n\r\n const body = {\r\n call_id: options.call_id ?? state?.callData?.call_id ?? \"\",\r\n agent_id: options.agent_id ?? state?.agentId ?? \"\",\r\n set_followUp: options.set_followUp ?? \"N\",\r\n callback_date: options.callback_date ?? \"\",\r\n callback_hrs: options.callback_hrs ?? 0,\r\n callback_mins: options.callback_mins ?? 0,\r\n mobile_number: options.mobile_number ?? state?.callData?.phone_number ?? \"\",\r\n list_comments: options.list_comments ?? \"\",\r\n call_reference_id: options.call_reference_id ?? state?.callData?.call_id ?? \"\",\r\n is_mark_as_break: options.is_mark_as_break ?? false,\r\n disposition: options.disposition ?? \"RES\",\r\n line_number: options.line_number ?? 0,\r\n reason: options.reason ?? \"normal\",\r\n };\r\n\r\n const res = await axiosInstance.post(END_POINT.END_CALL, body);\r\n sdkStateManager.resetConferenceLines();\r\n sdkStateManager.endCall();\r\n return res.data;\r\n}\r\n\r\nexport async function logout(): Promise<void> {\r\n let logoutError: Error | undefined;\r\n\r\n try {\r\n await axiosInstance.post(END_POINT.AUTH_LOGOUT);\r\n } catch (err: any) {\r\n logoutError = new Error(err?.response?.data?.message || \"Logout failed. Please try again.\");\r\n } finally {\r\n sdkStateManager.clearStorageAndReset();\r\n removeSession(STORAGE_KEY);\r\n }\r\n\r\n if (logoutError) throw logoutError;\r\n}\r\n\r\nexport async function startMonitoring(payload: StartMonitoringPayload): Promise<any> {\r\n const res = await axiosInstance.post(END_POINT.SUPERVISOR_CALL_LISTEN, payload);\r\n return res.data;\r\n}\r\n\r\nexport async function stopMonitoring(payload: StopMonitoringPayload): Promise<any> {\r\n const res = await axiosInstance.post(END_POINT.SUPERVISOR_CALL_LEAVE, payload);\r\n return res.data;\r\n}\r\n\r\nexport async function changeMonitorMode(payload: ChangeModePayload): Promise<any> {\r\n const res = await axiosInstance.post(END_POINT.SUPERVISOR_CALL_CHANGE_MODE, payload);\r\n return res.data;\r\n}\r\n\r\n/**\r\n * Set lead data that will be attached as `lead_data` in the transfer API payload.\r\n * Call this whenever the lead details change in the host application.\r\n *\r\n * @example\r\n * setTransferLeadData({ lead_id: 123, customer_name: 'John' });\r\n */\r\nexport function setTransferLeadData(data: any): void {\r\n sdkStateManager.setTransferLeadData(data);\r\n}\r\n"],"mappings":"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","names":["_a","_a","_a","axios","import_react","_a","_b","process_id","process_name","status","phone_number","agent_id","call_id","call_details","import_react","startMonitoring","_a","stopMonitoring","import_react","import_jsx_runtime","_a","import_react","import_material","import_styles","import_jsx_runtime","LockOutlinedIcon","import_jsx_runtime","_a","import_react","import_material","import_jsx_runtime","import_material","import_styles","import_jsx_runtime","ArrowBackIcon","import_material","import_jsx_runtime","_a","import_react","_a","cellSx","PlayArrow","ExpandLess","KeyboardArrowDown","import_react","import_material","import_KeyboardArrowDown","import_PlayArrow","import_Phone","import_jsx_runtime","RefreshIcon","Search","Phone","muiVariant","import_material","import_styles","import_jsx_runtime","_a","fetchQueues","import_react","_a","import_react","_a","_a","_b","fetchQueues","AddIcon","err","UploadFileIcon","DownloadIcon","SearchIcon","PlayArrowIcon","import_react","import_material","import_Pause","import_Phone","import_PlayArrow","import_Refresh","import_Search","import_jsx_runtime","CampaignDialog","AddLeadDialog","CampaignsContent","_c","_d","_e","RefreshIcon","ChevronRightIcon","statusColor","ChevronLeftIcon","SettingsIcon","EditIcon","PauseIcon","ArchiveIcon","PhoneIcon","VisibilityOutlinedIcon","DeleteIcon","SearchIcon","CloseIcon","import_material","import_Search","import_Close","import_jsx_runtime","dayjs","import_react","import_material","import_jsx_runtime","_a","import_react","import_material","import_jsx_runtime","dayjs","import_material","import_dayjs","import_jsx_runtime","isoWeek","_a","getQueues","import_react","headCellSx","ArrowBackIcon","import_material","import_ArrowBack","import_jsx_runtime","dayjs","getQueues","_a","DownloadIcon","RefreshIcon","headCellSx","CloseIcon","import_react","import_material","import_Close","import_Download","import_Refresh","import_dayjs","import_isoWeek","import_jsx_runtime","isoWeek","_a","CheckCircleOutlineIcon","RemoveCircleOutlineIcon","HighlightOffIcon","text","_b","LaunchIcon","CloseIcon","import_react","import_material","import_styles","import_Close","import_jsx_runtime","COLORS","FONT","fmtRecordingDuration","FileDownloadIcon","PlayArrowIcon","dayjs","_a","comparator","DownloadIcon","RefreshIcon","headCellSx","AssignmentIcon","import_react","import_material","import_Download","import_Refresh","import_PlayArrow","import_dayjs","import_isoWeek","import_LocalizationProvider","import_AdapterDayjs","import_jsx_runtime","isoWeek","import_jsx_runtime","_a","fetchQueues","import_react","getCdrReport","getRecordingByCall","import_react","RecordingCell","Tooltip","PlayArrowIcon","FileDownloadIcon","getRecordingByCall","_a","dayjs","_b","_c","_d","_e","getCdrReport","RefreshIcon","SearchIcon","RTooltip","import_react","import_material","import_Search","import_Refresh","import_PlayArrow","import_FileDownload","import_dayjs","import_LocalizationProvider","import_AdapterDayjs","import_DatePicker","import_jsx_runtime","_a","dayjs","fetchQueues","data","C","FileDownloadIcon","RefreshIcon","headCellSx","VisibilityIcon","import_react","import_material","import_FileDownload","import_Refresh","import_dayjs","import_isoWeek","import_LocalizationProvider","import_AdapterDayjs","import_jsx_runtime","isoWeek","parseDur","fmtDur","_a","fetchQueues","import_react","import_material","import_styles","C","STATUS_COLORS","init_styles","_a","startMonitoring","stopMonitoring","C","_b","_c","fmtDur","React","import_react","import_material","import_jsx_runtime","init_styles","STATUS_COLORS","statusColor","buildQs","labelSx","C","dayjs","_a","RefreshIcon","FileDownloadIcon","monoSx","RTooltip","SearchIcon","import_react","import_material","import_dayjs","import_LocalizationProvider","import_AdapterDayjs","import_recharts","import_Search","import_FileDownload","import_Refresh","import_jsx_runtime","headCellSx","import_material","import_jsx_runtime","import_material","import_jsx_runtime","htmlContent","import_material","import_jsx_runtime","_a","import_react","import_vault","_a","import_react","import_vault","data","_a","import_react","import_vault","data","_a","import_react","import_react","import_react","import_CallEnd","import_Close","import_Pause","import_PlayArrow","import_SupportAgent","import_TransferWithinAStation","import_Upcoming","import_material","import_react","import_material","import_react","import_react","_a","import_material","import_jsx_runtime","_a","_b","_c","_d","_e","PlayArrow","Pause","Call","CallSplit","CallEnd","_f","_g","_h","_i","_j","_k","_l","_m","Close","PhoneDisabled","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","TransferWithinAStation","MemoryOutlined","Upcoming","Airlines","SupportAgent","Roofing","RecordVoiceOver","import_react","incomingRingtoneUrl","incomingRingtoneUrl","import_vault","import_jsx_runtime","_a","clickToCall","endCall","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","isOnHold","isMuted","DragIndicator","WifiCalling3","Pause","MicOff","KeyboardArrowDown","SupportAgent","PlayArrow","Mic","TransferWithinAStation","Group","SmsSharp","CallEnd","MoreVert","Close","Phone","SendRounded","Layers","Pending","Upcoming","import_jsx_runtime","_a","import_react","import_jsx_runtime","React","import_react","import_vault","_a","import_vault","_a"]}