ringcentral-widget
Version:
RingCentral Integration Widget Library
374 lines (320 loc) • 12.9 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _reactRedux = require('react-redux');
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _formatNumber = require('ringcentral-integration/lib/formatNumber');
var _formatNumber2 = _interopRequireDefault(_formatNumber);
var _Webphone = require('ringcentral-integration/modules/Webphone');
var _Webphone2 = _interopRequireDefault(_Webphone);
var _Brand = require('ringcentral-integration/modules/Brand');
var _Brand2 = _interopRequireDefault(_Brand);
var _Locale = require('ringcentral-integration/modules/Locale');
var _Locale2 = _interopRequireDefault(_Locale);
var _RegionSettings = require('ringcentral-integration/modules/RegionSettings');
var _RegionSettings2 = _interopRequireDefault(_RegionSettings);
var _callDirections = require('ringcentral-integration/enums/callDirections');
var _callDirections2 = _interopRequireDefault(_callDirections);
var _ForwardingNumber = require('ringcentral-integration/modules/ForwardingNumber');
var _ForwardingNumber2 = _interopRequireDefault(_ForwardingNumber);
var _CallCtrlPanel = require('../../components/CallCtrlPanel');
var _CallCtrlPanel2 = _interopRequireDefault(_CallCtrlPanel);
var _i18n = require('./i18n');
var _i18n2 = _interopRequireDefault(_i18n);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var CallCtrlPage = function (_Component) {
(0, _inherits3.default)(CallCtrlPage, _Component);
function CallCtrlPage(props) {
(0, _classCallCheck3.default)(this, CallCtrlPage);
var _this = (0, _possibleConstructorReturn3.default)(this, (CallCtrlPage.__proto__ || (0, _getPrototypeOf2.default)(CallCtrlPage)).call(this, props));
_this.state = {
selectedMatcherIndex: 0,
avatarUrl: null
};
_this.onSelectMatcherName = function (option) {
var nameMatches = _this.props.nameMatches || [];
var selectedMatcherIndex = nameMatches.findIndex(function (match) {
return match.id === option.id;
});
if (selectedMatcherIndex < 0) {
selectedMatcherIndex = 0;
}
_this.setState({
selectedMatcherIndex: selectedMatcherIndex,
avatarUrl: null
});
var contact = nameMatches[selectedMatcherIndex];
if (contact) {
_this.props.updateSessionMatchedContact(_this.props.session.id, contact);
_this.props.getAvatarUrl(contact).then(function (avatarUrl) {
_this.setState({ avatarUrl: avatarUrl });
});
}
};
_this.onMute = function () {
return _this.props.onMute(_this.props.session.id);
};
_this.onUnmute = function () {
return _this.props.onUnmute(_this.props.session.id);
};
_this.onHold = function () {
return _this.props.onHold(_this.props.session.id);
};
_this.onUnhold = function () {
return _this.props.onUnhold(_this.props.session.id);
};
_this.onRecord = function () {
return _this.props.onRecord(_this.props.session.id);
};
_this.onStopRecord = function () {
return _this.props.onStopRecord(_this.props.session.id);
};
_this.hangup = function () {
return _this.props.hangup(_this.props.session.id);
};
_this.onKeyPadChange = function (value) {
return _this.props.sendDTMF(value, _this.props.session.id);
};
_this.flip = function (value) {
return _this.props.flip(value, _this.props.session.id);
};
return _this;
}
(0, _createClass3.default)(CallCtrlPage, [{
key: 'componentDidMount',
value: function componentDidMount() {
this._updateAvatarAndMatchIndex(this.props);
}
}, {
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
if (this.props.session.id !== nextProps.session.id) {
this._updateAvatarAndMatchIndex(nextProps);
}
}
}, {
key: '_updateAvatarAndMatchIndex',
value: function _updateAvatarAndMatchIndex(props) {
var _this2 = this;
var contact = props.session.contactMatch;
var selectedMatcherIndex = 0;
if (!contact) {
contact = props.nameMatches && props.nameMatches[0];
} else {
selectedMatcherIndex = props.nameMatches.findIndex(function (match) {
return match.id === contact.id;
});
}
this.setState({
selectedMatcherIndex: selectedMatcherIndex,
avatarUrl: null
});
if (contact) {
props.getAvatarUrl(contact).then(function (avatarUrl) {
_this2.setState({ avatarUrl: avatarUrl });
});
}
}
}, {
key: 'render',
value: function render() {
var session = this.props.session;
if (!session.id) {
return null;
}
var phoneNumber = session.direction === _callDirections2.default.outbound ? session.to : session.from;
var fallbackUserName = void 0;
if (session.direction === _callDirections2.default.inbound && session.from === 'anonymous') {
fallbackUserName = _i18n2.default.getString('anonymous', this.props.currentLocale);
}
if (!fallbackUserName) {
fallbackUserName = _i18n2.default.getString('unknown', this.props.currentLocale);
}
return _react2.default.createElement(
_CallCtrlPanel2.default,
{
backButtonLabel: _i18n2.default.getString('activeCalls', this.props.currentLocale),
currentLocale: this.props.currentLocale,
formatPhone: this.props.formatPhone,
phoneNumber: phoneNumber,
sessionId: session.id,
callStatus: session.callStatus,
startTime: session.startTime,
isOnMute: session.isOnMute,
isOnHold: session.isOnHold,
isOnFlip: session.isOnFlip,
recordStatus: session.recordStatus,
onBackButtonClick: this.props.onBackButtonClick,
onMute: this.onMute,
onUnmute: this.onUnmute,
onHold: this.onHold,
onUnhold: this.onUnhold,
onRecord: this.onRecord,
onStopRecord: this.onStopRecord,
onKeyPadChange: this.onKeyPadChange,
hangup: this.hangup,
onAdd: this.props.onAdd,
flip: this.flip,
nameMatches: this.props.nameMatches,
fallBackName: fallbackUserName,
areaCode: this.props.areaCode,
countryCode: this.props.countryCode,
selectedMatcherIndex: this.state.selectedMatcherIndex,
onSelectMatcherName: this.onSelectMatcherName,
avatarUrl: this.state.avatarUrl,
brand: this.props.brand,
showContactDisplayPlaceholder: this.props.showContactDisplayPlaceholder,
flipNumbers: this.props.flipNumbers
},
this.props.children
);
}
}]);
return CallCtrlPage;
}(_react.Component);
CallCtrlPage.propTypes = {
session: _propTypes2.default.shape({
id: _propTypes2.default.string,
direction: _propTypes2.default.string,
startTime: _propTypes2.default.number,
isOnMute: _propTypes2.default.bool,
isOnHold: _propTypes2.default.bool,
isOnRecord: _propTypes2.default.bool,
isOnFlip: _propTypes2.default.bool,
to: _propTypes2.default.string,
from: _propTypes2.default.string,
contactMatch: _propTypes2.default.object
}).isRequired,
currentLocale: _propTypes2.default.string.isRequired,
onMute: _propTypes2.default.func.isRequired,
onUnmute: _propTypes2.default.func.isRequired,
onHold: _propTypes2.default.func.isRequired,
onUnhold: _propTypes2.default.func.isRequired,
onRecord: _propTypes2.default.func.isRequired,
onStopRecord: _propTypes2.default.func.isRequired,
hangup: _propTypes2.default.func.isRequired,
sendDTMF: _propTypes2.default.func.isRequired,
formatPhone: _propTypes2.default.func.isRequired,
onAdd: _propTypes2.default.func.isRequired,
flip: _propTypes2.default.func.isRequired,
children: _propTypes2.default.node,
nameMatches: _propTypes2.default.array.isRequired,
areaCode: _propTypes2.default.string.isRequired,
countryCode: _propTypes2.default.string.isRequired,
getAvatarUrl: _propTypes2.default.func.isRequired,
onBackButtonClick: _propTypes2.default.func.isRequired,
updateSessionMatchedContact: _propTypes2.default.func.isRequired,
brand: _propTypes2.default.string.isRequired,
showContactDisplayPlaceholder: _propTypes2.default.bool.isRequired,
flipNumbers: _propTypes2.default.array.isRequired
};
CallCtrlPage.defaultProps = {
children: undefined
};
function mapToProps(_, _ref) {
var webphone = _ref.webphone,
locale = _ref.locale,
contactMatcher = _ref.contactMatcher,
regionSettings = _ref.regionSettings,
brand = _ref.brand,
forwardingNumber = _ref.forwardingNumber;
var currentSession = webphone.activeSession || {};
var contactMapping = contactMatcher && contactMatcher.dataMapping;
var fromMatches = contactMapping && contactMapping[currentSession.from] || [];
var toMatches = contactMapping && contactMapping[currentSession.to] || [];
var nameMatches = currentSession.direction === _callDirections2.default.outbound ? toMatches : fromMatches;
return {
brand: brand.fullName,
nameMatches: nameMatches,
currentLocale: locale.currentLocale,
session: currentSession,
areaCode: regionSettings.areaCode,
countryCode: regionSettings.countryCode,
flipNumbers: forwardingNumber.flipNumbers
};
}
function mapToFunctions(_, _ref2) {
var webphone = _ref2.webphone,
regionSettings = _ref2.regionSettings,
getAvatarUrl = _ref2.getAvatarUrl,
onBackButtonClick = _ref2.onBackButtonClick,
onAdd = _ref2.onAdd;
return {
formatPhone: function formatPhone(phoneNumber) {
return (0, _formatNumber2.default)({
phoneNumber: phoneNumber,
areaCode: regionSettings.areaCode,
countryCode: regionSettings.countryCode
});
},
hangup: function hangup(sessionId) {
return webphone.hangup(sessionId);
},
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) {
return webphone.unhold(sessionId);
},
onRecord: function onRecord(sessionId) {
return webphone.startRecord(sessionId);
},
onStopRecord: function onStopRecord(sessionId) {
return webphone.stopRecord(sessionId);
},
sendDTMF: function sendDTMF(value, sessionId) {
return webphone.sendDTMF(value, sessionId);
},
updateSessionMatchedContact: function updateSessionMatchedContact(sessionId, contact) {
return webphone.updateSessionMatchedContact(sessionId, contact);
},
getAvatarUrl: getAvatarUrl,
onBackButtonClick: onBackButtonClick,
onAdd: onAdd,
flip: function flip(flipNumber, sessionId) {
return webphone.flip(flipNumber, sessionId);
}
};
}
var CallCtrlContainer = (0, _reactRedux.connect)(mapToProps, mapToFunctions)(CallCtrlPage);
CallCtrlContainer.propTypes = {
webphone: _propTypes2.default.instanceOf(_Webphone2.default).isRequired,
locale: _propTypes2.default.instanceOf(_Locale2.default).isRequired,
brand: _propTypes2.default.instanceOf(_Brand2.default).isRequired,
regionSettings: _propTypes2.default.instanceOf(_RegionSettings2.default).isRequired,
forwardingNumber: _propTypes2.default.instanceOf(_ForwardingNumber2.default).isRequired,
getAvatarUrl: _propTypes2.default.func,
onBackButtonClick: _propTypes2.default.func.isRequired,
onAdd: _propTypes2.default.func.isRequired,
children: _propTypes2.default.node,
showContactDisplayPlaceholder: _propTypes2.default.bool
};
CallCtrlContainer.defaultProps = {
getAvatarUrl: function getAvatarUrl() {
return null;
},
showContactDisplayPlaceholder: false,
children: undefined
};
exports.default = CallCtrlContainer;
//# sourceMappingURL=index.js.map