"use strict";

var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.Country = Country;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _countries = require("../utils/countries");
function Country(_ref) {
  var additionalFieldInformation = _ref.additionalFieldInformation,
    _ref$dataTrackable = _ref.dataTrackable,
    dataTrackable = _ref$dataTrackable === void 0 ? 'field-country' : _ref$dataTrackable,
    _ref$fieldId = _ref.fieldId,
    fieldId = _ref$fieldId === void 0 ? 'countryField' : _ref$fieldId,
    _ref$filterList = _ref.filterList,
    filterList = _ref$filterList === void 0 ? [] : _ref$filterList,
    _ref$hasError = _ref.hasError,
    hasError = _ref$hasError === void 0 ? false : _ref$hasError,
    _ref$inputId = _ref.inputId,
    inputId = _ref$inputId === void 0 ? 'country' : _ref$inputId,
    _ref$isB2b = _ref.isB2b,
    isB2b = _ref$isB2b === void 0 ? false : _ref$isB2b,
    _ref$isDisabled = _ref.isDisabled,
    isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
    _ref$isPlaceholderDis = _ref.isPlaceholderDisabled,
    isPlaceholderDisabled = _ref$isPlaceholderDis === void 0 ? false : _ref$isPlaceholderDis,
    value = _ref.value,
    _ref$label = _ref.label,
    label = _ref$label === void 0 ? "Country".concat(isB2b ? '/Region' : '') : _ref$label,
    _ref$errorText = _ref.errorText,
    errorText = _ref$errorText === void 0 ? "Please select your country".concat(isB2b ? '/region' : '') : _ref$errorText;
  var selectWrapperClassName = (0, _classnames["default"])(['o-forms-input', 'o-forms-input--select', {
    'o-forms-input--invalid': hasError
  }]);
  var selectProps = {
    id: inputId,
    'aria-required': true,
    required: true,
    name: inputId,
    'data-trackable': dataTrackable,
    disabled: isDisabled
  };
  var countries = (0, _countries.getCountries)({
    filter: filterList,
    value: value
  });
  var createOption = function createOption(country) {
    return /*#__PURE__*/_react["default"].createElement("option", {
      key: country.code,
      value: country.code,
      selected: country.selected
    }, country.name);
  };
  var createOptGroup = function createOptGroup(country) {
    return /*#__PURE__*/_react["default"].createElement("optgroup", {
      key: country.label,
      label: country.label
    }, country.countries.map(function (country) {
      return createOption(country);
    }));
  };
  var createSelect = function createSelect(countries) {
    return /*#__PURE__*/_react["default"].createElement("select", selectProps, /*#__PURE__*/_react["default"].createElement("option", {
      value: "",
      disabled: isPlaceholderDisabled
    }, "Please select a country", isB2b ? '/region' : ''), countries.map(function (country) {
      return country.label ? createOptGroup(country) : createOption(country);
    }));
  };
  var fieldErrorClassNames = (0, _classnames["default"])(['o-forms-input__error', {
    'additional-field-information__with-field-error': additionalFieldInformation
  }]);
  return /*#__PURE__*/_react["default"].createElement("label", {
    id: fieldId,
    className: "o-forms-field ncf__validation-error",
    "data-validate": "required",
    htmlFor: selectProps.id
  }, /*#__PURE__*/_react["default"].createElement("span", {
    className: "o-forms-title"
  }, /*#__PURE__*/_react["default"].createElement("span", {
    className: "o-forms-title__main"
  }, label)), /*#__PURE__*/_react["default"].createElement("span", {
    className: selectWrapperClassName
  }, createSelect(countries), /*#__PURE__*/_react["default"].createElement("span", {
    className: fieldErrorClassNames
  }, errorText), additionalFieldInformation ? /*#__PURE__*/_react["default"].createElement("p", {
    className: "additional-field-information"
  }, additionalFieldInformation) : null));
}
Country.propTypes = {
  additionalFieldInformation: _propTypes["default"].node,
  dataTrackable: _propTypes["default"].string,
  errorText: _propTypes["default"].string,
  fieldId: _propTypes["default"].string,
  filterList: _propTypes["default"].arrayOf(_propTypes["default"].string),
  hasError: _propTypes["default"].bool,
  inputId: _propTypes["default"].string,
  isB2b: _propTypes["default"].bool,
  isDisabled: _propTypes["default"].bool,
  isPlaceholderDisabled: _propTypes["default"].bool,
  label: _propTypes["default"].string,
  value: _propTypes["default"].string
};