Katello/katello

View on GitHub
webpack/scenes/ContentViews/Details/Versions/ContentViewVersionErrata.js

Summary

Maintainability
A
45 mins
Test Coverage
import React from 'react';
import PropTypes from 'prop-types';
import {
  BugIcon,
  SecurityIcon,
  EnhancementIcon,
} from '@patternfly/react-icons';
import { urlBuilder } from 'foremanReact/common/urlHelpers';
import { translate as __ } from 'foremanReact/common/I18n';
import './ContentViewVersionErrata.scss';
import InactiveText from '../../components/InactiveText';

const ContentViewVersionErrata = ({ cvId, versionId, errataCounts }) => {
  const {
    total,
  } = errataCounts;

  if (!Number(total)) {
    return <InactiveText text={__('No applicable errata')} />;
  }

  const errataIcons = {
    security: SecurityIcon,
    bugfix: BugIcon,
    enhancement: EnhancementIcon,
  };

  const ErrataLinkwithIcon = () => Object.keys(errataIcons).map((type) => {
    const ErrataIcon = errataIcons[type];
    return (
      <React.Fragment key={type}>
        <ErrataIcon title={type} />
        <p className="errata-icons-with-commas">{errataCounts[type] || '0'}</p>
      </React.Fragment>
    );
  });

  return (
    <>
      <a href={urlBuilder(`content_views/${cvId}#/versions/${versionId}/errata`, '')}>
        {total || 0}{' '}
      </a>
      ( <ErrataLinkwithIcon /> )
    </>
  );
};

ContentViewVersionErrata.propTypes = {
  cvId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
  versionId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
  errataCounts: PropTypes.shape({
    security: PropTypes.number,
    bugfix: PropTypes.number,
    enhancement: PropTypes.number,
    total: PropTypes.number,
  }),
};

ContentViewVersionErrata.defaultProps = {
  cvId: '',
  versionId: '',
  errataCounts: {
    security: 0,
    bugfix: 0,
    enhancement: 0,
    total: 0,
  },
};

export default ContentViewVersionErrata;