Sha256: 532e7a7e60c303a776e55aa9bc5241c64e96ceed3b243b3ad15a9b15eb3c6d21

Contents?: true

Size: 1.62 KB

Versions: 3

Compression:

Stored size: 1.62 KB

Contents

import React from 'react';
import { memoize } from 'lodash';
import PropTypes from 'prop-types';

import SyncSettingField from './SyncSettingField';

const repoFormat = memoize(formatAry => value => {
  if (value) {
    const valid = formatAry
      .map(item => value.startsWith(item))
      .reduce((memo, item) => item || memo, false);

    if (valid) {
      return undefined;
    }
  }

  return `Invalid repo format, must start with one of: ${formatAry.join(', ')}`;
});

const SyncSettingsFields = ({
  importSettings,
  exportSettings,
  syncType,
  resetField,
  disabled,
  validationData,
}) => {
  const addValidationToSetting = (setting, validations) =>
    setting.name === 'repo'
      ? setting.merge({
          required: true,
          validate: [repoFormat(validations.repo)],
        })
      : setting;

  const settingsAry = syncType === 'import' ? importSettings : exportSettings;

  return (
    <React.Fragment>
      {settingsAry
        .map(setting => addValidationToSetting(setting, validationData))
        .map(setting => (
          <SyncSettingField
            setting={setting}
            key={setting.name}
            disabled={disabled}
            resetField={resetField}
          />
        ))}
    </React.Fragment>
  );
};

SyncSettingsFields.propTypes = {
  importSettings: PropTypes.array.isRequired,
  exportSettings: PropTypes.array.isRequired,
  syncType: PropTypes.string.isRequired,
  resetField: PropTypes.func.isRequired,
  disabled: PropTypes.bool,
  validationData: PropTypes.object,
};

SyncSettingsFields.defaultProps = {
  disabled: false,
  validationData: {},
};

export default SyncSettingsFields;

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
foreman_templates-7.0.4 webpack/components/NewTemplateSync/components/SyncSettingFields.js
foreman_templates-7.0.3 webpack/components/NewTemplateSync/components/SyncSettingFields.js
foreman_templates-7.0.2 webpack/components/NewTemplateSync/components/SyncSettingFields.js