call-control-sdk 5.4.6 → 5.4.8

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../call-control-sdk/lib/hooks/sdk-state.ts","../call-control-sdk/lib/hooks/eventsTracker.ts","../call-control-sdk/lib/hooks/useLogout.ts","../call-control-sdk/lib/services/endPoint.ts","../call-control-sdk/lib/services/axios.ts","../call-control-sdk/lib/hooks/useEndCall.ts","../call-control-sdk/lib/hooks/useClickToCall.ts","../call-control-sdk/lib/components/callControls.tsx","../call-control-sdk/lib/hooks/useDraggable.ts","../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/dialog.tsx","../call-control-sdk/lib/components/styles.ts","../call-control-sdk/lib/components/SDKProvider.tsx","../call-control-sdk/lib/components/callControlPanel.tsx","../call-control-sdk/index.ts"],"sourcesContent":["import type {\r\n SDKState,\r\n CallData,\r\n CallStatus,\r\n ConferenceLineTypes,\r\n SDKConfig,\r\n} from \"../../types\";\r\n\r\nclass SDKStateManager {\r\n private state: SDKState;\r\n private listeners: Array<() => void> = [];\r\n private readonly STORAGE_KEY = \"call-control-sdk-state\";\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 process: null,\r\n agentId: \"\",\r\n openConferenceDialog: false,\r\n openCallTransferDialog: false,\r\n isInitialized: false,\r\n sdkConfig: {\r\n showEndCallButton: true,\r\n showTransferButton: true,\r\n enableFloatingDrag: true,\r\n enableSoftPhone: true,\r\n showConferenceButton: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n },\r\n isHolding: false,\r\n isMuted: false,\r\n status: \"idle\",\r\n callStartTime: null,\r\n controlPanelPosition: { x: 10, y: 10 },\r\n iframePosition: { x: 10, y: 80 },\r\n callData: {\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 {\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 }\r\n\r\n private loadFromStorage(): void {\r\n try {\r\n const stored = localStorage.getItem(this.STORAGE_KEY);\r\n if (stored) {\r\n const parsedState = JSON.parse(stored);\r\n // Only restore persistent data, not initialization state\r\n this.state = {\r\n ...this.state,\r\n agentId: parsedState.agentId || \"\",\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 showEndCallButton: true,\r\n showTransferButton: true,\r\n enableFloatingDrag: true,\r\n enableSoftPhone: true,\r\n showConferenceButton: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n },\r\n isHolding: parsedState.isHolding || false,\r\n isMuted: parsedState.isMuted || false,\r\n status: parsedState.status || \"idle\",\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 || { x: 10, y: 80 },\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 // Fix: Properly handle conferenceLine with fallback to initial state\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 };\r\n }\r\n } catch (error) {\r\n console.warn(\"Failed to load SDK state from localStorage:\", error);\r\n // If loading fails, keep the initial state\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 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 isHolding: this.state.isHolding,\r\n isMuted: this.state.isMuted,\r\n status: this.state.status,\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 };\r\n localStorage.setItem(this.STORAGE_KEY, JSON.stringify(persistentState));\r\n } catch (error) {\r\n console.warn(\"Failed to save SDK state to localStorage:\", 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 public initialize(\r\n apiKey: string,\r\n agentId: string,\r\n sdkConfig?: SDKConfig\r\n ): void {\r\n if (!apiKey || typeof apiKey !== \"string\" || apiKey.trim().length === 0) {\r\n throw new Error(\"API key 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.sdkConfig = {\r\n showEndCallButton: true,\r\n showTransferButton: true,\r\n enableFloatingDrag: true,\r\n enableSoftPhone: true,\r\n showConferenceButton: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n ...sdkConfig,\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 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 setHolding(isHolding: boolean): void {\r\n this.state.isHolding = isHolding;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setMuted(isMuted: boolean): void {\r\n this.state.isMuted = isMuted;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setStatus(status: CallStatus): void {\r\n this.state.status = status;\r\n this.saveToStorage();\r\n this.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.state.status = \"on call\";\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.state.status = \"idle\";\r\n this.state.isHolding = false;\r\n this.state.isMuted = false;\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 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 setConferenceLine(line: ConferenceLineTypes): void {\r\n // Fix: Check if conferenceLine is corrupted and reset if needed\r\n if (\r\n !this.state.conferenceLine ||\r\n !Array.isArray(this.state.conferenceLine)\r\n ) {\r\n console.warn(\r\n \"Conference line data corrupted, resetting to initial state\"\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 = this.getInitialState().conferenceLine;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public clearStorageAndReset(): void {\r\n try {\r\n localStorage.removeItem(this.STORAGE_KEY);\r\n this.state = this.getInitialState();\r\n this.notifyListeners();\r\n } catch (error) {\r\n console.warn(\"Failed to clear localStorage:\", error);\r\n }\r\n }\r\n\r\n // Debug methods\r\n public debugStorage(): void {\r\n try {\r\n const stored = localStorage.getItem(this.STORAGE_KEY);\r\n console.log(\"Current localStorage data:\", stored);\r\n if (stored) {\r\n console.log(\"Parsed localStorage data:\", JSON.parse(stored));\r\n }\r\n console.log(\"Current state:\", this.state);\r\n } catch (error) {\r\n console.error(\"Error debugging storage:\", 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// SDK State Manager Instance\r\nexport const sdkStateManager = new SDKStateManager();\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/**\r\n * EventTracker SDK - A plug-and-play event tracking system\r\n *\r\n * Usage:\r\n * import EventTracker from '@eventtracker/et';\r\n *\r\n * EventTracker.init({\r\n * apiKey: 'your-api-key',\r\n * tenantId: 'tenant_001',\r\n * agentId: 'agent_123',\r\n * sessionId: 'session_456'\r\n * });\r\n *\r\n * EventTracker.logEvent('appointmentBooked', { patientId: 'p123' });\r\n */\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nexport interface EventTrackerConfig {\r\n apiKey: string;\r\n tenantId: string;\r\n agentId: string;\r\n sessionId?: string;\r\n baseUrl?: string;\r\n autoTrack?:\r\n | boolean\r\n | {\r\n pageVisits?: boolean;\r\n clicks?: boolean;\r\n forms?: boolean;\r\n inputs?: boolean;\r\n scrolling?: boolean;\r\n performance?: boolean;\r\n errors?: boolean;\r\n visibility?: boolean;\r\n };\r\n retryAttempts?: number;\r\n queueSize?: number;\r\n flushInterval?: number;\r\n}\r\n\r\nexport interface EventData {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface EventTrackerInstance {\r\n init(config: EventTrackerConfig): Promise<string | null>;\r\n logEvent(eventType: string, eventData?: EventData): Promise<void>;\r\n closeTicket(): Promise<void>;\r\n isInitialized(): boolean;\r\n getConfig(): EventTrackerConfig | null;\r\n getTicketId(): string | null;\r\n flush(): Promise<void>;\r\n}\r\n\r\nclass EventTrackerSDK implements EventTrackerInstance {\r\n private config: EventTrackerConfig | null = null;\r\n private ticketId: string | null = null;\r\n private baseUrl: string = \"\";\r\n private eventQueue: Array<{\r\n eventType: string;\r\n eventData?: EventData;\r\n timestamp: number;\r\n }> = [];\r\n private isOnline: boolean = true;\r\n private retryQueue: Array<() => Promise<void>> = [];\r\n private flushTimer: ReturnType<typeof setInterval> | null = null;\r\n\r\n /**\r\n * Initialize the EventTracker SDK\r\n * @param config Configuration object\r\n */\r\n async init(config: EventTrackerConfig): Promise<string | null> {\r\n this.config = {\r\n autoTrack: true,\r\n retryAttempts: 3,\r\n queueSize: 100,\r\n flushInterval: 5000,\r\n ...config,\r\n };\r\n\r\n this.baseUrl =\r\n config.baseUrl ||\r\n (typeof window !== \"undefined\" ? window.location.origin : \"\");\r\n\r\n // Set up online/offline detection\r\n this.setupNetworkDetection();\r\n\r\n // Create ticket and set up auto-tracking\r\n const ticket = await this.createTicket();\r\n\r\n // Start periodic flush\r\n this.startPeriodicFlush();\r\n\r\n console.log(\"EventTracker SDK initialized successfully\");\r\n return ticket;\r\n }\r\n\r\n /**\r\n * Check if the SDK is initialized\r\n */\r\n isInitialized(): boolean {\r\n return this.config !== null && this.ticketId !== null;\r\n }\r\n\r\n /**\r\n * Get the current configuration\r\n */\r\n getConfig(): EventTrackerConfig | null {\r\n return this.config;\r\n }\r\n\r\n /**\r\n * Get the current ticket ID\r\n */\r\n getTicketId(): string | null {\r\n return this.ticketId;\r\n }\r\n\r\n /**\r\n * Create a new ticket\r\n */\r\n private async createTicket(): Promise<string | null> {\r\n if (!this.config) {\r\n throw new Error(\"EventTracker not initialized\");\r\n }\r\n\r\n try {\r\n const response = await this.makeRequest(\"/api/v1/et/init\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"X-API-Key\": this.config.apiKey,\r\n },\r\n body: JSON.stringify({\r\n agentId: this.config.agentId,\r\n sessionId: this.config.sessionId,\r\n }),\r\n });\r\n\r\n if (!response.ok) {\r\n sdkStateManager.setInitCheck();\r\n throw new Error(\r\n `Failed to initialize: ${response.status} ${response.statusText}`\r\n );\r\n }\r\n\r\n const data = await response.json();\r\n this.ticketId = data.ticketId;\r\n\r\n // Set up auto-tracking if enabled\r\n if (this.config.autoTrack) {\r\n this.setupAutoTracking();\r\n }\r\n return this.ticketId;\r\n } catch (error) {\r\n console.error(\"EventTracker initialization failed:\", error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Log an event\r\n * @param eventType The type of event\r\n * @param eventData Optional event data\r\n */\r\n async logEvent(eventType: string, eventData?: EventData): Promise<void> {\r\n if (!this.config || !this.ticketId) {\r\n console.warn(\"EventTracker not initialized, skipping event:\", eventType);\r\n return;\r\n }\r\n\r\n const event = {\r\n eventType,\r\n eventData,\r\n timestamp: Date.now(),\r\n };\r\n\r\n // Add to queue for offline support\r\n this.eventQueue.push(event);\r\n\r\n // Trim queue if too large\r\n if (this.eventQueue.length > (this.config.queueSize || 100)) {\r\n this.eventQueue.shift();\r\n }\r\n\r\n // Try to send immediately if online\r\n if (this.isOnline) {\r\n try {\r\n await this.sendEvent(event);\r\n } catch (error) {\r\n console.warn(\"Failed to send event, will retry later:\", error);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Send an event to the server\r\n */\r\n private async sendEvent(event: {\r\n eventType: string;\r\n eventData?: EventData;\r\n timestamp: number;\r\n }): Promise<void> {\r\n if (!this.config || !this.ticketId) return;\r\n\r\n try {\r\n const response = await this.makeRequest(\"/api/v1/et/event\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"X-API-Key\": this.config.apiKey,\r\n },\r\n body: JSON.stringify({\r\n ticketId: this.ticketId,\r\n eventType: event.eventType,\r\n eventData: event.eventData,\r\n }),\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(\r\n `Failed to log event: ${response.status} ${response.statusText}`\r\n );\r\n }\r\n\r\n // Remove from queue if successful\r\n const index = this.eventQueue.findIndex(\r\n (e) => e.timestamp === event.timestamp\r\n );\r\n if (index > -1) {\r\n this.eventQueue.splice(index, 1);\r\n }\r\n } catch (error) {\r\n console.error(\"Event logging failed:\", error);\r\n\r\n // Add to retry queue\r\n this.retryQueue.push(() => this.sendEvent(event));\r\n }\r\n }\r\n\r\n /**\r\n * Close the current ticket\r\n */\r\n async closeTicket(): Promise<void> {\r\n if (!this.config || !this.ticketId) {\r\n throw new Error(\"EventTracker not initialized\");\r\n }\r\n\r\n // Flush any pending events\r\n await this.flush();\r\n\r\n try {\r\n const response = await this.makeRequest(\"/api/v1/et/close\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"X-API-Key\": this.config.apiKey,\r\n },\r\n body: JSON.stringify({\r\n ticketId: this.ticketId,\r\n }),\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(\r\n `Failed to close ticket: ${response.status} ${response.statusText}`\r\n );\r\n }\r\n\r\n this.ticketId = null;\r\n this.stopPeriodicFlush();\r\n\r\n console.log(\"Ticket closed successfully\");\r\n } catch (error) {\r\n console.error(\"Ticket close failed:\", error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Flush all pending events\r\n */\r\n async flush(): Promise<void> {\r\n if (!this.isOnline || this.eventQueue.length === 0) return;\r\n\r\n const eventsToFlush = [...this.eventQueue];\r\n\r\n for (const event of eventsToFlush) {\r\n await this.sendEvent(event);\r\n }\r\n\r\n // Process retry queue\r\n const retryItems = [...this.retryQueue];\r\n this.retryQueue = [];\r\n\r\n for (const retryFn of retryItems) {\r\n try {\r\n await retryFn();\r\n } catch (error) {\r\n console.error(\"Retry failed:\", error);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Make an HTTP request with retry logic\r\n */\r\n private async makeRequest(\r\n url: string,\r\n options: RequestInit\r\n ): Promise<Response> {\r\n const fullUrl = `${this.baseUrl}${url}`;\r\n const maxRetries = this.config?.retryAttempts || 3;\r\n\r\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\r\n try {\r\n const response = await fetch(fullUrl, options);\r\n return response;\r\n } catch (error) {\r\n if (attempt === maxRetries) {\r\n throw error;\r\n }\r\n\r\n // Exponential backoff\r\n const delay = Math.min(1000 * Math.pow(2, attempt - 1), 10000);\r\n await new Promise((resolve) => setTimeout(resolve, delay));\r\n }\r\n }\r\n\r\n throw new Error(\"Max retries exceeded\");\r\n }\r\n\r\n /**\r\n * Set up automatic event tracking\r\n */\r\n private setupAutoTracking(): void {\r\n if (typeof window === \"undefined\" || !this.config?.autoTrack) return;\r\n\r\n const autoTrackConfig =\r\n this.config.autoTrack === true ? {} : this.config.autoTrack;\r\n\r\n // Track page visits\r\n if (autoTrackConfig.pageVisits !== false) {\r\n this.logEvent(\"pageVisit\", {\r\n url: window.location.href,\r\n title: document.title,\r\n referrer: document.referrer,\r\n userAgent: navigator.userAgent,\r\n viewport: {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n },\r\n timestamp: new Date().toISOString(),\r\n }).catch((error) => console.warn(\"Failed to track page visit:\", error));\r\n }\r\n\r\n // Track clicks on any clickable element\r\n if (autoTrackConfig.clicks !== false) {\r\n document.addEventListener(\"click\", (event) => {\r\n const target = event.target as HTMLElement | HTMLButtonElement;\r\n\r\n // Track all clickable elements\r\n if (\r\n target.tagName === \"BUTTON\" ||\r\n target.tagName === \"A\" ||\r\n target.onclick ||\r\n target.getAttribute(\"role\") === \"button\" ||\r\n (target instanceof HTMLButtonElement && target.type === \"button\")\r\n ) {\r\n this.logEvent(\"click\", {\r\n element: target.tagName,\r\n text: target.textContent?.trim().substring(0, 100), // Limit text length\r\n href: target.getAttribute(\"href\"),\r\n id: target.id,\r\n className: target.className,\r\n role: target.getAttribute(\"role\"),\r\n position: {\r\n x: event.clientX,\r\n y: event.clientY,\r\n },\r\n timestamp: new Date().toISOString(),\r\n }).catch((error) => console.warn(\"Failed to track click:\", error));\r\n }\r\n });\r\n }\r\n\r\n // Track form submissions\r\n if (autoTrackConfig.forms !== false) {\r\n document.addEventListener(\"submit\", (event) => {\r\n const target = event.target as HTMLFormElement;\r\n const formData = new FormData(target);\r\n const formFields: Record<string, string> = {};\r\n\r\n // Convert FormData to plain object\r\n formData.forEach((value, key) => {\r\n formFields[key] = value.toString();\r\n });\r\n\r\n this.logEvent(\"formSubmission\", {\r\n formId: target.id,\r\n action: target.action,\r\n method: target.method,\r\n fields: Object.keys(formFields),\r\n fieldCount: Object.keys(formFields).length,\r\n timestamp: new Date().toISOString(),\r\n }).catch((error) =>\r\n console.warn(\"Failed to track form submission:\", error)\r\n );\r\n });\r\n }\r\n\r\n // Track input changes (debounced)\r\n if (autoTrackConfig.inputs !== false) {\r\n let inputTimer: ReturnType<typeof setInterval>;\r\n document.addEventListener(\"input\", (event) => {\r\n const target = event.target as HTMLInputElement;\r\n if (\r\n target.tagName === \"INPUT\" ||\r\n target.tagName === \"TEXTAREA\" ||\r\n target.tagName === \"SELECT\"\r\n ) {\r\n clearTimeout(inputTimer);\r\n inputTimer = setTimeout(() => {\r\n this.logEvent(\"fieldChange\", {\r\n element: target.tagName,\r\n type: target.getAttribute(\"type\"),\r\n name: target.getAttribute(\"name\"),\r\n id: target.id,\r\n valueLength: target.value?.length || 0,\r\n timestamp: new Date().toISOString(),\r\n }).catch((error) =>\r\n console.warn(\"Failed to track field change:\", error)\r\n );\r\n }, 1000); // Debounce for 1 second\r\n }\r\n });\r\n }\r\n\r\n // Track page unload and session duration\r\n const sessionStartTime = Date.now();\r\n window.addEventListener(\"beforeunload\", () => {\r\n const sessionDuration = Date.now() - sessionStartTime;\r\n\r\n this.logEvent(\"pageUnload\", {\r\n url: window.location.href,\r\n sessionDuration: sessionDuration,\r\n timestamp: new Date().toISOString(),\r\n });\r\n\r\n // Close ticket synchronously\r\n if (this.ticketId) {\r\n navigator.sendBeacon(\r\n `${this.baseUrl}/api/v1/et/close`,\r\n JSON.stringify({\r\n ticketId: this.ticketId,\r\n })\r\n );\r\n }\r\n });\r\n\r\n // Track visibility changes\r\n if (autoTrackConfig.visibility !== false) {\r\n document.addEventListener(\"visibilitychange\", () => {\r\n this.logEvent(\"visibilityChange\", {\r\n hidden: document.hidden,\r\n visibilityState: document.visibilityState,\r\n timestamp: new Date().toISOString(),\r\n });\r\n });\r\n }\r\n\r\n // Track errors\r\n if (autoTrackConfig.errors !== false) {\r\n window.addEventListener(\"error\", (event) => {\r\n this.logEvent(\"jsError\", {\r\n message: event.message,\r\n filename: event.filename,\r\n lineno: event.lineno,\r\n colno: event.colno,\r\n timestamp: new Date().toISOString(),\r\n });\r\n });\r\n\r\n // Track unhandled promise rejections\r\n window.addEventListener(\"unhandledrejection\", (event) => {\r\n this.logEvent(\"unhandledRejection\", {\r\n reason: event.reason?.toString(),\r\n timestamp: new Date().toISOString(),\r\n });\r\n });\r\n }\r\n\r\n // Track performance metrics (if available)\r\n if (\r\n autoTrackConfig.performance !== false &&\r\n typeof window.performance !== \"undefined\" &&\r\n window.performance.navigation\r\n ) {\r\n window.addEventListener(\"load\", () => {\r\n setTimeout(() => {\r\n const navigation = window.performance.navigation;\r\n const timing = window.performance.timing;\r\n\r\n this.logEvent(\"performanceMetrics\", {\r\n navigationTime: timing.navigationStart,\r\n loadTime: timing.loadEventEnd - timing.navigationStart,\r\n domReady: timing.domContentLoadedEventEnd - timing.navigationStart,\r\n renderTime: timing.loadEventEnd - timing.domContentLoadedEventEnd,\r\n navigationType: navigation.type,\r\n redirectCount: navigation.redirectCount,\r\n timestamp: new Date().toISOString(),\r\n });\r\n }, 1000);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Set up network detection\r\n */\r\n private setupNetworkDetection(): void {\r\n if (typeof window === \"undefined\") return;\r\n\r\n this.isOnline = navigator.onLine;\r\n\r\n window.addEventListener(\"online\", () => {\r\n this.isOnline = true;\r\n console.log(\"EventTracker: Back online, flushing queued events\");\r\n this.flush();\r\n });\r\n\r\n window.addEventListener(\"offline\", () => {\r\n this.isOnline = false;\r\n console.log(\"EventTracker: Offline, queueing events\");\r\n });\r\n }\r\n\r\n /**\r\n * Start periodic flush timer\r\n */\r\n private startPeriodicFlush(): void {\r\n if (this.flushTimer) {\r\n clearInterval(this.flushTimer);\r\n }\r\n\r\n const interval = this.config?.flushInterval || 5000;\r\n this.flushTimer = setInterval(() => {\r\n this.flush();\r\n }, interval);\r\n }\r\n\r\n /**\r\n * Stop periodic flush timer\r\n */\r\n private stopPeriodicFlush(): void {\r\n if (this.flushTimer) {\r\n clearInterval(this.flushTimer);\r\n this.flushTimer = null;\r\n }\r\n }\r\n}\r\n\r\n// Create singleton instance\r\nexport const eventTracker = new EventTrackerSDK();\r\n\r\n// Also export for direct use in browsers\r\nif (typeof window !== \"undefined\") {\r\n (window as any).EventTracker = eventTracker;\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\n// Types for logout functionality\r\nexport interface LogoutPayload {\r\n action: string;\r\n userId: string;\r\n}\r\n\r\n/**\r\n * Custom hook for handling agent logout functionality\r\n * @param options - Optional callbacks for success, error, and completion\r\n * @returns Object containing logout function and loading state\r\n */\r\nconst useLogout = () => {\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(null);\r\n const [data, setData] = useState(null);\r\n\r\n /**\r\n * Handles logout with current agent data\r\n * @param agentData - Object containing agent information\r\n */\r\n\r\n const handleLogout = useCallback(async () => {\r\n const state = JSON.parse(\r\n localStorage.getItem(\"call-control-sdk-state\") ?? \"\"\r\n );\r\n setLoading(true);\r\n const payload: LogoutPayload = {\r\n action: \"LOGOUTUSER\",\r\n userId: state.agentId || \"\",\r\n };\r\n\r\n return axiosInstance\r\n .post(END_POINT.LOGOUT, payload)\r\n .then((res) => {\r\n sdkStateManager.clearStorageAndReset();\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n setData(res?.data);\r\n setSuccess(true);\r\n return res?.data;\r\n })\r\n .catch((err) => {\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 return {\r\n logout: handleLogout,\r\n isLoading: loading,\r\n isSuccess: success,\r\n isError: isError,\r\n error: error,\r\n data: data,\r\n };\r\n};\r\n\r\nexport default useLogout;\r\n","export const IP = \"10.10.102.42\";\r\nexport const BASE_URL = `http://${IP}:8095`;\r\nexport const WS_BASE_URL = `ws://${IP}:8095`;\r\nexport const VERSION = {\r\n v1: \"/api/v1\",\r\n};\r\n\r\nexport const END_POINT = {\r\n LOGIN: `${BASE_URL}${VERSION.v1}/cti/login?provider=convox`,\r\n READY_AGENT: `${BASE_URL}${VERSION.v1}/cti/ready-agent?provider=convox`,\r\n UPDATE_AGENT_BREAK: `${BASE_URL}${VERSION.v1}/cti/update-agent-status?provider=convox`,\r\n CLICK_TO_CALL: `${BASE_URL}${VERSION.v1}/cti/calls?provider=convox`,\r\n HOLD_CALL: `${BASE_URL}${VERSION.v1}/cti/calls/hold?provider=convox`,\r\n MUTE_CALL: `${BASE_URL}${VERSION.v1}/cti/calls/mute?provider=convox`,\r\n UNMUTE_CALL: `${BASE_URL}${VERSION.v1}/cti/unmute-call?provider=convox`,\r\n END_CALL: `${BASE_URL}${VERSION.v1}/cti/calls/end?provider=convox`,\r\n LOGOUT: `${BASE_URL}${VERSION.v1}/cti/logout?provider=convox`,\r\n\r\n CONFERENCE_CALL: `${BASE_URL}${VERSION.v1}/cti/calls/conference?provider=convox`,\r\n CONFERENCE_CALL_HOLD_OR_UN_HOLD: `${BASE_URL}${VERSION.v1}/cti/calls/conference/hold?provider=convox`,\r\n CONFERENCE_CALL_MUTE_OT_UN_MUTE: `${BASE_URL}${VERSION.v1}/cti/calls/conference/mute?provider=convox`,\r\n CONFERENCE_CALL_END: `${BASE_URL}${VERSION.v1}/cti/calls/conference/hangup?provider=convox`,\r\n CONFERENCE_CALL_END_ALL: `${BASE_URL}${VERSION.v1}/cti/calls/conference/hangup/all?provider=convox`,\r\n TRANSFER_CALL: `${BASE_URL}${VERSION.v1}/cti/calls/transfer?provider=convox`,\r\n\r\n AGENTS_LIST: `${BASE_URL}${VERSION.v1}/cti/users`,\r\n PROCESS_LIST: `${BASE_URL}${VERSION.v1}/cti/processes-list`,\r\n TRANSFER_TO_DETAILS: `${BASE_URL}${VERSION.v1}/cti/transfer-to-details?provider=convox`,\r\n\r\n CALL_HISTORY: `${BASE_URL}${VERSION.v1}/dashboard/call-history`,\r\n SENTIMENTAL_ANALYSIS: `${BASE_URL}${VERSION.v1}/users/get_sentiment_analysis`,\r\n};\r\n\r\nexport const WS_END_POINT = {\r\n WS: `${WS_BASE_URL}${VERSION.v1}/cti/ws`,\r\n};\r\n","import axios from \"axios\"; // Axios HTTP client for API communication\r\nimport { BASE_URL } from \"./endPoint\";\r\n\r\n/**\r\n * @here Reads the stored authentication token.\r\n * @description Used to set the initial Authorization header for the axios instance.\r\n */\r\nconst token = \"12345\";\r\n\r\n/**\r\n * @here Creates a configured Axios instance.\r\n * @description Sets base URL, headers, and timeout for all outgoing HTTP requests.\r\n */\r\n\r\n/**\r\n * @author Achala IT Solutions\r\n * @here Declares an Axios HTTP client instance with global configuration.\r\n * @description Configures default headers, timeout, and interceptors for handling request/response behavior globally.\r\n * @params\r\n * - None (but uses token from local storage)\r\n * @example\r\n * import axiosInstance from \"@/lib/axios\";\r\n * axiosInstance.get(\"/endpoint\").then(...).catch(...);\r\n * @returns A customized Axios instance with built-in interceptors and token management.\r\n */\r\n\r\nconst axiosInstance = axios.create({\r\n baseURL: BASE_URL, // Base URL from Vite environment variables\r\n headers: {\r\n \"Content-Type\": \"application/json\", // Default content type for requests\r\n Authorization: token, // Attach token if available (as raw, without Bearer prefix)\r\n },\r\n timeout: 60000, // Request timeout in milliseconds (60 seconds)\r\n});\r\n\r\n/**\r\n * @here Adds a request interceptor to inject Bearer token.\r\n * @description Ensures Authorization header is up-to-date with the latest token before every request.\r\n * @params\r\n * - config: Axios request configuration object.\r\n * @returns The modified request config with updated headers.\r\n */\r\naxiosInstance.interceptors.request.use(\r\n (config) => {\r\n const token = \"12345\"; // Re-fetch token before request\r\n if (token && config.headers) {\r\n config.headers.Authorization = `Bearer ${token}`; // Set Authorization header\r\n }\r\n return config; // Proceed with modified config\r\n },\r\n /**\r\n * @here Handles request errors.\r\n * @description Converts unknown request error types into standardized JavaScript Error.\r\n */\r\n (error) =>\r\n Promise.reject(error instanceof Error ? error : new Error(String(error)))\r\n);\r\n\r\n/**\r\n * @here Adds a response interceptor to handle error responses.\r\n * @description Captures 401 Unauthorized errors and optionally retries the request.\r\n * @params\r\n * - error: Axios response error object.\r\n * @returns The original error or a retry attempt if applicable.\r\n */\r\naxiosInstance.interceptors.response.use(\r\n (response) => response, // Pass through successful response\r\n async (error) => {\r\n const originalRequest = error.config;\r\n\r\n // Retry logic for unauthorized requests (once only)\r\n if (error.response?.status === 401 && !originalRequest._retry) {\r\n originalRequest._retry = true;\r\n // Optional: trigger refresh logic or logout here\r\n }\r\n\r\n // Normalize error format\r\n return Promise.reject(\r\n error instanceof Error ? error : new Error(String(error))\r\n );\r\n }\r\n);\r\n\r\n/**\r\n * @here Exports the configured Axios instance.\r\n * @description Makes the client available throughout the app via a single import.\r\n */\r\nexport default axiosInstance;\r\n","import { useCallback, useState } from \"react\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\nexport interface EndCallPayload {\r\n action: string;\r\n disposition: string;\r\n userId: string;\r\n processid: string;\r\n mobile_number: string;\r\n set_followUp: string;\r\n callback_date: string;\r\n callback_hrs: string;\r\n callback_mins: string;\r\n refno?: string;\r\n}\r\n\r\n/**\r\n * Custom hook for handling end call functionality\r\n * @param options - Optional callbacks for success, error, and completion\r\n * @returns Object containing logout function and loading state\r\n */\r\n\r\nexport const useEndCall = () => {\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(null);\r\n const [data, setData] = useState(null);\r\n\r\n /**\r\n * Handles call end with current agent call\r\n * @param data - Object containing call disposition information\r\n */\r\n\r\n const handleEndCall = useCallback(\r\n async (data: {\r\n disposition?: string;\r\n followUp?: string;\r\n callbackDate?: string;\r\n callbackHrs?: string;\r\n callbackMins?: string;\r\n }) => {\r\n const state = JSON.parse(\r\n localStorage.getItem(\"call-control-sdk-state\") ?? \"\"\r\n );\r\n setLoading(true);\r\n const payload = {\r\n action: \"ENDCALL\",\r\n userId: state?.agentId,\r\n processid: state?.process?.process_id?.toString() ?? \"\",\r\n process_name: state?.process?.process_name ?? \"\",\r\n callreferenceid: state?.callData?.convox_id ?? \"\",\r\n mobile_number: state?.callData?.phone_number ?? \"\",\r\n\r\n disposition: data?.disposition ?? \"RES\",\r\n set_followUp: data?.followUp ?? \"N\",\r\n callback_date: data?.callbackDate ?? \"\",\r\n callback_hrs: data?.callbackHrs ?? \"\",\r\n callback_mins: data?.callbackMins ?? \"\",\r\n endcall_type: \"CLOSE\",\r\n };\r\n\r\n return axiosInstance\r\n .post(END_POINT.END_CALL, payload)\r\n .then((res) => {\r\n sdkStateManager.endCall();\r\n setData(res?.data);\r\n setSuccess(true);\r\n return res?.data;\r\n })\r\n .catch((err) => {\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 handleEndCall,\r\n isLoading: loading,\r\n isSuccess: success,\r\n isError: isError,\r\n error: error,\r\n data: data,\r\n };\r\n};\r\n","import { useCallback, useState } from \"react\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nexport interface StartCallPayload {\r\n mobileNumber: string;\r\n}\r\n\r\n/**\r\n * Custom hook for handling end call functionality\r\n * @param options - Optional callbacks for success, error, and completion\r\n * @returns Object containing logout function and loading state\r\n * @example\r\n * handleStartCall({ mobileNumber: \"1111111111\" });\r\n */\r\n\r\nexport const useClickToCall = () => {\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(null);\r\n const [data, setData] = useState(null);\r\n\r\n /**\r\n * Handles call end with current agent call\r\n * @param mobileNumber - strng\r\n * @example\r\n * handleStartCall({ mobileNumber: \"1111111111\" });\r\n */\r\n\r\n const handleStartCall = useCallback(async (data: StartCallPayload) => {\r\n const state = JSON.parse(\r\n localStorage.getItem(\"call-control-sdk-state\") ?? \"\"\r\n );\r\n setLoading(true);\r\n\r\n if (state?.callData?.status === \"IDLE\") {\r\n const payload = {\r\n action: \"CALL\",\r\n userId: state?.agentId,\r\n phone_number: data?.mobileNumber,\r\n };\r\n\r\n return axiosInstance\r\n .post(END_POINT.CLICK_TO_CALL, payload)\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 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 } else if (state?.callData?.status === \"ONCALL\") {\r\n const line_used = state?.conferenceLine\r\n ?.filter((each: any) => each.line !== 1)\r\n ?.find((each: any) => each.status === \"IDLE\" && !each?.isCallStart);\r\n const payload = {\r\n action: \"EXTERNAL_CONFERENCE\",\r\n operation: `CALL${line_used.line}`,\r\n line_used: String(line_used.line),\r\n thirdparty_no: data?.mobileNumber,\r\n userid: state.callData?.agent_id ?? \"\",\r\n process: state.callData?.process_name ?? \"\",\r\n };\r\n return axiosInstance\r\n .post(END_POINT.CONFERENCE_CALL, payload)\r\n .then((res) => {\r\n setData(res?.data);\r\n setSuccess(true);\r\n sdkStateManager.setConferenceLine({\r\n ...line_used,\r\n isCallStart: true,\r\n status: \"ONCALL\",\r\n phone: data?.mobileNumber,\r\n });\r\n sdkStateManager.setOpenConferenceDialog(true);\r\n return res?.data;\r\n })\r\n .catch((err) => {\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 } else {\r\n alert(\"Agent is not ready\");\r\n }\r\n }, []);\r\n\r\n return {\r\n handleStartCall,\r\n isLoading: loading,\r\n isSuccess: success,\r\n isError: isError,\r\n error: error,\r\n data: data,\r\n };\r\n};\r\n","import {\r\n CallEnd,\r\n Close,\r\n DragIndicator,\r\n Group,\r\n KeyboardArrowDown,\r\n Layers,\r\n Mic,\r\n MicOff,\r\n Pause,\r\n Pending,\r\n Phone,\r\n PlayArrow,\r\n SupportAgent,\r\n TransferWithinAStation,\r\n Upcoming,\r\n WifiCalling3,\r\n} from \"@mui/icons-material\";\r\nimport {\r\n Box,\r\n Button,\r\n Chip,\r\n CircularProgress,\r\n Fade,\r\n IconButton,\r\n Menu,\r\n MenuItem,\r\n Paper,\r\n TextField,\r\n Tooltip,\r\n Typography,\r\n useTheme,\r\n} from \"@mui/material\";\r\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\r\n\r\nimport type { CallControlPanelProps } from \"../../types\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\nimport { useDraggable } from \"../hooks/useDraggable\";\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\nimport { END_POINT, IP, WS_END_POINT } from \"../services/endPoint\";\r\nimport { usePostRequest } from \"../services/request\";\r\n\r\nimport {\r\n CallHistoryDialog,\r\n CallTransferDialog,\r\n ConferenceDialog,\r\n EndCallDispositionDialog,\r\n ProcessorListDialog,\r\n} from \"./dialog\";\r\nimport useStyles from \"./styles\";\r\nimport axiosInstance from \"../services/axios\";\r\nimport { useToast } from \"../services/toastMessage\";\r\n\r\nexport function CallControls({ onDataChange }: CallControlPanelProps) {\r\n const theme = useTheme();\r\n const state = useSDKState();\r\n const { showToast } = useToast();\r\n const { disabled, enabled, outlined } = useStyles({\r\n disabled: state.sdkConfig?.disabled || {},\r\n enabled: state.sdkConfig?.enabled || {},\r\n outlined: state.sdkConfig?.outlined || {},\r\n });\r\n\r\n const webSocketRef = useRef<WebSocket | null>(null);\r\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n const [showIframe, setShowIframe] = useState<boolean>(true);\r\n const [statusAnchorEl, setStatusAnchorEl] = useState<null | HTMLElement>(\r\n null\r\n );\r\n const [dialerAnchorEl, setDialerAnchorEl] = useState<null | HTMLElement>(\r\n null\r\n );\r\n const [openCallDisposition, setOpenCallDisposition] = useState(false);\r\n const [openProcessorDialog, setOpenProcessorDialog] = useState(false);\r\n const [openCallHistoryDialog, setOpenCallHistoryDialog] = useState(false);\r\n const [processList, setProcessList] = useState(null);\r\n const [phoneNumber, setPhoneNumber] = useState<string>(\"\");\r\n const [callDuration, setCallDuration] = useState(0);\r\n\r\n const { position, isDragging, dragRef, handleMouseDown, handleTouchStart } =\r\n useDraggable(state.controlPanelPosition, (newPosition) =>\r\n sdkStateManager.setControlPanelPosition(newPosition)\r\n );\r\n\r\n const {\r\n position: iframePosition,\r\n isDragging: iframeIsDragging,\r\n dragRef: iframeDragRef,\r\n handleMouseDown: iframeHandleMouseDown,\r\n handleTouchStart: iframeHandleTouchStart,\r\n } = useDraggable(state.iframePosition, (newPosition) =>\r\n sdkStateManager.setIframePosition(newPosition)\r\n );\r\n\r\n // const [getProcessList, { data: processList }] = usePostRequest<any>({\r\n // \tonSuccess: (res: any) => {\r\n // \t\tconsole.log(\"res\", res);\r\n // \t\tif (res && res.data && res?.data?.length > 1) {\r\n // \t\t\tsetOpenProcessorDialog(true);\r\n // \t\t} else {\r\n // \t\t\tsdkStateManager.setProcess(res?.data[0]);\r\n // \t\t\tsetOpenProcessorDialog(false);\r\n // \t\t}\r\n // \t},\r\n // \tonError: () => {\r\n // \t\tsetOpenProcessorDialog(false);\r\n // \t},\r\n // });\r\n\r\n const [clickToCall, { isLoading: clickToCallLoading }] = usePostRequest<{\r\n action: string;\r\n phone_number: string;\r\n userId: string;\r\n }>({\r\n onSuccess: () => {\r\n setPhoneNumber(\"\");\r\n setDialerAnchorEl(null);\r\n },\r\n });\r\n\r\n const [holdOrUnHold, { isLoading: holdOrUnHoldLoading }] = usePostRequest<{\r\n action: string;\r\n userId: string;\r\n refno?: string;\r\n }>({\r\n onSuccess: () => {\r\n sdkStateManager.setHolding(!state.isHolding);\r\n },\r\n onError: (error) => {\r\n console.log(\"error\", error);\r\n },\r\n });\r\n\r\n const [muteOrUnMute, { isLoading: muteOrUnMuteLoading }] = usePostRequest<{\r\n action: string;\r\n userId: string;\r\n refno?: string;\r\n }>({\r\n onSuccess: () => {\r\n sdkStateManager.setMuted(!state.isMuted);\r\n },\r\n onError: (error) => {\r\n console.log(\"error\", error);\r\n },\r\n });\r\n\r\n const [readyAgentStatus, { isLoading: agentReadyLoading }] = usePostRequest<{\r\n action: string;\r\n refno?: string;\r\n userId: string;\r\n }>();\r\n\r\n const [updateAgentStatus, { isLoading }] = usePostRequest<{\r\n action: string;\r\n break_type: string;\r\n userId: string;\r\n }>();\r\n\r\n const [endCall, { isLoading: endCallLoading }] = usePostRequest<{\r\n action: string;\r\n disposition: string;\r\n userId: string;\r\n processid: string;\r\n mobile_number: string;\r\n set_followUp: string;\r\n callback_date: string;\r\n callback_hrs: string;\r\n callback_mins: string;\r\n refno?: string;\r\n }>();\r\n\r\n const formatDuration = useCallback((seconds: number): string => {\r\n const mins = Math.floor(seconds / 60);\r\n const secs = seconds % 60;\r\n return `${mins.toString().padStart(2, \"0\")}:${secs.toString().padStart(2, \"0\")}`;\r\n }, []);\r\n\r\n const handleCloseQueueCounts = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleOpenDialer = (event: React.MouseEvent<HTMLElement>) => {\r\n setShowIframe(true);\r\n setDialerAnchorEl(event.currentTarget);\r\n sdkStateManager.setStatus(\"dial\");\r\n };\r\n\r\n const handleCloseDialer = () => {\r\n if (state.status !== \"on call\") {\r\n sdkStateManager.setStatus(\"idle\");\r\n }\r\n\r\n setDialerAnchorEl(null);\r\n };\r\n\r\n const handleOpenAgentStatus = (event: React.MouseEvent<HTMLElement>) => {\r\n setStatusAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleCloseAgentStatus = () => {\r\n setStatusAnchorEl(null);\r\n };\r\n\r\n // // call control API's // //\r\n //------------------------------//\r\n\r\n const handleAgentReady = () => {\r\n const payload = {\r\n action: \"READYAGENT\",\r\n userId: state.agentId,\r\n };\r\n readyAgentStatus(END_POINT.READY_AGENT, payload);\r\n };\r\n\r\n const handleUpdateAgentStatus = (status: string) => {\r\n setStatusAnchorEl(null);\r\n const payload = {\r\n action: \"AGENTBREAK\",\r\n break_type: status,\r\n userId: state.agentId,\r\n };\r\n updateAgentStatus(END_POINT.UPDATE_AGENT_BREAK, payload);\r\n };\r\n\r\n const handleStartCall = (number: string) => {\r\n if (number.length !== 10) {\r\n alert(\"Invalid phone number\");\r\n } else if (!/^\\d+$/.test(number)) {\r\n } else {\r\n const payload = {\r\n action: \"CALL\",\r\n phone_number: number,\r\n userId: state.agentId,\r\n };\r\n clickToCall(END_POINT.CLICK_TO_CALL, payload);\r\n }\r\n };\r\n\r\n const handleHoldToggle = () => {\r\n const payload = {\r\n action: state.isHolding ? \"UNHOLD\" : \"HOLD\",\r\n userId: state.agentId,\r\n };\r\n holdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n };\r\n\r\n const handleMuteToggle = () => {\r\n const payload = {\r\n action: state.isMuted ? \"UNMUTE\" : \"MUTE\",\r\n userId: state.agentId,\r\n };\r\n\r\n muteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n };\r\n\r\n const handleEndCall = (data: {\r\n disposition: { label: string; value: string };\r\n followUp: { label: string; value: string };\r\n callbackDate: string;\r\n callbackHrs: string;\r\n callbackMins: string;\r\n }) => {\r\n console.log(\"data\", data);\r\n const payload = {\r\n action: \"ENDCALL\",\r\n userId: state.agentId,\r\n processid: state.process?.process_id?.toString() ?? \"\",\r\n process_name: state.process?.process_name ?? \"\",\r\n callreferenceid: state.callData?.convox_id ?? \"\",\r\n mobile_number: state.callData?.phone_number ?? \"\",\r\n\r\n disposition: data?.disposition?.value ?? \"\",\r\n set_followUp: data?.followUp?.value ?? \"\",\r\n callback_date: data?.callbackDate ?? \"\",\r\n callback_hrs: data?.callbackHrs ?? \"\",\r\n callback_mins: data?.callbackMins ?? \"\",\r\n endcall_type: \"CLOSE\",\r\n };\r\n setPhoneNumber(\"\");\r\n endCall(END_POINT.END_CALL, payload);\r\n sdkStateManager.endCall();\r\n setOpenCallDisposition(false);\r\n };\r\n\r\n useEffect(() => {\r\n const handleBeforeUnload = (e: BeforeUnloadEvent) => {\r\n e.preventDefault();\r\n };\r\n\r\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\r\n\r\n return () => {\r\n window.removeEventListener(\"beforeunload\", handleBeforeUnload);\r\n };\r\n }, []);\r\n\r\n // Call duration timer\r\n useEffect(() => {\r\n let interval: ReturnType<typeof setInterval>;\r\n\r\n if (state.callData.status && state.callData.status === \"ONCALL\") {\r\n interval = setInterval(() => {\r\n const elapsed = Math.floor((Date.now() - state.callStartTime!) / 1000);\r\n setCallDuration(elapsed);\r\n }, 1000);\r\n } else {\r\n setCallDuration(0);\r\n }\r\n\r\n return () => {\r\n if (interval) clearInterval(interval);\r\n };\r\n }, [state.callData.status]);\r\n\r\n // Notify parent of data changes\r\n useEffect(() => {\r\n if (onDataChange) {\r\n onDataChange(state.callData);\r\n }\r\n }, [state.callData, onDataChange]);\r\n\r\n useEffect(() => {\r\n if (state.agentId) {\r\n axiosInstance\r\n .post(END_POINT.PROCESS_LIST, {\r\n userId: state.agentId,\r\n action: \"GETAGENTPROCESSLIST\",\r\n refno: \"1234221233\",\r\n })\r\n .then((res) => {\r\n console.log(res.data.data, \"res4\");\r\n if (res && res.data && res?.data?.length > 1) {\r\n setProcessList(res.data.data);\r\n setOpenProcessorDialog(true);\r\n } else {\r\n sdkStateManager.setProcess(res?.data?.data[0]);\r\n setOpenProcessorDialog(false);\r\n }\r\n })\r\n .catch((err) => {\r\n showToast(err.response.data.message, \"error\");\r\n });\r\n } else {\r\n console.log(\"No agentId available, skipping API call\");\r\n }\r\n }, [state.agentId]);\r\n\r\n useEffect(() => {\r\n if (state.agentId) {\r\n webSocketRef.current = new WebSocket(\r\n `${WS_END_POINT.WS}?agent_id=${state.agentId}`\r\n );\r\n\r\n webSocketRef.current.onopen = () => {\r\n console.log(\"WebSocket connection established\");\r\n };\r\n\r\n webSocketRef.current.onmessage = (event) => {\r\n try {\r\n const data = JSON.parse(event.data);\r\n console.log(\"parsedJSON:\", data);\r\n sdkStateManager.updateCallData(data);\r\n if (data.status === \"ONCALL\") {\r\n sdkStateManager.startCall();\r\n if (!showIframe) {\r\n setShowIframe(true);\r\n }\r\n }\r\n if (data.status === \"WRAPUP\") {\r\n sdkStateManager.endCall();\r\n }\r\n } catch {\r\n console.log(\"Raw message:\", event.data);\r\n }\r\n };\r\n\r\n webSocketRef.current.onclose = () => {\r\n console.log(\"WebSocket connection closed\");\r\n };\r\n\r\n webSocketRef.current.onerror = (error) => {\r\n console.error(\"WebSocket error:\", error);\r\n };\r\n }\r\n\r\n return () => {\r\n webSocketRef.current?.close();\r\n };\r\n }, [state.agentId]);\r\n\r\n if (!state.isInitialized || !state.process) {\r\n return (\r\n <Box>\r\n {/* Processor List Dialog */}\r\n {Boolean(openProcessorDialog) && (\r\n <ProcessorListDialog\r\n processList={processList}\r\n open={openProcessorDialog}\r\n setOpen={setOpenProcessorDialog}\r\n handleSelectedProcessor={(data: {\r\n process_id: number;\r\n process_name: string;\r\n }) => {\r\n sdkStateManager.setProcess(data);\r\n }}\r\n />\r\n )}\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <Box>\r\n <Fade in={true} timeout={300}>\r\n <Paper\r\n ref={state.sdkConfig?.enableFloatingDrag ? dragRef : null}\r\n elevation={\r\n isDragging ? 4 : state.sdkConfig?.enableFloatingDrag ? 1 : 0\r\n }\r\n sx={{\r\n position: state.sdkConfig?.enableFloatingDrag\r\n ? \"fixed\"\r\n : \"relative\",\r\n left: state.sdkConfig?.enableFloatingDrag ? position.x : \"auto\",\r\n top: state.sdkConfig?.enableFloatingDrag ? position.y : \"auto\",\r\n display: \"inline-block\",\r\n width: \"auto\",\r\n flexShrink: 0,\r\n whiteSpace: \"nowrap\",\r\n p: 0.5,\r\n borderRadius: 3,\r\n bgcolor: \"background.paper\",\r\n zIndex: state.sdkConfig?.enableFloatingDrag\r\n ? Number.MAX_SAFE_INTEGER\r\n : 0,\r\n transition: theme.transitions.create(\r\n [\"box-shadow\", \"transform\"],\r\n {\r\n duration: theme.transitions.duration.short,\r\n }\r\n ),\r\n userSelect: \"none\",\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n {/* Status and Timer Row */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n // backgroundColor: \"red\",\r\n gap: 1,\r\n margin: \"0px 10px\",\r\n }}\r\n // m={1}\r\n >\r\n {state.sdkConfig?.enableFloatingDrag && (\r\n <IconButton\r\n component=\"div\"\r\n size=\"small\"\r\n sx={{\r\n cursor: \"all-scroll\",\r\n }}\r\n onMouseDown={handleMouseDown}\r\n onTouchStart={handleTouchStart}\r\n >\r\n <DragIndicator />{\" \"}\r\n </IconButton>\r\n )}\r\n\r\n <Box\r\n sx={\r\n {\r\n // marginRight: \"10px\",\r\n // backgroundColor: \"blue\",\r\n }\r\n }\r\n >\r\n {/* Dial Button */}\r\n <Tooltip title=\"Dial\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={(e) => {\r\n if (\r\n state.callData?.status?.toUpperCase() !== \"ONCALL\" &&\r\n state.callData?.status?.toUpperCase() !== \"BREAK\" &&\r\n state.callData?.status?.toUpperCase() !== \"RINGING\" &&\r\n state.callData?.status?.toUpperCase() !== \"WRAPUP\"\r\n ) {\r\n handleOpenDialer(e);\r\n }\r\n }}\r\n sx={{\r\n bgcolor: \"action.hover\",\r\n \"&:hover\": {\r\n bgcolor: \"warning\",\r\n },\r\n }}\r\n >\r\n <WifiCalling3\r\n sx={{\r\n color:\r\n state.callData?.status?.toUpperCase() ===\r\n \"ONCALL\" ||\r\n state.callData?.status?.toUpperCase() === \"BREAK\" ||\r\n state.callData?.status?.toUpperCase() ===\r\n \"RINGING\" ||\r\n state.callData?.status?.toUpperCase() === \"WRAPUP\"\r\n ? \"action.selected\"\r\n : \"success.main\",\r\n }}\r\n />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n {/* Call Duration */}\r\n <Typography\r\n sx={{\r\n color: \"success.main\",\r\n width: \"40px\",\r\n marginRight: \"10px\",\r\n fontSize: \"18px\",\r\n fontWeight: \"600\",\r\n }}\r\n >\r\n {formatDuration(callDuration)}\r\n </Typography>\r\n\r\n <Chip\r\n sx={{\r\n padding: \"18px 0px\",\r\n }}\r\n label={\r\n isLoading || agentReadyLoading ? (\r\n <Box\r\n sx={{\r\n fontWeight: \"bold\",\r\n width: \"60px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <CircularProgress size=\"20px\" />\r\n </Box>\r\n ) : (\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n fontWeight: \"bold\",\r\n width: \"60px\",\r\n textAlign: \"center\",\r\n }}\r\n >\r\n {state.callData?.status?.toUpperCase() ?? \"N/A\"}\r\n </Typography>\r\n )\r\n }\r\n onClick={handleOpenAgentStatus}\r\n deleteIcon={<KeyboardArrowDown color=\"primary\" />}\r\n onDelete={handleOpenAgentStatus}\r\n />\r\n </Box>\r\n\r\n {/* Control Buttons */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n gap: 1,\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n {/* Agent Ready */}\r\n <Tooltip title={\"Agent Ready\"}>\r\n <Button\r\n variant={\r\n state.callData?.status?.toUpperCase() === \"BREAK\" ||\r\n state.callData?.status?.toUpperCase() === \"MISSED\"\r\n ? \"outlined\"\r\n : \"contained\"\r\n }\r\n onClick={(e) => {\r\n if (\r\n state.callData?.status?.toUpperCase() === \"BREAK\" ||\r\n state.callData?.status?.toUpperCase() === \"MISSED\"\r\n ) {\r\n e.stopPropagation();\r\n handleAgentReady();\r\n }\r\n }}\r\n classes={{\r\n root:\r\n state.callData?.status?.toUpperCase() === \"BREAK\" ||\r\n state.callData?.status?.toUpperCase() === \"MISSED\"\r\n ? \"outlined\"\r\n : \"enabled\",\r\n }}\r\n sx={{\r\n ...(state.callData?.status?.toUpperCase() === \"BREAK\" ||\r\n state.callData?.status?.toUpperCase() === \"MISSED\"\r\n ? outlined\r\n : enabled),\r\n }}\r\n disabled={agentReadyLoading}\r\n >\r\n <SupportAgent />\r\n </Button>\r\n </Tooltip>\r\n\r\n {/* Hold Button */}\r\n\r\n <Tooltip title={state.isHolding ? \"Resume\" : \"Hold\"}>\r\n <Button\r\n variant={\r\n state.isHolding &&\r\n state.callData?.status?.toUpperCase() === \"ONCALL\"\r\n ? \"contained\"\r\n : \"outlined\"\r\n }\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleHoldToggle();\r\n }}\r\n sx={\r\n state.isHolding &&\r\n state.callData?.status?.toUpperCase() === \"ONCALL\"\r\n ? { ...enabled }\r\n : state.callData?.status?.toUpperCase() === \"ONCALL\"\r\n ? { ...outlined }\r\n : { ...disabled }\r\n }\r\n disabled={\r\n (state.callData?.status?.toUpperCase() !== \"ONCALL\" &&\r\n !state.isHolding) ||\r\n holdOrUnHoldLoading\r\n }\r\n >\r\n {holdOrUnHoldLoading ? (\r\n <CircularProgress\r\n size=\"20px\"\r\n sx={{\r\n color: theme.palette.primary.main,\r\n }}\r\n />\r\n ) : state.isHolding ? (\r\n <PlayArrow />\r\n ) : (\r\n <Pause />\r\n )}\r\n </Button>\r\n </Tooltip>\r\n\r\n {/* Mute Button */}\r\n\r\n <Tooltip title={state.isMuted ? \"Unmute\" : \"Mute\"}>\r\n <Button\r\n variant={\r\n state.isMuted &&\r\n state.callData?.status?.toUpperCase() === \"ONCALL\"\r\n ? \"contained\"\r\n : \"outlined\"\r\n }\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleMuteToggle();\r\n }}\r\n sx={\r\n state.isMuted &&\r\n state.callData?.status?.toUpperCase() === \"ONCALL\"\r\n ? { ...enabled }\r\n : state.callData?.status?.toUpperCase() === \"ONCALL\"\r\n ? { ...outlined }\r\n : { ...disabled }\r\n }\r\n disabled={\r\n (state.callData?.status?.toUpperCase() !== \"ONCALL\" &&\r\n !state.isMuted) ||\r\n muteOrUnMuteLoading\r\n }\r\n >\r\n {muteOrUnMuteLoading ? (\r\n <CircularProgress\r\n size=\"20px\"\r\n sx={{\r\n color: theme.palette.primary.main,\r\n }}\r\n />\r\n ) : state.isMuted ? (\r\n <MicOff />\r\n ) : (\r\n <Mic />\r\n )}\r\n </Button>\r\n </Tooltip>\r\n\r\n {/* Call Transfer */}\r\n {state.sdkConfig?.showTransferButton && (\r\n <Tooltip title={\"Transfer Call\"}>\r\n <Button\r\n variant={\r\n state.openCallTransferDialog ? \"contained\" : \"outlined\"\r\n }\r\n onClick={(e) => {\r\n if (\r\n state.callData?.status?.toUpperCase() === \"ONCALL\"\r\n ) {\r\n e.stopPropagation();\r\n sdkStateManager.setOpenCallTransferDialog(true);\r\n }\r\n }}\r\n sx={\r\n state.openCallTransferDialog\r\n ? { ...enabled }\r\n : state.callData?.status?.toUpperCase() === \"ONCALL\"\r\n ? { ...outlined }\r\n : { ...disabled }\r\n }\r\n disabled={\r\n state.callData?.status?.toUpperCase() !== \"ONCALL\"\r\n }\r\n >\r\n <TransferWithinAStation />\r\n </Button>\r\n </Tooltip>\r\n )}\r\n\r\n {/* Call Conference Button */}\r\n {state.sdkConfig?.showConferenceButton && (\r\n <Tooltip title={\"Conference Call\"}>\r\n <Button\r\n variant={\r\n state.openConferenceDialog ? \"contained\" : \"outlined\"\r\n }\r\n onClick={(e) => {\r\n if (\r\n state.callData?.status?.toUpperCase() === \"ONCALL\"\r\n ) {\r\n e.stopPropagation();\r\n sdkStateManager.setOpenConferenceDialog(true);\r\n }\r\n }}\r\n sx={\r\n state.openConferenceDialog\r\n ? { ...enabled }\r\n : state.callData?.status?.toUpperCase() === \"ONCALL\"\r\n ? { ...outlined }\r\n : { ...disabled }\r\n }\r\n disabled={\r\n state.callData?.status?.toUpperCase() !== \"ONCALL\"\r\n }\r\n >\r\n <Group />\r\n </Button>\r\n </Tooltip>\r\n )}\r\n\r\n {/* Call History Button use this if requried in future*/}\r\n {/* {state.callData?.status?.toUpperCase() === \"ONCALL\" && ( */}\r\n {/* <Tooltip title={\"Call History\"}>\r\n <Button\r\n variant={openCallHistoryDialog ? \"contained\" : \"outlined\"}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setOpenCallHistoryDialog(true);\r\n }}\r\n sx={openCallHistoryDialog ? { ...enabled } : { ...outlined }}\r\n >\r\n <History />\r\n </Button>\r\n </Tooltip> */}\r\n {/* )} */}\r\n\r\n {/* End Call Button */}\r\n {state.sdkConfig?.showEndCallButton && (\r\n <Tooltip title={\"End Call\"}>\r\n <Button\r\n variant={\r\n state.callData?.status?.toUpperCase() === \"ONCALL\" ||\r\n state.callData?.status?.toUpperCase() === \"RINGING\" ||\r\n state.callData?.status?.toUpperCase() === \"WRAPUP\"\r\n ? \"contained\"\r\n : \"outlined\"\r\n }\r\n onClick={(e) => {\r\n if (\r\n state.callData?.status?.toUpperCase() === \"ONCALL\" ||\r\n state.callData?.status?.toUpperCase() === \"RINGING\" ||\r\n state.callData?.status?.toUpperCase() === \"WRAPUP\"\r\n ) {\r\n e.stopPropagation();\r\n setOpenCallDisposition(true);\r\n }\r\n }}\r\n sx={\r\n state.callData?.status?.toUpperCase() === \"ONCALL\" ||\r\n state.callData?.status?.toUpperCase() === \"RINGING\" ||\r\n state.callData?.status?.toUpperCase() === \"WRAPUP\"\r\n ? {\r\n ...enabled,\r\n borderRight: \"1px\",\r\n backgroundColor: \"error.main\",\r\n minWidth: \"60px !important\",\r\n boxShadow: \" 0px 2px 1px #5f3f3f\",\r\n border: `1px solid ${theme.palette.error.light}`,\r\n height: \"40px\",\r\n \"&:hover\": {\r\n bgcolor: \"error.light\",\r\n boxShadow: \" 0px 2px 1px #5f3f3f\",\r\n border: `0px solid ${theme.palette.error.light}`,\r\n },\r\n \"&:active\": {\r\n bgcolor: \"error.light\",\r\n boxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n },\r\n }\r\n : {\r\n ...disabled,\r\n minWidth: \"60px !important\",\r\n }\r\n }\r\n disabled={\r\n (state.callData?.status?.toUpperCase() !== \"ONCALL\" &&\r\n state.callData?.status?.toUpperCase() !== \"RINGING\" &&\r\n state.callData?.status?.toUpperCase() !== \"WRAPUP\") ||\r\n endCallLoading\r\n }\r\n >\r\n {endCallLoading ? (\r\n <CircularProgress size=\"20px\" color=\"error\" />\r\n ) : (\r\n <CallEnd />\r\n )}\r\n </Button>\r\n </Tooltip>\r\n )}\r\n </Box>\r\n </Box>\r\n </Paper>\r\n </Fade>\r\n </Box>\r\n <Fade in={true} timeout={300}>\r\n <Paper\r\n ref={iframeDragRef}\r\n elevation={iframeIsDragging ? 4 : 1}\r\n sx={{\r\n position: \"absolute\",\r\n left: iframePosition.x,\r\n top: iframePosition.y,\r\n borderRadius: 2,\r\n bgcolor: \"background.paper\",\r\n zIndex: Number.MAX_SAFE_INTEGER,\r\n transition: theme.transitions.create([\"box-shadow\", \"transform\"], {\r\n duration: theme.transitions.duration.short,\r\n }),\r\n visibility:\r\n showIframe && state.sdkConfig?.enableSoftPhone\r\n ? \"visible\"\r\n : \"hidden\",\r\n userSelect: \"none\",\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n cursor: \"all-scroll\",\r\n padding: \"0px 10px\",\r\n }}\r\n onMouseDown={iframeHandleMouseDown}\r\n onTouchStart={iframeHandleTouchStart}\r\n >\r\n <DragIndicator\r\n sx={{\r\n transform: \"rotate(90deg)\",\r\n color: \"#7b7b7b\",\r\n }}\r\n />{\" \"}\r\n <IconButton onClick={() => setShowIframe(false)}>\r\n <Close />\r\n </IconButton>\r\n </Box>\r\n <Box>\r\n <iframe\r\n src={`https://${IP}/ConVoxCCS/iframe?agent_id=${state.agentId}&process_id=${state.process?.process_id}`}\r\n height={380}\r\n width={420}\r\n allow=\"camera; microphone; autoplay\"\r\n style={{\r\n border: \"none\",\r\n }}\r\n ></iframe>\r\n </Box>\r\n </Paper>\r\n </Fade>\r\n\r\n {/* Dialer */}\r\n <Menu\r\n anchorEl={dialerAnchorEl}\r\n open={Boolean(dialerAnchorEl)}\r\n onClose={handleCloseDialer}\r\n onClick={(e) => e.stopPropagation()}\r\n sx={{\r\n zIndex: 99999,\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n all: \"unset\",\r\n padding: \"10px\",\r\n \"&hover\": {\r\n backgroundColor: \"white\",\r\n },\r\n }}\r\n >\r\n <TextField\r\n size=\"small\"\r\n value={phoneNumber}\r\n placeholder=\"Enter Mobile No.\"\r\n onChange={(e) => {\r\n setPhoneNumber(e.target.value);\r\n }}\r\n />\r\n <IconButton\r\n color=\"info\"\r\n onClick={() => {\r\n handleStartCall(phoneNumber);\r\n }}\r\n >\r\n {clickToCallLoading ? (\r\n <CircularProgress\r\n size=\"20px\"\r\n sx={{\r\n color: theme.palette.success.main,\r\n }}\r\n />\r\n ) : (\r\n <Phone color=\"success\" />\r\n )}\r\n </IconButton>\r\n </Box>\r\n </Menu>\r\n\r\n {/* Status */}\r\n <Menu\r\n anchorEl={statusAnchorEl}\r\n open={Boolean(statusAnchorEl)}\r\n onClose={handleCloseAgentStatus}\r\n onClick={(e) => e.stopPropagation()}\r\n sx={{\r\n zIndex: 99999,\r\n }}\r\n >\r\n <MenuItem onClick={() => handleUpdateAgentStatus(\"Lunch\")}>\r\n - Lunch\r\n </MenuItem>\r\n <MenuItem onClick={() => handleUpdateAgentStatus(\"Tea\")}>\r\n - Tea\r\n </MenuItem>\r\n </Menu>\r\n\r\n {/* Queue Count */}\r\n <Menu\r\n anchorEl={anchorEl}\r\n open={Boolean(anchorEl)}\r\n onClose={handleCloseQueueCounts}\r\n onClick={(e) => e.stopPropagation()}\r\n sx={{\r\n zIndex: 99999,\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"flex-start\",\r\n flexDirection: \"column\",\r\n padding: \"0px 10px\",\r\n \"&hover\": {\r\n backgroundColor: \"white\",\r\n },\r\n }}\r\n >\r\n <Chip\r\n icon={<Layers color=\"secondary\" />}\r\n variant=\"outlined\"\r\n label=\"Waiting - 25\"\r\n sx={{\r\n margin: \"4px 2px\",\r\n }}\r\n />\r\n\r\n <Chip\r\n icon={<Pending color=\"info\" />}\r\n label=\"Pending - 99+\"\r\n variant=\"outlined\"\r\n sx={{\r\n margin: \"4px 2px\",\r\n }}\r\n />\r\n\r\n <Chip\r\n icon={<Upcoming color=\"success\" />}\r\n variant=\"outlined\"\r\n label=\"Upcoming - 66\"\r\n sx={{\r\n margin: \"4px 2px\",\r\n }}\r\n />\r\n </Box>\r\n </Menu>\r\n\r\n {/* Conference Call Dialog */}\r\n {Boolean(state.openConferenceDialog) && <ConferenceDialog />}\r\n\r\n {/* Call Transfer Dialog */}\r\n {Boolean(state.openCallTransferDialog) && (\r\n <CallTransferDialog open={state.openCallTransferDialog} />\r\n )}\r\n\r\n {/* Call Disposition Dialog */}\r\n {Boolean(openCallDisposition) && (\r\n <EndCallDispositionDialog\r\n open={openCallDisposition}\r\n setOpen={setOpenCallDisposition}\r\n onSubmitDisposition={handleEndCall}\r\n />\r\n )}\r\n\r\n {/* Call Disposition Dialog */}\r\n {Boolean(openCallHistoryDialog) && (\r\n <CallHistoryDialog\r\n open={openCallHistoryDialog}\r\n setOpen={setOpenCallHistoryDialog}\r\n />\r\n )}\r\n </>\r\n );\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { type MouseEvent, type TouchEvent, useCallback, useRef, useState } from \"react\";\r\n\r\n/**\r\n * Represents a 2D position on the screen in pixels.\r\n *\r\n * @typedef {Object} Position\r\n * @property {number} x - The horizontal coordinate in pixels.\r\n * @property {number} y - The vertical coordinate in pixels.\r\n */\r\ninterface Position {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\n/**\r\n * The return type of the `useDraggable` hook.\r\n *\r\n * @typedef {Object} UseDraggableReturn\r\n * @property {Position} position - The current position of the draggable element in `{x, y}` pixels.\r\n * @property {boolean} isDragging - Whether the element is currently being dragged.\r\n * @property {React.RefObject<HTMLDivElement | null>} dragRef - Ref to attach to the draggable DOM element.\r\n * @property {(e: MouseEvent<HTMLDivElement>) => void} handleMouseDown - Mouse down handler to start dragging.\r\n * @property {(e: TouchEvent<HTMLDivElement>) => void} handleTouchStart - Touch start handler to start dragging.\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\n/**\r\n * A custom React hook that enables drag-and-drop functionality for a DOM element,\r\n * with position constraints inside the viewport and an optional position change callback.\r\n *\r\n * @param {Position} initialPosition - The starting `{x, y}` position of the element in pixels.\r\n * @param {(position: Position) => void} [onPositionChange] - Optional callback fired whenever position changes.\r\n *\r\n * @returns {UseDraggableReturn} - Object containing the element's current position, drag state, event handlers, and ref.\r\n *\r\n * @example\r\n * ```tsx\r\n * const { dragRef, handleMouseDown, handleTouchStart, position } =\r\n * useDraggable({ x: 100, y: 200 }, (pos) => console.log(\"Moved to:\", pos));\r\n *\r\n * return (\r\n * <div\r\n * ref={dragRef}\r\n * onMouseDown={handleMouseDown}\r\n * onTouchStart={handleTouchStart}\r\n * style={{\r\n * position: \"absolute\",\r\n * left: position.x,\r\n * top: position.y,\r\n * }}\r\n * >\r\n * Drag me\r\n * </div>\r\n * );\r\n * ```\r\n *\r\n * @developerNotes\r\n * - **Performance**: This hook uses `useCallback` to memoize handlers, preventing unnecessary re-renders in the consuming component.\r\n * - **Repaint Efficiency**: Position updates use state but are constrained to the viewport, so excessive off-screen rendering is avoided.\r\n * - **Refs for Persistence**: Drag start positions are stored in `useRef` to avoid triggering re-renders mid-drag.\r\n * - **Pointer Events**: Prevent default behavior in touch/mouse events to stop unwanted scrolling while dragging.\r\n * - **Viewport Constraints**: `updatePosition` ensures the draggable element never goes outside the visible browser window.\r\n * - **Mobile Support**: Touch events are handled alongside mouse events for full cross-device compatibility.\r\n */\r\nexport function useDraggable(\r\n\tinitialPosition: Position,\r\n\tonPositionChange?: (_position: Position) => void\r\n): UseDraggableReturn {\r\n\t/** Current position of the draggable element. */\r\n\tconst [position, setPosition] = useState<Position>(initialPosition);\r\n\r\n\t/** Whether the element is currently being dragged. */\r\n\tconst [isDragging, setIsDragging] = useState(false);\r\n\r\n\t/** Ref to the draggable DOM element. Attach this to your draggable container. */\r\n\tconst dragRef = useRef<HTMLDivElement>();\r\n\r\n\t/** Starting cursor/touch position at drag start. */\r\n\tconst dragStart = useRef<Position>({ x: 0, y: 0 });\r\n\r\n\t/** Starting element position at drag start. */\r\n\tconst elementStart = useRef<Position>({ x: 0, y: 0 });\r\n\r\n\t/**\r\n\t * Updates the element's position and fires `onPositionChange` if provided.\r\n\t * Constrains position so the element stays within viewport bounds.\r\n\t */\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\t/**\r\n\t * Begins drag logic and attaches move/end event listeners.\r\n\t */\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\t/** Updates position based on pointer movement delta. */\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\t/** Handles mouse movement during drag. */\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\t/** Handles touch movement during drag. */\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\t/** Ends dragging and removes event listeners. */\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\t// Attach listeners\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\t/**\r\n\t * Mouse down handler to start dragging.\r\n\t */\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\t/**\r\n\t * Touch start handler to start dragging.\r\n\t */\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","import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport type { SDKState } from \"../../types\";\r\n\r\n/**\r\n * Custom React hook that provides the current SDK state and automatically\r\n * updates the state when changes occur in the `sdkStateManager`.\r\n *\r\n * @function useSDKState\r\n * @returns {SDKState} The latest SDK state object from the SDK state manager.\r\n *\r\n * @example\r\n * // Example usage in a component\r\n * import { useSDKState } from \"../hooks/useSDKState\";\r\n *\r\n * function CallControls() {\r\n * const sdkState = useSDKState();\r\n *\r\n * if (!sdkState.isInitialized) {\r\n * return <div>SDK not initialized</div>;\r\n * }\r\n *\r\n * return (\r\n * <div>\r\n * Status: {sdkState.status}\r\n * {sdkState.isMuted ? \"🔇\" : \"🎤\"}\r\n * </div>\r\n * );\r\n * }\r\n */\r\nexport function useSDKState(): SDKState {\r\n /**\r\n * Local React state holding the current SDK state.\r\n * Initialized from the sdkStateManager's current state.\r\n */\r\n const [state, setState] = useState<SDKState>(sdkStateManager.getState());\r\n\r\n /**\r\n * Sets up a subscription to the sdkStateManager on component mount.\r\n * Whenever the SDK state changes, this updates the local `state`.\r\n * Cleans up the subscription on component unmount.\r\n */\r\n useEffect(() => {\r\n // Subscribe to state changes from the sdkStateManager\r\n const unsubscribe = sdkStateManager.subscribe(() => {\r\n // Update local React state with the latest SDK state\r\n setState(sdkStateManager.getState());\r\n });\r\n\r\n // Return the unsubscribe function to clean up\r\n return unsubscribe;\r\n }, []);\r\n\r\n /**\r\n * Return the current SDK state to the calling component.\r\n */\r\n return 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, // Initially not loading\r\n\tisSuccess: false, // Initially no success\r\n\tisError: false, // Initially no error\r\n\terror: null, // No error to show\r\n\tdata: null, // No data to show\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\n/**\r\n * @author Achala IT Solutions\r\n * @here Declares the `useGetRequest` custom hook.\r\n * @description Performs a typed HTTP GET request using Axios with internal state and toast notification support.\r\n * Accepts optional success and error callbacks and returns a request function with response state.\r\n *\r\n * @params\r\n * - props: An optional object containing `onSuccess` and `onError` handlers for request lifecycle callbacks.\r\n *\r\n * @example\r\n * const [getUser, userState] = useGetRequest<User>({\r\n * onSuccess: (res) => console.log(res),\r\n * onError: (err) => console.error(err),\r\n * });\r\n * getUser(\"/api/user\");\r\n *\r\n * @returns A tuple containing:\r\n * - A function to perform the GET request.\r\n * - A state object representing loading, error, and data.\r\n */\r\nexport const useGetRequest = <T = UseGetRequest>(\r\n\t/**\r\n\t * @param props Optional handlers for success and error callbacks.\r\n\t */\r\n\tprops: RequestOptions = {}\r\n\t/**\r\n\t * getRequest: Function to trigger the GET call.\r\n\t * state: Holds request state (loading, success, error, data).\r\n\t */\r\n): [(_url: string, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\t/**\r\n\t * Destructure and provide default values for optional success and error handlers.\r\n\t */\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\t/**\r\n\t * Access the toast notification function from a custom toast context.\r\n\t */\r\n\tconst { showToast } = useToast();\r\n\r\n\t/**\r\n\t * State to manage request lifecycle and request data.\r\n\t */\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\t/**\r\n\t * @function getRequest\r\n\t * @description Makes the GET request, updates internal state, handles success/error, and triggers notifications.\r\n\t * @param url - The API endpoint to call.\r\n\t * @param config - Optional Axios request config (headers, params, etc.)\r\n\t */\r\n\tconst getRequest = useCallback(\r\n\t\t(url: string, config = {}) => {\r\n\t\t\t/**\r\n\t\t\t * Set loading state before making the request.\r\n\t\t\t */\r\n\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\t\t\t/**\r\n\t\t\t * Execute the GET request using Axios instance.\r\n\t\t\t */\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\t/**\r\n\t\t\t\t\t * On success, store response data and update success state.\r\n\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined success handler if available.\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\t/**\r\n\t\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Show error message via toast system.\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Construct normalized error object from AxiosError.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Show error message via toast system.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t */\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] // Dependencies for memoization\r\n\t);\r\n\r\n\t/**\r\n\t * @returns A tuple containing the GET function and the current request state.\r\n\t */\r\n\treturn [getRequest, state];\r\n};\r\n\r\n/**\r\n * @author Achala IT Solutions\r\n * @here Declares the `usePostRequest` custom hook.\r\n * @description Sends a typed POST request via Axios and manages the request state, error handling, and toast notifications.\r\n *\r\n * @params\r\n * - props: Optional object containing `onSuccess` and `onError` callback handlers.\r\n *\r\n * @example\r\n * const [createUser, state] = usePostRequest<User>({\r\n * onSuccess: (res) => console.log(\"User created\", res),\r\n * onError: (err) => console.error(\"Failed to create\", err),\r\n * });\r\n * createUser(\"/api/users\", payload);\r\n *\r\n * @returns A tuple:\r\n * - postRequest: Function to execute the POST call.\r\n * - state: Object containing isLoading, isError, isSuccess, error, and data.\r\n */\r\nexport const usePostRequest = <T = UsePostRequest>(\r\n\t/**\r\n\t * @param props Optional handlers for success and error callbacks.\r\n\t */\r\n\tprops: RequestOptions = {}\r\n): [\r\n\t/**\r\n\t * postRequest: Function to trigger the POST call.\r\n\t * state: Holds request state (loading, success, error, data).\r\n\t */\r\n\t(_url: string, _payload: T, _config?: AxiosRequestConfig) => void,\r\n\tRequestResult<T>,\r\n] => {\r\n\t/**\r\n\t * Destructure and provide default values for optional success and error handlers.\r\n\t */\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\t/**\r\n\t * Access the toast notification function from a custom toast context.\r\n\t */\r\n\tconst { showToast } = useToast();\r\n\r\n\t/**\r\n\t * State to manage request lifecycle and request data.\r\n\t */\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\t/**\r\n\t * @function postRequest\r\n\t * @description Sends a POST request, updates state, and calls handlers.\r\n\t * @param url - Endpoint to which data is posted.\r\n\t * @param payload - Request body data to be sent.\r\n\t * @param config - Optional Axios request configuration.\r\n\t */\r\n\tconst postRequest = useCallback(\r\n\t\t(url: string, payload: T, config = {}) => {\r\n\t\t\t/**\r\n\t\t\t * Set loading state before making the request.\r\n\t\t\t */\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\t/**\r\n\t\t\t * Execute the POST request using Axios instance.\r\n\t\t\t */\r\n\t\t\taxiosInstance\r\n\t\t\t\t.post(url, payload, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * On success, store response data and update success state.\r\n\t\t\t\t\t */\r\n\r\n\t\t\t\t\t// if (res.data?.success) {\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\t/**\r\n\t\t\t\t\t * Invoke user-defined success handler if available.\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\tconsole.log(res.data?.message, \"res45\");\r\n\t\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t\t\t// } else {\r\n\t\t\t\t\t// /**\r\n\t\t\t\t\t// * Update state with error information.\r\n\t\t\t\t\t// */\r\n\r\n\t\t\t\t\t// dispatch({\r\n\t\t\t\t\t// type: \"isError\",\r\n\t\t\t\t\t// payload: res.data,\r\n\t\t\t\t\t// });\r\n\r\n\t\t\t\t\t// /**\r\n\t\t\t\t\t// * Show error message via toast system.\r\n\t\t\t\t\t// */\r\n\r\n\t\t\t\t\t// showToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t// /**\r\n\t\t\t\t\t// * Invoke user-defined error handler if available.\r\n\t\t\t\t\t// */\r\n\r\n\t\t\t\t\t// onError?.(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\t/**\r\n\t\t\t\t\t * Construct normalized error object from AxiosError.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Show error message using toast system.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t */\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] // Dependencies for memoization\r\n\t);\r\n\r\n\t/**\r\n\t * @returns A tuple containing the POST function and the current request state.\r\n\t */\r\n\treturn [postRequest, state];\r\n};\r\n\r\n/**\r\n * @author Achala IT Solutions\r\n * @here Declares the `usePutRequest` custom hook.\r\n * @description Sends a typed PUT request using Axios and manages its state, including success and error handling via callbacks and toast messages.\r\n *\r\n * @params\r\n * - props: Optional object with `onSuccess` and `onError` handlers for request lifecycle management.\r\n *\r\n * @example\r\n * const [updateUser, state] = usePutRequest<User>({\r\n * onSuccess: (res) => console.log(\"Updated!\", res),\r\n * onError: (err) => console.error(\"Update failed\", err),\r\n * });\r\n * updateUser(\"/api/users/1\", updatedPayload);\r\n *\r\n * @returns A tuple:\r\n * - putRequest: Function to trigger the PUT call.\r\n * - state: Object containing isLoading, isSuccess, isError, error, and data.\r\n */\r\nexport const usePutRequest = <T = UsePutRequest>(\r\n\t/**\r\n\t * @param props Optional success and error callback functions.\r\n\t */\r\n\tprops: RequestOptions = {}\r\n): [\r\n\t/**\r\n\t * putRequest: Function to perform the PUT request.\r\n\t * state: Holds the status and result of the request.\r\n\t */\r\n\t(_url: string, _payload: T, _config?: AxiosRequestConfig) => void,\r\n\tRequestResult<T>,\r\n] => {\r\n\t/**\r\n\t * Destructure handlers from props, with defaults.\r\n\t */\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\t/**\r\n\t * Access the toast notification function from a custom toast context.\r\n\t */\r\n\tconst { showToast } = useToast();\r\n\r\n\t/**\r\n\t * State to manage request lifecycle and request data.\r\n\t */\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\t/**\r\n\t * @function putRequest\r\n\t * @description Executes a PUT HTTP request and updates state accordingly.\r\n\t * @param url - The endpoint URL to which the PUT request is made.\r\n\t * @param payload - The request body data.\r\n\t * @param config - Optional Axios request config object.\r\n\t */\r\n\tconst putRequest = useCallback(\r\n\t\t(url: string, payload: T, config = {}) => {\r\n\t\t\t/**\r\n\t\t\t * Set loading state before making the request.\r\n\t\t\t */\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\t/**\r\n\t\t\t * Execute the PUT request using Axios instance.\r\n\t\t\t */\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\t/**\r\n\t\t\t\t\t * On success, store response data and update success state.\r\n\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined success handler if available.\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\t/**\r\n\t\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Show error message via toast system.\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Construct normalized error object from AxiosError.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Show error message via toast system.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t */\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] // Dependencies for memoization\r\n\t);\r\n\r\n\t/**\r\n\t * @returns A tuple containing the PUT function and the current request state.\r\n\t */\r\n\treturn [putRequest, state];\r\n};\r\n\r\n/**\r\n * @author Achala IT Solutions\r\n * @here Declares the `useDeleteRequest` custom hook.\r\n * @description Sends a DELETE request using Axios and manages request state with toast notifications and optional success/error handlers.\r\n *\r\n * @params\r\n * - props: Optional callbacks `onSuccess` and `onError` to handle API response lifecycle events.\r\n *\r\n * @example\r\n * const [deleteUser, state] = useDeleteRequest({\r\n * onSuccess: (res) => console.log(\"Deleted!\", res),\r\n * onError: (err) => console.error(\"Delete failed\", err),\r\n * });\r\n * deleteUser(\"/api/users/1\");\r\n *\r\n * @returns A tuple:\r\n * - deleteRequest: Function to send the DELETE request.\r\n * - state: Object holding request status (`isLoading`, `isSuccess`, `isError`), response data, and error.\r\n */\r\nexport const useDeleteRequest = <T = UseDeleteRequest>(\r\n\t/**\r\n\t * @param props Optional handlers for success and error callbacks.\r\n\t */\r\n\tprops: RequestOptions = {}\r\n): [\r\n\t/**\r\n\t * deleteRequest: Function that initiates the DELETE API call.\r\n\t * state: Object describing the request’s current status and result.\r\n\t */\r\n\t(_url: string, _config?: AxiosRequestConfig) => void,\r\n\tRequestResult<T>,\r\n] => {\r\n\t/**\r\n\t * Destructure and provide default values for optional success and error handlers.\r\n\t */\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\t/**\r\n\t * Access the toast notification function from a custom toast context.\r\n\t */\r\n\tconst { showToast } = useToast();\r\n\r\n\t/**\r\n\t * State to manage request lifecycle and request data.\r\n\t */\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\t/**\r\n\t * @function deleteRequest\r\n\t * @description Executes a DELETE API call and handles response or errors.\r\n\t *\r\n\t * @param url - The endpoint to delete the resource from.\r\n\t * @param config - Optional Axios request configuration (e.g., headers).\r\n\t */\r\n\tconst deleteRequest = useCallback(\r\n\t\t(url: string, config = {}) => {\r\n\t\t\t/**\r\n\t\t\t * Set loading state before making the request.\r\n\t\t\t */\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\t/**\r\n\t\t\t * Execute the DELETE request using Axios instance.\r\n\t\t\t */\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\t/**\r\n\t\t\t\t\t * On success, store response data and update success state.\r\n\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined success handler if available.\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\t/**\r\n\t\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Show error message via toast system.\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Construct normalized error object from AxiosError.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Show error message via toast system.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t */\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] // Dependencies for memoization\r\n\t);\r\n\r\n\t/**\r\n\t * @returns A tuple containing the DELETE function and the current request state.\r\n\t */\r\n\treturn [deleteRequest, state];\r\n};\r\n\r\n/**\r\n * @author Achala IT Solutions\r\n * @here Declares the `usePatchRequest` custom hook.\r\n * @description Executes a PATCH request using Axios with built-in state management, error handling, and toast support.\r\n *\r\n * @params\r\n * - props: Optional object containing `onSuccess` and `onError` callback handlers.\r\n *\r\n * @example\r\n * const [patchData, state] = usePatchRequest({\r\n * onSuccess: (res) => console.log(\"Patched successfully\", res),\r\n * onError: (err) => console.error(\"Patch failed\", err),\r\n * });\r\n *\r\n * patchData(\"/api/users/1\", { name: \"Updated Name\" });\r\n *\r\n * @returns A tuple:\r\n * - patchRequest: Function that triggers the PATCH API call.\r\n * - state: Object holding request lifecycle flags, response data, and error.\r\n */\r\nexport const usePatchRequest = <T = UsePatchRequest>(\r\n\t/**\r\n\t * @param props Optional handlers for success and error callbacks.\r\n\t */\r\n\tprops: RequestOptions = {}\r\n): [\r\n\t/**\r\n\t * patchRequest: Function to initiate a PATCH request.\r\n\t * state: The internal state of the request lifecycle.\r\n\t */\r\n\t(_url: string, _payload: T, _config?: AxiosRequestConfig) => void,\r\n\tRequestResult<T>,\r\n] => {\r\n\t/**\r\n\t * Destructure and provide default values for optional success and error handlers.\r\n\t */\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\t/**\r\n\t * Access the toast notification function from a custom toast context.\r\n\t */\r\n\tconst { showToast } = useToast();\r\n\r\n\t/**\r\n\t * State to manage request lifecycle and request data.\r\n\t */\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\t/**\r\n\t * @function patchRequest\r\n\t * @description Triggers a PATCH HTTP request to the given endpoint with payload and optional config.\r\n\t * @param url - API endpoint for the PATCH request.\r\n\t * @param payload - The data to send in the request body.\r\n\t * @param config - Optional Axios configuration (headers, params, etc.)\r\n\t */\r\n\tconst patchRequest = useCallback(\r\n\t\t(url: string, payload: T, config = {}) => {\r\n\t\t\t/**\r\n\t\t\t * Set loading state before making the request.\r\n\t\t\t */\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\t\t\t/**\r\n\t\t\t * Execute the PATCH request using Axios instance.\r\n\t\t\t */\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\t/**\r\n\t\t\t\t\t * On success, store response data and update success state.\r\n\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined success handler if available.\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\t/**\r\n\t\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Show error message via toast system.\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Construct normalized error object from AxiosError.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Show error message via toast system.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t */\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] // Dependencies for memoization\r\n\t);\r\n\r\n\t/**\r\n\t * @returns A tuple containing the PATCH function and the current request state.\r\n\t */\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 showToast: (message: string, severity?: AlertColor) => void;\r\n};\r\n\r\nconst ToastContext = createContext<ToastContextType | undefined>(undefined);\r\n\r\nexport const useToast = () => {\r\n const ctx = useContext(ToastContext);\r\n if (!ctx) throw new Error(\"useToast must be used inside ToastProvider\");\r\n return ctx;\r\n};\r\n\r\nexport const ToastProvider = ({ children }: { children: ReactNode }) => {\r\n const [open, setOpen] = useState(false);\r\n const [message, setMessage] = useState(\"\");\r\n const [severity, setSeverity] = useState<AlertColor>(\"info\");\r\n\r\n const showToast = (msg: string, sev: AlertColor = \"info\") => {\r\n setMessage(msg);\r\n setSeverity(sev);\r\n setOpen(true);\r\n };\r\n\r\n return (\r\n <ToastContext.Provider value={{ showToast }}>\r\n {children}\r\n <Snackbar\r\n open={open}\r\n color={severity}\r\n autoHideDuration={3000}\r\n onClose={() => setOpen(false)}\r\n anchorOrigin={{ vertical: \"top\", horizontal: \"right\" }}\r\n >\r\n <Alert\r\n variant=\"filled\"\r\n severity={severity}\r\n onClose={() => setOpen(false)}\r\n sx={{ width: \"100%\" }}\r\n >\r\n {message}\r\n </Alert>\r\n </Snackbar>\r\n </ToastContext.Provider>\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport {\r\n Call,\r\n CallEnd,\r\n CallSplit,\r\n Close,\r\n Mic,\r\n MicOff,\r\n Pause,\r\n PhoneDisabled,\r\n PlayArrow,\r\n SupportAgent,\r\n} from \"@mui/icons-material\";\r\nimport {\r\n Box,\r\n Button,\r\n Dialog,\r\n IconButton,\r\n Paper,\r\n TextField,\r\n Typography,\r\n Autocomplete,\r\n Tooltip,\r\n useTheme,\r\n TableContainer,\r\n Table,\r\n TableHead,\r\n TableRow,\r\n TableCell,\r\n TableBody,\r\n CircularProgress,\r\n} from \"@mui/material\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { usePostRequest } from \"../services/request\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\nimport type { ConferenceLineTypes } from \"../../types\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\nimport axiosInstance from \"../services/axios\";\r\nimport { useToast } from \"../services/toastMessage\";\r\nimport useStyles from \"./styles\";\r\nimport React from \"react\";\r\n\r\ntype TransferCallRequest = {\r\n mobile_number?: string;\r\n userid?: string;\r\n type?: string;\r\n transfer_to?: string;\r\n callreferenceid?: string;\r\n processid?: string;\r\n process_name?: string;\r\n};\r\n\r\nconst ConferenceTableRow = ({ each }: any) => {\r\n const state = useSDKState();\r\n const { showToast } = useToast();\r\n const { disabled, enabled, outlined } = useStyles({\r\n disabled: state.sdkConfig?.disabled || {},\r\n enabled: state.sdkConfig?.enabled || {},\r\n outlined: state.sdkConfig?.outlined || {},\r\n });\r\n const theme = useTheme();\r\n\r\n // Loading States\r\n const [conferenceCallStart, setConferenceCallStart] = useState(false);\r\n const [conferenceCallMerge, setConferenceCallMerge] = useState(false);\r\n const [conferenceCallHoldOrUnHold, setConferenceCallHoldOrUnHold] =\r\n useState(false);\r\n const [conferenceCallMuteOrUnMute, setConferenceCallMuteOrUnMute] =\r\n useState(false);\r\n const [conferenceCallEnd, setConferenceCallEnd] = useState(false);\r\n\r\n const onConferenceLineUpdate = (line: ConferenceLineTypes, data: any) => {\r\n sdkStateManager.setConferenceLine({ ...line, ...data });\r\n };\r\n\r\n const onConferenceCallStart = (line: ConferenceLineTypes, data: any) => {\r\n const line_used = { ...line, ...data };\r\n setConferenceCallStart(true);\r\n const payload = {\r\n action: \"EXTERNAL_CONFERENCE\",\r\n operation: `CALL${line_used.line}`,\r\n line_used: String(line_used.line),\r\n thirdparty_no: line_used.phone,\r\n userid: state.callData?.agent_id ?? \"\",\r\n process: state.callData?.process_name ?? \"\",\r\n };\r\n\r\n axiosInstance\r\n .post(END_POINT.CONFERENCE_CALL, payload)\r\n .then((res) => {\r\n showToast(res.data?.message, \"success\");\r\n sdkStateManager.setConferenceLine({ ...line, ...data });\r\n })\r\n .catch((err) => {\r\n const message =\r\n err.response?.data?.detail ||\r\n err.response?.data?.message ||\r\n err.message ||\r\n \"An unknown error occurred\";\r\n showToast(message, \"error\");\r\n })\r\n .finally(() => {\r\n setConferenceCallStart(false);\r\n });\r\n };\r\n\r\n const onMergeConferenceCall = (line: ConferenceLineTypes, data: any) => {\r\n const line_used = { ...line, ...data };\r\n setConferenceCallMerge(true);\r\n const payload = {\r\n action: \"EXTERNAL_CONFERENCE\",\r\n operation: `CONFERENCE`,\r\n line_used: String(line_used.line),\r\n thirdparty_no: line_used.phone,\r\n userid: state.callData?.agent_id ?? \"\",\r\n process: state.callData?.process_name ?? \"\",\r\n };\r\n\r\n axiosInstance\r\n .post(END_POINT.CONFERENCE_CALL, payload)\r\n .then((res) => {\r\n showToast(res.data?.message, \"success\");\r\n sdkStateManager.setConferenceLine({ ...line, ...data });\r\n })\r\n .catch((err) => {\r\n const message =\r\n err.response?.data?.detail ||\r\n err.response?.data?.message ||\r\n err.message ||\r\n \"An unknown error occurred\";\r\n showToast(message, \"error\");\r\n })\r\n .finally(() => {\r\n setConferenceCallMerge(false);\r\n });\r\n };\r\n\r\n const onHoldOrUnHoldConferenceCall = (\r\n line: ConferenceLineTypes,\r\n data: any,\r\n type: string\r\n ) => {\r\n const line_used = { ...line, ...data };\r\n setConferenceCallHoldOrUnHold(true);\r\n const payload = {\r\n action: \"EXTERNAL_CONFERENCE\",\r\n operation: type,\r\n hold_channel_no:\r\n type === \"HOLDUSER\"\r\n ? `hold${line_used.line}`\r\n : `unhold${line_used.line}`, // Change the line according where u intiated firstly\r\n userid: state.callData?.agent_id ?? \"\",\r\n process: state.callData?.process_name ?? \"\",\r\n };\r\n\r\n axiosInstance\r\n .post(END_POINT.CONFERENCE_CALL_HOLD_OR_UN_HOLD, payload)\r\n .then((res) => {\r\n showToast(res.data?.message, \"success\");\r\n sdkStateManager.setConferenceLine({ ...line, ...data });\r\n })\r\n .catch((err) => {\r\n const message =\r\n err.response?.data?.detail ||\r\n err.response?.data?.message ||\r\n err.message ||\r\n \"An unknown error occurred\";\r\n showToast(message, \"error\");\r\n })\r\n .finally(() => {\r\n setConferenceCallHoldOrUnHold(false);\r\n });\r\n };\r\n\r\n const onMuteOrUnMuteConferenceCall = (\r\n line: ConferenceLineTypes,\r\n data: any,\r\n type: string\r\n ) => {\r\n const line_used = { ...line, ...data };\r\n setConferenceCallMuteOrUnMute(true);\r\n const payload = {\r\n action: \"EXTERNAL_CONFERENCE\",\r\n operation: type,\r\n channel_no:\r\n type === \"MUTEUSER\" ? `mute${line_used.line}` : `play${line_used.line}`,\r\n userid: state.callData?.agent_id ?? \"\",\r\n thirdparty_no: line_used.phone,\r\n process: state.callData?.process_name ?? \"\",\r\n };\r\n\r\n axiosInstance\r\n .post(END_POINT.CONFERENCE_CALL_MUTE_OT_UN_MUTE, payload)\r\n .then((res) => {\r\n showToast(res.data?.message, \"success\");\r\n sdkStateManager.setConferenceLine({ ...line, ...data });\r\n })\r\n .catch((err) => {\r\n const message =\r\n err.response?.data?.detail ||\r\n err.response?.data?.message ||\r\n err.message ||\r\n \"An unknown error occurred\";\r\n showToast(message, \"error\");\r\n })\r\n .finally(() => {\r\n setConferenceCallMuteOrUnMute(false);\r\n });\r\n };\r\n\r\n const onEndConferenceCall = (line: ConferenceLineTypes, data: any) => {\r\n const line_used = { ...line, ...data };\r\n setConferenceCallEnd(true);\r\n const payload = {\r\n action: \"EXTERNAL_CONFERENCE\",\r\n operation: \"HANGUP_CHANNEL\",\r\n line_used: String(line_used.line - 1),\r\n user_type: `THIRDPARTY${line_used.line - 1}`,\r\n thirdparty_no: line_used.phone,\r\n userid: state.callData?.agent_id ?? \"\",\r\n process: state.callData?.process_name ?? \"\",\r\n };\r\n\r\n axiosInstance\r\n .post(END_POINT.CONFERENCE_CALL_END, payload)\r\n .then((res) => {\r\n showToast(res.data?.message, \"success\");\r\n sdkStateManager.setConferenceLine({ ...line, ...data });\r\n })\r\n .catch((err) => {\r\n const message =\r\n err.response?.data?.detail ||\r\n err.response?.data?.message ||\r\n err.message ||\r\n \"An unknown error occurred\";\r\n showToast(message, \"error\");\r\n })\r\n .finally(() => {\r\n setConferenceCallEnd(false);\r\n });\r\n };\r\n\r\n return (\r\n <TableRow\r\n key={each.line}\r\n sx={{\r\n border: \"2px solid #fff\",\r\n }}\r\n >\r\n <TableCell\r\n sx={{\r\n padding: \"6px\",\r\n }}\r\n >\r\n <Typography>Line {each?.line ?? \"\"}. </Typography>\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n padding: \"6px\",\r\n }}\r\n >\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n px: 1,\r\n borderRadius: \"10px\",\r\n // width: \"100px\",\r\n // maxWidth: \"100px\",\r\n }}\r\n >\r\n {each?.status ?? \"\"}\r\n </Typography>\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n padding: \"6px\",\r\n }}\r\n >\r\n <Button\r\n sx={{\r\n textTransform: \"capitalize\",\r\n }}\r\n size=\"small\"\r\n >\r\n <Typography variant=\"body2\">\r\n {each?.line === 1 ? \"Internal\" : \"External\"}\r\n </Typography>\r\n </Button>\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n padding: \"6px\",\r\n }}\r\n >\r\n <TextField\r\n size=\"small\"\r\n placeholder=\"Phone Number\"\r\n fullWidth\r\n value={each?.phone || \"\"}\r\n disabled={each?.line === 1 || each?.status === \"LINE USED\"}\r\n onChange={(e) => {\r\n onConferenceLineUpdate(each, { phone: e.target.value });\r\n }}\r\n />\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n padding: \"6px\",\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-around\",\r\n }}\r\n >\r\n {/* Conference Call Button */}\r\n <Tooltip title=\"Call\">\r\n <Button\r\n variant={each?.isCallStart ? \"outlined\" : \"contained\"}\r\n color=\"success\"\r\n sx={\r\n each?.isCallStart\r\n ? { ...disabled }\r\n : {\r\n ...enabled,\r\n border: `0px solid ${theme.palette.success.light}`,\r\n \"&:hover\": {\r\n bgcolor: \"success.light\",\r\n boxShadow: `0px 2px 1px ${theme.palette.success.light}`,\r\n border: `0px solid ${theme.palette.success.light}`,\r\n },\r\n \"&:active\": {\r\n bgcolor: \"success.light\",\r\n boxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n },\r\n }\r\n }\r\n onClick={() => {\r\n onConferenceCallStart(each, {\r\n isCallStart: true,\r\n status: \"ONCALL\",\r\n });\r\n }}\r\n disabled={\r\n each?.isCallStart ||\r\n conferenceCallStart ||\r\n each?.status === \"LINE USED\"\r\n }\r\n >\r\n {conferenceCallStart ? (\r\n <CircularProgress size=\"20px\" color=\"success\" />\r\n ) : (\r\n <Call\r\n sx={{ color: each?.isCallStart ? \"default\" : \"#e7e7e7ff\" }}\r\n />\r\n )}\r\n </Button>\r\n </Tooltip>\r\n {/* Merge Call Button */}\r\n {each?.line === 1 && (\r\n <Tooltip title=\"Merge Call\">\r\n <Button\r\n variant={each?.isMergeCall ? \"contained\" : \"outlined\"}\r\n sx={\r\n each?.isMergeCall && each?.isCallStart\r\n ? { ...disabled }\r\n : each?.isCallStart\r\n ? { ...outlined }\r\n : { ...disabled }\r\n }\r\n onClick={() => {\r\n onMergeConferenceCall(each, {\r\n isMergeCall: true,\r\n status: \"ONCALL\",\r\n });\r\n }}\r\n disabled={!each?.isCallStart || conferenceCallMerge}\r\n >\r\n {conferenceCallMerge ? (\r\n <CircularProgress\r\n size=\"20px\"\r\n sx={{\r\n color: each?.isMergeCall\r\n ? \"#e7e7e7ff\"\r\n : theme.palette.primary.main,\r\n }}\r\n />\r\n ) : (\r\n <CallSplit />\r\n )}\r\n </Button>\r\n </Tooltip>\r\n )}\r\n {/* Hold Or Un Hold Call Button */}\r\n <Tooltip title={each.isHold ? \"Hold\" : \"Un Hold\"}>\r\n <Button\r\n variant={each?.isHold ? \"contained\" : \"outlined\"}\r\n sx={\r\n each?.isHold && each?.isCallStart\r\n ? { ...disabled }\r\n : each?.isCallStart\r\n ? { ...outlined }\r\n : { ...disabled }\r\n }\r\n onClick={() => {\r\n if (each.isHold) {\r\n onHoldOrUnHoldConferenceCall(\r\n each,\r\n { isHold: false },\r\n \"UNHOLDUSER\"\r\n );\r\n } else {\r\n onHoldOrUnHoldConferenceCall(\r\n each,\r\n { isHold: true },\r\n \"HOLDUSER\"\r\n );\r\n }\r\n }}\r\n disabled={!each?.isCallStart || conferenceCallHoldOrUnHold}\r\n >\r\n {conferenceCallHoldOrUnHold ? (\r\n <CircularProgress\r\n size=\"20px\"\r\n sx={{\r\n color: theme.palette.primary.main,\r\n }}\r\n />\r\n ) : each.isHold ? (\r\n <PlayArrow />\r\n ) : (\r\n <Pause />\r\n )}\r\n </Button>\r\n </Tooltip>\r\n {/* Mute Or Un Mute Call Button */}\r\n <Tooltip title={each.isMute ? \"Mute\" : \"Un Mute\"}>\r\n <Button\r\n variant={each?.isMute ? \"contained\" : \"outlined\"}\r\n sx={\r\n each?.isMute && each?.isCallStart\r\n ? { ...disabled }\r\n : each?.isCallStart\r\n ? { ...outlined }\r\n : { ...disabled }\r\n }\r\n onClick={() => {\r\n if (each.isMute) {\r\n onMuteOrUnMuteConferenceCall(\r\n each,\r\n { isMute: false },\r\n \"PLAYUSER\"\r\n );\r\n } else {\r\n onMuteOrUnMuteConferenceCall(\r\n each,\r\n { isMute: true },\r\n \"MUTEUSER\"\r\n );\r\n }\r\n }}\r\n disabled={!each?.isCallStart || conferenceCallMuteOrUnMute}\r\n >\r\n {conferenceCallMuteOrUnMute ? (\r\n <CircularProgress\r\n size=\"20px\"\r\n sx={{\r\n color: theme.palette.primary.main,\r\n }}\r\n />\r\n ) : each.isMute ? (\r\n <MicOff />\r\n ) : (\r\n <Mic />\r\n )}\r\n </Button>\r\n </Tooltip>\r\n {/* End Call Button */}\r\n {each?.line !== 1 && (\r\n <Tooltip title=\"End Call\">\r\n <Button\r\n variant={each?.isCallStart ? \"contained\" : \"outlined\"}\r\n color=\"error\"\r\n sx={\r\n each?.isCallStart\r\n ? {\r\n ...enabled,\r\n minWidth: \"60px !important\",\r\n border: `0px solid ${theme.palette.error.light}`,\r\n \"&:hover\": {\r\n bgcolor: \"error.light\",\r\n boxShadow: `0px 2px 1px ${theme.palette.error.light}`,\r\n border: `0px solid ${theme.palette.error.light}`,\r\n },\r\n \"&:active\": {\r\n bgcolor: \"error.light\",\r\n boxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n },\r\n }\r\n : { ...disabled, minWidth: \"60px !important\" }\r\n }\r\n onClick={() => {\r\n onEndConferenceCall(each, {\r\n isCallStart: false,\r\n isMergeCall: false,\r\n isMute: false,\r\n isHold: false,\r\n status: \"LINE USED\",\r\n // phone: \"\",\r\n });\r\n }}\r\n disabled={!each?.isCallStart || conferenceCallEnd}\r\n >\r\n {conferenceCallEnd ? (\r\n <CircularProgress size=\"20px\" color=\"error\" />\r\n ) : (\r\n <CallEnd />\r\n )}\r\n </Button>\r\n </Tooltip>\r\n )}\r\n </Box>\r\n </TableCell>\r\n </TableRow>\r\n );\r\n};\r\n\r\nexport function ConferenceDialog() {\r\n const state = useSDKState();\r\n const { showToast } = useToast();\r\n const [conferenceCallEndAll, setConferenceCallEndAll] = useState(false);\r\n\r\n const handleClose = () => {\r\n sdkStateManager.setOpenConferenceDialog(false);\r\n };\r\n\r\n const onEndAllConferenceCalls = () => {\r\n setConferenceCallEndAll(true);\r\n const payload = {\r\n action: \"EXTERNAL_CONFERENCE\",\r\n operation: \"ENDCONFERENCE\",\r\n userid: state.callData?.agent_id ?? \"\",\r\n process: state.callData?.process_name ?? \"\",\r\n };\r\n\r\n axiosInstance\r\n .post(END_POINT.CONFERENCE_CALL_END_ALL, payload)\r\n .then((res) => {\r\n showToast(res.data?.message, \"success\");\r\n sdkStateManager.resetConferenceLines();\r\n handleClose();\r\n })\r\n .catch((err) => {\r\n const message =\r\n err.response?.data?.detail ||\r\n err.response?.data?.message ||\r\n err.message ||\r\n \"An unknown error occurred\";\r\n showToast(message, \"error\");\r\n })\r\n .finally(() => {\r\n setConferenceCallEndAll(false);\r\n });\r\n };\r\n // const isAnyLineUsed = useMemo(() => {\r\n // \t// If any object in the list has status \"LINE USED\", return true.\r\n // \t// Only if all objects do NOT have status \"LINE USED\", return false.\r\n // \treturn state?.conferenceLine?.some((each: any) => each?.status === \"LINE USED\") ? true : false;\r\n // }, [state?.conferenceLine]);\r\n\r\n useEffect(() => {\r\n const obj = {\r\n line: 1,\r\n status: state.callData?.status ?? \"\",\r\n type: \"internal\" as \"internal\" | \"external\" | \"\",\r\n phone: state.callData?.phone_number ?? \"\",\r\n isMute: false,\r\n isHold: false,\r\n isMergeCall: false,\r\n isCallStart: true,\r\n };\r\n sdkStateManager.setConferenceLine(obj);\r\n }, []);\r\n\r\n return (\r\n <>\r\n <Dialog\r\n open={state.openConferenceDialog}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n fullWidth\r\n maxWidth={\"md\"}\r\n >\r\n <Paper sx={{ borderRadius: 2 }}>\r\n {/* Header */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n padding: \"10px 16px\",\r\n }}\r\n >\r\n <Typography variant=\"body1\">\r\n {state?.agentId ?? \"\"} conference\r\n </Typography>\r\n {/* {isAnyLineUsed ?\r\n\t\t\t\t\t\t\t<IconButton sx={{ visibility: \"hidden\" }}>\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:\t */}\r\n\r\n <IconButton onClick={handleClose}>\r\n <Close />\r\n </IconButton>\r\n </Box>\r\n\r\n {/* Lines */}\r\n <Box\r\n sx={{\r\n boxShadow: \"1px 1px 2px #e7e5e5ff\",\r\n margin: \"0px 15px\",\r\n borderRadius: \"20px\",\r\n }}\r\n >\r\n <TableContainer\r\n component={Paper}\r\n sx={{\r\n outline: \"0px solid gray !important\",\r\n boxShadow: \"1px 1px 6px #e7e5e5ff\",\r\n }}\r\n >\r\n <Table\r\n sx={{\r\n border: \"4px solid #ffffff !important\",\r\n }}\r\n >\r\n <TableHead>\r\n <TableRow\r\n sx={{\r\n border: \"2px solid #f3f3f3ff !important\",\r\n }}\r\n >\r\n <TableCell\r\n sx={{\r\n padding: \"6px\",\r\n }}\r\n >\r\n Line\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n padding: \"6px\",\r\n }}\r\n >\r\n Status\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n padding: \"6px\",\r\n }}\r\n >\r\n Call Type\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n padding: \"6px\",\r\n }}\r\n >\r\n Mobile Number\r\n </TableCell>\r\n <TableCell\r\n sx={{\r\n padding: \"6px\",\r\n }}\r\n >\r\n Call Actions\r\n </TableCell>\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {state?.conferenceLine.map((each: any) => (\r\n <ConferenceTableRow each={each} />\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Box>\r\n {/* End All Calls */}\r\n <Box textAlign=\"center\" m={2}>\r\n <Button\r\n variant=\"outlined\"\r\n color=\"error\"\r\n size=\"large\"\r\n onClick={onEndAllConferenceCalls}\r\n disabled={conferenceCallEndAll}\r\n sx={{ px: 2, borderRadius: \"20px\", textTransform: \"capitalize\" }}\r\n >\r\n {conferenceCallEndAll ? (\r\n <CircularProgress\r\n size=\"20px\"\r\n color=\"error\"\r\n sx={{\r\n marginRight: \"8px\",\r\n }}\r\n />\r\n ) : (\r\n <IconButton\r\n sx={{\r\n bgcolor: \"error.main\",\r\n \"&:hover\": { bgcolor: \"error.dark\" },\r\n marginRight: \"8px\",\r\n width: \"28px\",\r\n height: \"28px\",\r\n fontSize: \"12px\",\r\n fontWeight: \"600\",\r\n lineHeight: \"16px\",\r\n letterSpacing: \"0.02em\",\r\n textTransform: \"capitalize\",\r\n color: \"white\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n borderRadius: \"50%\",\r\n }}\r\n >\r\n <PhoneDisabled\r\n sx={{\r\n color: \"white\",\r\n fontSize: \"16px\",\r\n fontWeight: \"600\",\r\n }}\r\n />\r\n </IconButton>\r\n )}\r\n End Conference\r\n </Button>\r\n </Box>\r\n </Paper>\r\n </Dialog>\r\n </>\r\n );\r\n}\r\n\r\nexport function CallTransferDialog({ open }: any) {\r\n const [transferCall] = usePostRequest<TransferCallRequest>({\r\n onSuccess: () => {\r\n sdkStateManager.setOpenCallTransferDialog(false);\r\n },\r\n });\r\n const state = useSDKState();\r\n const [currentselecteTab, setCurrentselecteTab] = useState(\"process\");\r\n\r\n const [\r\n getIdelAgentsList,\r\n { data: idleAgentsList, isLoading: isIdleAgentsListLoading },\r\n ] = usePostRequest<any>();\r\n\r\n const [\r\n getProcessAndQueuesList,\r\n { data: processAndQueuesList, isLoading: isProcessAndQueuesListLoading },\r\n ] = usePostRequest<{\r\n status: string;\r\n active: boolean;\r\n process?: any[];\r\n queue?: any[];\r\n }>();\r\n\r\n const handleClose = () => {\r\n sdkStateManager.setOpenCallTransferDialog(false);\r\n };\r\n\r\n const handleTransferCall = (data: any, type: string) => {\r\n console.log(data, \"data34\");\r\n if (type === \"PROCESS\") {\r\n const payload = {\r\n mobile_number: state.callData?.phone_number ?? \"\",\r\n userid: state.callData?.agent_id ?? \"\",\r\n type: \"PROCESS\",\r\n transfer_to: data?.process_name ?? \"\",\r\n callreferenceid: state.callData?.convox_id ?? \"\",\r\n processid: String(state.callData?.process_id ?? \"\"),\r\n process_name: state.callData?.process_name ?? \"\",\r\n };\r\n transferCall(END_POINT.TRANSFER_CALL, payload);\r\n } else if (type === \"QUEUE\") {\r\n const payload = {\r\n mobile_number: state.callData?.phone_number ?? \"\",\r\n userid: state.callData?.agent_id ?? \"\",\r\n type: \"QUEUE\",\r\n transfer_to: data?.queue_name ?? \"\",\r\n callreferenceid: state.callData?.convox_id ?? \"\",\r\n processid: String(state.callData?.process_id ?? \"\"),\r\n process_name: state.callData?.process_name ?? \"\",\r\n };\r\n transferCall(END_POINT.TRANSFER_CALL, payload);\r\n } else if (type === \"AGENT\") {\r\n const payload = {\r\n mobile_number: state.callData?.phone_number ?? \"\",\r\n userid: state.callData?.agent_id ?? \"\",\r\n type: \"AGENT\",\r\n transfer_to: data?.user_id ?? \"\",\r\n callreferenceid: state.callData?.convox_id ?? \"\",\r\n processid: String(state.callData?.process_id ?? \"\"),\r\n process_name: state.callData?.process_name ?? \"\",\r\n };\r\n transferCall(END_POINT.TRANSFER_CALL, payload);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n getIdelAgentsList(END_POINT.AGENTS_LIST, {\r\n status: \"IDLE\",\r\n active: true,\r\n });\r\n getProcessAndQueuesList(END_POINT.TRANSFER_TO_DETAILS, {\r\n status: \"ACTIVE\",\r\n active: true,\r\n });\r\n }, []);\r\n\r\n console.log(idleAgentsList, \"idleAgentsList\");\r\n return (\r\n <>\r\n <Dialog\r\n open={open}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n fullWidth\r\n maxWidth={\"md\"}\r\n >\r\n <Paper sx={{ borderRadius: 2 }}>\r\n {/* Header */}\r\n\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n padding: \"4px 16px\",\r\n boxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n }}\r\n >\r\n <Typography variant=\"body1\"> Call Transfer</Typography>\r\n <IconButton onClick={handleClose}>\r\n <Close />\r\n </IconButton>\r\n </Box>\r\n\r\n {/* Process and Queues */}\r\n <Box\r\n sx={{\r\n boxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n padding: \"6px 10px\",\r\n margin: \"10px\",\r\n borderRadius: \"10px\",\r\n }}\r\n >\r\n <Box sx={{ display: \"flex\", gap: 1 }}>\r\n <Button\r\n variant={\r\n currentselecteTab === \"process\" ? \"contained\" : \"outlined\"\r\n }\r\n onClick={() => {\r\n setCurrentselecteTab(\"process\");\r\n getProcessAndQueuesList(END_POINT.TRANSFER_TO_DETAILS, {\r\n status: \"ACTIVE\",\r\n active: true,\r\n });\r\n }}\r\n >\r\n Process\r\n </Button>\r\n <Button\r\n variant={\r\n currentselecteTab === \"queues\" ? \"contained\" : \"outlined\"\r\n }\r\n onClick={() => {\r\n setCurrentselecteTab(\"queues\");\r\n getProcessAndQueuesList(END_POINT.TRANSFER_TO_DETAILS, {\r\n status: \"ACTIVE\",\r\n active: true,\r\n });\r\n }}\r\n >\r\n Queues\r\n </Button>\r\n <Button\r\n variant={\r\n currentselecteTab === \"agents\" ? \"contained\" : \"outlined\"\r\n }\r\n onClick={() => {\r\n setCurrentselecteTab(\"agents\");\r\n getIdelAgentsList(END_POINT.AGENTS_LIST, {\r\n status: \"IDLE\",\r\n active: true,\r\n });\r\n }}\r\n >\r\n Agents\r\n </Button>\r\n </Box>\r\n {(isProcessAndQueuesListLoading || isIdleAgentsListLoading) && (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n height: \"100%\",\r\n }}\r\n >\r\n <CircularProgress />{\" \"}\r\n </Box>\r\n )}\r\n {!isProcessAndQueuesListLoading &&\r\n !isIdleAgentsListLoading &&\r\n currentselecteTab === \"process\" && (\r\n <Box sx={{ display: \"flex\", gap: 1 }}>\r\n {processAndQueuesList?.data?.process &&\r\n processAndQueuesList?.data?.process?.length > 0 ? (\r\n processAndQueuesList?.data?.process?.map(\r\n (process: any, index: any) => (\r\n <Box\r\n key={index}\r\n sx={{\r\n p: 1,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n boxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n padding: \"6px\",\r\n margin: \"10px 0px\",\r\n borderRadius: \"10px\",\r\n \"&:hover\": { bgcolor: \"action.selected\" },\r\n }}\r\n >\r\n <Typography\r\n variant=\"body1\"\r\n sx={{\r\n mx: 1,\r\n width: \"200px\",\r\n maxWidth: \"250px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n <SupportAgent sx={{ marginRight: \"4px\" }} />\r\n {process.process_name}\r\n </Typography>\r\n\r\n <IconButton\r\n color=\"success\"\r\n sx={{\r\n bgcolor: \"action.hover\",\r\n \"&:hover\": { bgcolor: \"action.selected\" },\r\n }}\r\n onClick={() => {\r\n handleTransferCall(process, \"PROCESS\");\r\n }}\r\n >\r\n <Call />\r\n </IconButton>\r\n </Box>\r\n )\r\n )\r\n ) : (\r\n <Typography\r\n variant=\"body1\"\r\n sx={{\r\n fontSize: \"12px\",\r\n fontWeight: \"600\",\r\n letterSpacing: \"0.02em\",\r\n textTransform: \"capitalize\",\r\n textAlign: \"center\",\r\n width: \"100%\",\r\n margin: \"10px 0px\",\r\n color: \"gray\",\r\n }}\r\n >\r\n No Process Found\r\n </Typography>\r\n )}\r\n </Box>\r\n )}\r\n {!isProcessAndQueuesListLoading &&\r\n !isIdleAgentsListLoading &&\r\n currentselecteTab === \"queues\" && (\r\n <Box sx={{ display: \"flex\", gap: 1 }}>\r\n {processAndQueuesList?.data?.queue &&\r\n processAndQueuesList?.data?.queue?.length > 0 ? (\r\n processAndQueuesList?.data?.queue?.map(\r\n (queue: any, index: any) => (\r\n <Box\r\n key={index}\r\n sx={{\r\n p: 1,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n boxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n padding: \"6px\",\r\n margin: \"10px 0px\",\r\n borderRadius: \"10px\",\r\n \"&:hover\": { bgcolor: \"action.selected\" },\r\n }}\r\n >\r\n <Typography\r\n variant=\"body1\"\r\n sx={{\r\n mx: 1,\r\n width: \"200px\",\r\n maxWidth: \"250px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n <SupportAgent sx={{ marginRight: \"4px\" }} />\r\n {queue.queue_name}\r\n {processAndQueuesList?.data?.process?.find(\r\n (process: any) =>\r\n process.process_id === queue.process_id\r\n )?.process_name ? (\r\n <Typography\r\n variant=\"body1\"\r\n sx={{\r\n fontSize: \"12px\",\r\n fontWeight: \"600\",\r\n letterSpacing: \"0.02em\",\r\n textTransform: \"capitalize\",\r\n color: \"gray\",\r\n }}\r\n >\r\n {\"(\" +\r\n processAndQueuesList?.data?.process?.find(\r\n (process: any) =>\r\n process.process_id === queue.process_id\r\n )?.process_name +\r\n \")\"}\r\n </Typography>\r\n ) : (\r\n \"\"\r\n )}\r\n </Typography>\r\n\r\n <IconButton\r\n color=\"success\"\r\n sx={{\r\n bgcolor: \"action.hover\",\r\n \"&:hover\": { bgcolor: \"action.selected\" },\r\n }}\r\n onClick={() => {\r\n handleTransferCall(queue, \"QUEUE\");\r\n }}\r\n >\r\n <Call />\r\n </IconButton>\r\n </Box>\r\n )\r\n )\r\n ) : (\r\n <Typography\r\n variant=\"body1\"\r\n sx={{\r\n fontSize: \"12px\",\r\n fontWeight: \"600\",\r\n letterSpacing: \"0.02em\",\r\n textTransform: \"capitalize\",\r\n textAlign: \"center\",\r\n width: \"100%\",\r\n margin: \"10px 0px\",\r\n color: \"gray\",\r\n }}\r\n >\r\n No Queues Found\r\n </Typography>\r\n )}\r\n </Box>\r\n )}\r\n {!isProcessAndQueuesListLoading &&\r\n !isIdleAgentsListLoading &&\r\n currentselecteTab === \"agents\" && (\r\n <Box sx={{ display: \"flex\", gap: 1 }}>\r\n {idleAgentsList?.data && idleAgentsList?.data?.length > 0 ? (\r\n idleAgentsList?.data?.map((agent: any, index: any) => (\r\n <Box\r\n key={index}\r\n sx={{\r\n p: 1,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n boxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n padding: \"6px\",\r\n margin: \"10px 0px\",\r\n borderRadius: \"10px\",\r\n \"&:hover\": { bgcolor: \"action.selected\" },\r\n }}\r\n >\r\n <Typography\r\n variant=\"body1\"\r\n sx={{\r\n mx: 1,\r\n width: \"200px\",\r\n maxWidth: \"250px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n <SupportAgent sx={{ marginRight: \"4px\" }} />\r\n {agent.name}\r\n </Typography>\r\n\r\n <IconButton\r\n color=\"success\"\r\n sx={{\r\n bgcolor: \"action.hover\",\r\n \"&:hover\": { bgcolor: \"action.selected\" },\r\n }}\r\n onClick={() => {\r\n handleTransferCall(agent, \"AGENT\");\r\n }}\r\n >\r\n <Call />\r\n </IconButton>\r\n </Box>\r\n ))\r\n ) : (\r\n <Typography\r\n variant=\"body1\"\r\n sx={{\r\n fontSize: \"12px\",\r\n fontWeight: \"600\",\r\n letterSpacing: \"0.02em\",\r\n textTransform: \"capitalize\",\r\n textAlign: \"center\",\r\n width: \"100%\",\r\n margin: \"10px 0px\",\r\n color: \"gray\",\r\n }}\r\n >\r\n No Agents Found\r\n </Typography>\r\n )}\r\n </Box>\r\n )}\r\n </Box>\r\n </Paper>\r\n </Dialog>\r\n </>\r\n );\r\n}\r\n\r\nexport function EndCallDispositionDialog({\r\n open,\r\n setOpen,\r\n onSubmitDisposition,\r\n}: any) {\r\n const [formData, setFormData] = useState({\r\n disposition: { label: \"Resolved\", value: \"RES\" },\r\n followUp: { label: \"No\", value: \"N\" },\r\n callbackDate: \"\",\r\n callbackHrs: \"\",\r\n callbackMins: \"\",\r\n });\r\n\r\n const dispositionOptions = [\r\n { label: \"Not Interested\", value: \"NI\" },\r\n { label: \"Resolved\", value: \"RES\" },\r\n ];\r\n\r\n const followUpOptions = [\r\n { label: \"Yes\", value: \"Y\" },\r\n { label: \"No\", value: \"N\" },\r\n ];\r\n const handleChange = (\r\n field: keyof typeof formData,\r\n value: { label: string } | null | string\r\n ) => {\r\n setFormData((prev) => ({ ...prev, [field]: value }));\r\n };\r\n\r\n const handleReset = () => {\r\n setFormData({\r\n disposition: { label: \"Resolved\", value: \"RES\" },\r\n followUp: { label: \"No\", value: \"N\" },\r\n callbackDate: \"\",\r\n callbackHrs: \"\",\r\n callbackMins: \"\",\r\n });\r\n };\r\n const handleClose = () => {\r\n handleReset();\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <>\r\n <Dialog\r\n open={open}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n fullWidth\r\n maxWidth={\"xs\"}\r\n >\r\n <Paper sx={{ borderRadius: 2 }}>\r\n {/* Header */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n padding: \"4px 16px\",\r\n boxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n }}\r\n >\r\n <Typography variant=\"body1\" m={1}>\r\n {\" \"}\r\n Call Disposition\r\n </Typography>\r\n </Box>\r\n\r\n {/* Lines */}\r\n <Box\r\n sx={{\r\n boxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n padding: \"10px\",\r\n margin: \"10px\",\r\n borderRadius: \"10px\",\r\n }}\r\n >\r\n <Box display=\"flex\" gap={2}>\r\n <Autocomplete\r\n value={formData.disposition}\r\n options={dispositionOptions}\r\n getOptionLabel={(opt) => opt.label}\r\n onChange={(_, val) => handleChange(\"disposition\", val)}\r\n size=\"small\"\r\n renderInput={(params) => (\r\n <TextField {...params} label=\"Disposition\" fullWidth />\r\n )}\r\n sx={{ flex: 1 }}\r\n />\r\n <Autocomplete\r\n options={followUpOptions}\r\n getOptionLabel={(opt) => opt.label}\r\n value={formData.followUp}\r\n onChange={(_, val) => handleChange(\"followUp\", val)}\r\n size=\"small\"\r\n renderInput={(params) => (\r\n <TextField {...params} label=\"Follow Up\" fullWidth />\r\n )}\r\n sx={{ flex: 1 }}\r\n />\r\n </Box>\r\n\r\n {/* Callback Date + Time */}\r\n {formData?.followUp?.label?.toLowerCase() === \"yes\" && (\r\n <Box display=\"flex\" gap={2} mt={2}>\r\n <TextField\r\n size=\"small\"\r\n label=\"Callback Date\"\r\n type=\"date\"\r\n slotProps={{\r\n inputLabel: { shrink: true },\r\n }}\r\n value={formData.callbackDate}\r\n onChange={(e) => handleChange(\"callbackDate\", e.target.value)}\r\n fullWidth\r\n sx={{ flex: 1 }}\r\n />\r\n <TextField\r\n size=\"small\"\r\n label=\"Hours (0-23)\"\r\n type=\"number\"\r\n inputProps={{ min: 0, max: 23 }}\r\n value={formData.callbackHrs}\r\n onChange={(e) => handleChange(\"callbackHrs\", e.target.value)}\r\n fullWidth\r\n sx={{ flex: 1 }}\r\n />\r\n <TextField\r\n size=\"small\"\r\n label=\"Minutes (0-59)\"\r\n type=\"number\"\r\n inputProps={{ min: 0, max: 59 }}\r\n value={formData.callbackMins}\r\n onChange={(e) => handleChange(\"callbackMins\", e.target.value)}\r\n fullWidth\r\n sx={{ flex: 1 }}\r\n />\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n <Box textAlign=\"right\" m={2}>\r\n <Button\r\n variant=\"outlined\"\r\n color=\"error\"\r\n size=\"large\"\r\n onClick={handleClose}\r\n sx={{\r\n px: 2,\r\n mx: 1,\r\n borderRadius: \"10px\",\r\n textTransform: \"capitalize\",\r\n }}\r\n >\r\n cancel\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n color=\"primary\"\r\n size=\"large\"\r\n onClick={() => onSubmitDisposition(formData)}\r\n sx={{ px: 2, borderRadius: \"10px\", textTransform: \"capitalize\" }}\r\n >\r\n Submit\r\n </Button>\r\n </Box>\r\n </Paper>\r\n </Dialog>\r\n </>\r\n );\r\n}\r\n\r\nexport function ProcessorListDialog({\r\n open,\r\n setOpen,\r\n processList = null,\r\n handleSelectedProcessor,\r\n}: any) {\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n console.log(processList, \"processList\");\r\n return (\r\n <>\r\n <Dialog\r\n open={open}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n maxWidth={\"xs\"}\r\n >\r\n <Paper sx={{ borderRadius: 2 }}>\r\n {/* Header */}\r\n\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n padding: \"4px 16px\",\r\n boxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n }}\r\n >\r\n <Typography variant=\"body1\"> Process List</Typography>\r\n <IconButton onClick={handleClose}>\r\n <Close />\r\n </IconButton>\r\n </Box>\r\n\r\n {/* Lines */}\r\n <Box\r\n sx={{\r\n boxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n padding: \"6px 10px\",\r\n margin: \"10px\",\r\n borderRadius: \"10px\",\r\n }}\r\n >\r\n {processList.length > 0\r\n ? processList?.map((process: any, index: any) => (\r\n <Box\r\n key={index}\r\n sx={{\r\n p: 1,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n boxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n padding: \"6px\",\r\n margin: \"10px 0px\",\r\n borderRadius: \"10px\",\r\n cursor: \"pointer\",\r\n \"&:hover\": { bgcolor: \"action.selected\" },\r\n }}\r\n onClick={() => {\r\n handleSelectedProcessor(process);\r\n }}\r\n >\r\n {/* Status */}\r\n <Typography\r\n variant=\"body1\"\r\n sx={{\r\n mx: 1,\r\n width: \"200px\",\r\n maxWidth: \"250px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n <SupportAgent sx={{ marginRight: \"4px\" }} />\r\n {process.process_name}\r\n </Typography>\r\n </Box>\r\n ))\r\n : null}\r\n </Box>\r\n </Paper>\r\n </Dialog>\r\n </>\r\n );\r\n}\r\n\r\nexport function CallHistoryDialog({ open, setOpen }: any) {\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <>\r\n <Dialog\r\n open={open}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n fullWidth\r\n maxWidth={\"md\"}\r\n >\r\n <Paper sx={{ borderRadius: 2 }}>\r\n {/* Header */}\r\n\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n padding: \"4px 16px\",\r\n boxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n }}\r\n >\r\n <Typography variant=\"body1\"> Call History</Typography>\r\n <IconButton onClick={handleClose}>\r\n <Close />\r\n </IconButton>\r\n </Box>\r\n\r\n {/* Lines */}\r\n <Box\r\n sx={{\r\n boxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n margin: \"10px\",\r\n borderRadius: \"10px\",\r\n textAlign: \"center\",\r\n fontSize: \"16px\",\r\n fontWeight: \"bold\",\r\n }}\r\n p={6}\r\n >\r\n Coming Soon...\r\n </Box>\r\n </Paper>\r\n </Dialog>\r\n </>\r\n );\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","import React, { ReactNode } from \"react\";\r\nimport { ToastProvider } from \"../services/toastMessage\";\r\n\r\nexport const SDKProvider = ({ children }: { children: ReactNode }) => {\r\n return <ToastProvider>{children}</ToastProvider>;\r\n};\r\n","import type { CallControlPanelProps } from \"../../types\";\r\n\r\nimport { CallControls } from \"./callControls\";\r\nimport { SDKProvider } from \"./SDKProvider\";\r\n\r\nexport function CallControlPanel({ onDataChange }: CallControlPanelProps) {\r\n return (\r\n <SDKProvider>\r\n <CallControls onDataChange={onDataChange} />\r\n </SDKProvider>\r\n );\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 { BASE_URL } from \"./lib/services/endPoint\";\r\nimport { useEndCall } from \"./lib/hooks/useEndCall\";\r\nimport { SDKConfig } from \"./types\";\r\nimport { useClickToCall } from \"./lib/hooks/useClickToCall\";\r\nexport { CallControlPanel } from \"./lib/components/callControlPanel\";\r\n\r\nexport type { CallControlPanelProps, CallData, CallStatus } from \"./types\";\r\n\r\n/**\r\n * Initialize the Call Control SDK with an API key\r\n * @param sdkApiKey - The API key for SDK authentication\r\n * @throws {Error} When API key is missing or invalid\r\n */\r\n\r\ntype intiSDKParams = {\r\n apiKey: string;\r\n tenantId: string;\r\n agentId: string;\r\n sdkConfig?: SDKConfig;\r\n};\r\nexport function initSDK({\r\n apiKey,\r\n tenantId,\r\n agentId,\r\n sdkConfig,\r\n}: intiSDKParams): void {\r\n eventTracker\r\n .init({\r\n apiKey: apiKey,\r\n tenantId: tenantId,\r\n agentId: agentId,\r\n baseUrl: BASE_URL,\r\n })\r\n .then((res) => {\r\n if (res) {\r\n console.log(\"SDK initialized successfully\");\r\n sdkStateManager.initialize(apiKey, agentId, sdkConfig);\r\n } else {\r\n console.log(\"SDK initialization failed\");\r\n sdkStateManager.setInitCheck();\r\n }\r\n });\r\n}\r\n\r\nexport { useLogout, useEndCall, useClickToCall };\r\n"],"mappings":"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","names":["SDKStateManager","__publicField","stored","parsedState","__spreadProps","__spreadValues","error","persistentState","listener","apiKey","agentId","sdkConfig","index","isHolding","isMuted","status","process","position","open","data","line","_a","conferenceLineData","each","sdkStateManager","EventTrackerSDK","__publicField","config","__spreadValues","ticket","response","sdkStateManager","data","error","eventType","eventData","event","index","e","eventsToFlush","retryItems","retryFn","url","options","_a","fullUrl","maxRetries","attempt","delay","resolve","autoTrackConfig","target","formData","formFields","value","key","inputTimer","sessionStartTime","sessionDuration","navigation","timing","interval","eventTracker","useCallback","useState","IP","BASE_URL","WS_BASE_URL","VERSION","END_POINT","WS_END_POINT","axios","token","axiosInstance","axios","BASE_URL","config","error","response","_a","originalRequest","axios_default","useLogout","loading","setLoading","useState","success","setSuccess","isError","setIsError","error","setError","data","setData","useCallback","_a","state","payload","axios_default","END_POINT","res","sdkStateManager","err","useLogout_default","useCallback","useState","useEndCall","loading","setLoading","useState","success","setSuccess","isError","setIsError","error","setError","data","setData","useCallback","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","state","payload","axios_default","END_POINT","res","sdkStateManager","err","useCallback","useState","useClickToCall","loading","setLoading","useState","success","setSuccess","isError","setIsError","error","setError","data","setData","useCallback","_a","_b","_c","_d","_e","_f","_g","_h","_i","state","payload","axios_default","END_POINT","res","err","line_used","each","sdkStateManager","__spreadProps","__spreadValues","CallEnd","Close","DragIndicator","Group","KeyboardArrowDown","Layers","Mic","MicOff","Pause","Pending","Phone","PlayArrow","SupportAgent","TransferWithinAStation","Upcoming","WifiCalling3","Box","Button","Chip","CircularProgress","Fade","IconButton","Menu","MenuItem","Paper","TextField","Tooltip","Typography","useTheme","useCallback","useEffect","useRef","useState","useCallback","useRef","useState","useDraggable","initialPosition","onPositionChange","position","setPosition","isDragging","setIsDragging","dragRef","dragStart","elementStart","updatePosition","newPosition","element","rect","viewportWidth","viewportHeight","constrainedPosition","handleStart","clientX","clientY","handleMove","moveClientX","moveClientY","deltaX","deltaY","handleMouseMove","e","handleTouchMove","touch","handleEnd","handleMouseDown","handleTouchStart","useState","useEffect","useSDKState","state","setState","useState","sdkStateManager","useEffect","useCallback","useReducer","createContext","useContext","useState","Snackbar","Alert","jsx","jsxs","ToastContext","useToast","ctx","ToastProvider","children","open","setOpen","message","setMessage","severity","setSeverity","showToast","msg","sev","initialState","reducer","state","action","__spreadProps","__spreadValues","usePostRequest","props","onSuccess","onError","showToast","useToast","state","dispatch","useReducer","reducer","initialState","useCallback","url","payload","config","axios_default","res","_a","_b","err","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","error","Call","CallEnd","CallSplit","Close","Mic","MicOff","Pause","PhoneDisabled","PlayArrow","SupportAgent","Box","Button","Dialog","IconButton","Paper","TextField","Typography","Autocomplete","Tooltip","useTheme","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","CircularProgress","useEffect","useState","useTheme","useStyles","disabled","enabled","outlined","theme","useTheme","__spreadValues","styles_default","Fragment","jsx","jsxs","ConferenceTableRow","each","_a","_b","_c","_d","_e","state","useSDKState","showToast","useToast","disabled","enabled","outlined","styles_default","theme","useTheme","conferenceCallStart","setConferenceCallStart","useState","conferenceCallMerge","setConferenceCallMerge","conferenceCallHoldOrUnHold","setConferenceCallHoldOrUnHold","conferenceCallMuteOrUnMute","setConferenceCallMuteOrUnMute","conferenceCallEnd","setConferenceCallEnd","onConferenceLineUpdate","line","data","sdkStateManager","__spreadValues","onConferenceCallStart","line_used","payload","axios_default","END_POINT","res","err","message","onMergeConferenceCall","onHoldOrUnHoldConferenceCall","type","onMuteOrUnMuteConferenceCall","onEndConferenceCall","TableRow","TableCell","Typography","Button","TextField","e","Box","Tooltip","__spreadProps","CircularProgress","Call","CallSplit","PlayArrow","Pause","MicOff","Mic","CallEnd","ConferenceDialog","conferenceCallEndAll","setConferenceCallEndAll","handleClose","onEndAllConferenceCalls","useEffect","obj","Dialog","Paper","IconButton","Close","TableContainer","Table","TableHead","TableBody","PhoneDisabled","CallTransferDialog","open","_f","_g","_h","_i","_j","_k","_l","transferCall","usePostRequest","currentselecteTab","setCurrentselecteTab","getIdelAgentsList","idleAgentsList","isIdleAgentsListLoading","getProcessAndQueuesList","processAndQueuesList","isProcessAndQueuesListLoading","handleTransferCall","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_A","_B","_C","_D","_E","_F","_G","process","index","SupportAgent","queue","agent","EndCallDispositionDialog","setOpen","onSubmitDisposition","formData","setFormData","dispositionOptions","followUpOptions","handleChange","field","value","prev","handleReset","Autocomplete","opt","_","val","params","ProcessorListDialog","processList","handleSelectedProcessor","CallHistoryDialog","Fragment","jsx","jsxs","CallControls","onDataChange","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_A","_B","_C","_D","_E","_F","_G","_H","_I","_J","_K","_L","_M","_N","_O","_P","_Q","_R","_S","_T","_U","_V","_W","_X","_Y","_Z","__","_$","_aa","_ba","_ca","_da","_ea","_fa","_ga","_ha","_ia","_ja","_ka","_la","_ma","_na","_oa","_pa","_qa","_ra","_sa","_ta","_ua","_va","_wa","_xa","_ya","_za","theme","useTheme","state","useSDKState","showToast","useToast","disabled","enabled","outlined","styles_default","webSocketRef","useRef","anchorEl","setAnchorEl","useState","showIframe","setShowIframe","statusAnchorEl","setStatusAnchorEl","dialerAnchorEl","setDialerAnchorEl","openCallDisposition","setOpenCallDisposition","openProcessorDialog","setOpenProcessorDialog","openCallHistoryDialog","setOpenCallHistoryDialog","processList","setProcessList","phoneNumber","setPhoneNumber","callDuration","setCallDuration","position","isDragging","dragRef","handleMouseDown","handleTouchStart","useDraggable","newPosition","sdkStateManager","iframePosition","iframeIsDragging","iframeDragRef","iframeHandleMouseDown","iframeHandleTouchStart","clickToCall","clickToCallLoading","usePostRequest","holdOrUnHold","holdOrUnHoldLoading","error","muteOrUnMute","muteOrUnMuteLoading","readyAgentStatus","agentReadyLoading","updateAgentStatus","isLoading","endCall","endCallLoading","formatDuration","useCallback","seconds","mins","secs","handleCloseQueueCounts","handleOpenDialer","event","handleCloseDialer","handleOpenAgentStatus","handleCloseAgentStatus","handleAgentReady","payload","END_POINT","handleUpdateAgentStatus","status","handleStartCall","number","handleHoldToggle","handleMuteToggle","handleEndCall","data","useEffect","handleBeforeUnload","e","interval","elapsed","axios_default","res","err","WS_END_POINT","Box","ProcessorListDialog","Fade","Paper","IconButton","DragIndicator","Tooltip","WifiCalling3","Typography","Chip","CircularProgress","KeyboardArrowDown","Button","__spreadValues","SupportAgent","PlayArrow","Pause","MicOff","Mic","TransferWithinAStation","Group","__spreadProps","CallEnd","Close","IP","Menu","TextField","Phone","MenuItem","Layers","Pending","Upcoming","ConferenceDialog","CallTransferDialog","EndCallDispositionDialog","CallHistoryDialog","jsx","SDKProvider","children","ToastProvider","jsx","CallControlPanel","onDataChange","SDKProvider","CallControls","initSDK","apiKey","tenantId","agentId","sdkConfig","eventTracker","BASE_URL","res","sdkStateManager"]}
1
+ {"version":3,"sources":["../call-control-sdk/lib/hooks/sdk-state.ts","../call-control-sdk/lib/hooks/eventsTracker.ts","../call-control-sdk/lib/hooks/useLogout.ts","../call-control-sdk/lib/services/endPoint.ts","../call-control-sdk/lib/services/axios.ts","../call-control-sdk/lib/hooks/useEndCall.ts","../call-control-sdk/lib/hooks/useClickToCall.ts","../call-control-sdk/lib/components/callControlPanel.tsx","../call-control-sdk/lib/components/callControls.tsx","../call-control-sdk/lib/hooks/useDraggable.ts","../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/dialog.tsx","../call-control-sdk/lib/components/styles.ts","../call-control-sdk/lib/components/SDKProvider.tsx","../call-control-sdk/index.ts"],"sourcesContent":["import type { SDKState, CallData, CallStatus, ConferenceLineTypes, SDKConfig } from \"../../types\";\r\n\r\nclass SDKStateManager {\r\n\tprivate state: SDKState;\r\n\tprivate listeners: Array<() => void> = [];\r\n\tprivate readonly STORAGE_KEY = \"call-control-sdk-state\";\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\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\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\tisHolding: false,\r\n\t\t\tisMuted: false,\r\n\t\t\tstatus: \"idle\",\r\n\t\t\tcallStartTime: null,\r\n\t\t\tcontrolPanelPosition: { x: 10, y: 10 },\r\n\t\t\tiframePosition: { x: 10, y: 80 },\r\n\t\t\tcallData: {\r\n\t\t\t\tagent_id: \"\",\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};\r\n\t}\r\n\r\n\tprivate loadFromStorage(): void {\r\n\t\ttry {\r\n\t\t\tconst stored = localStorage.getItem(this.STORAGE_KEY);\r\n\t\t\tif (stored) {\r\n\t\t\t\tconst parsedState = JSON.parse(stored);\r\n\t\t\t\t// Only restore persistent data, not initialization state\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\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\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\tisHolding: parsedState.isHolding || false,\r\n\t\t\t\t\tisMuted: parsedState.isMuted || false,\r\n\t\t\t\t\tstatus: parsedState.status || \"idle\",\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 || { x: 10, y: 80 },\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\t// Fix: Properly handle conferenceLine with fallback to initial state\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};\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tconsole.warn(\"Failed to load SDK state from localStorage:\", error);\r\n\t\t\t// If loading fails, keep the initial state\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\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\tisHolding: this.state.isHolding,\r\n\t\t\t\tisMuted: this.state.isMuted,\r\n\t\t\t\tstatus: this.state.status,\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};\r\n\t\t\tlocalStorage.setItem(this.STORAGE_KEY, JSON.stringify(persistentState));\r\n\t\t} catch (error) {\r\n\t\t\tconsole.warn(\"Failed to save SDK state to localStorage:\", 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\tpublic initialize(apiKey: string, agentId: string, sdkConfig?: SDKConfig): 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} 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.sdkConfig = {\r\n\t\t\t\tdisableEndCallButton: false,\r\n\t\t\t\tdisabledDialButton: 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.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 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\tpublic 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\tpublic 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 setStatus(status: CallStatus): void {\r\n\t\tthis.state.status = status;\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.state.status = \"on call\";\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.state.status = \"idle\";\r\n\t\tthis.state.isHolding = false;\r\n\t\tthis.state.isMuted = false;\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 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\t// Fix: Check if conferenceLine is corrupted and reset if needed\r\n\t\tif (!this.state.conferenceLine || !Array.isArray(this.state.conferenceLine)) {\r\n\t\t\tconsole.warn(\"Conference line data corrupted, resetting to initial state\");\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 = this.getInitialState().conferenceLine;\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\tlocalStorage.removeItem(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 localStorage:\", error);\r\n\t\t}\r\n\t}\r\n\r\n\t// Debug methods\r\n\tpublic debugStorage(): void {\r\n\t\ttry {\r\n\t\t\tconst stored = localStorage.getItem(this.STORAGE_KEY);\r\n\t\t\tconsole.log(\"Current localStorage data:\", stored);\r\n\t\t\tif (stored) {\r\n\t\t\t\tconsole.log(\"Parsed localStorage data:\", JSON.parse(stored));\r\n\t\t\t}\r\n\t\t\tconsole.log(\"Current state:\", this.state);\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error(\"Error debugging storage:\", 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\n// SDK State Manager Instance\r\nexport const sdkStateManager = new SDKStateManager();\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/**\r\n * EventTracker SDK - A plug-and-play event tracking system\r\n *\r\n * Usage:\r\n * import EventTracker from '@eventtracker/et';\r\n *\r\n * EventTracker.init({\r\n * apiKey: 'your-api-key',\r\n * tenantId: 'tenant_001',\r\n * agentId: 'agent_123',\r\n * sessionId: 'session_456'\r\n * });\r\n *\r\n * EventTracker.logEvent('appointmentBooked', { patientId: 'p123' });\r\n */\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nexport interface EventTrackerConfig {\r\n\tapiKey: string;\r\n\ttenantId: string;\r\n\tagentId: string;\r\n\tsessionId?: string;\r\n\tbaseUrl?: string;\r\n\tautoTrack?:\r\n\t\t| boolean\r\n\t\t| {\r\n\t\t\t\tpageVisits?: boolean;\r\n\t\t\t\tclicks?: boolean;\r\n\t\t\t\tforms?: boolean;\r\n\t\t\t\tinputs?: boolean;\r\n\t\t\t\tscrolling?: boolean;\r\n\t\t\t\tperformance?: boolean;\r\n\t\t\t\terrors?: boolean;\r\n\t\t\t\tvisibility?: boolean;\r\n\t\t };\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\tlogEvent(eventType: string, eventData?: EventData): Promise<void>;\r\n\tcloseTicket(): Promise<void>;\r\n\tisInitialized(): boolean;\r\n\tgetConfig(): EventTrackerConfig | null;\r\n\tgetTicketId(): string | null;\r\n\tflush(): Promise<void>;\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 eventQueue: Array<{\r\n\t\teventType: string;\r\n\t\teventData?: EventData;\r\n\t\ttimestamp: number;\r\n\t}> = [];\r\n\tprivate isOnline: boolean = true;\r\n\tprivate retryQueue: Array<() => Promise<void>> = [];\r\n\tprivate flushTimer: ReturnType<typeof setInterval> | null = null;\r\n\r\n\t/**\r\n\t * Initialize the EventTracker SDK\r\n\t * @param config Configuration object\r\n\t */\r\n\tasync init(config: EventTrackerConfig): Promise<string | null> {\r\n\t\tthis.config = {\r\n\t\t\tautoTrack: true,\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\t// Set up online/offline detection\r\n\t\tthis.setupNetworkDetection();\r\n\r\n\t\t// Create ticket and set up auto-tracking\r\n\t\tconst ticket = await this.createTicket();\r\n\r\n\t\t// Start periodic flush\r\n\t\tthis.startPeriodicFlush();\r\n\r\n\t\tconsole.log(\"EventTracker SDK initialized successfully\");\r\n\t\treturn ticket;\r\n\t}\r\n\r\n\t/**\r\n\t * Check if the SDK is initialized\r\n\t */\r\n\tisInitialized(): boolean {\r\n\t\treturn this.config !== null && this.ticketId !== null;\r\n\t}\r\n\r\n\t/**\r\n\t * Get the current configuration\r\n\t */\r\n\tgetConfig(): EventTrackerConfig | null {\r\n\t\treturn this.config;\r\n\t}\r\n\r\n\t/**\r\n\t * Get the current ticket ID\r\n\t */\r\n\tgetTicketId(): string | null {\r\n\t\treturn this.ticketId;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a new ticket\r\n\t */\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\tconst response = await this.makeRequest(\"/api/v1/et/init\", {\r\n\t\t\t\tmethod: \"POST\",\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\t\t\t\"X-API-Key\": this.config.apiKey,\r\n\t\t\t\t},\r\n\t\t\t\tbody: JSON.stringify({\r\n\t\t\t\t\tagentId: this.config.agentId,\r\n\t\t\t\t\tsessionId: this.config.sessionId,\r\n\t\t\t\t}),\r\n\t\t\t});\r\n\r\n\t\t\tif (!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\t\t\t// Set up auto-tracking if enabled\r\n\t\t\tif (this.config.autoTrack) {\r\n\t\t\t\tthis.setupAutoTracking();\r\n\t\t\t}\r\n\t\t\treturn this.ticketId;\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error(\"EventTracker initialization failed:\", error);\r\n\t\t\tthrow error;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Log an event\r\n\t * @param eventType The type of event\r\n\t * @param eventData Optional event data\r\n\t */\r\n\tasync logEvent(eventType: string, eventData?: EventData): Promise<void> {\r\n\t\tif (!this.config || !this.ticketId) {\r\n\t\t\tconsole.warn(\"EventTracker not initialized, skipping event:\", eventType);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst event = {\r\n\t\t\teventType,\r\n\t\t\teventData,\r\n\t\t\ttimestamp: Date.now(),\r\n\t\t};\r\n\r\n\t\t// Add to queue for offline support\r\n\t\tthis.eventQueue.push(event);\r\n\r\n\t\t// Trim queue if too large\r\n\t\tif (this.eventQueue.length > (this.config.queueSize || 100)) {\r\n\t\t\tthis.eventQueue.shift();\r\n\t\t}\r\n\r\n\t\t// Try to send immediately if online\r\n\t\tif (this.isOnline) {\r\n\t\t\ttry {\r\n\t\t\t\tawait this.sendEvent(event);\r\n\t\t\t} catch (error) {\r\n\t\t\t\tconsole.warn(\"Failed to send event, will retry later:\", error);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Send an event to the server\r\n\t */\r\n\tprivate async sendEvent(event: {\r\n\t\teventType: string;\r\n\t\teventData?: EventData;\r\n\t\ttimestamp: number;\r\n\t}): Promise<void> {\r\n\t\tif (!this.config || !this.ticketId) return;\r\n\r\n\t\ttry {\r\n\t\t\tconst response = await this.makeRequest(\"/api/v1/et/event\", {\r\n\t\t\t\tmethod: \"POST\",\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\t\t\t\"X-API-Key\": this.config.apiKey,\r\n\t\t\t\t},\r\n\t\t\t\tbody: JSON.stringify({\r\n\t\t\t\t\tticketId: this.ticketId,\r\n\t\t\t\t\teventType: event.eventType,\r\n\t\t\t\t\teventData: event.eventData,\r\n\t\t\t\t}),\r\n\t\t\t});\r\n\r\n\t\t\tif (!response.ok) {\r\n\t\t\t\tthrow new Error(`Failed to log event: ${response.status} ${response.statusText}`);\r\n\t\t\t}\r\n\r\n\t\t\t// Remove from queue if successful\r\n\t\t\tconst index = this.eventQueue.findIndex((e) => e.timestamp === event.timestamp);\r\n\t\t\tif (index > -1) {\r\n\t\t\t\tthis.eventQueue.splice(index, 1);\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error(\"Event logging failed:\", error);\r\n\r\n\t\t\t// Add to retry queue\r\n\t\t\tthis.retryQueue.push(() => this.sendEvent(event));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Close the current ticket\r\n\t */\r\n\tasync closeTicket(): Promise<void> {\r\n\t\tif (!this.config || !this.ticketId) {\r\n\t\t\tthrow new Error(\"EventTracker not initialized\");\r\n\t\t}\r\n\r\n\t\t// Flush any pending events\r\n\t\tawait this.flush();\r\n\r\n\t\ttry {\r\n\t\t\tconst response = await this.makeRequest(\"/api/v1/et/close\", {\r\n\t\t\t\tmethod: \"POST\",\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\t\t\t\"X-API-Key\": this.config.apiKey,\r\n\t\t\t\t},\r\n\t\t\t\tbody: JSON.stringify({\r\n\t\t\t\t\tticketId: this.ticketId,\r\n\t\t\t\t}),\r\n\t\t\t});\r\n\r\n\t\t\tif (!response.ok) {\r\n\t\t\t\tthrow new Error(`Failed to close ticket: ${response.status} ${response.statusText}`);\r\n\t\t\t}\r\n\r\n\t\t\tthis.ticketId = null;\r\n\t\t\tthis.stopPeriodicFlush();\r\n\r\n\t\t\tconsole.log(\"Ticket closed successfully\");\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error(\"Ticket close failed:\", error);\r\n\t\t\tthrow error;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Flush all pending events\r\n\t */\r\n\tasync flush(): Promise<void> {\r\n\t\tif (!this.isOnline || this.eventQueue.length === 0) return;\r\n\r\n\t\tconst eventsToFlush = [...this.eventQueue];\r\n\r\n\t\tfor (const event of eventsToFlush) {\r\n\t\t\tawait this.sendEvent(event);\r\n\t\t}\r\n\r\n\t\t// Process retry queue\r\n\t\tconst retryItems = [...this.retryQueue];\r\n\t\tthis.retryQueue = [];\r\n\r\n\t\tfor (const retryFn of retryItems) {\r\n\t\t\ttry {\r\n\t\t\t\tawait retryFn();\r\n\t\t\t} catch (error) {\r\n\t\t\t\tconsole.error(\"Retry failed:\", error);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Make an HTTP request with retry logic\r\n\t */\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\t// Exponential backoff\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\t/**\r\n\t * Set up automatic event tracking\r\n\t */\r\n\tprivate setupAutoTracking(): void {\r\n\t\tif (typeof window === \"undefined\" || !this.config?.autoTrack) return;\r\n\r\n\t\tconst autoTrackConfig = this.config.autoTrack === true ? {} : this.config.autoTrack;\r\n\r\n\t\t// Track page visits\r\n\t\tif (autoTrackConfig.pageVisits !== false) {\r\n\t\t\tthis.logEvent(\"pageVisit\", {\r\n\t\t\t\turl: window.location.href,\r\n\t\t\t\ttitle: document.title,\r\n\t\t\t\treferrer: document.referrer,\r\n\t\t\t\tuserAgent: navigator.userAgent,\r\n\t\t\t\tviewport: {\r\n\t\t\t\t\twidth: window.innerWidth,\r\n\t\t\t\t\theight: window.innerHeight,\r\n\t\t\t\t},\r\n\t\t\t\ttimestamp: new Date().toISOString(),\r\n\t\t\t}).catch((error) => console.warn(\"Failed to track page visit:\", error));\r\n\t\t}\r\n\r\n\t\t// Track clicks on any clickable element\r\n\t\tif (autoTrackConfig.clicks !== false) {\r\n\t\t\tdocument.addEventListener(\"click\", (event) => {\r\n\t\t\t\tconst target = event.target as HTMLElement | HTMLButtonElement;\r\n\r\n\t\t\t\t// Track all clickable elements\r\n\t\t\t\tif (\r\n\t\t\t\t\ttarget.tagName === \"BUTTON\" ||\r\n\t\t\t\t\ttarget.tagName === \"A\" ||\r\n\t\t\t\t\ttarget.onclick ||\r\n\t\t\t\t\ttarget.getAttribute(\"role\") === \"button\" ||\r\n\t\t\t\t\t(target instanceof HTMLButtonElement && target.type === \"button\")\r\n\t\t\t\t) {\r\n\t\t\t\t\tthis.logEvent(\"click\", {\r\n\t\t\t\t\t\telement: target.tagName,\r\n\t\t\t\t\t\ttext: target.textContent?.trim().substring(0, 100), // Limit text length\r\n\t\t\t\t\t\thref: target.getAttribute(\"href\"),\r\n\t\t\t\t\t\tid: target.id,\r\n\t\t\t\t\t\tclassName: target.className,\r\n\t\t\t\t\t\trole: target.getAttribute(\"role\"),\r\n\t\t\t\t\t\tposition: {\r\n\t\t\t\t\t\t\tx: event.clientX,\r\n\t\t\t\t\t\t\ty: event.clientY,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\ttimestamp: new Date().toISOString(),\r\n\t\t\t\t\t}).catch((error) => console.warn(\"Failed to track click:\", error));\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Track form submissions\r\n\t\tif (autoTrackConfig.forms !== false) {\r\n\t\t\tdocument.addEventListener(\"submit\", (event) => {\r\n\t\t\t\tconst target = event.target as HTMLFormElement;\r\n\t\t\t\tconst formData = new FormData(target);\r\n\t\t\t\tconst formFields: Record<string, string> = {};\r\n\r\n\t\t\t\t// Convert FormData to plain object\r\n\t\t\t\tformData.forEach((value, key) => {\r\n\t\t\t\t\tformFields[key] = value.toString();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.logEvent(\"formSubmission\", {\r\n\t\t\t\t\tformId: target.id,\r\n\t\t\t\t\taction: target.action,\r\n\t\t\t\t\tmethod: target.method,\r\n\t\t\t\t\tfields: Object.keys(formFields),\r\n\t\t\t\t\tfieldCount: Object.keys(formFields).length,\r\n\t\t\t\t\ttimestamp: new Date().toISOString(),\r\n\t\t\t\t}).catch((error) => console.warn(\"Failed to track form submission:\", error));\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Track input changes (debounced)\r\n\t\tif (autoTrackConfig.inputs !== false) {\r\n\t\t\tlet inputTimer: ReturnType<typeof setInterval>;\r\n\t\t\tdocument.addEventListener(\"input\", (event) => {\r\n\t\t\t\tconst target = event.target as HTMLInputElement;\r\n\t\t\t\tif (\r\n\t\t\t\t\ttarget.tagName === \"INPUT\" ||\r\n\t\t\t\t\ttarget.tagName === \"TEXTAREA\" ||\r\n\t\t\t\t\ttarget.tagName === \"SELECT\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tclearTimeout(inputTimer);\r\n\t\t\t\t\tinputTimer = setTimeout(() => {\r\n\t\t\t\t\t\tthis.logEvent(\"fieldChange\", {\r\n\t\t\t\t\t\t\telement: target.tagName,\r\n\t\t\t\t\t\t\ttype: target.getAttribute(\"type\"),\r\n\t\t\t\t\t\t\tname: target.getAttribute(\"name\"),\r\n\t\t\t\t\t\t\tid: target.id,\r\n\t\t\t\t\t\t\tvalueLength: target.value?.length || 0,\r\n\t\t\t\t\t\t\ttimestamp: new Date().toISOString(),\r\n\t\t\t\t\t\t}).catch((error) => console.warn(\"Failed to track field change:\", error));\r\n\t\t\t\t\t}, 1000); // Debounce for 1 second\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Track page unload and session duration\r\n\t\tconst sessionStartTime = Date.now();\r\n\t\twindow.addEventListener(\"beforeunload\", () => {\r\n\t\t\tconst sessionDuration = Date.now() - sessionStartTime;\r\n\r\n\t\t\tthis.logEvent(\"pageUnload\", {\r\n\t\t\t\turl: window.location.href,\r\n\t\t\t\tsessionDuration: sessionDuration,\r\n\t\t\t\ttimestamp: new Date().toISOString(),\r\n\t\t\t});\r\n\r\n\t\t\t// Close ticket synchronously\r\n\t\t\tif (this.ticketId) {\r\n\t\t\t\tnavigator.sendBeacon(\r\n\t\t\t\t\t`${this.baseUrl}/api/v1/et/close`,\r\n\t\t\t\t\tJSON.stringify({\r\n\t\t\t\t\t\tticketId: this.ticketId,\r\n\t\t\t\t\t})\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Track visibility changes\r\n\t\tif (autoTrackConfig.visibility !== false) {\r\n\t\t\tdocument.addEventListener(\"visibilitychange\", () => {\r\n\t\t\t\tthis.logEvent(\"visibilityChange\", {\r\n\t\t\t\t\thidden: document.hidden,\r\n\t\t\t\t\tvisibilityState: document.visibilityState,\r\n\t\t\t\t\ttimestamp: new Date().toISOString(),\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Track errors\r\n\t\tif (autoTrackConfig.errors !== false) {\r\n\t\t\twindow.addEventListener(\"error\", (event) => {\r\n\t\t\t\tthis.logEvent(\"jsError\", {\r\n\t\t\t\t\tmessage: event.message,\r\n\t\t\t\t\tfilename: event.filename,\r\n\t\t\t\t\tlineno: event.lineno,\r\n\t\t\t\t\tcolno: event.colno,\r\n\t\t\t\t\ttimestamp: new Date().toISOString(),\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\t// Track unhandled promise rejections\r\n\t\t\twindow.addEventListener(\"unhandledrejection\", (event) => {\r\n\t\t\t\tthis.logEvent(\"unhandledRejection\", {\r\n\t\t\t\t\treason: event.reason?.toString(),\r\n\t\t\t\t\ttimestamp: new Date().toISOString(),\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Track performance metrics (if available)\r\n\t\tif (\r\n\t\t\tautoTrackConfig.performance !== false &&\r\n\t\t\ttypeof window.performance !== \"undefined\" &&\r\n\t\t\twindow.performance.navigation\r\n\t\t) {\r\n\t\t\twindow.addEventListener(\"load\", () => {\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tconst navigation = window.performance.navigation;\r\n\t\t\t\t\tconst timing = window.performance.timing;\r\n\r\n\t\t\t\t\tthis.logEvent(\"performanceMetrics\", {\r\n\t\t\t\t\t\tnavigationTime: timing.navigationStart,\r\n\t\t\t\t\t\tloadTime: timing.loadEventEnd - timing.navigationStart,\r\n\t\t\t\t\t\tdomReady: timing.domContentLoadedEventEnd - timing.navigationStart,\r\n\t\t\t\t\t\trenderTime: timing.loadEventEnd - timing.domContentLoadedEventEnd,\r\n\t\t\t\t\t\tnavigationType: navigation.type,\r\n\t\t\t\t\t\tredirectCount: navigation.redirectCount,\r\n\t\t\t\t\t\ttimestamp: new Date().toISOString(),\r\n\t\t\t\t\t});\r\n\t\t\t\t}, 1000);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Set up network detection\r\n\t */\r\n\tprivate setupNetworkDetection(): void {\r\n\t\tif (typeof window === \"undefined\") return;\r\n\r\n\t\tthis.isOnline = navigator.onLine;\r\n\r\n\t\twindow.addEventListener(\"online\", () => {\r\n\t\t\tthis.isOnline = true;\r\n\t\t\tconsole.log(\"EventTracker: Back online, flushing queued events\");\r\n\t\t\tthis.flush();\r\n\t\t});\r\n\r\n\t\twindow.addEventListener(\"offline\", () => {\r\n\t\t\tthis.isOnline = false;\r\n\t\t\tconsole.log(\"EventTracker: Offline, queueing events\");\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Start periodic flush timer\r\n\t */\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\t\tconst interval = this.config?.flushInterval || 5000;\r\n\t\tthis.flushTimer = setInterval(() => {\r\n\t\t\tthis.flush();\r\n\t\t}, interval);\r\n\t}\r\n\r\n\t/**\r\n\t * Stop periodic flush timer\r\n\t */\r\n\tprivate stopPeriodicFlush(): void {\r\n\t\tif (this.flushTimer) {\r\n\t\t\tclearInterval(this.flushTimer);\r\n\t\t\tthis.flushTimer = null;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// Create singleton instance\r\nexport const eventTracker = new EventTrackerSDK();\r\n\r\n// Also export for direct use in browsers\r\nif (typeof window !== \"undefined\") {\r\n\t(window as any).EventTracker = eventTracker;\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\n// Types for logout functionality\r\nexport interface LogoutPayload {\r\n\taction: string;\r\n\tuserId: string;\r\n}\r\n\r\n/**\r\n * Custom hook for handling agent logout functionality\r\n * @param options - Optional callbacks for success, error, and completion\r\n * @returns Object containing logout function and loading state\r\n */\r\nexport const useLogout = () => {\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(null);\r\n\tconst [data, setData] = useState(null);\r\n\r\n\t/**\r\n\t * Handles logout with current agent data\r\n\t * @param agentData - Object containing agent information\r\n\t */\r\n\r\n\tconst handleLogout = useCallback(async () => {\r\n\t\tconst state = JSON.parse(localStorage.getItem(\"call-control-sdk-state\") ?? \"\");\r\n\t\tsetLoading(true);\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\treturn 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\t\t\t\tlocalStorage.clear();\r\n\t\t\t\tsessionStorage.clear();\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\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","export const IP = \"10.10.102.42\";\r\nexport const BASE_URL = `http://${IP}:8095`;\r\nexport const WS_BASE_URL = `ws://${IP}:8095`;\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\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\tTRANSFER_TO_DETAILS: `${BASE_URL}${VERSION.v1}/cti/transfer-to-details?provider=convox`,\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};\r\n\r\nexport const WS_END_POINT = {\r\n\tWS: `${WS_BASE_URL}${VERSION.v1}/cti/ws`,\r\n};\r\n","/**\r\n * @fileoverview Axios HTTP Client Configuration\r\n * @description Configured Axios instance for Call Control SDK API communication.\r\n * Provides centralized HTTP client with authentication, error handling, and request/response interceptors.\r\n *\r\n * @author Achala IT Solutions\r\n * @version 1.0.0\r\n * @since 2024\r\n */\r\n\r\nimport axios, { AxiosInstance, AxiosResponse, AxiosError, InternalAxiosRequestConfig } from \"axios\";\r\nimport { BASE_URL } from \"./endPoint\";\r\n\r\n/**\r\n * @constant DEFAULT_TOKEN\r\n * @description Default authentication token for API requests\r\n * @declaration\r\n * ```typescript\r\n * const DEFAULT_TOKEN = \"12345\";\r\n * ```\r\n *\r\n * @requiredParams None\r\n *\r\n * @returnType `string`\r\n *\r\n * @example\r\n * ```typescript\r\n * console.log('Using token:', DEFAULT_TOKEN);\r\n * ```\r\n *\r\n * @return Default authentication token string\r\n *\r\n * @conclusion Temporary token for development - should be replaced with proper authentication in production.\r\n */\r\nconst DEFAULT_TOKEN = \"12345\";\r\n\r\n/**\r\n * @constant REQUEST_TIMEOUT\r\n * @description Default timeout for HTTP requests in milliseconds\r\n * @declaration\r\n * ```typescript\r\n * const REQUEST_TIMEOUT = 60000;\r\n * ```\r\n *\r\n * @requiredParams None\r\n *\r\n * @returnType `number`\r\n *\r\n * @example\r\n * ```typescript\r\n * console.log('Request timeout:', REQUEST_TIMEOUT); // 60000\r\n * ```\r\n *\r\n * @return Timeout value in milliseconds\r\n *\r\n * @conclusion Standard timeout for API requests to prevent hanging connections.\r\n */\r\nconst REQUEST_TIMEOUT = 60000;\r\n\r\n/**\r\n * @function getAuthToken\r\n * @description Retrieves the current authentication token for API requests\r\n *\r\n * @declaration\r\n * ```typescript\r\n * function getAuthToken(): string\r\n * ```\r\n *\r\n * @requiredParams None\r\n *\r\n * @returnType `string`\r\n *\r\n * @example\r\n * ```typescript\r\n * const token = getAuthToken();\r\n * console.log('Current token:', token);\r\n * ```\r\n *\r\n * @return Current authentication token\r\n *\r\n * @conclusion Centralized token retrieval function for consistent authentication.\r\n */\r\nfunction getAuthToken(): string {\r\n\t// TODO: Replace with proper token management (localStorage, sessionStorage, etc.)\r\n\treturn DEFAULT_TOKEN;\r\n}\r\n\r\n/**\r\n * @function createAxiosInstance\r\n * @description Creates a configured Axios instance with interceptors and default settings\r\n *\r\n * @declaration\r\n * ```typescript\r\n * function createAxiosInstance(): AxiosInstance\r\n * ```\r\n *\r\n * @requiredParams None\r\n *\r\n * @returnType `AxiosInstance`\r\n *\r\n * @example\r\n * ```typescript\r\n * const instance = createAxiosInstance();\r\n * instance.get('/api/users').then(response => console.log(response.data));\r\n * ```\r\n *\r\n * @return Configured Axios instance\r\n *\r\n * @conclusion Factory function for creating properly configured Axios instances.\r\n */\r\nfunction createAxiosInstance(): AxiosInstance {\r\n\tconst instance = axios.create({\r\n\t\tbaseURL: BASE_URL,\r\n\t\theaders: {\r\n\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\tAccept: \"application/json\",\r\n\t\t},\r\n\t\ttimeout: REQUEST_TIMEOUT,\r\n\t\twithCredentials: false, // Disable credentials for CORS\r\n\t});\r\n\r\n\t// Request interceptor for authentication\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 = `Bearer ${token}`;\r\n\t\t\t}\r\n\r\n\t\t\t// Add request timestamp for debugging\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\t// Response interceptor for error handling\r\n\tinstance.interceptors.response.use(\r\n\t\t(response: AxiosResponse) => {\r\n\t\t\t// Add response time for debugging\r\n\t\t\tconst endTime = new Date().getTime();\r\n\t\t\tconst startTime = (response.config as any).metadata?.startTime;\r\n\t\t\tif (startTime) {\r\n\t\t\t\tconsole.log(`Request to ${response.config.url} took ${endTime - startTime}ms`);\r\n\t\t\t}\r\n\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\t// Handle 401 Unauthorized errors\r\n\t\t\tif (error.response?.status === 401 && !originalRequest._retry) {\r\n\t\t\t\toriginalRequest._retry = true;\r\n\t\t\t\tconsole.warn(\"Unauthorized request, attempting retry...\");\r\n\r\n\t\t\t\t// TODO: Implement token refresh logic here\r\n\t\t\t\t// const newToken = await refreshToken();\r\n\t\t\t\t// if (newToken) {\r\n\t\t\t\t// originalRequest.headers!.Authorization = `Bearer ${newToken}`;\r\n\t\t\t\t// return instance(originalRequest);\r\n\t\t\t\t// }\r\n\t\t\t}\r\n\r\n\t\t\t// Handle network errors\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\t// Handle server errors\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\n/**\r\n * @constant axiosInstance\r\n * @description Pre-configured Axios instance for Call Control SDK API communication\r\n *\r\n * @declaration\r\n * ```typescript\r\n * const axiosInstance: AxiosInstance = createAxiosInstance();\r\n * ```\r\n *\r\n * @requiredParams None\r\n *\r\n * @returnType `AxiosInstance`\r\n *\r\n * @example\r\n * ```typescript\r\n * import axiosInstance from './axios';\r\n *\r\n * // Make GET request\r\n * const response = await axiosInstance.get('/api/calls');\r\n *\r\n * // Make POST request\r\n * const result = await axiosInstance.post('/api/calls', callData);\r\n * ```\r\n *\r\n * @return Configured Axios instance ready for use\r\n *\r\n * @conclusion Main HTTP client for all Call Control SDK API operations.\r\n */\r\nconst axiosInstance: AxiosInstance = createAxiosInstance();\r\n\r\nexport default axiosInstance;\r\n","import { useCallback, useState } from \"react\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\nexport interface EndCallPayload {\r\n action: string;\r\n disposition: string;\r\n userId: string;\r\n processid: string;\r\n mobile_number: string;\r\n set_followUp: string;\r\n callback_date: string;\r\n callback_hrs: string;\r\n callback_mins: string;\r\n refno?: string;\r\n}\r\n\r\n/**\r\n * Custom hook for handling end call functionality\r\n * @param options - Optional callbacks for success, error, and completion\r\n * @returns Object containing logout function and loading state\r\n */\r\n\r\nexport const useEndCall = () => {\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(null);\r\n const [data, setData] = useState(null);\r\n\r\n /**\r\n * Handles call end with current agent call\r\n * @param data - Object containing call disposition information\r\n */\r\n\r\n const handleEndCall = useCallback(\r\n async (data: {\r\n disposition?: string;\r\n followUp?: string;\r\n callbackDate?: string;\r\n callbackHrs?: string;\r\n callbackMins?: string;\r\n }) => {\r\n const state = JSON.parse(\r\n localStorage.getItem(\"call-control-sdk-state\") ?? \"\"\r\n );\r\n setLoading(true);\r\n const payload = {\r\n action: \"ENDCALL\",\r\n userId: state?.agentId,\r\n processid: state?.process?.process_id?.toString() ?? \"\",\r\n process_name: state?.process?.process_name ?? \"\",\r\n callreferenceid: state?.callData?.convox_id ?? \"\",\r\n mobile_number: state?.callData?.phone_number ?? \"\",\r\n\r\n disposition: data?.disposition ?? \"RES\",\r\n set_followUp: data?.followUp ?? \"N\",\r\n callback_date: data?.callbackDate ?? \"\",\r\n callback_hrs: data?.callbackHrs ?? \"\",\r\n callback_mins: data?.callbackMins ?? \"\",\r\n endcall_type: \"CLOSE\",\r\n };\r\n\r\n return axiosInstance\r\n .post(END_POINT.END_CALL, payload)\r\n .then((res) => {\r\n sdkStateManager.endCall();\r\n setData(res?.data);\r\n setSuccess(true);\r\n return res?.data;\r\n })\r\n .catch((err) => {\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 handleEndCall,\r\n isLoading: loading,\r\n isSuccess: success,\r\n isError: isError,\r\n error: error,\r\n data: data,\r\n };\r\n};\r\n","import { useCallback, useState } from \"react\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nexport interface StartCallPayload {\r\n\tmobileNumber: string;\r\n}\r\n\r\n/**\r\n * Custom hook for handling end call functionality\r\n * @param options - Optional callbacks for success, error, and completion\r\n * @returns Object containing logout function and loading state\r\n * @example\r\n * handleStartCall({ mobileNumber: \"1111111111\" });\r\n */\r\n\r\nexport const useClickToCall = () => {\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(null);\r\n\tconst [data, setData] = useState(null);\r\n\r\n\t/**\r\n\t * Handles call end with current agent call\r\n\t * @param mobileNumber - strng\r\n\t * @example\r\n\t * handleStartCall({ mobileNumber: \"1111111111\" });\r\n\t */\r\n\r\n\tconst handleStartCall = useCallback(async (data: StartCallPayload) => {\r\n\t\tconst state = JSON.parse(localStorage.getItem(\"call-control-sdk-state\") ?? \"\");\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\tsetData(res?.data);\r\n\t\t\t\t\tsetSuccess(true);\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\t\t\t\t\tsetError(err);\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\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\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\t\t\t\t\tsetSuccess(true);\r\n\t\t\t\t\tsdkStateManager.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\t\t\t\t\tsdkStateManager.setOpenConferenceDialog(true);\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\t\t\t\t\tsetError(err);\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","/**\r\n * @fileoverview CallControlPanel Component\r\n * @description Main wrapper component for the Call Control SDK interface.\r\n * Provides the primary entry point for integrating CTI functionality into React applications.\r\n *\r\n * @author Achala IT Solutions\r\n * @version 1.0.0\r\n * @since 2024\r\n */\r\n\r\nimport { memo, useCallback } from \"react\";\r\nimport type { CallControlPanelProps } from \"../../types\";\r\nimport { CallControls } from \"./callControls\";\r\nimport { SDKProvider } from \"./SDKProvider\";\r\n\r\n/**\r\n * @function CallControlPanel\r\n * @description Main wrapper component that provides the complete call control interface.\r\n * Wraps the CallControls component with necessary providers and context.\r\n *\r\n * @declaration\r\n * ```typescript\r\n * function CallControlPanel(props: CallControlPanelProps): JSX.Element\r\n * ```\r\n *\r\n * @requiredParams\r\n * - `props: CallControlPanelProps` - Component props including optional data change callback\r\n *\r\n * @returnType `JSX.Element`\r\n *\r\n * @example\r\n * ```tsx\r\n * // Basic usage\r\n * <CallControlPanel />\r\n *\r\n * // With data change callback\r\n * <CallControlPanel\r\n * onDataChange={(callData) => {\r\n * console.log('Call data updated:', callData);\r\n * // Handle call data changes\r\n * }}\r\n * />\r\n * ```\r\n *\r\n * @return React component providing complete call control interface\r\n *\r\n * @conclusion Primary component for integrating CTI functionality into React applications.\r\n */\r\nexport const CallControlPanel = memo<CallControlPanelProps>(({ onDataChange }) => {\r\n\t/**\r\n\t * @function handleDataChange\r\n\t * @description Internal handler for call data changes with error handling\r\n\t * @param data - Updated call data\r\n\t */\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\n// Set display name for debugging\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} 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, { useCallback, useEffect, useRef, useState } from \"react\";\r\n\r\nimport type { CallControlPanelProps, ConferenceLineTypes } from \"../../types\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\nimport { useDraggable } from \"../hooks/useDraggable\";\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\nimport { END_POINT, IP, WS_END_POINT } from \"../services/endPoint\";\r\nimport { usePostRequest } from \"../services/request\";\r\n\r\nimport {\r\n\tCallHistoryDialog,\r\n\tCallTransferDialog,\r\n\tConferenceDialog,\r\n\tEndCallDispositionDialog,\r\n\tProcessorListDialog,\r\n} from \"./dialog\";\r\nimport useStyles from \"./styles\";\r\nimport axiosInstance from \"../services/axios\";\r\nimport { useToast } from \"../services/toastMessage\";\r\n\r\nconst getCombineConfrenceData = (\r\n\tconferenceData: ConferenceLineTypes[],\r\n\tapiData: any,\r\n\tdata: any\r\n) => {\r\n\tconst updatedConferenceData = conferenceData.map((item) => {\r\n\t\tif (item?.line === 1) {\r\n\t\t\treturn {\r\n\t\t\t\tline: 1,\r\n\t\t\t\tstatus: data?.status ?? \"\",\r\n\t\t\t\ttype: \"internal\" as \"internal\" | \"external\" | \"\",\r\n\t\t\t\tphone: data?.phone_number ?? \"\",\r\n\t\t\t\tisMute: false,\r\n\t\t\t\tisHold: false,\r\n\t\t\t\tisMergeCall: false,\r\n\t\t\t\tisCallStart: true,\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: apiData[statusKey] ?? \"IDLE\",\r\n\t\t\t\tphone: apiData[phoneKey] !== \"0\" ? apiData[phoneKey] : \"\",\r\n\t\t\t};\r\n\t\t}\r\n\t});\r\n\treturn updatedConferenceData;\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\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 webSocketRef = useRef<WebSocket | null>(null);\r\n\tconst [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [showIframe, setShowIframe] = useState<boolean>(true);\r\n\tconst [statusAnchorEl, setStatusAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [dialerAnchorEl, setDialerAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [openCallDisposition, setOpenCallDisposition] = useState(false);\r\n\tconst [openProcessorDialog, setOpenProcessorDialog] = useState(false);\r\n\tconst [openCallHistoryDialog, setOpenCallHistoryDialog] = useState(false);\r\n\tconst [processList, setProcessList] = useState(null);\r\n\tconst [phoneNumber, setPhoneNumber] = useState<string>(\"\");\r\n\tconst [callDuration, setCallDuration] = useState(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\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\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setHolding(!state.isHolding);\r\n\t\t},\r\n\t\tonError: (error) => {\r\n\t\t\tconsole.log(\"error\", error);\r\n\t\t},\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\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setMuted(!state.isMuted);\r\n\t\t},\r\n\t\tonError: (error) => {\r\n\t\t\tconsole.log(\"error\", error);\r\n\t\t},\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\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 [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\r\n\tconst formatDuration = useCallback((seconds: number): string => {\r\n\t\tconst mins = Math.floor(seconds / 60);\r\n\t\tconst secs = seconds % 60;\r\n\t\treturn `${mins.toString().padStart(2, \"0\")}:${secs.toString().padStart(2, \"0\")}`;\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\tsdkStateManager.setStatus(\"dial\");\r\n\t};\r\n\r\n\tconst handleCloseDialer = () => {\r\n\t\tif (state.status !== \"on call\") {\r\n\t\t\tsdkStateManager.setStatus(\"idle\");\r\n\t\t}\r\n\r\n\t\tsetDialerAnchorEl(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\t// // call control API's // //\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\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);\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\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.isHolding ? \"UNHOLD\" : \"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.isMuted ? \"UNMUTE\" : \"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}) => {\r\n\t\tconsole.log(\"data\", data);\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\tsdkStateManager.endCall();\r\n\t\tsetOpenCallDisposition(false);\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\t// Call duration timer\r\n\tuseEffect(() => {\r\n\t\tlet interval: ReturnType<typeof setInterval>;\r\n\r\n\t\tif (state.callData.status && state.callData.status === \"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\treturn () => {\r\n\t\t\tif (interval) clearInterval(interval);\r\n\t\t};\r\n\t}, [state.callData.status]);\r\n\r\n\t// Notify parent of data changes\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\tconsole.log(res.data.data, \"res4\");\r\n\t\t\t\t\tif (res && res.data && res?.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\tsdkStateManager.setProcess(res?.data?.data[0]);\r\n\t\t\t\t\t\tsetOpenProcessorDialog(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\t\t} else {\r\n\t\t\tconsole.log(\"No agentId available, skipping API call\");\r\n\t\t}\r\n\t}, [state.agentId]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (state.agentId) {\r\n\t\t\twebSocketRef.current = new WebSocket(`${WS_END_POINT.WS}?agent_id=${state.agentId}`);\r\n\r\n\t\t\twebSocketRef.current.onopen = () => {\r\n\t\t\t\tconsole.log(\"WebSocket connection established\");\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\t\t\t\t\tconst confrence = getCombineConfrenceData(\r\n\t\t\t\t\t\tstate?.conferenceLine,\r\n\t\t\t\t\t\tdata?.conferencestatus,\r\n\t\t\t\t\t\tdata\r\n\t\t\t\t\t);\r\n\t\t\t\t\tconsole.log(confrence, \"parsedJSON:\", data);\r\n\t\t\t\t\tsdkStateManager.updateCallData(data);\r\n\t\t\t\t\tsdkStateManager.updateConferenceData([...confrence]);\r\n\t\t\t\t\tif (data.status === \"ONCALL\") {\r\n\t\t\t\t\t\tsdkStateManager.startCall();\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}\r\n\t\t\t\t\tif (data.status === \"WRAPUP\") {\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.log(\"Raw message:\", event.data);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\twebSocketRef.current.onclose = () => {\r\n\t\t\t\tconsole.log(\"WebSocket connection closed\");\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}\r\n\r\n\t\treturn () => {\r\n\t\t\twebSocketRef.current?.close();\r\n\t\t};\r\n\t}, [state.agentId]);\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{/* Processor List Dialog */}\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{/* Status and Timer Row */}\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\t// backgroundColor: \"red\",\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\t// m={1}\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<Box\r\n\t\t\t\t\t\t\t\t\tsx={\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// marginRight: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t// backgroundColor: \"blue\",\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\t\t{/* Dial Button */}\r\n\t\t\t\t\t\t\t\t\t{!state.sdkConfig?.disabledDialButton && (\r\n\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Dial\">\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\tstate.callData?.status?.toUpperCase() !== \"ONCALL\" &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() !== \"BREAK\" &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() !== \"RINGING\" &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() !== \"WRAPUP\"\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\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\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"warning\",\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<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\tstate.callData?.status?.toUpperCase() === \"ONCALL\" ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() === \"BREAK\" ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() === \"RINGING\" ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() === \"WRAPUP\"\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\"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</Tooltip>\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{/* Call Duration */}\r\n\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tcolor: \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\twidth: \"40px\",\r\n\t\t\t\t\t\t\t\t\t\tmarginRight: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tfontSize: \"18px\",\r\n\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\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{formatDuration(callDuration)}\r\n\t\t\t\t\t\t\t\t</Typography>\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{/* Control Buttons */}\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{/* Agent Ready */}\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\tstate.callData?.status?.toUpperCase() === \"BREAK\" ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() === \"MISSED\"\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\tstate.callData?.status?.toUpperCase() === \"BREAK\" ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() === \"MISSED\"\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\tstate.callData?.status?.toUpperCase() === \"BREAK\" ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() === \"MISSED\"\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\tstate.callData?.status?.toUpperCase() === \"BREAK\" ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() === \"MISSED\"\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{/* Hold Button */}\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.isHolding ? \"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\tstate.isHolding && state.callData?.status?.toUpperCase() === \"ONCALL\" ?\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\tstate.isHolding && state.callData?.status?.toUpperCase() === \"ONCALL\" ?\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: state.callData?.status?.toUpperCase() === \"ONCALL\" ?\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() !== \"ONCALL\" && !state.isHolding) ||\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.isHolding ?\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{/* Mute Button */}\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.isMuted ? \"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\tstate.isMuted && state.callData?.status?.toUpperCase() === \"ONCALL\" ?\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.isMuted && state.callData?.status?.toUpperCase() === \"ONCALL\" ?\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: state.callData?.status?.toUpperCase() === \"ONCALL\" ?\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() !== \"ONCALL\" && !state.isMuted) ||\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}\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.isMuted ?\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{/* Call Transfer */}\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 (state.callData?.status?.toUpperCase() === \"ONCALL\") {\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: state.callData?.status?.toUpperCase() === \"ONCALL\" ?\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={state.callData?.status?.toUpperCase() !== \"ONCALL\"}\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{/* Call Conference Button */}\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 (state.callData?.status?.toUpperCase() === \"ONCALL\") {\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: state.callData?.status?.toUpperCase() === \"ONCALL\" ?\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={state.callData?.status?.toUpperCase() !== \"ONCALL\"}\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{/* End Call Button */}\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\tstate.callData?.status?.toUpperCase() === \"ONCALL\" ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() === \"RINGING\" ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() === \"WRAPUP\"\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\tstate.callData?.status?.toUpperCase() === \"ONCALL\" ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() === \"RINGING\" ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() === \"WRAPUP\"\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\tstate.callData?.status?.toUpperCase() === \"ONCALL\" ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() === \"RINGING\" ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() === \"WRAPUP\"\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(state.callData?.status?.toUpperCase() !== \"ONCALL\" &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() !== \"RINGING\" &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() !== \"WRAPUP\") ||\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</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\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={`https://${IP}/ConVoxCCS/iframe?agent_id=${state.agentId}&process_id=${state.process?.process_id}`}\r\n\t\t\t\t\t\t\theight={380}\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{/* Dialer */}\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\tsetPhoneNumber(e.target.value);\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{/* Status */}\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<MenuItem onClick={() => handleUpdateAgentStatus(\"Lunch\")}>- Lunch</MenuItem>\r\n\t\t\t\t<MenuItem onClick={() => handleUpdateAgentStatus(\"Tea\")}>- Tea</MenuItem>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t{/* Queue Count */}\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{/* Conference Call Dialog */}\r\n\t\t\t{Boolean(state.openConferenceDialog) && <ConferenceDialog />}\r\n\r\n\t\t\t{/* Call Transfer Dialog */}\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{/* Call Disposition Dialog */}\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{/* Call Disposition Dialog */}\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\nimport { type MouseEvent, type TouchEvent, useCallback, useRef, useState } from \"react\";\r\n\r\n/**\r\n * Represents a 2D position on the screen in pixels.\r\n *\r\n * @typedef {Object} Position\r\n * @property {number} x - The horizontal coordinate in pixels.\r\n * @property {number} y - The vertical coordinate in pixels.\r\n */\r\ninterface Position {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\n/**\r\n * The return type of the `useDraggable` hook.\r\n *\r\n * @typedef {Object} UseDraggableReturn\r\n * @property {Position} position - The current position of the draggable element in `{x, y}` pixels.\r\n * @property {boolean} isDragging - Whether the element is currently being dragged.\r\n * @property {React.RefObject<HTMLDivElement | null>} dragRef - Ref to attach to the draggable DOM element.\r\n * @property {(e: MouseEvent<HTMLDivElement>) => void} handleMouseDown - Mouse down handler to start dragging.\r\n * @property {(e: TouchEvent<HTMLDivElement>) => void} handleTouchStart - Touch start handler to start dragging.\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\n/**\r\n * A custom React hook that enables drag-and-drop functionality for a DOM element,\r\n * with position constraints inside the viewport and an optional position change callback.\r\n *\r\n * @param {Position} initialPosition - The starting `{x, y}` position of the element in pixels.\r\n * @param {(position: Position) => void} [onPositionChange] - Optional callback fired whenever position changes.\r\n *\r\n * @returns {UseDraggableReturn} - Object containing the element's current position, drag state, event handlers, and ref.\r\n *\r\n * @example\r\n * ```tsx\r\n * const { dragRef, handleMouseDown, handleTouchStart, position } =\r\n * useDraggable({ x: 100, y: 200 }, (pos) => console.log(\"Moved to:\", pos));\r\n *\r\n * return (\r\n * <div\r\n * ref={dragRef}\r\n * onMouseDown={handleMouseDown}\r\n * onTouchStart={handleTouchStart}\r\n * style={{\r\n * position: \"absolute\",\r\n * left: position.x,\r\n * top: position.y,\r\n * }}\r\n * >\r\n * Drag me\r\n * </div>\r\n * );\r\n * ```\r\n *\r\n * @developerNotes\r\n * - **Performance**: This hook uses `useCallback` to memoize handlers, preventing unnecessary re-renders in the consuming component.\r\n * - **Repaint Efficiency**: Position updates use state but are constrained to the viewport, so excessive off-screen rendering is avoided.\r\n * - **Refs for Persistence**: Drag start positions are stored in `useRef` to avoid triggering re-renders mid-drag.\r\n * - **Pointer Events**: Prevent default behavior in touch/mouse events to stop unwanted scrolling while dragging.\r\n * - **Viewport Constraints**: `updatePosition` ensures the draggable element never goes outside the visible browser window.\r\n * - **Mobile Support**: Touch events are handled alongside mouse events for full cross-device compatibility.\r\n */\r\nexport function useDraggable(\r\n\tinitialPosition: Position,\r\n\tonPositionChange?: (_position: Position) => void\r\n): UseDraggableReturn {\r\n\t/** Current position of the draggable element. */\r\n\tconst [position, setPosition] = useState<Position>(initialPosition);\r\n\r\n\t/** Whether the element is currently being dragged. */\r\n\tconst [isDragging, setIsDragging] = useState(false);\r\n\r\n\t/** Ref to the draggable DOM element. Attach this to your draggable container. */\r\n\tconst dragRef = useRef<HTMLDivElement>();\r\n\r\n\t/** Starting cursor/touch position at drag start. */\r\n\tconst dragStart = useRef<Position>({ x: 0, y: 0 });\r\n\r\n\t/** Starting element position at drag start. */\r\n\tconst elementStart = useRef<Position>({ x: 0, y: 0 });\r\n\r\n\t/**\r\n\t * Updates the element's position and fires `onPositionChange` if provided.\r\n\t * Constrains position so the element stays within viewport bounds.\r\n\t */\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\t/**\r\n\t * Begins drag logic and attaches move/end event listeners.\r\n\t */\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\t/** Updates position based on pointer movement delta. */\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\t/** Handles mouse movement during drag. */\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\t/** Handles touch movement during drag. */\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\t/** Ends dragging and removes event listeners. */\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\t// Attach listeners\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\t/**\r\n\t * Mouse down handler to start dragging.\r\n\t */\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\t/**\r\n\t * Touch start handler to start dragging.\r\n\t */\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","import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport type { SDKState } from \"../../types\";\r\n\r\n/**\r\n * Custom React hook that provides the current SDK state and automatically\r\n * updates the state when changes occur in the `sdkStateManager`.\r\n *\r\n * @function useSDKState\r\n * @returns {SDKState} The latest SDK state object from the SDK state manager.\r\n *\r\n * @example\r\n * // Example usage in a component\r\n * import { useSDKState } from \"../hooks/useSDKState\";\r\n *\r\n * function CallControls() {\r\n * const sdkState = useSDKState();\r\n *\r\n * if (!sdkState.isInitialized) {\r\n * return <div>SDK not initialized</div>;\r\n * }\r\n *\r\n * return (\r\n * <div>\r\n * Status: {sdkState.status}\r\n * {sdkState.isMuted ? \"🔇\" : \"🎤\"}\r\n * </div>\r\n * );\r\n * }\r\n */\r\nexport function useSDKState(): SDKState {\r\n /**\r\n * Local React state holding the current SDK state.\r\n * Initialized from the sdkStateManager's current state.\r\n */\r\n const [state, setState] = useState<SDKState>(sdkStateManager.getState());\r\n\r\n /**\r\n * Sets up a subscription to the sdkStateManager on component mount.\r\n * Whenever the SDK state changes, this updates the local `state`.\r\n * Cleans up the subscription on component unmount.\r\n */\r\n useEffect(() => {\r\n // Subscribe to state changes from the sdkStateManager\r\n const unsubscribe = sdkStateManager.subscribe(() => {\r\n // Update local React state with the latest SDK state\r\n setState(sdkStateManager.getState());\r\n });\r\n\r\n // Return the unsubscribe function to clean up\r\n return unsubscribe;\r\n }, []);\r\n\r\n /**\r\n * Return the current SDK state to the calling component.\r\n */\r\n return 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, // Initially not loading\r\n\tisSuccess: false, // Initially no success\r\n\tisError: false, // Initially no error\r\n\terror: null, // No error to show\r\n\tdata: null, // No data to show\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\n/**\r\n * @author Achala IT Solutions\r\n * @here Declares the `useGetRequest` custom hook.\r\n * @description Performs a typed HTTP GET request using Axios with internal state and toast notification support.\r\n * Accepts optional success and error callbacks and returns a request function with response state.\r\n *\r\n * @params\r\n * - props: An optional object containing `onSuccess` and `onError` handlers for request lifecycle callbacks.\r\n *\r\n * @example\r\n * const [getUser, userState] = useGetRequest<User>({\r\n * onSuccess: (res) => console.log(res),\r\n * onError: (err) => console.error(err),\r\n * });\r\n * getUser(\"/api/user\");\r\n *\r\n * @returns A tuple containing:\r\n * - A function to perform the GET request.\r\n * - A state object representing loading, error, and data.\r\n */\r\nexport const useGetRequest = <T = UseGetRequest>(\r\n\t/**\r\n\t * @param props Optional handlers for success and error callbacks.\r\n\t */\r\n\tprops: RequestOptions = {}\r\n\t/**\r\n\t * getRequest: Function to trigger the GET call.\r\n\t * state: Holds request state (loading, success, error, data).\r\n\t */\r\n): [(_url: string, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\t/**\r\n\t * Destructure and provide default values for optional success and error handlers.\r\n\t */\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\t/**\r\n\t * Access the toast notification function from a custom toast context.\r\n\t */\r\n\tconst { showToast } = useToast();\r\n\r\n\t/**\r\n\t * State to manage request lifecycle and request data.\r\n\t */\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\t/**\r\n\t * @function getRequest\r\n\t * @description Makes the GET request, updates internal state, handles success/error, and triggers notifications.\r\n\t * @param url - The API endpoint to call.\r\n\t * @param config - Optional Axios request config (headers, params, etc.)\r\n\t */\r\n\tconst getRequest = useCallback(\r\n\t\t(url: string, config = {}) => {\r\n\t\t\t/**\r\n\t\t\t * Set loading state before making the request.\r\n\t\t\t */\r\n\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\t\t\t/**\r\n\t\t\t * Execute the GET request using Axios instance.\r\n\t\t\t */\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\t/**\r\n\t\t\t\t\t * On success, store response data and update success state.\r\n\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined success handler if available.\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\t/**\r\n\t\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Show error message via toast system.\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Construct normalized error object from AxiosError.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Show error message via toast system.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t */\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] // Dependencies for memoization\r\n\t);\r\n\r\n\t/**\r\n\t * @returns A tuple containing the GET function and the current request state.\r\n\t */\r\n\treturn [getRequest, state];\r\n};\r\n\r\n/**\r\n * @author Achala IT Solutions\r\n * @here Declares the `usePostRequest` custom hook.\r\n * @description Sends a typed POST request via Axios and manages the request state, error handling, and toast notifications.\r\n *\r\n * @params\r\n * - props: Optional object containing `onSuccess` and `onError` callback handlers.\r\n *\r\n * @example\r\n * const [createUser, state] = usePostRequest<User>({\r\n * onSuccess: (res) => console.log(\"User created\", res),\r\n * onError: (err) => console.error(\"Failed to create\", err),\r\n * });\r\n * createUser(\"/api/users\", payload);\r\n *\r\n * @returns A tuple:\r\n * - postRequest: Function to execute the POST call.\r\n * - state: Object containing isLoading, isError, isSuccess, error, and data.\r\n */\r\nexport const usePostRequest = <T = UsePostRequest>(\r\n\t/**\r\n\t * @param props Optional handlers for success and error callbacks.\r\n\t */\r\n\tprops: RequestOptions = {}\r\n): [\r\n\t/**\r\n\t * postRequest: Function to trigger the POST call.\r\n\t * state: Holds request state (loading, success, error, data).\r\n\t */\r\n\t(_url: string, _payload: T, _config?: AxiosRequestConfig) => void,\r\n\tRequestResult<T>,\r\n] => {\r\n\t/**\r\n\t * Destructure and provide default values for optional success and error handlers.\r\n\t */\r\n\tconst { onSuccess = null, onError = null, disabledSuccessToast = false } = props;\r\n\r\n\t/**\r\n\t * Access the toast notification function from a custom toast context.\r\n\t */\r\n\tconst { showToast } = useToast();\r\n\r\n\t/**\r\n\t * State to manage request lifecycle and request data.\r\n\t */\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\t/**\r\n\t * @function postRequest\r\n\t * @description Sends a POST request, updates state, and calls handlers.\r\n\t * @param url - Endpoint to which data is posted.\r\n\t * @param payload - Request body data to be sent.\r\n\t * @param config - Optional Axios request configuration.\r\n\t */\r\n\tconst postRequest = useCallback(\r\n\t\t(url: string, payload: T, config = {}) => {\r\n\t\t\t/**\r\n\t\t\t * Set loading state before making the request.\r\n\t\t\t */\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\t/**\r\n\t\t\t * Execute the POST request using Axios instance.\r\n\t\t\t */\r\n\t\t\taxiosInstance\r\n\t\t\t\t.post(url, payload, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * On success, store response data and update success state.\r\n\t\t\t\t\t */\r\n\r\n\t\t\t\t\t// if (res.data?.success) {\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\t/**\r\n\t\t\t\t\t * Invoke user-defined success handler if available.\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\tconsole.log(res.data?.message, \"res45\");\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\r\n\t\t\t\t\t// } else {\r\n\t\t\t\t\t// /**\r\n\t\t\t\t\t// * Update state with error information.\r\n\t\t\t\t\t// */\r\n\r\n\t\t\t\t\t// dispatch({\r\n\t\t\t\t\t// type: \"isError\",\r\n\t\t\t\t\t// payload: res.data,\r\n\t\t\t\t\t// });\r\n\r\n\t\t\t\t\t// /**\r\n\t\t\t\t\t// * Show error message via toast system.\r\n\t\t\t\t\t// */\r\n\r\n\t\t\t\t\t// showToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t// /**\r\n\t\t\t\t\t// * Invoke user-defined error handler if available.\r\n\t\t\t\t\t// */\r\n\r\n\t\t\t\t\t// onError?.(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\t/**\r\n\t\t\t\t\t * Construct normalized error object from AxiosError.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Show error message using toast system.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t */\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] // Dependencies for memoization\r\n\t);\r\n\r\n\t/**\r\n\t * @returns A tuple containing the POST function and the current request state.\r\n\t */\r\n\treturn [postRequest, state];\r\n};\r\n\r\n/**\r\n * @author Achala IT Solutions\r\n * @here Declares the `usePutRequest` custom hook.\r\n * @description Sends a typed PUT request using Axios and manages its state, including success and error handling via callbacks and toast messages.\r\n *\r\n * @params\r\n * - props: Optional object with `onSuccess` and `onError` handlers for request lifecycle management.\r\n *\r\n * @example\r\n * const [updateUser, state] = usePutRequest<User>({\r\n * onSuccess: (res) => console.log(\"Updated!\", res),\r\n * onError: (err) => console.error(\"Update failed\", err),\r\n * });\r\n * updateUser(\"/api/users/1\", updatedPayload);\r\n *\r\n * @returns A tuple:\r\n * - putRequest: Function to trigger the PUT call.\r\n * - state: Object containing isLoading, isSuccess, isError, error, and data.\r\n */\r\nexport const usePutRequest = <T = UsePutRequest>(\r\n\t/**\r\n\t * @param props Optional success and error callback functions.\r\n\t */\r\n\tprops: RequestOptions = {}\r\n): [\r\n\t/**\r\n\t * putRequest: Function to perform the PUT request.\r\n\t * state: Holds the status and result of the request.\r\n\t */\r\n\t(_url: string, _payload: T, _config?: AxiosRequestConfig) => void,\r\n\tRequestResult<T>,\r\n] => {\r\n\t/**\r\n\t * Destructure handlers from props, with defaults.\r\n\t */\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\t/**\r\n\t * Access the toast notification function from a custom toast context.\r\n\t */\r\n\tconst { showToast } = useToast();\r\n\r\n\t/**\r\n\t * State to manage request lifecycle and request data.\r\n\t */\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\t/**\r\n\t * @function putRequest\r\n\t * @description Executes a PUT HTTP request and updates state accordingly.\r\n\t * @param url - The endpoint URL to which the PUT request is made.\r\n\t * @param payload - The request body data.\r\n\t * @param config - Optional Axios request config object.\r\n\t */\r\n\tconst putRequest = useCallback(\r\n\t\t(url: string, payload: T, config = {}) => {\r\n\t\t\t/**\r\n\t\t\t * Set loading state before making the request.\r\n\t\t\t */\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\t/**\r\n\t\t\t * Execute the PUT request using Axios instance.\r\n\t\t\t */\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\t/**\r\n\t\t\t\t\t * On success, store response data and update success state.\r\n\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined success handler if available.\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\t/**\r\n\t\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Show error message via toast system.\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Construct normalized error object from AxiosError.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Show error message via toast system.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t */\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] // Dependencies for memoization\r\n\t);\r\n\r\n\t/**\r\n\t * @returns A tuple containing the PUT function and the current request state.\r\n\t */\r\n\treturn [putRequest, state];\r\n};\r\n\r\n/**\r\n * @author Achala IT Solutions\r\n * @here Declares the `useDeleteRequest` custom hook.\r\n * @description Sends a DELETE request using Axios and manages request state with toast notifications and optional success/error handlers.\r\n *\r\n * @params\r\n * - props: Optional callbacks `onSuccess` and `onError` to handle API response lifecycle events.\r\n *\r\n * @example\r\n * const [deleteUser, state] = useDeleteRequest({\r\n * onSuccess: (res) => console.log(\"Deleted!\", res),\r\n * onError: (err) => console.error(\"Delete failed\", err),\r\n * });\r\n * deleteUser(\"/api/users/1\");\r\n *\r\n * @returns A tuple:\r\n * - deleteRequest: Function to send the DELETE request.\r\n * - state: Object holding request status (`isLoading`, `isSuccess`, `isError`), response data, and error.\r\n */\r\nexport const useDeleteRequest = <T = UseDeleteRequest>(\r\n\t/**\r\n\t * @param props Optional handlers for success and error callbacks.\r\n\t */\r\n\tprops: RequestOptions = {}\r\n): [\r\n\t/**\r\n\t * deleteRequest: Function that initiates the DELETE API call.\r\n\t * state: Object describing the request’s current status and result.\r\n\t */\r\n\t(_url: string, _config?: AxiosRequestConfig) => void,\r\n\tRequestResult<T>,\r\n] => {\r\n\t/**\r\n\t * Destructure and provide default values for optional success and error handlers.\r\n\t */\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\t/**\r\n\t * Access the toast notification function from a custom toast context.\r\n\t */\r\n\tconst { showToast } = useToast();\r\n\r\n\t/**\r\n\t * State to manage request lifecycle and request data.\r\n\t */\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\t/**\r\n\t * @function deleteRequest\r\n\t * @description Executes a DELETE API call and handles response or errors.\r\n\t *\r\n\t * @param url - The endpoint to delete the resource from.\r\n\t * @param config - Optional Axios request configuration (e.g., headers).\r\n\t */\r\n\tconst deleteRequest = useCallback(\r\n\t\t(url: string, config = {}) => {\r\n\t\t\t/**\r\n\t\t\t * Set loading state before making the request.\r\n\t\t\t */\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\t/**\r\n\t\t\t * Execute the DELETE request using Axios instance.\r\n\t\t\t */\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\t/**\r\n\t\t\t\t\t * On success, store response data and update success state.\r\n\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined success handler if available.\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\t/**\r\n\t\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Show error message via toast system.\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Construct normalized error object from AxiosError.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Show error message via toast system.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t */\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] // Dependencies for memoization\r\n\t);\r\n\r\n\t/**\r\n\t * @returns A tuple containing the DELETE function and the current request state.\r\n\t */\r\n\treturn [deleteRequest, state];\r\n};\r\n\r\n/**\r\n * @author Achala IT Solutions\r\n * @here Declares the `usePatchRequest` custom hook.\r\n * @description Executes a PATCH request using Axios with built-in state management, error handling, and toast support.\r\n *\r\n * @params\r\n * - props: Optional object containing `onSuccess` and `onError` callback handlers.\r\n *\r\n * @example\r\n * const [patchData, state] = usePatchRequest({\r\n * onSuccess: (res) => console.log(\"Patched successfully\", res),\r\n * onError: (err) => console.error(\"Patch failed\", err),\r\n * });\r\n *\r\n * patchData(\"/api/users/1\", { name: \"Updated Name\" });\r\n *\r\n * @returns A tuple:\r\n * - patchRequest: Function that triggers the PATCH API call.\r\n * - state: Object holding request lifecycle flags, response data, and error.\r\n */\r\nexport const usePatchRequest = <T = UsePatchRequest>(\r\n\t/**\r\n\t * @param props Optional handlers for success and error callbacks.\r\n\t */\r\n\tprops: RequestOptions = {}\r\n): [\r\n\t/**\r\n\t * patchRequest: Function to initiate a PATCH request.\r\n\t * state: The internal state of the request lifecycle.\r\n\t */\r\n\t(_url: string, _payload: T, _config?: AxiosRequestConfig) => void,\r\n\tRequestResult<T>,\r\n] => {\r\n\t/**\r\n\t * Destructure and provide default values for optional success and error handlers.\r\n\t */\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\t/**\r\n\t * Access the toast notification function from a custom toast context.\r\n\t */\r\n\tconst { showToast } = useToast();\r\n\r\n\t/**\r\n\t * State to manage request lifecycle and request data.\r\n\t */\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\t/**\r\n\t * @function patchRequest\r\n\t * @description Triggers a PATCH HTTP request to the given endpoint with payload and optional config.\r\n\t * @param url - API endpoint for the PATCH request.\r\n\t * @param payload - The data to send in the request body.\r\n\t * @param config - Optional Axios configuration (headers, params, etc.)\r\n\t */\r\n\tconst patchRequest = useCallback(\r\n\t\t(url: string, payload: T, config = {}) => {\r\n\t\t\t/**\r\n\t\t\t * Set loading state before making the request.\r\n\t\t\t */\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\t\t\t/**\r\n\t\t\t * Execute the PATCH request using Axios instance.\r\n\t\t\t */\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\t/**\r\n\t\t\t\t\t * On success, store response data and update success state.\r\n\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined success handler if available.\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\t/**\r\n\t\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t\t */\r\n\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\t/**\r\n\t\t\t\t\t\t * Show error message via toast system.\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\t/**\r\n\t\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Construct normalized error object from AxiosError.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Show error message via toast system.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * Update state with error information.\r\n\t\t\t\t\t */\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\t/**\r\n\t\t\t\t\t * Invoke user-defined error handler if available.\r\n\t\t\t\t\t */\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] // Dependencies for memoization\r\n\t);\r\n\r\n\t/**\r\n\t * @returns A tuple containing the PATCH function and the current request state.\r\n\t */\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 showToast: (message: string, severity?: AlertColor) => void;\r\n};\r\n\r\nconst ToastContext = createContext<ToastContextType | undefined>(undefined);\r\n\r\nexport const useToast = () => {\r\n const ctx = useContext(ToastContext);\r\n if (!ctx) throw new Error(\"useToast must be used inside ToastProvider\");\r\n return ctx;\r\n};\r\n\r\nexport const ToastProvider = ({ children }: { children: ReactNode }) => {\r\n const [open, setOpen] = useState(false);\r\n const [message, setMessage] = useState(\"\");\r\n const [severity, setSeverity] = useState<AlertColor>(\"info\");\r\n\r\n const showToast = (msg: string, sev: AlertColor = \"info\") => {\r\n setMessage(msg);\r\n setSeverity(sev);\r\n setOpen(true);\r\n };\r\n\r\n return (\r\n <ToastContext.Provider value={{ showToast }}>\r\n {children}\r\n <Snackbar\r\n open={open}\r\n color={severity}\r\n autoHideDuration={3000}\r\n onClose={() => setOpen(false)}\r\n anchorOrigin={{ vertical: \"top\", horizontal: \"right\" }}\r\n >\r\n <Alert\r\n variant=\"filled\"\r\n severity={severity}\r\n onClose={() => setOpen(false)}\r\n sx={{ width: \"100%\" }}\r\n >\r\n {message}\r\n </Alert>\r\n </Snackbar>\r\n </ToastContext.Provider>\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport {\r\n\tCall,\r\n\tCallEnd,\r\n\tCallSplit,\r\n\tClose,\r\n\tMic,\r\n\tMicOff,\r\n\tPause,\r\n\tPhoneDisabled,\r\n\tPlayArrow,\r\n\tSupportAgent,\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} from \"@mui/material\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { usePostRequest } from \"../services/request\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\nimport type { ConferenceLineTypes } from \"../../types\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\nimport axiosInstance from \"../services/axios\";\r\nimport { useToast } from \"../services/toastMessage\";\r\nimport useStyles from \"./styles\";\r\nimport React from \"react\";\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\nconst ConferenceTableRow = ({ each }: any) => {\r\n\tconst state = useSDKState();\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\tconst theme = useTheme();\r\n\r\n\t// Loading States\r\n\tconst [conferenceCallStart, setConferenceCallStart] = useState(false);\r\n\tconst [conferenceCallMerge, setConferenceCallMerge] = useState(false);\r\n\tconst [conferenceCallHoldOrUnHold, setConferenceCallHoldOrUnHold] = useState(false);\r\n\tconst [conferenceCallMuteOrUnMute, setConferenceCallMuteOrUnMute] = 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\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\tsdkStateManager.setConferenceLine({ ...line, ...data });\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\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\tshowToast(res.data?.message, \"success\");\r\n\t\t\t\tsdkStateManager.setConferenceLine({ ...line, ...data });\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\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}`, // Change the line according where u intiated firstly\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\tsdkStateManager.setConferenceLine({ ...line, ...data });\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 onMuteOrUnMuteConferenceCall = (line: ConferenceLineTypes, data: any, type: string) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\t\tsetConferenceCallMuteOrUnMute(true);\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: type,\r\n\t\t\tchannel_no: type === \"MUTEUSER\" ? `mute${line_used.line}` : `play${line_used.line}`,\r\n\t\t\tuserid: state.callData?.agent_id ?? \"\",\r\n\t\t\tthirdparty_no: line_used.phone,\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_MUTE_OT_UN_MUTE, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t\tsdkStateManager.setConferenceLine({ ...line, ...data });\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\tsetConferenceCallMuteOrUnMute(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\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 - 1),\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\tsdkStateManager.setConferenceLine({ ...line, ...data });\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\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}}\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}}\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\t// width: \"100px\",\r\n\t\t\t\t\t\t// maxWidth: \"100px\",\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\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Button\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<Typography variant=\"body2\">{each?.line === 1 ? \"Internal\" : \"External\"}</Typography>\r\n\t\t\t\t</Button>\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}}\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={each?.line === 1 || each?.status === \"LINE USED\"}\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}}\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\talignItems: \"center\",\r\n\t\t\t\t\t\tjustifyContent: \"space-around\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{/* Conference Call Button */}\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 !== \"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 !== \"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 !== \"IDLE\"}\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 sx={{ color: each?.status !== \"IDLE\" ? \"default\" : \"#f3f2f2\" }} />}\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\t{/* Merge Call Button */}\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?.isMergeCall && each?.status === \"ONCALL\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\teach?.isMergeCall && each?.status === \"ONCALL\" ?\r\n\t\t\t\t\t\t\t\t\t\t{ ...disabled, padding: \"0px 16px\" }\r\n\t\t\t\t\t\t\t\t\t: each?.status === \"ONCALL\" ?\r\n\t\t\t\t\t\t\t\t\t\t{ ...outlined, padding: \"0px 16px\" }\r\n\t\t\t\t\t\t\t\t\t:\t{ ...disabled, padding: \"0px 16px\" }\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\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 !== \"ONCALL\" || conferenceCallMerge}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{each?.isMergeCall ? \"Merged\" : \"Merge\"}\r\n\t\t\t\t\t\t\t\t{conferenceCallMerge ?\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\t// sx={{\r\n\t\t\t\t\t\t\t\t\t\t// \tcolor: each?.isMergeCall ? \"#e7e7e7ff\" : 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:\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\t\t\t\t\t{/* Hold Or Un Hold Call Button */}\r\n\t\t\t\t\t<Tooltip title={each.isHold ? \"Hold\" : \"Un Hold\"}>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant={each?.isHold ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t(each?.isHold && each?.status === \"ONCALL\") || each?.status === \"CONFERENCE\" ?\r\n\t\t\t\t\t\t\t\t\t{ ...disabled }\r\n\t\t\t\t\t\t\t\t: each?.status === \"ONCALL\" || each?.status === \"CONFERENCE\" ?\r\n\t\t\t\t\t\t\t\t\t{ ...outlined }\r\n\t\t\t\t\t\t\t\t:\t{ ...disabled }\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\tif (each.isHold) {\r\n\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: false }, \"UNHOLDUSER\");\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: true }, \"HOLDUSER\");\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\tdisabled={\r\n\t\t\t\t\t\t\t\t(each?.status !== \"ONCALL\" && each?.status !== \"CONFERENCE\") ||\r\n\t\t\t\t\t\t\t\tconferenceCallHoldOrUnHold\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{conferenceCallHoldOrUnHold ?\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\tsx={{\r\n\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}}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t: each.isHold ?\r\n\t\t\t\t\t\t\t\t<PlayArrow />\r\n\t\t\t\t\t\t\t:\t<Pause />}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t{/* Mute Or Un Mute Call Button */}\r\n\t\t\t\t\t<Tooltip title={each.isMute ? \"Mute\" : \"Un Mute\"}>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant={each?.isMute ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t(each?.isMute && each?.status === \"ONCALL\") || each?.status === \"CONFERENCE\" ?\r\n\t\t\t\t\t\t\t\t\t{ ...disabled }\r\n\t\t\t\t\t\t\t\t: each?.status === \"ONCALL\" || each?.status === \"CONFERENCE\" ?\r\n\t\t\t\t\t\t\t\t\t{ ...outlined }\r\n\t\t\t\t\t\t\t\t:\t{ ...disabled }\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\tif (each.isMute) {\r\n\t\t\t\t\t\t\t\t\tonMuteOrUnMuteConferenceCall(each, { isMute: false }, \"PLAYUSER\");\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tonMuteOrUnMuteConferenceCall(each, { isMute: true }, \"MUTEUSER\");\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\tdisabled={\r\n\t\t\t\t\t\t\t\t(each?.status !== \"ONCALL\" && each?.status !== \"CONFERENCE\") ||\r\n\t\t\t\t\t\t\t\tconferenceCallMuteOrUnMute\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{conferenceCallMuteOrUnMute ?\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\tsx={{\r\n\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}}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t: each.isMute ?\r\n\t\t\t\t\t\t\t\t<MicOff />\r\n\t\t\t\t\t\t\t:\t<Mic />}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t{/* End Call Button */}\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\t(\r\n\t\t\t\t\t\t\t\t\t\teach?.status === \"ONCALL\" ||\r\n\t\t\t\t\t\t\t\t\t\teach?.status === \"CONFERENCE\" ||\r\n\t\t\t\t\t\t\t\t\t\teach?.status === \"DIALING\"\r\n\t\t\t\t\t\t\t\t\t) ?\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\t(\r\n\t\t\t\t\t\t\t\t\t\teach?.status === \"ONCALL\" ||\r\n\t\t\t\t\t\t\t\t\t\teach?.status === \"CONFERENCE\" ||\r\n\t\t\t\t\t\t\t\t\t\teach?.status === \"DIALING\"\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\t...enabled,\r\n\t\t\t\t\t\t\t\t\t\t\t// minWidth: \"60px !important\",\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\t// minWidth: \"60px !important\"\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\t(each?.status !== \"ONCALL\" &&\r\n\t\t\t\t\t\t\t\t\t\teach?.status !== \"CONFERENCE\" &&\r\n\t\t\t\t\t\t\t\t\t\teach?.status !== \"DIALING\") ||\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:\t<Button\r\n\t\t\t\t\t\t\tvariant={each?.isCallStart ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: \"none\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\tonEndConferenceCall(each, {\r\n\t\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\t\tisHold: false,\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\tdisabled={!each?.isCallStart || conferenceCallEnd}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{conferenceCallEnd ?\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/>\r\n\t\t\t\t\t\t\t:\t<CallEnd />}\r\n\t\t\t\t\t\t</Button>\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\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\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\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\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{/* Header */}\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: \"10px 16px\",\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\">{state?.agentId ?? \"\"} conference</Typography>\r\n\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{/* Lines */}\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 each={each} />\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{/* End All Calls */}\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}\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 [transferCall] = usePostRequest<TransferCallRequest>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t\t},\r\n\t});\r\n\tconst state = useSDKState();\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\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\tconsole.log(data, \"data34\");\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}\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\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}, []);\r\n\r\n\tconsole.log(idleAgentsList, \"idleAgentsList\");\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{/* Header */}\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\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{/* Process and Queues */}\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<Box sx={{ display: \"flex\", gap: 1 }}>\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\tgetProcessAndQueuesList(END_POINT.TRANSFER_TO_DETAILS, {\r\n\t\t\t\t\t\t\t\t\t\tstatus: \"ACTIVE\",\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\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\tgetProcessAndQueuesList(END_POINT.TRANSFER_TO_DETAILS, {\r\n\t\t\t\t\t\t\t\t\t\tstatus: \"ACTIVE\",\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\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\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t{(isProcessAndQueuesListLoading || isIdleAgentsListLoading) && (\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\tcurrentselecteTab === \"process\" && (\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 1 }}>\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\tmargin: \"10px 0px\",\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{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<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\tfontSize: \"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\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\twidth: \"100%\",\r\n\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\tcolor: \"gray\",\r\n\t\t\t\t\t\t\t\t\t\t\t\theight: \"60px\",\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\tNo Process Found\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\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\tcurrentselecteTab === \"queues\" && (\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 1 }}>\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\tmargin: \"10px 0px\",\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{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<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\tfontSize: \"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\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\twidth: \"100%\",\r\n\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\tcolor: \"gray\",\r\n\t\t\t\t\t\t\t\t\t\t\t\theight: \"60px\",\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\tNo Queues Found\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\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\tcurrentselecteTab === \"agents\" && (\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 1 }}>\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\tmargin: \"10px 0px\",\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<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\tfontSize: \"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\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\twidth: \"100%\",\r\n\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\tcolor: \"gray\",\r\n\t\t\t\t\t\t\t\t\t\t\t\theight: \"60px\",\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\tNo Agents Found\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\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 [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});\r\n\r\n\tconst dispositionOptions = [\r\n\t\t{ label: \"Not Interested\", value: \"NI\" },\r\n\t\t{ label: \"Resolved\", value: \"RES\" },\r\n\t];\r\n\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\tconst handleChange = (field: keyof typeof formData, value: { label: string } | null | string) => {\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});\r\n\t};\r\n\tconst handleClose = () => {\r\n\t\thandleReset();\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={\"xs\"}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t{/* Header */}\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{/* Lines */}\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={dispositionOptions}\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{/* Callback Date + Time */}\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=\"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<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</Box>\r\n\t\t\t\t\t\t)}\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=\"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\t<Box sx={{ flex: 1 }}></Box>\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\tconsole.log(processList, \"processList\");\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{/* Header */}\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\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{/* Lines */}\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{/* Status */}\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{/* Header */}\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\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{/* Lines */}\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 { 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","/**\r\n * @fileoverview SDKProvider Component\r\n * @description Context provider component that wraps the Call Control SDK with necessary providers.\r\n * Provides toast notifications and other global services to child components.\r\n *\r\n * @author Achala IT Solutions\r\n * @version 1.0.0\r\n * @since 2024\r\n */\r\n\r\nimport React, { ReactNode, memo } from \"react\";\r\nimport { ToastProvider } from \"../services/toastMessage\";\r\n\r\n/**\r\n * @interface SDKProviderProps\r\n * @description Props interface for the SDKProvider component\r\n *\r\n * @declaration\r\n * ```typescript\r\n * interface SDKProviderProps {\r\n * children: ReactNode;\r\n * }\r\n * ```\r\n *\r\n * @requiredParams\r\n * - `children: ReactNode` - Child components to be wrapped with providers\r\n *\r\n * @returnType Interface definition\r\n *\r\n * @example\r\n * ```tsx\r\n * <SDKProvider>\r\n * <CallControls />\r\n * </SDKProvider>\r\n * ```\r\n *\r\n * @return Interface definition for provider props\r\n *\r\n * @conclusion Simple interface for wrapping child components with SDK providers.\r\n */\r\ninterface SDKProviderProps {\r\n\t/** Child components to be wrapped with SDK providers */\r\n\tchildren: ReactNode;\r\n}\r\n\r\n/**\r\n * @function SDKProvider\r\n * @description Context provider component that wraps child components with necessary SDK services.\r\n * Provides toast notifications and other global services required by the Call Control SDK.\r\n *\r\n * @declaration\r\n * ```typescript\r\n * function SDKProvider(props: SDKProviderProps): JSX.Element\r\n * ```\r\n *\r\n * @requiredParams\r\n * - `props: SDKProviderProps` - Component props containing children to wrap\r\n *\r\n * @returnType `JSX.Element`\r\n *\r\n * @example\r\n * ```tsx\r\n * <SDKProvider>\r\n * <CallControls onDataChange={handleDataChange} />\r\n * </SDKProvider>\r\n * ```\r\n *\r\n * @return React component providing SDK context and services\r\n *\r\n * @conclusion Essential wrapper component that provides global services to the Call Control SDK.\r\n */\r\nexport const SDKProvider = memo<SDKProviderProps>(({ children }) => {\r\n\treturn <ToastProvider>{children}</ToastProvider>;\r\n});\r\n\r\n// Set display name for debugging\r\nSDKProvider.displayName = \"SDKProvider\";\r\n","/**\r\n * @fileoverview Call Control SDK - Main Entry Point\r\n * @description Comprehensive CTI (Computer Telephony Integration) SDK for React applications.\r\n * Provides complete call control functionality including dialing, conferencing, transferring,\r\n * and real-time call management with WebSocket integration.\r\n *\r\n * @author Achala IT Solutions\r\n * @version 1.0.0\r\n * @since 2024\r\n */\r\n\r\nimport { 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 } from \"./types\";\r\nimport { useClickToCall } from \"./lib/hooks/useClickToCall\";\r\n\r\n// Component exports\r\nexport { CallControlPanel } from \"./lib/components/callControlPanel\";\r\n\r\n// Type exports\r\nexport type {\r\n\tCallControlPanelProps,\r\n\tCallData,\r\n\tCallStatus,\r\n\tConferenceLineTypes,\r\n\tSDKConfig,\r\n\tSDKState,\r\n\tRequestOptions,\r\n\tRequestResult,\r\n\tUseApiRequest,\r\n\tUseGetRequest,\r\n\tUsePostRequest,\r\n\tUsePutRequest,\r\n\tUseDeleteRequest,\r\n\tUsePatchRequest,\r\n} from \"./types\";\r\n\r\n/**\r\n * @interface InitSDKParams\r\n * @description Parameters required for SDK initialization\r\n *\r\n * @declaration\r\n * ```typescript\r\n * interface InitSDKParams {\r\n * apiKey: string;\r\n * tenantId: string;\r\n * agentId: string;\r\n * sdkConfig?: SDKConfig;\r\n * }\r\n * ```\r\n *\r\n * @requiredParams\r\n * - `apiKey: string` - Authentication key for SDK access\r\n * - `tenantId: string` - Tenant identifier for multi-tenancy support\r\n * - `agentId: string` - Agent identifier for call management\r\n *\r\n * @returnType Interface definition\r\n *\r\n * @example\r\n * ```typescript\r\n * const initParams: InitSDKParams = {\r\n * apiKey: \"your-api-key\",\r\n * tenantId: \"tenant-123\",\r\n * agentId: \"agent-456\",\r\n * sdkConfig: {\r\n * isDraggable: true,\r\n * disableSoftPhone: false\r\n * }\r\n * };\r\n * ```\r\n *\r\n * @return Interface definition for SDK initialization parameters\r\n *\r\n * @conclusion Essential interface for proper SDK initialization with all required parameters.\r\n */\r\ninterface InitSDKParams {\r\n\t/** Authentication key for SDK access */\r\n\tapiKey: string;\r\n\t/** Tenant identifier for multi-tenancy support */\r\n\ttenantId: string;\r\n\t/** Agent identifier for call management */\r\n\tagentId: string;\r\n\t/** Optional SDK configuration for customizing behavior */\r\n\tsdkConfig?: SDKConfig;\r\n}\r\n\r\n/**\r\n * @function initSDK\r\n * @description Initializes the Call Control SDK with authentication credentials and configuration.\r\n * Sets up event tracking, state management, and establishes connection to the CTI system.\r\n *\r\n * @declaration\r\n * ```typescript\r\n * function initSDK(params: InitSDKParams): Promise<void>\r\n * ```\r\n *\r\n * @requiredParams\r\n * - `params: InitSDKParams` - Object containing API key, tenant ID, agent ID, and optional config\r\n *\r\n * @returnType `Promise<void>`\r\n *\r\n * @example\r\n * ```typescript\r\n * // Basic initialization\r\n * await initSDK({\r\n * apiKey: \"your-api-key\",\r\n * tenantId: \"tenant-123\",\r\n * agentId: \"agent-456\"\r\n * });\r\n *\r\n * // With custom configuration\r\n * await initSDK({\r\n * apiKey: \"your-api-key\",\r\n * tenantId: \"tenant-123\",\r\n * agentId: \"agent-456\",\r\n * sdkConfig: {\r\n * isDraggable: true,\r\n * disableSoftPhone: false,\r\n * disableEndCallButton: false\r\n * }\r\n * });\r\n * ```\r\n *\r\n * @return Promise that resolves when initialization is complete\r\n *\r\n * @throws {Error} When API key is missing or invalid\r\n * @throws {Error} When tenant ID is missing or invalid\r\n * @throws {Error} When agent ID is missing or invalid\r\n * @throws {Error} When initialization fails due to network or authentication issues\r\n *\r\n * @conclusion Critical function that must be called before using any SDK functionality.\r\n */\r\nexport async function initSDK({\r\n\tapiKey,\r\n\ttenantId,\r\n\tagentId,\r\n\tsdkConfig,\r\n}: InitSDKParams): Promise<void> {\r\n\t// Input validation\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\t// Initialize event tracker\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\tbaseUrl: BASE_URL,\r\n\t\t});\r\n\r\n\t\tif (initResult) {\r\n\t\t\tconsole.log(\"SDK initialized successfully\");\r\n\t\t\tsdkStateManager.initialize(apiKey.trim(), agentId.trim(), sdkConfig);\r\n\t\t} else {\r\n\t\t\tconsole.error(\"SDK initialization failed: Event tracker initialization returned false\");\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\tconsole.error(\"SDK initialization error:\", 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\n/**\r\n * @function getSDKVersion\r\n * @description Returns the current version of the Call Control SDK\r\n *\r\n * @declaration\r\n * ```typescript\r\n * function getSDKVersion(): string\r\n * ```\r\n *\r\n * @requiredParams None\r\n *\r\n * @returnType `string`\r\n *\r\n * @example\r\n * ```typescript\r\n * const version = getSDKVersion();\r\n * console.log(`Using Call Control SDK version: ${version}`);\r\n * ```\r\n *\r\n * @return Current SDK version string\r\n *\r\n * @conclusion Utility function for version checking and debugging purposes.\r\n */\r\nexport function getSDKVersion(): string {\r\n\treturn \"1.0.0\";\r\n}\r\n\r\n/**\r\n * @function isSDKInitialized\r\n * @description Checks if the SDK has been successfully initialized\r\n *\r\n * @declaration\r\n * ```typescript\r\n * function isSDKInitialized(): boolean\r\n * ```\r\n *\r\n * @requiredParams None\r\n *\r\n * @returnType `boolean`\r\n *\r\n * @example\r\n * ```typescript\r\n * if (isSDKInitialized()) {\r\n * // SDK is ready to use\r\n * console.log(\"SDK is initialized and ready\");\r\n * } else {\r\n * console.log(\"SDK needs to be initialized first\");\r\n * }\r\n * ```\r\n *\r\n * @return True if SDK is initialized, false otherwise\r\n *\r\n * @conclusion Utility function for checking SDK initialization status before using features.\r\n */\r\nexport function isSDKInitialized(): boolean {\r\n\treturn sdkStateManager.getState().isInitialized;\r\n}\r\n\r\n// Hook exports\r\nexport { useLogout, useEndCall, useClickToCall };\r\n"],"mappings":"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","names":["SDKStateManager","__publicField","stored","parsedState","__spreadProps","__spreadValues","error","persistentState","listener","apiKey","agentId","sdkConfig","index","isHolding","isMuted","status","process","position","open","data","line","_a","conferenceLineData","each","sdkStateManager","EventTrackerSDK","__publicField","config","__spreadValues","ticket","response","sdkStateManager","data","error","eventType","eventData","event","index","e","eventsToFlush","retryItems","retryFn","url","options","_a","fullUrl","maxRetries","attempt","delay","resolve","autoTrackConfig","target","formData","formFields","value","key","inputTimer","sessionStartTime","sessionDuration","navigation","timing","interval","eventTracker","useCallback","useState","IP","BASE_URL","WS_BASE_URL","VERSION","END_POINT","WS_END_POINT","axios","DEFAULT_TOKEN","REQUEST_TIMEOUT","getAuthToken","createAxiosInstance","instance","axios","BASE_URL","config","token","error","response","_a","endTime","startTime","originalRequest","axiosInstance","axios_default","useLogout","loading","setLoading","useState","success","setSuccess","isError","setIsError","error","setError","data","setData","useCallback","_a","state","payload","axios_default","END_POINT","res","sdkStateManager","err","useCallback","useState","useEndCall","loading","setLoading","useState","success","setSuccess","isError","setIsError","error","setError","data","setData","useCallback","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","state","payload","axios_default","END_POINT","res","sdkStateManager","err","useCallback","useState","useClickToCall","loading","setLoading","useState","success","setSuccess","isError","setIsError","error","setError","data","setData","useCallback","_a","_b","_c","_d","_e","_f","_g","_h","_i","state","payload","axios_default","END_POINT","res","err","line_used","each","sdkStateManager","__spreadProps","__spreadValues","memo","useCallback","CallEnd","Close","DragIndicator","Group","KeyboardArrowDown","Layers","Mic","MicOff","Pause","Pending","Phone","PlayArrow","SupportAgent","TransferWithinAStation","Upcoming","WifiCalling3","Box","Button","Chip","CircularProgress","Fade","IconButton","Menu","MenuItem","Paper","TextField","Tooltip","Typography","useTheme","useCallback","useEffect","useRef","useState","useCallback","useRef","useState","useDraggable","initialPosition","onPositionChange","position","setPosition","isDragging","setIsDragging","dragRef","dragStart","elementStart","updatePosition","newPosition","element","rect","viewportWidth","viewportHeight","constrainedPosition","handleStart","clientX","clientY","handleMove","moveClientX","moveClientY","deltaX","deltaY","handleMouseMove","e","handleTouchMove","touch","handleEnd","handleMouseDown","handleTouchStart","useState","useEffect","useSDKState","state","setState","useState","sdkStateManager","useEffect","useCallback","useReducer","createContext","useContext","useState","Snackbar","Alert","jsx","jsxs","ToastContext","useToast","ctx","ToastProvider","children","open","setOpen","message","setMessage","severity","setSeverity","showToast","msg","sev","initialState","reducer","state","action","__spreadProps","__spreadValues","usePostRequest","props","onSuccess","onError","disabledSuccessToast","showToast","useToast","state","dispatch","useReducer","reducer","initialState","useCallback","url","payload","config","axios_default","res","_a","_b","err","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","error","Call","CallEnd","CallSplit","Close","Mic","MicOff","Pause","PhoneDisabled","PlayArrow","SupportAgent","Box","Button","Dialog","IconButton","Paper","TextField","Typography","Autocomplete","Tooltip","useTheme","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","CircularProgress","useEffect","useState","useTheme","useStyles","disabled","enabled","outlined","theme","useTheme","__spreadValues","styles_default","Fragment","jsx","jsxs","ConferenceTableRow","each","_a","_b","_c","_d","_e","state","useSDKState","showToast","useToast","disabled","enabled","outlined","styles_default","theme","useTheme","conferenceCallStart","setConferenceCallStart","useState","conferenceCallMerge","setConferenceCallMerge","conferenceCallHoldOrUnHold","setConferenceCallHoldOrUnHold","conferenceCallMuteOrUnMute","setConferenceCallMuteOrUnMute","conferenceCallEnd","setConferenceCallEnd","onConferenceLineUpdate","line","data","sdkStateManager","__spreadValues","onConferenceCallStart","line_used","payload","axios_default","END_POINT","res","err","message","onMergeConferenceCall","onHoldOrUnHoldConferenceCall","type","onMuteOrUnMuteConferenceCall","onEndConferenceCall","TableRow","TableCell","Typography","Button","TextField","e","Box","Tooltip","__spreadProps","CircularProgress","Call","CallSplit","PlayArrow","Pause","MicOff","Mic","CallEnd","ConferenceDialog","conferenceCallEndAll","setConferenceCallEndAll","handleClose","onEndAllConferenceCalls","Dialog","Paper","IconButton","Close","TableContainer","Table","TableHead","TableBody","PhoneDisabled","CallTransferDialog","open","_f","_g","_h","_i","_j","_k","_l","transferCall","usePostRequest","currentselecteTab","setCurrentselecteTab","getIdelAgentsList","idleAgentsList","isIdleAgentsListLoading","getProcessAndQueuesList","processAndQueuesList","isProcessAndQueuesListLoading","handleTransferCall","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_A","_B","_C","_D","_E","_F","_G","useEffect","process","index","SupportAgent","queue","agent","EndCallDispositionDialog","setOpen","onSubmitDisposition","formData","setFormData","dispositionOptions","followUpOptions","handleChange","field","value","prev","handleReset","Autocomplete","opt","_","val","params","ProcessorListDialog","processList","handleSelectedProcessor","CallHistoryDialog","Fragment","jsx","jsxs","getCombineConfrenceData","conferenceData","apiData","data","item","_a","_b","_c","statusKey","phoneKey","__spreadProps","__spreadValues","CallControls","onDataChange","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_A","_B","_C","_D","_E","_F","_G","_H","_I","_J","_K","_L","_M","_N","_O","_P","_Q","_R","_S","_T","_U","_V","_W","_X","_Y","_Z","__","_$","_aa","_ba","_ca","_da","_ea","_fa","_ga","_ha","_ia","_ja","_ka","_la","_ma","_na","_oa","_pa","_qa","_ra","_sa","_ta","_ua","_va","_wa","_xa","_ya","_za","_Aa","theme","useTheme","state","useSDKState","showToast","useToast","disabled","enabled","outlined","styles_default","webSocketRef","useRef","anchorEl","setAnchorEl","useState","showIframe","setShowIframe","statusAnchorEl","setStatusAnchorEl","dialerAnchorEl","setDialerAnchorEl","openCallDisposition","setOpenCallDisposition","openProcessorDialog","setOpenProcessorDialog","openCallHistoryDialog","setOpenCallHistoryDialog","processList","setProcessList","phoneNumber","setPhoneNumber","callDuration","setCallDuration","position","isDragging","dragRef","handleMouseDown","handleTouchStart","useDraggable","newPosition","sdkStateManager","iframePosition","iframeIsDragging","iframeDragRef","iframeHandleMouseDown","iframeHandleTouchStart","clickToCall","clickToCallLoading","usePostRequest","holdOrUnHold","holdOrUnHoldLoading","error","muteOrUnMute","muteOrUnMuteLoading","readyAgentStatus","agentReadyLoading","updateAgentStatus","isLoading","endCall","endCallLoading","formatDuration","useCallback","seconds","mins","secs","handleCloseQueueCounts","handleOpenDialer","event","handleCloseDialer","handleOpenAgentStatus","handleCloseAgentStatus","handleAgentReady","payload","END_POINT","handleUpdateAgentStatus","status","handleStartCall","number","handleHoldToggle","handleMuteToggle","handleEndCall","useEffect","handleBeforeUnload","e","interval","elapsed","process_id","process_name","phone_number","agent_id","convox_id","axios_default","res","err","WS_END_POINT","confrence","Box","ProcessorListDialog","Fade","Paper","IconButton","DragIndicator","Tooltip","WifiCalling3","Typography","Chip","CircularProgress","KeyboardArrowDown","Button","SupportAgent","PlayArrow","Pause","MicOff","Mic","TransferWithinAStation","Group","CallEnd","Close","IP","Menu","TextField","Phone","MenuItem","Layers","Pending","Upcoming","ConferenceDialog","CallTransferDialog","EndCallDispositionDialog","CallHistoryDialog","memo","jsx","SDKProvider","memo","children","ToastProvider","jsx","CallControlPanel","memo","onDataChange","handleDataChange","useCallback","data","error","SDKProvider","CallControls","initSDK","apiKey","tenantId","agentId","sdkConfig","eventTracker","BASE_URL","sdkStateManager","error","getSDKVersion","isSDKInitialized"]}