Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(WIP): axis with break #19459

Draft
wants to merge 25 commits into
base: next
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d1c0f2a
feat(WIP): axis with break
Ovilia Jan 2, 2024
f7a420e
feat(WIP): axis break with label formatter
Ovilia Jan 3, 2024
537de01
feat(WIP): axis break that can be expanded
Ovilia Jan 4, 2024
7a7b54b
feat(WIP): axis break background style
Ovilia Jan 4, 2024
2d554ec
feat(WIP): axis break with zigzags
Ovilia Jan 5, 2024
054c84e
Merge remote-tracking branch 'origin/module_default_esm'
Ovilia Jan 22, 2024
4872429
Merge branch 'master' of github.com:apache/echarts
Ovilia Jan 23, 2024
5dd39af
Merge branch 'master' into feat/break-axis
Ovilia Jan 24, 2024
88f3bf4
Merge branch 'master' into feat/break-axis
Ovilia Feb 26, 2024
3652564
feat(WIP): use clip for break axis with bars
Ovilia Feb 26, 2024
9180efa
feat(WIP): add zFloat to make axis breaks display on top of series
Ovilia Mar 1, 2024
065e4c1
feat(WIP): zigzag shape on top of bars
Ovilia Mar 5, 2024
736a469
feat(WIP): linear mapping inside break area
Ovilia Mar 6, 2024
8633eff
feat(WIP): support vertical and horizontal axes
Ovilia Mar 19, 2024
a2eb6ac
feat(WIP): expand on click
Ovilia Mar 19, 2024
3899e76
feat(WIP): break axis with category axis
Ovilia Mar 21, 2024
1586995
feat(WIP): break axis with category axis
Ovilia Mar 28, 2024
c75ad26
feat(WIP): break axis with category axis
Ovilia Apr 2, 2024
5474ac2
feat(WIP): break axis with category axis
Ovilia Apr 3, 2024
51cec2b
feat: break axis with category axis
Ovilia Apr 8, 2024
fdf9b55
feat: add intraday stock chart demo
Ovilia Apr 9, 2024
24a2c9d
Merge branch 'master' into feat/break-axis
Ovilia May 10, 2024
1cd9e09
Merge branch 'next' into feat/break-axis
Ovilia May 16, 2024
124376d
fix(break): fix lint
Ovilia May 16, 2024
f5f246d
Merge branch 'next' into feat/break-axis
Ovilia May 16, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
38 changes: 31 additions & 7 deletions src/component/axis/AxisBuilder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import { PathStyleProps } from 'zrender/src/graphic/Path';
import OrdinalScale from '../../scale/Ordinal';
import { prepareLayoutList, hideOverlap } from '../../label/labelLayoutHelper';
import ExtensionAPI from '../../core/ExtensionAPI';

const PI = Math.PI;

Expand All @@ -50,6 +51,8 @@
value?: string | number
dataIndex?: number
tickIndex?: number
breakStart?: number
breakEnd?: number
} & {
[key in AxisIndexKey]?: number
};
Expand Down Expand Up @@ -133,9 +136,14 @@
readonly group = new graphic.Group();

private _transformGroup: graphic.Group;
private _api: ExtensionAPI;

constructor(axisModel: AxisBaseModel, opt?: AxisBuilderCfg) {

constructor(
axisModel: AxisBaseModel,
api: ExtensionAPI,
opt?: AxisBuilderCfg
) {
this._api = api;
this.opt = opt;

this.axisModel = axisModel;
Expand Down Expand Up @@ -174,7 +182,7 @@
}

add(name: keyof typeof builders) {
builders[name](this.opt, this.axisModel, this.group, this._transformGroup);
builders[name](this.opt, this.axisModel, this.group, this._transformGroup, this._api);
}

getGroup() {
Expand Down Expand Up @@ -236,7 +244,8 @@
opt: AxisBuilderCfg,
axisModel: AxisBaseModel,
group: graphic.Group,
transformGroup: graphic.Group
transformGroup: graphic.Group,
api: ExtensionAPI
):void
}

Expand Down Expand Up @@ -343,9 +352,10 @@
}
},

axisTickLabel(opt, axisModel, group, transformGroup) {
// @ts-ignore
axisTickLabel(opt, axisModel, group, transformGroup, api) {
const ticksEls = buildAxisMajorTicks(group, transformGroup, axisModel, opt);
const labelEls = buildAxisLabel(group, transformGroup, axisModel, opt);
const labelEls = buildAxisLabel(group, transformGroup, axisModel, opt, api);

fixMinMaxLabelShow(axisModel, labelEls, ticksEls);

Expand Down Expand Up @@ -731,7 +741,8 @@
group: graphic.Group,
transformGroup: graphic.Group,
axisModel: AxisBaseModel,
opt: AxisBuilderCfg
opt: AxisBuilderCfg,
api: ExtensionAPI
) {
const axis = axisModel.axis;
const show = retrieve(opt.axisLabelShow, axisModel.get(['axisLabel', 'show']));
Expand Down Expand Up @@ -843,11 +854,24 @@
eventData.targetType = 'axisLabel';
eventData.value = rawLabel;
eventData.tickIndex = index;
eventData.breakStart = labelItem.breakStart;
eventData.breakEnd = labelItem.breakEnd;
if (axis.type === 'category') {
eventData.dataIndex = tickValue;
}

getECData(textEl).eventData = eventData;

if (labelItem.breakStart != null) {
textEl.on('click', params => {
axis.scale.expandBreak(labelItem.breakStart, labelItem.breakEnd);
api.dispatchAction({
type: 'axisBreakExpand',
breakStart: labelItem.breakStart,
breakEnd: labelItem.breakEnd,
});
})

Check failure on line 873 in src/component/axis/AxisBuilder.ts

View workflow job for this annotation

GitHub Actions / lint (18.x)

Missing semicolon
}
}

// FIXME
Expand Down
20 changes: 16 additions & 4 deletions src/component/axis/CartesianAxisView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,13 @@
import GridModel from '../../coord/cartesian/GridModel';
import { Payload } from '../../util/types';
import { isIntervalOrLogScale } from '../../scale/helper';
import { rectCoordAxisAddBreakBackground, rectCoordAxisBuildBreakArea, rectCoordAxisBuildClipPath } from './axisBreakAreaHelper';

Check failure on line 32 in src/component/axis/CartesianAxisView.ts

View workflow job for this annotation

GitHub Actions / lint (18.x)

This line has a length of 129. Maximum allowed is 120

Check warning on line 32 in src/component/axis/CartesianAxisView.ts

View workflow job for this annotation

GitHub Actions / lint (18.x)

'rectCoordAxisAddBreakBackground' is defined but never used

Check warning on line 32 in src/component/axis/CartesianAxisView.ts

View workflow job for this annotation

GitHub Actions / lint (18.x)

'rectCoordAxisBuildClipPath' is defined but never used

const axisBuilderAttrs = [
'axisLine', 'axisTickLabel', 'axisName'
] as const;
const selfBuilderAttrs = [
'splitArea', 'splitLine', 'minorSplitLine'
'splitArea', 'splitLine', 'minorSplitLine', 'breakArea'
] as const;

class CartesianAxisView extends AxisView {
Expand Down Expand Up @@ -66,7 +67,7 @@

const layout = cartesianAxisHelper.layout(gridModel, axisModel);

const axisBuilder = new AxisBuilder(axisModel, zrUtil.extend({
const axisBuilder = new AxisBuilder(axisModel, api, zrUtil.extend({
handleAutoShown(elementType) {
const cartesians = gridModel.coordinateSystem.getCartesians();
for (let i = 0; i < cartesians.length; i++) {
Expand All @@ -86,7 +87,7 @@

zrUtil.each(selfBuilderAttrs, function (name) {
if (axisModel.get([name, 'show'])) {
axisElementBuilders[name](this, this._axisGroup, axisModel, gridModel);
axisElementBuilders[name](this, this._axisGroup, axisModel, gridModel, api);
}
}, this);

Expand All @@ -108,7 +109,13 @@
}

interface AxisElementBuilder {
(axisView: CartesianAxisView, axisGroup: graphic.Group, axisModel: CartesianAxisModel, gridModel: GridModel): void
(
axisView: CartesianAxisView,
axisGroup: graphic.Group,
axisModel: CartesianAxisModel,
gridModel: GridModel,
api: ExtensionAPI
): void
}

const axisElementBuilders: Record<typeof selfBuilderAttrs[number], AxisElementBuilder> = {
Expand Down Expand Up @@ -231,6 +238,11 @@

splitArea(axisView, axisGroup, axisModel, gridModel) {
rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, gridModel);
},

// @ts-ignore
breakArea(axisView, axisGroup, axisModel, gridModel, api) {
rectCoordAxisBuildBreakArea(axisGroup, axisModel, gridModel, api);
}
};

Expand Down
2 changes: 1 addition & 1 deletion src/component/axis/ParallelAxisView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ class ParallelAxisView extends ComponentView {
axisLayout
);

const axisBuilder = new AxisBuilder(axisModel, builderOpt);
const axisBuilder = new AxisBuilder(axisModel, api, builderOpt);

zrUtil.each(elementList, axisBuilder.add, axisBuilder);

Expand Down
5 changes: 3 additions & 2 deletions src/component/axis/RadiusAxisView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import { RadiusAxisModel } from '../../coord/polar/AxisModel';
import Polar from '../../coord/polar/Polar';
import RadiusAxis from '../../coord/polar/RadiusAxis';
import GlobalModel from '../../model/Global';
import ExtensionAPI from '../../core/ExtensionAPI';

const axisBuilderAttrs = [
'axisLine', 'axisTickLabel', 'axisName'
Expand All @@ -44,7 +45,7 @@ class RadiusAxisView extends AxisView {

private _axisGroup: graphic.Group;

render(radiusAxisModel: RadiusAxisModel, ecModel: GlobalModel) {
render(radiusAxisModel: RadiusAxisModel, ecModel: GlobalModel, api: ExtensionAPI) {
this.group.removeAll();
if (!radiusAxisModel.get('show')) {
return;
Expand All @@ -63,7 +64,7 @@ class RadiusAxisView extends AxisView {
const radiusExtent = radiusAxis.getExtent();

const layout = layoutAxis(polar, radiusAxisModel, axisAngle);
const axisBuilder = new AxisBuilder(radiusAxisModel, layout);
const axisBuilder = new AxisBuilder(radiusAxisModel, api, layout);
zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);
newAxisGroup.add(axisBuilder.getGroup());

Expand Down
2 changes: 1 addition & 1 deletion src/component/axis/SingleAxisView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class SingleAxisView extends AxisView {

const layout = singleAxisHelper.layout(axisModel);

const axisBuilder = new AxisBuilder(axisModel, layout);
const axisBuilder = new AxisBuilder(axisModel, api, layout);

zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);

Expand Down
24 changes: 24 additions & 0 deletions src/component/axis/axisAction.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { noop } from 'zrender/src/core/util';
import { EChartsExtensionInstallRegisters } from '../../extension';
import { Payload } from '../../util/types';
import GlobalModel from '../../model/Global';

export function installAxisAction(registers: EChartsExtensionInstallRegisters) {
registers.registerAction({
type: 'axisBreakExpand',
update: 'update'
}, noop);
}

export const axisBreakActionInfo = {
type: 'axisBreakExpand',
event: 'axisBreakChanged',
update: 'update'
};

export const axisBreakActionHander = function (payload: Payload, ecModel: GlobalModel) {
// ecModel.eachComponent((componentType, model) => {
// if (componentType.toLocaleLowerCase().indexOf('axis') >= 0) {
// }
// });
};