@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/package.json CHANGED
@@ -83,5 +83,5 @@
83
83
  "typedoc": "^0.25.0",
84
84
  "typescript": "5.4.5"
85
85
  },
86
- "version": "3.12.0-task-refactor.6"
86
+ "version": "3.12.0-task-refactor.7"
87
87
  }
@@ -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', 'emitTaskReject'],
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({