mdt-charts 1.12.12 → 1.12.16

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.
Files changed (59) hide show
  1. package/lib/config/config.d.ts +2 -2
  2. package/lib/engine/contentManager/contentManager.d.ts +9 -0
  3. package/lib/engine/contentManager/contentManager.js +15 -0
  4. package/lib/engine/contentManager/contentManagerFactory.d.ts +14 -0
  5. package/lib/engine/contentManager/contentManagerFactory.js +20 -0
  6. package/lib/engine/engine.js +4 -4
  7. package/lib/engine/features/tolltip/newTooltip/newTooltip.js +1 -1
  8. package/lib/engine/features/tolltip/tooltip.d.ts +4 -4
  9. package/lib/engine/features/tolltip/tooltip.js +4 -4
  10. package/lib/engine/polarNotation/polarManager.d.ts +6 -5
  11. package/lib/engine/polarNotation/polarManager.js +4 -4
  12. package/lib/engine/twoDimensionalNotation/twoDimensionalManager.d.ts +7 -6
  13. package/lib/engine/twoDimensionalNotation/twoDimensionalManager.js +5 -5
  14. package/lib/model/dataManagerModel/dataManagerModel.js +2 -0
  15. package/lib/model/featuresModel/legendModel/legendModel.d.ts +2 -1
  16. package/lib/model/featuresModel/legendModel/legendModel.js +9 -2
  17. package/lib/model/featuresModel/legendModel/polarMarginCalculator.js +2 -3
  18. package/lib/model/featuresModel/legendModel/twoDimLegendModel.d.ts +2 -1
  19. package/lib/model/featuresModel/legendModel/twoDimLegendModel.js +7 -6
  20. package/lib/model/featuresModel/scaleModel/scaleAxisRecalcer.js +3 -1
  21. package/lib/model/featuresModel/scaleModel/scaleDomainService.d.ts +6 -0
  22. package/lib/model/featuresModel/scaleModel/scaleDomainService.js +53 -0
  23. package/lib/model/featuresModel/scaleModel/scaleModel.d.ts +5 -12
  24. package/lib/model/featuresModel/scaleModel/scaleModel.js +11 -94
  25. package/lib/model/featuresModel/scaleModel/scaleModelServices.d.ts +5 -0
  26. package/lib/model/featuresModel/scaleModel/scaleModelServices.js +22 -0
  27. package/lib/model/margin/marginModel.d.ts +5 -6
  28. package/lib/model/margin/marginModel.js +10 -16
  29. package/lib/model/margin/twoDim/twoDimMarginModel.js +1 -1
  30. package/lib/model/modelBuilder.js +3 -2
  31. package/lib/model/modelInstance/canvasModel/canvasModel.d.ts +4 -3
  32. package/lib/model/modelInstance/canvasModel/canvasModel.js +1 -1
  33. package/lib/model/modelInstance/canvasModel/canvasSizesModel/canvasMarginModel.d.ts +11 -0
  34. package/lib/{engine/features/tolltip/newTooltip/newTooltip.test.d.ts → model/modelInstance/canvasModel/canvasSizesModel/canvasMarginModel.js} +0 -0
  35. package/lib/model/modelInstance/canvasModel/canvasSizesModel/canvasSizeModel.d.ts +4 -0
  36. package/lib/{engine/twoDimensionalNotation/bar/stackedData/dataStacker.test.d.ts → model/modelInstance/canvasModel/canvasSizesModel/canvasSizeModel.js} +0 -0
  37. package/lib/model/modelInstance/canvasModel/canvasSizesModel/marginModelService.d.ts +11 -0
  38. package/lib/model/modelInstance/canvasModel/canvasSizesModel/marginModelService.js +26 -0
  39. package/lib/model/modelInstance/canvasModel/titleCanvas.js +1 -1
  40. package/lib/model/notations/intervalModel.js +3 -4
  41. package/lib/model/notations/polar/donut/donutAggregatorService.d.ts +1 -0
  42. package/lib/model/notations/polar/donut/donutAggregatorService.js +19 -4
  43. package/lib/model/notations/twoDimensionalModel.js +3 -2
  44. package/lib/style/charts-main.css +9 -9
  45. package/lib/style/charts-main.less +9 -9
  46. package/package.json +1 -1
  47. package/tsconfig.production.json +2 -1
  48. package/lib/engine/features/tolltip/newTooltip/newTooltip.test.js +0 -186
  49. package/lib/engine/twoDimensionalNotation/bar/stackedData/dataStacker.test.js +0 -199
  50. package/lib/model/featuresModel/scaleModel.d.ts +0 -19
  51. package/lib/model/featuresModel/scaleModel.js +0 -115
  52. package/lib/model/marginModel.d.ts +0 -17
  53. package/lib/model/marginModel.js +0 -80
  54. package/lib/model/modelHelper.d.ts +0 -7
  55. package/lib/model/modelHelper.js +0 -41
  56. package/lib/model/modelInstance/dataModel.d.ts +0 -11
  57. package/lib/model/modelInstance/dataModel.js +0 -23
  58. package/lib/model/notations/polarModel.d.ts +0 -15
  59. package/lib/model/notations/polarModel.js +0 -59
@@ -158,8 +158,8 @@ export interface MdtChartsAggregatorModel {
158
158
  data: MdtChartsDataRow[];
159
159
  }
160
160
  export interface MdtChartsAggregatorContent {
161
- value: string | number;
162
- title: string;
161
+ value?: string | number;
162
+ title?: string;
163
163
  }
164
164
  interface IntervalChartData {
165
165
  valueField1: MdtChartsValueField;
@@ -0,0 +1,9 @@
1
+ import { Model } from "../../model/model";
2
+ import Engine from "../engine";
3
+ import { Block } from "../block/block";
4
+ import { MdtChartsDataSource } from "../../config/config";
5
+ export declare class ContentManager {
6
+ static render(model: Model, engine: Engine): void;
7
+ static updateData(block: Block, model: Model, newData: MdtChartsDataSource): void;
8
+ static updateColors(engine: Engine, model: Model): void;
9
+ }
@@ -0,0 +1,15 @@
1
+ import { getChartContentManager } from "./contentManagerFactory";
2
+ export class ContentManager {
3
+ static render(model, engine) {
4
+ const manager = getChartContentManager(model);
5
+ manager.render(engine, model);
6
+ }
7
+ static updateData(block, model, newData) {
8
+ const manager = getChartContentManager(model);
9
+ manager.updateData(block, model, newData);
10
+ }
11
+ static updateColors(engine, model) {
12
+ const manager = getChartContentManager(model);
13
+ manager.updateColors(engine.block, model);
14
+ }
15
+ }
@@ -0,0 +1,14 @@
1
+ import { ChartNotation, MdtChartsDataSource } from "../../config/config";
2
+ import { Model } from "../../model/model";
3
+ import { Block } from "../block/block";
4
+ import Engine from "../engine";
5
+ export interface ChartContentManager {
6
+ render(engine: Engine, model: Model): void;
7
+ updateData(block: Block, model: Model, newData: MdtChartsDataSource): void;
8
+ updateColors(block: Block, model: Model): void;
9
+ }
10
+ export declare class ContentManagerFactory {
11
+ private managers;
12
+ getManager(type: ChartNotation): ChartContentManager;
13
+ }
14
+ export declare function getChartContentManager(model: Model): ChartContentManager;
@@ -0,0 +1,20 @@
1
+ import { PolarManager } from "../polarNotation/polarManager";
2
+ import { TwoDimensionalManager } from "../twoDimensionalNotation/twoDimensionalManager";
3
+ export class ContentManagerFactory {
4
+ constructor() {
5
+ this.managers = {
6
+ "2d": TwoDimensionalManager,
7
+ "polar": PolarManager
8
+ };
9
+ }
10
+ getManager(type) {
11
+ if (type === "interval")
12
+ return;
13
+ const managerClass = this.managers[type];
14
+ return new managerClass();
15
+ }
16
+ }
17
+ export function getChartContentManager(model) {
18
+ const factory = new ContentManagerFactory();
19
+ return factory.getManager(model.options.type);
20
+ }
@@ -1,6 +1,6 @@
1
1
  import { Block } from './block/block';
2
2
  import { ValueFormatter } from './valueFormatter';
3
- import { ContentManager } from './contentManager';
3
+ import { ContentManager } from './contentManager/contentManager';
4
4
  import { FilterEventManager } from './filterManager/filterEventManager';
5
5
  import { Helper } from './helpers/helper';
6
6
  export default class Engine {
@@ -17,7 +17,7 @@ export default class Engine {
17
17
  this.block.renderWrapper(model.blockCanvas.size);
18
18
  if (model.options) {
19
19
  ValueFormatter.setFormatFunction(model.dataSettings.format.formatters);
20
- this.renderCharts(model, this.data);
20
+ this.renderCharts(model);
21
21
  }
22
22
  }
23
23
  updateFullBlock(model, data) {
@@ -48,8 +48,8 @@ export default class Engine {
48
48
  updateColors(model) {
49
49
  ContentManager.updateColors(this, model);
50
50
  }
51
- renderCharts(model, data) {
52
- ContentManager.render(model, data, this);
51
+ renderCharts(model) {
52
+ ContentManager.render(model, this);
53
53
  }
54
54
  setFilterEventManager(options) {
55
55
  var _a, _b, _c;
@@ -23,4 +23,4 @@ export class NewTooltip {
23
23
  .style('top', coordinate.top);
24
24
  }
25
25
  }
26
- NewTooltip.tooltipBlockClass = 'tooltip-block';
26
+ NewTooltip.tooltipBlockClass = 'mdt-charts-tooltip-block';
@@ -5,10 +5,10 @@ import { Scales } from '../scale/scale';
5
5
  import { TooltipSettings } from '../../../designer/designerConfig';
6
6
  export declare class Tooltip {
7
7
  static readonly tooltipBlockClass: string;
8
- static readonly tooltipLineClass = "tooltip-line";
9
- static readonly tooltipWrapperClass = "tooltip-wrapper";
10
- static readonly tooltipContentClass = "tooltip-content";
11
- static readonly tooltipArrowClass = "tooltip-arrow";
8
+ static readonly tooltipLineClass = "mdt-charts-tooltip-line";
9
+ static readonly tooltipWrapperClass = "mdt-charts-tooltip-wrapper";
10
+ static readonly tooltipContentClass = "mdt-charts-tooltip-content";
11
+ static readonly tooltipArrowClass = "mdt-charts-tooltip-arrow";
12
12
  static render(block: Block, model: Model, data: MdtChartsDataSource, tooltipOptions: TooltipSettings, scales?: Scales): void;
13
13
  static hide(block: Block): void;
14
14
  private static renderTooltipFor2DCharts;
@@ -175,7 +175,7 @@ export class Tooltip {
175
175
  }
176
176
  }
177
177
  Tooltip.tooltipBlockClass = NewTooltip.tooltipBlockClass;
178
- Tooltip.tooltipLineClass = 'tooltip-line';
179
- Tooltip.tooltipWrapperClass = 'tooltip-wrapper';
180
- Tooltip.tooltipContentClass = 'tooltip-content';
181
- Tooltip.tooltipArrowClass = 'tooltip-arrow';
178
+ Tooltip.tooltipLineClass = 'mdt-charts-tooltip-line';
179
+ Tooltip.tooltipWrapperClass = 'mdt-charts-tooltip-wrapper';
180
+ Tooltip.tooltipContentClass = 'mdt-charts-tooltip-content';
181
+ Tooltip.tooltipArrowClass = 'mdt-charts-tooltip-arrow';
@@ -2,9 +2,10 @@ import { Model } from "../../model/model";
2
2
  import { Block } from "../block/block";
3
3
  import Engine from "../engine";
4
4
  import { MdtChartsDataSource } from "../../config/config";
5
- export declare class PolarManager {
6
- static render(engine: Engine, model: Model): void;
7
- static update(block: Block, model: Model, data: MdtChartsDataSource): void;
8
- static updateColors(block: Block, model: Model): void;
9
- private static renderCharts;
5
+ import { ChartContentManager } from "../contentManager/contentManagerFactory";
6
+ export declare class PolarManager implements ChartContentManager {
7
+ render(engine: Engine, model: Model): void;
8
+ updateData(block: Block, model: Model, data: MdtChartsDataSource): void;
9
+ updateColors(block: Block, model: Model): void;
10
+ private renderCharts;
10
11
  }
@@ -6,7 +6,7 @@ import { Aggregator } from "../features/aggregator/aggregator";
6
6
  import { Donut } from "./donut/donut";
7
7
  import { PolarRecordOverflowAlert } from "./extenders/polarRecordOverflowAlert";
8
8
  export class PolarManager {
9
- static render(engine, model) {
9
+ render(engine, model) {
10
10
  const options = model.options;
11
11
  engine.block.renderSvg(model.blockCanvas.size);
12
12
  this.renderCharts(engine.block, options.charts, engine.data, options.data.dataSource, model.chartBlock.margin, model.blockCanvas.size, options.chartCanvas);
@@ -25,7 +25,7 @@ export class PolarManager {
25
25
  engine.block.filterEventManager.clearKeysForPolar(model.chartBlock.margin, model.blockCanvas.size, options);
26
26
  });
27
27
  }
28
- static update(block, model, data) {
28
+ updateData(block, model, data) {
29
29
  block.transitionManager.interruptTransitions();
30
30
  block.removeMouseEvents();
31
31
  block.filterEventManager.updateData(data[model.options.data.dataSource]);
@@ -46,11 +46,11 @@ export class PolarManager {
46
46
  legendPosition: model.options.legend.position
47
47
  });
48
48
  }
49
- static updateColors(block, model) {
49
+ updateColors(block, model) {
50
50
  Legend.updateColors(block, model.options);
51
51
  Donut.updateColors(block, model.options.charts[0]);
52
52
  }
53
- static renderCharts(block, charts, data, dataSource, margin, blockSize, donutSettings) {
53
+ renderCharts(block, charts, data, dataSource, margin, blockSize, donutSettings) {
54
54
  charts.forEach((chart) => {
55
55
  if (chart.type === 'donut')
56
56
  Donut.render(block, data[dataSource], margin, chart, blockSize, donutSettings);
@@ -1,11 +1,12 @@
1
1
  import { MdtChartsDataSource } from "../../config/config";
2
2
  import { Model } from "../../model/model";
3
3
  import { Block } from "../block/block";
4
+ import { ChartContentManager } from "../contentManager/contentManagerFactory";
4
5
  import Engine from "../engine";
5
- export declare class TwoDimensionalManager {
6
- static render(engine: Engine, model: Model): void;
7
- static updateData(block: Block, model: Model, data: MdtChartsDataSource): void;
8
- static updateColors(block: Block, model: Model): void;
9
- private static renderCharts;
10
- private static updateCharts;
6
+ export declare class TwoDimensionalManager implements ChartContentManager {
7
+ render(engine: Engine, model: Model): void;
8
+ updateData(block: Block, model: Model, data: MdtChartsDataSource): void;
9
+ updateColors(block: Block, model: Model): void;
10
+ private renderCharts;
11
+ private updateCharts;
11
12
  }
@@ -14,7 +14,7 @@ import { BarHelper } from "./bar/barHelper";
14
14
  import { TwoDimRecordOverflowAlert } from "./extenders/twoDimRecordOverflowAlert";
15
15
  import { Line } from "./line/line";
16
16
  export class TwoDimensionalManager {
17
- static render(engine, model) {
17
+ render(engine, model) {
18
18
  const options = model.options;
19
19
  const scales = Scale.getScales(options.scale.key, options.scale.value, options.chartSettings.bar);
20
20
  engine.block.scales = scales;
@@ -39,7 +39,7 @@ export class TwoDimensionalManager {
39
39
  engine.block.filterEventManager.clearKeysFor2D(options);
40
40
  });
41
41
  }
42
- static updateData(block, model, data) {
42
+ updateData(block, model, data) {
43
43
  block.transitionManager.interruptTransitions();
44
44
  block.filterEventManager.updateData(data[model.options.data.dataSource]);
45
45
  TipBox.clearEvents(block);
@@ -63,7 +63,7 @@ export class TwoDimensionalManager {
63
63
  chartOrientation: options.orient
64
64
  });
65
65
  }
66
- static updateColors(block, model) {
66
+ updateColors(block, model) {
67
67
  Legend.updateColors(block, model.options);
68
68
  model.options.charts.forEach(chart => {
69
69
  if (chart.type === 'bar')
@@ -74,7 +74,7 @@ export class TwoDimensionalManager {
74
74
  Area.updateColors(block, chart);
75
75
  });
76
76
  }
77
- static renderCharts(block, charts, scales, data, dataOptions, margin, keyAxisOrient, barSettings, blockSize) {
77
+ renderCharts(block, charts, scales, data, dataOptions, margin, keyAxisOrient, barSettings, blockSize) {
78
78
  block.renderChartClipPath(margin, blockSize);
79
79
  block.renderChartsBlock();
80
80
  charts.forEach((chart) => {
@@ -87,7 +87,7 @@ export class TwoDimensionalManager {
87
87
  });
88
88
  EmbeddedLabels.raiseGroups(block);
89
89
  }
90
- static updateCharts(block, charts, scales, data, dataOptions, margin, keyAxisOrient, blockSize, barSettings) {
90
+ updateCharts(block, charts, scales, data, dataOptions, margin, keyAxisOrient, blockSize, barSettings) {
91
91
  block.updateChartClipPath(margin, blockSize);
92
92
  let promises = [];
93
93
  charts.forEach((chart) => {
@@ -54,6 +54,7 @@ export class DataManagerModel {
54
54
  const keyFieldName = configOptions.data.keyField.name;
55
55
  const keys = data[configOptions.data.dataSource].map(dataRow => dataRow[keyFieldName]);
56
56
  if (!configOptions.legend.show) {
57
+ canvasModel.legendCanvas.setPosition("off");
57
58
  modelInstance.dataModel.initScope(this.getMaximumPossibleScope(keys, modelInstance.dataModel));
58
59
  return;
59
60
  }
@@ -71,6 +72,7 @@ export class DataManagerModel {
71
72
  //TODO: global refactor of method
72
73
  const allowableKeys = keys.slice(0, maxItemsNumber);
73
74
  const hidedRecordsAmount = keys.length - maxItemsNumber;
75
+ canvasModel.legendCanvas.setPosition(position);
74
76
  this.polarMarginCalculator.updateMargin(position, canvasModel, legendBlock, position === "bottom" ? size.height : size.width);
75
77
  modelInstance.dataModel.initScope(this.limitAllowableKeys(allowableKeys, hidedRecordsAmount, modelInstance.dataModel));
76
78
  }
@@ -1,7 +1,8 @@
1
- import { LegendBlockModel } from "../../model";
1
+ import { LegendBlockModel, Orient } from "../../model";
2
2
  import { CanvasModel } from "../../modelInstance/canvasModel/canvasModel";
3
3
  import { LegendItemsDirection } from "./legendCanvasModel";
4
4
  export declare class LegendModel {
5
5
  static getBaseLegendBlockModel(canvasModel: CanvasModel): LegendBlockModel;
6
6
  static getLegendItemClass(itemsPosition: LegendItemsDirection): string;
7
+ static appendToGlobalMarginValuesLegendMargin(canvasModel: CanvasModel, position: Orient, legendBlockModel: LegendBlockModel): void;
7
8
  }
@@ -10,12 +10,12 @@ export class LegendModel {
10
10
  },
11
11
  bottom: {
12
12
  size: 0,
13
- margin: { top: 5, bottom: 20, left: 0, right: 0 },
13
+ margin: { top: 10, bottom: 20, left: 0, right: 0 },
14
14
  pad: 0
15
15
  },
16
16
  right: {
17
17
  size: 0,
18
- margin: { top: canvasModel.titleCanvas.getAllNeededSpace(), bottom: mb, left: 10, right: 0 },
18
+ margin: { top: canvasModel.titleCanvas.getAllNeededSpace(), bottom: mb, left: 15, right: 0 },
19
19
  pad: 0
20
20
  },
21
21
  top: {
@@ -29,4 +29,11 @@ export class LegendModel {
29
29
  static getLegendItemClass(itemsPosition) {
30
30
  return itemsPosition === 'column' ? 'legend-item-row' : 'legend-item-inline';
31
31
  }
32
+ static appendToGlobalMarginValuesLegendMargin(canvasModel, position, legendBlockModel) {
33
+ const legendCoordinate = legendBlockModel.coordinate;
34
+ if (position === 'left' || position === 'right')
35
+ canvasModel.increaseMarginSide(position, legendCoordinate[position].margin.left + legendCoordinate[position].margin.right);
36
+ else
37
+ canvasModel.increaseMarginSide(position, legendCoordinate[position].margin.top + legendCoordinate[position].margin.bottom);
38
+ }
32
39
  }
@@ -1,8 +1,7 @@
1
1
  import { getPxPercentUnitByValue } from "../../helpers/unitsFromConfigReader";
2
- import { MarginModel } from "../../margin/marginModel";
2
+ import { LegendModel } from "./legendModel";
3
3
  export class LegendPolarMarginCalculator {
4
4
  updateMargin(legendPosition, canvasModel, legendBlockModel, size) {
5
- canvasModel.legendCanvas.setPosition(legendPosition);
6
5
  this.updateMarginObj(legendBlockModel, legendPosition, size, canvasModel);
7
6
  }
8
7
  getMaxLegendWidth(legendCanvas, blockWidth) {
@@ -18,7 +17,7 @@ export class LegendPolarMarginCalculator {
18
17
  updateMarginObj(legendBlockModel, legendPosition, legendSize, canvasModel) {
19
18
  if (legendSize !== 0) {
20
19
  canvasModel.increaseMarginSide(legendPosition, legendSize);
21
- MarginModel.appendToGlobalMarginValuesLegendMargin(canvasModel, legendPosition, legendBlockModel);
20
+ LegendModel.appendToGlobalMarginValuesLegendMargin(canvasModel, legendPosition, legendBlockModel);
22
21
  }
23
22
  legendBlockModel.coordinate[legendPosition].size = legendSize;
24
23
  }
@@ -1,7 +1,8 @@
1
+ import { Legend } from "../../../config/config";
1
2
  import { LegendBlockModel } from "../../model";
2
3
  import { ModelInstance } from "../../modelInstance/modelInstance";
3
4
  export declare class TwoDimLegendModel {
4
- recalcMarginWith2DLegend(modelInstance: ModelInstance, legendBlockModel: LegendBlockModel): void;
5
+ recalcMarginWith2DLegend(modelInstance: ModelInstance, legendBlockModel: LegendBlockModel, legendOptions: Legend): void;
5
6
  private getLegendSize;
6
7
  private getLegendModel;
7
8
  }
@@ -1,14 +1,14 @@
1
- import { MarginModel } from "../../margin/marginModel";
1
+ import { LegendModel } from "./legendModel";
2
2
  export class TwoDimLegendModel {
3
- recalcMarginWith2DLegend(modelInstance, legendBlockModel) {
3
+ recalcMarginWith2DLegend(modelInstance, legendBlockModel, legendOptions) {
4
4
  const canvasModel = modelInstance.canvasModel;
5
- const legendPosition = this.getLegendModel().position;
5
+ const legendPosition = this.getLegendModel(legendOptions).position;
6
6
  modelInstance.canvasModel.legendCanvas.setPosition(legendPosition);
7
7
  if (legendPosition !== 'off') {
8
8
  const legendSize = this.getLegendSize();
9
9
  canvasModel.increaseMarginSide(legendPosition, legendSize);
10
10
  if (legendSize !== 0)
11
- MarginModel.appendToGlobalMarginValuesLegendMargin(canvasModel, legendPosition, legendBlockModel);
11
+ LegendModel.appendToGlobalMarginValuesLegendMargin(canvasModel, legendPosition, legendBlockModel);
12
12
  legendBlockModel.coordinate[legendPosition].size = legendSize;
13
13
  }
14
14
  }
@@ -16,9 +16,10 @@ export class TwoDimLegendModel {
16
16
  const heightOfLegendItemWithoutWordWrapping = 20;
17
17
  return heightOfLegendItemWithoutWordWrapping;
18
18
  }
19
- getLegendModel() {
19
+ getLegendModel(legendOptions) {
20
+ const position = legendOptions.show ? "top" : "off";
20
21
  return {
21
- position: "top"
22
+ position
22
23
  };
23
24
  }
24
25
  }
@@ -19,7 +19,9 @@ export class ScaleAxisRecalcer {
19
19
  : canvasModel.getChartBlockWidth()) - scaleValueFn(0));
20
20
  const key = chartOrientation === "vertical" ? keyAxisLabelVerticalLog : keyAxisLabelHorizontalLog;
21
21
  const logInfo = canvasModel.marginService.getDataByKey(key);
22
- canvasModel.decreaseMarginSide(logInfo.side, logInfo.byValue - coordinateOnChartBlock < 0 ? logInfo.byValue : coordinateOnChartBlock);
22
+ if (logInfo) {
23
+ canvasModel.decreaseMarginSide(logInfo.side, logInfo.byValue - coordinateOnChartBlock < 0 ? logInfo.byValue : coordinateOnChartBlock);
24
+ }
23
25
  }
24
26
  getScaleValue() {
25
27
  const scale = this.generateScaleLinear();
@@ -0,0 +1,6 @@
1
+ import { MdtChartsDataRow, MdtChartsTwoDimensionalChart, MdtChartsTwoDimensionalOptions, NumberDomain } from "../../../config/config";
2
+ export declare function getScaleLinearDomain(configDomain: NumberDomain, dataRows: MdtChartsDataRow[], configOptions: MdtChartsTwoDimensionalOptions): number[];
3
+ export declare class ScaleDomainCalculator {
4
+ getScaleMinValue(charts: MdtChartsTwoDimensionalChart[], dataRows: MdtChartsDataRow[]): number;
5
+ getScaleMaxValue(charts: MdtChartsTwoDimensionalChart[], dataRows: MdtChartsDataRow[]): number;
6
+ }
@@ -0,0 +1,53 @@
1
+ export function getScaleLinearDomain(configDomain, dataRows, configOptions) {
2
+ const calculator = new ScaleDomainCalculator();
3
+ let domainPeekMin;
4
+ let domainPeekMax;
5
+ if (configDomain.start === -1)
6
+ domainPeekMin = calculator.getScaleMinValue(configOptions.charts, dataRows);
7
+ else
8
+ domainPeekMin = configDomain.start;
9
+ if (configDomain.end === -1)
10
+ domainPeekMax = calculator.getScaleMaxValue(configOptions.charts, dataRows);
11
+ else
12
+ domainPeekMax = configDomain.end;
13
+ if (configOptions.axis.key.position === 'start')
14
+ return [domainPeekMin, domainPeekMax];
15
+ return [domainPeekMax, domainPeekMin];
16
+ }
17
+ export class ScaleDomainCalculator {
18
+ getScaleMinValue(charts, dataRows) {
19
+ let min = 0;
20
+ charts.forEach(chart => {
21
+ dataRows.forEach(dataRow => {
22
+ let sumInRow = 0;
23
+ chart.data.valueFields.forEach(field => {
24
+ if (chart.isSegmented && dataRow[field.name] < 0) {
25
+ sumInRow += dataRow[field.name];
26
+ }
27
+ else if (dataRow[field.name] < sumInRow)
28
+ sumInRow = dataRow[field.name];
29
+ });
30
+ if (min > sumInRow)
31
+ min = sumInRow;
32
+ });
33
+ });
34
+ return min;
35
+ }
36
+ getScaleMaxValue(charts, dataRows) {
37
+ let max = 0;
38
+ charts.forEach(chart => {
39
+ dataRows.forEach(dataRow => {
40
+ let sumInRow = 0;
41
+ chart.data.valueFields.forEach(field => {
42
+ if (chart.isSegmented && dataRow[field.name] > 0)
43
+ sumInRow += dataRow[field.name];
44
+ else if (dataRow[field.name] > sumInRow)
45
+ sumInRow = dataRow[field.name];
46
+ });
47
+ if (max < sumInRow)
48
+ max = sumInRow;
49
+ });
50
+ });
51
+ return max;
52
+ }
53
+ }
@@ -1,19 +1,12 @@
1
- import { ScaleKeyModel, ScaleKeyType, ScaleValueModel, ScaleValueType } from "../../model";
2
- import { AxisPosition, NumberDomain, IntervalChart, MdtChartsTwoDimensionalChart, MdtChartsTwoDimensionalOptions, ChartOrientation, MdtChartsDataSource, MdtChartsDataRow } from "../../../config/config";
1
+ import { ScaleKeyModel, ScaleValueModel } from "../../model";
2
+ import { MdtChartsTwoDimensionalChart, MdtChartsTwoDimensionalOptions, ChartOrientation, MdtChartsDataRow } from "../../../config/config";
3
3
  import { CanvasModel } from "../../modelInstance/canvasModel/canvasModel";
4
4
  export declare enum ScaleType {
5
5
  Key = 0,
6
6
  Value = 1
7
7
  }
8
8
  export declare class ScaleModel {
9
- static getScaleKey(allowableKeys: string[], orient: ChartOrientation, canvasModel: CanvasModel, charts: MdtChartsTwoDimensionalChart[], barCharts: MdtChartsTwoDimensionalChart[]): ScaleKeyModel;
10
- static getScaleLinear(options: MdtChartsTwoDimensionalOptions, dataRows: MdtChartsDataRow[], canvasModel: CanvasModel): ScaleValueModel;
11
- static getRangePeek(scaleType: ScaleType, chartOrientation: string, canvasModel: CanvasModel): number;
12
- static getDateValueDomain(data: MdtChartsDataSource, chart: IntervalChart, keyAxisPosition: AxisPosition, dataSource: string): [Date, Date];
13
- static getLinearDomain(configDomain: NumberDomain, dataRows: MdtChartsDataRow[], configOptions: MdtChartsTwoDimensionalOptions): [number, number];
14
- static getScaleKeyType(charts: MdtChartsTwoDimensionalChart[]): ScaleKeyType;
15
- static getScaleValueType(charts: MdtChartsTwoDimensionalChart[] | IntervalChart[]): ScaleValueType;
16
- static getElementsAmount(barCharts: MdtChartsTwoDimensionalChart[]): number;
17
- static getScaleMaxValue(charts: MdtChartsTwoDimensionalChart[], dataRows: MdtChartsDataRow[]): number;
18
- static getScaleMinValue(charts: MdtChartsTwoDimensionalChart[], dataRows: MdtChartsDataRow[]): number;
9
+ getScaleKey(allowableKeys: string[], orient: ChartOrientation, canvasModel: CanvasModel, charts: MdtChartsTwoDimensionalChart[], barCharts: MdtChartsTwoDimensionalChart[]): ScaleKeyModel;
10
+ getScaleLinear(options: MdtChartsTwoDimensionalOptions, dataRows: MdtChartsDataRow[], canvasModel: CanvasModel): ScaleValueModel;
11
+ private getScaleKeyType;
19
12
  }
@@ -1,118 +1,35 @@
1
- import { ModelHelper } from "../../helpers/modelHelper";
1
+ import { getElementsAmountForScale, getScaleKeyRangePeek, getScaleValueRangePeek } from "./scaleModelServices";
2
+ import { getScaleLinearDomain } from "./scaleDomainService";
2
3
  export var ScaleType;
3
4
  (function (ScaleType) {
4
5
  ScaleType[ScaleType["Key"] = 0] = "Key";
5
6
  ScaleType[ScaleType["Value"] = 1] = "Value";
6
7
  })(ScaleType || (ScaleType = {}));
7
8
  export class ScaleModel {
8
- static getScaleKey(allowableKeys, orient, canvasModel, charts, barCharts) {
9
+ getScaleKey(allowableKeys, orient, canvasModel, charts, barCharts) {
9
10
  return {
10
11
  domain: allowableKeys,
11
12
  range: {
12
13
  start: 0,
13
- end: ScaleModel.getRangePeek(ScaleType.Key, orient, canvasModel)
14
+ end: getScaleKeyRangePeek(orient, canvasModel)
14
15
  },
15
- type: ScaleModel.getScaleKeyType(charts),
16
- elementsAmount: this.getElementsAmount(barCharts)
16
+ type: this.getScaleKeyType(charts),
17
+ elementsAmount: getElementsAmountForScale(barCharts)
17
18
  };
18
19
  }
19
- static getScaleLinear(options, dataRows, canvasModel) {
20
+ getScaleLinear(options, dataRows, canvasModel) {
20
21
  return {
21
- domain: ScaleModel.getLinearDomain(options.axis.value.domain, dataRows, options),
22
+ domain: getScaleLinearDomain(options.axis.value.domain, dataRows, options),
22
23
  range: {
23
24
  start: 0,
24
- end: ScaleModel.getRangePeek(ScaleType.Value, options.orientation, canvasModel)
25
+ end: getScaleValueRangePeek(options.orientation, canvasModel)
25
26
  },
26
- type: ScaleModel.getScaleValueType(options.charts)
27
+ type: "linear"
27
28
  };
28
29
  }
29
- static getRangePeek(scaleType, chartOrientation, canvasModel) {
30
- if (chartOrientation === 'vertical')
31
- return scaleType === ScaleType.Key
32
- ? canvasModel.getChartBlockWidth()
33
- : canvasModel.getChartBlockHeight();
34
- return scaleType === ScaleType.Key
35
- ? canvasModel.getChartBlockHeight()
36
- : canvasModel.getChartBlockWidth();
37
- }
38
- static getDateValueDomain(data, chart, keyAxisPosition, dataSource) {
39
- const minMax = ModelHelper.getMinAndMaxOfIntervalData(data, dataSource, chart);
40
- let domainPeekMin = minMax[0];
41
- let domainPeekMax = minMax[1];
42
- if (keyAxisPosition === 'start')
43
- return [domainPeekMin, domainPeekMax];
44
- return [domainPeekMax, domainPeekMin];
45
- }
46
- static getLinearDomain(configDomain, dataRows, configOptions) {
47
- let domainPeekMin;
48
- let domainPeekMax;
49
- if (configDomain.start === -1)
50
- domainPeekMin = this.getScaleMinValue(configOptions.charts, dataRows);
51
- else
52
- domainPeekMin = configDomain.start;
53
- if (configDomain.end === -1)
54
- domainPeekMax = this.getScaleMaxValue(configOptions.charts, dataRows);
55
- else
56
- domainPeekMax = configDomain.end;
57
- if (configOptions.axis.key.position === 'start')
58
- return [domainPeekMin, domainPeekMax];
59
- return [domainPeekMax, domainPeekMin];
60
- }
61
- static getScaleKeyType(charts) {
30
+ getScaleKeyType(charts) {
62
31
  if (charts.findIndex((chart) => chart.type === 'bar') === -1)
63
32
  return 'point';
64
33
  return 'band';
65
34
  }
66
- static getScaleValueType(charts) {
67
- if (charts.findIndex((chart) => chart.type === 'gantt') !== -1)
68
- return 'datetime';
69
- return 'linear';
70
- }
71
- static getElementsAmount(barCharts) {
72
- if (barCharts.length === 0)
73
- return 1;
74
- let barsAmount = 0;
75
- barCharts.forEach(chart => {
76
- if (chart.isSegmented)
77
- barsAmount += 1; // Если бар сегментированный, то все valueFields являются частями одного бара
78
- else
79
- barsAmount += chart.data.valueFields.length;
80
- });
81
- return barsAmount;
82
- }
83
- static getScaleMaxValue(charts, dataRows) {
84
- let max = 0;
85
- charts.forEach(chart => {
86
- dataRows.forEach(dataRow => {
87
- let sumInRow = 0;
88
- chart.data.valueFields.forEach(field => {
89
- if (chart.isSegmented && dataRow[field.name] > 0)
90
- sumInRow += dataRow[field.name];
91
- else if (dataRow[field.name] > sumInRow)
92
- sumInRow = dataRow[field.name];
93
- });
94
- if (max < sumInRow)
95
- max = sumInRow;
96
- });
97
- });
98
- return max;
99
- }
100
- static getScaleMinValue(charts, dataRows) {
101
- let min = 0;
102
- charts.forEach(chart => {
103
- dataRows.forEach(dataRow => {
104
- let sumInRow = 0;
105
- chart.data.valueFields.forEach(field => {
106
- if (chart.isSegmented && dataRow[field.name] < 0) {
107
- sumInRow += dataRow[field.name];
108
- }
109
- else if (dataRow[field.name] < sumInRow)
110
- sumInRow = dataRow[field.name];
111
- });
112
- if (min > sumInRow)
113
- min = sumInRow;
114
- });
115
- });
116
- return min;
117
- }
118
35
  }
@@ -0,0 +1,5 @@
1
+ import { ChartOrientation, MdtChartsTwoDimensionalChart } from "../../../config/config";
2
+ import { CanvasSizesModel } from "../../modelInstance/canvasModel/canvasSizesModel/canvasSizeModel";
3
+ export declare function getScaleKeyRangePeek(chartOrientation: ChartOrientation, canvasModel: CanvasSizesModel): number;
4
+ export declare function getScaleValueRangePeek(chartOrientation: string, canvasModel: CanvasSizesModel): number;
5
+ export declare function getElementsAmountForScale(barCharts: MdtChartsTwoDimensionalChart[]): number;
@@ -0,0 +1,22 @@
1
+ export function getScaleKeyRangePeek(chartOrientation, canvasModel) {
2
+ if (chartOrientation === 'vertical')
3
+ return canvasModel.getChartBlockWidth();
4
+ return canvasModel.getChartBlockHeight();
5
+ }
6
+ export function getScaleValueRangePeek(chartOrientation, canvasModel) {
7
+ if (chartOrientation === 'vertical')
8
+ return canvasModel.getChartBlockHeight();
9
+ return canvasModel.getChartBlockWidth();
10
+ }
11
+ export function getElementsAmountForScale(barCharts) {
12
+ if (barCharts.length === 0)
13
+ return 1;
14
+ let barsAmount = 0;
15
+ barCharts.forEach(chart => {
16
+ if (chart.isSegmented)
17
+ barsAmount += 1; // Если бар сегментированный, то все valueFields являются частями одного бара
18
+ else
19
+ barsAmount += chart.data.valueFields.length;
20
+ });
21
+ return barsAmount;
22
+ }