@fluentui/react-charting 5.9.45 → 5.9.48
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 +52 -1
- package/CHANGELOG.md +30 -2
- package/dist/react-charting.js +1 -1
- package/dist/react-charting.min.js +1 -1
- package/lib/components/CommonComponents/CartesianChart.base.d.ts +1 -0
- package/lib/components/CommonComponents/CartesianChart.base.js +19 -1
- package/lib/components/CommonComponents/CartesianChart.base.js.map +1 -1
- package/lib/components/CommonComponents/CartesianChart.types.d.ts +5 -0
- package/lib/components/CommonComponents/CartesianChart.types.js.map +1 -1
- package/lib/components/DonutChart/Arc/Arc.d.ts +1 -0
- package/lib/components/DonutChart/Arc/Arc.js +12 -0
- package/lib/components/DonutChart/Arc/Arc.js.map +1 -1
- package/lib/utilities/utilities.d.ts +6 -0
- package/lib/utilities/utilities.js +76 -1
- package/lib/utilities/utilities.js.map +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/lib-amd/components/CommonComponents/CartesianChart.base.d.ts +1 -0
- package/lib-amd/components/CommonComponents/CartesianChart.base.js +18 -0
- package/lib-amd/components/CommonComponents/CartesianChart.base.js.map +1 -1
- package/lib-amd/components/CommonComponents/CartesianChart.types.d.ts +5 -0
- package/lib-amd/components/CommonComponents/CartesianChart.types.js.map +1 -1
- package/lib-amd/components/DonutChart/Arc/Arc.d.ts +1 -0
- package/lib-amd/components/DonutChart/Arc/Arc.js +12 -1
- package/lib-amd/components/DonutChart/Arc/Arc.js.map +1 -1
- package/lib-amd/utilities/utilities.d.ts +6 -0
- package/lib-amd/utilities/utilities.js +78 -1
- package/lib-amd/utilities/utilities.js.map +1 -1
- package/lib-amd/version.js +1 -1
- package/lib-amd/version.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.base.d.ts +1 -0
- package/lib-commonjs/components/CommonComponents/CartesianChart.base.js +18 -0
- package/lib-commonjs/components/CommonComponents/CartesianChart.base.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.types.d.ts +5 -0
- package/lib-commonjs/components/CommonComponents/CartesianChart.types.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Arc/Arc.d.ts +1 -0
- package/lib-commonjs/components/DonutChart/Arc/Arc.js +12 -0
- package/lib-commonjs/components/DonutChart/Arc/Arc.js.map +1 -1
- package/lib-commonjs/utilities/utilities.d.ts +6 -0
- package/lib-commonjs/utilities/utilities.js +78 -1
- package/lib-commonjs/utilities/utilities.js.map +1 -1
- package/lib-commonjs/version.js +1 -1
- package/lib-commonjs/version.js.map +1 -1
- package/package.json +3 -3
- package/src/components/CommonComponents/CartesianChart.types.ts +6 -0
|
@@ -25,6 +25,7 @@ export declare class CartesianChartBase extends React.Component<IModifiedCartesi
|
|
|
25
25
|
private idForGraph;
|
|
26
26
|
private _reqID;
|
|
27
27
|
private _isRtl;
|
|
28
|
+
private _xScale;
|
|
28
29
|
constructor(props: IModifiedCartesianChartProps);
|
|
29
30
|
componentDidMount(): void;
|
|
30
31
|
componentWillUnmount(): void;
|
|
@@ -3,7 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { classNamesFunction, getId, getRTL } from '@fluentui/react/lib/Utilities';
|
|
4
4
|
import { Callout } from '@fluentui/react/lib/Callout';
|
|
5
5
|
import { FocusZone, FocusZoneDirection } from '@fluentui/react-focus';
|
|
6
|
-
import { ChartHoverCard, convertToLocaleString, createNumericXAxis, createStringXAxis, getAccessibleDataObject, getDomainNRangeValues, createDateXAxis, createYAxis, createStringYAxis, getMinMaxOfYAxis, XAxisTypes, YAxisType, createWrapOfXLabels, Points, pointTypes, } from '../../utilities/index';
|
|
6
|
+
import { ChartHoverCard, convertToLocaleString, createNumericXAxis, createStringXAxis, getAccessibleDataObject, getDomainNRangeValues, createDateXAxis, createYAxis, createStringYAxis, getMinMaxOfYAxis, XAxisTypes, YAxisType, createWrapOfXLabels, rotateXAxisLabels, Points, pointTypes, } from '../../utilities/index';
|
|
7
7
|
import { Shape } from '../Legends/index';
|
|
8
8
|
var getClassNames = classNamesFunction();
|
|
9
9
|
/**
|
|
@@ -81,6 +81,23 @@ var CartesianChartBase = /** @class */ (function (_super) {
|
|
|
81
81
|
if (prevProps.height !== this.props.height || prevProps.width !== this.props.width) {
|
|
82
82
|
this._fitParentContainer();
|
|
83
83
|
}
|
|
84
|
+
if (!this.props.wrapXAxisLables &&
|
|
85
|
+
this.props.rotateXAxisLables &&
|
|
86
|
+
this.props.xAxisType === XAxisTypes.StringAxis) {
|
|
87
|
+
var rotateLabelProps = {
|
|
88
|
+
node: this.xAxisElement,
|
|
89
|
+
xAxis: this._xScale,
|
|
90
|
+
};
|
|
91
|
+
var rotatedHeight = rotateXAxisLabels(rotateLabelProps);
|
|
92
|
+
if (this.state.isRemoveValCalculated &&
|
|
93
|
+
this.state._removalValueForTextTuncate !== rotatedHeight + this.margins.bottom &&
|
|
94
|
+
rotatedHeight > 0) {
|
|
95
|
+
this.setState({
|
|
96
|
+
_removalValueForTextTuncate: rotatedHeight + this.margins.bottom,
|
|
97
|
+
isRemoveValCalculated: false,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
84
101
|
};
|
|
85
102
|
CartesianChartBase.prototype.render = function () {
|
|
86
103
|
var _this = this;
|
|
@@ -134,6 +151,7 @@ var CartesianChartBase = /** @class */ (function (_super) {
|
|
|
134
151
|
default:
|
|
135
152
|
xScale = createNumericXAxis(XAxisParams, culture);
|
|
136
153
|
}
|
|
154
|
+
this._xScale = xScale;
|
|
137
155
|
/*
|
|
138
156
|
* To enable wrapping of x axis tick values or to disaply complete x axis tick values,
|
|
139
157
|
* we need to calculate how much space it needed to render the text.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CartesianChart.base.js","sourceRoot":"../src/","sources":["components/CommonComponents/CartesianChart.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { IProcessedStyleSet } from '@fluentui/react/lib/Styling';\nimport { classNamesFunction, getId, getRTL } from '@fluentui/react/lib/Utilities';\nimport { Callout } from '@fluentui/react/lib/Callout';\nimport { FocusZone, FocusZoneDirection } from '@fluentui/react-focus';\nimport {\n ICartesianChartStyles,\n ICartesianChartStyleProps,\n IModifiedCartesianChartProps,\n IYValueHover,\n} from '../../index';\nimport {\n ChartHoverCard,\n convertToLocaleString,\n createNumericXAxis,\n createStringXAxis,\n IAxisData,\n getAccessibleDataObject,\n getDomainNRangeValues,\n createDateXAxis,\n createYAxis,\n createStringYAxis,\n IMargins,\n getMinMaxOfYAxis,\n XAxisTypes,\n YAxisType,\n createWrapOfXLabels,\n Points,\n pointTypes,\n} from '../../utilities/index';\nimport { LegendShape, Shape } from '../Legends/index';\n\nconst getClassNames = classNamesFunction<ICartesianChartStyleProps, ICartesianChartStyles>();\n\nexport interface ICartesianChartState {\n containerWidth: number;\n containerHeight: number;\n _width: number;\n _height: number;\n /* To update this values using setState in render method.\n * To avoid multiple re renders, Only first time setting the value.\n */\n isRemoveValCalculated?: boolean;\n /* Used for when WrapXAxisLabels props appeared.\n * To display the total word (space separated words), Need to have more space than usual.\n * This height will get total height need to disaply total word.\n * These value need to be removed from actual svg height/graph height.\n * Defalut value is 0. And this values calculted when 'wrapXAxisLables' or 'showXAxisLablesTooltip' is true.\n */\n _removalValueForTextTuncate?: number;\n}\n\n/**\n * Cartesian chart used for\n * 1.draw X and Y axis of the chart\n * 2.Callout\n * 3.Fit parent Continer\n */\nexport class CartesianChartBase extends React.Component<IModifiedCartesianChartProps, ICartesianChartState> {\n private _classNames: IProcessedStyleSet<ICartesianChartStyles>;\n private chartContainer: HTMLDivElement;\n private legendContainer: HTMLDivElement;\n private minLegendContainerHeight: number = 32;\n private xAxisElement: SVGElement | null;\n private yAxisElement: SVGElement | null;\n private margins: IMargins;\n private idForGraph: string;\n private _reqID: number;\n private _isRtl: boolean = getRTL();\n\n constructor(props: IModifiedCartesianChartProps) {\n super(props);\n this.state = {\n containerHeight: 0,\n containerWidth: 0,\n _width: this.props.width || 600,\n _height: this.props.height || 350,\n _removalValueForTextTuncate: 0,\n isRemoveValCalculated: true,\n };\n this.idForGraph = getId('chart_');\n /**\n * In RTL mode, Only graph will be rendered left/right. We need to provide left and right margins manually.\n * So that, in RTL, left margins becomes right margins and viceversa.\n * As graph needs to be drawn perfecty, these values consider as default values.\n * Same margins using for all other cartesian charts. Can be accessible through 'getMargins' call back method.\n */\n this.margins = {\n top: this.props.margins?.top ?? 20,\n bottom: this.props.margins?.bottom ?? 35,\n right: this._isRtl ? this.props.margins?.left ?? 40 : this.props.margins?.right ?? 20,\n left: this._isRtl ? this.props.margins?.right ?? 20 : this.props.margins?.left ?? 40,\n };\n }\n\n public componentDidMount(): void {\n this._fitParentContainer();\n }\n\n public componentWillUnmount(): void {\n cancelAnimationFrame(this._reqID);\n }\n\n public componentDidUpdate(prevProps: IModifiedCartesianChartProps): void {\n if (prevProps.height !== this.props.height || prevProps.width !== this.props.width) {\n this._fitParentContainer();\n }\n }\n\n public render(): JSX.Element {\n const { calloutProps, points, chartType, chartHoverProps, svgFocusZoneProps, svgProps, culture } = this.props;\n if (this.props.parentRef) {\n this._fitParentContainer();\n }\n // Callback for margins to the chart\n this.props.getmargins && this.props.getmargins(this.margins);\n\n const XAxisParams = {\n domainNRangeValues: getDomainNRangeValues(\n points,\n this.margins,\n this.state.containerWidth,\n chartType,\n this._isRtl,\n this.props.xAxisType,\n this.props.barwidth!,\n this.props.tickValues!,\n ),\n xAxisElement: this.xAxisElement!,\n showRoundOffXTickValues: true,\n xAxisCount: this.props.xAxisTickCount,\n xAxistickSize: this.props.xAxistickSize,\n tickPadding: this.props.tickPadding || this.props.showXAxisLablesTooltip ? 5 : 10,\n xAxisPadding: this.props.xAxisPadding,\n };\n\n const YAxisParams = {\n margins: this.margins,\n containerWidth: this.state.containerWidth,\n containerHeight: this.state.containerHeight - this.state._removalValueForTextTuncate!,\n yAxisElement: this.yAxisElement,\n yAxisTickFormat: this.props.yAxisTickFormat!,\n yAxisTickCount: this.props.yAxisTickCount!,\n yMinValue: this.props.yMinValue || 0,\n yMaxValue: this.props.yMaxValue || 0,\n tickPadding: 10,\n maxOfYVal: this.props.maxOfYVal,\n yMinMaxValues: getMinMaxOfYAxis(points, chartType),\n yAxisPadding: this.props.yAxisPadding,\n };\n\n /**\n * These scales used for 2 purposes.\n * 1. To create x and y axis\n * 2. To draw the graph.\n * For area/line chart using same scales. For other charts, creating their own scales to draw the graph.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let xScale: any;\n switch (this.props.xAxisType!) {\n case XAxisTypes.NumericAxis:\n xScale = createNumericXAxis(XAxisParams, culture);\n break;\n case XAxisTypes.DateAxis:\n xScale = createDateXAxis(XAxisParams, this.props.tickParams!);\n break;\n case XAxisTypes.StringAxis:\n xScale = createStringXAxis(XAxisParams, this.props.tickParams!, this.props.datasetForXAxisDomain!, culture);\n break;\n default:\n xScale = createNumericXAxis(XAxisParams, culture);\n }\n\n /*\n * To enable wrapping of x axis tick values or to disaply complete x axis tick values,\n * we need to calculate how much space it needed to render the text.\n * No need to re-calculate every time the chart renders and same time need to get an update. So using setState.\n * Required space will be calculated first time chart rendering and if any width/height of chart updated.\n * */\n if (this.props.wrapXAxisLables || this.props.showXAxisLablesTooltip) {\n const wrapLabelProps = {\n node: this.xAxisElement,\n xAxis: xScale,\n showXAxisLablesTooltip: this.props.showXAxisLablesTooltip || false,\n noOfCharsToTruncate: this.props.noOfCharsToTruncate || 4,\n };\n const temp = xScale && (createWrapOfXLabels(wrapLabelProps) as number);\n // this value need to be updated for draw graph updated. So instead of using private value, using set state.\n if (this.state.isRemoveValCalculated && this.state._removalValueForTextTuncate !== temp) {\n this.setState({ _removalValueForTextTuncate: temp, isRemoveValCalculated: false });\n }\n }\n\n /**\n * These scales used for 2 purposes.\n * 1. To create x and y axis\n * 2. To draw the graph.\n * For area/line chart using same scales. For other charts, creating their own scales to draw the graph.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let yScale: any;\n const axisData: IAxisData = { yAxisDomainValues: [] };\n if (this.props.yAxisType && this.props.yAxisType === YAxisType.StringAxis) {\n yScale = createStringYAxis(YAxisParams, this.props.stringDatasetForYAxisDomain!, this._isRtl);\n } else {\n yScale = createYAxis(YAxisParams, this._isRtl, axisData);\n }\n this.props.getAxisData && this.props.getAxisData(axisData);\n // Callback function for chart, returns axis\n this._getData(xScale, yScale);\n\n this._classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n width: this.state._width,\n height: this.state._height,\n className: this.props.className,\n isRtl: this._isRtl,\n });\n\n const svgDimensions = {\n width: this.state.containerWidth,\n height: this.state.containerHeight,\n };\n\n const children = this.props.children({\n ...this.state,\n xScale,\n yScale,\n });\n\n let focusDirection;\n if (this.props.focusZoneDirection === FocusZoneDirection.vertical) {\n focusDirection = this.props.focusZoneDirection;\n } else if (this.props.focusZoneDirection) {\n focusDirection = this.props.focusZoneDirection;\n } else {\n focusDirection = FocusZoneDirection.horizontal;\n }\n return (\n <div\n id={this.idForGraph}\n className={this._classNames.root}\n role={'presentation'}\n ref={(rootElem: HTMLDivElement) => (this.chartContainer = rootElem)}\n onMouseLeave={this.props.onChartMouseLeave}\n >\n <FocusZone direction={focusDirection} {...svgFocusZoneProps}>\n <svg\n width={svgDimensions.width}\n height={svgDimensions.height}\n aria-label={this.props.chartTitle}\n style={{ display: 'block' }}\n {...svgProps}\n >\n <g\n ref={(e: SVGElement | null) => {\n this.xAxisElement = e;\n }}\n id={`xAxisGElement${this.idForGraph}`}\n // To add wrap of x axis lables feature, need to remove word height from svg height.\n transform={`translate(0, ${\n svgDimensions.height - this.margins.bottom! - this.state._removalValueForTextTuncate!\n })`}\n className={this._classNames.xAxis}\n />\n <g\n ref={(e: SVGElement | null) => {\n this.yAxisElement = e;\n }}\n id={`yAxisGElement${this.idForGraph}`}\n transform={`translate(${\n this._isRtl ? svgDimensions.width - this.margins.right! : this.margins.left!\n }, 0)`}\n className={this._classNames.yAxis}\n />\n {children}\n </svg>\n </FocusZone>\n {!this.props.hideLegend && (\n <div ref={(e: HTMLDivElement) => (this.legendContainer = e)} className={this._classNames.legendContainer}>\n {this.props.legendBars}\n </div>\n )}\n {!this.props.hideTooltip && calloutProps!.isCalloutVisible && (\n <Callout {...calloutProps}>\n {/** Given custom callout, then it will render */}\n {this.props.customizedCallout && this.props.customizedCallout}\n {/** single x point its corresponding y points of all the bars/lines in chart will render in callout */}\n {!this.props.customizedCallout && this.props.isCalloutForStack && this._multiValueCallout(calloutProps)}\n {/** single x point its corresponding y point of single line/bar in the chart will render in callout */}\n {!this.props.customizedCallout && !this.props.isCalloutForStack && (\n <ChartHoverCard\n XValue={calloutProps.XValue}\n Legend={calloutProps.legend!}\n YValue={calloutProps.YValue!}\n color={calloutProps.color!}\n culture={this.props.culture}\n {...chartHoverProps}\n />\n )}\n </Callout>\n )}\n </div>\n );\n }\n\n // TO DO: Write a common functional component for Multi value callout and divide sub count method\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _multiValueCallout = (calloutProps: any) => {\n const yValueHoverSubCountsExists: boolean = this._yValueHoverSubCountsExists(calloutProps.YValueHover);\n return (\n <div className={this._classNames.calloutContentRoot}>\n <div\n className={this._classNames.calloutDateTimeContainer}\n style={yValueHoverSubCountsExists ? { marginBottom: '11px' } : {}}\n >\n <div\n className={this._classNames.calloutContentX}\n {...getAccessibleDataObject(calloutProps!.xAxisCalloutAccessibilityData, 'text', false)}\n >\n {convertToLocaleString(calloutProps!.hoverXValue, this.props.culture)}\n </div>\n </div>\n <div\n className={this._classNames.calloutInfoContainer}\n style={yValueHoverSubCountsExists ? { display: 'flex' } : {}}\n >\n {calloutProps!.YValueHover &&\n calloutProps!.YValueHover.map((yValue: IYValueHover, index: number, yValues: IYValueHover[]) => {\n const isLast: boolean = index + 1 === yValues.length;\n const { shouldDrawBorderBottom = false } = yValue;\n return (\n <div\n {...getAccessibleDataObject(yValue.callOutAccessibilityData, 'text', false)}\n key={`callout-content-${index}`}\n style={\n yValueHoverSubCountsExists\n ? {\n display: 'inline-block',\n ...(shouldDrawBorderBottom && {\n borderBottom: `1px solid ${this.props.theme!.semanticColors.menuDivider}`,\n paddingBottom: '10px',\n }),\n }\n : {\n ...(shouldDrawBorderBottom && {\n borderBottom: `1px solid ${this.props.theme!.semanticColors.menuDivider}`,\n paddingBottom: '10px',\n }),\n }\n }\n >\n {this._getCalloutContent(yValue, index, yValueHoverSubCountsExists, isLast)}\n </div>\n );\n })}\n {!!calloutProps.descriptionMessage && (\n <div className={this._classNames.descriptionMessage}>{calloutProps.descriptionMessage}</div>\n )}\n </div>\n </div>\n );\n };\n\n private _yValueHoverSubCountsExists(yValueHover?: IYValueHover[]) {\n if (yValueHover) {\n return yValueHover.some(\n (yValue: {\n legend?: string;\n y?: number;\n color?: string;\n yAxisCalloutData?: string | { [id: string]: number };\n }) => yValue.yAxisCalloutData && typeof yValue.yAxisCalloutData !== 'string',\n );\n }\n return false;\n }\n\n private _getCalloutContent(\n xValue: IYValueHover,\n index: number,\n yValueHoverSubCountsExists: boolean,\n isLast: boolean,\n ): React.ReactNode {\n const marginStyle: React.CSSProperties = isLast ? {} : { marginRight: '16px' };\n const toDrawShape = xValue.index !== undefined && xValue.index !== -1;\n const _classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n width: this.state._width,\n height: this.state._height,\n className: this.props.className,\n isRtl: this._isRtl,\n lineColor: xValue.color,\n toDrawShape,\n });\n\n const { culture } = this.props;\n const yValue = convertToLocaleString(xValue.y, culture);\n if (!xValue.yAxisCalloutData || typeof xValue.yAxisCalloutData === 'string') {\n return (\n <div style={yValueHoverSubCountsExists ? marginStyle : {}}>\n {yValueHoverSubCountsExists && (\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n )}\n <div id={`${index}_${xValue.y}`} className={_classNames.calloutBlockContainer}>\n {toDrawShape && (\n <Shape\n svgProps={{\n className: _classNames.shapeStyles,\n }}\n pathProps={{ fill: xValue.color }}\n shape={Points[xValue.index! % Object.keys(pointTypes).length] as LegendShape}\n />\n )}\n <div>\n <div className={_classNames.calloutlegendText}> {xValue.legend}</div>\n <div className={_classNames.calloutContentY}>\n {convertToLocaleString(\n xValue.yAxisCalloutData ? xValue.yAxisCalloutData : xValue.y || xValue.data,\n culture,\n )}\n </div>\n </div>\n </div>\n </div>\n );\n } else {\n const subcounts: { [id: string]: number } = xValue.yAxisCalloutData as { [id: string]: number };\n return (\n <div style={marginStyle}>\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n {Object.keys(subcounts).map((subcountName: string) => {\n return (\n <div key={subcountName} className={_classNames.calloutBlockContainer}>\n <div className={_classNames.calloutlegendText}> {convertToLocaleString(subcountName, culture)}</div>\n <div className={_classNames.calloutContentY}>\n {convertToLocaleString(subcounts[subcountName], culture)}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n }\n\n /**\n * When screen resizes, along with screen, chart also auto adjusted.\n * This method used to adjust height and width of the charts.\n */\n private _fitParentContainer(): void {\n const { containerWidth, containerHeight } = this.state;\n this._reqID = requestAnimationFrame(() => {\n let legendContainerHeight;\n if (this.props.hideLegend) {\n // If there is no legend, need not to allocate some space from total chart space.\n legendContainerHeight = 0;\n } else {\n const legendContainerComputedStyles = getComputedStyle(this.legendContainer);\n legendContainerHeight =\n (this.legendContainer.getBoundingClientRect().height || this.minLegendContainerHeight) +\n parseFloat(legendContainerComputedStyles.marginTop || '0') +\n parseFloat(legendContainerComputedStyles.marginBottom || '0');\n }\n const container = this.props.parentRef ? this.props.parentRef : this.chartContainer;\n const currentContainerWidth = container.getBoundingClientRect().width;\n const currentContainerHeight =\n container.getBoundingClientRect().height > legendContainerHeight\n ? container.getBoundingClientRect().height\n : 350;\n const shouldResize =\n containerWidth !== currentContainerWidth || containerHeight !== currentContainerHeight - legendContainerHeight;\n if (shouldResize) {\n this.setState({\n containerWidth: currentContainerWidth,\n containerHeight: currentContainerHeight - legendContainerHeight,\n });\n }\n });\n }\n\n // Call back to the chart.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _getData = (xScale: any, yScale: any) => {\n this.props.getGraphData &&\n this.props.getGraphData(\n xScale,\n yScale,\n this.state.containerHeight - this.state._removalValueForTextTuncate!,\n this.state.containerWidth,\n this.xAxisElement,\n );\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CartesianChart.base.js","sourceRoot":"../src/","sources":["components/CommonComponents/CartesianChart.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { IProcessedStyleSet } from '@fluentui/react/lib/Styling';\nimport { classNamesFunction, getId, getRTL } from '@fluentui/react/lib/Utilities';\nimport { Callout } from '@fluentui/react/lib/Callout';\nimport { FocusZone, FocusZoneDirection } from '@fluentui/react-focus';\nimport {\n ICartesianChartStyles,\n ICartesianChartStyleProps,\n IModifiedCartesianChartProps,\n IYValueHover,\n} from '../../index';\nimport {\n ChartHoverCard,\n convertToLocaleString,\n createNumericXAxis,\n createStringXAxis,\n IAxisData,\n getAccessibleDataObject,\n getDomainNRangeValues,\n createDateXAxis,\n createYAxis,\n createStringYAxis,\n IMargins,\n getMinMaxOfYAxis,\n XAxisTypes,\n YAxisType,\n createWrapOfXLabels,\n rotateXAxisLabels,\n Points,\n pointTypes,\n} from '../../utilities/index';\nimport { LegendShape, Shape } from '../Legends/index';\n\nconst getClassNames = classNamesFunction<ICartesianChartStyleProps, ICartesianChartStyles>();\n\nexport interface ICartesianChartState {\n containerWidth: number;\n containerHeight: number;\n _width: number;\n _height: number;\n /* To update this values using setState in render method.\n * To avoid multiple re renders, Only first time setting the value.\n */\n isRemoveValCalculated?: boolean;\n /* Used for when WrapXAxisLabels props appeared.\n * To display the total word (space separated words), Need to have more space than usual.\n * This height will get total height need to disaply total word.\n * These value need to be removed from actual svg height/graph height.\n * Defalut value is 0. And this values calculted when 'wrapXAxisLables' or 'showXAxisLablesTooltip' is true.\n */\n _removalValueForTextTuncate?: number;\n}\n\n/**\n * Cartesian chart used for\n * 1.draw X and Y axis of the chart\n * 2.Callout\n * 3.Fit parent Continer\n */\nexport class CartesianChartBase extends React.Component<IModifiedCartesianChartProps, ICartesianChartState> {\n private _classNames: IProcessedStyleSet<ICartesianChartStyles>;\n private chartContainer: HTMLDivElement;\n private legendContainer: HTMLDivElement;\n private minLegendContainerHeight: number = 32;\n private xAxisElement: SVGElement | null;\n private yAxisElement: SVGElement | null;\n private margins: IMargins;\n private idForGraph: string;\n private _reqID: number;\n private _isRtl: boolean = getRTL();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _xScale: any;\n\n constructor(props: IModifiedCartesianChartProps) {\n super(props);\n this.state = {\n containerHeight: 0,\n containerWidth: 0,\n _width: this.props.width || 600,\n _height: this.props.height || 350,\n _removalValueForTextTuncate: 0,\n isRemoveValCalculated: true,\n };\n this.idForGraph = getId('chart_');\n /**\n * In RTL mode, Only graph will be rendered left/right. We need to provide left and right margins manually.\n * So that, in RTL, left margins becomes right margins and viceversa.\n * As graph needs to be drawn perfecty, these values consider as default values.\n * Same margins using for all other cartesian charts. Can be accessible through 'getMargins' call back method.\n */\n this.margins = {\n top: this.props.margins?.top ?? 20,\n bottom: this.props.margins?.bottom ?? 35,\n right: this._isRtl ? this.props.margins?.left ?? 40 : this.props.margins?.right ?? 20,\n left: this._isRtl ? this.props.margins?.right ?? 20 : this.props.margins?.left ?? 40,\n };\n }\n\n public componentDidMount(): void {\n this._fitParentContainer();\n }\n\n public componentWillUnmount(): void {\n cancelAnimationFrame(this._reqID);\n }\n\n public componentDidUpdate(prevProps: IModifiedCartesianChartProps): void {\n if (prevProps.height !== this.props.height || prevProps.width !== this.props.width) {\n this._fitParentContainer();\n }\n\n if (\n !this.props.wrapXAxisLables &&\n this.props.rotateXAxisLables &&\n this.props.xAxisType! === XAxisTypes.StringAxis\n ) {\n const rotateLabelProps = {\n node: this.xAxisElement,\n xAxis: this._xScale,\n };\n const rotatedHeight = rotateXAxisLabels(rotateLabelProps);\n if (\n this.state.isRemoveValCalculated &&\n this.state._removalValueForTextTuncate !== rotatedHeight! + this.margins.bottom! &&\n rotatedHeight! > 0\n ) {\n this.setState({\n _removalValueForTextTuncate: rotatedHeight! + this.margins.bottom!,\n isRemoveValCalculated: false,\n });\n }\n }\n }\n\n public render(): JSX.Element {\n const { calloutProps, points, chartType, chartHoverProps, svgFocusZoneProps, svgProps, culture } = this.props;\n if (this.props.parentRef) {\n this._fitParentContainer();\n }\n // Callback for margins to the chart\n this.props.getmargins && this.props.getmargins(this.margins);\n\n const XAxisParams = {\n domainNRangeValues: getDomainNRangeValues(\n points,\n this.margins,\n this.state.containerWidth,\n chartType,\n this._isRtl,\n this.props.xAxisType,\n this.props.barwidth!,\n this.props.tickValues!,\n ),\n xAxisElement: this.xAxisElement!,\n showRoundOffXTickValues: true,\n xAxisCount: this.props.xAxisTickCount,\n xAxistickSize: this.props.xAxistickSize,\n tickPadding: this.props.tickPadding || this.props.showXAxisLablesTooltip ? 5 : 10,\n xAxisPadding: this.props.xAxisPadding,\n };\n\n const YAxisParams = {\n margins: this.margins,\n containerWidth: this.state.containerWidth,\n containerHeight: this.state.containerHeight - this.state._removalValueForTextTuncate!,\n yAxisElement: this.yAxisElement,\n yAxisTickFormat: this.props.yAxisTickFormat!,\n yAxisTickCount: this.props.yAxisTickCount!,\n yMinValue: this.props.yMinValue || 0,\n yMaxValue: this.props.yMaxValue || 0,\n tickPadding: 10,\n maxOfYVal: this.props.maxOfYVal,\n yMinMaxValues: getMinMaxOfYAxis(points, chartType),\n yAxisPadding: this.props.yAxisPadding,\n };\n\n /**\n * These scales used for 2 purposes.\n * 1. To create x and y axis\n * 2. To draw the graph.\n * For area/line chart using same scales. For other charts, creating their own scales to draw the graph.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let xScale: any;\n switch (this.props.xAxisType!) {\n case XAxisTypes.NumericAxis:\n xScale = createNumericXAxis(XAxisParams, culture);\n break;\n case XAxisTypes.DateAxis:\n xScale = createDateXAxis(XAxisParams, this.props.tickParams!);\n break;\n case XAxisTypes.StringAxis:\n xScale = createStringXAxis(XAxisParams, this.props.tickParams!, this.props.datasetForXAxisDomain!, culture);\n break;\n default:\n xScale = createNumericXAxis(XAxisParams, culture);\n }\n this._xScale = xScale;\n\n /*\n * To enable wrapping of x axis tick values or to disaply complete x axis tick values,\n * we need to calculate how much space it needed to render the text.\n * No need to re-calculate every time the chart renders and same time need to get an update. So using setState.\n * Required space will be calculated first time chart rendering and if any width/height of chart updated.\n * */\n if (this.props.wrapXAxisLables || this.props.showXAxisLablesTooltip) {\n const wrapLabelProps = {\n node: this.xAxisElement,\n xAxis: xScale,\n showXAxisLablesTooltip: this.props.showXAxisLablesTooltip || false,\n noOfCharsToTruncate: this.props.noOfCharsToTruncate || 4,\n };\n const temp = xScale && (createWrapOfXLabels(wrapLabelProps) as number);\n // this value need to be updated for draw graph updated. So instead of using private value, using set state.\n if (this.state.isRemoveValCalculated && this.state._removalValueForTextTuncate !== temp) {\n this.setState({ _removalValueForTextTuncate: temp, isRemoveValCalculated: false });\n }\n }\n\n /**\n * These scales used for 2 purposes.\n * 1. To create x and y axis\n * 2. To draw the graph.\n * For area/line chart using same scales. For other charts, creating their own scales to draw the graph.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let yScale: any;\n const axisData: IAxisData = { yAxisDomainValues: [] };\n if (this.props.yAxisType && this.props.yAxisType === YAxisType.StringAxis) {\n yScale = createStringYAxis(YAxisParams, this.props.stringDatasetForYAxisDomain!, this._isRtl);\n } else {\n yScale = createYAxis(YAxisParams, this._isRtl, axisData);\n }\n this.props.getAxisData && this.props.getAxisData(axisData);\n // Callback function for chart, returns axis\n this._getData(xScale, yScale);\n\n this._classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n width: this.state._width,\n height: this.state._height,\n className: this.props.className,\n isRtl: this._isRtl,\n });\n\n const svgDimensions = {\n width: this.state.containerWidth,\n height: this.state.containerHeight,\n };\n\n const children = this.props.children({\n ...this.state,\n xScale,\n yScale,\n });\n\n let focusDirection;\n if (this.props.focusZoneDirection === FocusZoneDirection.vertical) {\n focusDirection = this.props.focusZoneDirection;\n } else if (this.props.focusZoneDirection) {\n focusDirection = this.props.focusZoneDirection;\n } else {\n focusDirection = FocusZoneDirection.horizontal;\n }\n return (\n <div\n id={this.idForGraph}\n className={this._classNames.root}\n role={'presentation'}\n ref={(rootElem: HTMLDivElement) => (this.chartContainer = rootElem)}\n onMouseLeave={this.props.onChartMouseLeave}\n >\n <FocusZone direction={focusDirection} {...svgFocusZoneProps}>\n <svg\n width={svgDimensions.width}\n height={svgDimensions.height}\n aria-label={this.props.chartTitle}\n style={{ display: 'block' }}\n {...svgProps}\n >\n <g\n ref={(e: SVGElement | null) => {\n this.xAxisElement = e;\n }}\n id={`xAxisGElement${this.idForGraph}`}\n // To add wrap of x axis lables feature, need to remove word height from svg height.\n transform={`translate(0, ${\n svgDimensions.height - this.margins.bottom! - this.state._removalValueForTextTuncate!\n })`}\n className={this._classNames.xAxis}\n />\n <g\n ref={(e: SVGElement | null) => {\n this.yAxisElement = e;\n }}\n id={`yAxisGElement${this.idForGraph}`}\n transform={`translate(${\n this._isRtl ? svgDimensions.width - this.margins.right! : this.margins.left!\n }, 0)`}\n className={this._classNames.yAxis}\n />\n {children}\n </svg>\n </FocusZone>\n {!this.props.hideLegend && (\n <div ref={(e: HTMLDivElement) => (this.legendContainer = e)} className={this._classNames.legendContainer}>\n {this.props.legendBars}\n </div>\n )}\n {!this.props.hideTooltip && calloutProps!.isCalloutVisible && (\n <Callout {...calloutProps}>\n {/** Given custom callout, then it will render */}\n {this.props.customizedCallout && this.props.customizedCallout}\n {/** single x point its corresponding y points of all the bars/lines in chart will render in callout */}\n {!this.props.customizedCallout && this.props.isCalloutForStack && this._multiValueCallout(calloutProps)}\n {/** single x point its corresponding y point of single line/bar in the chart will render in callout */}\n {!this.props.customizedCallout && !this.props.isCalloutForStack && (\n <ChartHoverCard\n XValue={calloutProps.XValue}\n Legend={calloutProps.legend!}\n YValue={calloutProps.YValue!}\n color={calloutProps.color!}\n culture={this.props.culture}\n {...chartHoverProps}\n />\n )}\n </Callout>\n )}\n </div>\n );\n }\n\n // TO DO: Write a common functional component for Multi value callout and divide sub count method\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _multiValueCallout = (calloutProps: any) => {\n const yValueHoverSubCountsExists: boolean = this._yValueHoverSubCountsExists(calloutProps.YValueHover);\n return (\n <div className={this._classNames.calloutContentRoot}>\n <div\n className={this._classNames.calloutDateTimeContainer}\n style={yValueHoverSubCountsExists ? { marginBottom: '11px' } : {}}\n >\n <div\n className={this._classNames.calloutContentX}\n {...getAccessibleDataObject(calloutProps!.xAxisCalloutAccessibilityData, 'text', false)}\n >\n {convertToLocaleString(calloutProps!.hoverXValue, this.props.culture)}\n </div>\n </div>\n <div\n className={this._classNames.calloutInfoContainer}\n style={yValueHoverSubCountsExists ? { display: 'flex' } : {}}\n >\n {calloutProps!.YValueHover &&\n calloutProps!.YValueHover.map((yValue: IYValueHover, index: number, yValues: IYValueHover[]) => {\n const isLast: boolean = index + 1 === yValues.length;\n const { shouldDrawBorderBottom = false } = yValue;\n return (\n <div\n {...getAccessibleDataObject(yValue.callOutAccessibilityData, 'text', false)}\n key={`callout-content-${index}`}\n style={\n yValueHoverSubCountsExists\n ? {\n display: 'inline-block',\n ...(shouldDrawBorderBottom && {\n borderBottom: `1px solid ${this.props.theme!.semanticColors.menuDivider}`,\n paddingBottom: '10px',\n }),\n }\n : {\n ...(shouldDrawBorderBottom && {\n borderBottom: `1px solid ${this.props.theme!.semanticColors.menuDivider}`,\n paddingBottom: '10px',\n }),\n }\n }\n >\n {this._getCalloutContent(yValue, index, yValueHoverSubCountsExists, isLast)}\n </div>\n );\n })}\n {!!calloutProps.descriptionMessage && (\n <div className={this._classNames.descriptionMessage}>{calloutProps.descriptionMessage}</div>\n )}\n </div>\n </div>\n );\n };\n\n private _yValueHoverSubCountsExists(yValueHover?: IYValueHover[]) {\n if (yValueHover) {\n return yValueHover.some(\n (yValue: {\n legend?: string;\n y?: number;\n color?: string;\n yAxisCalloutData?: string | { [id: string]: number };\n }) => yValue.yAxisCalloutData && typeof yValue.yAxisCalloutData !== 'string',\n );\n }\n return false;\n }\n\n private _getCalloutContent(\n xValue: IYValueHover,\n index: number,\n yValueHoverSubCountsExists: boolean,\n isLast: boolean,\n ): React.ReactNode {\n const marginStyle: React.CSSProperties = isLast ? {} : { marginRight: '16px' };\n const toDrawShape = xValue.index !== undefined && xValue.index !== -1;\n const _classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n width: this.state._width,\n height: this.state._height,\n className: this.props.className,\n isRtl: this._isRtl,\n lineColor: xValue.color,\n toDrawShape,\n });\n\n const { culture } = this.props;\n const yValue = convertToLocaleString(xValue.y, culture);\n if (!xValue.yAxisCalloutData || typeof xValue.yAxisCalloutData === 'string') {\n return (\n <div style={yValueHoverSubCountsExists ? marginStyle : {}}>\n {yValueHoverSubCountsExists && (\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n )}\n <div id={`${index}_${xValue.y}`} className={_classNames.calloutBlockContainer}>\n {toDrawShape && (\n <Shape\n svgProps={{\n className: _classNames.shapeStyles,\n }}\n pathProps={{ fill: xValue.color }}\n shape={Points[xValue.index! % Object.keys(pointTypes).length] as LegendShape}\n />\n )}\n <div>\n <div className={_classNames.calloutlegendText}> {xValue.legend}</div>\n <div className={_classNames.calloutContentY}>\n {convertToLocaleString(\n xValue.yAxisCalloutData ? xValue.yAxisCalloutData : xValue.y || xValue.data,\n culture,\n )}\n </div>\n </div>\n </div>\n </div>\n );\n } else {\n const subcounts: { [id: string]: number } = xValue.yAxisCalloutData as { [id: string]: number };\n return (\n <div style={marginStyle}>\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n {Object.keys(subcounts).map((subcountName: string) => {\n return (\n <div key={subcountName} className={_classNames.calloutBlockContainer}>\n <div className={_classNames.calloutlegendText}> {convertToLocaleString(subcountName, culture)}</div>\n <div className={_classNames.calloutContentY}>\n {convertToLocaleString(subcounts[subcountName], culture)}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n }\n\n /**\n * When screen resizes, along with screen, chart also auto adjusted.\n * This method used to adjust height and width of the charts.\n */\n private _fitParentContainer(): void {\n const { containerWidth, containerHeight } = this.state;\n this._reqID = requestAnimationFrame(() => {\n let legendContainerHeight;\n if (this.props.hideLegend) {\n // If there is no legend, need not to allocate some space from total chart space.\n legendContainerHeight = 0;\n } else {\n const legendContainerComputedStyles = getComputedStyle(this.legendContainer);\n legendContainerHeight =\n (this.legendContainer.getBoundingClientRect().height || this.minLegendContainerHeight) +\n parseFloat(legendContainerComputedStyles.marginTop || '0') +\n parseFloat(legendContainerComputedStyles.marginBottom || '0');\n }\n const container = this.props.parentRef ? this.props.parentRef : this.chartContainer;\n const currentContainerWidth = container.getBoundingClientRect().width;\n const currentContainerHeight =\n container.getBoundingClientRect().height > legendContainerHeight\n ? container.getBoundingClientRect().height\n : 350;\n const shouldResize =\n containerWidth !== currentContainerWidth || containerHeight !== currentContainerHeight - legendContainerHeight;\n if (shouldResize) {\n this.setState({\n containerWidth: currentContainerWidth,\n containerHeight: currentContainerHeight - legendContainerHeight,\n });\n }\n });\n }\n\n // Call back to the chart.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _getData = (xScale: any, yScale: any) => {\n this.props.getGraphData &&\n this.props.getGraphData(\n xScale,\n yScale,\n this.state.containerHeight - this.state._removalValueForTextTuncate!,\n this.state.containerWidth,\n this.xAxisElement,\n );\n };\n}\n"]}
|
|
@@ -250,6 +250,11 @@ export interface ICartesianChartProps {
|
|
|
250
250
|
* Used to display x axis labels values (whole value)
|
|
251
251
|
*/
|
|
252
252
|
wrapXAxisLables?: boolean;
|
|
253
|
+
/**
|
|
254
|
+
* @default false
|
|
255
|
+
* Used to rotate x axis labels by 45 degrees
|
|
256
|
+
*/
|
|
257
|
+
rotateXAxisLables?: boolean;
|
|
253
258
|
/**
|
|
254
259
|
* Call to provide customized styling that will layer on top of the variant rules.
|
|
255
260
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CartesianChart.types.js","sourceRoot":"../src/","sources":["components/CommonComponents/CartesianChart.types.ts"],"names":[],"mappings":"","sourcesContent":["import * as React from 'react';\nimport { IStyleFunctionOrObject } from '@fluentui/react/lib/Utilities';\nimport { ITheme, IStyle } from '@fluentui/react/lib/Styling';\nimport { IOverflowSetProps } from '@fluentui/react/lib/OverflowSet';\nimport { IFocusZoneProps, FocusZoneDirection } from '@fluentui/react-focus';\nimport { ICalloutProps } from '@fluentui/react/lib/Callout';\nimport { ILegendsProps } from '../Legends/index';\nimport { IAccessibilityProps, IMargins } from '../../types/index';\nimport { ChartTypes, IChartHoverCardProps, XAxisTypes, YAxisType } from '../../utilities/index';\n\nexport interface ICartesianChartStyleProps {\n /**\n * Theme (provided through customization.)\n */\n theme: ITheme;\n\n /**\n * Additional CSS class(es) to apply to the Chart.\n */\n className?: string;\n\n /**\n * Width of the chart.\n */\n width?: number;\n\n /**\n * Height of the chart.\n */\n height?: number;\n\n /**\n * Color of the chart.\n */\n color?: string;\n\n /**\n * Link to redirect if click action for graph\n */\n href?: string;\n\n /**\n * prop to check if the chart is selcted or hovered upon to determine opacity\n */\n shouldHighlight?: boolean;\n\n /**\n * prop to check if the Page is in Rtl\n */\n isRtl?: boolean;\n\n /**\n * color of the line\n */\n lineColor?: string;\n\n /**\n * boolean flag which determines if shape is drawn in callout\n */\n toDrawShape?: boolean;\n}\n\nexport interface ICartesianChartStyles {\n /**\n * Style for the root element.\n */\n root?: IStyle;\n\n /**\n * Style for the element containing the x-axis.\n */\n xAxis?: IStyle;\n\n /**\n * Style for the element containing the y-axis.\n */\n yAxis?: IStyle;\n\n /**\n * Style for legend container\n */\n legendContainer?: IStyle;\n\n /**\n * line hover box css\n */\n hover?: IStyle;\n\n /**\n * styles for callout root-content\n */\n calloutContentRoot?: IStyle;\n\n /**\n * styles for callout x-content\n */\n calloutContentX?: IStyle;\n\n /**\n * styles for callout y-content\n */\n calloutContentY?: IStyle;\n\n /**\n * styles for description message\n */\n descriptionMessage?: IStyle;\n\n /**\n * styles for callout Date time container\n */\n calloutDateTimeContainer?: IStyle;\n\n /**\n * styles for callout Date time container\n */\n calloutInfoContainer?: IStyle;\n\n /**\n * styles for callout Date time container\n */\n calloutBlockContainer?: IStyle;\n\n /**\n * styles for callout y-content\n */\n calloutlegendText?: IStyle;\n\n tooltip?: IStyle;\n\n /**\n * Style for the chart Title.\n */\n chartTitle?: IStyle;\n\n /**\n * Style to change the opacity of bars in dataviz when we hover on a single bar or legends\n */\n opacityChangeOnHover?: IStyle;\n\n /**\n * styles set for the shape object in the callout\n */\n shapeStyles?: IStyle;\n}\n\nexport interface ICartesianChartProps {\n /**\n * Below height used for resizing of the chart\n * Wrap chart in your container and send the updated height and width to these props.\n * These values decide wheather chart re render or not. Please check examples for reference\n */\n height?: number;\n\n /**\n * Below width used for resizing of the chart\n * Wrap chart in your container and send the updated height and width to these props.\n * These values decide wheather chart re render or not. Please check examples for reference\n */\n width?: number;\n\n /**\n * this prop takes its parent as a HTML element to define the width and height of the chart\n */\n parentRef?: HTMLElement | null;\n\n /**\n * Additional CSS class(es) to apply to the Chart.\n */\n className?: string;\n\n /**\n * Theme (provided through customization.)\n */\n theme?: ITheme;\n\n /**\n * Margins for the chart\n * @default `{ top: 20, bottom: 35, left: 40, right: 20 }`\n * To avoid edge cuttings to the chart, we recommend you use default values or greater then default values\n */\n margins?: IMargins;\n\n /** decides wether to show/hide legends\n * @defaultvalue false\n */\n hideLegend?: boolean;\n\n /**\n * Do not show tooltips in chart\n * @default false\n */\n hideTooltip?: boolean;\n\n /**\n * this prop takes values that you want the chart to render on x-axis\n * This is a optional parameter if not specified D3 will decide which values appear on the x-axis for you\n * Please look at https://github.com/d3/d3-scale for more information on how D3 decides what data to appear on the axis of chart\n */\n tickValues?: number[] | Date[];\n\n /**\n * the format in for the data on x-axis. For date object this can be specified to your requirement. Eg: '%m/%d', '%d'\n * Please look at https://www.npmjs.com/package/d3-time-format for all the formats supported\n */\n tickFormat?: string;\n\n /**\n * Width of line stroke\n */\n strokeWidth?: number;\n\n /**\n * x Axis labels tick padding\n * @default 10\n */\n xAxisTickPadding?: number;\n\n /**\n * the format in for the data on y-axis. For data object this can be specified to your requirement.\n * Eg: d3.format(\".0%\")(0.123),d3.format(\"+20\")(42);\n * Please look at https://github.com/d3/d3-format for all the formats supported\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yAxisTickFormat?: any;\n\n /**\n * minimum data value point in y-axis\n */\n yMinValue?: number;\n\n /**\n * maximum data value point in y-axis\n */\n yMaxValue?: number;\n\n /**\n * Number of ticks on the y-axis.\n * Tick count should be factor of difference between (yMinValue, yMaxValue)\n * @default 4\n */\n yAxisTickCount?: number;\n\n /**\n * defines the number of ticks on the x-axis\n * @default 6\n */\n xAxisTickCount?: number;\n\n /**\n * define the size of the tick on the x-axis\n * @default 10\n */\n xAxistickSize?: number;\n\n /**\n * define the space between the tick and the data point\n * @default 10\n */\n tickPadding?: number;\n\n /**\n * Url that the data-viz needs to redirect to upon clicking on it\n */\n href?: string;\n\n /**\n * Label to apply to the whole chart.\n * @deprecated - Use your chart label for the chart.\n */\n chartLabel?: string;\n\n /**\n * overflow props for the legends\n */\n legendsOverflowProps?: Partial<IOverflowSetProps>;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n legendsOverflowText?: any;\n\n /**\n * focus zone props in hover card for legends\n */\n focusZonePropsForLegendsInHoverCard?: IFocusZoneProps;\n\n /**\n * Enable the legends to wrap lines if there is not enough space to show all legends on a single line\n */\n enabledLegendsWrapLines?: boolean;\n\n /*\n * props for the legends in the chart\n */\n legendProps?: Partial<ILegendsProps>;\n\n /**\n *@default false\n *Used for to elipse x axis labes and show tooltip on x axis labels\n */\n showXAxisLablesTooltip?: boolean;\n\n /**\n * @default 4\n * Used for X axis labels\n * While Giving showXAxisLablesTooltip prop, need to define after how many chars, we need to truncate the word.\n */\n noOfCharsToTruncate?: number;\n\n /**\n * @default false\n * Used to display x axis labels values (whole value)\n */\n wrapXAxisLables?: boolean;\n\n /**\n * Call to provide customized styling that will layer on top of the variant rules.\n */\n styles?: IStyleFunctionOrObject<ICartesianChartStyleProps, ICartesianChartStyles>;\n\n /**\n * Callout customization props\n */\n calloutProps?: Partial<ICalloutProps>;\n\n /**\n * props for the svg; use this to include aria-* or other attributes on the tag\n */\n svgProps?: React.SVGProps<SVGSVGElement>;\n}\n\nexport interface IYValueHover {\n legend?: string;\n y?: number;\n color?: string;\n data?: string | number;\n shouldDrawBorderBottom?: boolean;\n yAxisCalloutData?: string | { [id: string]: number };\n index?: number;\n callOutAccessibilityData?: IAccessibilityProps;\n}\n\nexport interface IChildProps {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xScale?: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yScale?: any;\n containerHeight?: number;\n containerWidth?: number;\n}\n\n// Only used for Cartesian chart base\nexport interface IModifiedCartesianChartProps extends ICartesianChartProps {\n /**\n * Define the chart title\n */\n chartTitle?: string;\n\n /**\n * Only used for Area chart\n * Value used to draw y axis of that chart.\n */\n maxOfYVal?: number;\n\n /**\n * Data of the chart\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n points: any;\n\n /**\n * Define type of the chart\n */\n chartType: ChartTypes;\n\n /** X axis type */\n xAxisType: XAxisTypes;\n\n /** Y axis type */\n yAxisType?: YAxisType;\n\n /**\n * Legeds of the chart.\n */\n legendBars: JSX.Element;\n\n /**\n * Callout props\n */\n calloutProps: Partial<ICalloutProps> & {\n isCalloutVisible: boolean;\n id: string;\n YValueHover?: IYValueHover[];\n hoverXValue?: string | number | null;\n legend?: string;\n color?: string;\n YValue?: string | number;\n XValue?: string;\n descriptionMessage?: string;\n };\n\n /**\n * Callback method used for to get margins to the chart.\n */\n getmargins?: (margins: IMargins) => void;\n\n /**\n * This is a call back method to the chart from cartesian chart.\n * params are xScale, yScale, containerHeight, containerWidth. These values were used to draw the graph.\n * It also contians an optional param xAxisElement - defines as x axis scale element.\n * This param used to enable feature word wrap of Xaxis.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getGraphData?: any;\n\n /**\n * Used for bar chart graphs.\n * To define width of the bar\n */\n barwidth?: number;\n\n /**\n * Used for tick styles of the x axis of the chart\n */\n tickParams?: {\n tickValues?: number[] | Date[];\n tickFormat?: string;\n };\n\n /**\n * it's padding between bar's or lines in the graph\n */\n xAxisPadding?: number;\n\n /**\n * it's padding between bar's or lines in the graph\n */\n yAxisPadding?: number;\n\n children(props: IChildProps): React.ReactNode;\n\n /**\n * To enable callout for bar. Using for only Vertical stacked bar chart.\n * @default false\n * @type {boolean}\n */\n isCalloutForStack?: boolean;\n\n /** dataset values to find out domain of the String axis\n * Present using for only vertical stacked bar chart and grouped vertical bar chart\n */\n datasetForXAxisDomain?: string[];\n\n /** Own callout design */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n customizedCallout?: any;\n\n /**\n * if the data points for the y-axis is of type string, then we need to give this\n * prop to construct the y-axis\n */\n stringDatasetForYAxisDomain?: string[];\n\n /**\n * Focus zone direction to the chart\n * @default FocusZoneDirection.horizontal\n */\n focusZoneDirection?: FocusZoneDirection;\n\n /**\n * props to send into the chart hover card\n */\n chartHoverProps?: IChartHoverCardProps;\n\n /**\n * props to send to the focuszone\n */\n svgFocusZoneProps?: IFocusZoneProps;\n\n /**\n * The prop used to define the culture to localized the numbers\n */\n culture?: string;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getAxisData?: any;\n\n /**\n * Callback method used when mouse leaves the chart boundary.\n */\n onChartMouseLeave?: () => void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CartesianChart.types.js","sourceRoot":"../src/","sources":["components/CommonComponents/CartesianChart.types.ts"],"names":[],"mappings":"","sourcesContent":["import * as React from 'react';\nimport { IStyleFunctionOrObject } from '@fluentui/react/lib/Utilities';\nimport { ITheme, IStyle } from '@fluentui/react/lib/Styling';\nimport { IOverflowSetProps } from '@fluentui/react/lib/OverflowSet';\nimport { IFocusZoneProps, FocusZoneDirection } from '@fluentui/react-focus';\nimport { ICalloutProps } from '@fluentui/react/lib/Callout';\nimport { ILegendsProps } from '../Legends/index';\nimport { IAccessibilityProps, IMargins } from '../../types/index';\nimport { ChartTypes, IChartHoverCardProps, XAxisTypes, YAxisType } from '../../utilities/index';\n\nexport interface ICartesianChartStyleProps {\n /**\n * Theme (provided through customization.)\n */\n theme: ITheme;\n\n /**\n * Additional CSS class(es) to apply to the Chart.\n */\n className?: string;\n\n /**\n * Width of the chart.\n */\n width?: number;\n\n /**\n * Height of the chart.\n */\n height?: number;\n\n /**\n * Color of the chart.\n */\n color?: string;\n\n /**\n * Link to redirect if click action for graph\n */\n href?: string;\n\n /**\n * prop to check if the chart is selcted or hovered upon to determine opacity\n */\n shouldHighlight?: boolean;\n\n /**\n * prop to check if the Page is in Rtl\n */\n isRtl?: boolean;\n\n /**\n * color of the line\n */\n lineColor?: string;\n\n /**\n * boolean flag which determines if shape is drawn in callout\n */\n toDrawShape?: boolean;\n}\n\nexport interface ICartesianChartStyles {\n /**\n * Style for the root element.\n */\n root?: IStyle;\n\n /**\n * Style for the element containing the x-axis.\n */\n xAxis?: IStyle;\n\n /**\n * Style for the element containing the y-axis.\n */\n yAxis?: IStyle;\n\n /**\n * Style for legend container\n */\n legendContainer?: IStyle;\n\n /**\n * line hover box css\n */\n hover?: IStyle;\n\n /**\n * styles for callout root-content\n */\n calloutContentRoot?: IStyle;\n\n /**\n * styles for callout x-content\n */\n calloutContentX?: IStyle;\n\n /**\n * styles for callout y-content\n */\n calloutContentY?: IStyle;\n\n /**\n * styles for description message\n */\n descriptionMessage?: IStyle;\n\n /**\n * styles for callout Date time container\n */\n calloutDateTimeContainer?: IStyle;\n\n /**\n * styles for callout Date time container\n */\n calloutInfoContainer?: IStyle;\n\n /**\n * styles for callout Date time container\n */\n calloutBlockContainer?: IStyle;\n\n /**\n * styles for callout y-content\n */\n calloutlegendText?: IStyle;\n\n tooltip?: IStyle;\n\n /**\n * Style for the chart Title.\n */\n chartTitle?: IStyle;\n\n /**\n * Style to change the opacity of bars in dataviz when we hover on a single bar or legends\n */\n opacityChangeOnHover?: IStyle;\n\n /**\n * styles set for the shape object in the callout\n */\n shapeStyles?: IStyle;\n}\n\nexport interface ICartesianChartProps {\n /**\n * Below height used for resizing of the chart\n * Wrap chart in your container and send the updated height and width to these props.\n * These values decide wheather chart re render or not. Please check examples for reference\n */\n height?: number;\n\n /**\n * Below width used for resizing of the chart\n * Wrap chart in your container and send the updated height and width to these props.\n * These values decide wheather chart re render or not. Please check examples for reference\n */\n width?: number;\n\n /**\n * this prop takes its parent as a HTML element to define the width and height of the chart\n */\n parentRef?: HTMLElement | null;\n\n /**\n * Additional CSS class(es) to apply to the Chart.\n */\n className?: string;\n\n /**\n * Theme (provided through customization.)\n */\n theme?: ITheme;\n\n /**\n * Margins for the chart\n * @default `{ top: 20, bottom: 35, left: 40, right: 20 }`\n * To avoid edge cuttings to the chart, we recommend you use default values or greater then default values\n */\n margins?: IMargins;\n\n /** decides wether to show/hide legends\n * @defaultvalue false\n */\n hideLegend?: boolean;\n\n /**\n * Do not show tooltips in chart\n * @default false\n */\n hideTooltip?: boolean;\n\n /**\n * this prop takes values that you want the chart to render on x-axis\n * This is a optional parameter if not specified D3 will decide which values appear on the x-axis for you\n * Please look at https://github.com/d3/d3-scale for more information on how D3 decides what data to appear on the axis of chart\n */\n tickValues?: number[] | Date[];\n\n /**\n * the format in for the data on x-axis. For date object this can be specified to your requirement. Eg: '%m/%d', '%d'\n * Please look at https://www.npmjs.com/package/d3-time-format for all the formats supported\n */\n tickFormat?: string;\n\n /**\n * Width of line stroke\n */\n strokeWidth?: number;\n\n /**\n * x Axis labels tick padding\n * @default 10\n */\n xAxisTickPadding?: number;\n\n /**\n * the format in for the data on y-axis. For data object this can be specified to your requirement.\n * Eg: d3.format(\".0%\")(0.123),d3.format(\"+20\")(42);\n * Please look at https://github.com/d3/d3-format for all the formats supported\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yAxisTickFormat?: any;\n\n /**\n * minimum data value point in y-axis\n */\n yMinValue?: number;\n\n /**\n * maximum data value point in y-axis\n */\n yMaxValue?: number;\n\n /**\n * Number of ticks on the y-axis.\n * Tick count should be factor of difference between (yMinValue, yMaxValue)\n * @default 4\n */\n yAxisTickCount?: number;\n\n /**\n * defines the number of ticks on the x-axis\n * @default 6\n */\n xAxisTickCount?: number;\n\n /**\n * define the size of the tick on the x-axis\n * @default 10\n */\n xAxistickSize?: number;\n\n /**\n * define the space between the tick and the data point\n * @default 10\n */\n tickPadding?: number;\n\n /**\n * Url that the data-viz needs to redirect to upon clicking on it\n */\n href?: string;\n\n /**\n * Label to apply to the whole chart.\n * @deprecated - Use your chart label for the chart.\n */\n chartLabel?: string;\n\n /**\n * overflow props for the legends\n */\n legendsOverflowProps?: Partial<IOverflowSetProps>;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n legendsOverflowText?: any;\n\n /**\n * focus zone props in hover card for legends\n */\n focusZonePropsForLegendsInHoverCard?: IFocusZoneProps;\n\n /**\n * Enable the legends to wrap lines if there is not enough space to show all legends on a single line\n */\n enabledLegendsWrapLines?: boolean;\n\n /*\n * props for the legends in the chart\n */\n legendProps?: Partial<ILegendsProps>;\n\n /**\n *@default false\n *Used for to elipse x axis labes and show tooltip on x axis labels\n */\n showXAxisLablesTooltip?: boolean;\n\n /**\n * @default 4\n * Used for X axis labels\n * While Giving showXAxisLablesTooltip prop, need to define after how many chars, we need to truncate the word.\n */\n noOfCharsToTruncate?: number;\n\n /**\n * @default false\n * Used to display x axis labels values (whole value)\n */\n wrapXAxisLables?: boolean;\n\n /**\n * @default false\n * Used to rotate x axis labels by 45 degrees\n */\n rotateXAxisLables?: boolean; // check for RTL\n\n /**\n * Call to provide customized styling that will layer on top of the variant rules.\n */\n styles?: IStyleFunctionOrObject<ICartesianChartStyleProps, ICartesianChartStyles>;\n\n /**\n * Callout customization props\n */\n calloutProps?: Partial<ICalloutProps>;\n\n /**\n * props for the svg; use this to include aria-* or other attributes on the tag\n */\n svgProps?: React.SVGProps<SVGSVGElement>;\n}\n\nexport interface IYValueHover {\n legend?: string;\n y?: number;\n color?: string;\n data?: string | number;\n shouldDrawBorderBottom?: boolean;\n yAxisCalloutData?: string | { [id: string]: number };\n index?: number;\n callOutAccessibilityData?: IAccessibilityProps;\n}\n\nexport interface IChildProps {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xScale?: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yScale?: any;\n containerHeight?: number;\n containerWidth?: number;\n}\n\n// Only used for Cartesian chart base\nexport interface IModifiedCartesianChartProps extends ICartesianChartProps {\n /**\n * Define the chart title\n */\n chartTitle?: string;\n\n /**\n * Only used for Area chart\n * Value used to draw y axis of that chart.\n */\n maxOfYVal?: number;\n\n /**\n * Data of the chart\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n points: any;\n\n /**\n * Define type of the chart\n */\n chartType: ChartTypes;\n\n /** X axis type */\n xAxisType: XAxisTypes;\n\n /** Y axis type */\n yAxisType?: YAxisType;\n\n /**\n * Legeds of the chart.\n */\n legendBars: JSX.Element;\n\n /**\n * Callout props\n */\n calloutProps: Partial<ICalloutProps> & {\n isCalloutVisible: boolean;\n id: string;\n YValueHover?: IYValueHover[];\n hoverXValue?: string | number | null;\n legend?: string;\n color?: string;\n YValue?: string | number;\n XValue?: string;\n descriptionMessage?: string;\n };\n\n /**\n * Callback method used for to get margins to the chart.\n */\n getmargins?: (margins: IMargins) => void;\n\n /**\n * This is a call back method to the chart from cartesian chart.\n * params are xScale, yScale, containerHeight, containerWidth. These values were used to draw the graph.\n * It also contians an optional param xAxisElement - defines as x axis scale element.\n * This param used to enable feature word wrap of Xaxis.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getGraphData?: any;\n\n /**\n * Used for bar chart graphs.\n * To define width of the bar\n */\n barwidth?: number;\n\n /**\n * Used for tick styles of the x axis of the chart\n */\n tickParams?: {\n tickValues?: number[] | Date[];\n tickFormat?: string;\n };\n\n /**\n * it's padding between bar's or lines in the graph\n */\n xAxisPadding?: number;\n\n /**\n * it's padding between bar's or lines in the graph\n */\n yAxisPadding?: number;\n\n children(props: IChildProps): React.ReactNode;\n\n /**\n * To enable callout for bar. Using for only Vertical stacked bar chart.\n * @default false\n * @type {boolean}\n */\n isCalloutForStack?: boolean;\n\n /** dataset values to find out domain of the String axis\n * Present using for only vertical stacked bar chart and grouped vertical bar chart\n */\n datasetForXAxisDomain?: string[];\n\n /** Own callout design */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n customizedCallout?: any;\n\n /**\n * if the data points for the y-axis is of type string, then we need to give this\n * prop to construct the y-axis\n */\n stringDatasetForYAxisDomain?: string[];\n\n /**\n * Focus zone direction to the chart\n * @default FocusZoneDirection.horizontal\n */\n focusZoneDirection?: FocusZoneDirection;\n\n /**\n * props to send into the chart hover card\n */\n chartHoverProps?: IChartHoverCardProps;\n\n /**\n * props to send to the focuszone\n */\n svgFocusZoneProps?: IFocusZoneProps;\n\n /**\n * The prop used to define the culture to localized the numbers\n */\n culture?: string;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getAxisData?: any;\n\n /**\n * Callback method used when mouse leaves the chart boundary.\n */\n onChartMouseLeave?: () => void;\n}\n"]}
|
|
@@ -10,6 +10,7 @@ export declare class Arc extends React.Component<IArcProps, IArcState> {
|
|
|
10
10
|
static getDerivedStateFromProps(nextProps: Readonly<IArcProps>): Partial<IArcState> | null;
|
|
11
11
|
updateChart(newProps: IArcProps): void;
|
|
12
12
|
render(): JSX.Element;
|
|
13
|
+
componentDidUpdate(): void;
|
|
13
14
|
private _onFocus;
|
|
14
15
|
private _hoverOn;
|
|
15
16
|
private _hoverOff;
|
|
@@ -3,6 +3,8 @@ import * as React from 'react';
|
|
|
3
3
|
import * as shape from 'd3-shape';
|
|
4
4
|
import { classNamesFunction } from '@fluentui/react/lib/Utilities';
|
|
5
5
|
import { getStyles } from './Arc.styles';
|
|
6
|
+
import { wrapTextInsideDonut } from '../../../utilities/index';
|
|
7
|
+
var TEXT_PADDING = 5;
|
|
6
8
|
var Arc = /** @class */ (function (_super) {
|
|
7
9
|
__extends(Arc, _super);
|
|
8
10
|
function Arc() {
|
|
@@ -40,6 +42,16 @@ var Arc = /** @class */ (function (_super) {
|
|
|
40
42
|
React.createElement("path", { id: id, d: arc(this.props.data), onFocus: this._onFocus.bind(this, this.props.data.data, id), className: classNames.root, "data-is-focusable": true, onMouseOver: this._hoverOn.bind(this, this.props.data.data), onMouseMove: this._hoverOn.bind(this, this.props.data.data), onMouseLeave: this._hoverOff, onBlur: this._onBlur, opacity: opacity, onClick: href ? this._redirectToUrl.bind(this, href) : (_a = this.props.data) === null || _a === void 0 ? void 0 : _a.data.onClick, "aria-labelledby": this.props.calloutId, role: "text" }),
|
|
41
43
|
React.createElement("text", { textAnchor: 'middle', className: classNames.insideDonutString, y: 5 }, this.props.valueInsideDonut)));
|
|
42
44
|
};
|
|
45
|
+
Arc.prototype.componentDidUpdate = function () {
|
|
46
|
+
var href = this.props.href;
|
|
47
|
+
var getClassNames = classNamesFunction();
|
|
48
|
+
var classNames = getClassNames(getStyles, {
|
|
49
|
+
color: this.props.color,
|
|
50
|
+
href: href,
|
|
51
|
+
theme: this.props.theme,
|
|
52
|
+
});
|
|
53
|
+
wrapTextInsideDonut(classNames.insideDonutString, this.props.innerRadius * 2 - TEXT_PADDING);
|
|
54
|
+
};
|
|
43
55
|
Arc.prototype._onFocus = function (data, id) {
|
|
44
56
|
this.props.onFocusCallback(data, id, this.currentRef.current);
|
|
45
57
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Arc.js","sourceRoot":"../src/","sources":["components/DonutChart/Arc/Arc.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Arc.js","sourceRoot":"../src/","sources":["components/DonutChart/Arc/Arc.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport * as shape from 'd3-shape';\nimport { classNamesFunction } from '@fluentui/react/lib/Utilities';\nimport { getStyles } from './Arc.styles';\nimport { IChartDataPoint } from '../index';\nimport { IArcProps, IArcStyles } from './index';\nimport { wrapTextInsideDonut } from '../../../utilities/index';\n\nexport interface IArcState {\n isCalloutVisible?: boolean;\n}\n\nconst TEXT_PADDING: number = 5;\n\nexport class Arc extends React.Component<IArcProps, IArcState> {\n public static defaultProps: Partial<IArcProps> = {\n arc: shape.arc(),\n };\n\n public state: {} = {};\n\n private currentRef = React.createRef<SVGPathElement>();\n\n public static getDerivedStateFromProps(nextProps: Readonly<IArcProps>): Partial<IArcState> | null {\n _updateChart(nextProps);\n return null;\n }\n\n public updateChart(newProps: IArcProps): void {\n _updateChart(newProps);\n }\n\n public render(): JSX.Element {\n const { arc, href, focusedArcId } = this.props;\n const getClassNames = classNamesFunction<IArcProps, IArcStyles>();\n const classNames = getClassNames(getStyles, {\n color: this.props.color,\n href: href!,\n theme: this.props.theme!,\n });\n const id = this.props.uniqText! + this.props.data!.data.legend!.replace(/\\s+/, '') + this.props.data!.data.data;\n const opacity: number =\n this.props.activeArc === this.props.data!.data.legend || this.props.activeArc === '' ? 1 : 0.1;\n return (\n <g ref={this.currentRef}>\n {!!focusedArcId && focusedArcId === id && (\n <path id={id + 'focusRing'} d={arc(this.props.focusData)} className={classNames.focusRing} />\n )}\n <path\n id={id}\n d={arc(this.props.data)}\n onFocus={this._onFocus.bind(this, this.props.data!.data, id)}\n className={classNames.root}\n data-is-focusable={true}\n onMouseOver={this._hoverOn.bind(this, this.props.data!.data)}\n onMouseMove={this._hoverOn.bind(this, this.props.data!.data)}\n onMouseLeave={this._hoverOff}\n onBlur={this._onBlur}\n opacity={opacity}\n onClick={href ? this._redirectToUrl.bind(this, href) : this.props.data?.data.onClick}\n aria-labelledby={this.props.calloutId}\n role=\"text\"\n />\n <text textAnchor={'middle'} className={classNames.insideDonutString} y={5}>\n {this.props.valueInsideDonut!}\n </text>\n </g>\n );\n }\n\n public componentDidUpdate(): void {\n const { href } = this.props;\n const getClassNames = classNamesFunction<IArcProps, IArcStyles>();\n const classNames = getClassNames(getStyles, {\n color: this.props.color,\n href: href!,\n theme: this.props.theme!,\n });\n\n wrapTextInsideDonut(classNames.insideDonutString, this.props.innerRadius! * 2 - TEXT_PADDING);\n }\n\n private _onFocus(data: IChartDataPoint, id: string): void {\n this.props.onFocusCallback!(data, id, this.currentRef.current);\n }\n\n private _hoverOn(data: IChartDataPoint, mouseEvent: React.MouseEvent<SVGPathElement>): void {\n mouseEvent.persist();\n if (this.props.activeArc === this.props.data!.data.legend || this.props.activeArc === '') {\n this.props.hoverOnCallback!(data, mouseEvent);\n }\n }\n\n private _hoverOff = (): void => {\n this.props.hoverLeaveCallback!();\n };\n\n private _onBlur = (): void => {\n this.props.onBlurCallback!();\n };\n\n private _redirectToUrl(href: string | undefined): void {\n href ? (window.location.href = href) : '';\n }\n}\n\nfunction _updateChart(newProps: IArcProps): void {\n newProps.arc.innerRadius(newProps.innerRadius);\n newProps.arc.outerRadius(newProps.outerRadius);\n}\n"]}
|
|
@@ -28,6 +28,10 @@ export interface IWrapLabelProps {
|
|
|
28
28
|
noOfCharsToTruncate: number;
|
|
29
29
|
showXAxisLablesTooltip: boolean;
|
|
30
30
|
}
|
|
31
|
+
export interface IRotateLabelProps {
|
|
32
|
+
node: SVGElement | null;
|
|
33
|
+
xAxis: NumericAxis | StringAxis;
|
|
34
|
+
}
|
|
31
35
|
export interface IAxisData {
|
|
32
36
|
yAxisDomainValues: number[];
|
|
33
37
|
}
|
|
@@ -365,4 +369,6 @@ export declare const getAccessibleDataObject: (accessibleData?: IAccessibilityPr
|
|
|
365
369
|
};
|
|
366
370
|
declare type LocaleStringDataProps = number | string | Date | undefined;
|
|
367
371
|
export declare const convertToLocaleString: (data: LocaleStringDataProps, culture?: string | undefined) => LocaleStringDataProps;
|
|
372
|
+
export declare function rotateXAxisLabels(rotateLabelProps: IRotateLabelProps): number | undefined;
|
|
373
|
+
export declare function wrapTextInsideDonut(selectorClass: string, maxWidth: number): void;
|
|
368
374
|
export {};
|
|
@@ -3,7 +3,7 @@ import { __assign, __spreadArray } from "tslib";
|
|
|
3
3
|
import { axisRight as d3AxisRight, axisBottom as d3AxisBottom, axisLeft as d3AxisLeft } from 'd3-axis';
|
|
4
4
|
import { max as d3Max, min as d3Min } from 'd3-array';
|
|
5
5
|
import { scaleLinear as d3ScaleLinear, scaleTime as d3ScaleTime, scaleBand as d3ScaleBand } from 'd3-scale';
|
|
6
|
-
import { select as d3Select, event as d3Event } from 'd3-selection';
|
|
6
|
+
import { select as d3Select, event as d3Event, selectAll as d3SelectAll } from 'd3-selection';
|
|
7
7
|
import { format as d3Format } from 'd3-format';
|
|
8
8
|
import * as d3TimeFormat from 'd3-time-format';
|
|
9
9
|
export var ChartTypes;
|
|
@@ -741,4 +741,79 @@ export var convertToLocaleString = function (data, culture) {
|
|
|
741
741
|
}
|
|
742
742
|
return data;
|
|
743
743
|
};
|
|
744
|
+
export function rotateXAxisLabels(rotateLabelProps) {
|
|
745
|
+
var node = rotateLabelProps.node, xAxis = rotateLabelProps.xAxis;
|
|
746
|
+
if (node === null || xAxis === null) {
|
|
747
|
+
return;
|
|
748
|
+
}
|
|
749
|
+
var maxHeight = 0;
|
|
750
|
+
var xAxisTranslations = [];
|
|
751
|
+
d3Select(node)
|
|
752
|
+
.call(xAxis)
|
|
753
|
+
.selectAll('.tick')
|
|
754
|
+
.each(function () {
|
|
755
|
+
var translateValue = this.getAttribute('transform');
|
|
756
|
+
if ((translateValue === null || translateValue === void 0 ? void 0 : translateValue.indexOf('rotate')) === -1) {
|
|
757
|
+
var translatePair = translateValue
|
|
758
|
+
.substring(translateValue.indexOf('(') + 1, translateValue.indexOf(')'))
|
|
759
|
+
.split(',');
|
|
760
|
+
if (translatePair.length === 2) {
|
|
761
|
+
xAxisTranslations.push(translatePair[0]);
|
|
762
|
+
this.setAttribute('transform', "translate(" + translatePair[0] + ",0)rotate(-45)");
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
var BoxCordinates = this.getBoundingClientRect();
|
|
766
|
+
var boxHeight = BoxCordinates && BoxCordinates.height;
|
|
767
|
+
if (boxHeight > maxHeight) {
|
|
768
|
+
maxHeight = boxHeight;
|
|
769
|
+
}
|
|
770
|
+
});
|
|
771
|
+
var idx = 0;
|
|
772
|
+
d3Select(node)
|
|
773
|
+
.call(xAxis)
|
|
774
|
+
.selectAll('.tick')
|
|
775
|
+
.each(function () {
|
|
776
|
+
if (xAxisTranslations.length > idx) {
|
|
777
|
+
this.setAttribute('transform', "translate(" + xAxisTranslations[idx] + "," + maxHeight / 2 + ")rotate(-45)"); // Translate y by max height/2
|
|
778
|
+
idx += 1;
|
|
779
|
+
}
|
|
780
|
+
});
|
|
781
|
+
return Math.floor(maxHeight / 1.414); // Compute maxHeight/tanInverse(45) to get the vertical height of labels.
|
|
782
|
+
}
|
|
783
|
+
export function wrapTextInsideDonut(selectorClass, maxWidth) {
|
|
784
|
+
var idx = 0;
|
|
785
|
+
d3SelectAll("." + selectorClass).each(function () {
|
|
786
|
+
var text = d3Select(this);
|
|
787
|
+
var words = text.text().split(/\s+/).reverse();
|
|
788
|
+
var word = '';
|
|
789
|
+
var line = [];
|
|
790
|
+
var lineNumber = 0;
|
|
791
|
+
var lineHeight = 1.1; // ems
|
|
792
|
+
var y = text.attr('y');
|
|
793
|
+
var tspan = text
|
|
794
|
+
.text(null)
|
|
795
|
+
.append('tspan')
|
|
796
|
+
.attr('id', "WordBreakId-" + idx + "-" + lineNumber)
|
|
797
|
+
.attr('x', 0)
|
|
798
|
+
.attr('y', y)
|
|
799
|
+
.attr('dy', lineNumber++ * lineHeight + 'em');
|
|
800
|
+
while ((word = words.pop())) {
|
|
801
|
+
line.push(word);
|
|
802
|
+
tspan.text(line.join(' ') + ' ');
|
|
803
|
+
if (tspan.node().getComputedTextLength() > maxWidth && line.length > 1) {
|
|
804
|
+
line.pop();
|
|
805
|
+
tspan.text(line.join(' ') + ' ');
|
|
806
|
+
line = [word];
|
|
807
|
+
tspan = text
|
|
808
|
+
.append('tspan')
|
|
809
|
+
.attr('id', "WordBreakId-" + idx + "-" + lineNumber)
|
|
810
|
+
.attr('x', 0)
|
|
811
|
+
.attr('y', y)
|
|
812
|
+
.attr('dy', lineNumber++ * lineHeight + 'em')
|
|
813
|
+
.text(word);
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
idx += 1;
|
|
817
|
+
});
|
|
818
|
+
}
|
|
744
819
|
//# sourceMappingURL=utilities.js.map
|