11import React , { useState } from 'react' ;
22import { ButtonCircle , TooltipNext , Text } from '@momentum-ui/react-collaboration' ;
33import { Avatar , Icon } from '@momentum-design/components/dist/react' ;
4- import { MUTE_CALL , UNMUTE_CALL } from '../../constants' ;
54import TaskTimer from '../../TaskTimer' ;
65import { CallControlConsultComponentsProps } from '../../task.types' ;
6+ import {
7+ createConsultButtons ,
8+ getVisibleButtons ,
9+ handleTransferPress ,
10+ handleEndConsultPress ,
11+ handleMuteToggle ,
12+ getConsultStatusText ,
13+ createTimerKey ,
14+ } from './call-control-custom.utils' ;
715
816const CallControlConsultComponent : React . FC < CallControlConsultComponentsProps > = ( {
917 agentName,
@@ -20,91 +28,34 @@ const CallControlConsultComponent: React.FC<CallControlConsultComponentsProps> =
2028} ) => {
2129 const [ isMuteDisabled , setIsMuteDisabled ] = useState ( false ) ;
2230
23- const timerKey = `timer- ${ startTimeStamp } ` ;
31+ const timerKey = createTimerKey ( startTimeStamp ) ;
2432
2533 const handleTransfer = ( ) => {
26- logger . info ( 'CC-Widgets: CallControlConsult: transfer button clicked' , {
27- module : 'call-control-consult.tsx' ,
28- method : 'handleTransfer' ,
29- } ) ;
30- try {
31- if ( onTransfer ) {
32- onTransfer ( ) ;
33- logger . log ( 'CC-Widgets: CallControlConsult: transfer completed' , {
34- module : 'call-control-consult.tsx' ,
35- method : 'handleTransfer' ,
36- } ) ;
37- }
38- } catch ( error ) {
39- throw new Error ( 'Error transferring call:' , error ) ;
40- }
34+ handleTransferPress ( onTransfer , logger ) ;
4135 } ;
4236
4337 const handleEndConsult = ( ) => {
44- logger . info ( 'CC-Widgets: CallControlConsult: end consult clicked' , {
45- module : 'call-control-consult.tsx' ,
46- method : 'handleEndConsult' ,
47- } ) ;
48- try {
49- endConsultCall ( ) ;
50- logger . log ( 'CC-Widgets: CallControlConsult: end consult completed' , {
51- module : 'call-control-consult.tsx' ,
52- method : 'handleEndConsult' ,
53- } ) ;
54- } catch ( error ) {
55- throw new Error ( 'Error ending consult call:' , error ) ;
56- }
38+ handleEndConsultPress ( endConsultCall , logger ) ;
5739 } ;
5840
5941 const handleConsultMuteToggle = ( ) => {
60- setIsMuteDisabled ( true ) ;
61-
62- try {
63- onToggleConsultMute ( ) ;
64- } catch ( error ) {
65- logger . error ( `Mute toggle failed: ${ error } ` , {
66- module : 'call-control-consult.tsx' ,
67- method : 'handleConsultMuteToggle' ,
68- } ) ;
69- } finally {
70- // Re-enable button after operation
71- setTimeout ( ( ) => {
72- setIsMuteDisabled ( false ) ;
73- } , 500 ) ;
74- }
42+ handleMuteToggle ( onToggleConsultMute , setIsMuteDisabled , logger ) ;
7543 } ;
7644
77- const buttons = [
78- {
79- key : 'mute' ,
80- icon : isMuted ? 'microphone-muted-bold' : 'microphone-bold' ,
81- onClick : handleConsultMuteToggle ,
82- tooltip : isMuted ? UNMUTE_CALL : MUTE_CALL ,
83- className : `${ isMuted ? 'call-control-button-muted' : 'call-control-button' } ` ,
84- disabled : isMuteDisabled ,
85- shouldShow : muteUnmute ,
86- } ,
87- {
88- key : 'transfer' ,
89- icon : 'next-bold' ,
90- tooltip : 'Transfer Consult' ,
91- onClick : handleTransfer ,
92- className : 'call-control-button' ,
93- disabled : ! consultCompleted ,
94- shouldShow : isAgentBeingConsulted && ! ! onTransfer ,
95- } ,
96- {
97- key : 'cancel' ,
98- icon : 'headset-muted-bold' ,
99- tooltip : 'End Consult' ,
100- onClick : handleEndConsult ,
101- className : 'call-control-consult-button-cancel' ,
102- shouldShow : isEndConsultEnabled || isAgentBeingConsulted ,
103- } ,
104- ] ;
45+ const buttons = createConsultButtons (
46+ isMuted ,
47+ isMuteDisabled ,
48+ consultCompleted ,
49+ isAgentBeingConsulted ,
50+ isEndConsultEnabled ,
51+ muteUnmute ,
52+ onTransfer ? handleTransfer : undefined ,
53+ handleConsultMuteToggle ,
54+ handleEndConsult
55+ ) ;
10556
10657 // Filter buttons that should be shown, then map them
107- const visibleButtons = buttons . filter ( ( button ) => button . shouldShow ) ;
58+ const visibleButtons = getVisibleButtons ( buttons ) ;
10859
10960 return (
11061 < div className = "call-control-consult" >
@@ -115,7 +66,7 @@ const CallControlConsultComponent: React.FC<CallControlConsultComponentsProps> =
11566 { agentName }
11667 </ Text >
11768 < Text tagName = "p" type = "body-secondary" className = "consult-sub-text" >
118- { consultCompleted ? 'Consulting' : 'Consult requested' } •
69+ { getConsultStatusText ( consultCompleted ) } •
11970 < TaskTimer key = { timerKey } startTimeStamp = { startTimeStamp } />
12071 </ Text >
12172 </ div >
0 commit comments