Skip to content

Commit 2a4595b

Browse files
authored
fix(task-controls): add-uts-for-task-controls (#502)
1 parent f459545 commit 2a4595b

30 files changed

Lines changed: 17397 additions & 805 deletions

packages/contact-center/cc-components/src/components/task/CallControl/CallControlCustom/call-control-consult.tsx

Lines changed: 26 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
import React, {useState} from 'react';
22
import {ButtonCircle, TooltipNext, Text} from '@momentum-ui/react-collaboration';
33
import {Avatar, Icon} from '@momentum-design/components/dist/react';
4-
import {MUTE_CALL, UNMUTE_CALL} from '../../constants';
54
import TaskTimer from '../../TaskTimer';
65
import {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

816
const 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'}&nbsp;&bull;&nbsp;
69+
{getConsultStatusText(consultCompleted)}&nbsp;&bull;&nbsp;
11970
<TaskTimer key={timerKey} startTimeStamp={startTimeStamp} />
12071
</Text>
12172
</div>

0 commit comments

Comments
 (0)