ringcentral-widgets
Version:
RingCentral Integration Widget Library
441 lines (361 loc) • 20.8 kB
JavaScript
;
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
require("core-js/modules/es7.symbol.async-iterator");
require("core-js/modules/es6.symbol");
require("core-js/modules/es6.promise");
require("core-js/modules/es6.object.define-property");
require("core-js/modules/es6.object.create");
require("core-js/modules/es6.reflect.construct");
require("core-js/modules/es6.object.set-prototype-of");
require("core-js/modules/es6.array.filter");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.CallControlUI = void 0;
require("regenerator-runtime/runtime");
require("core-js/modules/web.dom.iterable");
require("core-js/modules/es6.array.iterator");
require("core-js/modules/es6.object.to-string");
require("core-js/modules/es7.object.values");
require("core-js/modules/es6.array.find");
var _core = require("@ringcentral-integration/core");
var _ramda = require("ramda");
var _di = require("ringcentral-integration/lib/di");
var _callDirections = _interopRequireDefault(require("../../../ringcentral-integration/enums/callDirections"));
var _formatNumber = require("../../../ringcentral-integration/lib/formatNumber");
var _callingModes = _interopRequireDefault(require("../../../ringcentral-integration/modules/CallingSettings/callingModes"));
var _sessionStatus = require("../../../ringcentral-integration/modules/Webphone/sessionStatus");
var _callCtrlLayouts = _interopRequireDefault(require("../../enums/callCtrlLayouts"));
var _CallControlUI = require("./CallControlUI.interface");
var _dec, _class;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
var CallControlUI = (_dec = (0, _di.Module)({
name: 'CallControlUI',
deps: ['Webphone', 'Locale', 'ContactMatcher', 'RegionSettings', 'Brand', 'ContactSearch', 'CallingSettings', 'ConnectivityManager', 'ForwardingNumber', 'CallMonitor', 'ExtensionInfo', {
dep: 'ConferenceCall',
optional: true
}, {
dep: 'RouterInteraction',
optional: true
}]
}), _dec(_class = /*#__PURE__*/function (_RcUIModuleV) {
_inherits(CallControlUI, _RcUIModuleV);
var _super = _createSuper(CallControlUI);
function CallControlUI(deps) {
var _this;
_classCallCheck(this, CallControlUI);
_this = _super.call(this, {
deps: deps
});
_this.getInitialLayout = function (_ref) {
var conferenceCallEquipped = _ref.conferenceCallEquipped,
isOnConference = _ref.isOnConference,
lastCallInfo = _ref.lastCallInfo,
session = _ref.session;
var _this$_deps = _this._deps,
conferenceCall = _this$_deps.conferenceCall,
webphone = _this$_deps.webphone;
var layout = _callCtrlLayouts["default"].normalCtrl;
if (session.warmTransferSessionId) {
return _callCtrlLayouts["default"].completeTransferCtrl;
}
if (!conferenceCallEquipped) {
return layout;
}
if (isOnConference) {
return _callCtrlLayouts["default"].conferenceCtrl;
}
var isInboundCall = session.direction === _callDirections["default"].inbound;
var fromSessionId = conferenceCall.mergingPair.fromSessionId;
var fromSession = (0, _ramda.find)(function (x) {
return x.id === fromSessionId;
}, webphone.sessions);
var activeSessionId = webphone && webphone.activeSession && webphone.activeSession.id;
if (!isOnConference && !isInboundCall && fromSession && fromSessionId !== session.id && lastCallInfo && (session.callStatus !== _sessionStatus.sessionStatus.onHold || session.callStatus === _sessionStatus.sessionStatus.onHold && session.id === activeSessionId)) {
// enter merge ctrl page.
layout = _callCtrlLayouts["default"].mergeCtrl;
}
return layout;
};
return _this;
}
_createClass(CallControlUI, [{
key: "getUIProps",
value: function getUIProps(_ref2) {
var _contactMapping$curre, _contactMapping$curre2, _conferenceCall$hasPe, _conferenceCall$mergi;
var params = _ref2.params,
_ref2$showCallQueueNa = _ref2.showCallQueueName,
showCallQueueName = _ref2$showCallQueueNa === void 0 ? false : _ref2$showCallQueueNa,
_ref2$showPark = _ref2.showPark,
showPark = _ref2$showPark === void 0 ? false : _ref2$showPark,
children = _ref2.children;
var _this$_deps2 = this._deps,
brand = _this$_deps2.brand,
callingSettings = _this$_deps2.callingSettings,
conferenceCall = _this$_deps2.conferenceCall,
connectivityManager = _this$_deps2.connectivityManager,
contactMatcher = _this$_deps2.contactMatcher,
contactSearch = _this$_deps2.contactSearch,
forwardingNumber = _this$_deps2.forwardingNumber,
regionSettings = _this$_deps2.regionSettings,
locale = _this$_deps2.locale,
webphone = _this$_deps2.webphone;
var sessionId = params === null || params === void 0 ? void 0 : params.sessionId;
var currentSession = (sessionId ? (0, _ramda.find)(function (session) {
return session.id === sessionId;
}, webphone.sessions) : webphone.activeSession) || {};
var contactMapping = contactMatcher === null || contactMatcher === void 0 ? void 0 : contactMatcher.dataMapping;
var fromMatches = (_contactMapping$curre = contactMapping === null || contactMapping === void 0 ? void 0 : contactMapping[currentSession.from]) !== null && _contactMapping$curre !== void 0 ? _contactMapping$curre : [];
var toMatches = (_contactMapping$curre2 = contactMapping === null || contactMapping === void 0 ? void 0 : contactMapping[currentSession.to]) !== null && _contactMapping$curre2 !== void 0 ? _contactMapping$curre2 : [];
var nameMatches = currentSession.direction === _callDirections["default"].outbound ? toMatches : fromMatches;
var isWebRTC = callingSettings.callingMode === _callingModes["default"].webphone;
var isInboundCall = currentSession.direction === _callDirections["default"].inbound;
var lastCallInfo = conferenceCall === null || conferenceCall === void 0 ? void 0 : conferenceCall.lastCallInfo;
var conferenceCallEquipped = (_conferenceCall$hasPe = conferenceCall === null || conferenceCall === void 0 ? void 0 : conferenceCall.hasPermission) !== null && _conferenceCall$hasPe !== void 0 ? _conferenceCall$hasPe : false;
var conferenceData = conferenceCallEquipped ? (0, _ramda.values)(conferenceCall.conferences)[0] : undefined;
var isOnConference = conferenceCallEquipped ? conferenceCall.isConferenceSession(currentSession.id) : false;
var isMerging = conferenceCallEquipped && conferenceCall.isMerging;
var conferenceCallId = conferenceData && isWebRTC ? conferenceData.conference.id : null;
var isConferenceCallOverload = conferenceData && isWebRTC ? conferenceCall.isOverload(conferenceCallId) : false;
var hasConferenceCall = !!conferenceData;
var conferenceCallParties = conferenceCallEquipped ? conferenceCall.partyProfiles : undefined; // TODO: investigate whether this can simply use isMerging
var fromSessionId = conferenceCallEquipped ? (_conferenceCall$mergi = conferenceCall.mergingPair) === null || _conferenceCall$mergi === void 0 ? void 0 : _conferenceCall$mergi.fromSessionId : undefined;
var hideChildren = conferenceCallEquipped && !isInboundCall && fromSessionId && fromSessionId !== currentSession.id;
lastCallInfo && lastCallInfo.status !== _sessionStatus.sessionStatus.finished;
if (currentSession.warmTransferSessionId) {
var warmTransferSession = webphone.sessions.find(function (session) {
return session.id === currentSession.warmTransferSessionId;
});
lastCallInfo = (0, _CallControlUI.getLastCallInfoFromWebphoneSession)(warmTransferSession);
}
var disableLinks = !!(connectivityManager.isOfflineMode || connectivityManager.isVoipOnlyMode);
return {
brand: brand.fullName,
nameMatches: nameMatches,
currentLocale: locale.currentLocale,
session: currentSession,
areaCode: regionSettings.areaCode,
countryCode: regionSettings.countryCode,
showBackButton: true,
// callMonitor.calls.length > 0,
searchContactList: contactSearch.sortedResult,
showSpinner: isMerging,
conferenceCallEquipped: conferenceCallEquipped,
hasConferenceCall: hasConferenceCall,
conferenceCallParties: conferenceCallParties,
conferenceCallId: conferenceCallId,
lastCallInfo: lastCallInfo,
// TODO: investigate whether it's better to just
// use isMerging and let the component decide whether to display children
children: hideChildren ? null : children,
isOnConference: isOnConference,
isWebRTC: isWebRTC,
disableLinks: disableLinks,
isConferenceCallOverload: isConferenceCallOverload,
disableFlip: forwardingNumber.flipNumbers.length === 0,
showCallQueueName: showCallQueueName,
showPark: showPark
};
}
}, {
key: "getUIFunctions",
value: function getUIFunctions(_ref3) {
var getAvatarUrl = _ref3.getAvatarUrl,
onBackButtonClick = _ref3.onBackButtonClick,
phoneTypeRenderer = _ref3.phoneTypeRenderer,
phoneSourceNameRenderer = _ref3.phoneSourceNameRenderer;
var _this$_deps3 = this._deps,
conferenceCall = _this$_deps3.conferenceCall,
webphone = _this$_deps3.webphone,
regionSettings = _this$_deps3.regionSettings,
extensionInfo = _this$_deps3.extensionInfo,
callingSettings = _this$_deps3.callingSettings,
callMonitor = _this$_deps3.callMonitor,
routerInteraction = _this$_deps3.routerInteraction,
contactSearch = _this$_deps3.contactSearch;
return {
getInitialLayout: this.getInitialLayout,
formatPhone: function formatPhone(phoneNumber) {
var _extensionInfo$site$c, _extensionInfo$site;
return (0, _formatNumber.formatNumber)({
phoneNumber: phoneNumber,
areaCode: regionSettings.areaCode,
countryCode: regionSettings.countryCode,
siteCode: (_extensionInfo$site$c = extensionInfo === null || extensionInfo === void 0 ? void 0 : (_extensionInfo$site = extensionInfo.site) === null || _extensionInfo$site === void 0 ? void 0 : _extensionInfo$site.code) !== null && _extensionInfo$site$c !== void 0 ? _extensionInfo$site$c : '',
isMultipleSiteEnabled: extensionInfo.isMultipleSiteEnabled
});
},
onHangup: function onHangup(sessionId, layout) {
webphone.hangup(sessionId);
if (layout && layout === _callCtrlLayouts["default"].mergeCtrl) {
callMonitor.mergeControlClickHangupTrack();
}
},
onMute: function onMute(sessionId) {
return webphone.mute(sessionId);
},
onUnmute: function onUnmute(sessionId) {
return webphone.unmute(sessionId);
},
onHold: function onHold(sessionId) {
return webphone.hold(sessionId);
},
onUnhold: function onUnhold(sessionId) {
webphone.unhold(sessionId);
},
onRecord: function onRecord(sessionId) {
return webphone.startRecord(sessionId);
},
onStopRecord: function onStopRecord(sessionId) {
return webphone.stopRecord(sessionId);
},
sendDTMF: function sendDTMF() {
return webphone.sendDTMF.apply(webphone, arguments);
},
updateSessionMatchedContact: function updateSessionMatchedContact() {
return webphone.updateSessionMatchedContact.apply(webphone, arguments);
},
getAvatarUrl: getAvatarUrl,
onBackButtonClick: onBackButtonClick,
onFlip: function onFlip(sessionId) {
routerInteraction.push("/flip/".concat(sessionId));
},
onTransfer: function onTransfer(sessionId) {
routerInteraction.push("/transfer/".concat(sessionId, "/webphone"));
},
onCompleteTransfer: function onCompleteTransfer(sessionId) {
webphone.completeWarmTransfer(sessionId);
},
onPark: function onPark(sessionId) {
return webphone.park(sessionId);
},
searchContact: function searchContact(searchString) {
return contactSearch.debouncedSearch({
searchString: searchString
});
},
phoneTypeRenderer: phoneTypeRenderer,
phoneSourceNameRenderer: phoneSourceNameRenderer,
onAdd: function onAdd(sessionId) {
// track user click add on call control
callMonitor.callControlClickAddTrack();
var session = (0, _ramda.find)(function (x) {
return x.id === sessionId;
}, webphone.sessions);
if (!session || !conferenceCall.validateCallRecording(session)) {
return;
}
var fromNumber = callingSettings.fromNumber;
if (session.direction === _callDirections["default"].outbound) {
fromNumber = session.fromNumber; // keep the same fromNumber
}
var otherCalls = (0, _ramda.filter)(function (call) {
return call.webphoneSession && call.webphoneSession.id !== session.id;
}, callMonitor.allCalls);
if (otherCalls.length) {
// goto 'calls on hold' page
routerInteraction.push("/conferenceCall/callsOnhold/".concat(fromNumber, "/").concat(session.id));
} else {
if (conferenceCall) {
conferenceCall.setMergeParty({
fromSessionId: sessionId
});
} // goto dialer directly
routerInteraction.push("/conferenceCall/dialer/".concat(fromNumber, "/").concat(sessionId));
}
},
onBeforeMerge: function onBeforeMerge(sessionId) {
var session = (0, _ramda.find)(function (x) {
return x.id === sessionId;
}, webphone.sessions);
if (!session || !conferenceCall.validateCallRecording(session)) {
return false;
}
if (conferenceCall) {
var conferenceData = Object.values(conferenceCall.conferences)[0];
if (conferenceData) {
var conferenceSession = (0, _ramda.find)(function (x) {
return x.id === conferenceData.sessionId;
}, webphone.sessions);
if (conferenceSession && !conferenceCall.validateCallRecording(conferenceSession)) {
return false;
}
}
}
return true;
},
onMerge: function () {
var _onMerge = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(sessionId) {
var sessions;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return conferenceCall.parseMergingSessions({
sessionId: sessionId
});
case 2:
sessions = _context.sent;
if (!sessions) {
_context.next = 6;
break;
}
_context.next = 6;
return conferenceCall.mergeSessions(sessions);
case 6:
case "end":
return _context.stop();
}
}
}, _callee);
}));
function onMerge(_x) {
return _onMerge.apply(this, arguments);
}
return onMerge;
}(),
gotoParticipantsCtrl: function gotoParticipantsCtrl() {
routerInteraction.push('/conferenceCall/participants'); // track user click participant area on call control
callMonitor.callControlClickParticipantAreaTrack();
},
loadConference: function loadConference(conferenceId) {
if (conferenceCall) {
conferenceCall.loadConference(conferenceId);
}
},
closeMergingPair: function closeMergingPair() {
return conferenceCall && conferenceCall.closeMergingPair();
},
setMergeParty: function setMergeParty() {
return conferenceCall && conferenceCall.setMergeParty.apply(conferenceCall, arguments);
},
// user action track functions
afterHideMergeConfirm: function afterHideMergeConfirm() {
return callMonitor.confirmMergeClickCloseTrack();
},
afterConfirmMerge: function afterConfirmMerge() {
return callMonitor.confirmMergeClickMergeTrack();
},
afterOnMerge: function afterOnMerge() {
return callMonitor.callControlClickMergeTrack();
}
};
}
}]);
return CallControlUI;
}(_core.RcUIModuleV2)) || _class);
exports.CallControlUI = CallControlUI;
//# sourceMappingURL=CallControlUI.js.map