@semcore/d3-chart 17.0.0-prerelease.27 → 17.0.0-prerelease.30
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.md +5 -1
- package/lib/cjs/component/Chart/AbstractChart.js +5 -5
- package/lib/cjs/component/Chart/AbstractChart.js.map +1 -1
- package/lib/cjs/component/Chart/CigaretteChart.js +181 -57
- package/lib/cjs/component/Chart/CigaretteChart.js.map +1 -1
- package/lib/cjs/component/Chart/CigaretteChart.type.js.map +1 -1
- package/lib/es6/component/Chart/AbstractChart.js +5 -5
- package/lib/es6/component/Chart/AbstractChart.js.map +1 -1
- package/lib/es6/component/Chart/CigaretteChart.js +183 -59
- package/lib/es6/component/Chart/CigaretteChart.js.map +1 -1
- package/lib/es6/component/Chart/CigaretteChart.type.js.map +1 -1
- package/lib/esm/component/Chart/AbstractChart.mjs +5 -5
- package/lib/esm/component/Chart/CigaretteChart.mjs +183 -59
- package/lib/esm/utils.mjs +1 -1
- package/lib/types/component/Chart/AbstractChart.d.ts +4 -6
- package/lib/types/component/Chart/CigaretteChart.type.d.ts +5 -4
- package/package.json +13 -13
package/CHANGELOG.md
CHANGED
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
|
|
4
4
|
|
|
5
|
-
## [17.0.0] - 2026-
|
|
5
|
+
## [17.0.0] - 2026-03-09
|
|
6
6
|
|
|
7
7
|
### BREAK
|
|
8
8
|
|
|
9
9
|
- Removed 2px border-radius for Bars.
|
|
10
10
|
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `minimalBarWidth` for `Cigarette` chart.
|
|
14
|
+
|
|
11
15
|
### Changed
|
|
12
16
|
|
|
13
17
|
- Refined a11y module invocation logic
|
|
@@ -36,11 +36,6 @@ class AbstractChart extends _core.Component {
|
|
|
36
36
|
*/
|
|
37
37
|
(0, _defineProperty2.default)(this, "plotPadding", 6);
|
|
38
38
|
(0, _defineProperty2.default)(this, "dataHints", (0, _hints.makeDataHintsContainer)());
|
|
39
|
-
(0, _defineProperty2.default)(this, "state", {
|
|
40
|
-
dataDefinitions: this.getDefaultDataDefinitions(),
|
|
41
|
-
highlightedLine: -1,
|
|
42
|
-
withTrend: false
|
|
43
|
-
});
|
|
44
39
|
this.setHighlightedLine = this.setHighlightedLine.bind(this);
|
|
45
40
|
this.handleChangeVisible = this.handleChangeVisible.bind(this);
|
|
46
41
|
this.handleMouseEnter = this.handleMouseEnter.bind(this);
|
|
@@ -48,6 +43,11 @@ class AbstractChart extends _core.Component {
|
|
|
48
43
|
this.resolveColor = this.resolveColor.bind(this);
|
|
49
44
|
this.tooltipValueFormatter = this.tooltipValueFormatter.bind(this);
|
|
50
45
|
this.handleWithTrendChange = this.handleWithTrendChange.bind(this);
|
|
46
|
+
this.state = {
|
|
47
|
+
dataDefinitions: this.getDefaultDataDefinitions(),
|
|
48
|
+
highlightedLine: -1,
|
|
49
|
+
withTrend: false
|
|
50
|
+
};
|
|
51
51
|
}
|
|
52
52
|
componentDidUpdate(prevProps) {
|
|
53
53
|
if (prevProps.data !== this.props.data || prevProps.legendProps !== this.props.legendProps) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractChart.js","names":["_core","require","_baseComponents","_ariaProps","_assignProps3","_typography","_react","_interopRequireWildcard","_","_hints","_utils","_ChartLegend","style","sstyled","insert","NOT_A_VALUE","exports","AbstractChart","Component","constructor","props","_defineProperty2","default","makeDataHintsContainer","dataDefinitions","getDefaultDataDefinitions","highlightedLine","withTrend","setHighlightedLine","bind","handleChangeVisible","handleMouseEnter","handleMouseLeave","resolveColor","tooltipValueFormatter","handleWithTrendChange","componentDidUpdate","prevProps","data","legendProps","setState","dataKeys","map","key","index","legendData","legendMap","dataDefinition","id","label","icon","undefined","checked","defaultChecked","color","columns","additionalInfo","count","Array","isArray","value","dataValue","Map","get","interpolateValue","Number","total","Object","values","reduce","sum","i","percent","toFixed","createElement","Text","use","groupKey","keys","filter","xTicks","invertAxis","xTicksCount","yTicksCount","asProps","scale","xScale","ticks","yTicks","yScale","flatValues","result","item","add","entries","forEach","Set","maxStackedValue","max","val","barSum","Date","isNaN","getMilliseconds","totalValue","state","allNotAValue","legendItem","NaN","percentValue","Math","round","getValueScale","min","avg","log10","valueScale","isVisible","prevState","findIndex","line","colorMap","toDateString","toString","defaultLegendProps","legendType","renderLegend","direction","showLegend","patterns","length","lProps","commonLegendProps","dataHints","size","shape","w","h","disableSelectItems","callAllEventHandlers","onChangeVisibleItem","disableHoverItems","onMouseEnterItem","onMouseLeaveItem","getLegendAriaLabel","ChartLegendTable","flexLegendProps","trendLabel","trendIsVisible","onTrendIsVisibleChange","renderAxis","showXAxis","showYAxis","axisXValueFormatter","axisYValueFormatter","multilineXTicks","multilineYTicks","childrenX","children","childrenY","Fragment","YAxis","Ticks","multiline","Grid","XAxis","getTooltipChildren","options","_ref","_ref3","STooltipChildrenWrapper","Box","Tooltip","dataItem","styles","title","Flex","cn","Title","assignProps","Dot","mr","textAlign","bold","renderTooltipTotalLine","showTotalInTooltip","mt","render","_ref2","_ref4","SChart","plotWidth","plotHeight","a11yAltTextConfig","duration","eventEmitter","showTooltip","extractedAriaProps","extractAriaProps","Plot","renderTooltip","renderChart"],"sources":["../../../../src/component/Chart/AbstractChart.tsx"],"sourcesContent":["import { Flex, Box } from '@semcore/base-components';\nimport { Component, Root, sstyled } from '@semcore/core';\nimport { extractAriaProps } from '@semcore/core/lib/utils/ariaProps';\nimport { callAllEventHandlers } from '@semcore/core/lib/utils/assignProps';\nimport { Text } from '@semcore/typography';\nimport type { ScaleBand, ScaleLinear, ScaleTime } from 'd3-scale';\nimport React, { Fragment } from 'react';\n\nimport type { BaseChartProps, BaseLegendProps, ListData, ObjectData } from './AbstractChart.type';\n// @ts-ignore\nimport type { HoverLine, HoverRect } from '../..';\n// @ts-ignore\nimport { Plot, XAxis, YAxis } from '../..';\nimport { makeDataHintsContainer } from '../../a11y/hints';\nimport style from '../../style/abstract-chart.shadow.css';\nimport { interpolateValue } from '../../utils';\nimport ChartLegend, { ChartLegendTable } from '../ChartLegend';\nimport type { LegendFlexProps } from '../ChartLegend/LegendFlex/LegendFlex.type';\nimport type { LegendItem } from '../ChartLegend/LegendItem/LegendItem.type';\nimport type { LegendTableProps } from '../ChartLegend/LegendTable/LegendTable.type';\n\ntype ChartState = {\n dataDefinitions: Array<LegendItem & { columns: React.ReactNode[] }>;\n highlightedLine: number;\n withTrend: boolean;\n};\n\nexport const NOT_A_VALUE = 'n/a';\n\nexport abstract class AbstractChart<\n D extends ListData | ObjectData,\n T extends BaseChartProps<D>,\n E extends readonly ((...args: any[]) => any)[] = [],\n> extends Component<T, E, Readonly<{}>, {}, ChartState> {\n public static style = style;\n public static defaultProps: Partial<BaseChartProps<any>> = {\n direction: 'column',\n showXAxis: true,\n showYAxis: true,\n showTooltip: true,\n };\n\n /**\n * Padding from the end's of chart to the container (except axis sides)\n */\n protected plotPadding = 6;\n\n protected dataHints = makeDataHintsContainer();\n\n public state: ChartState = {\n dataDefinitions: this.getDefaultDataDefinitions(),\n highlightedLine: -1,\n withTrend: false,\n };\n\n constructor(props: T) {\n super(props);\n\n this.setHighlightedLine = this.setHighlightedLine.bind(this);\n this.handleChangeVisible = this.handleChangeVisible.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.resolveColor = this.resolveColor.bind(this);\n this.tooltipValueFormatter = this.tooltipValueFormatter.bind(this);\n this.handleWithTrendChange = this.handleWithTrendChange.bind(this);\n }\n\n public componentDidUpdate(prevProps: T) {\n if (prevProps.data !== this.props.data || prevProps.legendProps !== this.props.legendProps) {\n this.setState({ dataDefinitions: this.getDefaultDataDefinitions() });\n }\n }\n\n protected getDefaultDataDefinitions(): Array<LegendItem & { columns: React.ReactNode[] }> {\n const { data, legendProps } = this.props;\n\n return this.dataKeys.map((key, index) => {\n const legendData = legendProps?.legendMap?.[key];\n\n const dataDefinition: LegendItem & { columns: React.ReactNode[] } = {\n id: key,\n label: legendData?.label ?? key,\n icon: legendData?.icon ?? undefined,\n checked: legendData?.defaultChecked ?? true,\n color: this.resolveColor(key, index),\n columns: [],\n };\n\n if (legendData?.additionalInfo || legendData?.count) {\n dataDefinition.additionalInfo = legendData.additionalInfo\n ? { label: legendData.additionalInfo }\n : legendData.count\n ? { count: legendData.count }\n : undefined;\n }\n\n if (legendData && 'columns' in legendData) {\n dataDefinition.columns = legendData.columns || [];\n } else if (!Array.isArray(data)) {\n let value: number | undefined = undefined;\n let dataValue = data[key];\n\n if (data instanceof Map) {\n dataValue = data.get(key);\n }\n\n if (dataValue !== interpolateValue) {\n value = Number(dataValue);\n }\n\n const total = Object.values(data).reduce<number>((sum, i) => {\n if (i !== interpolateValue) {\n return sum + Number(i);\n }\n\n return sum;\n }, 0);\n const percent = value !== undefined ? ((value / total) * 100).toFixed(2) : undefined;\n\n dataDefinition.columns = [\n <Text key={`${key}_percent`} use='secondary'>\n {percent !== undefined ? `${percent}%` : ''}\n </Text>,\n <Text key={`${key}_value`} use={value ? 'primary' : 'secondary'}>\n {value ?? NOT_A_VALUE}\n </Text>,\n ];\n }\n\n return dataDefinition;\n });\n }\n\n protected abstract get xScale(): ScaleBand<any> | ScaleLinear<any, any> | ScaleTime<any, any>;\n protected abstract get yScale(): ScaleBand<any> | ScaleLinear<any, any> | ScaleTime<any, any>;\n\n protected abstract getLegendAriaLabel(): string;\n protected abstract renderChart(): React.ReactNode;\n protected abstract renderTooltip(): React.ReactNode;\n\n protected get dataKeys(): string[] {\n const { data, groupKey } = this.props;\n\n let dataKeys: string[];\n\n if (Array.isArray(data) && groupKey) {\n dataKeys = Object.keys(data[0]).filter((key) => key !== groupKey);\n } else {\n dataKeys = Object.keys(data);\n }\n\n return dataKeys;\n }\n\n protected get xTicks(): number[] | Date[] | undefined {\n const { data, invertAxis, xTicksCount, yTicksCount } = this.asProps;\n\n const scale = this.xScale;\n\n if (Array.isArray(data) && 'ticks' in scale) {\n if (invertAxis && yTicksCount) {\n return scale.ticks(yTicksCount);\n } else if (xTicksCount) {\n return scale.ticks(xTicksCount);\n }\n\n return undefined;\n }\n\n return undefined;\n }\n\n protected get yTicks(): number[] | Date[] | undefined {\n const { data, invertAxis, xTicksCount, yTicksCount } = this.asProps;\n\n const scale = this.yScale;\n\n if (Array.isArray(data) && 'ticks' in scale) {\n if (invertAxis && xTicksCount) {\n return scale.ticks(xTicksCount);\n } else if (yTicksCount) {\n return scale.ticks(yTicksCount);\n }\n\n return undefined;\n }\n\n return undefined;\n }\n\n protected get flatValues(): Set<number> {\n const { data, groupKey } = this.asProps;\n const values: any[] = Array.isArray(data) ? data : Object.values(data);\n\n const flatValues = values.reduce<Set<number>>((result, item) => {\n if (!groupKey && typeof item === 'number') {\n result.add(item);\n } else {\n Object.entries(item).forEach(([key, value]) => {\n if (key !== groupKey && typeof value === 'number') {\n result.add(value);\n }\n });\n }\n\n return result;\n }, new Set());\n\n return flatValues;\n }\n\n protected get maxStackedValue(): number {\n const { data, groupKey } = this.asProps;\n\n if (!Array.isArray(data)) {\n const max = Object.values(data).reduce<number>((sum, val) => {\n if (typeof val === 'number') {\n sum = sum + val;\n }\n\n return sum;\n }, 0);\n\n return max;\n }\n\n const max = data.reduce((max, item) => {\n const barSum = Object.entries(item).reduce<number>((sum, [key, val]) => {\n if (key === groupKey) {\n return sum;\n }\n\n if (typeof val === 'number') {\n return sum + val;\n }\n\n if (val instanceof Date && !Number.isNaN(val.getMilliseconds())) {\n return sum + val.getMilliseconds();\n }\n\n return sum;\n }, 0);\n\n if (barSum > max) {\n max = barSum;\n }\n\n return max;\n }, 0);\n\n return max;\n }\n\n protected totalValue(data: ObjectData): number {\n const { dataDefinitions } = this.state;\n\n let allNotAValue = true;\n\n const total = dataDefinitions.reduce((sum, legendItem) => {\n const item = data[legendItem.id];\n\n if (item === null) {\n allNotAValue = false;\n return sum;\n }\n\n if (typeof item === 'number') {\n allNotAValue = false;\n return sum + item;\n }\n\n if (item instanceof Date && !Number.isNaN(item.getMilliseconds())) {\n allNotAValue = false;\n return sum + item.getMilliseconds();\n }\n\n return sum;\n }, 0);\n\n if (allNotAValue) {\n return Number.NaN;\n }\n\n return total;\n }\n\n protected percentValue(data: ObjectData, key: string): string {\n const total = this.totalValue(data);\n\n const value = data[key];\n\n if (typeof value === 'number' && total !== 0) {\n const percent = Math.round((100 * value) / total);\n\n return `${percent}%`;\n }\n\n if (value === null) {\n return `0%`;\n }\n\n return NOT_A_VALUE;\n }\n\n protected getValueScale(values: number[]): number {\n const max = Math.max(...values);\n const min = Math.min(...values);\n\n const avg = (max + min) / 2;\n const count = Math.round(Math.log10(avg));\n\n const valueScale = 100 / 10 ** count;\n\n return valueScale;\n }\n\n protected setHighlightedLine(index: number) {\n this.setState({ highlightedLine: index });\n }\n\n protected handleChangeVisible(id: string, isVisible: boolean) {\n this.setState((prevState) => {\n const dataDefinitions = prevState.dataDefinitions.map((item) => {\n if (item.id === id) {\n item.checked = isVisible;\n }\n\n return item;\n });\n\n return { dataDefinitions };\n });\n }\n\n protected handleWithTrendChange(isVisible: boolean) {\n this.setState({ withTrend: isVisible });\n }\n\n protected handleMouseEnter(id: string) {\n this.setHighlightedLine(this.state.dataDefinitions.findIndex((line) => line.id === id));\n }\n\n protected handleMouseLeave() {\n this.setHighlightedLine(-1);\n }\n\n protected resolveColor(id: string, index: number) {\n return this.props.colorMap?.[id] ?? `chart-palette-order-${index + 1}`;\n }\n\n protected tooltipValueFormatter(\n value?: string | number | typeof interpolateValue | Date,\n ): string {\n const { tooltipValueFormatter } = this.asProps;\n\n if (tooltipValueFormatter) {\n return tooltipValueFormatter(value);\n }\n\n if (value === undefined || value === interpolateValue) {\n return NOT_A_VALUE;\n }\n\n if (value === null) {\n return '0';\n }\n\n if (value instanceof Date) {\n return value.toDateString();\n }\n\n return value.toString();\n }\n\n protected defaultLegendProps(): Partial<BaseLegendProps> {\n return {\n legendType: 'Flex',\n };\n }\n\n protected renderLegend() {\n const { legendProps, direction, showLegend, patterns } = this.asProps;\n\n if (\n // we hide Legend for one item on chart except not manually set to show.\n showLegend === undefined && this.dataKeys.length === 1 ||\n showLegend === false\n ) {\n return null;\n }\n\n const { dataDefinitions, withTrend } = this.state;\n const lProps = {\n ...this.defaultLegendProps(),\n ...legendProps,\n };\n\n const commonLegendProps: LegendFlexProps | LegendTableProps = {\n 'dataHints': this.dataHints,\n 'items': dataDefinitions,\n 'size': lProps.size,\n 'shape': lProps.shape,\n 'w': lProps.w,\n 'h': lProps.h,\n patterns,\n 'direction':\n lProps.direction ?? (direction === 'row' || direction === 'row-reverse' ? 'column' : 'row'),\n 'onChangeVisibleItem': lProps.disableSelectItems\n ? undefined\n : callAllEventHandlers(lProps.onChangeVisibleItem, this.handleChangeVisible),\n 'onMouseEnterItem': lProps.disableHoverItems\n ? undefined\n : callAllEventHandlers(lProps.onMouseEnterItem, this.handleMouseEnter),\n 'onMouseLeaveItem': lProps.disableHoverItems\n ? undefined\n : callAllEventHandlers(lProps.onMouseLeaveItem, this.handleMouseLeave),\n 'aria-label': this.getLegendAriaLabel(),\n };\n\n if (lProps.legendType === 'Table') {\n return <ChartLegendTable {...(commonLegendProps as LegendTableProps)} />;\n }\n\n if ('withTrend' in lProps) {\n const flexLegendProps = {\n ...commonLegendProps,\n withTrend: true,\n trendLabel: lProps.trendLabel,\n trendIsVisible: withTrend,\n onTrendIsVisibleChange: this.handleWithTrendChange,\n };\n\n return <ChartLegend {...(flexLegendProps as LegendFlexProps)} />;\n }\n\n return <ChartLegend {...(commonLegendProps as LegendFlexProps)} />;\n }\n\n protected renderAxis(): React.ReactNode {\n const {\n invertAxis,\n showXAxis,\n showYAxis,\n data,\n axisXValueFormatter,\n axisYValueFormatter,\n multilineXTicks,\n multilineYTicks,\n } = this.asProps;\n\n if (!Array.isArray(data)) {\n return null;\n }\n\n const xTicks = this.xTicks;\n const yTicks = this.yTicks;\n\n const childrenX = axisXValueFormatter\n ? ({ value }: any) => ({ children: axisXValueFormatter(value) })\n : undefined;\n const childrenY = axisYValueFormatter\n ? ({ value }: any) => ({ children: axisYValueFormatter(value) })\n : undefined;\n\n return (\n <>\n {showYAxis && (\n <YAxis>\n {yTicks\n ? (\n <YAxis.Ticks multiline={multilineYTicks} ticks={yTicks}>{childrenY}</YAxis.Ticks>\n )\n : (\n <YAxis.Ticks multiline={multilineYTicks}>{childrenY}</YAxis.Ticks>\n )}\n {invertAxis !== true && (yTicks ? <YAxis.Grid ticks={yTicks} /> : <YAxis.Grid />)}\n </YAxis>\n )}\n\n {showXAxis && (\n <XAxis>\n {xTicks\n ? (\n <XAxis.Ticks multiline={multilineXTicks} ticks={xTicks}>{childrenX}</XAxis.Ticks>\n )\n : (\n <XAxis.Ticks multiline={multilineXTicks}>{childrenX}</XAxis.Ticks>\n )}\n {invertAxis === true && (xTicks ? <XAxis.Grid ticks={xTicks} /> : <XAxis.Grid />)}\n </XAxis>\n )}\n </>\n );\n }\n\n protected getTooltipChildren<D extends ObjectData>(options: {\n Tooltip: typeof HoverLine['Tooltip'] | typeof HoverRect['Tooltip'];\n dataItem: D;\n }) {\n const STooltipChildrenWrapper = Root;\n const { Tooltip, dataItem } = options;\n\n const { styles, groupKey } = this.asProps;\n const { dataDefinitions } = this.state;\n const title = dataItem[groupKey as keyof D]?.toString();\n\n return sstyled(styles)(\n <Flex direction='column'>\n { title && <Tooltip.Title>{title}</Tooltip.Title> }\n\n <STooltipChildrenWrapper\n render={Box}\n columnsCount='2'\n __excludeProps={['data']}\n >\n {dataDefinitions.map((item) => {\n return (\n item.checked && (\n <Fragment key={item.id}>\n <Tooltip.Dot mr={2} color={item.color}>\n {item.label}\n </Tooltip.Dot>\n <Text textAlign='end' bold>{this.tooltipValueFormatter(dataItem[item.id] as string)}</Text>\n </Fragment>\n )\n );\n })}\n\n {this.renderTooltipTotalLine(dataItem)}\n </STooltipChildrenWrapper>\n </Flex>,\n );\n }\n\n protected renderTooltipTotalLine<D extends ObjectData>(dataItem: D) {\n const { showTotalInTooltip } = this.asProps;\n\n if (!showTotalInTooltip) {\n return null;\n }\n\n const total = this.totalValue(dataItem);\n\n return (\n <>\n <Box mt={2} mr={2}>Total</Box>\n <Text mt={2} textAlign='end' bold>{Number.isNaN(total) ? NOT_A_VALUE : total}</Text>\n </>\n );\n }\n\n public render() {\n const SChart = Root;\n const { styles, plotWidth, plotHeight, data, patterns, a11yAltTextConfig, duration, eventEmitter, showTooltip } =\n this.asProps;\n\n const { extractedAriaProps } = extractAriaProps(this.asProps);\n\n return sstyled(styles)(\n <SChart render={Flex} gap={5} __excludeProps={['data', 'eventEmitter']} role='group'>\n {this.renderLegend()}\n <Plot\n data={data}\n scale={[this.xScale, this.yScale]}\n width={plotWidth}\n height={plotHeight}\n dataHints={this.dataHints}\n a11yAltTextConfig={a11yAltTextConfig}\n patterns={patterns}\n duration={duration}\n eventEmitter={eventEmitter}\n {...extractedAriaProps}\n >\n {this.renderAxis()}\n {!showTooltip ? null : this.renderTooltip()}\n {this.renderChart()}\n </Plot>\n </SChart>,\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"AbstractChart.js","names":["_core","require","_baseComponents","_ariaProps","_assignProps3","_typography","_react","_interopRequireWildcard","_","_hints","_utils","_ChartLegend","style","sstyled","insert","NOT_A_VALUE","exports","AbstractChart","Component","constructor","props","_defineProperty2","default","makeDataHintsContainer","setHighlightedLine","bind","handleChangeVisible","handleMouseEnter","handleMouseLeave","resolveColor","tooltipValueFormatter","handleWithTrendChange","state","dataDefinitions","getDefaultDataDefinitions","highlightedLine","withTrend","componentDidUpdate","prevProps","data","legendProps","setState","dataKeys","map","key","index","legendData","legendMap","dataDefinition","id","label","icon","undefined","checked","defaultChecked","color","columns","additionalInfo","count","Array","isArray","value","dataValue","Map","get","interpolateValue","Number","total","Object","values","reduce","sum","i","percent","toFixed","createElement","Text","use","groupKey","keys","filter","xTicks","invertAxis","xTicksCount","yTicksCount","asProps","scale","xScale","ticks","yTicks","yScale","flatValues","result","item","add","entries","forEach","Set","maxStackedValue","max","val","barSum","Date","isNaN","getMilliseconds","totalValue","allNotAValue","legendItem","NaN","percentValue","Math","round","getValueScale","min","avg","log10","valueScale","isVisible","prevState","findIndex","line","colorMap","toDateString","toString","defaultLegendProps","legendType","renderLegend","direction","showLegend","patterns","length","lProps","commonLegendProps","dataHints","size","shape","w","h","disableSelectItems","callAllEventHandlers","onChangeVisibleItem","disableHoverItems","onMouseEnterItem","onMouseLeaveItem","getLegendAriaLabel","ChartLegendTable","flexLegendProps","trendLabel","trendIsVisible","onTrendIsVisibleChange","renderAxis","showXAxis","showYAxis","axisXValueFormatter","axisYValueFormatter","multilineXTicks","multilineYTicks","childrenX","children","childrenY","Fragment","YAxis","Ticks","multiline","Grid","XAxis","getTooltipChildren","options","_ref","_ref3","STooltipChildrenWrapper","Box","Tooltip","dataItem","styles","title","Flex","cn","Title","assignProps","Dot","mr","textAlign","bold","renderTooltipTotalLine","showTotalInTooltip","mt","render","_ref2","_ref4","SChart","plotWidth","plotHeight","a11yAltTextConfig","duration","eventEmitter","showTooltip","extractedAriaProps","extractAriaProps","Plot","renderTooltip","renderChart"],"sources":["../../../../src/component/Chart/AbstractChart.tsx"],"sourcesContent":["import { Flex, Box } from '@semcore/base-components';\nimport { Component, Root, sstyled } from '@semcore/core';\nimport { extractAriaProps } from '@semcore/core/lib/utils/ariaProps';\nimport { callAllEventHandlers } from '@semcore/core/lib/utils/assignProps';\nimport { Text } from '@semcore/typography';\nimport type { ScaleBand, ScaleLinear, ScaleTime } from 'd3-scale';\nimport React, { Fragment } from 'react';\n\nimport type { BaseChartProps, BaseLegendProps, ListData, ObjectData } from './AbstractChart.type';\n// @ts-ignore\nimport type { HoverLine, HoverRect } from '../..';\n// @ts-ignore\nimport { Plot, XAxis, YAxis } from '../..';\nimport { makeDataHintsContainer } from '../../a11y/hints';\nimport style from '../../style/abstract-chart.shadow.css';\nimport { interpolateValue } from '../../utils';\nimport ChartLegend, { ChartLegendTable } from '../ChartLegend';\nimport type { LegendFlexProps } from '../ChartLegend/LegendFlex/LegendFlex.type';\nimport type { LegendItem } from '../ChartLegend/LegendItem/LegendItem.type';\nimport type { LegendTableProps } from '../ChartLegend/LegendTable/LegendTable.type';\n\nexport type ChartState = {\n dataDefinitions: Array<LegendItem & { columns: React.ReactNode[] }>;\n highlightedLine: number;\n withTrend: boolean;\n};\n\nexport const NOT_A_VALUE = 'n/a';\n\nexport abstract class AbstractChart<\n Data extends ListData | ObjectData,\n Props extends BaseChartProps<Data>,\n Enhancers extends readonly ((...args: any[]) => any)[] = [],\n DefaultProps = {},\n State extends ChartState = ChartState,\n> extends Component<Props, Enhancers, Readonly<{}>, DefaultProps, State> {\n public static style = style;\n public static defaultProps: Partial<BaseChartProps<any>> = {\n direction: 'column',\n showXAxis: true,\n showYAxis: true,\n showTooltip: true,\n };\n\n /**\n * Padding from the end's of chart to the container (except axis sides)\n */\n protected plotPadding = 6;\n\n protected dataHints = makeDataHintsContainer();\n\n constructor(props: Props) {\n super(props);\n\n this.setHighlightedLine = this.setHighlightedLine.bind(this);\n this.handleChangeVisible = this.handleChangeVisible.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.resolveColor = this.resolveColor.bind(this);\n this.tooltipValueFormatter = this.tooltipValueFormatter.bind(this);\n this.handleWithTrendChange = this.handleWithTrendChange.bind(this);\n\n this.state = {\n dataDefinitions: this.getDefaultDataDefinitions(),\n highlightedLine: -1,\n withTrend: false,\n } as State;\n }\n\n public componentDidUpdate(prevProps: Props) {\n if (prevProps.data !== this.props.data || prevProps.legendProps !== this.props.legendProps) {\n this.setState({ dataDefinitions: this.getDefaultDataDefinitions() });\n }\n }\n\n protected getDefaultDataDefinitions(): Array<LegendItem & { columns: React.ReactNode[] }> {\n const { data, legendProps } = this.props;\n\n return this.dataKeys.map((key, index) => {\n const legendData = legendProps?.legendMap?.[key];\n\n const dataDefinition: LegendItem & { columns: React.ReactNode[] } = {\n id: key,\n label: legendData?.label ?? key,\n icon: legendData?.icon ?? undefined,\n checked: legendData?.defaultChecked ?? true,\n color: this.resolveColor(key, index),\n columns: [],\n };\n\n if (legendData?.additionalInfo || legendData?.count) {\n dataDefinition.additionalInfo = legendData.additionalInfo\n ? { label: legendData.additionalInfo }\n : legendData.count\n ? { count: legendData.count }\n : undefined;\n }\n\n if (legendData && 'columns' in legendData) {\n dataDefinition.columns = legendData.columns || [];\n } else if (!Array.isArray(data)) {\n let value: number | undefined = undefined;\n let dataValue = data[key];\n\n if (data instanceof Map) {\n dataValue = data.get(key);\n }\n\n if (dataValue !== interpolateValue) {\n value = Number(dataValue);\n }\n\n const total = Object.values(data).reduce<number>((sum, i) => {\n if (i !== interpolateValue) {\n return sum + Number(i);\n }\n\n return sum;\n }, 0);\n const percent = value !== undefined ? ((value / total) * 100).toFixed(2) : undefined;\n\n dataDefinition.columns = [\n <Text key={`${key}_percent`} use='secondary'>\n {percent !== undefined ? `${percent}%` : ''}\n </Text>,\n <Text key={`${key}_value`} use={value ? 'primary' : 'secondary'}>\n {value ?? NOT_A_VALUE}\n </Text>,\n ];\n }\n\n return dataDefinition;\n });\n }\n\n protected abstract get xScale(): ScaleBand<any> | ScaleLinear<any, any> | ScaleTime<any, any>;\n protected abstract get yScale(): ScaleBand<any> | ScaleLinear<any, any> | ScaleTime<any, any>;\n\n protected abstract getLegendAriaLabel(): string;\n protected abstract renderChart(): React.ReactNode;\n protected abstract renderTooltip(): React.ReactNode;\n\n protected get dataKeys(): string[] {\n const { data, groupKey } = this.props;\n\n let dataKeys: string[];\n\n if (Array.isArray(data) && groupKey) {\n dataKeys = Object.keys(data[0]).filter((key) => key !== groupKey);\n } else {\n dataKeys = Object.keys(data);\n }\n\n return dataKeys;\n }\n\n protected get xTicks(): number[] | Date[] | undefined {\n const { data, invertAxis, xTicksCount, yTicksCount } = this.asProps;\n\n const scale = this.xScale;\n\n if (Array.isArray(data) && 'ticks' in scale) {\n if (invertAxis && yTicksCount) {\n return scale.ticks(yTicksCount);\n } else if (xTicksCount) {\n return scale.ticks(xTicksCount);\n }\n\n return undefined;\n }\n\n return undefined;\n }\n\n protected get yTicks(): number[] | Date[] | undefined {\n const { data, invertAxis, xTicksCount, yTicksCount } = this.asProps;\n\n const scale = this.yScale;\n\n if (Array.isArray(data) && 'ticks' in scale) {\n if (invertAxis && xTicksCount) {\n return scale.ticks(xTicksCount);\n } else if (yTicksCount) {\n return scale.ticks(yTicksCount);\n }\n\n return undefined;\n }\n\n return undefined;\n }\n\n protected get flatValues(): Set<number> {\n const { data, groupKey } = this.asProps;\n const values: any[] = Array.isArray(data) ? data : Object.values(data);\n\n const flatValues = values.reduce<Set<number>>((result, item) => {\n if (!groupKey && typeof item === 'number') {\n result.add(item);\n } else {\n Object.entries(item).forEach(([key, value]) => {\n if (key !== groupKey && typeof value === 'number') {\n result.add(value);\n }\n });\n }\n\n return result;\n }, new Set());\n\n return flatValues;\n }\n\n protected get maxStackedValue(): number {\n const { data, groupKey } = this.asProps;\n\n if (!Array.isArray(data)) {\n const max = Object.values(data).reduce<number>((sum, val) => {\n if (typeof val === 'number') {\n sum = sum + val;\n }\n\n return sum;\n }, 0);\n\n return max;\n }\n\n const max = data.reduce((max, item) => {\n const barSum = Object.entries(item).reduce<number>((sum, [key, val]) => {\n if (key === groupKey) {\n return sum;\n }\n\n if (typeof val === 'number') {\n return sum + val;\n }\n\n if (val instanceof Date && !Number.isNaN(val.getMilliseconds())) {\n return sum + val.getMilliseconds();\n }\n\n return sum;\n }, 0);\n\n if (barSum > max) {\n max = barSum;\n }\n\n return max;\n }, 0);\n\n return max;\n }\n\n protected totalValue(data: ObjectData): number {\n const { dataDefinitions } = this.state;\n\n let allNotAValue = true;\n\n const total = dataDefinitions.reduce((sum, legendItem) => {\n const item = data[legendItem.id];\n\n if (item === null) {\n allNotAValue = false;\n return sum;\n }\n\n if (typeof item === 'number') {\n allNotAValue = false;\n return sum + item;\n }\n\n if (item instanceof Date && !Number.isNaN(item.getMilliseconds())) {\n allNotAValue = false;\n return sum + item.getMilliseconds();\n }\n\n return sum;\n }, 0);\n\n if (allNotAValue) {\n return Number.NaN;\n }\n\n return total;\n }\n\n protected percentValue(data: ObjectData, key: string): string {\n const total = this.totalValue(data);\n\n const value = data[key];\n\n if (typeof value === 'number' && total !== 0) {\n const percent = Math.round((100 * value) / total);\n\n return `${percent}%`;\n }\n\n if (value === null) {\n return `0%`;\n }\n\n return NOT_A_VALUE;\n }\n\n protected getValueScale(values: number[]): number {\n const max = Math.max(...values);\n const min = Math.min(...values);\n\n const avg = (max + min) / 2;\n const count = Math.round(Math.log10(avg));\n\n const valueScale = 100 / 10 ** count;\n\n return valueScale;\n }\n\n protected setHighlightedLine(index: number) {\n this.setState({ highlightedLine: index });\n }\n\n protected handleChangeVisible(id: string, isVisible: boolean) {\n this.setState((prevState) => {\n const dataDefinitions = prevState.dataDefinitions.map((item) => {\n if (item.id === id) {\n item.checked = isVisible;\n }\n\n return item;\n });\n\n return { dataDefinitions };\n });\n }\n\n protected handleWithTrendChange(isVisible: boolean) {\n this.setState({ withTrend: isVisible });\n }\n\n protected handleMouseEnter(id: string) {\n this.setHighlightedLine(this.state.dataDefinitions.findIndex((line) => line.id === id));\n }\n\n protected handleMouseLeave() {\n this.setHighlightedLine(-1);\n }\n\n protected resolveColor(id: string, index: number) {\n return this.props.colorMap?.[id] ?? `chart-palette-order-${index + 1}`;\n }\n\n protected tooltipValueFormatter(\n value?: string | number | typeof interpolateValue | Date,\n ): string {\n const { tooltipValueFormatter } = this.asProps;\n\n if (tooltipValueFormatter) {\n return tooltipValueFormatter(value);\n }\n\n if (value === undefined || value === interpolateValue) {\n return NOT_A_VALUE;\n }\n\n if (value === null) {\n return '0';\n }\n\n if (value instanceof Date) {\n return value.toDateString();\n }\n\n return value.toString();\n }\n\n protected defaultLegendProps(): Partial<BaseLegendProps> {\n return {\n legendType: 'Flex',\n };\n }\n\n protected renderLegend() {\n const { legendProps, direction, showLegend, patterns } = this.asProps;\n\n if (\n // we hide Legend for one item on chart except not manually set to show.\n showLegend === undefined && this.dataKeys.length === 1 ||\n showLegend === false\n ) {\n return null;\n }\n\n const { dataDefinitions, withTrend } = this.state;\n const lProps = {\n ...this.defaultLegendProps(),\n ...legendProps,\n };\n\n const commonLegendProps: LegendFlexProps | LegendTableProps = {\n 'dataHints': this.dataHints,\n 'items': dataDefinitions,\n 'size': lProps.size,\n 'shape': lProps.shape,\n 'w': lProps.w,\n 'h': lProps.h,\n patterns,\n 'direction':\n lProps.direction ?? (direction === 'row' || direction === 'row-reverse' ? 'column' : 'row'),\n 'onChangeVisibleItem': lProps.disableSelectItems\n ? undefined\n : callAllEventHandlers(lProps.onChangeVisibleItem, this.handleChangeVisible),\n 'onMouseEnterItem': lProps.disableHoverItems\n ? undefined\n : callAllEventHandlers(lProps.onMouseEnterItem, this.handleMouseEnter),\n 'onMouseLeaveItem': lProps.disableHoverItems\n ? undefined\n : callAllEventHandlers(lProps.onMouseLeaveItem, this.handleMouseLeave),\n 'aria-label': this.getLegendAriaLabel(),\n };\n\n if (lProps.legendType === 'Table') {\n return <ChartLegendTable {...(commonLegendProps as LegendTableProps)} />;\n }\n\n if ('withTrend' in lProps) {\n const flexLegendProps = {\n ...commonLegendProps,\n withTrend: true,\n trendLabel: lProps.trendLabel,\n trendIsVisible: withTrend,\n onTrendIsVisibleChange: this.handleWithTrendChange,\n };\n\n return <ChartLegend {...(flexLegendProps as LegendFlexProps)} />;\n }\n\n return <ChartLegend {...(commonLegendProps as LegendFlexProps)} />;\n }\n\n protected renderAxis(): React.ReactNode {\n const {\n invertAxis,\n showXAxis,\n showYAxis,\n data,\n axisXValueFormatter,\n axisYValueFormatter,\n multilineXTicks,\n multilineYTicks,\n } = this.asProps;\n\n if (!Array.isArray(data)) {\n return null;\n }\n\n const xTicks = this.xTicks;\n const yTicks = this.yTicks;\n\n const childrenX = axisXValueFormatter\n ? ({ value }: any) => ({ children: axisXValueFormatter(value) })\n : undefined;\n const childrenY = axisYValueFormatter\n ? ({ value }: any) => ({ children: axisYValueFormatter(value) })\n : undefined;\n\n return (\n <>\n {showYAxis && (\n <YAxis>\n {yTicks\n ? (\n <YAxis.Ticks multiline={multilineYTicks} ticks={yTicks}>{childrenY}</YAxis.Ticks>\n )\n : (\n <YAxis.Ticks multiline={multilineYTicks}>{childrenY}</YAxis.Ticks>\n )}\n {invertAxis !== true && (yTicks ? <YAxis.Grid ticks={yTicks} /> : <YAxis.Grid />)}\n </YAxis>\n )}\n\n {showXAxis && (\n <XAxis>\n {xTicks\n ? (\n <XAxis.Ticks multiline={multilineXTicks} ticks={xTicks}>{childrenX}</XAxis.Ticks>\n )\n : (\n <XAxis.Ticks multiline={multilineXTicks}>{childrenX}</XAxis.Ticks>\n )}\n {invertAxis === true && (xTicks ? <XAxis.Grid ticks={xTicks} /> : <XAxis.Grid />)}\n </XAxis>\n )}\n </>\n );\n }\n\n protected getTooltipChildren<D extends ObjectData>(options: {\n Tooltip: typeof HoverLine['Tooltip'] | typeof HoverRect['Tooltip'];\n dataItem: D;\n }) {\n const STooltipChildrenWrapper = Root;\n const { Tooltip, dataItem } = options;\n\n const { styles, groupKey } = this.asProps;\n const { dataDefinitions } = this.state;\n const title = dataItem[groupKey as keyof D]?.toString();\n\n return sstyled(styles)(\n <Flex direction='column'>\n { title && <Tooltip.Title>{title}</Tooltip.Title> }\n\n <STooltipChildrenWrapper\n render={Box}\n columnsCount='2'\n __excludeProps={['data']}\n >\n {dataDefinitions.map((item) => {\n return (\n item.checked && (\n <Fragment key={item.id}>\n <Tooltip.Dot mr={2} color={item.color}>\n {item.label}\n </Tooltip.Dot>\n <Text textAlign='end' bold>{this.tooltipValueFormatter(dataItem[item.id] as string)}</Text>\n </Fragment>\n )\n );\n })}\n\n {this.renderTooltipTotalLine(dataItem)}\n </STooltipChildrenWrapper>\n </Flex>,\n );\n }\n\n protected renderTooltipTotalLine<D extends ObjectData>(dataItem: D) {\n const { showTotalInTooltip } = this.asProps;\n\n if (!showTotalInTooltip) {\n return null;\n }\n\n const total = this.totalValue(dataItem);\n\n return (\n <>\n <Box mt={2} mr={2}>Total</Box>\n <Text mt={2} textAlign='end' bold>{Number.isNaN(total) ? NOT_A_VALUE : total}</Text>\n </>\n );\n }\n\n public render() {\n const SChart = Root;\n const { styles, plotWidth, plotHeight, data, patterns, a11yAltTextConfig, duration, eventEmitter, showTooltip } =\n this.asProps;\n\n const { extractedAriaProps } = extractAriaProps(this.asProps);\n\n return sstyled(styles)(\n <SChart render={Flex} gap={5} __excludeProps={['data', 'eventEmitter']} role='group'>\n {this.renderLegend()}\n <Plot\n data={data}\n scale={[this.xScale, this.yScale]}\n width={plotWidth}\n height={plotHeight}\n dataHints={this.dataHints}\n a11yAltTextConfig={a11yAltTextConfig}\n patterns={patterns}\n duration={duration}\n eventEmitter={eventEmitter}\n {...extractedAriaProps}\n >\n {this.renderAxis()}\n {!showTooltip ? null : this.renderTooltip()}\n {this.renderChart()}\n </Plot>\n </SChart>,\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,6 +10,7 @@ var _core = require("@semcore/core");
|
|
|
10
10
|
var _baseComponents = require("@semcore/base-components");
|
|
11
11
|
var _i18nEnhance = _interopRequireDefault(require("@semcore/core/lib/utils/enhances/i18nEnhance"));
|
|
12
12
|
var _resolveColorEnhance = _interopRequireDefault(require("@semcore/core/lib/utils/enhances/resolveColorEnhance"));
|
|
13
|
+
var _rafTrottle = _interopRequireDefault(require("@semcore/core/lib/utils/rafTrottle"));
|
|
13
14
|
var _uniqueID = _interopRequireDefault(require("@semcore/core/lib/utils/uniqueID"));
|
|
14
15
|
var _divider = _interopRequireDefault(require("@semcore/divider"));
|
|
15
16
|
var _typography = require("@semcore/typography");
|
|
@@ -25,12 +26,52 @@ var _Cigarette = _interopRequireDefault(require("../Cigarette/Cigarette"));
|
|
|
25
26
|
|
|
26
27
|
// @ts-ignore
|
|
27
28
|
|
|
28
|
-
const
|
|
29
|
+
const DEFAULT_MINIMAL_BAR_WIDTH = 2;
|
|
30
|
+
const DEFAULT_GAP = 2;
|
|
29
31
|
class CigaretteChartComponent extends _AbstractChart.AbstractChart {
|
|
30
|
-
constructor(
|
|
31
|
-
super(
|
|
32
|
+
constructor(props) {
|
|
33
|
+
super(props);
|
|
34
|
+
(0, _defineProperty2.default)(this, "plotRef", /*#__PURE__*/_react.default.createRef());
|
|
32
35
|
(0, _defineProperty2.default)(this, "plotPadding", 0);
|
|
33
36
|
(0, _defineProperty2.default)(this, "offset", 0);
|
|
37
|
+
(0, _defineProperty2.default)(this, "onPlotMouseMove", (0, _rafTrottle.default)(event => {
|
|
38
|
+
if (!this.plotRef.current) return;
|
|
39
|
+
const [pX, pY] = (0, _utils.eventToPoint)(event, this.plotRef.current);
|
|
40
|
+
this.setState(prevState => ({
|
|
41
|
+
pX,
|
|
42
|
+
pY
|
|
43
|
+
}));
|
|
44
|
+
}));
|
|
45
|
+
(0, _defineProperty2.default)(this, "onPlotMouseLeave", (0, _rafTrottle.default)(() => {
|
|
46
|
+
this.setState(prevState => ({
|
|
47
|
+
pX: null,
|
|
48
|
+
pY: null
|
|
49
|
+
}));
|
|
50
|
+
}));
|
|
51
|
+
this.state = {
|
|
52
|
+
...this.state,
|
|
53
|
+
pX: null,
|
|
54
|
+
pY: null
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
get activeDataDefinitions() {
|
|
58
|
+
const {
|
|
59
|
+
dataDefinitions
|
|
60
|
+
} = this.state;
|
|
61
|
+
return dataDefinitions.filter(({
|
|
62
|
+
checked
|
|
63
|
+
}) => checked);
|
|
64
|
+
}
|
|
65
|
+
get activePositiveDataDefinitions() {
|
|
66
|
+
const {
|
|
67
|
+
data
|
|
68
|
+
} = this.asProps;
|
|
69
|
+
return this.activeDataDefinitions.filter(({
|
|
70
|
+
id
|
|
71
|
+
}) => {
|
|
72
|
+
const itemValue = data[id];
|
|
73
|
+
return typeof itemValue === 'number' && itemValue > 0;
|
|
74
|
+
});
|
|
34
75
|
}
|
|
35
76
|
resolveColor(id, index) {
|
|
36
77
|
return this.props.colorMap?.[id] ?? `blue-${5 - index}00`;
|
|
@@ -48,17 +89,86 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
|
|
|
48
89
|
w: 'fit-content'
|
|
49
90
|
};
|
|
50
91
|
}
|
|
92
|
+
totalValue() {
|
|
93
|
+
const {
|
|
94
|
+
data
|
|
95
|
+
} = this.asProps;
|
|
96
|
+
return this.activeDataDefinitions.reduce((acc, {
|
|
97
|
+
id
|
|
98
|
+
}) => {
|
|
99
|
+
const itemValue = data[id];
|
|
100
|
+
if (typeof itemValue === 'number') {
|
|
101
|
+
acc += itemValue;
|
|
102
|
+
}
|
|
103
|
+
return acc;
|
|
104
|
+
}, 0);
|
|
105
|
+
}
|
|
106
|
+
computeCigaretteItems() {
|
|
107
|
+
const {
|
|
108
|
+
plotWidth,
|
|
109
|
+
plotHeight,
|
|
110
|
+
data,
|
|
111
|
+
invertAxis,
|
|
112
|
+
minimalBarWidth
|
|
113
|
+
} = this.asProps;
|
|
114
|
+
const dataDefinitions = invertAxis ? this.activeDataDefinitions : [...this.activeDataDefinitions].reverse();
|
|
115
|
+
const count = this.activePositiveDataDefinitions.length;
|
|
116
|
+
const totalGapWidth = DEFAULT_GAP * Math.max(0, count - 1);
|
|
117
|
+
const availableSpace = Math.max(0, (invertAxis ? plotWidth : plotHeight) - totalGapWidth);
|
|
118
|
+
const totalValue = this.totalValue();
|
|
119
|
+
const dataDefinitionsItemSize = dataDefinitions.map(({
|
|
120
|
+
id
|
|
121
|
+
}) => {
|
|
122
|
+
if (totalValue === 0) {
|
|
123
|
+
return 0;
|
|
124
|
+
}
|
|
125
|
+
const itemValue = data[id];
|
|
126
|
+
if (typeof itemValue !== 'number') return 0;
|
|
127
|
+
return itemValue / totalValue * availableSpace;
|
|
128
|
+
});
|
|
129
|
+
const result = dataDefinitions.map((dd, index) => ({
|
|
130
|
+
...dd,
|
|
131
|
+
value: data[dd.id],
|
|
132
|
+
dataWidth: dataDefinitionsItemSize[index],
|
|
133
|
+
visualWidth: dataDefinitionsItemSize[index],
|
|
134
|
+
isMinVisible: false
|
|
135
|
+
}));
|
|
136
|
+
const smallItems = result.filter(r => {
|
|
137
|
+
const {
|
|
138
|
+
value,
|
|
139
|
+
dataWidth
|
|
140
|
+
} = r;
|
|
141
|
+
if (typeof value !== 'number') return false;
|
|
142
|
+
return value > 0 && dataWidth < minimalBarWidth;
|
|
143
|
+
});
|
|
144
|
+
if (smallItems.length === 0) return result;
|
|
145
|
+
let extraNeeded = 0;
|
|
146
|
+
for (const smallItem of smallItems) {
|
|
147
|
+
extraNeeded += minimalBarWidth - smallItem.dataWidth;
|
|
148
|
+
smallItem.visualWidth = minimalBarWidth;
|
|
149
|
+
smallItem.isMinVisible = true;
|
|
150
|
+
}
|
|
151
|
+
const donors = result.filter(r => !r.isMinVisible && r.dataWidth > minimalBarWidth);
|
|
152
|
+
const donorCapacity = donors.reduce((s, d) => s + (d.dataWidth - minimalBarWidth), 0);
|
|
153
|
+
for (const donor of donors) {
|
|
154
|
+
const available = donor.dataWidth - minimalBarWidth;
|
|
155
|
+
const share = available / donorCapacity;
|
|
156
|
+
const taken = share * extraNeeded;
|
|
157
|
+
donor.visualWidth = donor.dataWidth - taken;
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
51
161
|
get xScale() {
|
|
52
162
|
const {
|
|
53
|
-
|
|
163
|
+
plotWidth
|
|
54
164
|
} = this.asProps;
|
|
55
|
-
return
|
|
165
|
+
return (0, _d3Scale.scaleLinear)([0, plotWidth]);
|
|
56
166
|
}
|
|
57
167
|
get yScale() {
|
|
58
168
|
const {
|
|
59
|
-
|
|
169
|
+
plotHeight
|
|
60
170
|
} = this.asProps;
|
|
61
|
-
return
|
|
171
|
+
return (0, _d3Scale.scaleLinear)([plotHeight, 0]);
|
|
62
172
|
}
|
|
63
173
|
renderChart() {
|
|
64
174
|
const {
|
|
@@ -76,18 +186,25 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
|
|
|
76
186
|
highlightedLine
|
|
77
187
|
} = this.state;
|
|
78
188
|
this.offset = 0;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
189
|
+
const items = this.computeCigaretteItems();
|
|
190
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, items.map((item, index) => {
|
|
191
|
+
const {
|
|
192
|
+
visualWidth,
|
|
193
|
+
id
|
|
194
|
+
} = item;
|
|
195
|
+
const value = data[id];
|
|
196
|
+
if (value === _utils.interpolateValue || value === null) {
|
|
82
197
|
return null;
|
|
83
198
|
}
|
|
84
|
-
const
|
|
85
|
-
const
|
|
86
|
-
const
|
|
87
|
-
const
|
|
88
|
-
const x = index === 0 ? 0 : this.offset;
|
|
199
|
+
const height = invertAxis ? plotHeight - DEFAULT_GAP * 2 : plotWidth - DEFAULT_GAP * 2;
|
|
200
|
+
const width = visualWidth;
|
|
201
|
+
const y = DEFAULT_GAP;
|
|
202
|
+
const x = this.offset;
|
|
89
203
|
const r = height < 28 ? 2 : 4;
|
|
90
|
-
this.offset
|
|
204
|
+
this.offset += visualWidth;
|
|
205
|
+
if (index < items.length - 1) {
|
|
206
|
+
this.offset += DEFAULT_GAP;
|
|
207
|
+
}
|
|
91
208
|
return /*#__PURE__*/_react.default.createElement(_Cigarette.default, {
|
|
92
209
|
key: item.id,
|
|
93
210
|
dataKey: item.id,
|
|
@@ -128,7 +245,9 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
|
|
|
128
245
|
showTooltip
|
|
129
246
|
} = this.asProps;
|
|
130
247
|
const {
|
|
131
|
-
dataDefinitions
|
|
248
|
+
dataDefinitions,
|
|
249
|
+
pX,
|
|
250
|
+
pY
|
|
132
251
|
} = this.state;
|
|
133
252
|
const STooltipChildrenWrapper = _baseComponents.Box;
|
|
134
253
|
if (!showTooltip) {
|
|
@@ -138,16 +257,20 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
|
|
|
138
257
|
x: invertAxis ? '' : undefined,
|
|
139
258
|
y: invertAxis ? undefined : '',
|
|
140
259
|
wMin: 100,
|
|
141
|
-
hideHoverLine: true
|
|
260
|
+
hideHoverLine: true,
|
|
261
|
+
xIndex: pX !== null ? this.visualScale(pX) : undefined,
|
|
262
|
+
yIndex: pY !== null ? this.visualScale(pY) : undefined
|
|
142
263
|
}, tooltipProps => {
|
|
143
264
|
var _ref4;
|
|
144
265
|
const dataKey = invertAxis ? tooltipProps.xIndex : tooltipProps.yIndex;
|
|
145
|
-
const showPercentColumn = showPercentValueInTooltip && this.totalValue(
|
|
266
|
+
const showPercentColumn = showPercentValueInTooltip && this.totalValue() !== 0;
|
|
146
267
|
if (tooltipViewType === 'single') {
|
|
147
268
|
var _ref3;
|
|
148
269
|
const item = dataDefinitions.find(dataDefItem => dataDefItem.id === dataKey);
|
|
149
270
|
if (!item) {
|
|
150
|
-
return
|
|
271
|
+
return {
|
|
272
|
+
children: null
|
|
273
|
+
};
|
|
151
274
|
}
|
|
152
275
|
return {
|
|
153
276
|
children: (_ref3 = (0, _core.sstyled)(styles), /*#__PURE__*/_react.default.createElement(STooltipChildrenWrapper, _ref3.cn("STooltipChildrenWrapper", {
|
|
@@ -206,7 +329,7 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
|
|
|
206
329
|
if (!showTotalInTooltip) {
|
|
207
330
|
return null;
|
|
208
331
|
}
|
|
209
|
-
const total = this.totalValue(
|
|
332
|
+
const total = this.totalValue();
|
|
210
333
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_baseComponents.Box, {
|
|
211
334
|
mt: 2,
|
|
212
335
|
mr: 2
|
|
@@ -248,13 +371,16 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
|
|
|
248
371
|
}), /*#__PURE__*/_react.default.createElement(_baseComponents.Flex, _ref5.cn("Flex", {
|
|
249
372
|
"direction": 'column'
|
|
250
373
|
}), header, /*#__PURE__*/_react.default.createElement(_.Plot, _ref5.cn("Plot", {
|
|
374
|
+
"ref": this.plotRef,
|
|
251
375
|
"data": data,
|
|
252
376
|
"scale": [this.xScale, this.yScale],
|
|
253
377
|
"width": plotWidth,
|
|
254
378
|
"height": plotHeight,
|
|
255
379
|
"dataHints": this.dataHints,
|
|
256
380
|
"patterns": patterns,
|
|
257
|
-
"a11yAltTextConfig": a11yAltTextConfig
|
|
381
|
+
"a11yAltTextConfig": a11yAltTextConfig,
|
|
382
|
+
"onMouseMove": this.onPlotMouseMove,
|
|
383
|
+
"onMouseLeave": this.onPlotMouseLeave
|
|
258
384
|
}), this.renderTooltip(), this.renderChart())), this.renderLegend());
|
|
259
385
|
}
|
|
260
386
|
return _ref6 = (0, _core.sstyled)(styles), /*#__PURE__*/_react.default.createElement(SChart, _ref6.cn("SChart", {
|
|
@@ -263,13 +389,16 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
|
|
|
263
389
|
"__excludeProps": ['onClick', 'data']
|
|
264
390
|
}, _ref2)
|
|
265
391
|
}), /*#__PURE__*/_react.default.createElement(_.Plot, _ref6.cn("Plot", {
|
|
392
|
+
"ref": this.plotRef,
|
|
266
393
|
"data": data,
|
|
267
394
|
"scale": [this.xScale, this.yScale],
|
|
268
395
|
"width": plotWidth,
|
|
269
396
|
"height": plotHeight,
|
|
270
397
|
"dataHints": this.dataHints,
|
|
271
398
|
"patterns": patterns,
|
|
272
|
-
"a11yAltTextConfig": a11yAltTextConfig
|
|
399
|
+
"a11yAltTextConfig": a11yAltTextConfig,
|
|
400
|
+
"onMouseMove": this.onPlotMouseMove,
|
|
401
|
+
"onMouseLeave": this.onPlotMouseLeave
|
|
273
402
|
}), this.renderTooltip(), this.renderChart()), /*#__PURE__*/_react.default.createElement(_baseComponents.Flex, _ref6.cn("Flex", {
|
|
274
403
|
"direction": 'column',
|
|
275
404
|
"gap": 2
|
|
@@ -280,42 +409,36 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
|
|
|
280
409
|
chartType: 'Cigarette'
|
|
281
410
|
});
|
|
282
411
|
}
|
|
283
|
-
get
|
|
284
|
-
const
|
|
285
|
-
data
|
|
286
|
-
} = this.asProps;
|
|
412
|
+
get visualScale() {
|
|
413
|
+
const cigaretteItems = this.computeCigaretteItems();
|
|
287
414
|
const {
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
415
|
+
range,
|
|
416
|
+
domain
|
|
417
|
+
} = cigaretteItems.reduce((acc, {
|
|
418
|
+
id,
|
|
419
|
+
visualWidth
|
|
420
|
+
}, index) => {
|
|
421
|
+
const {
|
|
422
|
+
range,
|
|
423
|
+
domain
|
|
424
|
+
} = acc;
|
|
425
|
+
if (visualWidth) {
|
|
426
|
+
range.push(id);
|
|
427
|
+
if (domain.length === 0) {
|
|
428
|
+
domain.push(visualWidth + DEFAULT_GAP);
|
|
429
|
+
return acc;
|
|
430
|
+
}
|
|
431
|
+
if (index !== cigaretteItems.length - 1) {
|
|
432
|
+
const lastAddedDomain = domain[domain.length - 1];
|
|
433
|
+
domain.push(lastAddedDomain + visualWidth + DEFAULT_GAP);
|
|
434
|
+
}
|
|
295
435
|
}
|
|
436
|
+
return acc;
|
|
437
|
+
}, {
|
|
438
|
+
range: [],
|
|
439
|
+
domain: []
|
|
296
440
|
});
|
|
297
|
-
return
|
|
298
|
-
}
|
|
299
|
-
get categoryScale() {
|
|
300
|
-
const {
|
|
301
|
-
plotWidth,
|
|
302
|
-
plotHeight,
|
|
303
|
-
invertAxis
|
|
304
|
-
} = this.asProps;
|
|
305
|
-
const range = invertAxis ? [plotHeight, 0] : [0, plotWidth];
|
|
306
|
-
return (0, _d3Scale.scaleBand)([0], range);
|
|
307
|
-
}
|
|
308
|
-
get valueScale() {
|
|
309
|
-
const {
|
|
310
|
-
plotWidth,
|
|
311
|
-
plotHeight,
|
|
312
|
-
invertAxis
|
|
313
|
-
} = this.asProps;
|
|
314
|
-
let max = 0;
|
|
315
|
-
this.selectedData.forEach(value => {
|
|
316
|
-
max = max + value;
|
|
317
|
-
});
|
|
318
|
-
return (0, _d3Scale.scaleLinear)().range(invertAxis ? [0, plotWidth] : [plotHeight, 0]).domain([0, max]);
|
|
441
|
+
return (0, _d3Scale.scaleThreshold)(domain, range);
|
|
319
442
|
}
|
|
320
443
|
}
|
|
321
444
|
(0, _defineProperty2.default)(CigaretteChartComponent, "displayName", 'Cigarette.Bar');
|
|
@@ -332,7 +455,8 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
|
|
|
332
455
|
duration: 500,
|
|
333
456
|
plotWidth: !invertAxis && !props.plotWidth ? 44 : props.plotWidth,
|
|
334
457
|
plotHeight: invertAxis && !props.plotHeight ? 28 : props.plotHeight,
|
|
335
|
-
showPercentValueInTooltip: false
|
|
458
|
+
showPercentValueInTooltip: false,
|
|
459
|
+
minimalBarWidth: DEFAULT_MINIMAL_BAR_WIDTH
|
|
336
460
|
};
|
|
337
461
|
});
|
|
338
462
|
(0, _defineProperty2.default)(CigaretteChartComponent, "enhance", [(0, _resolveColorEnhance.default)(), (0, _uniqueID.default)(), (0, _i18nEnhance.default)(_intergalacticDynamicLocales.localizedMessages)]);
|