import React from 'react'; import { Grid, ListView, Badge, Icon } from 'patternfly-react'; import { translate as __ } from 'foremanReact/common/I18n'; import EmptyInfoItem from './EmptyInfoItem'; import SeverityHigh from './images/i_severity-high.svg'; import SeverityMedium from './images/i_severity-med.svg'; import SeverityLow from './images/i_severity-low.svg'; export const itemIteratorId = (entry, ...rest) => `${entry.id}-${entry.preupgradeReportId}-${rest.join('-')}`; export const tagInfo = tags => tags.map(attr => ( <Badge key={attr} variant="pill primary"> {attr} </Badge> )); export const getSeverityImg = entry => { const key = itemIteratorId(entry, `sv${entry.id}`); switch (entry.severity) { case 'low': return ( <img key={key} src={SeverityLow} alt={__('Low Risk Factor')} className="severity-img" /> ); case 'medium': return ( <img key={key} src={SeverityMedium} alt={__('Medium Risk Factor')} className="severity-img" /> ); case 'high': return ( <img key={key} src={SeverityHigh} alt={__('High Risk Factor')} className="severity-img" /> ); default: return ( <img key={key} src={SeverityLow} alt={__('Low Risk Factor')} className="severity-img" /> ); } }; export const hasRemediations = entry => { const key = itemIteratorId(entry, `rm${entry.id}`); if (entry.detail && entry.detail.remediations) { return ( <ListView.InfoItem key={key}> <Icon type="pf" name="warning-triangle-o" /> {__('Has Remediation')} </ListView.InfoItem> ); } return <EmptyInfoItem key={key} entry={entry} attr="remediation" />; }; export const getTitle = entry => { if (entry.title) { return ( <Grid.Row> <Grid.Col md={1}> <strong>{__('Title')}</strong> </Grid.Col> <Grid.Col md={8}>{entry.title}</Grid.Col> </Grid.Row> ); } return <div />; }; export const getSeverity = entry => { if (entry.severity) { return ( <Grid.Row className="top-padded"> <Grid.Col md={1}> <strong>{__('Risk Factor')}</strong> </Grid.Col> <Grid.Col md={8}> {getSeverityImg(entry)} {entry.severity} </Grid.Col> </Grid.Row> ); } return <div />; }; export const getSummary = entry => { if (entry.summary) { return ( <Grid.Row className="top-padded"> <Grid.Col md={1}> <strong>{__('Summary')}</strong> </Grid.Col> <Grid.Col md={8} className="pre-wrap"> {entry.summary} </Grid.Col> </Grid.Row> ); } return <div />; }; export const getTags = entry => { if (entry.tags) { return ( <Grid.Row className="top-padded"> <Grid.Col md={1}> <strong>{__('Tags')}</strong> </Grid.Col> <Grid.Col md={8}>{tagInfo(entry.tags)}</Grid.Col> </Grid.Row> ); } return <div />; }; export const getExternals = entry => { if (entry.detail && entry.detail.external) { return entry.detail.external.map(attr => { const key = itemIteratorId(entry, attr); return ( <Grid.Row className="top-padded" key={key}> <Grid.Col md={1}> <strong>{__('Links')}</strong> </Grid.Col> <Grid.Col md={8}> <a href={attr.url}>{attr.title}</a> </Grid.Col> </Grid.Row> ); }); } return <div />; }; export const getRemediations = entry => { if (entry.detail && entry.detail.remediations) { return entry.detail.remediations.map(attr => { const key = itemIteratorId(entry, attr); if (attr.type === 'hint') { return ( <Grid.Row className="top-padded" key={key}> <Grid.Col md={1}> <strong>{__('Hint')}</strong> </Grid.Col> <Grid.Col md={8}>{attr.context}</Grid.Col> </Grid.Row> ); } if (attr.type === 'command') { return ( <Grid.Row className="top-padded" key={key}> <Grid.Col md={1}> <strong>{__('Command')}</strong> </Grid.Col> <Grid.Col md={8}> <code>{attr.context.join(' ')}</code> </Grid.Col> </Grid.Row> ); } return <div />; }); } return <div />; };