kg-react-phone-field
Version:
Este código define un componente React llamado `SelectPhoneNumber` que renderiza un menú desplegable para seleccionar un número de teléfono. El componente usa la biblioteca `react-select` si asi se desea para crear el menú desplegable. Toma varias propie
156 lines (152 loc) • 5.76 kB
JavaScript
import React from 'react';
import Select from 'react-select';
import makeAnimated from 'react-select/animated';
import { getCountries, getCountryCallingCode } from 'react-phone-number-input';
import es from 'react-phone-number-input/locale/es.json';
import en from 'react-phone-number-input/locale/en.json';
var sortedCountries = function sortedCountries(countries, labels, CountryNumber) {
// Aquí ordenamos los países por orden alfabético
// y firstCountry va de primero
var listOfCountries = [];
countries.forEach(function (country) {
listOfCountries.push({
name: labels[country],
nameCodeNumber: labels[country] + " +" + getCountryCallingCode(country),
codeNumber: parseInt(getCountryCallingCode(country))
});
});
// firstCountry first
var firstCountry = listOfCountries.find(function (country) {
return country.codeNumber === CountryNumber;
});
var filteredCountries = listOfCountries.filter(function (country) {
return country.codeNumber !== CountryNumber;
});
// Ordenar sin Lodash
var sortedCountries = filteredCountries.sort(function (a, b) {
if (a.name < b.name) return -1;
if (a.name > b.name) return 1;
return 0;
});
if (firstCountry) sortedCountries.unshift(firstCountry);
return sortedCountries;
};
var listCountriesCodes = function listCountriesCodes(listToReturn, CountryNumber, lang) {
if (CountryNumber === void 0) {
CountryNumber = 506;
}
var langToUse = es;
if (lang === "en") langToUse = en;
if (lang === "es") langToUse = es;
return sortedCountries(getCountries(), langToUse, CountryNumber).map(function (country) {
var _ref, _ref2, _ref3;
if (country) {
switch (listToReturn.length) {
case 1:
return _ref = {}, _ref[listToReturn[0]] = country.nameCodeNumber, _ref;
case 2:
return _ref2 = {}, _ref2[listToReturn[0]] = country[listToReturn[0]], _ref2[listToReturn[1]] = country[listToReturn[1]], _ref2;
case 3:
return _ref3 = {}, _ref3[listToReturn[0]] = country[listToReturn[0]], _ref3[listToReturn[1]] = country[listToReturn[1]], _ref3[listToReturn[2]] = country[listToReturn[2]], _ref3;
}
} else {
return {};
}
});
};
var stylesContainer = {
width: '100%',
height: '100%',
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
borderRadius: '0.5rem',
border: '1px solid #ccc',
padding: '0.5rem',
boxShadow: '0 0 0.5rem rgba(0, 0, 0, 0.1)'
};
var stylesSelect = {
width: '100%',
height: '100%',
fontSize: '1rem',
border: 'none',
cursor: 'pointer',
outline: 'none'
};
var SelectPhoneNumber = function SelectPhoneNumber(_ref) {
var defaultCountryNumber = _ref.defaultCountryNumber,
_onChange = _ref.onChange,
value = _ref.value,
listOfProperties = _ref.listOfProperties,
containerClassName = _ref.containerClassName,
selectClassName = _ref.selectClassName,
_ref$defaultStyles = _ref.defaultStyles,
defaultStyles = _ref$defaultStyles === void 0 ? true : _ref$defaultStyles,
_ref$language = _ref.language,
language = _ref$language === void 0 ? 'es' : _ref$language,
label = _ref.label,
labelClassName = _ref.labelClassName,
reactSelectCustomStyles = _ref.reactSelectCustomStyles,
reactSelectDefaultValues = _ref.reactSelectDefaultValues,
_ref$withReactSelect = _ref.withReactSelect,
withReactSelect = _ref$withReactSelect === void 0 ? false : _ref$withReactSelect;
var list = listCountriesCodes(listOfProperties, defaultCountryNumber, language);
var options = list.map(function (country) {
if (country) return {
label: country[listOfProperties[0]],
value: country
};else return null;
});
var animatedComponents = makeAnimated();
if (withReactSelect) {
return React.createElement(Select, {
options: options,
onChange: _onChange,
components: animatedComponents,
styles: reactSelectCustomStyles,
defaultValue: reactSelectDefaultValues
});
} else {
return React.createElement("div", {
style: defaultStyles ? stylesContainer : {},
className: containerClassName
}, React.createElement("label", {
style: defaultStyles ? {
fontSize: '1rem',
fontWeight: 'bold',
lineHeight: '1.5rem'
} : {},
"react-select": true,
className: labelClassName
}, label, React.createElement("select", {
style: defaultStyles ? stylesSelect : {},
className: selectClassName,
value: value,
onChange: function onChange(e) {
if (typeof _onChange === 'function') _onChange(e.target.value);
}
}, listCountriesCodes(listOfProperties, defaultCountryNumber, language).map(function (country, index) {
if (country) {
switch (listOfProperties.length) {
case 1:
return React.createElement("option", {
key: country[listOfProperties[0]] + "__" + index,
value: country[listOfProperties[0]]
}, country[listOfProperties[0]]);
case 2:
return React.createElement("option", {
key: country[listOfProperties[0]] + "__" + index,
value: country[listOfProperties[0]]
}, country[listOfProperties[0]], " ( + ", country[listOfProperties[1]], " )");
case 3:
return React.createElement("option", {
key: country[listOfProperties[0]] + "__" + index,
value: country[listOfProperties[0]]
}, country[listOfProperties[0]], " (", country[listOfProperties[1]], ") +", country[listOfProperties[2]]);
}
} else return null;
}))));
}
};
export { SelectPhoneNumber };
//# sourceMappingURL=kg-react-phone-field.esm.js.map