From 3e0b99bfa1f4b5b144fe48eef7de7fc6950bff84 Mon Sep 17 00:00:00 2001 From: Rukai Yu Date: Tue, 28 Aug 2018 15:28:54 +0800 Subject: [PATCH 1/2] fix(8432): try fix 8432 --- .../ringcentral-integration/modules/ConferenceCall/index.js | 4 ++-- packages/ringcentral-widgets-demo/dev-server/Phone.js | 2 +- .../ringcentral-widgets/containers/CallCtrlPage/index.js | 6 +++--- .../ringcentral-widgets/containers/CallsOnholdPage/index.js | 3 +++ 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/ringcentral-integration/modules/ConferenceCall/index.js b/packages/ringcentral-integration/modules/ConferenceCall/index.js index 07fe57c129..89e12e60df 100644 --- a/packages/ringcentral-integration/modules/ConferenceCall/index.js +++ b/packages/ringcentral-integration/modules/ConferenceCall/index.js @@ -803,7 +803,7 @@ export default class ConferenceCall extends RcModule { } @proxify - async mergeSession({ sessionId, onReadyToMerge }) { + async mergeSession({ sessionId, sessionIdToMergeWith, onReadyToMerge }) { const session = find( x => x.id === sessionId, this._webphone.sessions @@ -812,7 +812,7 @@ export default class ConferenceCall extends RcModule { const isSessionOnhold = session.isOnHold; const sessionToMergeWith = find( - x => x.id === this.mergingPair.fromSessionId, + x => x.id === (sessionIdToMergeWith || this.mergingPair.fromSessionId), this._webphone.sessions ); diff --git a/packages/ringcentral-widgets-demo/dev-server/Phone.js b/packages/ringcentral-widgets-demo/dev-server/Phone.js index 7fd78082d3..fddc1a53fa 100644 --- a/packages/ringcentral-widgets-demo/dev-server/Phone.js +++ b/packages/ringcentral-widgets-demo/dev-server/Phone.js @@ -236,7 +236,7 @@ export default class BasePhone extends RcModule { return; } if (session.id === fromSessionIdOfCallsOnhold) { - routerInteraction.push('/calls/active'); + routerInteraction.replace('/calls/active'); return; } } diff --git a/packages/ringcentral-widgets/containers/CallCtrlPage/index.js b/packages/ringcentral-widgets/containers/CallCtrlPage/index.js index 925e5930e9..0a8cb66946 100644 --- a/packages/ringcentral-widgets/containers/CallCtrlPage/index.js +++ b/packages/ringcentral-widgets/containers/CallCtrlPage/index.js @@ -203,9 +203,6 @@ function mapToFunctions(_, { if (!session || webphone.isCallRecording({ session })) { return; } - if (conferenceCall) { - conferenceCall.setMergeParty({ fromSessionId: sessionId }); - } const outBoundOnholdCalls = filter( call => call.direction === callDirections.outbound, callMonitor.activeOnHoldCalls @@ -214,6 +211,9 @@ function mapToFunctions(_, { // goto 'calls on hold' page routerInteraction.push(`/conferenceCall/callsOnhold/${session.fromNumber}/${session.id}`); } else { + if (conferenceCall) { + conferenceCall.setMergeParty({ fromSessionId: sessionId }); + } // goto dialer directly routerInteraction.push(`/conferenceCall/dialer/${session.fromNumber}`); } diff --git a/packages/ringcentral-widgets/containers/CallsOnholdPage/index.js b/packages/ringcentral-widgets/containers/CallsOnholdPage/index.js index 644b5a5bea..e68faf7a73 100644 --- a/packages/ringcentral-widgets/containers/CallsOnholdPage/index.js +++ b/packages/ringcentral-widgets/containers/CallsOnholdPage/index.js @@ -76,6 +76,8 @@ function mapToFunctions(_, { getAvatarUrl, ...props }) { + const { fromSessionId } = params; + const baseProps = mapToBaseFunctions(_, { params, phone, @@ -86,6 +88,7 @@ function mapToFunctions(_, { async onMerge(sessionId) { await conferenceCall.mergeSession({ sessionId, + sessionIdToMergeWith: fromSessionId, onReadyToMerge() { routerInteraction.goBack(); }, From e965348d186208eb77b151abc09b4fecb4b9b585 Mon Sep 17 00:00:00 2001 From: Rukai Yu Date: Wed, 29 Aug 2018 09:09:50 +0800 Subject: [PATCH 2/2] fix(8432): fix the issue reported in RCINT-8432 that conference call dialer page doesn't handle mergingPair correctly --- .../ringcentral-widgets-demo/dev-server/Phone.js | 7 +++++-- .../dev-server/containers/App/index.js | 2 +- .../ActiveCallPanel.spec.js | 4 ++-- .../containers/CallCtrlPage/index.js | 9 ++------- .../containers/CallsOnholdPage/index.js | 13 +++++++++++-- .../containers/ConferenceCallDialerPage/index.js | 16 ++++++++++++++++ 6 files changed, 37 insertions(+), 14 deletions(-) diff --git a/packages/ringcentral-widgets-demo/dev-server/Phone.js b/packages/ringcentral-widgets-demo/dev-server/Phone.js index fddc1a53fa..509990203b 100644 --- a/packages/ringcentral-widgets-demo/dev-server/Phone.js +++ b/packages/ringcentral-widgets-demo/dev-server/Phone.js @@ -267,8 +267,11 @@ export default class BasePhone extends RcModule { routerInteraction.push('/calls/active'); return; } - if (conferenceCall.isMerging) { - routerInteraction.push('/calls/active/'); + const confId = conferenceCall.conferences && Object.keys(conferenceCall.conferences)[0]; + + if (conferenceCall.isMerging && confId) { + const sessionId = conferenceCall.conferences[confId].sessionId; + routerInteraction.push(`/calls/active/${sessionId}`); return; } routerInteraction.goBack(); diff --git a/packages/ringcentral-widgets-demo/dev-server/containers/App/index.js b/packages/ringcentral-widgets-demo/dev-server/containers/App/index.js index 4e68657bd5..91ae4a9ceb 100644 --- a/packages/ringcentral-widgets-demo/dev-server/containers/App/index.js +++ b/packages/ringcentral-widgets-demo/dev-server/containers/App/index.js @@ -261,7 +261,7 @@ export default function App({ )} /> ( { callCtrlPage.props().onAdd(conferenceSessionId); await timeout(500); wrapper.update(); - expect(phone.routerInteraction.currentPath).toEqual(`/conferenceCall/dialer/${conferenceSession.fromNumber}`); + expect(phone.routerInteraction.currentPath).toEqual(`/conferenceCall/dialer/${conferenceSession.fromNumber}/${conferenceSession.id}`); call({ phoneNumber: contactA.phoneNumbers[0].phoneNumber, }); @@ -274,7 +274,7 @@ describe('RCI-1710156: Call control add call flow', () => { addCircleButton.simulate('click'); wrapper.update(); const fromNumber = phone.webphone.activeSession.fromNumber; - expect(phone.routerInteraction.currentPath).toEqual(`/conferenceCall/dialer/${fromNumber}`); + expect(phone.routerInteraction.currentPath).toEqual(`/conferenceCall/dialer/${fromNumber}/${phone.webphone.activeSession.id}`); expect(wrapper.find(FromField)).toHaveLength(0); expect(wrapper.find(BackHeader)).toHaveLength(1); expect(wrapper.find(BackButton).find('.backLabel').text()).toEqual('Active Call'); diff --git a/packages/ringcentral-widgets/containers/CallCtrlPage/index.js b/packages/ringcentral-widgets/containers/CallCtrlPage/index.js index 0a8cb66946..b172b617bd 100644 --- a/packages/ringcentral-widgets/containers/CallCtrlPage/index.js +++ b/packages/ringcentral-widgets/containers/CallCtrlPage/index.js @@ -56,12 +56,7 @@ function mapToProps(_, { isOnConference = conferenceCall.isConferenceSession(currentSession.id); const conferenceData = Object.values(conferenceCall.conferences)[0]; - isMerging = conferenceCall.isMerging && !!( - Object - .values(conferenceCall.mergingPair) - .find(id => id === currentSession.id) - || (isOnConference) - ); + isMerging = conferenceCall.isMerging; if (conferenceData && isWebRTC) { conferenceCallId = conferenceData.conference.id; @@ -215,7 +210,7 @@ function mapToFunctions(_, { conferenceCall.setMergeParty({ fromSessionId: sessionId }); } // goto dialer directly - routerInteraction.push(`/conferenceCall/dialer/${session.fromNumber}`); + routerInteraction.push(`/conferenceCall/dialer/${session.fromNumber}/${sessionId}`); } }, onBeforeMerge(sessionId) { diff --git a/packages/ringcentral-widgets/containers/CallsOnholdPage/index.js b/packages/ringcentral-widgets/containers/CallsOnholdPage/index.js index e68faf7a73..a3a24eaba1 100644 --- a/packages/ringcentral-widgets/containers/CallsOnholdPage/index.js +++ b/packages/ringcentral-widgets/containers/CallsOnholdPage/index.js @@ -90,8 +90,17 @@ function mapToFunctions(_, { sessionId, sessionIdToMergeWith: fromSessionId, onReadyToMerge() { - routerInteraction.goBack(); + const confId = conferenceCall.conferences && Object.keys(conferenceCall.conferences)[0]; + + if (confId) { + const sessionId = conferenceCall.conferences[confId].sessionId; + + routerInteraction.push(`/calls/active/${sessionId}`); + } else { + routerInteraction.goBack(); + } }, + }); }, onBackButtonClick() { @@ -102,7 +111,7 @@ function mapToFunctions(_, { phone.routerInteraction.go(-2); }, onAdd() { - routerInteraction.push(`/conferenceCall/dialer/${params.fromNumber}`); + routerInteraction.push(`/conferenceCall/dialer/${params.fromNumber}/${params.fromSessionId}`); }, getAvatarUrl, isConferenceSession: (...args) => conferenceCall.isConferenceSession(...args), diff --git a/packages/ringcentral-widgets/containers/ConferenceCallDialerPage/index.js b/packages/ringcentral-widgets/containers/ConferenceCallDialerPage/index.js index ebfb6e9b68..1f27b52ce9 100644 --- a/packages/ringcentral-widgets/containers/ConferenceCallDialerPage/index.js +++ b/packages/ringcentral-widgets/containers/ConferenceCallDialerPage/index.js @@ -55,6 +55,9 @@ function mapToProps(_, { function mapToFunctions(_, { params, phone, + phone: { + conferenceCall + }, onBack, ...props }) { @@ -67,6 +70,19 @@ function mapToFunctions(_, { ...baseProps, onBack, onCallButtonClick() { + // set mergingPair if has + const { fromSessionId } = params; + if ( + fromSessionId && + conferenceCall && + conferenceCall.mergingPair && + !conferenceCall.mergingPair.fromSessionId + ) { + conferenceCall.setMergeParty({ + fromSessionId + }); + } + phone.dialerUI.onCallButtonClick({ fromNumber: params.fromNumber, });