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(treemap.breadcrumb): add emphasis state #17242

Merged
merged 6 commits into from
Jun 21, 2022
Merged
Show file tree
Hide file tree
Changes from 5 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
26 changes: 17 additions & 9 deletions src/chart/treemap/Breadcrumb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ import { ZRElementEvent, BoxLayoutOptionMixin, ECElement } from '../../util/type
import Element from 'zrender/src/Element';
import Model from '../../model/Model';
import { convertOptionIdName } from '../../util/model';
import { Z2_EMPHASIS_LIFT } from '../../util/states';
import { toggleHoverEmphasis, Z2_EMPHASIS_LIFT } from '../../util/states';
import { createTextStyle } from '../../label/labelStyle';

const TEXT_PADDING = 8;
const ITEM_GAP = 8;
Expand All @@ -55,6 +56,7 @@ interface LayoutParam {
}

type BreadcrumbItemStyleModel = Model<TreemapSeriesOption['breadcrumb']['itemStyle']>;
type BreadcrumbEmphasisItemStyleModel = Model<TreemapSeriesOption['breadcrumb']['emphasis']>;
type BreadcrumbTextStyleModel = Model<TreemapSeriesOption['breadcrumb']['itemStyle']['textStyle']>;

class Breadcrumb {
Expand All @@ -81,8 +83,9 @@ class Breadcrumb {
}

const normalStyleModel = model.getModel('itemStyle');
// let emphasisStyleModel = model.getModel('emphasis.itemStyle');
const emphasisModel = model.getModel('emphasis');
const textStyleModel = normalStyleModel.getModel('textStyle');
const emphasisTextStyleModel = emphasisModel.getModel(['itemStyle', 'textStyle']);

const layoutParam: LayoutParam = {
pos: {
Expand All @@ -101,7 +104,10 @@ class Breadcrumb {
};

this._prepare(targetNode, layoutParam, textStyleModel);
this._renderContent(seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect);
this._renderContent(
seriesModel, layoutParam, normalStyleModel,
emphasisModel, textStyleModel, emphasisTextStyleModel, onSelect
);

layout.positionElement(thisGroup, layoutParam.pos, layoutParam.box);
}
Expand Down Expand Up @@ -134,7 +140,9 @@ class Breadcrumb {
seriesModel: TreemapSeriesModel,
layoutParam: LayoutParam,
normalStyleModel: BreadcrumbItemStyleModel,
emphasisModel: BreadcrumbEmphasisItemStyleModel,
textStyleModel: BreadcrumbTextStyleModel,
emphasisTextStyleModel: BreadcrumbTextStyleModel,
onSelect: OnSelectCallback
) {
// Start rendering.
Expand Down Expand Up @@ -172,11 +180,7 @@ class Breadcrumb {
}
),
textContent: new graphic.Text({
style: {
text,
fill: textStyleModel.getTextColor(),
font: textStyleModel.getFont()
}
style: createTextStyle(textStyleModel, { text })
}),
textConfig: {
position: 'inside'
Expand All @@ -185,7 +189,11 @@ class Breadcrumb {
onclick: curry(onSelect, itemNode)
});
(el as ECElement).disableLabelAnimation = true;

el.getTextContent().ensureState('emphasis').style = createTextStyle(emphasisTextStyleModel, { text });
el.ensureState('emphasis').style = emphasisModel.getModel('itemStyle').getItemStyle();
toggleHoverEmphasis(
el, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled')
);
this.group.add(el);

packEventData(el, seriesModel, itemNode);
Expand Down
11 changes: 10 additions & 1 deletion src/chart/treemap/TreemapSeries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ import {
DecalObject,
SeriesLabelOption,
DefaultEmphasisFocus,
AriaOptionMixin
AriaOptionMixin,
BlurScope
} from '../../util/types';
import GlobalModel from '../../model/Global';
import { LayoutRect } from '../../util/layout';
Expand Down Expand Up @@ -202,6 +203,9 @@ export interface TreemapSeriesOption
itemStyle?: BreadcrumbItemStyleOption

emphasis?: {
disabled?: boolean
focus?: DefaultEmphasisFocus
blurScope?: BlurScope
itemStyle?: BreadcrumbItemStyleOption
}
}
Expand Down Expand Up @@ -265,6 +269,11 @@ class TreemapSeriesModel extends SeriesModel<TreemapSeriesOption> {
textStyle: {
color: '#fff'
}
},
emphasis: {
itemStyle: {
color: 'rgba(0,0,0,0.9)' //'#5793f3',
}
}
},
label: {
Expand Down
2 changes: 1 addition & 1 deletion src/data/DataStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -448,7 +448,7 @@ class DataStore {
}

getValues(idx: number): ParsedValue[];
getValues(dimensions: readonly DimensionIndex[], idx?: number): ParsedValue[]
getValues(dimensions: readonly DimensionIndex[], idx?: number): ParsedValue[];
getValues(dimensions: readonly DimensionIndex[] | number, idx?: number): ParsedValue[] {
const values = [];
let dimArr: DimensionIndex[] = [];
Expand Down
8 changes: 4 additions & 4 deletions src/data/Graph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -360,8 +360,8 @@ class GraphNode {
}

// TODO: TYPE Same type with Model#getModel
getModel<T = unknown>(): Model<T>
getModel<T = unknown, S extends keyof T= keyof T>(path: S): Model<T[S]>
getModel<T = unknown>(): Model<T>;
getModel<T = unknown, S extends keyof T= keyof T>(path: S): Model<T[S]>;
getModel<T = unknown>(path?: string): Model {
if (this.dataIndex < 0) {
return;
Expand Down Expand Up @@ -410,8 +410,8 @@ class GraphEdge {
this.dataIndex = dataIndex == null ? -1 : dataIndex;
}

getModel<T = unknown>(): Model<T>
getModel<T = unknown, S extends keyof T= keyof T>(path: S): Model<T[S]>
getModel<T = unknown>(): Model<T>;
getModel<T = unknown, S extends keyof T= keyof T>(path: S): Model<T[S]>;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
getModel<T = unknown>(path?: string): Model {
if (this.dataIndex < 0) {
Expand Down
18 changes: 9 additions & 9 deletions src/data/Tree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,9 @@ export class TreeNode {
* @param cb If in preorder and return false,
* its subtree will not be visited.
*/
eachNode<Ctx>(options: TreeTraverseOrder, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void
eachNode<Ctx>(options: TreeTraverseOption, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void
eachNode<Ctx>(cb: TreeTraverseCallback<Ctx>, context?: Ctx): void
eachNode<Ctx>(options: TreeTraverseOrder, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
eachNode<Ctx>(options: TreeTraverseOption, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
eachNode<Ctx>(cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
eachNode<Ctx>(
options: TreeTraverseOrder | TreeTraverseOption | TreeTraverseCallback<Ctx>,
cb?: TreeTraverseCallback<Ctx> | Ctx,
Expand Down Expand Up @@ -225,7 +225,7 @@ export class TreeNode {
return this.hostTree.data.getItemLayout(this.dataIndex);
}

getModel<T = unknown>(): Model<T>
getModel<T = unknown>(): Model<T>;
// @depcrecated
// getModel<T = unknown, S extends keyof T = keyof T>(path: S): Model<T[S]>
// eslint-disable-next-line @typescript-eslint/no-unused-vars
Expand All @@ -251,8 +251,8 @@ export class TreeNode {
* });
*/
// TODO: TYPE
setVisual(key: string, value: any): void
setVisual(obj: Dictionary<any>): void
setVisual(key: string, value: any): void;
setVisual(obj: Dictionary<any>): void;
setVisual(key: string | Dictionary<any>, value?: any) {
this.dataIndex >= 0
&& this.hostTree.data.setItemVisual(this.dataIndex, key as any, value);
Expand Down Expand Up @@ -353,9 +353,9 @@ class Tree<HostModel extends Model = Model, LevelOption = any> {
* @param cb
* @param context
*/
eachNode<Ctx>(options: TreeTraverseOrder, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void
eachNode<Ctx>(options: TreeTraverseOption, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void
eachNode<Ctx>(cb: TreeTraverseCallback<Ctx>, context?: Ctx): void
eachNode<Ctx>(options: TreeTraverseOrder, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
eachNode<Ctx>(options: TreeTraverseOption, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
eachNode<Ctx>(cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
eachNode<Ctx>(
options: TreeTraverseOrder | TreeTraverseOption | TreeTraverseCallback<Ctx>,
cb?: TreeTraverseCallback<Ctx> | Ctx,
Expand Down
6 changes: 3 additions & 3 deletions src/model/Global.ts
Original file line number Diff line number Diff line change
Expand Up @@ -696,17 +696,17 @@ echarts.use([${seriesImportName}]);`);
eachComponent<T>(
cb: EachComponentAllCallback,
context?: T
): void
): void;
eachComponent<T>(
mainType: string,
cb: EachComponentInMainTypeCallback,
context?: T
): void
): void;
eachComponent<T>(
mainType: QueryConditionKindA,
cb: EachComponentInMainTypeCallback,
context?: T
): void
): void;
eachComponent<T>(
mainType: string | QueryConditionKindA | EachComponentAllCallback,
cb?: EachComponentInMainTypeCallback | T,
Expand Down
6 changes: 3 additions & 3 deletions src/visual/VisualMapping.ts
Original file line number Diff line number Diff line change
Expand Up @@ -377,13 +377,13 @@ class VisualMapping {
}
}

static mapVisual<Ctx, T>(visual: T, callback: (visual: T, key?: string | number) => T, context?: Ctx): T
static mapVisual<Ctx, T>(visual: T[], callback: (visual: T, key?: string | number) => T[], context?: Ctx): T[]
static mapVisual<Ctx, T>(visual: T, callback: (visual: T, key?: string | number) => T, context?: Ctx): T;
static mapVisual<Ctx, T>(visual: T[], callback: (visual: T, key?: string | number) => T[], context?: Ctx): T[];
static mapVisual<Ctx, T>(
visual: Dictionary<T>,
callback: (visual: T, key?: string | number) => Dictionary<T>,
context?: Ctx
): Dictionary<T>
): Dictionary<T>;
static mapVisual<Ctx, T>(
visual: T | T[] | Dictionary<T>,
callback: (visual: T, key?: string | number) => T | T[] | Dictionary<T>,
Expand Down
9 changes: 9 additions & 0 deletions test/treemap-simple.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.