/**
 * Copyright 2018 Red Hat Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License. You may obtain
 * a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

import { addValidator } from 'redux-form-validators';

/**
 * Validator to check that value is an array of strings which match the format
 * e.g. Comma separated list of MAC addresses parsed as array of strings
 */
export const arrayOfFormat = addValidator({
  validator: ({ with: wit, message }, value, allValues) => {
    if (
      value.constructor === Array &&
      value.reduce(
        (result, currentValue) => (result ? true : !currentValue.match(wit)),
        false
      )
    ) {
      return (
        message || {
          id: 'form.errors.arrayOfFormat',
          defaultMessage: 'must be list of valid values'
        }
      );
    }
  }
});
