'use strict';

exports.__esModule = true;

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

var _react = require('react');

var _react2 = _interopRequireDefault(_react);

var _propTypes = require('prop-types');

var _propTypes2 = _interopRequireDefault(_propTypes);

var _classnames = require('classnames');

var _classnames2 = _interopRequireDefault(_classnames);

var _helper = require('./Shared/helper.js');

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }

//component - CoreUI / CInput

var CInput = function CInput(props) {
  var tag = props.tag,
      className = props.className,
      cssModule = props.cssModule,
      innerRef = props.innerRef,
      type = props.type,
      bsSize = props.bsSize,
      state = props.state,
      valid = props.valid,
      invalid = props.invalid,
      addon = props.addon,
      staticInput = props.static,
      plaintext = props.plaintext,
      attributes = _objectWithoutProperties(props, ['tag', 'className', 'cssModule', 'innerRef', 'type', 'bsSize', 'state', 'valid', 'invalid', 'addon', 'static', 'plaintext']);

  var fields = (0, _react.useRef)({}).current;

  var getRef = function getRef(ref) {
    fields.ref = ref;
    innerRef && innerRef(ref);
  };

  var focus = function focus() {
    if (fields.ref) {
      fields.ref.focus();
    }
  };

  // render

  var checkInput = ['radio', 'checkbox'].indexOf(type) > -1;
  var isNotaNumber = new RegExp('\\D', 'g');

  var fileInput = type === 'file';
  var textareaInput = type === 'textarea';
  var selectInput = type === 'select';
  var Tag = tag || (selectInput || textareaInput ? type : 'input');

  var formControlClass = 'form-control';

  if (plaintext || staticInput) {
    formControlClass = formControlClass + '-plaintext';
    Tag = tag || 'input';
  } else if (fileInput) {
    formControlClass = formControlClass + '-file';
  } else if (checkInput) {
    if (addon) {
      formControlClass = null;
    } else {
      formControlClass = 'form-check-input';
    }
  }

  if (attributes.size && isNotaNumber.test(attributes.size)) {
    (0, _helper.warnOnce)('Please use the prop "bsSize" instead of the "size" to bootstrap\'s input sizing.');
    bsSize = attributes.size;
    delete attributes.size;
  }

  var classes = (0, _helper.mapToCssModules)((0, _classnames2.default)(className, invalid && 'is-invalid', valid && 'is-valid', bsSize ? 'form-control-' + bsSize : false, formControlClass), cssModule);

  if (Tag === 'input' || tag && typeof tag === 'function') {
    attributes.type = type;
  }

  if (attributes.children && !(plaintext || staticInput || type === 'select' || typeof Tag !== 'string' || Tag === 'select')) {
    (0, _helper.warnOnce)('Input with a type of "' + type + '" cannot have children. Please use "value"/"defaultValue" instead.');
    delete attributes.children;
  }

  return _react2.default.createElement(Tag, _extends({}, attributes, { className: classes, ref: innerRef }));
};

CInput.propTypes = process.env.NODE_ENV !== "production" ? {
  tag: _helper.tagPropType,
  children: _propTypes2.default.node,
  className: _propTypes2.default.string,
  cssModule: _propTypes2.default.object,
  //
  innerRef: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func, _propTypes2.default.string]),
  type: _propTypes2.default.string,
  size: _propTypes2.default.string,
  bsSize: _propTypes2.default.string,
  valid: _propTypes2.default.bool,
  invalid: _propTypes2.default.bool,
  plaintext: _propTypes2.default.bool,
  addon: _propTypes2.default.bool
} : {};

CInput.defaultProps = {
  type: 'text'
};

exports.default = CInput;
module.exports = exports['default'];