@fluentui/react-charting 5.23.33 → 5.23.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +22 -1
- package/CHANGELOG.md +12 -2
- package/dist/react-charting.js +1 -1
- package/dist/react-charting.min.js +1 -1
- package/lib/components/DeclarativeChart/DeclarativeChart.js +2 -2
- package/lib/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
- package/lib/components/GaugeChart/GaugeChart.base.d.ts +3 -1
- package/lib/components/GaugeChart/GaugeChart.base.js +31 -20
- package/lib/components/GaugeChart/GaugeChart.base.js.map +1 -1
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.d.ts +11 -1
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.js +55 -39
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.js.map +1 -1
- package/lib-amd/components/DeclarativeChart/DeclarativeChart.js +2 -2
- package/lib-amd/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
- package/lib-amd/components/GaugeChart/GaugeChart.base.d.ts +3 -1
- package/lib-amd/components/GaugeChart/GaugeChart.base.js +30 -19
- package/lib-amd/components/GaugeChart/GaugeChart.base.js.map +1 -1
- package/lib-amd/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.d.ts +11 -1
- package/lib-amd/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.js +54 -38
- package/lib-amd/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.js.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js +2 -2
- package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
- package/lib-commonjs/components/GaugeChart/GaugeChart.base.d.ts +3 -1
- package/lib-commonjs/components/GaugeChart/GaugeChart.base.js +30 -19
- package/lib-commonjs/components/GaugeChart/GaugeChart.base.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.d.ts +11 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.js +54 -38
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.js.map +1 -1
- package/package.json +1 -1
|
@@ -64,7 +64,7 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
|
|
|
64
64
|
var GaugeChartBase = /** @class */ (function (_super) {
|
|
65
65
|
tslib_1.__extends(GaugeChartBase, _super);
|
|
66
66
|
function GaugeChartBase(props) {
|
|
67
|
-
var _a
|
|
67
|
+
var _a;
|
|
68
68
|
var _this = _super.call(this, props) || this;
|
|
69
69
|
_this._getMargins = function () {
|
|
70
70
|
var _a = _this.props, hideMinMax = _a.hideMinMax, chartTitle = _a.chartTitle, sublabel = _a.sublabel;
|
|
@@ -169,14 +169,6 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
|
|
|
169
169
|
return {
|
|
170
170
|
title: segment.legend,
|
|
171
171
|
color: color,
|
|
172
|
-
action: function () {
|
|
173
|
-
if (_this.state.selectedLegend === segment.legend) {
|
|
174
|
-
_this.setState({ selectedLegend: '' });
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
_this.setState({ selectedLegend: segment.legend });
|
|
178
|
-
}
|
|
179
|
-
},
|
|
180
172
|
hoverAction: function () {
|
|
181
173
|
_this.setState({ hoveredLegend: segment.legend });
|
|
182
174
|
},
|
|
@@ -186,7 +178,9 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
|
|
|
186
178
|
};
|
|
187
179
|
});
|
|
188
180
|
return (React.createElement("div", { className: _this._classNames.legendsContainer },
|
|
189
|
-
React.createElement(index_2.Legends, tslib_1.__assign({ legends: legends, centerLegends: true }, _this.props.legendProps
|
|
181
|
+
React.createElement(index_2.Legends, tslib_1.__assign({ legends: legends, centerLegends: true }, _this.props.legendProps, {
|
|
182
|
+
// eslint-disable-next-line react/jsx-no-bind
|
|
183
|
+
onChange: _this._onLegendSelectionChange.bind(_this) }))));
|
|
190
184
|
};
|
|
191
185
|
/**
|
|
192
186
|
* This function checks if the given legend is highlighted or not.
|
|
@@ -195,13 +189,13 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
|
|
|
195
189
|
* 2. hovering: if there is no selected legend and the user hovers over it
|
|
196
190
|
*/
|
|
197
191
|
_this._legendHighlighted = function (legend) {
|
|
198
|
-
return
|
|
192
|
+
return _this._getHighlightedLegend().includes(legend);
|
|
199
193
|
};
|
|
200
194
|
/**
|
|
201
195
|
* This function checks if none of the legends is selected or hovered.
|
|
202
196
|
*/
|
|
203
197
|
_this._noLegendHighlighted = function () {
|
|
204
|
-
return _this.
|
|
198
|
+
return _this._getHighlightedLegend().length === 0;
|
|
205
199
|
};
|
|
206
200
|
_this._handleFocus = function (focusEvent, focusedElement) {
|
|
207
201
|
_this._showCallout(focusEvent.target, focusedElement, true);
|
|
@@ -237,9 +231,7 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
|
|
|
237
231
|
});
|
|
238
232
|
_this.setState(tslib_1.__assign({ calloutTarget: target,
|
|
239
233
|
/** Show the callout if highlighted arc is hovered/focused and Hide it if unhighlighted arc is hovered/focused */
|
|
240
|
-
isCalloutVisible: ['Needle', 'Chart value'].includes(legend) ||
|
|
241
|
-
_this.state.selectedLegend === '' ||
|
|
242
|
-
_this.state.selectedLegend === legend, hoverXValue: hoverXValue, hoverYValues: hoverYValues }, (isFocusEvent ? { focusedElement: legend } : {})));
|
|
234
|
+
isCalloutVisible: ['Needle', 'Chart value'].includes(legend) || _this._noLegendHighlighted() || _this._legendHighlighted(legend), hoverXValue: hoverXValue, hoverYValues: hoverYValues }, (isFocusEvent ? { focusedElement: legend } : {})));
|
|
243
235
|
};
|
|
244
236
|
_this._hideCallout = function (isBlurEvent) {
|
|
245
237
|
_this._calloutAnchor = '';
|
|
@@ -293,7 +285,7 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
|
|
|
293
285
|
_this._legendsHeight = !props.hideLegend ? 24 : 0;
|
|
294
286
|
_this.state = {
|
|
295
287
|
hoveredLegend: '',
|
|
296
|
-
|
|
288
|
+
selectedLegends: ((_a = props.legendProps) === null || _a === void 0 ? void 0 : _a.selectedLegends) || [],
|
|
297
289
|
focusedElement: '',
|
|
298
290
|
calloutTarget: null,
|
|
299
291
|
isCalloutVisible: false,
|
|
@@ -315,10 +307,10 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
|
|
|
315
307
|
}
|
|
316
308
|
};
|
|
317
309
|
GaugeChartBase.prototype.componentDidUpdate = function (prevProps) {
|
|
318
|
-
var _a, _b, _c
|
|
319
|
-
if (((_a = prevProps.legendProps) === null || _a === void 0 ? void 0 : _a.
|
|
310
|
+
var _a, _b, _c;
|
|
311
|
+
if (!(0, index_1.areArraysEqual)((_a = prevProps.legendProps) === null || _a === void 0 ? void 0 : _a.selectedLegends, (_b = this.props.legendProps) === null || _b === void 0 ? void 0 : _b.selectedLegends)) {
|
|
320
312
|
this.setState({
|
|
321
|
-
|
|
313
|
+
selectedLegends: ((_c = this.props.legendProps) === null || _c === void 0 ? void 0 : _c.selectedLegends) || [],
|
|
322
314
|
});
|
|
323
315
|
}
|
|
324
316
|
};
|
|
@@ -394,6 +386,25 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
|
|
|
394
386
|
enumerable: false,
|
|
395
387
|
configurable: true
|
|
396
388
|
});
|
|
389
|
+
GaugeChartBase.prototype._onLegendSelectionChange = function (selectedLegends, event, currentLegend) {
|
|
390
|
+
var _a, _b;
|
|
391
|
+
if ((_a = this.props.legendProps) === null || _a === void 0 ? void 0 : _a.canSelectMultipleLegends) {
|
|
392
|
+
this.setState({ selectedLegends: selectedLegends });
|
|
393
|
+
}
|
|
394
|
+
else {
|
|
395
|
+
this.setState({ selectedLegends: selectedLegends.slice(-1) });
|
|
396
|
+
}
|
|
397
|
+
if ((_b = this.props.legendProps) === null || _b === void 0 ? void 0 : _b.onChange) {
|
|
398
|
+
this.props.legendProps.onChange(selectedLegends, event, currentLegend);
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
GaugeChartBase.prototype._getHighlightedLegend = function () {
|
|
402
|
+
return this.state.selectedLegends.length > 0
|
|
403
|
+
? this.state.selectedLegends
|
|
404
|
+
: this.state.hoveredLegend
|
|
405
|
+
? [this.state.hoveredLegend]
|
|
406
|
+
: [];
|
|
407
|
+
};
|
|
397
408
|
GaugeChartBase.prototype._yValueHoverSubCountsExists = function (yValueHover) {
|
|
398
409
|
if (yValueHover) {
|
|
399
410
|
return yValueHover.some(function (yValue) { return yValue.yAxisCalloutData && typeof yValue.yAxisCalloutData !== 'string'; });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GaugeChart.base.js","sourceRoot":"../src/","sources":["components/GaugeChart/GaugeChart.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { arc as d3Arc } from 'd3-shape';\nimport { classNamesFunction, getId, getRTL, initializeComponentRef } from '@fluentui/react/lib/Utilities';\nimport {\n IGaugeChartProps,\n IGaugeChartSegment,\n IGaugeChartStyleProps,\n IGaugeChartStyles,\n GaugeValueFormat,\n GaugeChartVariant,\n} from './GaugeChart.types';\nimport { IProcessedStyleSet } from '@fluentui/react/lib/Styling';\nimport { convertToLocaleString } from '../../utilities/locale-util';\nimport {\n Points,\n formatValueWithSIPrefix,\n getAccessibleDataObject,\n getColorFromToken,\n getNextColor,\n getNextGradient,\n pointTypes,\n} from '../../utilities/index';\nimport { ILegend, LegendShape, Legends, Shape } from '../Legends/index';\nimport { FocusZone, FocusZoneDirection } from '@fluentui/react-focus';\nimport { Callout, DirectionalHint } from '@fluentui/react/lib/Callout';\nimport { IYValueHover } from '../../index';\nimport { SVGTooltipText } from '../../utilities/SVGTooltipText';\nimport { select as d3Select } from 'd3-selection';\nimport { IChart } from '../../types/index';\n\nconst GAUGE_MARGIN = 16;\nconst LABEL_WIDTH = 36;\nconst LABEL_HEIGHT = 16;\nconst LABEL_OFFSET = 4;\nconst TITLE_OFFSET = 11;\nconst EXTRA_NEEDLE_LENGTH = 4;\nexport const ARC_PADDING = 2;\nexport const BREAKPOINTS = [\n { minRadius: 52, arcWidth: 12, fontSize: 20 },\n { minRadius: 70, arcWidth: 16, fontSize: 24 },\n { minRadius: 88, arcWidth: 20, fontSize: 32 },\n { minRadius: 106, arcWidth: 24, fontSize: 32 },\n { minRadius: 124, arcWidth: 28, fontSize: 40 },\n { minRadius: 142, arcWidth: 32, fontSize: 40 },\n];\n\nconst getClassNames = classNamesFunction<IGaugeChartStyleProps, IGaugeChartStyles>();\n\nexport const calcNeedleRotation = (chartValue: number, minValue: number, maxValue: number) => {\n let needleRotation = ((chartValue - minValue) / (maxValue - minValue)) * 180;\n if (needleRotation < 0) {\n needleRotation = 0;\n } else if (needleRotation > 180) {\n needleRotation = 180;\n }\n\n return needleRotation;\n};\n\nexport const getSegmentLabel = (\n segment: IExtendedSegment,\n minValue: number,\n maxValue: number,\n variant?: GaugeChartVariant,\n isAriaLabel: boolean = false,\n) => {\n if (isAriaLabel) {\n return minValue === 0 && variant === GaugeChartVariant.SingleSegment\n ? `${segment.legend}, ${segment.size} out of ${maxValue} or ${((segment.size / maxValue) * 100).toFixed()}%`\n : `${segment.legend}, ${segment.start} to ${segment.end}`;\n }\n\n return minValue === 0 && variant === GaugeChartVariant.SingleSegment\n ? `${segment.size} (${((segment.size / maxValue) * 100).toFixed()}%)`\n : `${segment.start} - ${segment.end}`;\n};\n\nexport const getChartValueLabel = (\n chartValue: number,\n minValue: number,\n maxValue: number,\n chartValueFormat?: GaugeValueFormat | ((sweepFraction: [number, number]) => string),\n forCallout: boolean = false,\n): string => {\n if (forCallout) {\n // When displaying the chart value as a percentage, use fractions in the callout, and vice versa.\n // This helps clarify the actual value and avoid repetition.\n return minValue !== 0\n ? chartValue.toString()\n : chartValueFormat === GaugeValueFormat.Fraction\n ? `${((chartValue / maxValue) * 100).toFixed()}%`\n : `${chartValue}/${maxValue}`;\n }\n\n return typeof chartValueFormat === 'function'\n ? chartValueFormat([chartValue - minValue, maxValue - minValue])\n : minValue !== 0\n ? chartValue.toString()\n : chartValueFormat === GaugeValueFormat.Fraction\n ? `${chartValue}/${maxValue}`\n : `${((chartValue / maxValue) * 100).toFixed()}%`;\n};\n\ninterface IYValue extends Omit<IYValueHover, 'y'> {\n y?: string | number;\n}\nexport interface IGaugeChartState {\n hoveredLegend: string;\n selectedLegend: string;\n focusedElement?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n calloutTarget: any;\n isCalloutVisible: boolean;\n hoverXValue: string | number;\n hoverYValues: IYValue[];\n width: number;\n height: number;\n}\nexport interface IExtendedSegment extends IGaugeChartSegment {\n start: number;\n end: number;\n}\n\nexport class GaugeChartBase extends React.Component<IGaugeChartProps, IGaugeChartState> implements IChart {\n private _classNames: IProcessedStyleSet<IGaugeChartStyles>;\n private _isRTL: boolean;\n private _innerRadius: number;\n private _outerRadius: number;\n private _minValue: number;\n private _maxValue: number;\n private _segments: IExtendedSegment[];\n private _calloutAnchor: string;\n private _rootElem: HTMLDivElement | null;\n private _margins: { left: number; right: number; top: number; bottom: number };\n private _legendsHeight: number;\n\n constructor(props: IGaugeChartProps) {\n super(props);\n\n initializeComponentRef(this);\n\n this._margins = this._getMargins();\n this._legendsHeight = !props.hideLegend ? 24 : 0;\n\n this.state = {\n hoveredLegend: '',\n selectedLegend: props.legendProps?.selectedLegend ?? '',\n focusedElement: '',\n calloutTarget: null,\n isCalloutVisible: false,\n hoverXValue: '',\n hoverYValues: [],\n width: 140 + this._margins.left + this._margins.right,\n height: 70 + this._margins.top + this._margins.bottom + this._legendsHeight,\n };\n\n this._isRTL = getRTL(props.theme);\n this._calloutAnchor = '';\n }\n\n public componentDidMount(): void {\n if (this._rootElem) {\n this.setState({\n width: this._rootElem.clientWidth,\n height: this._rootElem.clientHeight,\n });\n }\n }\n\n public componentDidUpdate(prevProps: IGaugeChartProps): void {\n if (prevProps.legendProps?.selectedLegend !== this.props.legendProps?.selectedLegend) {\n this.setState({\n selectedLegend: this.props.legendProps?.selectedLegend ?? '',\n });\n }\n }\n\n public render(): React.ReactNode {\n this._margins = this._getMargins();\n this._legendsHeight = !this.props.hideLegend ? 24 : 0;\n\n const width = this.props.width || this.state.width;\n const height = this.props.height || this.state.height;\n\n this._outerRadius = Math.min(\n (width - (this._margins.left + this._margins.right)) / 2,\n height - (this._margins.top + this._margins.bottom + this._legendsHeight),\n );\n\n const { arcWidth, chartValueSize } = this._getStylesBasedOnBreakpoint();\n this._innerRadius = this._outerRadius - arcWidth;\n\n const { arcs } = this._processProps();\n\n this._classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n className: this.props.className,\n chartWidth: width,\n chartHeight: height - this._legendsHeight,\n chartValueSize,\n });\n\n return (\n <div className={this._classNames.root} ref={el => (this._rootElem = el)}>\n <FocusZone direction={FocusZoneDirection.horizontal}>\n <svg\n className={this._classNames.chart}\n role=\"region\"\n aria-label={this._getChartTitle()}\n onMouseLeave={this._handleMouseOut}\n >\n <g transform={`translate(${width / 2}, ${height - (this._margins.bottom + this._legendsHeight)})`}>\n {this.props.chartTitle && (\n <text\n x={0}\n y={-(this._outerRadius + TITLE_OFFSET)}\n textAnchor=\"middle\"\n className={this._classNames.chartTitle}\n aria-hidden={true}\n >\n {this.props.chartTitle}\n </text>\n )}\n {!this.props.hideMinMax && (\n <>\n <text\n x={(this._isRTL ? 1 : -1) * (this._outerRadius + LABEL_OFFSET)}\n y={0}\n textAnchor=\"end\"\n className={this._classNames.limits}\n role=\"img\"\n aria-label={`Min value: ${this._minValue}`}\n >\n {formatValueWithSIPrefix(this._minValue)}\n </text>\n <text\n x={(this._isRTL ? -1 : 1) * (this._outerRadius + LABEL_OFFSET)}\n y={0}\n textAnchor=\"start\"\n className={this._classNames.limits}\n role=\"img\"\n aria-label={`Max value: ${this._maxValue}`}\n >\n {formatValueWithSIPrefix(this._maxValue)}\n </text>\n </>\n )}\n {arcs.map((arc, index) => {\n const segment = this._segments[arc.segmentIndex];\n\n const clipId = getId('Arc_clip') + `${index}_${arc.startAngle}_${arc.endAngle}`;\n\n const arcClassNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n solidFill: this.props.enableGradient ? 'transparent' : segment.color!,\n gradientFill: `conic-gradient(\n from ${arc.startAngle}rad at 50% 100%,\n ${segment.gradient?.[0]},\n ${segment.gradient?.[1]} ${arc.endAngle - arc.startAngle}rad\n )`,\n opacity: this._legendHighlighted(segment.legend) || this._noLegendHighlighted() ? 1 : 0.1,\n });\n\n return (\n <React.Fragment key={index}>\n <path\n d={arc.d}\n strokeWidth={this.state.focusedElement === segment.legend ? ARC_PADDING : 0}\n className={arcClassNames.segment}\n {...getAccessibleDataObject(\n {\n ariaLabel: getSegmentLabel(segment, this._minValue, this._maxValue, this.props.variant, true),\n ...segment.accessibilityData,\n },\n 'img',\n true,\n )}\n onFocus={e => this._handleFocus(e, segment.legend)}\n onBlur={this._handleBlur}\n onMouseEnter={e => this._handleMouseOver(e, segment.legend)}\n onMouseMove={e => this._handleMouseOver(e, segment.legend)}\n data-is-focusable={this._legendHighlighted(segment.legend) || this._noLegendHighlighted()}\n />\n\n {this.props.enableGradient && (\n <>\n <clipPath id={clipId}>\n <path d={arc.d} />\n </clipPath>\n <foreignObject x=\"-50%\" y=\"-100%\" width=\"100%\" height=\"100%\" clipPath={`url(#${clipId})`}>\n <div className={arcClassNames.gradientSegment} />\n </foreignObject>\n </>\n )}\n </React.Fragment>\n );\n })}\n {this._renderNeedle()}\n <g\n onMouseEnter={e => this._handleMouseOver(e, 'Chart value')}\n onMouseMove={e => this._handleMouseOver(e, 'Chart value')}\n >\n <SVGTooltipText\n content={getChartValueLabel(\n this.props.chartValue,\n this._minValue,\n this._maxValue,\n this.props.chartValueFormat,\n )}\n textProps={{\n x: 0,\n y: 0,\n textAnchor: 'middle',\n className: this._classNames.chartValue,\n 'aria-hidden': 'true',\n }}\n maxWidth={this._innerRadius * 2 - 24}\n wrapContent={this._wrapContent}\n />\n </g>\n {this.props.sublabel && (\n <SVGTooltipText\n content={this.props.sublabel}\n textProps={{\n x: 0,\n y: 4,\n textAnchor: 'middle',\n dominantBaseline: 'hanging',\n className: this._classNames.sublabel,\n }}\n maxWidth={this._innerRadius * 2}\n wrapContent={this._wrapContent}\n />\n )}\n </g>\n </svg>\n </FocusZone>\n {this._renderLegends()}\n {!this.props.hideTooltip && this.state.isCalloutVisible && (\n <Callout\n target={this.state.calloutTarget}\n directionalHint={DirectionalHint.topAutoEdge}\n gapSpace={15}\n isBeakVisible={false}\n onDismiss={this._handleCalloutDismiss}\n {...this.props.calloutProps}\n >\n {this._multiValueCallout({\n hoverXValue: this.state.hoverXValue,\n YValueHover: this.state.hoverYValues,\n })}\n </Callout>\n )}\n </div>\n );\n }\n\n public get chartContainer(): HTMLElement | null {\n return this._rootElem;\n }\n\n private _getMargins = () => {\n const { hideMinMax, chartTitle, sublabel } = this.props;\n\n return {\n left: (!hideMinMax ? LABEL_OFFSET + LABEL_WIDTH : 0) + GAUGE_MARGIN,\n right: (!hideMinMax ? LABEL_OFFSET + LABEL_WIDTH : 0) + GAUGE_MARGIN,\n top: (chartTitle ? TITLE_OFFSET + LABEL_HEIGHT : EXTRA_NEEDLE_LENGTH / 2) + GAUGE_MARGIN,\n bottom: (sublabel ? LABEL_OFFSET + LABEL_HEIGHT : 0) + GAUGE_MARGIN,\n };\n };\n\n private _getStylesBasedOnBreakpoint = () => {\n for (let index = BREAKPOINTS.length - 1; index >= 0; index -= 1) {\n if (this._outerRadius >= BREAKPOINTS[index].minRadius) {\n return {\n arcWidth: BREAKPOINTS[index].arcWidth,\n chartValueSize: BREAKPOINTS[index].fontSize,\n };\n }\n }\n return {\n arcWidth: BREAKPOINTS[0].arcWidth,\n chartValueSize: BREAKPOINTS[0].fontSize,\n };\n };\n\n private _processProps = () => {\n const { minValue = 0, maxValue, theme } = this.props;\n\n let total = minValue;\n const segments: IExtendedSegment[] = this.props.segments.map((segment, index) => {\n const size = Math.max(segment.size, 0);\n total += size;\n return {\n legend: segment.legend,\n size,\n color:\n typeof segment.color !== 'undefined'\n ? getColorFromToken(segment.color, theme!.isInverted)\n : getNextColor(index, 0, theme!.isInverted),\n gradient: segment.gradient ?? getNextGradient(index, 0, theme!.isInverted),\n accessibilityData: segment.accessibilityData,\n start: total - size,\n end: total,\n };\n });\n if (typeof maxValue !== 'undefined' && total < maxValue) {\n segments.push({\n legend: 'Unknown',\n size: maxValue - total,\n color: theme!.palette.neutralLight,\n start: total,\n end: maxValue,\n });\n total = maxValue;\n }\n\n const arcGenerator = d3Arc()\n .cornerRadius(this.props.roundCorners ? 3 : 0)\n .padAngle(ARC_PADDING / this._outerRadius)\n .padRadius(this._outerRadius);\n const rtlSafeSegments = this._isRTL ? Array.from(segments).reverse() : segments;\n let prevAngle = -Math.PI / 2;\n const arcs = rtlSafeSegments.map((segment, index) => {\n const endAngle = prevAngle + (segment.size / (total - minValue)) * Math.PI;\n const d = arcGenerator({\n innerRadius: this._innerRadius,\n outerRadius: this._outerRadius,\n startAngle: prevAngle,\n endAngle,\n })!;\n prevAngle = endAngle;\n return {\n d,\n segmentIndex: this._isRTL ? segments.length - 1 - index : index,\n startAngle: prevAngle - (segment.size / (total - minValue)) * Math.PI,\n endAngle,\n };\n });\n\n this._minValue = minValue;\n this._maxValue = total;\n this._segments = segments;\n\n return {\n arcs,\n };\n };\n\n private _renderNeedle = () => {\n const needleRotation = calcNeedleRotation(this.props.chartValue, this._minValue, this._maxValue);\n const rtlSafeNeedleRotation = this._isRTL ? 180 - needleRotation : needleRotation;\n const strokeWidth = 2;\n const halfStrokeWidth = strokeWidth / 2;\n const needleLength = this._outerRadius - this._innerRadius + EXTRA_NEEDLE_LENGTH;\n\n return (\n <g transform={`rotate(${rtlSafeNeedleRotation}, 0, 0)`}>\n <path\n d={`\n M 0,${-halfStrokeWidth - 3}\n L ${-needleLength},${-halfStrokeWidth - 1}\n A ${halfStrokeWidth + 1},${halfStrokeWidth + 1},0,0,0,${-needleLength},${halfStrokeWidth + 1}\n L 0,${halfStrokeWidth + 3}\n A ${halfStrokeWidth + 3},${halfStrokeWidth + 3},0,0,0,0,${-halfStrokeWidth - 3}\n `}\n strokeWidth={strokeWidth}\n className={this._classNames.needle}\n transform={`translate(${-this._innerRadius + EXTRA_NEEDLE_LENGTH / 2})`}\n data-is-focusable={true}\n onFocus={e => this._handleFocus(e, 'Needle')}\n onBlur={this._handleBlur}\n onMouseEnter={e => this._handleMouseOver(e, 'Needle')}\n onMouseMove={e => this._handleMouseOver(e, 'Needle')}\n role=\"img\"\n aria-label={\n 'Current value: ' +\n getChartValueLabel(this.props.chartValue, this._minValue, this._maxValue, this.props.chartValueFormat)\n }\n />\n </g>\n );\n };\n\n private _renderLegends = () => {\n if (this.props.hideLegend) {\n return null;\n }\n\n const legends: ILegend[] = this._segments.map((segment, index) => {\n const color: string = this.props.enableGradient\n ? segment.gradient?.[0] || getNextGradient(index, 0, this.props.theme!.isInverted)[0]\n : segment.color || getNextColor(index, 0, this.props.theme!.isInverted);\n\n return {\n title: segment.legend,\n color,\n action: () => {\n if (this.state.selectedLegend === segment.legend) {\n this.setState({ selectedLegend: '' });\n } else {\n this.setState({ selectedLegend: segment.legend });\n }\n },\n hoverAction: () => {\n this.setState({ hoveredLegend: segment.legend });\n },\n onMouseOutAction: () => {\n this.setState({ hoveredLegend: '' });\n },\n };\n });\n\n return (\n <div className={this._classNames.legendsContainer}>\n <Legends legends={legends} centerLegends {...this.props.legendProps} />\n </div>\n );\n };\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it\n */\n private _legendHighlighted = (legend: string) => {\n return (\n this.state.selectedLegend === legend || (this.state.selectedLegend === '' && this.state.hoveredLegend === legend)\n );\n };\n\n /**\n * This function checks if none of the legends is selected or hovered.\n */\n private _noLegendHighlighted = () => {\n return this.state.selectedLegend === '' && this.state.hoveredLegend === '';\n };\n\n private _handleFocus = (focusEvent: React.FocusEvent<SVGElement>, focusedElement: string) => {\n this._showCallout(focusEvent.target, focusedElement, true);\n };\n\n private _handleBlur = () => {\n this._hideCallout(true);\n };\n\n private _handleMouseOver = (mouseEvent: React.MouseEvent<SVGElement>, hoveredElement: string) => {\n this._showCallout(mouseEvent.target, hoveredElement, false);\n };\n\n private _handleMouseOut = () => {\n this._hideCallout(false);\n };\n\n private _handleCalloutDismiss = () => {\n this._hideCallout(false);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _showCallout = (target: any, legend: string, isFocusEvent: boolean) => {\n if (this._calloutAnchor === legend) {\n return;\n }\n\n this._calloutAnchor = legend;\n const hoverXValue: string =\n 'Current value is ' +\n getChartValueLabel(this.props.chartValue, this._minValue, this._maxValue, this.props.chartValueFormat, true);\n const hoverYValues: IYValue[] = this._segments.map(segment => {\n const yValue: IYValue = {\n legend: segment.legend,\n y: getSegmentLabel(segment, this._minValue, this._maxValue, this.props.variant),\n color: this.props.enableGradient ? segment.gradient?.[0] : segment.color,\n };\n return yValue;\n });\n this.setState({\n calloutTarget: target,\n /** Show the callout if highlighted arc is hovered/focused and Hide it if unhighlighted arc is hovered/focused */\n isCalloutVisible:\n ['Needle', 'Chart value'].includes(legend) ||\n this.state.selectedLegend === '' ||\n this.state.selectedLegend === legend,\n hoverXValue,\n hoverYValues,\n ...(isFocusEvent ? { focusedElement: legend } : {}),\n });\n };\n\n private _hideCallout = (isBlurEvent?: boolean) => {\n this._calloutAnchor = '';\n this.setState({\n calloutTarget: null,\n isCalloutVisible: false,\n hoverXValue: '',\n hoverYValues: [],\n ...(isBlurEvent ? { focusedElement: '' } : {}),\n });\n };\n\n private _wrapContent = (content: string, id: string, maxWidth: number) => {\n const textElement = d3Select<SVGTextElement, {}>(`#${id}`);\n textElement.text(content);\n if (!textElement.node()) {\n return false;\n }\n\n let isOverflowing = false;\n let textLength = textElement.node()!.getComputedTextLength();\n while (textLength > maxWidth && content.length > 0) {\n content = content.slice(0, -1);\n textElement.text(content + '...');\n isOverflowing = true;\n textLength = textElement.node()!.getComputedTextLength();\n }\n return isOverflowing;\n };\n\n // TO DO: Write a common functional component for Multi value callout and divide sub count method\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _multiValueCallout = (calloutProps: any) => {\n const yValueHoverSubCountsExists: boolean = this._yValueHoverSubCountsExists(calloutProps.YValueHover);\n return (\n <div className={this._classNames.calloutContentRoot}>\n <div\n className={this._classNames.calloutDateTimeContainer}\n style={yValueHoverSubCountsExists ? { marginBottom: '11px' } : {}}\n >\n <div\n className={this._classNames.calloutContentX}\n {...getAccessibleDataObject(calloutProps!.xAxisCalloutAccessibilityData, 'text', false)}\n >\n {convertToLocaleString(calloutProps!.hoverXValue, this.props.culture)}\n </div>\n </div>\n <div\n className={this._classNames.calloutInfoContainer}\n style={yValueHoverSubCountsExists ? { display: 'flex' } : {}}\n >\n {calloutProps!.YValueHover &&\n calloutProps!.YValueHover.map((yValue: IYValueHover, index: number, yValues: IYValueHover[]) => {\n const isLast: boolean = index + 1 === yValues.length;\n const { shouldDrawBorderBottom = false } = yValue;\n return (\n <div\n {...getAccessibleDataObject(yValue.callOutAccessibilityData, 'text', false)}\n key={`callout-content-${index}`}\n style={\n yValueHoverSubCountsExists\n ? {\n display: 'inline-block',\n ...(shouldDrawBorderBottom && {\n borderBottom: `1px solid ${this.props.theme!.semanticColors.menuDivider}`,\n paddingBottom: '10px',\n }),\n }\n : {\n ...(shouldDrawBorderBottom && {\n borderBottom: `1px solid ${this.props.theme!.semanticColors.menuDivider}`,\n paddingBottom: '10px',\n }),\n }\n }\n >\n {this._getCalloutContent(yValue, index, yValueHoverSubCountsExists, isLast)}\n </div>\n );\n })}\n {!!calloutProps.descriptionMessage && (\n <div className={this._classNames.descriptionMessage}>{calloutProps.descriptionMessage}</div>\n )}\n </div>\n </div>\n );\n };\n\n private _yValueHoverSubCountsExists(yValueHover?: IYValueHover[]) {\n if (yValueHover) {\n return yValueHover.some(\n (yValue: {\n legend?: string;\n y?: number;\n color?: string;\n yAxisCalloutData?: string | { [id: string]: number };\n }) => yValue.yAxisCalloutData && typeof yValue.yAxisCalloutData !== 'string',\n );\n }\n return false;\n }\n\n private _getCalloutContent(\n xValue: IYValueHover,\n index: number,\n yValueHoverSubCountsExists: boolean,\n isLast: boolean,\n ): React.ReactNode {\n const marginStyle: React.CSSProperties = isLast ? {} : { marginRight: '16px' };\n const toDrawShape = xValue.index !== undefined && xValue.index !== -1;\n const _classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n lineColor: xValue.color,\n toDrawShape,\n });\n\n const { culture } = this.props;\n const yValue = convertToLocaleString(xValue.y, culture);\n if (!xValue.yAxisCalloutData || typeof xValue.yAxisCalloutData === 'string') {\n return (\n <div style={yValueHoverSubCountsExists ? marginStyle : {}}>\n {yValueHoverSubCountsExists && (\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n )}\n <div id={`${index}_${xValue.y}`} className={_classNames.calloutBlockContainer}>\n {toDrawShape && (\n <Shape\n svgProps={{\n className: _classNames.shapeStyles,\n }}\n pathProps={{ fill: xValue.color }}\n shape={Points[xValue.index! % Object.keys(pointTypes).length] as LegendShape}\n />\n )}\n <div>\n <div className={_classNames.calloutlegendText}> {xValue.legend}</div>\n <div className={_classNames.calloutContentY}>\n {convertToLocaleString(\n xValue.yAxisCalloutData ? xValue.yAxisCalloutData : xValue.y || xValue.data,\n culture,\n )}\n </div>\n </div>\n </div>\n </div>\n );\n } else {\n const subcounts: { [id: string]: number } = xValue.yAxisCalloutData as { [id: string]: number };\n return (\n <div style={marginStyle}>\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n {Object.keys(subcounts).map((subcountName: string) => {\n return (\n <div key={subcountName} className={_classNames.calloutBlockContainer}>\n <div className={_classNames.calloutlegendText}> {convertToLocaleString(subcountName, culture)}</div>\n <div className={_classNames.calloutContentY}>\n {convertToLocaleString(subcounts[subcountName], culture)}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n }\n\n private _getChartTitle = (): string => {\n const { chartTitle } = this.props;\n return (chartTitle ? `${chartTitle}. ` : '') + `Gauge chart with ${this._segments.length} segments. `;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"GaugeChart.base.js","sourceRoot":"../src/","sources":["components/GaugeChart/GaugeChart.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { arc as d3Arc } from 'd3-shape';\nimport { classNamesFunction, getId, getRTL, initializeComponentRef } from '@fluentui/react/lib/Utilities';\nimport {\n IGaugeChartProps,\n IGaugeChartSegment,\n IGaugeChartStyleProps,\n IGaugeChartStyles,\n GaugeValueFormat,\n GaugeChartVariant,\n} from './GaugeChart.types';\nimport { IProcessedStyleSet } from '@fluentui/react/lib/Styling';\nimport { convertToLocaleString } from '../../utilities/locale-util';\nimport {\n Points,\n areArraysEqual,\n formatValueWithSIPrefix,\n getAccessibleDataObject,\n getColorFromToken,\n getNextColor,\n getNextGradient,\n pointTypes,\n} from '../../utilities/index';\nimport { ILegend, LegendShape, Legends, Shape } from '../Legends/index';\nimport { FocusZone, FocusZoneDirection } from '@fluentui/react-focus';\nimport { Callout, DirectionalHint } from '@fluentui/react/lib/Callout';\nimport { IYValueHover } from '../../index';\nimport { SVGTooltipText } from '../../utilities/SVGTooltipText';\nimport { select as d3Select } from 'd3-selection';\nimport { IChart } from '../../types/index';\n\nconst GAUGE_MARGIN = 16;\nconst LABEL_WIDTH = 36;\nconst LABEL_HEIGHT = 16;\nconst LABEL_OFFSET = 4;\nconst TITLE_OFFSET = 11;\nconst EXTRA_NEEDLE_LENGTH = 4;\nexport const ARC_PADDING = 2;\nexport const BREAKPOINTS = [\n { minRadius: 52, arcWidth: 12, fontSize: 20 },\n { minRadius: 70, arcWidth: 16, fontSize: 24 },\n { minRadius: 88, arcWidth: 20, fontSize: 32 },\n { minRadius: 106, arcWidth: 24, fontSize: 32 },\n { minRadius: 124, arcWidth: 28, fontSize: 40 },\n { minRadius: 142, arcWidth: 32, fontSize: 40 },\n];\n\nconst getClassNames = classNamesFunction<IGaugeChartStyleProps, IGaugeChartStyles>();\n\nexport const calcNeedleRotation = (chartValue: number, minValue: number, maxValue: number) => {\n let needleRotation = ((chartValue - minValue) / (maxValue - minValue)) * 180;\n if (needleRotation < 0) {\n needleRotation = 0;\n } else if (needleRotation > 180) {\n needleRotation = 180;\n }\n\n return needleRotation;\n};\n\nexport const getSegmentLabel = (\n segment: IExtendedSegment,\n minValue: number,\n maxValue: number,\n variant?: GaugeChartVariant,\n isAriaLabel: boolean = false,\n) => {\n if (isAriaLabel) {\n return minValue === 0 && variant === GaugeChartVariant.SingleSegment\n ? `${segment.legend}, ${segment.size} out of ${maxValue} or ${((segment.size / maxValue) * 100).toFixed()}%`\n : `${segment.legend}, ${segment.start} to ${segment.end}`;\n }\n\n return minValue === 0 && variant === GaugeChartVariant.SingleSegment\n ? `${segment.size} (${((segment.size / maxValue) * 100).toFixed()}%)`\n : `${segment.start} - ${segment.end}`;\n};\n\nexport const getChartValueLabel = (\n chartValue: number,\n minValue: number,\n maxValue: number,\n chartValueFormat?: GaugeValueFormat | ((sweepFraction: [number, number]) => string),\n forCallout: boolean = false,\n): string => {\n if (forCallout) {\n // When displaying the chart value as a percentage, use fractions in the callout, and vice versa.\n // This helps clarify the actual value and avoid repetition.\n return minValue !== 0\n ? chartValue.toString()\n : chartValueFormat === GaugeValueFormat.Fraction\n ? `${((chartValue / maxValue) * 100).toFixed()}%`\n : `${chartValue}/${maxValue}`;\n }\n\n return typeof chartValueFormat === 'function'\n ? chartValueFormat([chartValue - minValue, maxValue - minValue])\n : minValue !== 0\n ? chartValue.toString()\n : chartValueFormat === GaugeValueFormat.Fraction\n ? `${chartValue}/${maxValue}`\n : `${((chartValue / maxValue) * 100).toFixed()}%`;\n};\n\ninterface IYValue extends Omit<IYValueHover, 'y'> {\n y?: string | number;\n}\nexport interface IGaugeChartState {\n hoveredLegend: string;\n selectedLegends: string[];\n focusedElement?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n calloutTarget: any;\n isCalloutVisible: boolean;\n hoverXValue: string | number;\n hoverYValues: IYValue[];\n width: number;\n height: number;\n}\nexport interface IExtendedSegment extends IGaugeChartSegment {\n start: number;\n end: number;\n}\n\nexport class GaugeChartBase extends React.Component<IGaugeChartProps, IGaugeChartState> implements IChart {\n private _classNames: IProcessedStyleSet<IGaugeChartStyles>;\n private _isRTL: boolean;\n private _innerRadius: number;\n private _outerRadius: number;\n private _minValue: number;\n private _maxValue: number;\n private _segments: IExtendedSegment[];\n private _calloutAnchor: string;\n private _rootElem: HTMLDivElement | null;\n private _margins: { left: number; right: number; top: number; bottom: number };\n private _legendsHeight: number;\n\n constructor(props: IGaugeChartProps) {\n super(props);\n\n initializeComponentRef(this);\n\n this._margins = this._getMargins();\n this._legendsHeight = !props.hideLegend ? 24 : 0;\n\n this.state = {\n hoveredLegend: '',\n selectedLegends: props.legendProps?.selectedLegends || [],\n focusedElement: '',\n calloutTarget: null,\n isCalloutVisible: false,\n hoverXValue: '',\n hoverYValues: [],\n width: 140 + this._margins.left + this._margins.right,\n height: 70 + this._margins.top + this._margins.bottom + this._legendsHeight,\n };\n\n this._isRTL = getRTL(props.theme);\n this._calloutAnchor = '';\n }\n\n public componentDidMount(): void {\n if (this._rootElem) {\n this.setState({\n width: this._rootElem.clientWidth,\n height: this._rootElem.clientHeight,\n });\n }\n }\n\n public componentDidUpdate(prevProps: IGaugeChartProps): void {\n if (!areArraysEqual(prevProps.legendProps?.selectedLegends, this.props.legendProps?.selectedLegends)) {\n this.setState({\n selectedLegends: this.props.legendProps?.selectedLegends || [],\n });\n }\n }\n\n public render(): React.ReactNode {\n this._margins = this._getMargins();\n this._legendsHeight = !this.props.hideLegend ? 24 : 0;\n\n const width = this.props.width || this.state.width;\n const height = this.props.height || this.state.height;\n\n this._outerRadius = Math.min(\n (width - (this._margins.left + this._margins.right)) / 2,\n height - (this._margins.top + this._margins.bottom + this._legendsHeight),\n );\n\n const { arcWidth, chartValueSize } = this._getStylesBasedOnBreakpoint();\n this._innerRadius = this._outerRadius - arcWidth;\n\n const { arcs } = this._processProps();\n\n this._classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n className: this.props.className,\n chartWidth: width,\n chartHeight: height - this._legendsHeight,\n chartValueSize,\n });\n\n return (\n <div className={this._classNames.root} ref={el => (this._rootElem = el)}>\n <FocusZone direction={FocusZoneDirection.horizontal}>\n <svg\n className={this._classNames.chart}\n role=\"region\"\n aria-label={this._getChartTitle()}\n onMouseLeave={this._handleMouseOut}\n >\n <g transform={`translate(${width / 2}, ${height - (this._margins.bottom + this._legendsHeight)})`}>\n {this.props.chartTitle && (\n <text\n x={0}\n y={-(this._outerRadius + TITLE_OFFSET)}\n textAnchor=\"middle\"\n className={this._classNames.chartTitle}\n aria-hidden={true}\n >\n {this.props.chartTitle}\n </text>\n )}\n {!this.props.hideMinMax && (\n <>\n <text\n x={(this._isRTL ? 1 : -1) * (this._outerRadius + LABEL_OFFSET)}\n y={0}\n textAnchor=\"end\"\n className={this._classNames.limits}\n role=\"img\"\n aria-label={`Min value: ${this._minValue}`}\n >\n {formatValueWithSIPrefix(this._minValue)}\n </text>\n <text\n x={(this._isRTL ? -1 : 1) * (this._outerRadius + LABEL_OFFSET)}\n y={0}\n textAnchor=\"start\"\n className={this._classNames.limits}\n role=\"img\"\n aria-label={`Max value: ${this._maxValue}`}\n >\n {formatValueWithSIPrefix(this._maxValue)}\n </text>\n </>\n )}\n {arcs.map((arc, index) => {\n const segment = this._segments[arc.segmentIndex];\n\n const clipId = getId('Arc_clip') + `${index}_${arc.startAngle}_${arc.endAngle}`;\n\n const arcClassNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n solidFill: this.props.enableGradient ? 'transparent' : segment.color!,\n gradientFill: `conic-gradient(\n from ${arc.startAngle}rad at 50% 100%,\n ${segment.gradient?.[0]},\n ${segment.gradient?.[1]} ${arc.endAngle - arc.startAngle}rad\n )`,\n opacity: this._legendHighlighted(segment.legend) || this._noLegendHighlighted() ? 1 : 0.1,\n });\n\n return (\n <React.Fragment key={index}>\n <path\n d={arc.d}\n strokeWidth={this.state.focusedElement === segment.legend ? ARC_PADDING : 0}\n className={arcClassNames.segment}\n {...getAccessibleDataObject(\n {\n ariaLabel: getSegmentLabel(segment, this._minValue, this._maxValue, this.props.variant, true),\n ...segment.accessibilityData,\n },\n 'img',\n true,\n )}\n onFocus={e => this._handleFocus(e, segment.legend)}\n onBlur={this._handleBlur}\n onMouseEnter={e => this._handleMouseOver(e, segment.legend)}\n onMouseMove={e => this._handleMouseOver(e, segment.legend)}\n data-is-focusable={this._legendHighlighted(segment.legend) || this._noLegendHighlighted()}\n />\n\n {this.props.enableGradient && (\n <>\n <clipPath id={clipId}>\n <path d={arc.d} />\n </clipPath>\n <foreignObject x=\"-50%\" y=\"-100%\" width=\"100%\" height=\"100%\" clipPath={`url(#${clipId})`}>\n <div className={arcClassNames.gradientSegment} />\n </foreignObject>\n </>\n )}\n </React.Fragment>\n );\n })}\n {this._renderNeedle()}\n <g\n onMouseEnter={e => this._handleMouseOver(e, 'Chart value')}\n onMouseMove={e => this._handleMouseOver(e, 'Chart value')}\n >\n <SVGTooltipText\n content={getChartValueLabel(\n this.props.chartValue,\n this._minValue,\n this._maxValue,\n this.props.chartValueFormat,\n )}\n textProps={{\n x: 0,\n y: 0,\n textAnchor: 'middle',\n className: this._classNames.chartValue,\n 'aria-hidden': 'true',\n }}\n maxWidth={this._innerRadius * 2 - 24}\n wrapContent={this._wrapContent}\n />\n </g>\n {this.props.sublabel && (\n <SVGTooltipText\n content={this.props.sublabel}\n textProps={{\n x: 0,\n y: 4,\n textAnchor: 'middle',\n dominantBaseline: 'hanging',\n className: this._classNames.sublabel,\n }}\n maxWidth={this._innerRadius * 2}\n wrapContent={this._wrapContent}\n />\n )}\n </g>\n </svg>\n </FocusZone>\n {this._renderLegends()}\n {!this.props.hideTooltip && this.state.isCalloutVisible && (\n <Callout\n target={this.state.calloutTarget}\n directionalHint={DirectionalHint.topAutoEdge}\n gapSpace={15}\n isBeakVisible={false}\n onDismiss={this._handleCalloutDismiss}\n {...this.props.calloutProps}\n >\n {this._multiValueCallout({\n hoverXValue: this.state.hoverXValue,\n YValueHover: this.state.hoverYValues,\n })}\n </Callout>\n )}\n </div>\n );\n }\n\n public get chartContainer(): HTMLElement | null {\n return this._rootElem;\n }\n\n private _getMargins = () => {\n const { hideMinMax, chartTitle, sublabel } = this.props;\n\n return {\n left: (!hideMinMax ? LABEL_OFFSET + LABEL_WIDTH : 0) + GAUGE_MARGIN,\n right: (!hideMinMax ? LABEL_OFFSET + LABEL_WIDTH : 0) + GAUGE_MARGIN,\n top: (chartTitle ? TITLE_OFFSET + LABEL_HEIGHT : EXTRA_NEEDLE_LENGTH / 2) + GAUGE_MARGIN,\n bottom: (sublabel ? LABEL_OFFSET + LABEL_HEIGHT : 0) + GAUGE_MARGIN,\n };\n };\n\n private _getStylesBasedOnBreakpoint = () => {\n for (let index = BREAKPOINTS.length - 1; index >= 0; index -= 1) {\n if (this._outerRadius >= BREAKPOINTS[index].minRadius) {\n return {\n arcWidth: BREAKPOINTS[index].arcWidth,\n chartValueSize: BREAKPOINTS[index].fontSize,\n };\n }\n }\n return {\n arcWidth: BREAKPOINTS[0].arcWidth,\n chartValueSize: BREAKPOINTS[0].fontSize,\n };\n };\n\n private _processProps = () => {\n const { minValue = 0, maxValue, theme } = this.props;\n\n let total = minValue;\n const segments: IExtendedSegment[] = this.props.segments.map((segment, index) => {\n const size = Math.max(segment.size, 0);\n total += size;\n return {\n legend: segment.legend,\n size,\n color:\n typeof segment.color !== 'undefined'\n ? getColorFromToken(segment.color, theme!.isInverted)\n : getNextColor(index, 0, theme!.isInverted),\n gradient: segment.gradient ?? getNextGradient(index, 0, theme!.isInverted),\n accessibilityData: segment.accessibilityData,\n start: total - size,\n end: total,\n };\n });\n if (typeof maxValue !== 'undefined' && total < maxValue) {\n segments.push({\n legend: 'Unknown',\n size: maxValue - total,\n color: theme!.palette.neutralLight,\n start: total,\n end: maxValue,\n });\n total = maxValue;\n }\n\n const arcGenerator = d3Arc()\n .cornerRadius(this.props.roundCorners ? 3 : 0)\n .padAngle(ARC_PADDING / this._outerRadius)\n .padRadius(this._outerRadius);\n const rtlSafeSegments = this._isRTL ? Array.from(segments).reverse() : segments;\n let prevAngle = -Math.PI / 2;\n const arcs = rtlSafeSegments.map((segment, index) => {\n const endAngle = prevAngle + (segment.size / (total - minValue)) * Math.PI;\n const d = arcGenerator({\n innerRadius: this._innerRadius,\n outerRadius: this._outerRadius,\n startAngle: prevAngle,\n endAngle,\n })!;\n prevAngle = endAngle;\n return {\n d,\n segmentIndex: this._isRTL ? segments.length - 1 - index : index,\n startAngle: prevAngle - (segment.size / (total - minValue)) * Math.PI,\n endAngle,\n };\n });\n\n this._minValue = minValue;\n this._maxValue = total;\n this._segments = segments;\n\n return {\n arcs,\n };\n };\n\n private _renderNeedle = () => {\n const needleRotation = calcNeedleRotation(this.props.chartValue, this._minValue, this._maxValue);\n const rtlSafeNeedleRotation = this._isRTL ? 180 - needleRotation : needleRotation;\n const strokeWidth = 2;\n const halfStrokeWidth = strokeWidth / 2;\n const needleLength = this._outerRadius - this._innerRadius + EXTRA_NEEDLE_LENGTH;\n\n return (\n <g transform={`rotate(${rtlSafeNeedleRotation}, 0, 0)`}>\n <path\n d={`\n M 0,${-halfStrokeWidth - 3}\n L ${-needleLength},${-halfStrokeWidth - 1}\n A ${halfStrokeWidth + 1},${halfStrokeWidth + 1},0,0,0,${-needleLength},${halfStrokeWidth + 1}\n L 0,${halfStrokeWidth + 3}\n A ${halfStrokeWidth + 3},${halfStrokeWidth + 3},0,0,0,0,${-halfStrokeWidth - 3}\n `}\n strokeWidth={strokeWidth}\n className={this._classNames.needle}\n transform={`translate(${-this._innerRadius + EXTRA_NEEDLE_LENGTH / 2})`}\n data-is-focusable={true}\n onFocus={e => this._handleFocus(e, 'Needle')}\n onBlur={this._handleBlur}\n onMouseEnter={e => this._handleMouseOver(e, 'Needle')}\n onMouseMove={e => this._handleMouseOver(e, 'Needle')}\n role=\"img\"\n aria-label={\n 'Current value: ' +\n getChartValueLabel(this.props.chartValue, this._minValue, this._maxValue, this.props.chartValueFormat)\n }\n />\n </g>\n );\n };\n\n private _renderLegends = () => {\n if (this.props.hideLegend) {\n return null;\n }\n\n const legends: ILegend[] = this._segments.map((segment, index) => {\n const color: string = this.props.enableGradient\n ? segment.gradient?.[0] || getNextGradient(index, 0, this.props.theme!.isInverted)[0]\n : segment.color || getNextColor(index, 0, this.props.theme!.isInverted);\n\n return {\n title: segment.legend,\n color,\n hoverAction: () => {\n this.setState({ hoveredLegend: segment.legend });\n },\n onMouseOutAction: () => {\n this.setState({ hoveredLegend: '' });\n },\n };\n });\n\n return (\n <div className={this._classNames.legendsContainer}>\n <Legends\n legends={legends}\n centerLegends\n {...this.props.legendProps}\n // eslint-disable-next-line react/jsx-no-bind\n onChange={this._onLegendSelectionChange.bind(this)}\n />\n </div>\n );\n };\n\n private _onLegendSelectionChange(\n selectedLegends: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: ILegend,\n ): void {\n if (this.props.legendProps?.canSelectMultipleLegends) {\n this.setState({ selectedLegends });\n } else {\n this.setState({ selectedLegends: selectedLegends.slice(-1) });\n }\n if (this.props.legendProps?.onChange) {\n this.props.legendProps.onChange(selectedLegends, event, currentLegend);\n }\n }\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it\n */\n private _legendHighlighted = (legend: string) => {\n return this._getHighlightedLegend().includes(legend!);\n };\n\n /**\n * This function checks if none of the legends is selected or hovered.\n */\n private _noLegendHighlighted = () => {\n return this._getHighlightedLegend().length === 0;\n };\n\n private _getHighlightedLegend() {\n return this.state.selectedLegends.length > 0\n ? this.state.selectedLegends\n : this.state.hoveredLegend\n ? [this.state.hoveredLegend]\n : [];\n }\n\n private _handleFocus = (focusEvent: React.FocusEvent<SVGElement>, focusedElement: string) => {\n this._showCallout(focusEvent.target, focusedElement, true);\n };\n\n private _handleBlur = () => {\n this._hideCallout(true);\n };\n\n private _handleMouseOver = (mouseEvent: React.MouseEvent<SVGElement>, hoveredElement: string) => {\n this._showCallout(mouseEvent.target, hoveredElement, false);\n };\n\n private _handleMouseOut = () => {\n this._hideCallout(false);\n };\n\n private _handleCalloutDismiss = () => {\n this._hideCallout(false);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _showCallout = (target: any, legend: string, isFocusEvent: boolean) => {\n if (this._calloutAnchor === legend) {\n return;\n }\n\n this._calloutAnchor = legend;\n const hoverXValue: string =\n 'Current value is ' +\n getChartValueLabel(this.props.chartValue, this._minValue, this._maxValue, this.props.chartValueFormat, true);\n const hoverYValues: IYValue[] = this._segments.map(segment => {\n const yValue: IYValue = {\n legend: segment.legend,\n y: getSegmentLabel(segment, this._minValue, this._maxValue, this.props.variant),\n color: this.props.enableGradient ? segment.gradient?.[0] : segment.color,\n };\n return yValue;\n });\n this.setState({\n calloutTarget: target,\n /** Show the callout if highlighted arc is hovered/focused and Hide it if unhighlighted arc is hovered/focused */\n isCalloutVisible:\n ['Needle', 'Chart value'].includes(legend) || this._noLegendHighlighted() || this._legendHighlighted(legend),\n hoverXValue,\n hoverYValues,\n ...(isFocusEvent ? { focusedElement: legend } : {}),\n });\n };\n\n private _hideCallout = (isBlurEvent?: boolean) => {\n this._calloutAnchor = '';\n this.setState({\n calloutTarget: null,\n isCalloutVisible: false,\n hoverXValue: '',\n hoverYValues: [],\n ...(isBlurEvent ? { focusedElement: '' } : {}),\n });\n };\n\n private _wrapContent = (content: string, id: string, maxWidth: number) => {\n const textElement = d3Select<SVGTextElement, {}>(`#${id}`);\n textElement.text(content);\n if (!textElement.node()) {\n return false;\n }\n\n let isOverflowing = false;\n let textLength = textElement.node()!.getComputedTextLength();\n while (textLength > maxWidth && content.length > 0) {\n content = content.slice(0, -1);\n textElement.text(content + '...');\n isOverflowing = true;\n textLength = textElement.node()!.getComputedTextLength();\n }\n return isOverflowing;\n };\n\n // TO DO: Write a common functional component for Multi value callout and divide sub count method\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _multiValueCallout = (calloutProps: any) => {\n const yValueHoverSubCountsExists: boolean = this._yValueHoverSubCountsExists(calloutProps.YValueHover);\n return (\n <div className={this._classNames.calloutContentRoot}>\n <div\n className={this._classNames.calloutDateTimeContainer}\n style={yValueHoverSubCountsExists ? { marginBottom: '11px' } : {}}\n >\n <div\n className={this._classNames.calloutContentX}\n {...getAccessibleDataObject(calloutProps!.xAxisCalloutAccessibilityData, 'text', false)}\n >\n {convertToLocaleString(calloutProps!.hoverXValue, this.props.culture)}\n </div>\n </div>\n <div\n className={this._classNames.calloutInfoContainer}\n style={yValueHoverSubCountsExists ? { display: 'flex' } : {}}\n >\n {calloutProps!.YValueHover &&\n calloutProps!.YValueHover.map((yValue: IYValueHover, index: number, yValues: IYValueHover[]) => {\n const isLast: boolean = index + 1 === yValues.length;\n const { shouldDrawBorderBottom = false } = yValue;\n return (\n <div\n {...getAccessibleDataObject(yValue.callOutAccessibilityData, 'text', false)}\n key={`callout-content-${index}`}\n style={\n yValueHoverSubCountsExists\n ? {\n display: 'inline-block',\n ...(shouldDrawBorderBottom && {\n borderBottom: `1px solid ${this.props.theme!.semanticColors.menuDivider}`,\n paddingBottom: '10px',\n }),\n }\n : {\n ...(shouldDrawBorderBottom && {\n borderBottom: `1px solid ${this.props.theme!.semanticColors.menuDivider}`,\n paddingBottom: '10px',\n }),\n }\n }\n >\n {this._getCalloutContent(yValue, index, yValueHoverSubCountsExists, isLast)}\n </div>\n );\n })}\n {!!calloutProps.descriptionMessage && (\n <div className={this._classNames.descriptionMessage}>{calloutProps.descriptionMessage}</div>\n )}\n </div>\n </div>\n );\n };\n\n private _yValueHoverSubCountsExists(yValueHover?: IYValueHover[]) {\n if (yValueHover) {\n return yValueHover.some(\n (yValue: {\n legend?: string;\n y?: number;\n color?: string;\n yAxisCalloutData?: string | { [id: string]: number };\n }) => yValue.yAxisCalloutData && typeof yValue.yAxisCalloutData !== 'string',\n );\n }\n return false;\n }\n\n private _getCalloutContent(\n xValue: IYValueHover,\n index: number,\n yValueHoverSubCountsExists: boolean,\n isLast: boolean,\n ): React.ReactNode {\n const marginStyle: React.CSSProperties = isLast ? {} : { marginRight: '16px' };\n const toDrawShape = xValue.index !== undefined && xValue.index !== -1;\n const _classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n lineColor: xValue.color,\n toDrawShape,\n });\n\n const { culture } = this.props;\n const yValue = convertToLocaleString(xValue.y, culture);\n if (!xValue.yAxisCalloutData || typeof xValue.yAxisCalloutData === 'string') {\n return (\n <div style={yValueHoverSubCountsExists ? marginStyle : {}}>\n {yValueHoverSubCountsExists && (\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n )}\n <div id={`${index}_${xValue.y}`} className={_classNames.calloutBlockContainer}>\n {toDrawShape && (\n <Shape\n svgProps={{\n className: _classNames.shapeStyles,\n }}\n pathProps={{ fill: xValue.color }}\n shape={Points[xValue.index! % Object.keys(pointTypes).length] as LegendShape}\n />\n )}\n <div>\n <div className={_classNames.calloutlegendText}> {xValue.legend}</div>\n <div className={_classNames.calloutContentY}>\n {convertToLocaleString(\n xValue.yAxisCalloutData ? xValue.yAxisCalloutData : xValue.y || xValue.data,\n culture,\n )}\n </div>\n </div>\n </div>\n </div>\n );\n } else {\n const subcounts: { [id: string]: number } = xValue.yAxisCalloutData as { [id: string]: number };\n return (\n <div style={marginStyle}>\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n {Object.keys(subcounts).map((subcountName: string) => {\n return (\n <div key={subcountName} className={_classNames.calloutBlockContainer}>\n <div className={_classNames.calloutlegendText}> {convertToLocaleString(subcountName, culture)}</div>\n <div className={_classNames.calloutContentY}>\n {convertToLocaleString(subcounts[subcountName], culture)}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n }\n\n private _getChartTitle = (): string => {\n const { chartTitle } = this.props;\n return (chartTitle ? `${chartTitle}. ` : '') + `Gauge chart with ${this._segments.length} segments. `;\n };\n}\n"]}
|
|
@@ -13,6 +13,7 @@ export interface IHorizontalBarChartWithAxisState extends IBasestate {
|
|
|
13
13
|
hoverXValue?: string | number | null;
|
|
14
14
|
callOutAccessibilityData?: IAccessibilityProps;
|
|
15
15
|
tooltipElement?: any;
|
|
16
|
+
selectedLegends: string[];
|
|
16
17
|
}
|
|
17
18
|
export declare class HorizontalBarChartWithAxisBase extends React.Component<IHorizontalBarChartWithAxisProps, IHorizontalBarChartWithAxisState> implements IChart {
|
|
18
19
|
private _points;
|
|
@@ -54,10 +55,19 @@ export declare class HorizontalBarChartWithAxisBase extends React.Component<IHor
|
|
|
54
55
|
private _tooltipOfYAxislabels;
|
|
55
56
|
private _createStringBars;
|
|
56
57
|
private _closeCallout;
|
|
57
|
-
private _onLegendClick;
|
|
58
58
|
private _onLegendHover;
|
|
59
59
|
private _onLegendLeave;
|
|
60
60
|
private _getLegendData;
|
|
61
|
+
private _isLegendSelected;
|
|
62
|
+
/**
|
|
63
|
+
* This function checks if the given legend is highlighted or not.
|
|
64
|
+
* A legend can be highlighted in 2 ways:
|
|
65
|
+
* 1. selection: if the user clicks on it
|
|
66
|
+
* 2. hovering: if there is no selected legend and the user hovers over it
|
|
67
|
+
*/
|
|
68
|
+
private _isLegendHighlighted;
|
|
69
|
+
private _getHighlightedLegend;
|
|
70
|
+
private _onLegendSelectionChange;
|
|
61
71
|
private _getAxisData;
|
|
62
72
|
private _getAriaLabel;
|
|
63
73
|
private _getChartTitle;
|
|
@@ -119,8 +119,8 @@ define(["require", "exports", "tslib", "react", "d3-array", "d3-selection", "d3-
|
|
|
119
119
|
});
|
|
120
120
|
};
|
|
121
121
|
_this._onBarFocus = function (point, refArrayIndexNumber, color) {
|
|
122
|
-
if (_this.state.isLegendSelected === false ||
|
|
123
|
-
|
|
122
|
+
if ((_this.state.isLegendSelected === false || _this._isLegendHighlighted(point.legend)) &&
|
|
123
|
+
_this._calloutAnchorPoint !== point) {
|
|
124
124
|
var _a = _this._getCalloutContentForBar(point), YValueHover_1 = _a.YValueHover, hoverXValue_1 = _a.hoverXValue;
|
|
125
125
|
_this._refArray.forEach(function (obj, index) {
|
|
126
126
|
if (refArrayIndexNumber === index) {
|
|
@@ -196,9 +196,6 @@ define(["require", "exports", "tslib", "react", "d3-array", "d3-selection", "d3-
|
|
|
196
196
|
var legend = {
|
|
197
197
|
title: point.legend,
|
|
198
198
|
color: color,
|
|
199
|
-
action: function () {
|
|
200
|
-
_this._onLegendClick(point.legend);
|
|
201
|
-
},
|
|
202
199
|
hoverAction: function () {
|
|
203
200
|
_this._handleChartMouseLeave();
|
|
204
201
|
_this._onLegendHover(point.legend);
|
|
@@ -209,9 +206,21 @@ define(["require", "exports", "tslib", "react", "d3-array", "d3-selection", "d3-
|
|
|
209
206
|
};
|
|
210
207
|
actions.push(legend);
|
|
211
208
|
});
|
|
212
|
-
var legends = (React.createElement(Legends_1.Legends, tslib_1.__assign({ legends: actions, enabledWrapLines: _this.props.enabledLegendsWrapLines, overflowProps: _this.props.legendsOverflowProps, focusZonePropsInHoverCard: _this.props.focusZonePropsForLegendsInHoverCard, overflowText: _this.props.legendsOverflowText }, _this.props.legendProps)));
|
|
209
|
+
var legends = (React.createElement(Legends_1.Legends, tslib_1.__assign({ legends: actions, enabledWrapLines: _this.props.enabledLegendsWrapLines, overflowProps: _this.props.legendsOverflowProps, focusZonePropsInHoverCard: _this.props.focusZonePropsForLegendsInHoverCard, overflowText: _this.props.legendsOverflowText }, _this.props.legendProps, { onChange: _this._onLegendSelectionChange.bind(_this) })));
|
|
213
210
|
return legends;
|
|
214
211
|
};
|
|
212
|
+
_this._isLegendSelected = function () {
|
|
213
|
+
return _this.state.isLegendSelected;
|
|
214
|
+
};
|
|
215
|
+
/**
|
|
216
|
+
* This function checks if the given legend is highlighted or not.
|
|
217
|
+
* A legend can be highlighted in 2 ways:
|
|
218
|
+
* 1. selection: if the user clicks on it
|
|
219
|
+
* 2. hovering: if there is no selected legend and the user hovers over it
|
|
220
|
+
*/
|
|
221
|
+
_this._isLegendHighlighted = function (legend) {
|
|
222
|
+
return _this._getHighlightedLegend().includes(legend);
|
|
223
|
+
};
|
|
215
224
|
_this._getAxisData = function (yAxisData) {
|
|
216
225
|
if (yAxisData && yAxisData.yAxisDomainValues.length) {
|
|
217
226
|
// For HBCWA x and y Values are swapped
|
|
@@ -243,6 +252,7 @@ define(["require", "exports", "tslib", "react", "d3-array", "d3-selection", "d3-
|
|
|
243
252
|
activeXdataPoint: null,
|
|
244
253
|
YValueHover: [],
|
|
245
254
|
hoverXValue: '',
|
|
255
|
+
selectedLegends: [],
|
|
246
256
|
};
|
|
247
257
|
_this._calloutId = (0, Utilities_1.getId)('callout');
|
|
248
258
|
_this._tooltipId = (0, Utilities_1.getId)('HBCWATooltipID_');
|
|
@@ -259,10 +269,10 @@ define(["require", "exports", "tslib", "react", "d3-array", "d3-selection", "d3-
|
|
|
259
269
|
return _this;
|
|
260
270
|
}
|
|
261
271
|
HorizontalBarChartWithAxisBase.prototype.componentDidUpdate = function (prevProps) {
|
|
262
|
-
var _a, _b, _c
|
|
263
|
-
if (((_a = prevProps.legendProps) === null || _a === void 0 ? void 0 : _a.
|
|
272
|
+
var _a, _b, _c;
|
|
273
|
+
if (!(0, index_1.areArraysEqual)((_a = prevProps.legendProps) === null || _a === void 0 ? void 0 : _a.selectedLegends, (_b = this.props.legendProps) === null || _b === void 0 ? void 0 : _b.selectedLegends)) {
|
|
264
274
|
this.setState({
|
|
265
|
-
|
|
275
|
+
selectedLegends: ((_c = this.props.legendProps) === null || _c === void 0 ? void 0 : _c.selectedLegends) || [],
|
|
266
276
|
});
|
|
267
277
|
}
|
|
268
278
|
};
|
|
@@ -323,8 +333,7 @@ define(["require", "exports", "tslib", "react", "d3-array", "d3-selection", "d3-
|
|
|
323
333
|
HorizontalBarChartWithAxisBase.prototype._onBarHover = function (point, color, mouseEvent) {
|
|
324
334
|
mouseEvent.persist();
|
|
325
335
|
var _a = this._getCalloutContentForBar(point), YValueHover = _a.YValueHover, hoverXValue = _a.hoverXValue;
|
|
326
|
-
if ((this.state.isLegendSelected === false ||
|
|
327
|
-
(this.state.isLegendSelected && this.state.selectedLegendTitle === point.legend)) &&
|
|
336
|
+
if ((this.state.isLegendSelected === false || this._isLegendHighlighted(point.legend)) &&
|
|
328
337
|
this._calloutAnchorPoint !== point) {
|
|
329
338
|
this._calloutAnchorPoint = point;
|
|
330
339
|
this.setState({
|
|
@@ -358,7 +367,7 @@ define(["require", "exports", "tslib", "react", "d3-array", "d3-selection", "d3-
|
|
|
358
367
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
359
368
|
var shouldHighlight = true;
|
|
360
369
|
if (_this.state.isLegendHovered || _this.state.isLegendSelected) {
|
|
361
|
-
shouldHighlight = _this.
|
|
370
|
+
shouldHighlight = _this._isLegendHighlighted(point.legend);
|
|
362
371
|
}
|
|
363
372
|
_this._classNames = getClassNames(_this.props.styles, {
|
|
364
373
|
theme: _this.props.theme,
|
|
@@ -451,8 +460,8 @@ define(["require", "exports", "tslib", "react", "d3-array", "d3-selection", "d3-
|
|
|
451
460
|
var bars = this._points.map(function (point, index) {
|
|
452
461
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
453
462
|
var shouldHighlight = true;
|
|
454
|
-
if (_this.
|
|
455
|
-
shouldHighlight = _this.
|
|
463
|
+
if (_this._getHighlightedLegend().length > 0) {
|
|
464
|
+
shouldHighlight = _this._isLegendHighlighted(point.legend);
|
|
456
465
|
}
|
|
457
466
|
_this._classNames = getClassNames(_this.props.styles, {
|
|
458
467
|
theme: _this.props.theme,
|
|
@@ -527,29 +536,8 @@ define(["require", "exports", "tslib", "react", "d3-array", "d3-selection", "d3-
|
|
|
527
536
|
}
|
|
528
537
|
return bars;
|
|
529
538
|
};
|
|
530
|
-
HorizontalBarChartWithAxisBase.prototype._onLegendClick = function (customMessage) {
|
|
531
|
-
if (this.state.isLegendSelected) {
|
|
532
|
-
if (this.state.selectedLegendTitle === customMessage) {
|
|
533
|
-
this.setState({
|
|
534
|
-
isLegendSelected: false,
|
|
535
|
-
selectedLegendTitle: customMessage,
|
|
536
|
-
});
|
|
537
|
-
}
|
|
538
|
-
else {
|
|
539
|
-
this.setState({
|
|
540
|
-
selectedLegendTitle: customMessage,
|
|
541
|
-
});
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
else {
|
|
545
|
-
this.setState({
|
|
546
|
-
isLegendSelected: true,
|
|
547
|
-
selectedLegendTitle: customMessage,
|
|
548
|
-
});
|
|
549
|
-
}
|
|
550
|
-
};
|
|
551
539
|
HorizontalBarChartWithAxisBase.prototype._onLegendHover = function (customMessage) {
|
|
552
|
-
if (this.
|
|
540
|
+
if (!this._isLegendSelected()) {
|
|
553
541
|
this.setState({
|
|
554
542
|
isLegendHovered: true,
|
|
555
543
|
selectedLegendTitle: customMessage,
|
|
@@ -557,13 +545,41 @@ define(["require", "exports", "tslib", "react", "d3-array", "d3-selection", "d3-
|
|
|
557
545
|
}
|
|
558
546
|
};
|
|
559
547
|
HorizontalBarChartWithAxisBase.prototype._onLegendLeave = function (isLegendFocused) {
|
|
560
|
-
if (!!isLegendFocused || this.
|
|
548
|
+
if (!!isLegendFocused || !this._isLegendSelected()) {
|
|
561
549
|
this.setState({
|
|
562
550
|
isLegendHovered: false,
|
|
563
551
|
selectedLegendTitle: '',
|
|
564
|
-
isLegendSelected: isLegendFocused ? false : this.
|
|
552
|
+
isLegendSelected: isLegendFocused ? false : this._isLegendSelected(),
|
|
553
|
+
});
|
|
554
|
+
}
|
|
555
|
+
};
|
|
556
|
+
HorizontalBarChartWithAxisBase.prototype._getHighlightedLegend = function () {
|
|
557
|
+
return this.state.selectedLegends.length > 0
|
|
558
|
+
? this.state.selectedLegends
|
|
559
|
+
: this.state.selectedLegendTitle
|
|
560
|
+
? [this.state.selectedLegendTitle]
|
|
561
|
+
: [];
|
|
562
|
+
};
|
|
563
|
+
HorizontalBarChartWithAxisBase.prototype._onLegendSelectionChange = function (selectedLegends, event, currentLegend) {
|
|
564
|
+
var _a, _b;
|
|
565
|
+
if ((_a = this.props.legendProps) === null || _a === void 0 ? void 0 : _a.canSelectMultipleLegends) {
|
|
566
|
+
this.setState({
|
|
567
|
+
selectedLegends: selectedLegends,
|
|
568
|
+
selectedLegendTitle: currentLegend === null || currentLegend === void 0 ? void 0 : currentLegend.title,
|
|
565
569
|
});
|
|
566
570
|
}
|
|
571
|
+
else {
|
|
572
|
+
this.setState({
|
|
573
|
+
selectedLegends: selectedLegends.slice(-1),
|
|
574
|
+
selectedLegendTitle: currentLegend === null || currentLegend === void 0 ? void 0 : currentLegend.title,
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
this.setState({
|
|
578
|
+
isLegendSelected: selectedLegends.length > 0,
|
|
579
|
+
});
|
|
580
|
+
if ((_b = this.props.legendProps) === null || _b === void 0 ? void 0 : _b.onChange) {
|
|
581
|
+
this.props.legendProps.onChange(selectedLegends, event, currentLegend);
|
|
582
|
+
}
|
|
567
583
|
};
|
|
568
584
|
return HorizontalBarChartWithAxisBase;
|
|
569
585
|
}(React.Component));
|