Skip to content

Commit

Permalink
refactor to individual args instead of options arg
Browse files Browse the repository at this point in the history
  • Loading branch information
walterra committed Feb 7, 2025
1 parent fc7edea commit c3b3570
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 51 deletions.
11 changes: 5 additions & 6 deletions packages/charts/src/chart_types/xy_chart/axes/axes_sizes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@
* Side Public License, v 1.
*/

import { ScaleType } from '../../../scales/constants';
import { SmallMultiplesSpec } from '../../../specs';
import { SettingsSpec } from '../../../specs/settings';
import { Position } from '../../../utils/common';
import { Position, Rotation } from '../../../utils/common';
import { innerPad, outerPad, PerSideDistance } from '../../../utils/dimensions';
import { AxisId } from '../../../utils/ids';
import { AxisStyle, Theme } from '../../../utils/themes/theme';
import { AxesTicksDimensions } from '../state/selectors/compute_axis_ticks_dimensions';
import { ScaleConfigs } from '../state/selectors/get_api_scale_configs';
import { getSpecsById } from '../state/utils/spec';
import { isHorizontalAxis, isVerticalAxis } from '../utils/axis_type_utils';
import {
Expand Down Expand Up @@ -73,14 +72,14 @@ export function getAxesDimensions(
axesStyles: Map<AxisId, AxisStyle | null>,
axisSpecs: AxisSpec[],
smSpec: SmallMultiplesSpec | null,
scaleConfigs: ScaleConfigs,
settingsSpec: SettingsSpec,
xScaleType: ScaleType,
rotation: Rotation,
): PerSideDistance & { margin: { left: number } } {
const sizes = [...axisDimensions].reduce(
(acc, [id, tickLabelBounds]) => {
const axisSpec = getSpecsById<AxisSpec>(axisSpecs, id);
if (tickLabelBounds.isHidden || !axisSpec) return acc;
const multilayerTimeAxis = isMultilayerTimeAxis({ axisSpec, scaleConfigs, rotation: settingsSpec.rotation });
const multilayerTimeAxis = isMultilayerTimeAxis(axisSpec, xScaleType, rotation);
// TODO use first and last labels
const { top, bottom, left, right } = getAxisSizeForLabel(
axisSpec,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export const getAxesStylesSelector = createCustomCachedSelector(
let mergedStyle: AxisStyle | null = null;

// apply multilayer time axis style to xy charts with time on the x axis.
if (isMultilayerTimeAxis({ axisSpec, scaleConfigs, rotation: settingsSpec.rotation })) {
if (isMultilayerTimeAxis(axisSpec, scaleConfigs.x.type, settingsSpec.rotation)) {
mergedStyle = mergePartial(sharedAxesStyle, MULTILAYER_TIME_AXIS_STYLE);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ function getVisibleTickSets(
const domain = isXAxis ? xDomain : yDomain;
const range = axisMinMax(axisSpec.position, chartRotation, panel);
const maxTickCount = domain?.desiredTickCount ?? 0;
const multilayerTimeAxis = isMultilayerTimeAxis({ axisSpec, scaleConfigs, rotation: chartRotation });
const multilayerTimeAxis = isMultilayerTimeAxis(axisSpec, scaleConfigs.x.type, chartRotation);
// TODO: remove this fallback when integersOnly is removed
const maximumFractionDigits = mfd ?? (integersOnly ? 0 : undefined);

Expand Down
51 changes: 25 additions & 26 deletions packages/charts/src/chart_types/xy_chart/utils/axis_utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import {
// getAxesGeometries,
getTickLabelPosition,
isMultilayerTimeAxis,
IsMultilayerTimeAxisOptions,
isXDomain,
getScaleForAxisSpec,
} from './axis_utils';
Expand Down Expand Up @@ -1094,47 +1093,47 @@ describe('Axis computational utils', () => {

describe('isMultilayerTimeAxis', () => {
test('should return true if chartType is xy_axis, timeAxisLayerCount = 2, position is bottom, x axis type is time, rotation is 0', () => {
const multilayerTimeAxis = isMultilayerTimeAxis({
axisSpec: { chartType: 'xy_axis', timeAxisLayerCount: 2, position: 'bottom' },
scaleConfigs: { x: { type: 'time' } },
rotation: 0,
} as unknown as IsMultilayerTimeAxisOptions);
const multilayerTimeAxis = isMultilayerTimeAxis(
{ chartType: 'xy_axis', timeAxisLayerCount: 2, position: 'bottom' } as unknown as AxisSpec,
'time',
0,
);
expect(multilayerTimeAxis).toBe(true);
});

test('should return false if x axis type is not time', () => {
const multilayerTimeAxis = isMultilayerTimeAxis({
axisSpec: { chartType: 'xy_axis', timeAxisLayerCount: 2, position: 'bottom' },
scaleConfigs: { x: { type: 'ordinal' } },
rotation: 0,
} as unknown as IsMultilayerTimeAxisOptions);
const multilayerTimeAxis = isMultilayerTimeAxis(
{ chartType: 'xy_axis', timeAxisLayerCount: 2, position: 'bottom' } as unknown as AxisSpec,
'ordinal',
0,
);
expect(multilayerTimeAxis).toBe(false);
});

test('should return false timeAxisLayerCount = 0', () => {
const multilayerTimeAxis = isMultilayerTimeAxis({
axisSpec: { chartType: 'xy_axis', timeAxisLayerCount: 0, position: 'bottom' },
scaleConfigs: { x: { type: 'time' } },
rotation: 0,
} as unknown as IsMultilayerTimeAxisOptions);
const multilayerTimeAxis = isMultilayerTimeAxis(
{ chartType: 'xy_axis', timeAxisLayerCount: 0, position: 'bottom' } as unknown as AxisSpec,
'time',
0,
);
expect(multilayerTimeAxis).toBe(false);
});

test('should false true if chart type is not xy_axis', () => {
const multilayerTimeAxis = isMultilayerTimeAxis({
axisSpec: { chartType: 'metric', timeAxisLayerCount: 2, position: 'bottom' },
scaleConfigs: { x: { type: 'time' } },
rotation: 0,
} as unknown as IsMultilayerTimeAxisOptions);
const multilayerTimeAxis = isMultilayerTimeAxis(
{ chartType: 'metric', timeAxisLayerCount: 2, position: 'bottom' } as unknown as AxisSpec,
'time',
0,
);
expect(multilayerTimeAxis).toBe(false);
});

test('should return false if xy_axis, timeAxisLayerCount = 2, position is bottom, rotation is not 0', () => {
const multilayerTimeAxis = isMultilayerTimeAxis({
axisSpec: { chartType: 'xy_axis', timeAxisLayerCount: 2, position: 'bottom' },
scaleConfigs: { x: { type: 'time' } },
rotation: 90,
} as unknown as IsMultilayerTimeAxisOptions);
const multilayerTimeAxis = isMultilayerTimeAxis(
{ chartType: 'xy_axis', timeAxisLayerCount: 2, position: 'bottom' } as unknown as AxisSpec,
'time',
90,
);
expect(multilayerTimeAxis).toBe(false);
});
});
Expand Down
21 changes: 7 additions & 14 deletions packages/charts/src/chart_types/xy_chart/utils/axis_utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -305,24 +305,17 @@ export function getPosition(
}

/** @internal */
export interface IsMultilayerTimeAxisOptions {
axisSpec: AxisSpec;
scaleConfigs: ScaleConfigs;
rotation: Rotation;
}

/** @internal */
export function isMultilayerTimeAxis({
axisSpec: { chartType, timeAxisLayerCount, position },
scaleConfigs,
rotation,
}: IsMultilayerTimeAxisOptions) {
export function isMultilayerTimeAxis(
{ chartType, timeAxisLayerCount, position }: AxisSpec,
xScaleType: ScaleType,
rotation: Rotation,
) {
return (
chartType === ChartType.XYAxis &&
timeAxisLayerCount > 0 &&
isXDomain(position, rotation) &&
rotation === 0 &&
scaleConfigs.x.type === ScaleType.Time
xScaleType === ScaleType.Time
);
}

Expand Down Expand Up @@ -365,7 +358,7 @@ export function getAxesGeometries(
if (axisSpec) {
const vertical = isVerticalAxis(axisSpec.position);
const axisStyle = axesStyles.get(axisId) ?? sharedAxesStyle;
const multilayerTimeAxis = isMultilayerTimeAxis({ axisSpec, scaleConfigs, rotation: settingsSpec.rotation });
const multilayerTimeAxis = isMultilayerTimeAxis(axisSpec, scaleConfigs.x.type, settingsSpec.rotation);
const { dimensions, topIncrement, bottomIncrement, leftIncrement, rightIncrement } = getPosition(
chartDims,
chartMargins,
Expand Down
7 changes: 4 additions & 3 deletions packages/charts/src/chart_types/xy_chart/utils/dimensions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ import { ScaleConfigs } from '../state/selectors/get_api_scale_configs';
* Compute the chart dimensions. It's computed removing from the parent dimensions
* the axis spaces, the legend and any other specified style margin and padding.
* @internal
*/ export function computeChartDimensions(
*/
export function computeChartDimensions(
parentDimensions: Dimensions,
theme: Theme,
axisTickDimensions: AxesTicksDimensions,
Expand All @@ -36,8 +37,8 @@ import { ScaleConfigs } from '../state/selectors/get_api_scale_configs';
axesStyles,
axisSpecs,
smSpec,
scaleConfigs,
settingsSpec,
scaleConfigs.x.type,
settingsSpec.rotation,
);
const chartWidth = parentDimensions.width - axesDimensions.left - axesDimensions.right;
const chartHeight = parentDimensions.height - axesDimensions.top - axesDimensions.bottom;
Expand Down

0 comments on commit c3b3570

Please sign in to comment.