box-ui-elements
Version:
Box UI Elements
86 lines • 4.12 kB
JavaScript
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
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';
const STYLE_INLINE = 'inline';
const STYLE_TOOLTIP = 'tooltip';
const Classification = ({
className = '',
color,
controls,
controlsFormat,
definition,
isImportedClassification = false,
isLoadingControls,
itemName = '',
maxAppCount,
messageStyle,
modifiedAt,
modifiedBy,
name,
onClick,
shouldDisplayAppsAsIntegrations = false
}) => {
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 && /*#__PURE__*/React.createElement(FormattedDate, {
value: modifiedDate,
month: "long",
year: "numeric",
day: "numeric"
});
const modifiedByMessage = isImportedClassification ? messages.importedBy : messages.modifiedBy;
return /*#__PURE__*/React.createElement("article", {
className: `bdl-Classification ${className}`
}, isClassified && /*#__PURE__*/React.createElement(ClassifiedBadge, {
color: color,
name: name,
onClick: onClick,
tooltipText: isTooltipMessageEnabled ? definition : undefined
}), isInlineMessageEnabled && /*#__PURE__*/React.createElement(Label, {
text: /*#__PURE__*/React.createElement(FormattedMessage, messages.definition)
}, /*#__PURE__*/React.createElement("p", {
className: "bdl-Classification-definition"
}, definition)), isNotClassifiedMessageVisible && /*#__PURE__*/React.createElement("span", {
className: "bdl-Classification-missingMessage"
}, /*#__PURE__*/React.createElement(FormattedMessage, messages.missing)), isModifiedMessageVisible && /*#__PURE__*/React.createElement(Label, {
text: /*#__PURE__*/React.createElement(FormattedMessage, messages.modifiedByLabel)
}, /*#__PURE__*/React.createElement("p", {
className: "bdl-Classification-modifiedBy",
"data-testid": "classification-modifiedby"
}, /*#__PURE__*/React.createElement(FormattedMessage, _extends({}, modifiedByMessage, {
values: {
modifiedAt: formattedModifiedAt,
modifiedBy
}
})))), isSecurityControlsEnabled && /*#__PURE__*/React.createElement(SecurityControls, {
classificationColor: color,
classificationName: name,
controls: controls,
controlsFormat: controlsFormat,
definition: definition,
itemName: itemName,
maxAppCount: maxAppCount,
shouldRenderLabel: true,
shouldDisplayAppsAsIntegrations: shouldDisplayAppsAsIntegrations
}), isControlsIndicatorEnabled && /*#__PURE__*/React.createElement(LoadingIndicator, null));
};
export { STYLE_INLINE, STYLE_TOOLTIP };
export default Classification;
//# sourceMappingURL=Classification.js.map