import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

import React from 'react';
export var ValidatorModel = function ValidatorModel(validations, message) {
  _classCallCheck(this, ValidatorModel);

  this.validations = validations;
  this.message = message;
};
export function validator(validator) {
  return function (Component) {
    return function (props) {
      var messages = props.messages,
          rest = _objectWithoutProperties(props, ["messages"]);

      if (messages && messages.valid.length === 0 && messages.invalid.length === 0) {
        console.error("".concat(Component.name, ": Property messages has to be provided per each field."));
      }

      var validators = new ValidatorModel([validator(messages.invalid)], messages.valid);

      var withValidator = _objectSpread({}, rest, {
        validator: validators
      });

      return React.createElement(Component, withValidator);
    };
  };
}