// @flow import * as React from 'react'; import { FormattedDate, FormattedMessage } from 'react-intl'; import { isValidDate } from '../../utils/datetime'; import Label from '../../components/label/Label'; import LoadingIndicator from '../../components/loading-indicator/LoadingIndicator'; import ClassifiedBadge from './ClassifiedBadge'; import SecurityControls from './security-controls'; import messages from './messages'; import './Classification.scss'; import type { Controls, ControlsFormat } from './flowTypes'; const STYLE_INLINE: 'inline' = 'inline'; const STYLE_TOOLTIP: 'tooltip' = 'tooltip'; type Props = { className?: string, color?: string, controls?: Controls, controlsFormat?: ControlsFormat, definition?: string, isImportedClassification?: boolean, isLoadingControls?: boolean, itemName?: string, maxAppCount?: number, messageStyle?: typeof STYLE_INLINE | typeof STYLE_TOOLTIP, modifiedAt?: string, modifiedBy?: string, name?: string, onClick?: (event: SyntheticEvent) => void, shouldDisplayAppsAsIntegrations?: boolean, }; const Classification = ({ className = '', color, controls, controlsFormat, definition, isImportedClassification = false, isLoadingControls, itemName = '', maxAppCount, messageStyle, modifiedAt, modifiedBy, name, onClick, shouldDisplayAppsAsIntegrations = false, }: Props) => { const isClassified = !!name; const hasDefinition = !!definition; const hasModifiedAt = !!modifiedAt; const hasModifiedBy = !!modifiedBy; const hasSecurityControls = !!controls; const isTooltipMessageEnabled = isClassified && hasDefinition && messageStyle === STYLE_TOOLTIP; const isInlineMessageEnabled = isClassified && hasDefinition && messageStyle === STYLE_INLINE; const isNotClassifiedMessageVisible = !isClassified && messageStyle === STYLE_INLINE; const isControlsIndicatorEnabled = isClassified && isLoadingControls && messageStyle === STYLE_INLINE; const isSecurityControlsEnabled = isClassified && !isLoadingControls && hasSecurityControls && messageStyle === STYLE_INLINE; const modifiedDate = new Date(modifiedAt || 0); const isModifiedMessageVisible = isClassified && hasModifiedAt && isValidDate(modifiedDate) && hasModifiedBy && messageStyle === STYLE_INLINE; const formattedModifiedAt = isModifiedMessageVisible && ( ); const modifiedByMessage = isImportedClassification ? messages.importedBy : messages.modifiedBy; return (
{isClassified && ( )} {isInlineMessageEnabled && ( )} {isNotClassifiedMessageVisible && ( )} {isModifiedMessageVisible && ( )} {isSecurityControlsEnabled && ( )} {isControlsIndicatorEnabled && }
); }; export { STYLE_INLINE, STYLE_TOOLTIP }; export default Classification;