scratch-www/src/components/forms/phone-input.jsx

69 lines
2.5 KiB
React
Raw Normal View History

2016-06-02 15:25:02 -04:00
var classNames = require('classnames');
var React = require('react');
var FormsyMixin = require('formsy-react').Mixin;
var ReactPhoneInput = require('react-telephone-input/lib/withStyles');
var allCountries = require('react-telephone-input/lib/country_data').allCountries;
2016-06-02 15:25:02 -04:00
var defaultValidationHOC = require('./validations.jsx').defaultValidationHOC;
var validationHOCFactory = require('./validations.jsx').validationHOCFactory;
var Row = require('formsy-react-components').Row;
var ComponentMixin = require('formsy-react-components').ComponentMixin;
var inputHOC = require('./input-hoc.jsx');
2016-06-02 15:25:02 -04:00
2016-06-03 11:28:04 -04:00
var allIso2 = allCountries.map(function (country) {return country.iso2;});
require('./row.scss');
2016-06-23 07:27:43 -04:00
require('./phone-input.scss');
2016-06-02 15:25:02 -04:00
var PhoneInput = React.createClass({
displayName: 'PhoneInput',
mixins: [
FormsyMixin,
ComponentMixin
],
getDefaultProps: function () {
return {
validations: {
isPhone: true
},
flagsImagePath: '/images/flags.png',
defaultCountry: 'us'
2016-06-02 15:25:02 -04:00
};
},
onChangeInput: function (number, country) {
var value = {national_number: number, country_code: country};
this.setValue(value);
this.props.onChange(this.props.name, value);
},
render: function () {
var defaultCountry = PhoneInput.getDefaultProps().defaultCountry;
if (allIso2.indexOf(this.props.defaultCountry.toLowerCase()) !== -1) {
defaultCountry = this.props.defaultCountry.toLowerCase();
}
2016-06-02 15:25:02 -04:00
return (
<Row {... this.getRowProperties()}
htmlFor={this.getId()}
rowClassName={classNames('phone-input', this.props.className)}
2016-06-02 15:25:02 -04:00
>
<div className="input-group">
<ReactPhoneInput className="form-control"
{... this.props}
defaultCountry={defaultCountry}
2016-06-02 15:25:02 -04:00
onChange={this.onChangeInput}
id={this.getId()}
label={null}
disabled={this.isFormDisabled() || this.props.disabled}
/>
{this.renderHelp()}
{this.renderErrorMessage()}
2016-06-02 15:25:02 -04:00
</div>
</Row>
);
}
});
var phoneValidationHOC = validationHOCFactory({
isPhone: 'Please enter a valid phone number'
});
module.exports = inputHOC(defaultValidationHOC(phoneValidationHOC(PhoneInput)));