@webex/contact-center 3.12.0-task-refactor.6 → 3.12.0-task-refactor.7
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.
- package/dist/services/task/state-machine/TaskStateMachine.js +1 -1
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -1
- package/dist/services/task/state-machine/uiControlsComputer.js +3 -0
- package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -1
- package/dist/webex.js +1 -1
- package/package.json +1 -1
- package/src/services/task/state-machine/TaskStateMachine.ts +1 -1
- package/src/services/task/state-machine/uiControlsComputer.ts +13 -0
- package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +65 -1
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
package/package.json
CHANGED
|
@@ -226,7 +226,7 @@ export function getTaskStateMachineConfig(uiControlConfig: UIControlConfig) {
|
|
|
226
226
|
// the consulted agent (Agent 2) accepts. Clears the incoming notification.
|
|
227
227
|
[TaskEvent.CONSULT_END]: {
|
|
228
228
|
target: TaskState.TERMINATED,
|
|
229
|
-
actions: ['updateTaskData', 'clearConsultState', '
|
|
229
|
+
actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],
|
|
230
230
|
},
|
|
231
231
|
},
|
|
232
232
|
},
|
|
@@ -259,6 +259,17 @@ function computeVoiceInteractionUIControls(
|
|
|
259
259
|
(isConsulting ||
|
|
260
260
|
taskData?.type === 'AgentConsulting' ||
|
|
261
261
|
selfParticipant?.consultState === 'consulting');
|
|
262
|
+
const hideExitConferenceOnMainLegForEpDnConsultFromConference =
|
|
263
|
+
currentLeg === 'main' &&
|
|
264
|
+
inConference &&
|
|
265
|
+
consultFromConference &&
|
|
266
|
+
consultInitiator &&
|
|
267
|
+
(isConsulting ||
|
|
268
|
+
consultInProgress ||
|
|
269
|
+
taskData?.type === 'AgentConsultCreated' ||
|
|
270
|
+
taskData?.type === 'AgentConsulting' ||
|
|
271
|
+
selfParticipant?.consultState === 'consultInitiated' ||
|
|
272
|
+
selfParticipant?.consultState === 'consulting');
|
|
262
273
|
const forceHeldPostConsultControls =
|
|
263
274
|
!hideExitConferenceWhileConsultPending &&
|
|
264
275
|
(postDeclineHeldMainLeg || postConsultCompletedHeldMainLeg);
|
|
@@ -308,6 +319,7 @@ function computeVoiceInteractionUIControls(
|
|
|
308
319
|
if (!isWebrtc) return DISABLED;
|
|
309
320
|
if (isWrappingUp) return DISABLED;
|
|
310
321
|
if (currentLeg === 'consult' && !selfInConsultCall) return DISABLED;
|
|
322
|
+
if ((isConsulting || hasParallelConsultLeg) && !isCurrentLegActive) return VISIBLE_DISABLED;
|
|
311
323
|
if (isConsulting) return VISIBLE_ENABLED;
|
|
312
324
|
|
|
313
325
|
if (isConnected || isHeld || isConferencing) {
|
|
@@ -469,6 +481,7 @@ function computeVoiceInteractionUIControls(
|
|
|
469
481
|
// ExitConference: in conference with multiple agents in main call
|
|
470
482
|
exitConference: (() => {
|
|
471
483
|
if (hideExitConferenceWhileConsultPending) return DISABLED;
|
|
484
|
+
if (hideExitConferenceOnMainLegForEpDnConsultFromConference) return DISABLED;
|
|
472
485
|
if (allowHeldMainLegControlsForNonInitiator) return VISIBLE_ENABLED;
|
|
473
486
|
if (showMainLegConferenceControlsDuringConsult) return VISIBLE_DISABLED;
|
|
474
487
|
if (hideExitConferenceDuringActiveConsultFromConference) return DISABLED;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {TASK_CHANNEL_TYPE} from '../../../../../../src/services/task/types';
|
|
1
|
+
import {TASK_CHANNEL_TYPE, VOICE_VARIANT} from '../../../../../../src/services/task/types';
|
|
2
2
|
import {TaskState} from '../../../../../../src/services/task/state-machine/constants';
|
|
3
3
|
import {
|
|
4
4
|
computeUIControls,
|
|
@@ -669,6 +669,70 @@ describe('uiControlsComputer consult initiator controls', () => {
|
|
|
669
669
|
expect(uiControls.consult.switch).toEqual({isVisible: false, isEnabled: false});
|
|
670
670
|
});
|
|
671
671
|
|
|
672
|
+
it('enables mute only on active leg when main leg is active', () => {
|
|
673
|
+
const baseTaskData = createConsultTaskData();
|
|
674
|
+
const taskData = createTaskData({
|
|
675
|
+
...baseTaskData,
|
|
676
|
+
interaction: {
|
|
677
|
+
...baseTaskData.interaction,
|
|
678
|
+
media: {
|
|
679
|
+
...baseTaskData.interaction.media,
|
|
680
|
+
'consult-media': {
|
|
681
|
+
...baseTaskData.interaction.media['consult-media'],
|
|
682
|
+
participants: ['agent-1', 'agent-2'],
|
|
683
|
+
},
|
|
684
|
+
},
|
|
685
|
+
},
|
|
686
|
+
});
|
|
687
|
+
const baseContext = createVoiceContext();
|
|
688
|
+
const context = createVoiceContext({
|
|
689
|
+
taskData,
|
|
690
|
+
consultCallHeld: true,
|
|
691
|
+
uiControlConfig: {
|
|
692
|
+
...baseContext.uiControlConfig,
|
|
693
|
+
voiceVariant: VOICE_VARIANT.WEBRTC,
|
|
694
|
+
},
|
|
695
|
+
});
|
|
696
|
+
|
|
697
|
+
const uiControls = computeUIControls(TaskState.CONNECTED, context, context.taskData);
|
|
698
|
+
|
|
699
|
+
expect(uiControls.activeLeg).toBe('main');
|
|
700
|
+
expect(uiControls.main.mute).toEqual({isVisible: true, isEnabled: true});
|
|
701
|
+
expect(uiControls.consult.mute).toEqual({isVisible: true, isEnabled: false});
|
|
702
|
+
});
|
|
703
|
+
|
|
704
|
+
it('enables mute only on active leg when consult leg is active', () => {
|
|
705
|
+
const baseTaskData = createConsultTaskData();
|
|
706
|
+
const taskData = createTaskData({
|
|
707
|
+
...baseTaskData,
|
|
708
|
+
interaction: {
|
|
709
|
+
...baseTaskData.interaction,
|
|
710
|
+
media: {
|
|
711
|
+
...baseTaskData.interaction.media,
|
|
712
|
+
'consult-media': {
|
|
713
|
+
...baseTaskData.interaction.media['consult-media'],
|
|
714
|
+
participants: ['agent-1', 'agent-2'],
|
|
715
|
+
},
|
|
716
|
+
},
|
|
717
|
+
},
|
|
718
|
+
});
|
|
719
|
+
const baseContext = createVoiceContext();
|
|
720
|
+
const context = createVoiceContext({
|
|
721
|
+
taskData,
|
|
722
|
+
consultCallHeld: false,
|
|
723
|
+
uiControlConfig: {
|
|
724
|
+
...baseContext.uiControlConfig,
|
|
725
|
+
voiceVariant: VOICE_VARIANT.WEBRTC,
|
|
726
|
+
},
|
|
727
|
+
});
|
|
728
|
+
|
|
729
|
+
const uiControls = computeUIControls(TaskState.CONSULTING, context, context.taskData);
|
|
730
|
+
|
|
731
|
+
expect(uiControls.activeLeg).toBe('consult');
|
|
732
|
+
expect(uiControls.main.mute).toEqual({isVisible: true, isEnabled: false});
|
|
733
|
+
expect(uiControls.consult.mute).toEqual({isVisible: true, isEnabled: true});
|
|
734
|
+
});
|
|
735
|
+
|
|
672
736
|
it('hides transfer for the consulted agent during consult', () => {
|
|
673
737
|
const consultedTaskData = createConsultTaskData();
|
|
674
738
|
const consultedContext = createVoiceContext({
|