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 all 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
13 changes: 13 additions & 0 deletions src/chart/bar/BarView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,9 @@ class BarView extends ChartView {

function createBackground(dataIndex: number) {
const bgLayout = getLayout[coord.type](data, dataIndex);
if (!bgLayout) {
return null;
}
const bgEl = createBackgroundEl(coord, isHorizontalOrRadial, bgLayout);
bgEl.useStyle(backgroundModel.getItemStyle());
// Only cartesian2d support borderRadius.
Expand All @@ -256,6 +259,9 @@ class BarView extends ChartView {
.add(function (dataIndex) {
const itemModel = data.getItemModel<BarDataItemOption>(dataIndex);
const layout = getLayout[coord.type](data, dataIndex, itemModel);
if (!layout) {
return;
}

if (drawBackground) {
createBackground(dataIndex);
Expand Down Expand Up @@ -327,6 +333,9 @@ class BarView extends ChartView {
.update(function (newIndex, oldIndex) {
const itemModel = data.getItemModel<BarDataItemOption>(newIndex);
const layout = getLayout[coord.type](data, newIndex, itemModel);
if (!layout) {
return;
}

if (drawBackground) {
let bgEl: Rect | Sector;
Expand Down Expand Up @@ -927,6 +936,10 @@ const getLayout: {
// when calculating bar background layout.
cartesian2d(data, dataIndex, itemModel?): RectLayout {
const layout = data.getItemLayout(dataIndex) as RectLayout;
if (!layout) {
return null;
}

const fixedLineWidth = itemModel ? getLineWidth(itemModel, layout) : 0;

// fix layout with lineWidth
Expand Down
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 Element from 'zrender/src/Element';
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 @@ type AxisEventData = {
value?: string | number
dataIndex?: number
tickIndex?: number
breakStart?: number
breakEnd?: number
} & {
[key in AxisIndexKey]?: number
};
Expand Down Expand Up @@ -133,9 +136,14 @@ class AxisBuilder {
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 @@ class AxisBuilder {
}

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 @@ interface AxisElementsBuilder {
opt: AxisBuilderCfg,
axisModel: AxisBaseModel,
group: graphic.Group,
transformGroup: graphic.Group
transformGroup: graphic.Group,
api: ExtensionAPI
):void
}

Expand Down Expand Up @@ -343,9 +352,10 @@ const builders: Record<'axisLine' | 'axisTickLabel' | 'axisName', AxisElementsBu
}
},

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 @@ function buildAxisLabel(
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 @@ function buildAxisLabel(
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,
});
});
}
}

// 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 CartesianAxisModel from '../../coord/cartesian/AxisModel';
import GridModel from '../../coord/cartesian/GridModel';
import { Payload } from '../../util/types';
import { isIntervalOrLogScale } from '../../scale/helper';
import { rectCoordBuildBreakAxis } from './axisBreakHelper';

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 @@ class CartesianAxisView extends AxisView {

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 @@ class CartesianAxisView extends AxisView {

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 @@ class CartesianAxisView extends AxisView {
}

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 @@ const axisElementBuilders: Record<typeof selfBuilderAttrs[number], AxisElementBu

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

// @ts-ignore
breakArea(axisView, axisGroup, axisModel, gridModel, api) {
rectCoordBuildBreakAxis(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) {
// }
// });
};