@oliasoft-open-source/charts-library 2.5.17 → 2.5.18

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oliasoft-open-source/charts-library",
3
- "version": "2.5.17",
3
+ "version": "2.5.18",
4
4
  "description": "React Chart Library (based on Chart.js and react-chart-js-2)",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/release-notes.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Charts Library Release Notes
2
2
 
3
+ ## 2.5.18
4
+
5
+ - Fixed minor gridlines when last major tick does not reach axis bounds ([OW-10296](https://oliasoft.atlassian.net/browse/OW-10296))
6
+
3
7
  ## 2.5.17
4
8
 
5
9
  - Added some (realistic) test case stories from our app
@@ -11,30 +11,40 @@ export const getLargestMajorTickWidth = (majorTickPositions) => {
11
11
  };
12
12
 
13
13
  // Check if position is in visible part of axis scale
14
- export const isValidPosition = (minorTickPosition, majorTickPositions) => {
15
- const isAfterStart = minorTickPosition > majorTickPositions[0];
16
- const isBeforeEnd =
17
- minorTickPosition < majorTickPositions[majorTickPositions.length - 1];
14
+ // Check position does not duplicate a major tick
15
+ export const isValidPosition = (
16
+ minorTickPosition,
17
+ majorTickPositions,
18
+ scale,
19
+ ) => {
20
+ const { axis, left, top, right, bottom } = scale;
21
+ const isHorizontal = axis === 'x';
22
+ const start = isHorizontal ? left : top;
23
+ const end = isHorizontal ? right : bottom;
24
+ const isAfterStart = minorTickPosition > start;
25
+ const isBeforeEnd = minorTickPosition < end;
18
26
  const isDuplicate = majorTickPositions.indexOf(minorTickPosition) !== -1;
19
27
  return isAfterStart && isBeforeEnd && !isDuplicate;
20
28
  };
21
29
 
22
30
  // Generate minor tick positions for a given axis/scale
23
31
  // (Uses second tick as starting point in case first tick is an irregular custom value)
24
- export const getMinorTickPositions = (majorTickPositions) => {
32
+ export const getMinorTickPositions = (majorTickPositions, scale) => {
25
33
  const sortedMajorTickPositions = majorTickPositions.sort((a, b) => {
26
34
  return a - b;
27
35
  });
28
36
  const minorTickWidth = getLargestMajorTickWidth(majorTickPositions) / 10;
29
- const startPosition = majorTickPositions[1];
30
- const numMinorTicks = (majorTickPositions.length - 1) * MINOR_TICKS_PER_MAJOR;
37
+ const startPosition = majorTickPositions[0];
38
+ const numMinorTicks = (majorTickPositions.length + 1) * MINOR_TICKS_PER_MAJOR;
31
39
  const positions = [...Array(numMinorTicks)]
32
40
  .map((_, index) => {
33
41
  const minorTickPosition =
34
42
  startPosition + (index - MINOR_TICKS_PER_MAJOR + 1) * minorTickWidth;
35
43
  return parseFloat(minorTickPosition.toFixed(1));
36
44
  })
37
- .filter((position) => isValidPosition(position, sortedMajorTickPositions));
45
+ .filter((position) =>
46
+ isValidPosition(position, sortedMajorTickPositions, scale),
47
+ );
38
48
  return positions;
39
49
  };
40
50
 
@@ -44,10 +54,10 @@ const drawMinorTicksForScale = (scale) => {
44
54
  return;
45
55
  if (chart.config._config.options.indexAxis === scale.axis) return;
46
56
  const isHorizontal = scale.axis === 'x';
47
- const majorTickPositions = scale.ticks.map((_, index) =>
48
- scale.getPixelForTick(index),
49
- );
50
- const minorTickPositions = getMinorTickPositions(majorTickPositions);
57
+ const majorTickPositions = scale.ticks
58
+ .map((_, index) => scale.getPixelForTick(index))
59
+ .sort((a, b) => a - b);
60
+ const minorTickPositions = getMinorTickPositions(majorTickPositions, scale);
51
61
  ctx.save();
52
62
  ctx.strokeStyle =
53
63
  chart.config._config.options.scales[scale.id].grid.color ||