| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 | 
							- import React, { Component } from 'react';
 - import { connect } from 'react-redux';
 - 
 - import { translate } from '../../base/i18n';
 - import { Dialog } from '../../base/dialog';
 - 
 - import { cancel, checkDialNumber, dial } from '../actions';
 - import DialOutNumbersForm from './DialOutNumbersForm';
 - 
 - /**
 -  * Implements a React {@link Component} which allows the user to dial out from
 -  * the conference.
 -  */
 - class DialOutDialog extends Component {
 -     /**
 -      * {@code DialOutDialog} component's property types.
 -      *
 -      * @static
 -      */
 -     static propTypes = {
 -         /**
 -          * The redux state representing the list of dial-out codes.
 -          */
 -         _dialOutCodes: React.PropTypes.array,
 - 
 -         /**
 -          * Property indicating if a dial number is allowed.
 -          */
 -         _isDialNumberAllowed: React.PropTypes.bool,
 - 
 -         /**
 -          * The function performing the cancel action.
 -          */
 -         cancel: React.PropTypes.func,
 - 
 -         /**
 -          * The function performing the phone number validity check.
 -          */
 -         checkDialNumber: React.PropTypes.func,
 - 
 -         /**
 -          * The function performing the dial action.
 -          */
 -         dial: React.PropTypes.func,
 - 
 -         /**
 -          * Invoked to obtain translated strings.
 -          */
 -         t: React.PropTypes.func
 -     };
 - 
 -     /**
 -      * Initializes a new {@code DialOutNumbersForm} instance.
 -      *
 -      * @param {Object} props - The read-only properties with which the new
 -      * instance is to be initialized.
 -      */
 -     constructor(props) {
 -         super(props);
 - 
 -         this.state = {
 -             /**
 -              * The number to dial.
 -              */
 -             dialNumber: '',
 - 
 -             /**
 -              * Indicates if the dial input is currently empty.
 -              */
 -             isDialInputEmpty: true
 -         };
 - 
 -         // Bind event handlers so they are only bound once for every instance.
 -         this._onDialNumberChange = this._onDialNumberChange.bind(this);
 -         this._onCancel = this._onCancel.bind(this);
 -         this._onSubmit = this._onSubmit.bind(this);
 -     }
 - 
 -     /**
 -      * Implements React's {@link Component#render()}.
 -      *
 -      * @inheritdoc
 -      * @returns {ReactElement}
 -      */
 -     render() {
 -         const { _isDialNumberAllowed } = this.props;
 - 
 -         return (
 -             <Dialog
 -                 okDisabled = { this.state.isDialInputEmpty
 -                     || !_isDialNumberAllowed }
 -                 okTitleKey = 'dialOut.dial'
 -                 onCancel = { this._onCancel }
 -                 onSubmit = { this._onSubmit }
 -                 titleKey = 'dialOut.dialOut'
 -                 width = 'small'>
 -                 { this._renderContent() }
 -             </Dialog>
 -         );
 -     }
 - 
 -     /**
 -      * Formats the dial number in a way to remove all non digital characters
 -      * from it (including spaces, brackets, dash, dot, etc.).
 -      *
 -      * @param {string} dialNumber - The phone number to format.
 -      * @private
 -      * @returns {string} - The formatted phone number.
 -      */
 -     _formatDialNumber(dialNumber) {
 -         return dialNumber.replace(/\D/g, '');
 -     }
 - 
 -     /**
 -      * Renders the dialog content.
 -      *
 -      * @returns {ReactElement}
 -      * @private
 -      */
 -     _renderContent() {
 -         const { _isDialNumberAllowed } = this.props;
 - 
 -         return (
 -             <div className = 'dial-out-content'>
 -                 { _isDialNumberAllowed ? '' : this._renderErrorMessage() }
 -                 <DialOutNumbersForm
 -                     onChange = { this._onDialNumberChange } />
 -             </div>);
 -     }
 - 
 -     /**
 -      * Renders the error message to display if the dial phone number is not
 -      * allowed.
 -      *
 -      * @returns {ReactElement}
 -      * @private
 -      */
 -     _renderErrorMessage() {
 -         const { t } = this.props;
 - 
 -         return (
 -             <div className = 'dial-out-error'>
 -                 { t('dialOut.phoneNotAllowed') }
 -             </div>);
 -     }
 - 
 -     /**
 -      * Cancel the dial out.
 -      *
 -      * @private
 -      * @returns {boolean} - Returns true to indicate that the dialog should be
 -      * closed.
 -      */
 -     _onCancel() {
 -         this.props.cancel();
 - 
 -         return true;
 -     }
 - 
 -     /**
 -      * Dials the number.
 -      *
 -      * @private
 -      * @returns {boolean} - Returns true to indicate that the dialog should be
 -      * closed.
 -      */
 -     _onSubmit() {
 -         if (this.props._isDialNumberAllowed) {
 -             this.props.dial(this.state.dialNumber);
 -         }
 - 
 -         return true;
 -     }
 - 
 -     /**
 -      * Updates the dialNumber and check for validity.
 -      *
 -      * @param {string} dialCode - The dial code value.
 -      * @param {string} dialInput - The dial input value.
 -      * @private
 -      * @returns {void}
 -      */
 -     _onDialNumberChange(dialCode, dialInput) {
 -         let formattedDialInput, formattedNumber;
 - 
 -         // if there are no dial out codes it is possible they are disabled
 -         // so we get the input as is, it can be just a sip address
 -         if (this.props._dialOutCodes) {
 -             // We remove all starting zeros from the dial input before attaching
 -             // it to the country code.
 -             formattedDialInput = dialInput.replace(/^(0+)/, '');
 - 
 -             const dialNumber = `${dialCode}${formattedDialInput}`;
 - 
 -             formattedNumber = this._formatDialNumber(dialNumber);
 - 
 -             this.props.checkDialNumber(formattedNumber);
 -         } else {
 -             formattedNumber = formattedDialInput = dialInput;
 -         }
 - 
 -         this.setState({
 -             dialNumber: formattedNumber,
 -             isDialInputEmpty: !formattedDialInput
 -             || formattedDialInput.length === 0
 -         });
 -     }
 - }
 - 
 - /**
 -  * Maps (parts of) the Redux state to the associated
 -  * {@code DialOutDialog}'s props.
 -  *
 -  * @param {Object} state - The Redux state.
 -  * @private
 -  * @returns {{
 -  *     _isDialNumberAllowed: React.PropTypes.bool
 -  * }}
 -  */
 - function _mapStateToProps(state) {
 -     const { dialOutCodes, isDialNumberAllowed } = state['features/dial-out'];
 - 
 -     return {
 -         /**
 -          * List of dial-out codes.
 -          *
 -          * @private
 -          * @type {array}
 -          */
 -         _dialOutCodes: dialOutCodes,
 - 
 -         /**
 -          * Property indicating if a dial number is allowed.
 -          *
 -          * @private
 -          * @type {boolean}
 -          */
 -         _isDialNumberAllowed: isDialNumberAllowed
 -     };
 - }
 - 
 - export default translate(
 -     connect(_mapStateToProps, {
 -         cancel,
 -         checkDialNumber,
 -         dial
 -     })(DialOutDialog));
 
 
  |