Skip to content
This repository has been archived by the owner on May 24, 2024. It is now read-only.

added prop rotateAngle to avoid the overlapping x-axis tick values #322

Merged
merged 10 commits into from
Nov 24, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions packages/carbon-graphs/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# ChangeLog

## Unreleased
* Fixed
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* Fixed
* Added

* Added prop `rotateAngle` to allow rotation of x-axis tick labels to prevent overlap.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* Fixed
* Added prop `rotateAngle` to allow rotation of x-axis tick labels to prevent overlap.
* Fixed
* Added prop `rotateAngle` to allow rotation of x-axis tick labels to prevent overlap.

Can we add space for consistency

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also correct the prop name


## 2.23.3 - (September 25, 2023)

Expand Down
12 changes: 10 additions & 2 deletions packages/carbon-graphs/src/js/helpers/axis.js
Original file line number Diff line number Diff line change
Expand Up @@ -893,7 +893,16 @@ const createAxes = (axis, scale, config, canvasSVG) => {
)})`,
)
.call(axis.x)
.call(resetD3FontSize);
.call(resetD3FontSize)
.attr('id', 'x')
.selectAll('text')
.style('text-anchor', () => {
if (config.axis.x.ticks.rotateAngle !== undefined) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rotateAngle is grammatically incorrect and also unclear without reading the documentation. Can we rename this to tickLabelsRotation?

Suggested change
if (config.axis.x.ticks.rotateAngle !== undefined) {
if (config.axis.x.ticks.tickLabelsRotation !== undefined) {

return config.axis.x.ticks.rotateAngle >= 0 ? 'start' : 'end';
}
return 'middle';
sdadn marked this conversation as resolved.
Show resolved Hide resolved
})
.attr('transform', () => `rotate(${config.axis.x.ticks.rotateAngle})`);
canvasSVG
.append('g')
.classed(styles.axis, true)
Expand Down Expand Up @@ -922,7 +931,6 @@ const createAxes = (axis, scale, config, canvasSVG) => {
.call(resetD3FontSize);
}
};

/**
* X Axis's position vertically relative to the canvas
*
Expand Down
3 changes: 3 additions & 0 deletions packages/terra-graphs-docs/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# ChangeLog

## Unreleased
* Added
* Added a Prop `rotateAngle` for overlapping X-axis tick values.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can remove this entry

Suggested change
* Added a Prop `rotateAngle` for overlapping X-axis tick values.

* Added examples for the Xaxis Overlapping tick values.

## 1.6.0 - (September 25, 2023)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import Carbon from '@cerner/carbon-graphs/lib/js/carbon';

const getLineTimeseriesConfig = (id) => ({
bindTo: id,
axis: {
x: {
type: Carbon.helpers.AXIS_TYPE.TIME_SERIES,
label: 'Datetime',
lowerLimit: new Date(2016, 0, 1).toISOString(),
upperLimit: new Date(2016, 0, 12).toISOString(),
ticks: {
values: [
new Date(2016, 0, 1).toISOString(),
new Date(2016, 0, 2).toISOString(),
new Date(2016, 0, 3).toISOString(),
new Date(2016, 0, 4).toISOString(),
new Date(2016, 0, 5).toISOString(),
new Date(2016, 0, 6).toISOString(),
new Date(2016, 0, 7).toISOString(),
new Date(2016, 0, 8).toISOString(),
new Date(2016, 0, 9).toISOString(),
new Date(2016, 0, 10).toISOString(),
new Date(2016, 0, 11).toISOString(),
],
rotateAngle: -45,
format: '%Y, %X',
},
},
y: {
label: 'Line Set A',
lowerLimit: 10,
upperLimit: 30,
},
y2: {
show: false,
label: 'Line Set B',
lowerLimit: 0,
upperLimit: 250,
},
},
showLabel: true,
showLegend: true,
showShapes: true,
showVGrid: true,
showHGrid: true,
locale: Carbon.helpers.LOCALE.de_DE,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is the locale german?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that was not intentional, I was trying to recreate the issue with tick values(date formatted) having long text in it.

});

export default getLineTimeseriesConfig;
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ axis: {
suppressingTrailingZeros: <bool>,
ticks: <Ticks object>,
type: <string>
rotateAngle: <integer>,
},
y: {
lowerLimit: <number> or <Date>,
Expand Down Expand Up @@ -80,7 +81,8 @@ axis: {
| show | boolean | `true` | no | Toggle for showing the axis. |
| suppressTrailingZeros | boolean | `false` | no | Toggle to suppress tick values's trailing zeros when default d3 tick formatting is used. For X axis, this property works only when X axis type is set to AXIS_TYPE.DEFAULT. Specifying `~` in the tick format takes precedence over `suppressTrailingZeros` property. |
| ticks | object | `null` | no | See [Ticks](./Ticks). |
| type | string | `AXIS_TYPE.DEFAULT` | no | See [type](#type). Normal number value or time-based. Only for x-axis. |
| type | string | `AXIS_TYPE.DEFAULT` | no | See [type](#type). Normal number value or time-based. Only for x-axis. |
| rotateAngle | integer | - | no | allows consumer to add a rotateAngle to x-axis to avoid the overlapping (angle will be in between `+90` to `-90` Positive values move in clock wise direction & negative values moves in anticlock wise direction).Only for x-axis. |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should avoid saying "consumer" wherever possible.

Suggested change
| rotateAngle | integer | - | no | allows consumer to add a rotateAngle to x-axis to avoid the overlapping (angle will be in between `+90` to `-90` Positive values move in clock wise direction & negative values moves in anticlock wise direction).Only for x-axis. |
| rotateAngle | integer | - | no | (Only for x-axis) Sets the rotation of the tick labels from `+90º` to `-90º`. Positive values rotate the label clockwise while negative values rotate the label anti-clockwise. |


- ### `allowCalibration`
Set calibration for the axis.
Expand Down
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you generate wdio screenshots for this test?

Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import React from 'react';
import utils from '@cerner/carbon-graphs/lib/js/helpers/utils';
import LineGraph from '@cerner/terra-graphs-docs/lib/terra-graphs-src/components/Line/LineGraph';
import '@cerner/terra-graphs-docs/lib/terra-dev-site/ExampleGraphContainer/ExampleGraphContainer.module.scss';
import getGraphConfig from '@cerner/terra-graphs-docs/lib/example-datasets/graphConfigObjects/General/generalDefaultXAxisOverlapping';
import exampleData1 from '@cerner/terra-graphs-docs/lib/example-datasets/dataObjects/Line/dataset1';
import exampleData2 from '@cerner/terra-graphs-docs/lib/example-datasets/dataObjects/Line/dataset2';
import exampleData3 from '@cerner/terra-graphs-docs/lib/example-datasets/dataObjects/Line/dataset3';
import exampleData4 from '@cerner/terra-graphs-docs/lib/example-datasets/dataObjects/Line/dataset4';
import exampleData5 from '@cerner/terra-graphs-docs/lib/example-datasets/dataObjects/Line/dataset5';
import exampleData6 from '@cerner/terra-graphs-docs/lib/example-datasets/dataObjects/Line/dataset6';

const graphConfig = utils.deepClone(getGraphConfig('#xAxisTicksVlauesOverlapping'));
const dataset = [
utils.deepClone(exampleData1),
utils.deepClone(exampleData2),
utils.deepClone(exampleData3),
utils.deepClone(exampleData4),
utils.deepClone(exampleData5),
utils.deepClone(exampleData6),
];

const timeoutArray = [0, 750, 750 * 2, 750 * 3, 750 * 4, 750 * 5, 750 * 6];

export default () => (
<>
<div id="tooltip" className="initial-tooltip" />
<LineGraph graphID="xAxisTicksVlauesOverlapping" graphConfig={graphConfig} dataset={dataset} timeout={timeoutArray} />
;
</>
);