Katello/katello

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

Summary

Maintainability
A
3 hrs
Test Coverage
import React, { useState } from 'react';
import PropTypes from 'prop-types';
import {
  Button,
  DescriptionList,
  DescriptionListTerm as Term,
  DescriptionListGroup,
  DescriptionListDescription as Description,
} from '@patternfly/react-core';
import { translate as __ } from 'foremanReact/common/I18n';

const ErratumExpansionDetail = ({ erratum }) => {
  const {
    title: synopsis,
    description,
    summary, solution,
  } = erratum;
  const [showDescription, setShowDescription] = useState(false);
  // whiteSpace: 'pre-line' will convert \n to line breaks
  return (
    <DescriptionList>
      <DescriptionListGroup>
        <Term>{__('Synopsis')}</Term>
        <Description>{synopsis}</Description>
      </DescriptionListGroup>
      <DescriptionListGroup>
        <Term>{__('Summary')}</Term>
        <Description>{summary}</Description>
      </DescriptionListGroup>
      <DescriptionListGroup>
        <Term>{__('Solution')}</Term>
        <Description>{solution}</Description>
      </DescriptionListGroup>
      {showDescription &&
        <DescriptionListGroup>
          <Term>{__('Full description')}</Term>
          <Description>
            <span style={{ whiteSpace: 'pre-line' }}>{description}</span>
          </Description>
          <Term>
            <Button ouiaId="hide-button" variant="link" onClick={() => setShowDescription(false)}>
              {__('Hide description')}
            </Button>
          </Term>
        </DescriptionListGroup>
      }
      {!showDescription &&
        <DescriptionListGroup>
          <Term>
            <Button ouiaId="show-button" variant="link" onClick={() => setShowDescription(true)}>
              {__('Show full description')}
            </Button>
          </Term>
        </DescriptionListGroup>
      }
    </DescriptionList>
  );
};

ErratumExpansionDetail.propTypes = {
  erratum: PropTypes.shape({
    title: PropTypes.string,
    description: PropTypes.string,
    summary: PropTypes.string,
    solution: PropTypes.string,
  }).isRequired,
};

export default ErratumExpansionDetail;