@fluentui/react-charting 5.16.56 → 5.16.57
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 +24 -1
- package/CHANGELOG.md +11 -2
- package/dist/react-charting.js +1 -1
- package/dist/react-charting.min.js +1 -1
- package/docs/TestPlans/StackedBarChart/ComponentTests.md +64 -0
- package/lib/components/AreaChart/AreaChart.base.d.ts +2 -1
- package/lib/components/AreaChart/AreaChart.base.js +13 -10
- package/lib/components/AreaChart/AreaChart.base.js.map +1 -1
- package/lib/components/DonutChart/DonutChart.base.d.ts +2 -1
- package/lib/components/DonutChart/DonutChart.base.js +8 -9
- package/lib/components/DonutChart/DonutChart.base.js.map +1 -1
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.d.ts +2 -2
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.js +8 -11
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.js.map +1 -1
- package/lib/components/HeatMapChart/HeatMapChart.base.d.ts +2 -5
- package/lib/components/HeatMapChart/HeatMapChart.base.js +6 -9
- package/lib/components/HeatMapChart/HeatMapChart.base.js.map +1 -1
- package/lib/components/HorizontalBarChart/HorizontalBarChart.base.d.ts +2 -2
- package/lib/components/HorizontalBarChart/HorizontalBarChart.base.js +6 -9
- package/lib/components/HorizontalBarChart/HorizontalBarChart.base.js.map +1 -1
- package/lib/components/LineChart/LineChart.base.d.ts +2 -2
- package/lib/components/LineChart/LineChart.base.js +9 -12
- package/lib/components/LineChart/LineChart.base.js.map +1 -1
- package/lib/components/PieChart/PieChart.base.d.ts +3 -5
- package/lib/components/PieChart/PieChart.base.js +6 -13
- package/lib/components/PieChart/PieChart.base.js.map +1 -1
- package/lib/components/SankeyChart/SankeyChart.base.d.ts +2 -1
- package/lib/components/SankeyChart/SankeyChart.base.js +11 -8
- package/lib/components/SankeyChart/SankeyChart.base.js.map +1 -1
- package/lib/components/Sparkline/Sparkline.base.d.ts +2 -1
- package/lib/components/Sparkline/Sparkline.base.js +10 -11
- package/lib/components/Sparkline/Sparkline.base.js.map +1 -1
- package/lib/components/StackedBarChart/MultiStackedBarChart.base.d.ts +2 -2
- package/lib/components/StackedBarChart/MultiStackedBarChart.base.js +8 -11
- package/lib/components/StackedBarChart/MultiStackedBarChart.base.js.map +1 -1
- package/lib/components/StackedBarChart/StackedBarChart.base.d.ts +2 -2
- package/lib/components/StackedBarChart/StackedBarChart.base.js +8 -13
- package/lib/components/StackedBarChart/StackedBarChart.base.js.map +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.base.d.ts +1 -0
- package/lib/components/VerticalBarChart/VerticalBarChart.base.js +2 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.base.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.base.d.ts +2 -1
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.base.js +9 -11
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.base.js.map +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/lib-amd/components/AreaChart/AreaChart.base.d.ts +2 -1
- package/lib-amd/components/AreaChart/AreaChart.base.js +13 -10
- package/lib-amd/components/AreaChart/AreaChart.base.js.map +1 -1
- package/lib-amd/components/DonutChart/DonutChart.base.d.ts +2 -1
- package/lib-amd/components/DonutChart/DonutChart.base.js +8 -9
- package/lib-amd/components/DonutChart/DonutChart.base.js.map +1 -1
- package/lib-amd/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.d.ts +2 -2
- package/lib-amd/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.js +8 -11
- package/lib-amd/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.js.map +1 -1
- package/lib-amd/components/HeatMapChart/HeatMapChart.base.d.ts +2 -5
- package/lib-amd/components/HeatMapChart/HeatMapChart.base.js +6 -9
- package/lib-amd/components/HeatMapChart/HeatMapChart.base.js.map +1 -1
- package/lib-amd/components/HorizontalBarChart/HorizontalBarChart.base.d.ts +2 -2
- package/lib-amd/components/HorizontalBarChart/HorizontalBarChart.base.js +6 -9
- package/lib-amd/components/HorizontalBarChart/HorizontalBarChart.base.js.map +1 -1
- package/lib-amd/components/LineChart/LineChart.base.d.ts +2 -2
- package/lib-amd/components/LineChart/LineChart.base.js +9 -12
- package/lib-amd/components/LineChart/LineChart.base.js.map +1 -1
- package/lib-amd/components/PieChart/PieChart.base.d.ts +3 -5
- package/lib-amd/components/PieChart/PieChart.base.js +6 -13
- package/lib-amd/components/PieChart/PieChart.base.js.map +1 -1
- package/lib-amd/components/SankeyChart/SankeyChart.base.d.ts +2 -1
- package/lib-amd/components/SankeyChart/SankeyChart.base.js +11 -8
- package/lib-amd/components/SankeyChart/SankeyChart.base.js.map +1 -1
- package/lib-amd/components/Sparkline/Sparkline.base.d.ts +2 -1
- package/lib-amd/components/Sparkline/Sparkline.base.js +10 -11
- package/lib-amd/components/Sparkline/Sparkline.base.js.map +1 -1
- package/lib-amd/components/StackedBarChart/MultiStackedBarChart.base.d.ts +2 -2
- package/lib-amd/components/StackedBarChart/MultiStackedBarChart.base.js +8 -11
- package/lib-amd/components/StackedBarChart/MultiStackedBarChart.base.js.map +1 -1
- package/lib-amd/components/StackedBarChart/StackedBarChart.base.d.ts +2 -2
- package/lib-amd/components/StackedBarChart/StackedBarChart.base.js +8 -13
- package/lib-amd/components/StackedBarChart/StackedBarChart.base.js.map +1 -1
- package/lib-amd/components/VerticalBarChart/VerticalBarChart.base.d.ts +1 -0
- package/lib-amd/components/VerticalBarChart/VerticalBarChart.base.js +2 -1
- package/lib-amd/components/VerticalBarChart/VerticalBarChart.base.js.map +1 -1
- package/lib-amd/components/VerticalStackedBarChart/VerticalStackedBarChart.base.d.ts +2 -1
- package/lib-amd/components/VerticalStackedBarChart/VerticalStackedBarChart.base.js +9 -11
- package/lib-amd/components/VerticalStackedBarChart/VerticalStackedBarChart.base.js.map +1 -1
- package/lib-amd/version.js +1 -1
- package/lib-amd/version.js.map +1 -1
- package/lib-commonjs/components/AreaChart/AreaChart.base.d.ts +2 -1
- package/lib-commonjs/components/AreaChart/AreaChart.base.js +13 -10
- package/lib-commonjs/components/AreaChart/AreaChart.base.js.map +1 -1
- package/lib-commonjs/components/DonutChart/DonutChart.base.d.ts +2 -1
- package/lib-commonjs/components/DonutChart/DonutChart.base.js +8 -9
- package/lib-commonjs/components/DonutChart/DonutChart.base.js.map +1 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.d.ts +2 -2
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.js +8 -11
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.js.map +1 -1
- package/lib-commonjs/components/HeatMapChart/HeatMapChart.base.d.ts +2 -5
- package/lib-commonjs/components/HeatMapChart/HeatMapChart.base.js +6 -9
- package/lib-commonjs/components/HeatMapChart/HeatMapChart.base.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.base.d.ts +2 -2
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.base.js +6 -9
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.base.js.map +1 -1
- package/lib-commonjs/components/LineChart/LineChart.base.d.ts +2 -2
- package/lib-commonjs/components/LineChart/LineChart.base.js +9 -12
- package/lib-commonjs/components/LineChart/LineChart.base.js.map +1 -1
- package/lib-commonjs/components/PieChart/PieChart.base.d.ts +3 -5
- package/lib-commonjs/components/PieChart/PieChart.base.js +6 -13
- package/lib-commonjs/components/PieChart/PieChart.base.js.map +1 -1
- package/lib-commonjs/components/SankeyChart/SankeyChart.base.d.ts +2 -1
- package/lib-commonjs/components/SankeyChart/SankeyChart.base.js +11 -8
- package/lib-commonjs/components/SankeyChart/SankeyChart.base.js.map +1 -1
- package/lib-commonjs/components/Sparkline/Sparkline.base.d.ts +2 -1
- package/lib-commonjs/components/Sparkline/Sparkline.base.js +10 -11
- package/lib-commonjs/components/Sparkline/Sparkline.base.js.map +1 -1
- package/lib-commonjs/components/StackedBarChart/MultiStackedBarChart.base.d.ts +2 -2
- package/lib-commonjs/components/StackedBarChart/MultiStackedBarChart.base.js +8 -11
- package/lib-commonjs/components/StackedBarChart/MultiStackedBarChart.base.js.map +1 -1
- package/lib-commonjs/components/StackedBarChart/StackedBarChart.base.d.ts +2 -2
- package/lib-commonjs/components/StackedBarChart/StackedBarChart.base.js +8 -13
- package/lib-commonjs/components/StackedBarChart/StackedBarChart.base.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.base.d.ts +1 -0
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.base.js +2 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.base.js.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.base.d.ts +2 -1
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.base.js +9 -11
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.base.js.map +1 -1
- package/lib-commonjs/version.js +1 -1
- package/lib-commonjs/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -74,16 +74,13 @@ define(["require", "exports", "tslib", "react", "@fluentui/react/lib/Utilities",
|
|
|
74
74
|
selectedNodes: new Set(),
|
|
75
75
|
shouldOverflow: false,
|
|
76
76
|
isCalloutVisible: false,
|
|
77
|
-
emptyChart: !(_this.props.data &&
|
|
78
|
-
_this.props.data.SankeyChartData &&
|
|
79
|
-
_this.props.data.SankeyChartData.nodes.length > 0 &&
|
|
80
|
-
_this.props.data.SankeyChartData.links.length > 0),
|
|
81
77
|
};
|
|
82
78
|
_this._calloutId = (0, Utilities_1.getId)('callout');
|
|
83
79
|
_this._linkId = (0, Utilities_1.getId)('link');
|
|
84
80
|
_this._margins = { top: 36, right: 48, bottom: 32, left: 48 };
|
|
85
81
|
_this._preRenderLayout();
|
|
86
82
|
_this._normalizeData = (0, Utilities_1.memoizeFunction)(function (data) { return _this._normalizeSankeyData(data); });
|
|
83
|
+
_this._emptyChartId = (0, Utilities_1.getId)('_SankeyChart_empty');
|
|
87
84
|
return _this;
|
|
88
85
|
}
|
|
89
86
|
SankeyChartBase.prototype.componentDidMount = function () {
|
|
@@ -99,7 +96,7 @@ define(["require", "exports", "tslib", "react", "@fluentui/react/lib/Utilities",
|
|
|
99
96
|
};
|
|
100
97
|
SankeyChartBase.prototype.render = function () {
|
|
101
98
|
var _this = this;
|
|
102
|
-
if (!this.
|
|
99
|
+
if (!this._isChartEmpty()) {
|
|
103
100
|
var _a = this.props, theme = _a.theme, className = _a.className, styles = _a.styles, pathColor = _a.pathColor;
|
|
104
101
|
this._classNames = getClassNames(styles, {
|
|
105
102
|
theme: theme,
|
|
@@ -142,7 +139,7 @@ define(["require", "exports", "tslib", "react", "@fluentui/react/lib/Utilities",
|
|
|
142
139
|
calloutProps.isCalloutVisible && (React.createElement(Callout_1.Callout, tslib_1.__assign({}, calloutProps),
|
|
143
140
|
React.createElement(index_1.ChartHoverCard, { XValue: calloutProps.XValue, YValue: calloutProps.YValue, color: calloutProps.color, descriptionMessage: calloutProps.descriptionMessage ? calloutProps.descriptionMessage : '' })))))));
|
|
144
141
|
}
|
|
145
|
-
return (React.createElement("div", { id:
|
|
142
|
+
return (React.createElement("div", { id: this._emptyChartId, role: 'alert', style: { opacity: '0' }, "aria-label": 'Graph has no data to display' }));
|
|
146
143
|
};
|
|
147
144
|
SankeyChartBase.prototype._preRenderLayout = function () {
|
|
148
145
|
var width = this.state.containerWidth - this._margins.right;
|
|
@@ -599,8 +596,8 @@ define(["require", "exports", "tslib", "react", "@fluentui/react/lib/Utilities",
|
|
|
599
596
|
var _a = this.state, containerWidth = _a.containerWidth, containerHeight = _a.containerHeight;
|
|
600
597
|
this._reqID = requestAnimationFrame(function () {
|
|
601
598
|
var container = _this.props.parentRef ? _this.props.parentRef : _this.chartContainer;
|
|
602
|
-
var currentContainerWidth = container.getBoundingClientRect().width;
|
|
603
|
-
var currentContainerHeight = container.getBoundingClientRect().height;
|
|
599
|
+
var currentContainerWidth = container && container.getBoundingClientRect().width;
|
|
600
|
+
var currentContainerHeight = container && container.getBoundingClientRect().height;
|
|
604
601
|
var shouldResize = containerWidth !== currentContainerWidth || containerHeight !== currentContainerHeight;
|
|
605
602
|
if (shouldResize) {
|
|
606
603
|
_this.setState({
|
|
@@ -669,6 +666,12 @@ define(["require", "exports", "tslib", "react", "@fluentui/react/lib/Utilities",
|
|
|
669
666
|
SankeyChartBase.prototype._hideTooltip = function (div) {
|
|
670
667
|
div.style('opacity', 0);
|
|
671
668
|
};
|
|
669
|
+
SankeyChartBase.prototype._isChartEmpty = function () {
|
|
670
|
+
return !(this.props.data &&
|
|
671
|
+
this.props.data.SankeyChartData &&
|
|
672
|
+
this.props.data.SankeyChartData.nodes.length > 0 &&
|
|
673
|
+
this.props.data.SankeyChartData.links.length > 0);
|
|
674
|
+
};
|
|
672
675
|
return SankeyChartBase;
|
|
673
676
|
}(React.Component));
|
|
674
677
|
exports.SankeyChartBase = SankeyChartBase;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SankeyChart.base.js","sourceRoot":"../src/","sources":["components/SankeyChart/SankeyChart.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { classNamesFunction, getId, getRTL, memoizeFunction } from '@fluentui/react/lib/Utilities';\nimport { ISankeyChartData, ISankeyChartProps, ISankeyChartStyleProps, ISankeyChartStyles } from './SankeyChart.types';\nimport { IProcessedStyleSet } from '@fluentui/react/lib/Styling';\nimport * as d3Sankey from 'd3-sankey';\nimport { area as d3Area, curveBumpX as d3CurveBasis } from 'd3-shape';\nimport { sum as d3Sum } from 'd3-array';\nimport { ChartHoverCard, IBasestate, IChartHoverCardProps, SLink, SNode } from '../../index';\nimport { Callout, DirectionalHint } from '@fluentui/react/lib/Callout';\nimport { select, selectAll } from 'd3-selection';\nimport { FocusZone, FocusZoneDirection, FocusZoneTabbableElements } from '@fluentui/react-focus';\nimport { IMargins } from '../../utilities/utilities';\n\nconst getClassNames = classNamesFunction<ISankeyChartStyleProps, ISankeyChartStyles>();\nconst PADDING_PERCENTAGE = 0.3;\n\ntype NodesInColumns = { [key: number]: SNode[] };\ntype NodeColors = { fillColor: string; borderColor: string };\n\nexport interface ISankeyChartState extends IBasestate, IChartHoverCardProps {\n containerWidth: number;\n containerHeight: number;\n selectedState: boolean;\n selectedLinks: Set<Number>;\n selectedNodes: Set<Number>;\n selectedNode?: SNode;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refSelected?: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n selectedLink?: SLink;\n shouldOverflow: boolean;\n emptyChart?: boolean;\n}\n\nconst NON_SELECTED_NODE_AND_STREAM_COLOR: string = '#757575';\nconst DEFAULT_NODE_COLORS: NodeColors[] = [\n { fillColor: '#00758F', borderColor: '#002E39' },\n { fillColor: '#77004D', borderColor: '#43002C' },\n { fillColor: '#4F6BED', borderColor: '#3B52B4' },\n { fillColor: '#937600', borderColor: '#6D5700' },\n { fillColor: '#286EA8', borderColor: '#00457E' },\n { fillColor: '#A43FB1', borderColor: '#7C158A' },\n { fillColor: '#CC3595', borderColor: '#7F215D' },\n { fillColor: '#0E7878', borderColor: '#004E4E' },\n { fillColor: '#8764B8', borderColor: '#4B3867' },\n { fillColor: '#9C663F', borderColor: '#6D4123' },\n];\n\nconst MIN_HEIGHT_FOR_DOUBLINE_TYPE = 36;\nconst MIN_HEIGHT_FOR_TYPE = 24;\nconst REST_STREAM_OPACITY: number = 1;\nconst NON_SELECTED_OPACITY: number = 1;\nconst SELECTED_STREAM_OPACITY: number = 0.3;\nconst NON_SELECTED_STREAM_BORDER_OPACITY: number = 0.5;\nconst DEFAULT_TEXT_COLOR: string = '#323130';\nconst NON_SELECTED_TEXT_COLOR: string = '#FFFFFF';\n\nexport class SankeyChartBase extends React.Component<ISankeyChartProps, ISankeyChartState> {\n private _classNames: IProcessedStyleSet<ISankeyChartStyles>;\n private chartContainer: HTMLDivElement;\n private _reqID: number;\n private _calloutId: string;\n private _linkId: string;\n private _nodesInColumn: NodesInColumns;\n private _sankey: d3Sankey.SankeyLayout<d3Sankey.SankeyGraph<{}, {}>, {}, {}>;\n private _margins: IMargins;\n private _isRtl: boolean = getRTL();\n private _normalizeData: (data: ISankeyChartData) => void;\n\n constructor(props: ISankeyChartProps) {\n super(props);\n this.state = {\n containerHeight: 468,\n containerWidth: 912,\n selectedState: false,\n selectedLinks: new Set<number>(),\n selectedNodes: new Set<number>(),\n shouldOverflow: false,\n isCalloutVisible: false,\n emptyChart: !(\n this.props.data &&\n this.props.data.SankeyChartData &&\n this.props.data.SankeyChartData.nodes.length > 0 &&\n this.props.data.SankeyChartData.links.length > 0\n ),\n };\n this._calloutId = getId('callout');\n this._linkId = getId('link');\n this._margins = { top: 36, right: 48, bottom: 32, left: 48 };\n this._preRenderLayout();\n this._normalizeData = memoizeFunction((data: ISankeyChartData) => this._normalizeSankeyData(data));\n }\n public componentDidMount(): void {\n this._fitParentContainer();\n }\n\n public componentDidUpdate(prevProps: ISankeyChartProps): void {\n if (prevProps.shouldResize !== this.props.shouldResize) {\n this._fitParentContainer();\n }\n }\n public componentWillUnmount(): void {\n cancelAnimationFrame(this._reqID);\n }\n public render(): React.ReactNode {\n if (!this.state.emptyChart) {\n const { theme, className, styles, pathColor } = this.props;\n this._classNames = getClassNames(styles!, {\n theme: theme!,\n width: this.state.containerWidth,\n height: this.state.containerHeight,\n pathColor,\n className,\n });\n // We are using the this._margins.left and this._margins.top in sankey extent while constructing the layout\n const { height, width } = this._preRenderLayout();\n this._normalizeData(this.props.data.SankeyChartData!);\n let nodePadding = 8;\n nodePadding = this._adjustPadding(this._sankey, height - 6, this._nodesInColumn);\n\n this._sankey.nodePadding(nodePadding);\n this._sankey(this.props.data.SankeyChartData!);\n this._populateNodeActualValue(this.props.data.SankeyChartData!);\n this._assignNodeColors();\n const nodeData = this._createNodes(width);\n const linkData = this._createLinks();\n const calloutProps = {\n isCalloutVisible: this.state.isCalloutVisible,\n directionalHint: DirectionalHint.topAutoEdge,\n id: `toolTip${this._calloutId}`,\n target: this.state.refSelected,\n color: this.state.color,\n XValue: this.state.xCalloutValue,\n YValue: this.state.yCalloutValue ? this.state.yCalloutValue : this.state.dataForHoverCard,\n descriptionMessage: this.state.descriptionMessage,\n isBeakVisible: false,\n gapSpace: 15,\n onDismiss: this._onCloseCallout,\n className: this._classNames.calloutContentRoot,\n preventDismissOnLostFocus: true,\n };\n return (\n <div\n className={this._classNames.root}\n role={'presentation'}\n ref={(rootElem: HTMLDivElement) => (this.chartContainer = rootElem)}\n onMouseLeave={this._onCloseCallout}\n >\n <FocusZone\n direction={FocusZoneDirection.bidirectional}\n isCircularNavigation={true}\n handleTabKey={FocusZoneTabbableElements.all}\n >\n <svg width={width} height={height} id={getId('sankeyChart')}>\n <g className={this._classNames.links} strokeOpacity={1}>\n {linkData}\n </g>\n <g className={this._classNames.nodes}>{nodeData}</g>\n {calloutProps.isCalloutVisible && (\n <Callout {...calloutProps}>\n <ChartHoverCard\n XValue={calloutProps.XValue}\n YValue={calloutProps.YValue}\n color={calloutProps.color}\n descriptionMessage={calloutProps.descriptionMessage ? calloutProps.descriptionMessage : ''}\n />\n </Callout>\n )}\n </svg>\n </FocusZone>\n </div>\n );\n }\n return (\n <div\n id={getId('_SankeyChart_')}\n role={'alert'}\n style={{ opacity: '0' }}\n aria-label={'Graph has no data to display'}\n />\n );\n }\n\n private _preRenderLayout(): { height: number; width: number } {\n const width = this.state.containerWidth - this._margins.right!;\n const height =\n this.state.containerHeight - this._margins.bottom! > 0 ? this.state.containerHeight - this._margins.bottom! : 0;\n\n this._sankey = d3Sankey\n .sankey()\n .nodeWidth(124)\n .extent([\n [this._margins.left!, this._margins.top!],\n [width - 1, height - 6],\n ])\n .nodeAlign(this._isRtl ? d3Sankey.sankeyRight : d3Sankey.sankeyJustify);\n\n return { height, width };\n }\n\n /**\n * This is used for calculating the node non normalized value based on link non normalized value.\n *\n */\n private _populateNodeActualValue(data: ISankeyChartData) {\n data.links.forEach((link: SLink) => {\n if (!link.unnormalizedValue) {\n link.unnormalizedValue = link.value;\n }\n });\n data.nodes.forEach((node: SNode) => {\n node.actualValue = Math.max(\n d3Sum(node.sourceLinks!, (link: SLink) => link.unnormalizedValue),\n d3Sum(node.targetLinks!, (link: SLink) => link.unnormalizedValue),\n );\n });\n }\n\n private _normalizeSankeyData(data: ISankeyChartData): void {\n this._nodesInColumn = this._populateNodeInColumns(data, this._sankey);\n this._adjustOnePercentHeightNodes(this._nodesInColumn);\n }\n /**\n *\n * This is used to group nodes by column index.\n */\n private _populateNodeInColumns(\n graph: ISankeyChartData,\n sankey: d3Sankey.SankeyLayout<d3Sankey.SankeyGraph<{}, {}>, {}, {}>,\n ) {\n sankey(graph);\n const nodesInColumn: NodesInColumns = {};\n graph.nodes.forEach((node: SNode) => {\n const columnId = node.layer!;\n if (nodesInColumn[columnId]) {\n nodesInColumn[columnId].push(node);\n } else {\n nodesInColumn[columnId] = [node];\n }\n });\n return nodesInColumn;\n }\n\n /**\n * This is used to normalize the nodes value whose value is less than 1% of the total column value.\n *\n */\n private _adjustOnePercentHeightNodes(nodesInColumn: NodesInColumns) {\n const totalColumnValue = Object.values(nodesInColumn).map((column: SNode[]) => {\n return d3Sum(column, (node: SNode) => node.value);\n });\n totalColumnValue.forEach((columnValue: number, index: number) => {\n let totalPercentage = 0;\n nodesInColumn[index].forEach((node: SNode) => {\n const nodePercentage = (node.value! / columnValue) * 100;\n node.actualValue = node.value;\n //if the value is less than 1% then we are making it as 1% of total .\n if (nodePercentage < 1) {\n node.value = 0.01 * columnValue;\n totalPercentage = totalPercentage + 1;\n } else {\n totalPercentage = totalPercentage + nodePercentage;\n }\n });\n //since we have adjusted the value to be 1% but we need to keep the sum of the percentage value under 100.\n const scalingRatio = totalPercentage !== 0 ? totalPercentage / 100 : 1;\n if (scalingRatio > 1) {\n nodesInColumn[index].forEach((node: SNode) => {\n node.value = node.value! / scalingRatio;\n this._changeColumnValue(node, node.actualValue!, node.value);\n });\n }\n });\n }\n\n /**\n *\n * This is used for normalizing each links value for reflecting the normalized node value.\n */\n private _changeColumnValue(node: SNode, originalValue: number, normalizedValue: number) {\n node.sourceLinks!.forEach((link: SLink) => {\n link.unnormalizedValue = link.value;\n const linkRatio = link.value / originalValue;\n link.value = normalizedValue * linkRatio;\n });\n node.targetLinks!.forEach((link: SLink) => {\n link.unnormalizedValue = link.value;\n const linkRatio = link.value / originalValue;\n link.value = normalizedValue * linkRatio;\n });\n }\n\n /**\n *\n * This is used to introduce dynamic padding for cases where the number of nodes in a column is huge\n * so that we maintain a node to space ratio for such columns as if we fail to do so the\n * chart is devoid of nodes and only shows links.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _adjustPadding(sankey: any, height: number, nodesInColumn: NodesInColumns) {\n let padding = this._sankey.nodePadding();\n Object.values(nodesInColumn).forEach((column: SNode[]) => {\n const minPadding = PADDING_PERCENTAGE * height;\n const toatlPaddingInColumn = height - d3Sum(column, (node: SNode) => node.y1! - node.y0!);\n if (minPadding < toatlPaddingInColumn) {\n //Here we are calculating the min of default and calculated padding, we will not increase the padding\n //in any scenario.\n padding = Math.min(padding, minPadding / (column.length - 1));\n }\n });\n return padding;\n }\n\n private _createLinks(): React.ReactNode[] | undefined {\n const links: React.ReactNode[] = [];\n\n if (this.props.data.SankeyChartData) {\n this.props.data.SankeyChartData.links.forEach((singleLink: SLink, index: number) => {\n const onMouseOut = () => {\n this._onStreamLeave(singleLink);\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data = (d: any) => {\n return [\n { x: d.source.x1, y0: d.y0 + d.width / 2, y1: d.y0 - d.width / 2 },\n { x: d.target.x0, y0: d.y1 + d.width / 2, y1: d.y1 - d.width / 2 },\n ];\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const dataPoints: Array<any> = data(singleLink);\n const linkArea = d3Area()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .x((p: any) => p.x)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .y0((p: any) => p.y0)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .y1((p: any) => p.y1)\n .curve(d3CurveBasis);\n const gradientUrl = `url(#gradient-${this._linkId}-${index})`;\n const link = (\n <g key={`${this._linkId}-${index}`}>\n <defs>\n <linearGradient id={`gradient-${this._linkId}-${index}`} x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop offset=\"0\" stopColor={(singleLink.source as SNode).color} />\n <stop offset=\"100%\" stopColor={(singleLink.target as SNode).color} />\n </linearGradient>\n </defs>\n <path\n d={linkArea(dataPoints)!}\n id={getId('link')}\n fill={this._fillStreamColors(singleLink, gradientUrl)}\n stroke={this._fillStreamBorder(singleLink, gradientUrl)}\n strokeWidth=\"2\"\n strokeOpacity={this._getOpacityStreamBorder(singleLink)}\n onMouseOver={this._onStreamHover.bind(this, singleLink)}\n onMouseOut={onMouseOut}\n onFocus={this._onFocusLink.bind(this, singleLink)}\n onBlur={this._onBlur}\n fillOpacity={this._getOpacityStream(singleLink)}\n data-is-focusable={true}\n aria-label={\n 'link from' +\n (singleLink.source as SNode).name +\n 'to' +\n (singleLink.target as SNode).name +\n 'with weight' +\n singleLink!.unnormalizedValue\n }\n role=\"img\"\n />\n </g>\n );\n links.push(link);\n });\n }\n return links;\n }\n\n private _createNodes(width: number): React.ReactNode[] | undefined {\n const nodes: React.ReactNode[] = [];\n\n if (this.props.data.SankeyChartData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.props.data.SankeyChartData.nodes.forEach((singleNode: SNode, index: number) => {\n const onMouseOut = () => {\n this._onLeave(singleNode);\n };\n const height = singleNode.y1! - singleNode.y0! > 0 ? singleNode.y1! - singleNode.y0! : 0;\n let padding = 8;\n let textLengthForNodeWeight = 0;\n\n // If the nodeWeight is in the same line as node description an extra padding\n // of 6 px is required between node description and node weight.\n if (height < MIN_HEIGHT_FOR_DOUBLINE_TYPE) {\n padding = padding + 6;\n const tspan = select('.nodeName').append('text').attr('class', 'tempText').append('tspan').text(null);\n tspan.text(singleNode.actualValue!);\n if (tspan.node() !== null) {\n textLengthForNodeWeight = tspan.node()!.getComputedTextLength();\n padding = padding + textLengthForNodeWeight;\n }\n tspan.text(null);\n selectAll('.tempText').remove();\n }\n // Since the total width of the node is 124 and we are giving margin of 8px from the left .\n //So the actual value on which it will be truncated is 124-8=116.\n const truncatedname: string = this._truncateText(singleNode.name, 116, padding);\n const isTruncated: boolean = truncatedname.slice(-3) === '...';\n const id = getId('tooltip');\n const div = select('body')\n .append('div')\n .attr('id', id)\n .attr('class', this._classNames.toolTip!)\n .style('opacity', 0);\n const nodeId = getId('nodeBar');\n const node = (\n <g key={index} id={getId('nodeGElement')}>\n <rect\n x={singleNode.x0}\n y={singleNode.y0}\n height={height}\n width={singleNode.x1! - singleNode.x0!}\n fill={this._fillNodeColors(singleNode)}\n id={nodeId}\n onMouseOver={this._onHover.bind(this, singleNode)}\n onMouseOut={onMouseOut}\n onFocus={this._onCloseCallout.bind(this)}\n stroke={this._fillNodeBorder(singleNode)}\n strokeWidth=\"2\"\n opacity=\"1\"\n data-is-focusable={true}\n aria-label={'node' + `${singleNode.name}` + 'with weight' + `${singleNode.actualValue}`}\n role=\"img\"\n />\n {singleNode.y1! - singleNode.y0! > MIN_HEIGHT_FOR_TYPE && (\n <g className={this._classNames.nodeTextContainer}>\n <g className=\"nodeName\">\n <text\n id={`${nodeId}-name`}\n x={singleNode.x0}\n y={singleNode.y0}\n dy={'1.2em'}\n dx={'0.4em'}\n textAnchor={this._isRtl ? 'end' : 'start'}\n fontWeight=\"regular\"\n aria-hidden=\"true\"\n fill={\n !(\n !this.state.selectedState ||\n (this.state.selectedState &&\n this.state.selectedNodes.has(singleNode.index!) &&\n this.state.selectedNode) ||\n (this.state.selectedState && !this.state.selectedNode)\n )\n ? DEFAULT_TEXT_COLOR\n : NON_SELECTED_TEXT_COLOR\n }\n fontSize={10}\n onMouseOver={this._showTooltip.bind(this, singleNode.name, isTruncated, div)}\n onMouseOut={this._hideTooltip.bind(this, div)}\n >\n {truncatedname}\n </text>\n </g>\n\n <text\n x={\n height > MIN_HEIGHT_FOR_DOUBLINE_TYPE ? singleNode.x0 : singleNode.x1! - textLengthForNodeWeight - 8\n }\n y={singleNode.y0}\n dy={height > MIN_HEIGHT_FOR_DOUBLINE_TYPE ? '2em' : '1em'}\n dx={height > MIN_HEIGHT_FOR_DOUBLINE_TYPE ? '0.4em' : '0em'}\n textAnchor={this._isRtl ? 'end' : 'start'}\n fontWeight=\"bold\"\n aria-hidden=\"true\"\n fill={\n !(\n !this.state.selectedState ||\n (this.state.selectedState &&\n this.state.selectedNodes.has(singleNode.index!) &&\n this.state.selectedNode) ||\n (this.state.selectedState && !this.state.selectedNode)\n )\n ? DEFAULT_TEXT_COLOR\n : NON_SELECTED_TEXT_COLOR\n }\n fontSize={14}\n >\n {singleNode.actualValue}\n </text>\n </g>\n )}\n </g>\n );\n nodes.push(node);\n });\n return nodes;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onLeave(singleNode: SNode) {\n if (this.state.selectedState) {\n this.setState({\n selectedState: false,\n selectedNodes: new Set<number>(),\n selectedLinks: new Set<number>(),\n selectedNode: undefined,\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onHover(singleNode: SNode, mouseEvent: React.MouseEvent<SVGElement>) {\n mouseEvent.persist();\n this._onCloseCallout();\n if (!this.state.selectedState) {\n const selectedLinks = this._getSelectedLinks(singleNode);\n const selectedNodes = this._getSelectedNodes(selectedLinks);\n selectedNodes.push(singleNode);\n this.setState({\n selectedState: true,\n selectedNodes: new Set<number>(Array.from(selectedNodes).map(node => node.index)),\n selectedLinks: new Set<number>(Array.from(selectedLinks).map(link => link.index!)),\n selectedNode: singleNode,\n refSelected: mouseEvent, //this._refArray.get(index),\n isCalloutVisible: singleNode.y1! - singleNode.y0! < MIN_HEIGHT_FOR_TYPE,\n color: singleNode.color,\n xCalloutValue: singleNode.name,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yCalloutValue: singleNode.actualValue! as any as string,\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onStreamHover(singleLink: SLink, mouseEvent: React.MouseEvent<SVGElement>) {\n mouseEvent.persist();\n this._onCloseCallout();\n if (!this.state.selectedState) {\n const { selectedLinks, selectedNodes } = this._getSelectedLinksforStreamHover(singleLink);\n this.setState({\n selectedState: true,\n selectedNodes: new Set<number>(Array.from(selectedNodes).map(node => node.index!)),\n selectedLinks: new Set<number>(Array.from(selectedLinks).map(link => link.index!)),\n refSelected: mouseEvent,\n selectedLink: singleLink,\n isCalloutVisible: true,\n color: (singleLink.source as SNode).color,\n xCalloutValue: (singleLink.target as SNode).name,\n yCalloutValue: singleLink.unnormalizedValue!.toString(),\n descriptionMessage: 'from ' + (singleLink.source as SNode).name,\n });\n }\n }\n\n private _onStreamLeave(singleLink: SLink) {\n if (this.state.selectedState) {\n this.setState({\n selectedState: false,\n selectedNodes: new Set<number>(),\n selectedLinks: new Set<number>(),\n selectedLink: undefined,\n });\n }\n }\n\n private _onFocusLink(singleLink: SLink, element: React.FocusEvent<SVGElement>): void {\n element.persist();\n this._onCloseCallout();\n this.setState({\n refSelected: element.currentTarget,\n selectedLink: singleLink,\n isCalloutVisible: true,\n color: (singleLink.source as SNode).color,\n xCalloutValue: (singleLink.target as SNode).name,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yCalloutValue: (singleLink.source as SNode).actualValue! as any as string,\n descriptionMessage: 'from ' + (singleLink.source as SNode).name,\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onCloseCallout = () => {\n this.setState({\n isCalloutVisible: false,\n refSelected: undefined,\n descriptionMessage: '',\n });\n };\n\n private _onBlur = (): void => {\n /**/\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _fillNodeColors = (singleNode: SNode): string | undefined => {\n if (!this.state.selectedState) {\n return singleNode.color;\n } else if (this.state.selectedState && this.state.selectedNodes.has(singleNode.index!) && this.state.selectedNode) {\n return this.state.selectedNode.color;\n } else if (this.state.selectedState && !this.state.selectedNode) {\n return singleNode.color;\n }\n };\n\n /**\n * This is used to assign node fillcolors and borderColor cyclically when the user doesnt\n * provide color to individual node.\n */\n private _assignNodeColors() {\n let colors: string[];\n let borders: string[];\n if (this.props.colorsForNodes && this.props.borderColorsForNodes) {\n colors = this.props.colorsForNodes;\n borders = this.props.borderColorsForNodes;\n } else {\n colors = DEFAULT_NODE_COLORS.map(color => color.fillColor);\n borders = DEFAULT_NODE_COLORS.map(color => color.borderColor);\n }\n let currentIndex = 0;\n this.props.data.SankeyChartData!.nodes.forEach((node: SNode) => {\n if (!node.color && !node.borderColor) {\n node.color = colors[currentIndex];\n node.borderColor = borders[currentIndex];\n } else if (node.color && !node.borderColor) {\n node.borderColor = '#757575';\n } else if (node.borderColor && !node.color) {\n node.color = '#F5F5F5';\n }\n currentIndex = (currentIndex + 1) % colors.length;\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _fillStreamColors(singleLink: SLink, gradientUrl: string): string | undefined {\n if (this.state.selectedState && this.state.selectedLinks.has(singleLink.index!) && this.state.selectedNode) {\n return this.state.selectedNode.color;\n } else if (this.state.selectedState && this.state.selectedLinks.has(singleLink.index!)) {\n return gradientUrl;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _fillStreamBorder(singleLink: SLink, gradientUrl: string): string {\n if (!this.state.selectedState) {\n return NON_SELECTED_NODE_AND_STREAM_COLOR;\n } else if (this.state.selectedState && this.state.selectedLinks.has(singleLink.index!) && this.state.selectedNode) {\n return this.state.selectedNode.borderColor!;\n } else if (this.state.selectedState && this.state.selectedLinks.has(singleLink.index!)) {\n return gradientUrl;\n }\n return NON_SELECTED_NODE_AND_STREAM_COLOR;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _fillNodeBorder = (singleNode: SNode): string => {\n if (!this.state.selectedState) {\n return singleNode.borderColor!;\n } else if (this.state.selectedState && this.state.selectedNodes.has(singleNode.index!) && this.state.selectedNode) {\n return this.state.selectedNode.borderColor!;\n } else if (this.state.selectedState && this.state.selectedNodes.has(singleNode.index!)) {\n return singleNode.borderColor!;\n }\n return singleNode.borderColor!;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _getSelectedNodes(selectedLinks: Set<SLink>): any[] {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const nodes: SNode[] = [];\n selectedLinks.forEach(link => {\n nodes.push(link.target as SNode);\n\n if (nodes.indexOf(link.source as SNode) === -1) {\n nodes.push(link.source as SNode);\n }\n });\n return nodes;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _getSelectedLinks(singleNode: SNode): Set<SLink> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-array-constructor\n const q: any = new Array<any>();\n const finalLinks: Set<SLink> = new Set<SLink>();\n\n singleNode.sourceLinks!.forEach((link: SLink) => {\n q.push(link);\n finalLinks.add(link);\n });\n\n while (q.length > 0) {\n const poppedLink: SLink = q.shift();\n const node: SNode = poppedLink.target as SNode;\n if (node && node.sourceLinks) {\n node.sourceLinks.forEach((link: SLink) => {\n finalLinks.add(link);\n q.push(link);\n });\n }\n }\n\n if (singleNode.targetLinks) {\n singleNode.targetLinks.forEach((link: SLink) => {\n q.push(link);\n finalLinks.add(link);\n });\n }\n\n while (q.length > 0) {\n const poppedLink: SLink = q.shift();\n const node: SNode = poppedLink.source as SNode;\n if (node && node.targetLinks) {\n node.targetLinks.forEach((link: SLink) => {\n finalLinks.add(link);\n q.push(link);\n });\n }\n }\n\n return finalLinks;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _getSelectedLinksforStreamHover(singleLink: SLink): { selectedLinks: Set<SLink>; selectedNodes: Set<SNode> } {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-array-constructor\n const q: any = new Array<any>();\n const finalLinks: Set<SLink> = new Set<SLink>();\n const finalNodes: Set<SNode> = new Set<SNode>();\n\n q.push(singleLink.source);\n finalLinks.add(singleLink);\n while (q.length > 0) {\n const poppedNode: SNode = q.shift();\n finalNodes.add(poppedNode);\n if (poppedNode.targetLinks && poppedNode.targetLinks.length > 0) {\n poppedNode.targetLinks.forEach((link: SLink) => {\n q.push(link.source);\n finalLinks.add(link);\n });\n }\n }\n\n q.push(singleLink.target);\n\n while (q.length > 0) {\n const poppedNode: SNode = q.shift();\n finalNodes.add(poppedNode);\n if (poppedNode.sourceLinks && poppedNode.sourceLinks.length > 0) {\n poppedNode.sourceLinks.forEach((link: SLink) => {\n q.push(link.target);\n finalLinks.add(link);\n });\n }\n }\n\n return {\n selectedLinks: finalLinks,\n selectedNodes: finalNodes,\n };\n }\n\n private _getOpacityStream(singleLink: SLink): number {\n if (this.state.selectedState) {\n if (!this.state.selectedLinks.has(singleLink.index!)) {\n return NON_SELECTED_OPACITY;\n } else if (\n this.state.selectedState &&\n this.state.selectedLinks.has(singleLink.index!) &&\n !this.state.selectedNode\n ) {\n return SELECTED_STREAM_OPACITY;\n }\n }\n return REST_STREAM_OPACITY;\n }\n\n private _getOpacityStreamBorder(singleLink: SLink): number {\n if (this.state.selectedState && !this.state.selectedLinks.has(singleLink.index!) && !this.state.selectedNode) {\n return NON_SELECTED_STREAM_BORDER_OPACITY;\n }\n\n return NON_SELECTED_OPACITY;\n }\n\n private _fitParentContainer(): void {\n const { containerWidth, containerHeight } = this.state;\n this._reqID = requestAnimationFrame(() => {\n const container = this.props.parentRef ? this.props.parentRef : this.chartContainer;\n const currentContainerWidth = container.getBoundingClientRect().width;\n const currentContainerHeight = container.getBoundingClientRect().height;\n const shouldResize = containerWidth !== currentContainerWidth || containerHeight !== currentContainerHeight;\n if (shouldResize) {\n this.setState({\n containerWidth: currentContainerWidth,\n containerHeight: currentContainerHeight,\n });\n }\n });\n }\n /**\n *\n * @param text is the text which we are trying to truncate\n * @param rectangleWidth is the width of the rectangle which will contain the text\n * @param padding is the space we need to leave between the rect lines and other text\n * @param nodeWeight is the text if present needs to be accomodate in the same line as text.\n * @returns the truncated text , if truncated given the above parameters.\n */\n private _truncateText(text: string, rectangleWidth: number, padding: number) {\n const textLengthForNodeName = rectangleWidth - padding;\n let elipsisLength = 0;\n const tspan = select('.nodeName')\n .append('text')\n .attr('class', 'tempText')\n .attr('font-size', '10')\n .append('tspan')\n .text(null);\n tspan.text(text);\n if (tspan.node() !== null && tspan.node()!.getComputedTextLength() <= textLengthForNodeName) {\n return text;\n }\n tspan.text(null);\n tspan.text('...');\n if (tspan.node() !== null) {\n elipsisLength = tspan.node()!.getComputedTextLength();\n }\n tspan.text(null);\n let line: string = '';\n for (let i = 0; i < text.length; i++) {\n line += text[i];\n tspan.text(line);\n if (tspan.node() !== null) {\n const w = tspan.node()!.getComputedTextLength();\n if (w >= textLengthForNodeName - elipsisLength) {\n line = line.slice(0, -1);\n line += '...';\n break;\n }\n }\n }\n tspan.text(null);\n selectAll('.tempText').remove();\n return line;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _showTooltip(text: string, checkTrcuncated: boolean, div: any, evt: any) {\n if (checkTrcuncated) {\n //Fixing tooltip position by attaching it to the element rather than page\n div.style('opacity', 0.9);\n div\n .html(text)\n .style('left', evt.pageX + 'px')\n .style('top', evt.pageY - 28 + 'px');\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _hideTooltip(div: any) {\n div.style('opacity', 0);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SankeyChart.base.js","sourceRoot":"../src/","sources":["components/SankeyChart/SankeyChart.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { classNamesFunction, getId, getRTL, memoizeFunction } from '@fluentui/react/lib/Utilities';\nimport { ISankeyChartData, ISankeyChartProps, ISankeyChartStyleProps, ISankeyChartStyles } from './SankeyChart.types';\nimport { IProcessedStyleSet } from '@fluentui/react/lib/Styling';\nimport * as d3Sankey from 'd3-sankey';\nimport { area as d3Area, curveBumpX as d3CurveBasis } from 'd3-shape';\nimport { sum as d3Sum } from 'd3-array';\nimport { ChartHoverCard, IBasestate, IChartHoverCardProps, SLink, SNode } from '../../index';\nimport { Callout, DirectionalHint } from '@fluentui/react/lib/Callout';\nimport { select, selectAll } from 'd3-selection';\nimport { FocusZone, FocusZoneDirection, FocusZoneTabbableElements } from '@fluentui/react-focus';\nimport { IMargins } from '../../utilities/utilities';\n\nconst getClassNames = classNamesFunction<ISankeyChartStyleProps, ISankeyChartStyles>();\nconst PADDING_PERCENTAGE = 0.3;\n\ntype NodesInColumns = { [key: number]: SNode[] };\ntype NodeColors = { fillColor: string; borderColor: string };\n\nexport interface ISankeyChartState extends IBasestate, IChartHoverCardProps {\n containerWidth: number;\n containerHeight: number;\n selectedState: boolean;\n selectedLinks: Set<Number>;\n selectedNodes: Set<Number>;\n selectedNode?: SNode;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refSelected?: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n selectedLink?: SLink;\n shouldOverflow: boolean;\n}\n\nconst NON_SELECTED_NODE_AND_STREAM_COLOR: string = '#757575';\nconst DEFAULT_NODE_COLORS: NodeColors[] = [\n { fillColor: '#00758F', borderColor: '#002E39' },\n { fillColor: '#77004D', borderColor: '#43002C' },\n { fillColor: '#4F6BED', borderColor: '#3B52B4' },\n { fillColor: '#937600', borderColor: '#6D5700' },\n { fillColor: '#286EA8', borderColor: '#00457E' },\n { fillColor: '#A43FB1', borderColor: '#7C158A' },\n { fillColor: '#CC3595', borderColor: '#7F215D' },\n { fillColor: '#0E7878', borderColor: '#004E4E' },\n { fillColor: '#8764B8', borderColor: '#4B3867' },\n { fillColor: '#9C663F', borderColor: '#6D4123' },\n];\n\nconst MIN_HEIGHT_FOR_DOUBLINE_TYPE = 36;\nconst MIN_HEIGHT_FOR_TYPE = 24;\nconst REST_STREAM_OPACITY: number = 1;\nconst NON_SELECTED_OPACITY: number = 1;\nconst SELECTED_STREAM_OPACITY: number = 0.3;\nconst NON_SELECTED_STREAM_BORDER_OPACITY: number = 0.5;\nconst DEFAULT_TEXT_COLOR: string = '#323130';\nconst NON_SELECTED_TEXT_COLOR: string = '#FFFFFF';\n\nexport class SankeyChartBase extends React.Component<ISankeyChartProps, ISankeyChartState> {\n private _classNames: IProcessedStyleSet<ISankeyChartStyles>;\n private chartContainer: HTMLDivElement;\n private _reqID: number;\n private _calloutId: string;\n private _linkId: string;\n private _nodesInColumn: NodesInColumns;\n private _sankey: d3Sankey.SankeyLayout<d3Sankey.SankeyGraph<{}, {}>, {}, {}>;\n private _margins: IMargins;\n private _isRtl: boolean = getRTL();\n private _normalizeData: (data: ISankeyChartData) => void;\n private _emptyChartId: string;\n\n constructor(props: ISankeyChartProps) {\n super(props);\n this.state = {\n containerHeight: 468,\n containerWidth: 912,\n selectedState: false,\n selectedLinks: new Set<number>(),\n selectedNodes: new Set<number>(),\n shouldOverflow: false,\n isCalloutVisible: false,\n };\n this._calloutId = getId('callout');\n this._linkId = getId('link');\n this._margins = { top: 36, right: 48, bottom: 32, left: 48 };\n this._preRenderLayout();\n this._normalizeData = memoizeFunction((data: ISankeyChartData) => this._normalizeSankeyData(data));\n this._emptyChartId = getId('_SankeyChart_empty');\n }\n public componentDidMount(): void {\n this._fitParentContainer();\n }\n\n public componentDidUpdate(prevProps: ISankeyChartProps): void {\n if (prevProps.shouldResize !== this.props.shouldResize) {\n this._fitParentContainer();\n }\n }\n public componentWillUnmount(): void {\n cancelAnimationFrame(this._reqID);\n }\n public render(): React.ReactNode {\n if (!this._isChartEmpty()) {\n const { theme, className, styles, pathColor } = this.props;\n this._classNames = getClassNames(styles!, {\n theme: theme!,\n width: this.state.containerWidth,\n height: this.state.containerHeight,\n pathColor,\n className,\n });\n // We are using the this._margins.left and this._margins.top in sankey extent while constructing the layout\n const { height, width } = this._preRenderLayout();\n this._normalizeData(this.props.data.SankeyChartData!);\n let nodePadding = 8;\n nodePadding = this._adjustPadding(this._sankey, height - 6, this._nodesInColumn);\n\n this._sankey.nodePadding(nodePadding);\n this._sankey(this.props.data.SankeyChartData!);\n this._populateNodeActualValue(this.props.data.SankeyChartData!);\n this._assignNodeColors();\n const nodeData = this._createNodes(width);\n const linkData = this._createLinks();\n const calloutProps = {\n isCalloutVisible: this.state.isCalloutVisible,\n directionalHint: DirectionalHint.topAutoEdge,\n id: `toolTip${this._calloutId}`,\n target: this.state.refSelected,\n color: this.state.color,\n XValue: this.state.xCalloutValue,\n YValue: this.state.yCalloutValue ? this.state.yCalloutValue : this.state.dataForHoverCard,\n descriptionMessage: this.state.descriptionMessage,\n isBeakVisible: false,\n gapSpace: 15,\n onDismiss: this._onCloseCallout,\n className: this._classNames.calloutContentRoot,\n preventDismissOnLostFocus: true,\n };\n return (\n <div\n className={this._classNames.root}\n role={'presentation'}\n ref={(rootElem: HTMLDivElement) => (this.chartContainer = rootElem)}\n onMouseLeave={this._onCloseCallout}\n >\n <FocusZone\n direction={FocusZoneDirection.bidirectional}\n isCircularNavigation={true}\n handleTabKey={FocusZoneTabbableElements.all}\n >\n <svg width={width} height={height} id={getId('sankeyChart')}>\n <g className={this._classNames.links} strokeOpacity={1}>\n {linkData}\n </g>\n <g className={this._classNames.nodes}>{nodeData}</g>\n {calloutProps.isCalloutVisible && (\n <Callout {...calloutProps}>\n <ChartHoverCard\n XValue={calloutProps.XValue}\n YValue={calloutProps.YValue}\n color={calloutProps.color}\n descriptionMessage={calloutProps.descriptionMessage ? calloutProps.descriptionMessage : ''}\n />\n </Callout>\n )}\n </svg>\n </FocusZone>\n </div>\n );\n }\n return (\n <div\n id={this._emptyChartId}\n role={'alert'}\n style={{ opacity: '0' }}\n aria-label={'Graph has no data to display'}\n />\n );\n }\n\n private _preRenderLayout(): { height: number; width: number } {\n const width = this.state.containerWidth - this._margins.right!;\n const height =\n this.state.containerHeight - this._margins.bottom! > 0 ? this.state.containerHeight - this._margins.bottom! : 0;\n\n this._sankey = d3Sankey\n .sankey()\n .nodeWidth(124)\n .extent([\n [this._margins.left!, this._margins.top!],\n [width - 1, height - 6],\n ])\n .nodeAlign(this._isRtl ? d3Sankey.sankeyRight : d3Sankey.sankeyJustify);\n\n return { height, width };\n }\n\n /**\n * This is used for calculating the node non normalized value based on link non normalized value.\n *\n */\n private _populateNodeActualValue(data: ISankeyChartData) {\n data.links.forEach((link: SLink) => {\n if (!link.unnormalizedValue) {\n link.unnormalizedValue = link.value;\n }\n });\n data.nodes.forEach((node: SNode) => {\n node.actualValue = Math.max(\n d3Sum(node.sourceLinks!, (link: SLink) => link.unnormalizedValue),\n d3Sum(node.targetLinks!, (link: SLink) => link.unnormalizedValue),\n );\n });\n }\n\n private _normalizeSankeyData(data: ISankeyChartData): void {\n this._nodesInColumn = this._populateNodeInColumns(data, this._sankey);\n this._adjustOnePercentHeightNodes(this._nodesInColumn);\n }\n /**\n *\n * This is used to group nodes by column index.\n */\n private _populateNodeInColumns(\n graph: ISankeyChartData,\n sankey: d3Sankey.SankeyLayout<d3Sankey.SankeyGraph<{}, {}>, {}, {}>,\n ) {\n sankey(graph);\n const nodesInColumn: NodesInColumns = {};\n graph.nodes.forEach((node: SNode) => {\n const columnId = node.layer!;\n if (nodesInColumn[columnId]) {\n nodesInColumn[columnId].push(node);\n } else {\n nodesInColumn[columnId] = [node];\n }\n });\n return nodesInColumn;\n }\n\n /**\n * This is used to normalize the nodes value whose value is less than 1% of the total column value.\n *\n */\n private _adjustOnePercentHeightNodes(nodesInColumn: NodesInColumns) {\n const totalColumnValue = Object.values(nodesInColumn).map((column: SNode[]) => {\n return d3Sum(column, (node: SNode) => node.value);\n });\n totalColumnValue.forEach((columnValue: number, index: number) => {\n let totalPercentage = 0;\n nodesInColumn[index].forEach((node: SNode) => {\n const nodePercentage = (node.value! / columnValue) * 100;\n node.actualValue = node.value;\n //if the value is less than 1% then we are making it as 1% of total .\n if (nodePercentage < 1) {\n node.value = 0.01 * columnValue;\n totalPercentage = totalPercentage + 1;\n } else {\n totalPercentage = totalPercentage + nodePercentage;\n }\n });\n //since we have adjusted the value to be 1% but we need to keep the sum of the percentage value under 100.\n const scalingRatio = totalPercentage !== 0 ? totalPercentage / 100 : 1;\n if (scalingRatio > 1) {\n nodesInColumn[index].forEach((node: SNode) => {\n node.value = node.value! / scalingRatio;\n this._changeColumnValue(node, node.actualValue!, node.value);\n });\n }\n });\n }\n\n /**\n *\n * This is used for normalizing each links value for reflecting the normalized node value.\n */\n private _changeColumnValue(node: SNode, originalValue: number, normalizedValue: number) {\n node.sourceLinks!.forEach((link: SLink) => {\n link.unnormalizedValue = link.value;\n const linkRatio = link.value / originalValue;\n link.value = normalizedValue * linkRatio;\n });\n node.targetLinks!.forEach((link: SLink) => {\n link.unnormalizedValue = link.value;\n const linkRatio = link.value / originalValue;\n link.value = normalizedValue * linkRatio;\n });\n }\n\n /**\n *\n * This is used to introduce dynamic padding for cases where the number of nodes in a column is huge\n * so that we maintain a node to space ratio for such columns as if we fail to do so the\n * chart is devoid of nodes and only shows links.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _adjustPadding(sankey: any, height: number, nodesInColumn: NodesInColumns) {\n let padding = this._sankey.nodePadding();\n Object.values(nodesInColumn).forEach((column: SNode[]) => {\n const minPadding = PADDING_PERCENTAGE * height;\n const toatlPaddingInColumn = height - d3Sum(column, (node: SNode) => node.y1! - node.y0!);\n if (minPadding < toatlPaddingInColumn) {\n //Here we are calculating the min of default and calculated padding, we will not increase the padding\n //in any scenario.\n padding = Math.min(padding, minPadding / (column.length - 1));\n }\n });\n return padding;\n }\n\n private _createLinks(): React.ReactNode[] | undefined {\n const links: React.ReactNode[] = [];\n\n if (this.props.data.SankeyChartData) {\n this.props.data.SankeyChartData.links.forEach((singleLink: SLink, index: number) => {\n const onMouseOut = () => {\n this._onStreamLeave(singleLink);\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data = (d: any) => {\n return [\n { x: d.source.x1, y0: d.y0 + d.width / 2, y1: d.y0 - d.width / 2 },\n { x: d.target.x0, y0: d.y1 + d.width / 2, y1: d.y1 - d.width / 2 },\n ];\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const dataPoints: Array<any> = data(singleLink);\n const linkArea = d3Area()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .x((p: any) => p.x)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .y0((p: any) => p.y0)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .y1((p: any) => p.y1)\n .curve(d3CurveBasis);\n const gradientUrl = `url(#gradient-${this._linkId}-${index})`;\n const link = (\n <g key={`${this._linkId}-${index}`}>\n <defs>\n <linearGradient id={`gradient-${this._linkId}-${index}`} x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop offset=\"0\" stopColor={(singleLink.source as SNode).color} />\n <stop offset=\"100%\" stopColor={(singleLink.target as SNode).color} />\n </linearGradient>\n </defs>\n <path\n d={linkArea(dataPoints)!}\n id={getId('link')}\n fill={this._fillStreamColors(singleLink, gradientUrl)}\n stroke={this._fillStreamBorder(singleLink, gradientUrl)}\n strokeWidth=\"2\"\n strokeOpacity={this._getOpacityStreamBorder(singleLink)}\n onMouseOver={this._onStreamHover.bind(this, singleLink)}\n onMouseOut={onMouseOut}\n onFocus={this._onFocusLink.bind(this, singleLink)}\n onBlur={this._onBlur}\n fillOpacity={this._getOpacityStream(singleLink)}\n data-is-focusable={true}\n aria-label={\n 'link from' +\n (singleLink.source as SNode).name +\n 'to' +\n (singleLink.target as SNode).name +\n 'with weight' +\n singleLink!.unnormalizedValue\n }\n role=\"img\"\n />\n </g>\n );\n links.push(link);\n });\n }\n return links;\n }\n\n private _createNodes(width: number): React.ReactNode[] | undefined {\n const nodes: React.ReactNode[] = [];\n\n if (this.props.data.SankeyChartData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.props.data.SankeyChartData.nodes.forEach((singleNode: SNode, index: number) => {\n const onMouseOut = () => {\n this._onLeave(singleNode);\n };\n const height = singleNode.y1! - singleNode.y0! > 0 ? singleNode.y1! - singleNode.y0! : 0;\n let padding = 8;\n let textLengthForNodeWeight = 0;\n\n // If the nodeWeight is in the same line as node description an extra padding\n // of 6 px is required between node description and node weight.\n if (height < MIN_HEIGHT_FOR_DOUBLINE_TYPE) {\n padding = padding + 6;\n const tspan = select('.nodeName').append('text').attr('class', 'tempText').append('tspan').text(null);\n tspan.text(singleNode.actualValue!);\n if (tspan.node() !== null) {\n textLengthForNodeWeight = tspan.node()!.getComputedTextLength();\n padding = padding + textLengthForNodeWeight;\n }\n tspan.text(null);\n selectAll('.tempText').remove();\n }\n // Since the total width of the node is 124 and we are giving margin of 8px from the left .\n //So the actual value on which it will be truncated is 124-8=116.\n const truncatedname: string = this._truncateText(singleNode.name, 116, padding);\n const isTruncated: boolean = truncatedname.slice(-3) === '...';\n const id = getId('tooltip');\n const div = select('body')\n .append('div')\n .attr('id', id)\n .attr('class', this._classNames.toolTip!)\n .style('opacity', 0);\n const nodeId = getId('nodeBar');\n const node = (\n <g key={index} id={getId('nodeGElement')}>\n <rect\n x={singleNode.x0}\n y={singleNode.y0}\n height={height}\n width={singleNode.x1! - singleNode.x0!}\n fill={this._fillNodeColors(singleNode)}\n id={nodeId}\n onMouseOver={this._onHover.bind(this, singleNode)}\n onMouseOut={onMouseOut}\n onFocus={this._onCloseCallout.bind(this)}\n stroke={this._fillNodeBorder(singleNode)}\n strokeWidth=\"2\"\n opacity=\"1\"\n data-is-focusable={true}\n aria-label={'node' + `${singleNode.name}` + 'with weight' + `${singleNode.actualValue}`}\n role=\"img\"\n />\n {singleNode.y1! - singleNode.y0! > MIN_HEIGHT_FOR_TYPE && (\n <g className={this._classNames.nodeTextContainer}>\n <g className=\"nodeName\">\n <text\n id={`${nodeId}-name`}\n x={singleNode.x0}\n y={singleNode.y0}\n dy={'1.2em'}\n dx={'0.4em'}\n textAnchor={this._isRtl ? 'end' : 'start'}\n fontWeight=\"regular\"\n aria-hidden=\"true\"\n fill={\n !(\n !this.state.selectedState ||\n (this.state.selectedState &&\n this.state.selectedNodes.has(singleNode.index!) &&\n this.state.selectedNode) ||\n (this.state.selectedState && !this.state.selectedNode)\n )\n ? DEFAULT_TEXT_COLOR\n : NON_SELECTED_TEXT_COLOR\n }\n fontSize={10}\n onMouseOver={this._showTooltip.bind(this, singleNode.name, isTruncated, div)}\n onMouseOut={this._hideTooltip.bind(this, div)}\n >\n {truncatedname}\n </text>\n </g>\n\n <text\n x={\n height > MIN_HEIGHT_FOR_DOUBLINE_TYPE ? singleNode.x0 : singleNode.x1! - textLengthForNodeWeight - 8\n }\n y={singleNode.y0}\n dy={height > MIN_HEIGHT_FOR_DOUBLINE_TYPE ? '2em' : '1em'}\n dx={height > MIN_HEIGHT_FOR_DOUBLINE_TYPE ? '0.4em' : '0em'}\n textAnchor={this._isRtl ? 'end' : 'start'}\n fontWeight=\"bold\"\n aria-hidden=\"true\"\n fill={\n !(\n !this.state.selectedState ||\n (this.state.selectedState &&\n this.state.selectedNodes.has(singleNode.index!) &&\n this.state.selectedNode) ||\n (this.state.selectedState && !this.state.selectedNode)\n )\n ? DEFAULT_TEXT_COLOR\n : NON_SELECTED_TEXT_COLOR\n }\n fontSize={14}\n >\n {singleNode.actualValue}\n </text>\n </g>\n )}\n </g>\n );\n nodes.push(node);\n });\n return nodes;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onLeave(singleNode: SNode) {\n if (this.state.selectedState) {\n this.setState({\n selectedState: false,\n selectedNodes: new Set<number>(),\n selectedLinks: new Set<number>(),\n selectedNode: undefined,\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onHover(singleNode: SNode, mouseEvent: React.MouseEvent<SVGElement>) {\n mouseEvent.persist();\n this._onCloseCallout();\n if (!this.state.selectedState) {\n const selectedLinks = this._getSelectedLinks(singleNode);\n const selectedNodes = this._getSelectedNodes(selectedLinks);\n selectedNodes.push(singleNode);\n this.setState({\n selectedState: true,\n selectedNodes: new Set<number>(Array.from(selectedNodes).map(node => node.index)),\n selectedLinks: new Set<number>(Array.from(selectedLinks).map(link => link.index!)),\n selectedNode: singleNode,\n refSelected: mouseEvent, //this._refArray.get(index),\n isCalloutVisible: singleNode.y1! - singleNode.y0! < MIN_HEIGHT_FOR_TYPE,\n color: singleNode.color,\n xCalloutValue: singleNode.name,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yCalloutValue: singleNode.actualValue! as any as string,\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onStreamHover(singleLink: SLink, mouseEvent: React.MouseEvent<SVGElement>) {\n mouseEvent.persist();\n this._onCloseCallout();\n if (!this.state.selectedState) {\n const { selectedLinks, selectedNodes } = this._getSelectedLinksforStreamHover(singleLink);\n this.setState({\n selectedState: true,\n selectedNodes: new Set<number>(Array.from(selectedNodes).map(node => node.index!)),\n selectedLinks: new Set<number>(Array.from(selectedLinks).map(link => link.index!)),\n refSelected: mouseEvent,\n selectedLink: singleLink,\n isCalloutVisible: true,\n color: (singleLink.source as SNode).color,\n xCalloutValue: (singleLink.target as SNode).name,\n yCalloutValue: singleLink.unnormalizedValue!.toString(),\n descriptionMessage: 'from ' + (singleLink.source as SNode).name,\n });\n }\n }\n\n private _onStreamLeave(singleLink: SLink) {\n if (this.state.selectedState) {\n this.setState({\n selectedState: false,\n selectedNodes: new Set<number>(),\n selectedLinks: new Set<number>(),\n selectedLink: undefined,\n });\n }\n }\n\n private _onFocusLink(singleLink: SLink, element: React.FocusEvent<SVGElement>): void {\n element.persist();\n this._onCloseCallout();\n this.setState({\n refSelected: element.currentTarget,\n selectedLink: singleLink,\n isCalloutVisible: true,\n color: (singleLink.source as SNode).color,\n xCalloutValue: (singleLink.target as SNode).name,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yCalloutValue: (singleLink.source as SNode).actualValue! as any as string,\n descriptionMessage: 'from ' + (singleLink.source as SNode).name,\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onCloseCallout = () => {\n this.setState({\n isCalloutVisible: false,\n refSelected: undefined,\n descriptionMessage: '',\n });\n };\n\n private _onBlur = (): void => {\n /**/\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _fillNodeColors = (singleNode: SNode): string | undefined => {\n if (!this.state.selectedState) {\n return singleNode.color;\n } else if (this.state.selectedState && this.state.selectedNodes.has(singleNode.index!) && this.state.selectedNode) {\n return this.state.selectedNode.color;\n } else if (this.state.selectedState && !this.state.selectedNode) {\n return singleNode.color;\n }\n };\n\n /**\n * This is used to assign node fillcolors and borderColor cyclically when the user doesnt\n * provide color to individual node.\n */\n private _assignNodeColors() {\n let colors: string[];\n let borders: string[];\n if (this.props.colorsForNodes && this.props.borderColorsForNodes) {\n colors = this.props.colorsForNodes;\n borders = this.props.borderColorsForNodes;\n } else {\n colors = DEFAULT_NODE_COLORS.map(color => color.fillColor);\n borders = DEFAULT_NODE_COLORS.map(color => color.borderColor);\n }\n let currentIndex = 0;\n this.props.data.SankeyChartData!.nodes.forEach((node: SNode) => {\n if (!node.color && !node.borderColor) {\n node.color = colors[currentIndex];\n node.borderColor = borders[currentIndex];\n } else if (node.color && !node.borderColor) {\n node.borderColor = '#757575';\n } else if (node.borderColor && !node.color) {\n node.color = '#F5F5F5';\n }\n currentIndex = (currentIndex + 1) % colors.length;\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _fillStreamColors(singleLink: SLink, gradientUrl: string): string | undefined {\n if (this.state.selectedState && this.state.selectedLinks.has(singleLink.index!) && this.state.selectedNode) {\n return this.state.selectedNode.color;\n } else if (this.state.selectedState && this.state.selectedLinks.has(singleLink.index!)) {\n return gradientUrl;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _fillStreamBorder(singleLink: SLink, gradientUrl: string): string {\n if (!this.state.selectedState) {\n return NON_SELECTED_NODE_AND_STREAM_COLOR;\n } else if (this.state.selectedState && this.state.selectedLinks.has(singleLink.index!) && this.state.selectedNode) {\n return this.state.selectedNode.borderColor!;\n } else if (this.state.selectedState && this.state.selectedLinks.has(singleLink.index!)) {\n return gradientUrl;\n }\n return NON_SELECTED_NODE_AND_STREAM_COLOR;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _fillNodeBorder = (singleNode: SNode): string => {\n if (!this.state.selectedState) {\n return singleNode.borderColor!;\n } else if (this.state.selectedState && this.state.selectedNodes.has(singleNode.index!) && this.state.selectedNode) {\n return this.state.selectedNode.borderColor!;\n } else if (this.state.selectedState && this.state.selectedNodes.has(singleNode.index!)) {\n return singleNode.borderColor!;\n }\n return singleNode.borderColor!;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _getSelectedNodes(selectedLinks: Set<SLink>): any[] {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const nodes: SNode[] = [];\n selectedLinks.forEach(link => {\n nodes.push(link.target as SNode);\n\n if (nodes.indexOf(link.source as SNode) === -1) {\n nodes.push(link.source as SNode);\n }\n });\n return nodes;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _getSelectedLinks(singleNode: SNode): Set<SLink> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-array-constructor\n const q: any = new Array<any>();\n const finalLinks: Set<SLink> = new Set<SLink>();\n\n singleNode.sourceLinks!.forEach((link: SLink) => {\n q.push(link);\n finalLinks.add(link);\n });\n\n while (q.length > 0) {\n const poppedLink: SLink = q.shift();\n const node: SNode = poppedLink.target as SNode;\n if (node && node.sourceLinks) {\n node.sourceLinks.forEach((link: SLink) => {\n finalLinks.add(link);\n q.push(link);\n });\n }\n }\n\n if (singleNode.targetLinks) {\n singleNode.targetLinks.forEach((link: SLink) => {\n q.push(link);\n finalLinks.add(link);\n });\n }\n\n while (q.length > 0) {\n const poppedLink: SLink = q.shift();\n const node: SNode = poppedLink.source as SNode;\n if (node && node.targetLinks) {\n node.targetLinks.forEach((link: SLink) => {\n finalLinks.add(link);\n q.push(link);\n });\n }\n }\n\n return finalLinks;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _getSelectedLinksforStreamHover(singleLink: SLink): { selectedLinks: Set<SLink>; selectedNodes: Set<SNode> } {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-array-constructor\n const q: any = new Array<any>();\n const finalLinks: Set<SLink> = new Set<SLink>();\n const finalNodes: Set<SNode> = new Set<SNode>();\n\n q.push(singleLink.source);\n finalLinks.add(singleLink);\n while (q.length > 0) {\n const poppedNode: SNode = q.shift();\n finalNodes.add(poppedNode);\n if (poppedNode.targetLinks && poppedNode.targetLinks.length > 0) {\n poppedNode.targetLinks.forEach((link: SLink) => {\n q.push(link.source);\n finalLinks.add(link);\n });\n }\n }\n\n q.push(singleLink.target);\n\n while (q.length > 0) {\n const poppedNode: SNode = q.shift();\n finalNodes.add(poppedNode);\n if (poppedNode.sourceLinks && poppedNode.sourceLinks.length > 0) {\n poppedNode.sourceLinks.forEach((link: SLink) => {\n q.push(link.target);\n finalLinks.add(link);\n });\n }\n }\n\n return {\n selectedLinks: finalLinks,\n selectedNodes: finalNodes,\n };\n }\n\n private _getOpacityStream(singleLink: SLink): number {\n if (this.state.selectedState) {\n if (!this.state.selectedLinks.has(singleLink.index!)) {\n return NON_SELECTED_OPACITY;\n } else if (\n this.state.selectedState &&\n this.state.selectedLinks.has(singleLink.index!) &&\n !this.state.selectedNode\n ) {\n return SELECTED_STREAM_OPACITY;\n }\n }\n return REST_STREAM_OPACITY;\n }\n\n private _getOpacityStreamBorder(singleLink: SLink): number {\n if (this.state.selectedState && !this.state.selectedLinks.has(singleLink.index!) && !this.state.selectedNode) {\n return NON_SELECTED_STREAM_BORDER_OPACITY;\n }\n\n return NON_SELECTED_OPACITY;\n }\n\n private _fitParentContainer(): void {\n const { containerWidth, containerHeight } = this.state;\n this._reqID = requestAnimationFrame(() => {\n const container = this.props.parentRef ? this.props.parentRef : this.chartContainer;\n const currentContainerWidth = container && container.getBoundingClientRect().width;\n const currentContainerHeight = container && container.getBoundingClientRect().height;\n const shouldResize = containerWidth !== currentContainerWidth || containerHeight !== currentContainerHeight;\n if (shouldResize) {\n this.setState({\n containerWidth: currentContainerWidth,\n containerHeight: currentContainerHeight,\n });\n }\n });\n }\n /**\n *\n * @param text is the text which we are trying to truncate\n * @param rectangleWidth is the width of the rectangle which will contain the text\n * @param padding is the space we need to leave between the rect lines and other text\n * @param nodeWeight is the text if present needs to be accomodate in the same line as text.\n * @returns the truncated text , if truncated given the above parameters.\n */\n private _truncateText(text: string, rectangleWidth: number, padding: number) {\n const textLengthForNodeName = rectangleWidth - padding;\n let elipsisLength = 0;\n const tspan = select('.nodeName')\n .append('text')\n .attr('class', 'tempText')\n .attr('font-size', '10')\n .append('tspan')\n .text(null);\n tspan.text(text);\n if (tspan.node() !== null && tspan.node()!.getComputedTextLength() <= textLengthForNodeName) {\n return text;\n }\n tspan.text(null);\n tspan.text('...');\n if (tspan.node() !== null) {\n elipsisLength = tspan.node()!.getComputedTextLength();\n }\n tspan.text(null);\n let line: string = '';\n for (let i = 0; i < text.length; i++) {\n line += text[i];\n tspan.text(line);\n if (tspan.node() !== null) {\n const w = tspan.node()!.getComputedTextLength();\n if (w >= textLengthForNodeName - elipsisLength) {\n line = line.slice(0, -1);\n line += '...';\n break;\n }\n }\n }\n tspan.text(null);\n selectAll('.tempText').remove();\n return line;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _showTooltip(text: string, checkTrcuncated: boolean, div: any, evt: any) {\n if (checkTrcuncated) {\n //Fixing tooltip position by attaching it to the element rather than page\n div.style('opacity', 0.9);\n div\n .html(text)\n .style('left', evt.pageX + 'px')\n .style('top', evt.pageY - 28 + 'px');\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _hideTooltip(div: any) {\n div.style('opacity', 0);\n }\n\n private _isChartEmpty() {\n return !(\n this.props.data &&\n this.props.data.SankeyChartData &&\n this.props.data.SankeyChartData.nodes.length > 0 &&\n this.props.data.SankeyChartData.links.length > 0\n );\n }\n}\n"]}
|
|
@@ -6,7 +6,6 @@ export interface ISparklineState {
|
|
|
6
6
|
_width: number;
|
|
7
7
|
_height: number;
|
|
8
8
|
_valueTextWidth: number;
|
|
9
|
-
_emptyChart?: boolean;
|
|
10
9
|
}
|
|
11
10
|
export declare class SparklineBase extends React.Component<ISparklineProps, ISparklineState> {
|
|
12
11
|
private margin;
|
|
@@ -14,8 +13,10 @@ export declare class SparklineBase extends React.Component<ISparklineProps, ISpa
|
|
|
14
13
|
private y;
|
|
15
14
|
private area;
|
|
16
15
|
private line;
|
|
16
|
+
private _emptyChartId;
|
|
17
17
|
constructor(props: ISparklineProps);
|
|
18
18
|
componentDidMount(): void;
|
|
19
19
|
drawSparkline(): JSX.Element;
|
|
20
20
|
render(): JSX.Element;
|
|
21
|
+
private _isChartEmpty;
|
|
21
22
|
}
|
|
@@ -18,20 +18,13 @@ define(["require", "exports", "tslib", "react", "d3-scale", "d3-shape", "d3-arra
|
|
|
18
18
|
_width: _this.props.width || 80,
|
|
19
19
|
_height: _this.props.height || 20,
|
|
20
20
|
_valueTextWidth: _this.props.valueTextWidth || 80,
|
|
21
|
-
_emptyChart: false,
|
|
22
21
|
};
|
|
22
|
+
_this._emptyChartId = (0, Utilities_1.getId)('_SparklineChart_empty');
|
|
23
23
|
return _this;
|
|
24
24
|
}
|
|
25
25
|
SparklineBase.prototype.componentDidMount = function () {
|
|
26
26
|
var _this = this;
|
|
27
|
-
|
|
28
|
-
this.props.data.lineChartData &&
|
|
29
|
-
this.props.data.lineChartData.length > 0 &&
|
|
30
|
-
this.props.data.lineChartData.filter(function (item) { return item.data.length === 0; }).length === 0);
|
|
31
|
-
if (this.state._emptyChart !== isChartEmpty) {
|
|
32
|
-
this.setState({ _emptyChart: isChartEmpty });
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
27
|
+
if (!this._isChartEmpty()) {
|
|
35
28
|
var area = (0, d3_shape_1.area)()
|
|
36
29
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
37
30
|
.x(function (d) { return _this.x(d.x); })
|
|
@@ -71,11 +64,17 @@ define(["require", "exports", "tslib", "react", "d3-scale", "d3-shape", "d3-arra
|
|
|
71
64
|
var classNames = getClassNames(this.props.styles, {
|
|
72
65
|
theme: this.props.theme,
|
|
73
66
|
});
|
|
74
|
-
return !this.
|
|
67
|
+
return !this._isChartEmpty() ? (React.createElement(react_focus_1.FocusZone, { direction: react_focus_1.FocusZoneDirection.horizontal, isCircularNavigation: true, className: classNames.inlineBlock },
|
|
75
68
|
React.createElement("div", { className: classNames.inlineBlock },
|
|
76
69
|
this.state._width >= 50 && this.state._height >= 16 ? (React.createElement("svg", { width: this.state._width, height: this.state._height, "data-is-focusable": true }, this.state._points ? this.drawSparkline() : null)) : (React.createElement(React.Fragment, null)),
|
|
77
70
|
this.props.showLegend && this.props.data.lineChartData[0].legend ? (React.createElement("svg", { width: this.state._valueTextWidth, height: this.state._height, "data-is-focusable": true },
|
|
78
|
-
React.createElement("text", { x: "0%", dx: 8, y: "100%", dy: -5, className: classNames.valueText }, this.props.data.lineChartData[0].legend))) : (React.createElement(React.Fragment, null))))) : (React.createElement("div", { id:
|
|
71
|
+
React.createElement("text", { x: "0%", dx: 8, y: "100%", dy: -5, className: classNames.valueText }, this.props.data.lineChartData[0].legend))) : (React.createElement(React.Fragment, null))))) : (React.createElement("div", { id: this._emptyChartId, role: 'alert', style: { opacity: '0' }, "aria-label": 'Graph has no data to display' }));
|
|
72
|
+
};
|
|
73
|
+
SparklineBase.prototype._isChartEmpty = function () {
|
|
74
|
+
return !(this.props.data &&
|
|
75
|
+
this.props.data.lineChartData &&
|
|
76
|
+
this.props.data.lineChartData.length > 0 &&
|
|
77
|
+
this.props.data.lineChartData.filter(function (item) { return item.data.length === 0; }).length === 0);
|
|
79
78
|
};
|
|
80
79
|
return SparklineBase;
|
|
81
80
|
}(React.Component));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sparkline.base.js","sourceRoot":"../src/","sources":["components/Sparkline/Sparkline.base.tsx"],"names":[],"mappings":";;;;IASA,IAAM,aAAa,GAAG,IAAA,8BAAkB,GAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"Sparkline.base.js","sourceRoot":"../src/","sources":["components/Sparkline/Sparkline.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { scaleLinear as d3ScaleLinear } from 'd3-scale';\nimport { area as d3Area, line as d3Line, curveLinear as d3curveLinear } from 'd3-shape';\nimport { max as d3Max, extent as d3Extent } from 'd3-array';\nimport { FocusZone, FocusZoneDirection } from '@fluentui/react-focus';\nimport { ILineChartDataPoint } from '../../types/IDataPoint';\nimport { classNamesFunction, getId } from '@fluentui/react/lib/Utilities';\nimport { ISparklineProps, ISparklineStyleProps, ISparklineStyles } from '../../index';\n\nconst getClassNames = classNamesFunction<ISparklineStyleProps, ISparklineStyles>();\n\nexport interface ISparklineState {\n _points: ILineChartDataPoint[] | null;\n _width: number;\n _height: number;\n _valueTextWidth: number;\n}\n\nexport class SparklineBase extends React.Component<ISparklineProps, ISparklineState> {\n private margin = {\n top: 2,\n right: 0,\n bottom: 0,\n left: 0,\n };\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n private x: any;\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n private y: any;\n private area: any;\n private line: any;\n private _emptyChartId: string;\n\n constructor(props: ISparklineProps) {\n super(props);\n this.state = {\n _points: null,\n _width: this.props.width! || 80,\n _height: this.props.height! || 20,\n _valueTextWidth: this.props.valueTextWidth! || 80,\n };\n this._emptyChartId = getId('_SparklineChart_empty');\n }\n\n public componentDidMount() {\n if (!this._isChartEmpty()) {\n const area = d3Area()\n /* eslint-disable @typescript-eslint/no-explicit-any */\n .x((d: any) => this.x(d.x))\n .y0(this.state._height)\n /* eslint-disable @typescript-eslint/no-explicit-any */\n .y1((d: any) => this.y(d.y))\n .curve(d3curveLinear);\n this.area = area;\n\n const line = d3Line()\n /* eslint-disable @typescript-eslint/no-explicit-any */\n .x((d: any) => this.x(d.x))\n /* eslint-disable @typescript-eslint/no-explicit-any */\n .y((d: any) => this.y(d.y))\n .curve(d3curveLinear);\n this.line = line;\n\n const points = this.props.data!.lineChartData![0].data;\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const [xMin, xMax] = d3Extent(points, (d: any) => d.x);\n\n this.x = d3ScaleLinear()\n .domain([xMin, xMax])\n .range([this.margin.left!, this.state._width - this.margin.right!]);\n this.y = d3ScaleLinear()\n /* eslint-disable @typescript-eslint/no-explicit-any */\n .domain([0, d3Max(points, (d: any) => d.y)])\n .range([this.state._height - this.margin.bottom!, this.margin.top!]);\n\n this.setState({\n _points: points,\n });\n }\n }\n\n public drawSparkline() {\n return (\n <>\n <path\n className=\"line\"\n d={this.line(this.state._points)}\n fill={'transparent'}\n opacity={1}\n strokeWidth={2}\n stroke={this.props.data!.lineChartData![0].color!}\n />\n <path\n className=\"area\"\n d={this.area(this.state._points)}\n opacity={1}\n fillOpacity={0.2}\n fill={this.props.data!.lineChartData![0].color!}\n aria-label={`Sparkline with label ${this.props.data!.lineChartData![0].legend!}`}\n />\n </>\n );\n }\n\n public render() {\n const classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n });\n return !this._isChartEmpty() ? (\n <FocusZone\n direction={FocusZoneDirection.horizontal}\n isCircularNavigation={true}\n className={classNames.inlineBlock}\n >\n <div className={classNames.inlineBlock}>\n {this.state._width >= 50 && this.state._height >= 16 ? (\n <svg width={this.state._width} height={this.state._height} data-is-focusable={true}>\n {this.state._points ? this.drawSparkline() : null}\n </svg>\n ) : (\n <></>\n )}\n {this.props.showLegend && this.props.data!.lineChartData![0].legend ? (\n <svg width={this.state._valueTextWidth} height={this.state._height} data-is-focusable={true}>\n <text x=\"0%\" dx={8} y=\"100%\" dy={-5} className={classNames.valueText}>\n {this.props.data!.lineChartData![0].legend!}\n </text>\n </svg>\n ) : (\n <></>\n )}\n </div>\n </FocusZone>\n ) : (\n <div\n id={this._emptyChartId}\n role={'alert'}\n style={{ opacity: '0' }}\n aria-label={'Graph has no data to display'}\n />\n );\n }\n\n private _isChartEmpty(): boolean {\n return !(\n this.props.data &&\n this.props.data.lineChartData &&\n this.props.data.lineChartData.length > 0 &&\n this.props.data.lineChartData.filter(item => item.data.length === 0).length === 0\n );\n }\n}\n"]}
|
|
@@ -17,7 +17,6 @@ export interface IMultiStackedBarChartState {
|
|
|
17
17
|
dataPointCalloutProps?: IChartDataPoint;
|
|
18
18
|
callOutAccessibilityData?: IAccessibilityProps;
|
|
19
19
|
calloutLegend: string;
|
|
20
|
-
emptyChart?: boolean;
|
|
21
20
|
}
|
|
22
21
|
export declare class MultiStackedBarChartBase extends React.Component<IMultiStackedBarChartProps, IMultiStackedBarChartState> {
|
|
23
22
|
static defaultProps: Partial<IMultiStackedBarChartProps>;
|
|
@@ -26,8 +25,8 @@ export declare class MultiStackedBarChartBase extends React.Component<IMultiStac
|
|
|
26
25
|
private _calloutAnchorPoint;
|
|
27
26
|
private _longestBarTotalValue;
|
|
28
27
|
private _isRTL;
|
|
28
|
+
private _emptyChartId;
|
|
29
29
|
constructor(props: IMultiStackedBarChartProps);
|
|
30
|
-
componentDidMount(): void;
|
|
31
30
|
render(): JSX.Element;
|
|
32
31
|
private _createBarsAndLegends;
|
|
33
32
|
private _onBarFocus;
|
|
@@ -55,4 +54,5 @@ export declare class MultiStackedBarChartBase extends React.Component<IMultiStac
|
|
|
55
54
|
private _noLegendHighlighted;
|
|
56
55
|
private _getAriaLabel;
|
|
57
56
|
private _computeLongestBarTotalValue;
|
|
57
|
+
private _isChartEmpty;
|
|
58
58
|
}
|
|
@@ -130,24 +130,16 @@ define(["require", "exports", "tslib", "react", "@fluentui/react/lib/Utilities",
|
|
|
130
130
|
xCalloutValue: '',
|
|
131
131
|
yCalloutValue: '',
|
|
132
132
|
calloutLegend: '',
|
|
133
|
-
emptyChart: false,
|
|
134
133
|
};
|
|
135
134
|
_this._onLeave = _this._onLeave.bind(_this);
|
|
136
135
|
_this._onBarLeave = _this._onBarLeave.bind(_this);
|
|
137
136
|
_this._calloutId = (0, Utilities_1.getId)('callout');
|
|
137
|
+
_this._emptyChartId = (0, Utilities_1.getId)('_MSBC_empty');
|
|
138
138
|
return _this;
|
|
139
139
|
}
|
|
140
|
-
MultiStackedBarChartBase.prototype.componentDidMount = function () {
|
|
141
|
-
var isChartEmpty = !(this.props.data &&
|
|
142
|
-
this.props.data.length > 0 &&
|
|
143
|
-
this.props.data.filter(function (item) { return item.chartData && item.chartData.length === 0; }).length === 0);
|
|
144
|
-
if (this.state.emptyChart !== isChartEmpty) {
|
|
145
|
-
this.setState({ emptyChart: isChartEmpty });
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
140
|
MultiStackedBarChartBase.prototype.render = function () {
|
|
149
141
|
var _this = this;
|
|
150
|
-
if (!this.
|
|
142
|
+
if (!this._isChartEmpty()) {
|
|
151
143
|
var _a = this.props, data = _a.data, theme = _a.theme, culture = _a.culture;
|
|
152
144
|
this._adjustProps();
|
|
153
145
|
var palette_1 = theme.palette;
|
|
@@ -174,7 +166,7 @@ define(["require", "exports", "tslib", "react", "@fluentui/react/lib/Utilities",
|
|
|
174
166
|
shouldUpdateWhenHidden: true }, this.props.calloutProps, (0, index_3.getAccessibleDataObject)(this.state.callOutAccessibilityData, 'text', false)),
|
|
175
167
|
React.createElement(React.Fragment, null, this.props.onRenderCalloutPerDataPoint ? (this.props.onRenderCalloutPerDataPoint(this.state.dataPointCalloutProps)) : (React.createElement(index_3.ChartHoverCard, { Legend: legendName, YValue: calloutYVal, color: this.state.color, culture: culture }))))));
|
|
176
168
|
}
|
|
177
|
-
return (React.createElement("div", { id:
|
|
169
|
+
return (React.createElement("div", { id: this._emptyChartId, role: 'alert', style: { opacity: '0' }, "aria-label": 'Graph has no data to display' }));
|
|
178
170
|
};
|
|
179
171
|
MultiStackedBarChartBase.prototype._createBarsAndLegends = function (data, barHeight, palette, hideRatio, hideDenominator, href) {
|
|
180
172
|
var _this = this;
|
|
@@ -351,6 +343,11 @@ define(["require", "exports", "tslib", "react", "@fluentui/react/lib/Utilities",
|
|
|
351
343
|
MultiStackedBarChartBase.prototype._redirectToUrl = function (href) {
|
|
352
344
|
href ? (window.location.href = href) : '';
|
|
353
345
|
};
|
|
346
|
+
MultiStackedBarChartBase.prototype._isChartEmpty = function () {
|
|
347
|
+
return !(this.props.data &&
|
|
348
|
+
this.props.data.length > 0 &&
|
|
349
|
+
this.props.data.filter(function (item) { return item.chartData && item.chartData.length === 0; }).length === 0);
|
|
350
|
+
};
|
|
354
351
|
MultiStackedBarChartBase.defaultProps = {
|
|
355
352
|
barHeight: 12,
|
|
356
353
|
hideRatio: [],
|