@fluentui/react-charting 5.16.56 → 5.16.58
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 +45 -1
- package/CHANGELOG.md +21 -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 +3 -3
|
@@ -80,16 +80,13 @@ var SankeyChartBase = /** @class */ (function (_super) {
|
|
|
80
80
|
selectedNodes: new Set(),
|
|
81
81
|
shouldOverflow: false,
|
|
82
82
|
isCalloutVisible: false,
|
|
83
|
-
emptyChart: !(_this.props.data &&
|
|
84
|
-
_this.props.data.SankeyChartData &&
|
|
85
|
-
_this.props.data.SankeyChartData.nodes.length > 0 &&
|
|
86
|
-
_this.props.data.SankeyChartData.links.length > 0),
|
|
87
83
|
};
|
|
88
84
|
_this._calloutId = getId('callout');
|
|
89
85
|
_this._linkId = getId('link');
|
|
90
86
|
_this._margins = { top: 36, right: 48, bottom: 32, left: 48 };
|
|
91
87
|
_this._preRenderLayout();
|
|
92
88
|
_this._normalizeData = memoizeFunction(function (data) { return _this._normalizeSankeyData(data); });
|
|
89
|
+
_this._emptyChartId = getId('_SankeyChart_empty');
|
|
93
90
|
return _this;
|
|
94
91
|
}
|
|
95
92
|
SankeyChartBase.prototype.componentDidMount = function () {
|
|
@@ -105,7 +102,7 @@ var SankeyChartBase = /** @class */ (function (_super) {
|
|
|
105
102
|
};
|
|
106
103
|
SankeyChartBase.prototype.render = function () {
|
|
107
104
|
var _this = this;
|
|
108
|
-
if (!this.
|
|
105
|
+
if (!this._isChartEmpty()) {
|
|
109
106
|
var _a = this.props, theme = _a.theme, className = _a.className, styles = _a.styles, pathColor = _a.pathColor;
|
|
110
107
|
this._classNames = getClassNames(styles, {
|
|
111
108
|
theme: theme,
|
|
@@ -148,7 +145,7 @@ var SankeyChartBase = /** @class */ (function (_super) {
|
|
|
148
145
|
calloutProps.isCalloutVisible && (React.createElement(Callout, __assign({}, calloutProps),
|
|
149
146
|
React.createElement(ChartHoverCard, { XValue: calloutProps.XValue, YValue: calloutProps.YValue, color: calloutProps.color, descriptionMessage: calloutProps.descriptionMessage ? calloutProps.descriptionMessage : '' })))))));
|
|
150
147
|
}
|
|
151
|
-
return (React.createElement("div", { id:
|
|
148
|
+
return (React.createElement("div", { id: this._emptyChartId, role: 'alert', style: { opacity: '0' }, "aria-label": 'Graph has no data to display' }));
|
|
152
149
|
};
|
|
153
150
|
SankeyChartBase.prototype._preRenderLayout = function () {
|
|
154
151
|
var width = this.state.containerWidth - this._margins.right;
|
|
@@ -605,8 +602,8 @@ var SankeyChartBase = /** @class */ (function (_super) {
|
|
|
605
602
|
var _a = this.state, containerWidth = _a.containerWidth, containerHeight = _a.containerHeight;
|
|
606
603
|
this._reqID = requestAnimationFrame(function () {
|
|
607
604
|
var container = _this.props.parentRef ? _this.props.parentRef : _this.chartContainer;
|
|
608
|
-
var currentContainerWidth = container.getBoundingClientRect().width;
|
|
609
|
-
var currentContainerHeight = container.getBoundingClientRect().height;
|
|
605
|
+
var currentContainerWidth = container && container.getBoundingClientRect().width;
|
|
606
|
+
var currentContainerHeight = container && container.getBoundingClientRect().height;
|
|
610
607
|
var shouldResize = containerWidth !== currentContainerWidth || containerHeight !== currentContainerHeight;
|
|
611
608
|
if (shouldResize) {
|
|
612
609
|
_this.setState({
|
|
@@ -675,6 +672,12 @@ var SankeyChartBase = /** @class */ (function (_super) {
|
|
|
675
672
|
SankeyChartBase.prototype._hideTooltip = function (div) {
|
|
676
673
|
div.style('opacity', 0);
|
|
677
674
|
};
|
|
675
|
+
SankeyChartBase.prototype._isChartEmpty = function () {
|
|
676
|
+
return !(this.props.data &&
|
|
677
|
+
this.props.data.SankeyChartData &&
|
|
678
|
+
this.props.data.SankeyChartData.nodes.length > 0 &&
|
|
679
|
+
this.props.data.SankeyChartData.links.length > 0);
|
|
680
|
+
};
|
|
678
681
|
return SankeyChartBase;
|
|
679
682
|
}(React.Component));
|
|
680
683
|
export { 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
|
}
|
|
@@ -21,20 +21,13 @@ var SparklineBase = /** @class */ (function (_super) {
|
|
|
21
21
|
_width: _this.props.width || 80,
|
|
22
22
|
_height: _this.props.height || 20,
|
|
23
23
|
_valueTextWidth: _this.props.valueTextWidth || 80,
|
|
24
|
-
_emptyChart: false,
|
|
25
24
|
};
|
|
25
|
+
_this._emptyChartId = getId('_SparklineChart_empty');
|
|
26
26
|
return _this;
|
|
27
27
|
}
|
|
28
28
|
SparklineBase.prototype.componentDidMount = function () {
|
|
29
29
|
var _this = this;
|
|
30
|
-
|
|
31
|
-
this.props.data.lineChartData &&
|
|
32
|
-
this.props.data.lineChartData.length > 0 &&
|
|
33
|
-
this.props.data.lineChartData.filter(function (item) { return item.data.length === 0; }).length === 0);
|
|
34
|
-
if (this.state._emptyChart !== isChartEmpty) {
|
|
35
|
-
this.setState({ _emptyChart: isChartEmpty });
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
30
|
+
if (!this._isChartEmpty()) {
|
|
38
31
|
var area = d3Area()
|
|
39
32
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
40
33
|
.x(function (d) { return _this.x(d.x); })
|
|
@@ -74,11 +67,17 @@ var SparklineBase = /** @class */ (function (_super) {
|
|
|
74
67
|
var classNames = getClassNames(this.props.styles, {
|
|
75
68
|
theme: this.props.theme,
|
|
76
69
|
});
|
|
77
|
-
return !this.
|
|
70
|
+
return !this._isChartEmpty() ? (React.createElement(FocusZone, { direction: FocusZoneDirection.horizontal, isCircularNavigation: true, className: classNames.inlineBlock },
|
|
78
71
|
React.createElement("div", { className: classNames.inlineBlock },
|
|
79
72
|
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)),
|
|
80
73
|
this.props.showLegend && this.props.data.lineChartData[0].legend ? (React.createElement("svg", { width: this.state._valueTextWidth, height: this.state._height, "data-is-focusable": true },
|
|
81
|
-
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:
|
|
74
|
+
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' }));
|
|
75
|
+
};
|
|
76
|
+
SparklineBase.prototype._isChartEmpty = function () {
|
|
77
|
+
return !(this.props.data &&
|
|
78
|
+
this.props.data.lineChartData &&
|
|
79
|
+
this.props.data.lineChartData.length > 0 &&
|
|
80
|
+
this.props.data.lineChartData.filter(function (item) { return item.data.length === 0; }).length === 0);
|
|
82
81
|
};
|
|
83
82
|
return SparklineBase;
|
|
84
83
|
}(React.Component));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sparkline.base.js","sourceRoot":"../src/","sources":["components/Sparkline/Sparkline.base.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,IAAI,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,IAAI,IAAI,MAAM,EAAE,WAAW,IAAI,aAAa,EAAE,MAAM,UAAU,CAAC;AACxF,OAAO,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAG1E,IAAM,aAAa,GAAG,kBAAkB,EAA0C,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
|
}
|
|
@@ -136,24 +136,16 @@ var MultiStackedBarChartBase = /** @class */ (function (_super) {
|
|
|
136
136
|
xCalloutValue: '',
|
|
137
137
|
yCalloutValue: '',
|
|
138
138
|
calloutLegend: '',
|
|
139
|
-
emptyChart: false,
|
|
140
139
|
};
|
|
141
140
|
_this._onLeave = _this._onLeave.bind(_this);
|
|
142
141
|
_this._onBarLeave = _this._onBarLeave.bind(_this);
|
|
143
142
|
_this._calloutId = getId('callout');
|
|
143
|
+
_this._emptyChartId = getId('_MSBC_empty');
|
|
144
144
|
return _this;
|
|
145
145
|
}
|
|
146
|
-
MultiStackedBarChartBase.prototype.componentDidMount = function () {
|
|
147
|
-
var isChartEmpty = !(this.props.data &&
|
|
148
|
-
this.props.data.length > 0 &&
|
|
149
|
-
this.props.data.filter(function (item) { return item.chartData && item.chartData.length === 0; }).length === 0);
|
|
150
|
-
if (this.state.emptyChart !== isChartEmpty) {
|
|
151
|
-
this.setState({ emptyChart: isChartEmpty });
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
146
|
MultiStackedBarChartBase.prototype.render = function () {
|
|
155
147
|
var _this = this;
|
|
156
|
-
if (!this.
|
|
148
|
+
if (!this._isChartEmpty()) {
|
|
157
149
|
var _a = this.props, data = _a.data, theme = _a.theme, culture = _a.culture;
|
|
158
150
|
this._adjustProps();
|
|
159
151
|
var palette_1 = theme.palette;
|
|
@@ -180,7 +172,7 @@ var MultiStackedBarChartBase = /** @class */ (function (_super) {
|
|
|
180
172
|
shouldUpdateWhenHidden: true }, this.props.calloutProps, getAccessibleDataObject(this.state.callOutAccessibilityData, 'text', false)),
|
|
181
173
|
React.createElement(React.Fragment, null, this.props.onRenderCalloutPerDataPoint ? (this.props.onRenderCalloutPerDataPoint(this.state.dataPointCalloutProps)) : (React.createElement(ChartHoverCard, { Legend: legendName, YValue: calloutYVal, color: this.state.color, culture: culture }))))));
|
|
182
174
|
}
|
|
183
|
-
return (React.createElement("div", { id:
|
|
175
|
+
return (React.createElement("div", { id: this._emptyChartId, role: 'alert', style: { opacity: '0' }, "aria-label": 'Graph has no data to display' }));
|
|
184
176
|
};
|
|
185
177
|
MultiStackedBarChartBase.prototype._createBarsAndLegends = function (data, barHeight, palette, hideRatio, hideDenominator, href) {
|
|
186
178
|
var _this = this;
|
|
@@ -357,6 +349,11 @@ var MultiStackedBarChartBase = /** @class */ (function (_super) {
|
|
|
357
349
|
MultiStackedBarChartBase.prototype._redirectToUrl = function (href) {
|
|
358
350
|
href ? (window.location.href = href) : '';
|
|
359
351
|
};
|
|
352
|
+
MultiStackedBarChartBase.prototype._isChartEmpty = function () {
|
|
353
|
+
return !(this.props.data &&
|
|
354
|
+
this.props.data.length > 0 &&
|
|
355
|
+
this.props.data.filter(function (item) { return item.chartData && item.chartData.length === 0; }).length === 0);
|
|
356
|
+
};
|
|
360
357
|
MultiStackedBarChartBase.defaultProps = {
|
|
361
358
|
barHeight: 12,
|
|
362
359
|
hideRatio: [],
|