@lunit/oui
Version:
Lunit Oncology UI components
32 lines (31 loc) • 2.46 kB
JavaScript
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
import { Box } from '@mui/material';
import { AnalysisBarSegmentContainer, AnalysisBarOuter, AxisLabels, GraphAxisLabel, GraphScoreIndicator, GraphSegment, } from './AnalysisBar.styled';
import { adjustBarSegmentWidth, parseStringValToNumber } from './AnalysisBar.utils';
import HeatmapGraphSVG from './HeatmapGraphIcon/HeatmapGraphSVG';
const Segments = ({ segments, adjustForOnePercent }) => {
if (!segments) {
return null;
}
if (segments?.length === 1 && segments[0].color === 'jet') {
return (_jsx(Box, { sx: { width: '100%', height: '14px', transform: 'scaleY(0.8)' }, children: _jsx(HeatmapGraphSVG, {}) }));
}
return (_jsx(_Fragment, { children: segments?.map((segment, i) => {
if (segment.color === 'jet') {
return _jsx(HeatmapGraphSVG, { width: `${segment.width}%` });
}
return (_jsx(GraphSegment, { color: segment.color, width: adjustForOnePercent ? adjustBarSegmentWidth(segment.width) : segment.width }, i));
}) }));
};
const AnalysisBar = ({ componentType = 'analysisBar', expressionValue, caption, expressionLevels = [], segments, isDimmed = false, }) => {
if (!componentType)
throw new Error("The 'componentType' prop is required.");
if (!expressionLevels.length)
throw new Error("The 'expressionLevels' prop must contain at least one item.");
const hasAdjustedOnePercentSegment = segments?.[0].width === 1;
return (_jsxs(AnalysisBarOuter, { className: "analysis-bar", isDimmed: isDimmed, children: [_jsxs(AnalysisBarSegmentContainer, { children: [expressionValue && (_jsx(GraphScoreIndicator, { adjustForOnePercent: hasAdjustedOnePercentSegment, value: expressionValue, isJet: segments?.[0].color === 'jet' })), _jsx(Segments, { segments: segments, adjustForOnePercent: hasAdjustedOnePercentSegment })] }), (expressionLevels.length > 0 || caption) && (_jsxs(AxisLabels, { children: [expressionLevels.length > 0 &&
expressionLevels.map((val, i) => {
return (_jsx(GraphAxisLabel, { label: val, adjustForOnePercent: hasAdjustedOnePercentSegment, leftPos: parseStringValToNumber(val) }, i));
}), caption && (_jsx(GraphAxisLabel, { label: caption, adjustForOnePercent: hasAdjustedOnePercentSegment, leftPos: 50 }))] }))] }));
};
export default AnalysisBar;