Katello/katello

View on GitHub
webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErratumExpansionContents.js

Summary

Maintainability
A
2 hrs
Test Coverage
import React, { useState } from 'react';
import PropTypes from 'prop-types';
import {
  TreeView,
} from '@patternfly/react-core';
import { translate as __ } from 'foremanReact/common/I18n';

const ErratumExpansionContents = ({ erratum }) => {
  const {
    bugs, cves, packages,
    module_streams: moduleStreams,
  } = erratum;
  const [activeItems, setActiveItems] = useState(null);
  const options = [
    {
      name: __('Bugs'),
      id: 'bugs',
      children: bugs.map(bug => ({ name: bug.bug_id, id: bug.bug_id, ...bug })),
    },
    {
      name: __('CVEs'),
      id: 'cves',
      children: cves.map(cve => ({ name: cve.cve_id, id: cve.cve_id, ...cve })),
    },
    {
      name: __('Packages'),
      id: 'packages',
      // packages is just a list of strings
      children: packages.map((packageName, idx) => ({ name: packageName, id: idx })),
    },
    {
      name: __('Module streams'),
      id: 'module_streams',
      children: moduleStreams.map(({ name, stream, id }) => ({ name: `${name}:${stream}`, id })),
    },
  ];
  return (
    <TreeView
      data={options}
      activeItems={activeItems}
      onSelect={(evt, treeViewItem) => setActiveItems([treeViewItem])}
      hasBadges
    />
  );
};

ErratumExpansionContents.propTypes = {
  erratum: PropTypes.shape({
    title: PropTypes.string,
    description: PropTypes.string,
    summary: PropTypes.string,
    solution: PropTypes.string,
    bugs: PropTypes.arrayOf(PropTypes.shape({})),
    cves: PropTypes.arrayOf(PropTypes.shape({})),
    packages: PropTypes.arrayOf(PropTypes.string),
    module_streams: PropTypes.arrayOf(PropTypes.shape({})),
  }).isRequired,
};

export default ErratumExpansionContents;