theforeman/foreman_fog_proxmox

View on GitHub
webpack/components/GeneralTabContent.js

Summary

Maintainability
B
5 hrs
Test Coverage
import React from 'react';
import PropTypes from 'prop-types';
import { PageSection, Divider } from '@patternfly/react-core';
import { translate as __ } from 'foremanReact/common/I18n';
import InputField from './common/FormInputs';

const GeneralTabContent = ({
  general,
  fromProfile,
  newVm,
  nodesMap,
  poolsMap,
  imagesMap,
  handleChange,
  untemplatable,
}) => (
  <PageSection padding={{ default: 'noPadding' }}>
    <Divider component="li" style={{ marginBottom: '2rem' }} />
    <InputField
      name={general?.vmid?.name}
      label={__('VM ID')}
      required
      type="number"
      value={general?.vmid?.value}
      disabled={!newVm || fromProfile}
      onChange={handleChange}
    />
    <InputField
      name={general?.nodeId?.name}
      label={__('Node')}
      required
      type="select"
      value={general?.nodeId?.value}
      options={nodesMap}
      onChange={handleChange}
    />
    <InputField
      name={general?.pool?.name}
      label={__('Pool')}
      type="select"
      value={general?.pool?.value}
      options={poolsMap}
      onChange={handleChange}
    />
    {newVm && !fromProfile && (
      <InputField
        name={general?.startAfterCreate?.name}
        label={__('Start after creation?')}
        type="checkbox"
        value={general?.startAfterCreate?.value}
        checked={String(general?.startAfterCreate?.value) === '1'}
        onChange={handleChange}
      />
    )}
    {!fromProfile && !untemplatable && (
      <InputField
        name={general?.templated?.name}
        label={__('Create image?')}
        type="checkbox"
        value={general?.templated?.value}
        checked={String(general?.templated?.value) === '1'}
        disabled={untemplatable}
        onChange={handleChange}
      />
    )}
    {fromProfile && (
      <InputField
        name={general?.imageId?.name}
        label={__('Image')}
        type="select"
        value={general?.imageId?.value}
        disabled={imagesMap.length === 0}
        options={imagesMap}
        onChange={handleChange}
      />
    )}
    <InputField
      name={general?.description?.name}
      label={__('Description')}
      type="textarea"
      value={general?.description?.value}
      onChange={handleChange}
    />
  </PageSection>
);

GeneralTabContent.propTypes = {
  general: PropTypes.object.isRequired,
  fromProfile: PropTypes.bool,
  newVm: PropTypes.bool,
  nodesMap: PropTypes.array,
  poolsMap: PropTypes.array,
  imagesMap: PropTypes.array,
  handleChange: PropTypes.func.isRequired,
  untemplatable: PropTypes.bool,
};

GeneralTabContent.defaultProps = {
  fromProfile: false,
  newVm: false,
  nodesMap: [],
  poolsMap: [],
  imagesMap: [],
  untemplatable: false,
};

export default GeneralTabContent;