@@ -12,6 +12,7 @@ import debounce from 'ringcentral-integration/lib/debounce';
1212
1313import AdapterModuleCore from 'ringcentral-widgets/lib/AdapterModuleCore' ;
1414
15+ import formatMeetingInfo from '../../lib/formatMeetingInfo' ;
1516import messageTypes from '../../lib/Adapter/messageTypes' ;
1617import actionTypes from './actionTypes' ;
1718import getReducer from './getReducer' ;
@@ -25,6 +26,7 @@ const CALL_NOTIFY_DELAY = 1500;
2526 'ExtensionInfo' ,
2627 'AccountInfo' ,
2728 'RouterInteraction' ,
29+ 'RolesAndPermissions' ,
2830 'Presence' ,
2931 'ComposeText' ,
3032 'Call' ,
@@ -38,6 +40,8 @@ const CALL_NOTIFY_DELAY = 1500;
3840 'MessageStore' ,
3941 'TabManager' ,
4042 'CallLogger' ,
43+ 'Meeting' ,
44+ 'Brand' ,
4145 { dep : 'AdapterOptions' , optional : true }
4246 ]
4347} )
@@ -61,6 +65,9 @@ export default class Adapter extends AdapterModuleCore {
6165 disableInactiveTabCallEvent,
6266 tabManager,
6367 callLogger,
68+ meeting,
69+ brand,
70+ rolesAndPermissions,
6471 ...options
6572 } ) {
6673 super ( {
@@ -87,6 +94,9 @@ export default class Adapter extends AdapterModuleCore {
8794 this . _callLogger = callLogger ;
8895 this . _extensionInfo = extensionInfo ;
8996 this . _accountInfo = accountInfo ;
97+ this . _meeting = meeting ;
98+ this . _brand = brand ;
99+ this . _rolesAndPermissions = rolesAndPermissions ;
90100
91101 this . _reducer = getReducer ( this . actionTypes ) ;
92102 this . _callSessions = new Map ( ) ;
@@ -99,6 +109,8 @@ export default class Adapter extends AdapterModuleCore {
99109 this . _lastActiveCallLogMap = { } ;
100110 this . _callWith = null ;
101111 this . _callLoggerAutoLogEnabled = null ;
112+ this . _dialerDisabled = null ;
113+ this . _meetingReady = null ;
102114
103115 this . _messageStore . onNewInboundMessage ( ( message ) => {
104116 this . _postMessage ( {
@@ -176,6 +188,8 @@ export default class Adapter extends AdapterModuleCore {
176188 this . _checkRouteChanged ( ) ;
177189 this . _checkCallingSettingsChanged ( ) ;
178190 this . _checkAutoCallLoggerChanged ( ) ;
191+ this . _checkDialUIStatusChanged ( ) ;
192+ this . _checkMeetingStatusChanged ( ) ;
179193 }
180194
181195 _onMessage ( event ) {
@@ -205,13 +219,49 @@ export default class Adapter extends AdapterModuleCore {
205219 if ( this . _callingSettings . ready ) {
206220 this . _updateCallingSettings ( data ) ;
207221 }
222+ break ;
223+ case 'rc-adapter-message-request' : {
224+ this . _handleRCAdapterMessageRequest ( data ) ;
225+ break ;
226+ }
227+ case 'rc-adapter-navigate-to' : {
228+ if ( data . path && data . path . indexOf ( '/' ) === 0 ) {
229+ this . _router . push ( data . path ) ;
230+ }
231+ break ;
232+ }
208233 default :
209234 super . _onMessage ( data ) ;
210235 break ;
211236 }
212237 }
213238 }
214239
240+ async _handleRCAdapterMessageRequest ( data ) {
241+ if ( ! data . path ) {
242+ return ;
243+ }
244+ switch ( data . path ) {
245+ case '/schedule-meeting' : {
246+ if ( this . _meeting . ready && this . _rolesAndPermissions . organizeMeetingEnabled ) {
247+ const res = await this . _scheduleMeeting ( data . body ) ;
248+ this . _postRCAdapterMessageResponse ( {
249+ responseId : data . requestId ,
250+ response : res ,
251+ } ) ;
252+ }
253+ break ;
254+ }
255+ default : {
256+ this . _postRCAdapterMessageResponse ( {
257+ responseId : data . requestId ,
258+ response : { data : 'no matched path' }
259+ } ) ;
260+ break ;
261+ }
262+ }
263+ }
264+
215265 _pushAdapterState ( ) {
216266 this . _postMessage ( {
217267 type : this . _messageTypes . pushAdapterState ,
@@ -417,6 +467,32 @@ export default class Adapter extends AdapterModuleCore {
417467 this . _postMessage ( message ) ;
418468 }
419469
470+ _checkDialUIStatusChanged ( ) {
471+ if ( this . _dialerDisabled === this . _dialerUI . isCallButtonDisabled ) {
472+ return ;
473+ }
474+ this . _dialerDisabled = this . _dialerUI . isCallButtonDisabled ;
475+ this . _postMessage ( {
476+ type : 'rc-dialer-status-notify' ,
477+ ready : ! this . _dialerUI . showSpinner && ! this . _dialerUI . isCallButtonDisabled ,
478+ } ) ;
479+ }
480+
481+ _checkMeetingStatusChanged ( ) {
482+ if ( this . _meetingReady === this . _meeting . ready ) {
483+ return ;
484+ }
485+ this . _meetingReady = this . _meeting . ready ;
486+ this . _postMessage ( {
487+ type : 'rc-meeting-status-notify' ,
488+ ready : this . _meeting . ready ,
489+ permission : ! ! (
490+ this . _rolesAndPermissions . ready &&
491+ this . _rolesAndPermissions . organizeMeetingEnabled
492+ ) ,
493+ } ) ;
494+ }
495+
420496 _insertExtendStyle ( ) {
421497 if ( ! this . _stylesUri ) {
422498 return ;
@@ -618,13 +694,34 @@ export default class Adapter extends AdapterModuleCore {
618694 }
619695 }
620696
697+ async _scheduleMeeting ( data ) {
698+ const resp = await phone . meeting . schedule ( data ) ;
699+ if ( ! resp ) {
700+ return {
701+ error : 'schedule failed'
702+ } ;
703+ }
704+ const formatedMeetingInfo = formatMeetingInfo ( resp , this . _brand , this . _locale . currentLocale ) ;
705+ return {
706+ meeting : formatedMeetingInfo ,
707+ } ;
708+ }
709+
621710 // eslint-disable-next-line
622711 _postMessage ( data ) {
623712 if ( window && window . parent ) {
624713 window . parent . postMessage ( data , '*' ) ;
625714 }
626715 }
627716
717+ _postRCAdapterMessageResponse ( { responseId, response } ) {
718+ this . _postMessage ( {
719+ type : 'rc-adapter-message-response' ,
720+ responseId,
721+ response,
722+ } ) ;
723+ }
724+
628725 get ready ( ) {
629726 return this . state . status === moduleStatuses . ready ;
630727 }
0 commit comments