mdt-charts 1.27.1 → 1.27.2
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/.prettierrc +6 -0
- package/lib/config/config.d.ts +13 -13
- package/lib/designer/designerConfig.d.ts +1 -1
- package/lib/engine/block/block.js +14 -14
- package/lib/engine/block/blockHelper.js +2 -2
- package/lib/engine/block/blockSvg.js +25 -28
- package/lib/engine/block/defs/LinearGradientDef.js +9 -8
- package/lib/engine/contentManager/contentManagerFactory.js +1 -1
- package/lib/engine/elementHighlighter/elementHighlighter.d.ts +3 -3
- package/lib/engine/elementHighlighter/elementHighlighter.js +52 -54
- package/lib/engine/elementHighlighter/selectHighlighter.js +7 -7
- package/lib/engine/engine.d.ts +4 -4
- package/lib/engine/engine.js +5 -5
- package/lib/engine/features/aggregator/aggregator.d.ts +1 -1
- package/lib/engine/features/aggregator/aggregator.js +43 -45
- package/lib/engine/features/axis/axis.d.ts +1 -1
- package/lib/engine/features/axis/axis.js +53 -48
- package/lib/engine/features/axis/axisDomHelper.d.ts +3 -3
- package/lib/engine/features/axis/axisDomHelper.js +6 -8
- package/lib/engine/features/axis/axisHelper.d.ts +2 -2
- package/lib/engine/features/axis/axisHelper.js +14 -21
- package/lib/engine/features/axis/axisLabelDomHelper.d.ts +3 -3
- package/lib/engine/features/axis/axisLabelDomHelper.js +74 -66
- package/lib/engine/features/axis/axisLabelsEventManager.js +11 -11
- package/lib/engine/features/embeddedLabels/embeddedLabels.d.ts +3 -3
- package/lib/engine/features/embeddedLabels/embeddedLabels.js +44 -44
- package/lib/engine/features/embeddedLabels/embeddedLabelsDomHelper.d.ts +1 -1
- package/lib/engine/features/embeddedLabels/embeddedLabelsDomHelper.js +3 -6
- package/lib/engine/features/embeddedLabels/embeddedLabelsHelper.d.ts +2 -2
- package/lib/engine/features/embeddedLabels/embeddedLabelsHelper.js +22 -20
- package/lib/engine/features/gridLine/gidLineHelper.d.ts +1 -1
- package/lib/engine/features/gridLine/gidLineHelper.js +5 -5
- package/lib/engine/features/gridLine/gridLine.js +14 -23
- package/lib/engine/features/legend/legend.js +27 -36
- package/lib/engine/features/legend/legendDomHelper.js +18 -9
- package/lib/engine/features/legend/legendEventsManager.js +18 -13
- package/lib/engine/features/legend/legendHelper.js +19 -19
- package/lib/engine/features/legend/legendHelperService.js +5 -5
- package/lib/engine/features/legend/legendMarkerCreator.js +23 -22
- package/lib/engine/features/legend/legendWidthCalculator.js +5 -7
- package/lib/engine/features/markDots/markDot.d.ts +2 -2
- package/lib/engine/features/markDots/markDot.js +35 -34
- package/lib/engine/features/markDots/markDotsHelper.js +6 -6
- package/lib/engine/features/recordOverflowAlert/recordOverflowAlertCore.js +11 -11
- package/lib/engine/features/scale/scale.d.ts +4 -5
- package/lib/engine/features/scale/scale.js +16 -25
- package/lib/engine/features/tipBox/tipBox.d.ts +2 -2
- package/lib/engine/features/tipBox/tipBox.js +13 -17
- package/lib/engine/features/tipBox/tipBoxHelper.js +5 -5
- package/lib/engine/features/title/title.d.ts +1 -1
- package/lib/engine/features/title/title.js +8 -11
- package/lib/engine/features/tolltip/newTooltip/newTooltip.d.ts +1 -1
- package/lib/engine/features/tolltip/newTooltip/newTooltip.js +6 -8
- package/lib/engine/features/tolltip/tooltip.d.ts +2 -2
- package/lib/engine/features/tolltip/tooltip.js +47 -42
- package/lib/engine/features/tolltip/tooltipComponentsManager.d.ts +2 -2
- package/lib/engine/features/tolltip/tooltipComponentsManager.js +49 -52
- package/lib/engine/features/tolltip/tooltipDomHelper.d.ts +1 -1
- package/lib/engine/features/tolltip/tooltipDomHelper.js +41 -33
- package/lib/engine/features/tolltip/tooltipHelper.js +15 -11
- package/lib/engine/features/valueLabels/valueLabels.js +24 -37
- package/lib/engine/features/valueLabels/valueLabelsHelper.js +6 -6
- package/lib/engine/features/valueLabelsCollision/valueLabelsCollision.js +9 -10
- package/lib/engine/features/valueLabelsCollision/valueLabelsCollisionHelper.js +4 -4
- package/lib/engine/filterManager/filterEventManager.js +18 -15
- package/lib/engine/helpers/domHelper.d.ts +3 -4
- package/lib/engine/helpers/domHelper.js +9 -13
- package/lib/engine/helpers/fontResizer/fontResizer.js +2 -2
- package/lib/engine/helpers/helper.js +14 -9
- package/lib/engine/helpers/namesHelper.js +2 -2
- package/lib/engine/polarNotation/donut/DonutHelper.js +6 -8
- package/lib/engine/polarNotation/donut/donut.d.ts +3 -3
- package/lib/engine/polarNotation/donut/donut.js +47 -58
- package/lib/engine/polarNotation/extenders/polarRecordOverflowAlert.js +11 -11
- package/lib/engine/polarNotation/polarManager.js +3 -5
- package/lib/engine/transitionManager.js +4 -7
- package/lib/engine/twoDimensionalNotation/area/area.d.ts +1 -1
- package/lib/engine/twoDimensionalNotation/area/area.js +77 -62
- package/lib/engine/twoDimensionalNotation/area/areaGenerator.js +4 -10
- package/lib/engine/twoDimensionalNotation/area/areaHelper.d.ts +3 -3
- package/lib/engine/twoDimensionalNotation/area/areaHelper.js +21 -13
- package/lib/engine/twoDimensionalNotation/bar/bar.d.ts +2 -2
- package/lib/engine/twoDimensionalNotation/bar/bar.js +70 -67
- package/lib/engine/twoDimensionalNotation/bar/barHelper.js +40 -35
- package/lib/engine/twoDimensionalNotation/dot/dotChart.js +60 -42
- package/lib/engine/twoDimensionalNotation/extenders/twoDimRecordOverflowAlert.js +7 -7
- package/lib/engine/twoDimensionalNotation/line/line.d.ts +4 -4
- package/lib/engine/twoDimensionalNotation/line/line.js +45 -28
- package/lib/engine/twoDimensionalNotation/line/lineBuilder.js +18 -16
- package/lib/engine/twoDimensionalNotation/line/lineGenerator.js +2 -4
- package/lib/engine/twoDimensionalNotation/line/lineHelper.d.ts +6 -6
- package/lib/engine/twoDimensionalNotation/line/lineHelper.js +26 -17
- package/lib/engine/twoDimensionalNotation/lineLike/generatorMiddleware/lineLikeGeneratorDefineMiddleware.js +1 -1
- package/lib/engine/twoDimensionalNotation/twoDimensionalManager.js +25 -21
- package/lib/engine/valueFormatter.d.ts +1 -1
- package/lib/main.d.ts +1 -0
- package/lib/main.js +8 -7
- package/lib/model/chartStyleModel/chartStyleModel.js +5 -3
- package/lib/model/chartStyleModel/colorRange.js +1 -3
- package/lib/model/chartStyleModel/twoDimensionalChartStyleModel.js +9 -7
- package/lib/model/dataManagerModel/dataManagerModel.js +28 -16
- package/lib/model/featuresModel/axisModel.d.ts +6 -3
- package/lib/model/featuresModel/axisModel.js +59 -32
- package/lib/model/featuresModel/axisModelService.js +2 -2
- package/lib/model/featuresModel/legendModel/legendCanvasModel.d.ts +1 -1
- package/lib/model/featuresModel/legendModel/legendCanvasModel.js +12 -12
- package/lib/model/featuresModel/legendModel/legendModel.js +2 -2
- package/lib/model/featuresModel/legendModel/polarMarginCalculator.js +1 -1
- package/lib/model/featuresModel/legendModel/twoDimLegendModel.js +4 -5
- package/lib/model/featuresModel/scaleModel/scaleAxisRecalcer.d.ts +4 -5
- package/lib/model/featuresModel/scaleModel/scaleAxisRecalcer.js +3 -5
- package/lib/model/featuresModel/scaleModel/scaleDomainService.js +10 -12
- package/lib/model/featuresModel/scaleModel/scaleModel.d.ts +8 -4
- package/lib/model/featuresModel/scaleModel/scaleModel.js +20 -12
- package/lib/model/featuresModel/scaleModel/scaleModelServices.js +5 -5
- package/lib/model/featuresModel/tooltipModel.js +1 -1
- package/lib/model/featuresModel/valueLabelsModel/valueLabelsModel.js +5 -5
- package/lib/model/helpers/modelHelper.js +6 -4
- package/lib/model/helpers/twoDimensionalModelHelper.d.ts +1 -1
- package/lib/model/helpers/twoDimensionalModelHelper.js +23 -23
- package/lib/model/helpers/unitsReader.js +1 -1
- package/lib/model/margin/marginModel.js +1 -1
- package/lib/model/margin/twoDim/twoDimMarginModel.d.ts +1 -0
- package/lib/model/margin/twoDim/twoDimMarginModel.js +38 -28
- package/lib/model/model.d.ts +17 -4
- package/lib/model/modelBuilder.d.ts +4 -4
- package/lib/model/modelBuilder.js +19 -18
- package/lib/model/modelInstance/canvasModel/canvasSizesModel/marginModelService.js +1 -1
- package/lib/model/modelInstance/chartBlockVersion/chartBlockVersion.d.ts +5 -0
- package/lib/model/modelInstance/chartBlockVersion/chartBlockVersion.js +8 -0
- package/lib/model/modelInstance/configReader.js +11 -10
- package/lib/model/modelInstance/dataModel/dataRepository.js +5 -5
- package/lib/model/modelInstance/modelInstance.d.ts +4 -2
- package/lib/model/modelInstance/modelInstance.js +5 -3
- package/lib/model/modelInstance/titleConfigReader.js +5 -5
- package/lib/model/notations/polar/donut/donutModel.js +1 -1
- package/lib/model/notations/polar/polarModel.js +6 -6
- package/lib/model/notations/twoDimensional/styles.d.ts +2 -2
- package/lib/model/notations/twoDimensional/styles.js +8 -8
- package/lib/model/notations/twoDimensionalModel.d.ts +0 -1
- package/lib/model/notations/twoDimensionalModel.js +32 -29
- package/package.json +59 -59
- package/tsconfig.production.json +14 -24
- package/README.md +0 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { interpolate } from
|
|
1
|
+
import { interpolate } from "d3-interpolate";
|
|
2
2
|
import { Aggregator } from "../../features/aggregator/aggregator";
|
|
3
|
-
import { DonutHelper } from
|
|
4
|
-
import { DomHelper } from
|
|
5
|
-
import { ColorReader } from
|
|
3
|
+
import { DonutHelper } from "./DonutHelper";
|
|
4
|
+
import { DomHelper } from "../../helpers/domHelper";
|
|
5
|
+
import { ColorReader } from "../../colorReader/colorReader";
|
|
6
6
|
export class Donut {
|
|
7
7
|
static render(block, data, margin, chart, blockSize, settings) {
|
|
8
8
|
const outerRadius = DonutHelper.getOuterRadius(margin, blockSize);
|
|
@@ -12,12 +12,13 @@ export class Donut {
|
|
|
12
12
|
const pieGenerator = DonutHelper.getPieGenerator(chart.data.valueField.name, settings.padAngle);
|
|
13
13
|
const translateAttr = DonutHelper.getTranslate(margin, blockSize);
|
|
14
14
|
Aggregator.render(block, chart.data.valueField, innerRadius, translateAttr, thickness, settings.aggregator);
|
|
15
|
-
const donutBlock = block
|
|
16
|
-
.
|
|
17
|
-
.
|
|
18
|
-
.attr(
|
|
19
|
-
.attr(
|
|
20
|
-
.attr(
|
|
15
|
+
const donutBlock = block
|
|
16
|
+
.getSvg()
|
|
17
|
+
.append("g")
|
|
18
|
+
.attr("class", this.donutBlockClass)
|
|
19
|
+
.attr("x", translateAttr.x)
|
|
20
|
+
.attr("y", translateAttr.y)
|
|
21
|
+
.attr("transform", `translate(${translateAttr.x}, ${translateAttr.y})`);
|
|
21
22
|
this.renderNewArcItems(arcGenerator, pieGenerator, donutBlock, data, chart);
|
|
22
23
|
this.renderClonesG(donutBlock);
|
|
23
24
|
}
|
|
@@ -27,34 +28,31 @@ export class Donut {
|
|
|
27
28
|
const innerRadius = DonutHelper.getInnerRadius(outerRadius, thickness);
|
|
28
29
|
const arcGenerator = DonutHelper.getArcGenerator(outerRadius, innerRadius);
|
|
29
30
|
const pieGenerator = DonutHelper.getPieGenerator(chart.data.valueField.name, donutSettings.padAngle);
|
|
30
|
-
const oldData = block
|
|
31
|
+
const oldData = block
|
|
32
|
+
.getSvg()
|
|
31
33
|
.selectAll(`.${this.donutBlockClass}`)
|
|
32
|
-
.selectAll(
|
|
34
|
+
.selectAll("path")
|
|
33
35
|
.data()
|
|
34
|
-
.map(d => d.data);
|
|
36
|
+
.map((d) => d.data);
|
|
35
37
|
const dataNewZeroRows = DonutHelper.mergeDataWithZeros(data, oldData, keyField, ColorReader.getChartColorField(chart));
|
|
36
38
|
const dataExtraZeroRows = DonutHelper.mergeDataWithZeros(oldData, data, keyField, ColorReader.getChartColorField(chart));
|
|
37
39
|
const donutBlock = block.getSvg().select(`.${this.donutBlockClass}`);
|
|
38
40
|
this.renderNewArcItems(arcGenerator, pieGenerator, donutBlock, dataNewZeroRows, chart);
|
|
39
|
-
const path = this.getAllArcGroups(block)
|
|
40
|
-
|
|
41
|
-
.select('path');
|
|
42
|
-
const items = this.getAllArcGroups(block)
|
|
43
|
-
.data(pieGenerator(data));
|
|
41
|
+
const path = this.getAllArcGroups(block).data(pieGenerator(dataExtraZeroRows)).select("path");
|
|
42
|
+
const items = this.getAllArcGroups(block).data(pieGenerator(data));
|
|
44
43
|
this.setElementsColor(this.getAllArcGroups(block), chart);
|
|
45
|
-
return new Promise(resolve => {
|
|
44
|
+
return new Promise((resolve) => {
|
|
46
45
|
this.raiseClonesG(block);
|
|
47
|
-
path
|
|
48
|
-
.interrupt()
|
|
46
|
+
path.interrupt()
|
|
49
47
|
.transition()
|
|
50
48
|
.duration(block.transitionManager.durations.chartUpdate)
|
|
51
|
-
.on(
|
|
49
|
+
.on("end", () => {
|
|
52
50
|
items.exit().remove();
|
|
53
|
-
resolve(
|
|
51
|
+
resolve("updated");
|
|
54
52
|
})
|
|
55
|
-
.attrTween(
|
|
53
|
+
.attrTween("d", function (d) {
|
|
56
54
|
const interpolateFunc = interpolate(this._currentData, d);
|
|
57
|
-
return t => {
|
|
55
|
+
return (t) => {
|
|
58
56
|
this._currentData = interpolateFunc(t); // _current - старые данные до обновления, задаются во время рендера
|
|
59
57
|
return arcGenerator(this._currentData);
|
|
60
58
|
};
|
|
@@ -65,61 +63,52 @@ export class Donut {
|
|
|
65
63
|
this.setElementsColor(this.getAllArcGroups(block), chart);
|
|
66
64
|
}
|
|
67
65
|
static getAllArcGroups(block) {
|
|
68
|
-
return block.getSvg()
|
|
69
|
-
.selectAll(`.${this.arcItemClass}`);
|
|
66
|
+
return block.getSvg().selectAll(`.${this.arcItemClass}`);
|
|
70
67
|
}
|
|
71
68
|
static getAllArcClones(block) {
|
|
72
|
-
return block.getSvg()
|
|
73
|
-
.selectAll(`.${Donut.arcCloneClass}`);
|
|
69
|
+
return block.getSvg().selectAll(`.${Donut.arcCloneClass}`);
|
|
74
70
|
}
|
|
75
71
|
static getAllArcShadows(block) {
|
|
76
|
-
return block.getSvg()
|
|
77
|
-
.selectAll(`.${this.arcShadowClass}`);
|
|
72
|
+
return block.getSvg().selectAll(`.${this.arcShadowClass}`);
|
|
78
73
|
}
|
|
79
74
|
static renderNewArcItems(arcGenerator, pieGenerator, donutBlock, data, chart) {
|
|
80
75
|
const items = donutBlock
|
|
81
76
|
.selectAll(`.${this.arcItemClass}`)
|
|
82
77
|
.data(pieGenerator(data))
|
|
83
78
|
.enter()
|
|
84
|
-
.append(
|
|
85
|
-
.attr(
|
|
79
|
+
.append("g")
|
|
80
|
+
.attr("class", this.arcItemClass);
|
|
86
81
|
const arcs = items
|
|
87
|
-
.append(
|
|
88
|
-
.attr(
|
|
89
|
-
.attr(
|
|
90
|
-
.each(function (d) {
|
|
82
|
+
.append("path")
|
|
83
|
+
.attr("d", arcGenerator)
|
|
84
|
+
.attr("class", this.arcPathClass)
|
|
85
|
+
.each(function (d) {
|
|
86
|
+
this._currentData = d;
|
|
87
|
+
}); // _currentData используется для получения текущих данных внутри функции обновления.
|
|
91
88
|
DomHelper.setCssClasses(arcs, chart.cssClasses);
|
|
92
89
|
this.setElementsColor(items, chart);
|
|
93
90
|
}
|
|
94
91
|
static setElementsColor(arcItems, chart) {
|
|
95
|
-
arcItems
|
|
96
|
-
.select('path')
|
|
97
|
-
.style('fill', ({ data }, i) => ColorReader.getColorForArc(data, chart, i));
|
|
92
|
+
arcItems.select("path").style("fill", ({ data }, i) => ColorReader.getColorForArc(data, chart, i));
|
|
98
93
|
}
|
|
99
94
|
/**
|
|
100
95
|
* Рендер группы для клонов сегментов доната внутри donut-block. Объекдиняет в себе стили для клонов
|
|
101
96
|
*/
|
|
102
97
|
static renderClonesG(donutBlock) {
|
|
103
|
-
const clonesShadowsG = donutBlock.append(
|
|
104
|
-
const clonesG = donutBlock.append(
|
|
98
|
+
const clonesShadowsG = donutBlock.append("g").attr("class", this.arcShadowsGroupClass).raise();
|
|
99
|
+
const clonesG = donutBlock.append("g").attr("class", this.arcClonesGroupClass).raise();
|
|
105
100
|
// ElementHighlighter.setShadowFilter(clonesG);
|
|
106
101
|
}
|
|
107
102
|
static raiseClonesG(block) {
|
|
108
|
-
block.getSvg()
|
|
109
|
-
|
|
110
|
-
.select(`.${this.arcShadowsGroupClass}`)
|
|
111
|
-
.raise();
|
|
112
|
-
block.getSvg()
|
|
113
|
-
.select(`.${this.donutBlockClass}`)
|
|
114
|
-
.select(`.${this.arcClonesGroupClass}`)
|
|
115
|
-
.raise();
|
|
103
|
+
block.getSvg().select(`.${this.donutBlockClass}`).select(`.${this.arcShadowsGroupClass}`).raise();
|
|
104
|
+
block.getSvg().select(`.${this.donutBlockClass}`).select(`.${this.arcClonesGroupClass}`).raise();
|
|
116
105
|
}
|
|
117
106
|
}
|
|
118
|
-
Donut.donutBlockClass =
|
|
119
|
-
Donut.arcPathClass =
|
|
120
|
-
Donut.arcItemClass =
|
|
121
|
-
Donut.arcHighlightedClass =
|
|
122
|
-
Donut.arcClonesGroupClass =
|
|
123
|
-
Donut.arcShadowsGroupClass =
|
|
124
|
-
Donut.arcCloneClass =
|
|
125
|
-
Donut.arcShadowClass =
|
|
107
|
+
Donut.donutBlockClass = "donut-block";
|
|
108
|
+
Donut.arcPathClass = "arc-path";
|
|
109
|
+
Donut.arcItemClass = "arc";
|
|
110
|
+
Donut.arcHighlightedClass = "arc-highlighted";
|
|
111
|
+
Donut.arcClonesGroupClass = "arc-clones";
|
|
112
|
+
Donut.arcShadowsGroupClass = "arc-shadow-clones";
|
|
113
|
+
Donut.arcCloneClass = "arc-clone";
|
|
114
|
+
Donut.arcShadowClass = "arc-shadow-clone";
|
|
@@ -2,10 +2,10 @@ import { RecordOverflowAlertCore } from "../../features/recordOverflowAlert/reco
|
|
|
2
2
|
class PolarRecordOverflowAlertClass {
|
|
3
3
|
constructor() {
|
|
4
4
|
this.text = {
|
|
5
|
-
one:
|
|
6
|
-
twoToFour:
|
|
7
|
-
tenToTwenty:
|
|
8
|
-
other:
|
|
5
|
+
one: "категория",
|
|
6
|
+
twoToFour: "категории",
|
|
7
|
+
tenToTwenty: "категорий",
|
|
8
|
+
other: "категорий"
|
|
9
9
|
};
|
|
10
10
|
}
|
|
11
11
|
render(block, options) {
|
|
@@ -22,17 +22,17 @@ class PolarRecordOverflowAlertClass {
|
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
24
|
getPositionAttrs(options) {
|
|
25
|
-
const position = options.legendPosition ===
|
|
26
|
-
if (position ===
|
|
25
|
+
const position = options.legendPosition === "off" ? "bottom" : options.legendPosition;
|
|
26
|
+
if (position === "right") {
|
|
27
27
|
return {
|
|
28
|
-
bottom:
|
|
29
|
-
right:
|
|
28
|
+
bottom: "0",
|
|
29
|
+
right: "0"
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
|
-
if (position ===
|
|
32
|
+
if (position === "bottom") {
|
|
33
33
|
return {
|
|
34
|
-
bottom:
|
|
35
|
-
left:
|
|
34
|
+
bottom: "0",
|
|
35
|
+
left: "0"
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
}
|
|
@@ -19,8 +19,7 @@ export class PolarManager {
|
|
|
19
19
|
hidedRecordsAmount: model.dataSettings.scope.hidedRecordsAmount,
|
|
20
20
|
legendPosition: model.options.legend.position
|
|
21
21
|
});
|
|
22
|
-
engine.block.getSvg()
|
|
23
|
-
.on('click', (e) => {
|
|
22
|
+
engine.block.getSvg().on("click", (e) => {
|
|
24
23
|
if (e.target === engine.block.getSvg().node())
|
|
25
24
|
this.clearSelection(engine.block.filterEventManager, model);
|
|
26
25
|
});
|
|
@@ -35,8 +34,7 @@ export class PolarManager {
|
|
|
35
34
|
ElementHighlighter.toggleActivityStyle(Donut.getAllArcGroups(block), true);
|
|
36
35
|
Tooltip.hide(block);
|
|
37
36
|
const options = model.options;
|
|
38
|
-
Donut.update(block, data[options.data.dataSource], model.chartBlock.margin, options.charts[0], model.blockCanvas.size, options.chartCanvas, options.data.keyField.name)
|
|
39
|
-
.then(() => {
|
|
37
|
+
Donut.update(block, data[options.data.dataSource], model.chartBlock.margin, options.charts[0], model.blockCanvas.size, options.chartCanvas, options.data.keyField.name).then(() => {
|
|
40
38
|
Tooltip.render(block, model, data, model.otherComponents.tooltipBlock);
|
|
41
39
|
block.filterEventManager.setListenerPolar(model.chartBlock.margin, model.blockCanvas.size, options);
|
|
42
40
|
});
|
|
@@ -56,7 +54,7 @@ export class PolarManager {
|
|
|
56
54
|
}
|
|
57
55
|
renderCharts(block, charts, data, dataSource, margin, blockSize, donutSettings) {
|
|
58
56
|
charts.forEach((chart) => {
|
|
59
|
-
if (chart.type ===
|
|
57
|
+
if (chart.type === "donut")
|
|
60
58
|
Donut.render(block, data[dataSource], margin, chart, blockSize, donutSettings);
|
|
61
59
|
});
|
|
62
60
|
}
|
|
@@ -40,14 +40,11 @@ export class TransitionManager {
|
|
|
40
40
|
this.setDurations(transitionsDurations);
|
|
41
41
|
}
|
|
42
42
|
interruptTransitions() {
|
|
43
|
-
this.transitionableElemClasses.forEach(elemClass => {
|
|
44
|
-
const elementsSelection = this.block
|
|
45
|
-
|
|
46
|
-
.selectAll(`.${elemClass}`)
|
|
47
|
-
.interrupt();
|
|
48
|
-
elementsSelection.nodes().forEach(node => interrupt(node));
|
|
43
|
+
this.transitionableElemClasses.forEach((elemClass) => {
|
|
44
|
+
const elementsSelection = this.block.getSvg().selectAll(`.${elemClass}`).interrupt();
|
|
45
|
+
elementsSelection.nodes().forEach((node) => interrupt(node));
|
|
49
46
|
});
|
|
50
|
-
this.block.getSvg().selectAll(`.${Axis.axesClass}`).selectAll(
|
|
47
|
+
this.block.getSvg().selectAll(`.${Axis.axesClass}`).selectAll("*").interrupt();
|
|
51
48
|
}
|
|
52
49
|
setDurations(durations) {
|
|
53
50
|
if (durations.chartUpdate !== undefined && durations.chartUpdate >= 0)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BlockMargin, Field, LineLikeChartSettings, Orient, TwoDimensionalChartModel } from "../../../model/model";
|
|
2
2
|
import { Scales } from "../../features/scale/scale";
|
|
3
3
|
import { Block } from "../../block/block";
|
|
4
|
-
import { MdtChartsDataRow } from
|
|
4
|
+
import { MdtChartsDataRow } from "../../../config/config";
|
|
5
5
|
interface AreaOptions {
|
|
6
6
|
staticSettings: LineLikeChartSettings;
|
|
7
7
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { select } from
|
|
1
|
+
import { select } from "d3-selection";
|
|
2
2
|
import { MarkDot } from "../../features/markDots/markDot";
|
|
3
|
-
import { AreaGeneratorFactory } from
|
|
4
|
-
import { DomHelper } from
|
|
5
|
-
import { Helper } from
|
|
6
|
-
import { getStackedDataWithOwn } from
|
|
3
|
+
import { AreaGeneratorFactory } from "./areaHelper";
|
|
4
|
+
import { DomHelper } from "../../helpers/domHelper";
|
|
5
|
+
import { Helper } from "../../helpers/helper";
|
|
6
|
+
import { getStackedDataWithOwn } from "../bar/stackedData/dataStacker";
|
|
7
7
|
import { getStackedData, LineGeneratorFactory } from "../../../engine/twoDimensionalNotation/line/lineHelper";
|
|
8
8
|
import { Line } from "../../../engine/twoDimensionalNotation/line/line";
|
|
9
9
|
import { LineBuilder } from "../../../engine/twoDimensionalNotation/line/lineBuilder";
|
|
@@ -33,13 +33,11 @@ export class Area {
|
|
|
33
33
|
updateColors(block, chart) {
|
|
34
34
|
chart.data.valueFields.forEach((_vf, valueIndex) => {
|
|
35
35
|
const chartGroup = block.svg.getChartGroup(chart.index);
|
|
36
|
-
const areaPath = chartGroup
|
|
37
|
-
.select(`.${Area.areaChartClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
|
|
36
|
+
const areaPath = chartGroup.select(`.${Area.areaChartClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
|
|
38
37
|
this.setChartFillStyle(chart, areaPath, valueIndex);
|
|
39
38
|
if (chart.areaViewOptions.borderLine.on) {
|
|
40
|
-
const borderLinePath = chartGroup
|
|
41
|
-
|
|
42
|
-
DomHelper.setChartElementColor(borderLinePath, chart.style.elementColors, valueIndex, 'stroke');
|
|
39
|
+
const borderLinePath = chartGroup.select(`.${Area.areaBorderLineClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
|
|
40
|
+
DomHelper.setChartElementColor(borderLinePath, chart.style.elementColors, valueIndex, "stroke");
|
|
43
41
|
}
|
|
44
42
|
MarkDot.updateColors(block, chart, valueIndex);
|
|
45
43
|
});
|
|
@@ -84,95 +82,113 @@ export class Area {
|
|
|
84
82
|
];
|
|
85
83
|
}
|
|
86
84
|
updateGroupedPath(block, areaObject, areaGenerator, newData) {
|
|
87
|
-
return new Promise(resolve => {
|
|
85
|
+
return new Promise((resolve) => {
|
|
88
86
|
if (areaObject.size() === 0) {
|
|
89
|
-
resolve(
|
|
87
|
+
resolve("");
|
|
90
88
|
return;
|
|
91
89
|
}
|
|
92
90
|
let areaHandler = areaObject;
|
|
93
91
|
if (block.transitionManager.durations.chartUpdate > 0)
|
|
94
|
-
areaHandler = areaHandler
|
|
92
|
+
areaHandler = areaHandler
|
|
93
|
+
.interrupt()
|
|
95
94
|
.transition()
|
|
96
95
|
.duration(block.transitionManager.durations.chartUpdate)
|
|
97
|
-
.on(
|
|
98
|
-
areaHandler
|
|
99
|
-
.attr('d', areaGenerator(newData));
|
|
96
|
+
.on("end", () => resolve(""));
|
|
97
|
+
areaHandler.attr("d", areaGenerator(newData));
|
|
100
98
|
if (block.transitionManager.durations.chartUpdate <= 0)
|
|
101
|
-
resolve(
|
|
99
|
+
resolve("");
|
|
102
100
|
});
|
|
103
101
|
}
|
|
104
102
|
updateSegmentedPath(block, areasObjects, areaGenerator) {
|
|
105
|
-
return new Promise(resolve => {
|
|
103
|
+
return new Promise((resolve) => {
|
|
106
104
|
if (areasObjects.size() === 0) {
|
|
107
|
-
resolve(
|
|
105
|
+
resolve("");
|
|
108
106
|
return;
|
|
109
107
|
}
|
|
110
108
|
let areaHandler = areasObjects;
|
|
111
109
|
if (block.transitionManager.durations.chartUpdate > 0)
|
|
112
|
-
areaHandler = areaHandler
|
|
110
|
+
areaHandler = areaHandler
|
|
111
|
+
.interrupt()
|
|
113
112
|
.transition()
|
|
114
113
|
.duration(block.transitionManager.durations.chartUpdate)
|
|
115
|
-
.on(
|
|
116
|
-
areaHandler
|
|
117
|
-
.attr('d', d => areaGenerator(d));
|
|
114
|
+
.on("end", () => resolve(""));
|
|
115
|
+
areaHandler.attr("d", (d) => areaGenerator(d));
|
|
118
116
|
if (block.transitionManager.durations.chartUpdate <= 0)
|
|
119
|
-
resolve(
|
|
117
|
+
resolve("");
|
|
120
118
|
});
|
|
121
119
|
}
|
|
122
120
|
setChartFillStyle(chart, path, valueIndex) {
|
|
123
|
-
if (chart.areaViewOptions.fill.type ===
|
|
124
|
-
|
|
121
|
+
if (chart.areaViewOptions.fill.type === "gradient") {
|
|
122
|
+
path.style("fill", `url(#${chart.areaViewOptions.fill.ids[valueIndex]})`);
|
|
123
|
+
}
|
|
125
124
|
else
|
|
126
|
-
DomHelper.setChartStyle(path, chart.style, valueIndex,
|
|
125
|
+
DomHelper.setChartStyle(path, chart.style, valueIndex, "fill");
|
|
127
126
|
}
|
|
128
127
|
createAreaGeneratorFactory(chart, scales, margin, keyAxisOrient, keyField) {
|
|
129
|
-
return new AreaGeneratorFactory({
|
|
128
|
+
return new AreaGeneratorFactory({
|
|
129
|
+
keyAxisOrient,
|
|
130
|
+
scales,
|
|
131
|
+
keyFieldName: keyField.name,
|
|
132
|
+
margin,
|
|
133
|
+
shouldRender: chart.lineLikeViewOptions.renderForKey,
|
|
134
|
+
curve: this.options.staticSettings.shape.curve.type
|
|
135
|
+
});
|
|
130
136
|
}
|
|
131
137
|
createLineGeneratorFactory(chart, scales, margin, keyAxisOrient, keyField) {
|
|
132
|
-
return new LineGeneratorFactory({
|
|
138
|
+
return new LineGeneratorFactory({
|
|
139
|
+
keyAxisOrient,
|
|
140
|
+
scales,
|
|
141
|
+
keyFieldName: keyField.name,
|
|
142
|
+
margin,
|
|
143
|
+
shouldRender: chart.lineLikeViewOptions.renderForKey,
|
|
144
|
+
curve: this.options.staticSettings.shape.curve.type
|
|
145
|
+
});
|
|
133
146
|
}
|
|
134
147
|
renderArea(areaGeneratorFactory, block, chart, data, field, valueIndex) {
|
|
135
148
|
const area = areaGeneratorFactory.getAreaGenerator(field.name);
|
|
136
|
-
const path = block.svg
|
|
137
|
-
.
|
|
138
|
-
.
|
|
139
|
-
.attr(
|
|
140
|
-
.
|
|
141
|
-
.style(
|
|
149
|
+
const path = block.svg
|
|
150
|
+
.getChartGroup(chart.index)
|
|
151
|
+
.append("path")
|
|
152
|
+
.attr("d", area(data))
|
|
153
|
+
.attr("class", Area.areaChartClass)
|
|
154
|
+
.style("clip-path", `url(#${block.svg.getClipPathId()})`)
|
|
155
|
+
.style("pointer-events", "none");
|
|
142
156
|
DomHelper.setCssClasses(path, Helper.getCssClassesWithElementIndex(chart.cssClasses, valueIndex));
|
|
143
157
|
this.setChartFillStyle(chart, path, valueIndex);
|
|
144
158
|
}
|
|
145
159
|
renderBorderLine(lineGeneratorFactory, block, chart, data, field, valueIndex) {
|
|
146
160
|
const lineGenerator = lineGeneratorFactory.getLineGenerator(field.name);
|
|
147
|
-
const linePath = block.svg
|
|
148
|
-
.
|
|
149
|
-
.
|
|
150
|
-
.attr(
|
|
151
|
-
.
|
|
152
|
-
.style(
|
|
153
|
-
.style(
|
|
161
|
+
const linePath = block.svg
|
|
162
|
+
.getChartGroup(chart.index)
|
|
163
|
+
.append("path")
|
|
164
|
+
.attr("d", lineGenerator(data))
|
|
165
|
+
.attr("class", `${Area.areaBorderLineClass}`)
|
|
166
|
+
.style("fill", "none")
|
|
167
|
+
.style("clip-path", `url(#${block.svg.getClipPathId()})`)
|
|
168
|
+
.style("pointer-events", "none");
|
|
154
169
|
DomHelper.setCssClasses(linePath, Helper.getCssClassesWithElementIndex(chart.cssClasses, valueIndex));
|
|
155
|
-
DomHelper.setChartStyle(linePath, chart.areaViewOptions.borderLine.colorStyle, valueIndex,
|
|
170
|
+
DomHelper.setChartStyle(linePath, chart.areaViewOptions.borderLine.colorStyle, valueIndex, "stroke");
|
|
156
171
|
}
|
|
157
172
|
renderAreaSegmented(areaGeneratorFactory, block, scales, data, keyField, margin, keyAxisOrient, chart) {
|
|
158
|
-
const stackedData = getStackedDataWithOwn(data, chart.data.valueFields.map(field => field.name));
|
|
173
|
+
const stackedData = getStackedDataWithOwn(data, chart.data.valueFields.map((field) => field.name));
|
|
159
174
|
const areaGenerator = areaGeneratorFactory.getSegmentedAreaGenerator();
|
|
160
|
-
const areas = block.svg
|
|
175
|
+
const areas = block.svg
|
|
176
|
+
.getChartGroup(chart.index)
|
|
161
177
|
.selectAll(`.${Area.areaChartClass}${Helper.getCssClassesLine(chart.cssClasses)}`)
|
|
162
178
|
.data(stackedData)
|
|
163
179
|
.enter()
|
|
164
|
-
.append(
|
|
165
|
-
.attr(
|
|
166
|
-
.attr(
|
|
167
|
-
.style(
|
|
168
|
-
.style(
|
|
180
|
+
.append("path")
|
|
181
|
+
.attr("d", (d) => areaGenerator(d))
|
|
182
|
+
.attr("class", Area.areaChartClass)
|
|
183
|
+
.style("clip-path", `url(#${block.svg.getClipPathId()})`)
|
|
184
|
+
.style("pointer-events", "none");
|
|
169
185
|
const thisClass = this;
|
|
170
186
|
areas.each(function (_, i) {
|
|
171
187
|
thisClass.setChartFillStyle(chart, select(this), i);
|
|
172
188
|
DomHelper.setCssClasses(select(this), Helper.getCssClassesWithElementIndex(chart.cssClasses, i));
|
|
173
189
|
});
|
|
174
190
|
stackedData.forEach((dataset, index) => {
|
|
175
|
-
MarkDot.render(block, dataset, keyAxisOrient, scales, margin, keyField.name, index,
|
|
191
|
+
MarkDot.render(block, dataset, keyAxisOrient, scales, margin, keyField.name, index, "1", chart);
|
|
176
192
|
});
|
|
177
193
|
}
|
|
178
194
|
renderBorderLineSegmented(generatorFactory, block, data, chart) {
|
|
@@ -188,14 +204,14 @@ export class Area {
|
|
|
188
204
|
});
|
|
189
205
|
}
|
|
190
206
|
updateAreaSegmented(block, scales, newData, keyField, margin, chart, keyAxisOrient) {
|
|
191
|
-
const stackedData = getStackedDataWithOwn(newData, chart.data.valueFields.map(field => field.name));
|
|
207
|
+
const stackedData = getStackedDataWithOwn(newData, chart.data.valueFields.map((field) => field.name));
|
|
192
208
|
const generatorFactory = this.createAreaGeneratorFactory(chart, scales, margin, keyAxisOrient, keyField);
|
|
193
209
|
const areaGenerator = generatorFactory.getSegmentedAreaGenerator();
|
|
194
210
|
const areas = this.getAllAreasWithNewData(stackedData, block, chart, Area.areaChartClass);
|
|
195
211
|
const prom = this.updateSegmentedPath(block, areas, areaGenerator);
|
|
196
212
|
areas.each(function (dataset, index) {
|
|
197
213
|
// '1' - атрибут, показывающий координаты согласно полю значения
|
|
198
|
-
MarkDot.update(block, dataset, keyAxisOrient, scales, margin, keyField.name, index,
|
|
214
|
+
MarkDot.update(block, dataset, keyAxisOrient, scales, margin, keyField.name, index, "1", chart);
|
|
199
215
|
});
|
|
200
216
|
return prom;
|
|
201
217
|
}
|
|
@@ -212,25 +228,24 @@ export class Area {
|
|
|
212
228
|
}
|
|
213
229
|
updateArea(areaGeneratorFactory, chartGroup, block, field, chart, newData, valueIndex) {
|
|
214
230
|
const areaGenerator = areaGeneratorFactory.getAreaGenerator(field.name);
|
|
215
|
-
const areaObject = chartGroup
|
|
216
|
-
.select(`.${Area.areaChartClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
|
|
231
|
+
const areaObject = chartGroup.select(`.${Area.areaChartClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
|
|
217
232
|
return this.updateGroupedPath(block, areaObject, areaGenerator, newData);
|
|
218
233
|
}
|
|
219
234
|
updateBorderLine(lineGeneratorFactory, chartGroup, block, field, chart, newData, valueIndex) {
|
|
220
235
|
const borderLineGenerator = lineGeneratorFactory.getLineGenerator(field.name);
|
|
221
|
-
const borderLineObject = chartGroup
|
|
222
|
-
.select(`.${Area.areaBorderLineClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
|
|
236
|
+
const borderLineObject = chartGroup.select(`.${Area.areaBorderLineClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
|
|
223
237
|
return Line.updateGroupedPath(block, borderLineObject, borderLineGenerator, newData);
|
|
224
238
|
}
|
|
225
239
|
getAllAreasWithNewData(stackedData, block, chart, lineClass) {
|
|
226
|
-
return block.svg
|
|
240
|
+
return block.svg
|
|
241
|
+
.getChartGroup(chart.index)
|
|
227
242
|
.selectAll(`path.${lineClass}${Helper.getCssClassesLine(chart.cssClasses)}`)
|
|
228
243
|
.data(stackedData);
|
|
229
244
|
}
|
|
230
245
|
getLineGeneratorFactory(chart, scales, margin, keyAxisOrient, keyField) {
|
|
231
|
-
return chart.areaViewOptions.borderLine.on
|
|
232
|
-
|
|
246
|
+
return (chart.areaViewOptions.borderLine.on &&
|
|
247
|
+
this.createLineGeneratorFactory(chart, scales, margin, keyAxisOrient, keyField));
|
|
233
248
|
}
|
|
234
249
|
}
|
|
235
|
-
Area.areaChartClass =
|
|
236
|
-
Area.areaBorderLineClass =
|
|
250
|
+
Area.areaChartClass = "area";
|
|
251
|
+
Area.areaBorderLineClass = "area-border-line";
|
|
@@ -4,19 +4,13 @@ export class AreaGenerator {
|
|
|
4
4
|
this.options = options;
|
|
5
5
|
}
|
|
6
6
|
getVertical(xValue, y0Value, y1Value) {
|
|
7
|
-
const generator = area()
|
|
8
|
-
|
|
9
|
-
.y0(y0Value)
|
|
10
|
-
.y1(y1Value);
|
|
11
|
-
this.options.middlewares.forEach(middleware => middleware.handle(generator));
|
|
7
|
+
const generator = area().x(xValue).y0(y0Value).y1(y1Value);
|
|
8
|
+
this.options.middlewares.forEach((middleware) => middleware.handle(generator));
|
|
12
9
|
return generator;
|
|
13
10
|
}
|
|
14
11
|
getHorizontal(x0Value, x1Value, yValue) {
|
|
15
|
-
const generator = area()
|
|
16
|
-
|
|
17
|
-
.x1(x1Value)
|
|
18
|
-
.y(yValue);
|
|
19
|
-
this.options.middlewares.forEach(middleware => middleware.handle(generator));
|
|
12
|
+
const generator = area().x0(x0Value).x1(x1Value).y(yValue);
|
|
13
|
+
this.options.middlewares.forEach((middleware) => middleware.handle(generator));
|
|
20
14
|
return generator;
|
|
21
15
|
}
|
|
22
16
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Area as IArea } from
|
|
2
|
-
import { MdtChartsDataRow } from
|
|
3
|
-
import { LineLikeGeneratorFactoryOptions } from
|
|
1
|
+
import { Area as IArea } from "d3-shape";
|
|
2
|
+
import { MdtChartsDataRow } from "../../../config/config";
|
|
3
|
+
import { LineLikeGeneratorFactoryOptions } from "../lineLike/generatorFactory/lineLikeGeneratorFactory";
|
|
4
4
|
export declare class AreaGeneratorFactory {
|
|
5
5
|
private readonly options;
|
|
6
6
|
constructor(options: LineLikeGeneratorFactoryOptions);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Scale } from "../../features/scale/scale";
|
|
2
|
-
import { LineLikeGeneratorDefinedMiddleware } from
|
|
3
|
-
import { AreaGenerator } from
|
|
4
|
-
import { LineLikeGeneratorCurveMiddleware } from
|
|
2
|
+
import { LineLikeGeneratorDefinedMiddleware } from "../lineLike/generatorMiddleware/lineLikeGeneratorDefineMiddleware";
|
|
3
|
+
import { AreaGenerator } from "./areaGenerator";
|
|
4
|
+
import { LineLikeGeneratorCurveMiddleware } from "../lineLike/generatorMiddleware/lineLikeGeneratorCurveMiddleware";
|
|
5
5
|
export class AreaGeneratorFactory {
|
|
6
6
|
constructor(options) {
|
|
7
7
|
this.options = options;
|
|
@@ -11,14 +11,18 @@ export class AreaGeneratorFactory {
|
|
|
11
11
|
const generator = new AreaGenerator({
|
|
12
12
|
middlewares: [
|
|
13
13
|
new LineLikeGeneratorCurveMiddleware({ curve: this.options.curve }),
|
|
14
|
-
new LineLikeGeneratorDefinedMiddleware({
|
|
14
|
+
new LineLikeGeneratorDefinedMiddleware({
|
|
15
|
+
definedFn: shouldRender,
|
|
16
|
+
valueFieldNameGetter: () => valueFieldName,
|
|
17
|
+
dataRowGetter: (d) => d
|
|
18
|
+
})
|
|
15
19
|
]
|
|
16
20
|
});
|
|
17
|
-
if (keyAxisOrient ===
|
|
18
|
-
return generator.getVertical(d => Scale.getScaledValue(scales.key, d[keyFieldName]) + margin.left, d => scales.value(0) + margin.top, d => scales.value(d[valueFieldName]) + margin.top);
|
|
21
|
+
if (keyAxisOrient === "bottom" || keyAxisOrient === "top") {
|
|
22
|
+
return generator.getVertical((d) => Scale.getScaledValue(scales.key, d[keyFieldName]) + margin.left, (d) => scales.value(0) + margin.top, (d) => scales.value(d[valueFieldName]) + margin.top);
|
|
19
23
|
}
|
|
20
|
-
if (keyAxisOrient ===
|
|
21
|
-
return generator.getHorizontal(d => scales.value(0) + margin.left, d => scales.value(d[valueFieldName]) + margin.left, d => Scale.getScaledValue(scales.key, d[keyFieldName]) + margin.top);
|
|
24
|
+
if (keyAxisOrient === "left" || keyAxisOrient === "right") {
|
|
25
|
+
return generator.getHorizontal((d) => scales.value(0) + margin.left, (d) => scales.value(d[valueFieldName]) + margin.left, (d) => Scale.getScaledValue(scales.key, d[keyFieldName]) + margin.top);
|
|
22
26
|
}
|
|
23
27
|
}
|
|
24
28
|
getSegmentedAreaGenerator() {
|
|
@@ -26,14 +30,18 @@ export class AreaGeneratorFactory {
|
|
|
26
30
|
const generator = new AreaGenerator({
|
|
27
31
|
middlewares: [
|
|
28
32
|
new LineLikeGeneratorCurveMiddleware({ curve: this.options.curve }),
|
|
29
|
-
new LineLikeGeneratorDefinedMiddleware({
|
|
33
|
+
new LineLikeGeneratorDefinedMiddleware({
|
|
34
|
+
definedFn: shouldRender,
|
|
35
|
+
valueFieldNameGetter: (d) => d.fieldName,
|
|
36
|
+
dataRowGetter: (d) => d.data
|
|
37
|
+
})
|
|
30
38
|
]
|
|
31
39
|
});
|
|
32
|
-
if (keyAxisOrient ===
|
|
33
|
-
return generator.getVertical(d => Scale.getScaledValue(scales.key, d.data[keyFieldName]) + margin.left, d => scales.value(d[0]) + margin.top, d => scales.value(d[1]) + margin.top);
|
|
40
|
+
if (keyAxisOrient === "bottom" || keyAxisOrient === "top") {
|
|
41
|
+
return generator.getVertical((d) => Scale.getScaledValue(scales.key, d.data[keyFieldName]) + margin.left, (d) => scales.value(d[0]) + margin.top, (d) => scales.value(d[1]) + margin.top);
|
|
34
42
|
}
|
|
35
|
-
if (keyAxisOrient ===
|
|
36
|
-
return generator.getHorizontal(d => scales.value(d[0]) + margin.left, d => scales.value(d[1]) + margin.left, d => Scale.getScaledValue(scales.key, d.data[keyFieldName]) + margin.top);
|
|
43
|
+
if (keyAxisOrient === "left" || keyAxisOrient === "right") {
|
|
44
|
+
return generator.getHorizontal((d) => scales.value(d[0]) + margin.left, (d) => scales.value(d[1]) + margin.left, (d) => Scale.getScaledValue(scales.key, d.data[keyFieldName]) + margin.top);
|
|
37
45
|
}
|
|
38
46
|
}
|
|
39
47
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Selection, BaseType } from
|
|
1
|
+
import { Selection, BaseType } from "d3-selection";
|
|
2
2
|
import { BarChartSettings, BlockMargin, Field, Orient, TwoDimensionalChartModel } from "../../../model/model";
|
|
3
3
|
import { Scales } from "../../features/scale/scale";
|
|
4
4
|
import { Block } from "../../block/block";
|
|
@@ -9,7 +9,7 @@ export interface RectElemWithAttrs extends SVGElement {
|
|
|
9
9
|
y: number;
|
|
10
10
|
width: number;
|
|
11
11
|
height: number;
|
|
12
|
-
orient:
|
|
12
|
+
orient: "vertical" | "horizontal";
|
|
13
13
|
scaleSize: number;
|
|
14
14
|
};
|
|
15
15
|
}
|