Skip to content

Commit

Permalink
refactor(mark): inline shape (#5386)
Browse files Browse the repository at this point in the history
  • Loading branch information
pearmini committed Aug 11, 2023
1 parent b34fa72 commit 40cc5b6
Show file tree
Hide file tree
Showing 33 changed files with 424 additions and 570 deletions.
1 change: 1 addition & 0 deletions __tests__/plots/static/miserable-force-default.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ export function miserableForceDefault(): G2Spec {
type: 'fetch',
value: 'data/miserable.json',
},
scale: { color: { type: 'ordinal' } },
};
}
156 changes: 2 additions & 154 deletions __tests__/unit/stdlib/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,62 +60,6 @@ import {
Sequential,
Constant as ConstantScale,
} from '../../../src/scale';
import {
Rect as RectShape,
HollowRect,
Line as LineShape,
Smooth,
HV,
VH,
HVH,
Bowtie,
Cross,
Diamond,
Hexagon,
HollowBowtie,
HollowDiamond,
HollowHexagon,
HollowPoint,
HollowSquare,
HollowTriangle,
HollowTriangleDown,
Hyphen,
LinePoint,
Plus,
Point as PointShape,
Square,
Tick,
Triangle,
TriangleDown,
Text,
Badge,
Connector as ConnectorShape,
Area,
SmoothArea,
HVHArea,
HVArea,
VHArea,
SmoothEdge,
VHVEdge,
Arc,
Image,
Polygon,
Ribbon,
Box,
Violin,
LineXY,
Funnel,
Pyramid,
Vector,
Link,
Label,
Path as PathShape,
HollowPath,
Density as DensityShape,
Heatmap as HeatmapShape,
Shape as CustomShape,
Trail,
} from '../../../src/shape';
import { Classic, ClassicDark, Academy } from '../../../src/theme';
import {
AxisX,
Expand Down Expand Up @@ -185,22 +129,6 @@ import {
Mark,
} from '../../../src/composition';
import {
MaybeZeroX,
MaybeZeroY1,
MaybeStackY,
MaybeSeries,
MaybeFunctionAttribute,
MaybeVisualPosition,
MaybeZeroPadding,
MaybeGradient,
MaybeZeroY,
MaybeSize,
MaybeKey,
MaybeIdentityX,
MaybeIdentityY,
MaybeTupleX,
MaybeTupleY,
MaybeTuple,
StackY,
DodgeX,
StackEnter,
Expand All @@ -223,8 +151,6 @@ import {
Pack,
Bin,
BinX,
MaybeTitle,
MaybeTooltip,
Sample,
Filter as FilterTransform,
} from '../../../src/transform';
Expand Down Expand Up @@ -256,6 +182,7 @@ import {
OverlapDodgeY,
} from '../../../src/label-transform';
import { GeoView, GeoPath } from '../../../src/geo';
import { LabelShape } from '../../../src/shape';

describe('stdlib', () => {
it('createLibrary() should returns expected builtin', () => {
Expand All @@ -279,13 +206,6 @@ describe('stdlib', () => {
'data.join': Join,
'data.kde': KDE,
'data.venn': Venn,
'transform.maybeZeroY1': MaybeZeroY1,
'transform.maybeZeroX': MaybeZeroX,
'transform.maybeStackY': MaybeStackY,
'transform.maybeTitle': MaybeTitle,
'transform.maybeTooltip': MaybeTooltip,
'transform.maybeSeries': MaybeSeries,
'transform.maybeZeroPadding': MaybeZeroPadding,
'transform.stackY': StackY,
'transform.binX': BinX,
'transform.bin': Bin,
Expand All @@ -303,21 +223,10 @@ describe('stdlib', () => {
'transform.groupY': GroupY,
'transform.groupColor': GroupColor,
'transform.group': Group,
'transform.maybeSize': MaybeSize,
'transform.maybeZeroY': MaybeZeroY,
'transform.maybeKey': MaybeKey,
'transform.sortX': SortX,
'transform.sortY': SortY,
'transform.sortColor': SortColor,
'transform.flexX': FlexX,
'transform.maybeTupleY': MaybeTupleY,
'transform.maybeTupleX': MaybeTupleX,
'transform.maybeIdentityY': MaybeIdentityY,
'transform.maybeIdentityX': MaybeIdentityX,
'transform.maybeTuple': MaybeTuple,
'transform.maybeVisualPosition': MaybeVisualPosition,
'transform.maybeFunctionAttribute': MaybeFunctionAttribute,
'transform.maybeGradient': MaybeGradient,
'transform.pack': Pack,
'transform.sample': Sample,
'transform.filter': FilterTransform,
Expand Down Expand Up @@ -364,6 +273,7 @@ describe('stdlib', () => {
'mark.density': DensityGeometry,
'mark.gauge': Gauge,
'mark.heatmap': Heatmap,
'shape.label.label': LabelShape,
'palette.category10': Category10,
'palette.category20': Category20,
'scale.linear': Linear,
Expand All @@ -380,68 +290,6 @@ describe('stdlib', () => {
'scale.quantize': Quantize,
'scale.sequential': Sequential,
'scale.constant': ConstantScale,
'shape.interval.rect': RectShape,
'shape.interval.hollow': HollowRect,
'shape.interval.funnel': Funnel,
'shape.interval.pyramid': Pyramid,
'shape.rect.rect': RectShape,
'shape.rect.hollow': HollowRect,
'shape.cell.cell': RectShape,
'shape.cell.hollow': HollowRect,
'shape.line.line': LineShape,
'shape.line.hv': HV,
'shape.line.vh': VH,
'shape.line.hvh': HVH,
'shape.line.smooth': Smooth,
'shape.line.trail': Trail,
'shape.point.bowtie': Bowtie,
'shape.point.cross': Cross,
'shape.point.diamond': Diamond,
'shape.point.hexagon': Hexagon,
'shape.point.hollowBowtie': HollowBowtie,
'shape.point.hollowDiamond': HollowDiamond,
'shape.point.hollowHexagon': HollowHexagon,
'shape.point.hollow': HollowPoint,
'shape.point.hollowSquare': HollowSquare,
'shape.point.hollowTriangle': HollowTriangle,
'shape.point.hollowTriangleDown': HollowTriangleDown,
'shape.point.hyphen': Hyphen,
'shape.point.line': LinePoint,
'shape.point.plus': Plus,
'shape.point.point': PointShape,
'shape.point.square': Square,
'shape.point.tick': Tick,
'shape.point.triangle': Triangle,
'shape.point.triangleDown': TriangleDown,
'shape.text.text': Text,
'shape.area.area': Area,
'shape.area.smooth': SmoothArea,
'shape.area.hvh': HVHArea,
'shape.area.vh': VHArea,
'shape.area.hv': HVArea,
'shape.link.smooth': SmoothEdge,
'shape.link.vhv': VHVEdge,
'shape.link.arc': Arc,
'shape.link.link': Link,
'shape.image.image': Image,
'shape.polygon.polygon': Polygon,
'shape.polygon.ribbon': Ribbon,
'shape.box.box': Box,
'shape.box.violin': Violin,
'shape.vector.vector': Vector,
'shape.label.label': Label,
'shape.text.badge': Badge,
'shape.lineX.line': LineXY,
'shape.lineY.line': LineXY,
'shape.shape.shape': CustomShape,
'shape.connector.connector': ConnectorShape,
'shape.range.range': RectShape,
'shape.rangeX.range': RectShape,
'shape.rangeY.range': RectShape,
'shape.path.path': PathShape,
'shape.path.hollow': HollowPath,
'shape.density.density': DensityShape,
'shape.heatmap.heatmap': HeatmapShape,
'theme.classic': Classic,
'theme.classicDark': ClassicDark,
'theme.academy': Academy,
Expand Down
9 changes: 4 additions & 5 deletions src/component/legendCategory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,19 +82,18 @@ function inferItemMarker(
context: GuideComponentContext,
): ((datum: any, i: number, data: any) => () => DisplayObject) | undefined {
const { scales, library, markState } = context;
const [namespace, shapes] = inferShape(scales, markState);

const [mark, shapes] = inferShape(scales, markState);
const { itemMarker, itemMarkerSize: size } = options;

const create = (name, d) => {
const marker =
(library[`shape.${name}`]?.props?.defaultMarker as string) ||
last(name.split('.'));
(library[`mark.${mark}`]?.props?.shape[name]?.props
.defaultMarker as string) || last(name.split('.'));
const radius = typeof size === 'function' ? size(d) : size;
return () => useMarker(marker, { color: d.color })(0, 0, radius);
};

const shapeOf = (i) => `${namespace}.${shapes[i]}`;
const shapeOf = (i) => `${shapes[i]}`;

const shapeScale = scaleOf(scales, 'shape');
if (shapeScale && !itemMarker) return (d, i) => create(shapeOf(i), d);
Expand Down
21 changes: 15 additions & 6 deletions src/mark/area.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,23 @@
import { group } from 'd3-array';
import { MarkComponent as MC } from '../runtime';
import { AreaMark } from '../spec';
import { AreaShape, AreaHV, AreaHVH, AreaSmooth, AreaVH } from '../shape';
import { MaybeSeries, MaybeZeroY1, MaybeZeroPadding } from '../transform';
import {
baseGeometryChannels,
basePostInference,
basePreInference,
tooltip1d,
} from './utils';

const shape = {
area: AreaShape,
smooth: AreaSmooth,
hvh: AreaHVH,
vh: AreaVH,
hv: AreaHV,
};

export type AreaOptions = Omit<AreaMark, 'type'>;

/*
Expand Down Expand Up @@ -65,24 +75,23 @@ export const Area: MC<AreaOptions> = () => {
};
};

const shapes = ['area', 'smooth', 'hvh', 'hv', 'vh'];

Area.props = {
defaultShape: 'area',
defaultLabelShape: 'label',
composite: false,
shape,
channels: [
...baseGeometryChannels({ shapes }),
...baseGeometryChannels({ shapes: Object.keys(shape) }),
{ name: 'x', required: true },
{ name: 'y', required: true },
{ name: 'size' },
{ name: 'series', scale: 'identity' },
],
preInference: [
...basePreInference(),
{ type: 'maybeSeries' },
{ type: 'maybeZeroY1' },
{ type: 'maybeZeroPadding' },
{ type: MaybeSeries },
{ type: MaybeZeroY1 },
{ type: MaybeZeroPadding },
],
postInference: [...basePostInference(), ...tooltip1d()],
interaction: {
Expand Down
12 changes: 10 additions & 2 deletions src/mark/box.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
import { Band } from '@antv/scale';
import { Vector2, MarkComponent as MC } from '../runtime';
import { BoxMark } from '../spec';
import { BoxShape, BoxViolin } from '../shape';
import { MaybeZeroX } from '../transform';
import {
baseGeometryChannels,
basePostInference,
basePreInference,
tooltip1d,
} from './utils';

const shape = {
box: BoxShape,
violin: BoxViolin,
};

export type BoxOptions = Omit<BoxMark, 'type'>;

/**
Expand Down Expand Up @@ -91,13 +98,14 @@ Box.props = {
defaultShape: 'box',
defaultLabelShape: 'label',
composite: false,
shape,
channels: [
...baseGeometryChannels({ shapes: ['box'] }),
...baseGeometryChannels({ shapes: Object.keys(shape) }),
{ name: 'x', scale: 'band', required: true },
{ name: 'y', required: true },
{ name: 'series', scale: 'band' },
],
preInference: [...basePreInference(), { type: 'maybeZeroX' }],
preInference: [...basePreInference(), { type: MaybeZeroX }],
postInference: [...basePostInference(), ...tooltip1d()],
interaction: {
shareTooltip: true,
Expand Down
18 changes: 12 additions & 6 deletions src/mark/cell.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
import { Band } from '@antv/scale';
import { MarkComponent as MC, Vector2 } from '../runtime';
import { CellMark } from '../spec';
import { CellShape, CellHollow } from '../shape';
import { MaybeZeroX, MaybeZeroY, MaybeZeroPadding } from '../transform';
import {
baseGeometryChannels,
basePostInference,
basePreInference,
tooltip2d,
} from './utils';

const shape = {
cell: CellShape,
hollow: CellHollow,
};

export type CellOptions = Omit<CellMark, 'type'>;

/**
Expand Down Expand Up @@ -35,22 +42,21 @@ export const Cell: MC<CellOptions> = () => {
};
};

const shapes = ['cell', 'hollow'];

Cell.props = {
defaultShape: 'cell',
defaultLabelShape: 'label',
shape,
composite: false,
channels: [
...baseGeometryChannels({ shapes }),
...baseGeometryChannels({ shapes: Object.keys(shape) }),
{ name: 'x', required: true, scale: 'band' },
{ name: 'y', required: true, scale: 'band' },
],
preInference: [
...basePreInference(),
{ type: 'maybeZeroX' },
{ type: 'maybeZeroY' },
{ type: 'maybeZeroPadding' },
{ type: MaybeZeroX },
{ type: MaybeZeroY },
{ type: MaybeZeroPadding },
],
postInference: [...basePostInference(), ...tooltip2d()],
};

0 comments on commit 40cc5b6

Please sign in to comment.