From 2d0646878bff264186554b4d4e1c4f39e1ef0e37 Mon Sep 17 00:00:00 2001 From: bqxbqx Date: Sat, 15 Feb 2025 00:10:54 +0800 Subject: [PATCH 1/3] chore: resolve d3-array type issues --- __tests__/plots/static/barley-line-trail.ts | 4 ++-- ...ncome-statement-by-region-interval-custom.ts | 2 +- package.json | 4 ++-- src/interaction/legendHighlight.ts | 6 ++++-- src/runtime/layout.ts | 17 +++++++++++++++-- src/transform/bin.ts | 4 ++-- 6 files changed, 26 insertions(+), 11 deletions(-) diff --git a/__tests__/plots/static/barley-line-trail.ts b/__tests__/plots/static/barley-line-trail.ts index 78fcc28edd..b05fe462a1 100644 --- a/__tests__/plots/static/barley-line-trail.ts +++ b/__tests__/plots/static/barley-line-trail.ts @@ -9,8 +9,8 @@ export async function barleyLineTrail(): Promise { const keyDelta = rollup( data, ([a, b]) => { - if (b.year < a.year) [a, b] = [b, a]; - return b.yield - a.yield; + if ((b as any).year < (a as any).year) [a, b] = [b, a]; + return (b as any).yield - (a as any).yield; }, key, ); diff --git a/__tests__/plots/static/income-statement-by-region-interval-custom.ts b/__tests__/plots/static/income-statement-by-region-interval-custom.ts index 2f1df7c38f..c1ef41e3e2 100644 --- a/__tests__/plots/static/income-statement-by-region-interval-custom.ts +++ b/__tests__/plots/static/income-statement-by-region-interval-custom.ts @@ -16,7 +16,7 @@ export function incomeStatementByRegionIntervalCustom() { const groupData = (data) => { const groups = group(data, (d: any) => d.x); return Array.from(groups.entries()).reduce((r, [k, v]) => { - const y = v[v.length - 1].end; + const y = (v[v.length - 1] as any).end; return r.concat({ x: k, y, diff --git a/package.json b/package.json index af3e4c767c..b77f1fcf88 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "@antv/g-plugin-dragndrop": "^2.0.22", "@antv/scale": "^0.4.16", "@antv/util": "^3.3.10", - "@antv/vendor": "1.0.6", + "@antv/vendor": "^1.0.8", "flru": "^1.0.2", "fmin": "0.0.2", "pdfast": "^0.2.0" @@ -165,4 +165,4 @@ "bugs": { "url": "https://github.com/antvis/g2/issues" } -} +} \ No newline at end of file diff --git a/src/interaction/legendHighlight.ts b/src/interaction/legendHighlight.ts index 562c0f0798..de718dc402 100644 --- a/src/interaction/legendHighlight.ts +++ b/src/interaction/legendHighlight.ts @@ -1,4 +1,4 @@ -import { group } from '@antv/vendor/d3-array'; +import { InternMap, group } from '@antv/vendor/d3-array'; import { subObject } from '../utils/helper'; import { mergeState, @@ -66,7 +66,9 @@ export function LegendHighlight() { const highlightItem = (event, item) => { // Update UI. const value = datumOf(item); - const elementSet = new Set(elementGroup.get(value)); + const elementSet = new Set( + (elementGroup as InternMap).get(value), + ); for (const e of elements) { if (elementSet.has(e)) setState(e, 'active'); else setState(e, 'inactive'); diff --git a/src/runtime/layout.ts b/src/runtime/layout.ts index 082fe3176c..77e72c5a06 100644 --- a/src/runtime/layout.ts +++ b/src/runtime/layout.ts @@ -1,5 +1,12 @@ import { Coordinate } from '@antv/coord'; -import { ascending, group, max, min, sum } from '@antv/vendor/d3-array'; +import { + NestedInternMap, + ascending, + group, + max, + min, + sum, +} from '@antv/vendor/d3-array'; import { deepMix } from '@antv/util'; import { isParallel, isPolar, isRadar, radiusOf } from '../utils/coordinate'; import { capitalizeFirst, defined } from '../utils/helper'; @@ -389,10 +396,16 @@ export function placeComponents( layout: Layout, ): void { // Group components by plane & position. - const positionComponents = group( + + const positionComponents: NestedInternMap< + G2GuideComponentOptions, + G2GuideComponentOptions[], + [string] + > = group( components, (d) => `${d.plane || 'xy'}-${d.position}`, ); + const { paddingLeft, paddingRight, diff --git a/src/transform/bin.ts b/src/transform/bin.ts index c974e458c0..4ff40e325c 100644 --- a/src/transform/bin.ts +++ b/src/transform/bin.ts @@ -39,7 +39,7 @@ export const Bin: TC = (options = {}) => { const channelIndexKey = {}; // Group indexes and update channelIndexKey. - const groupBy = (I, mark) => { + const groupBy = (I, mark): number[][] => { const { encode } = mark; const binValues = binChannels.map((channel) => { const [V] = columnOf(encode, channel); @@ -80,7 +80,7 @@ export const Bin: TC = (options = {}) => { // Group by indexes by channel keys. const key = (i: number) => groupKeys.map((key) => key(i)).join('-'); - return Array.from(group(DI, key).values()); + return Array.from(group(DI, key).values()) as number[][]; }; return GroupN({ From 632e03a360950e6d85a335a1824d073235ccd0c9 Mon Sep 17 00:00:00 2001 From: bqxbqx Date: Sat, 15 Feb 2025 00:53:31 +0800 Subject: [PATCH 2/3] chore: add Edge & Node type --- src/data/utils/arc/arc.ts | 10 +++++----- src/data/utils/arc/types.ts | 22 ++++++++++++++++++++-- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/data/utils/arc/arc.ts b/src/data/utils/arc/arc.ts index 38202c0a68..38e9bf311d 100644 --- a/src/data/utils/arc/arc.ts +++ b/src/data/utils/arc/arc.ts @@ -1,6 +1,6 @@ import { group, sum } from '@antv/vendor/d3-array'; import { error } from '../../../utils/helper'; -import { ArcData, ArcOptions } from './types'; +import { ArcData, ArcOptions, Edge, Node } from './types'; import * as SortMethods from './sort'; const DEFAULT_OPTIONS = { @@ -53,7 +53,7 @@ export function Arc(options?: ArcOptions) { /** * Calculate id, value, frequency for node, and source,target for edge. */ - function preprocess(nodes, edges) { + function preprocess(nodes: Node[], edges: Edge[]) { edges.forEach((edge) => { edge.source = source(edge); edge.target = target(edge); @@ -83,7 +83,7 @@ export function Arc(options?: ArcOptions) { return { nodes, edges }; } - function sortNodes(nodes, edges) { + function sortNodes(nodes: Node[], edges: Edge[]) { const method = typeof sortBy === 'function' ? sortBy : SortMethods[sortBy]; if (method) { @@ -91,7 +91,7 @@ export function Arc(options?: ArcOptions) { } } - function layoutNodes(nodes, edges) { + function layoutNodes(nodes: Node[], edges: Edge[]) { const size = nodes.length; if (!size) { throw error("Invalid nodes: it's empty!"); @@ -145,7 +145,7 @@ export function Arc(options?: ArcOptions) { /** * Get edge layout information from nodes, and save into edge object. */ - function layoutEdges(nodes, edges) { + function layoutEdges(nodes: Node[], edges: Edge[]) { const nodesMap = new Map(nodes.map((d) => [d.id, d])); if (!weight) { diff --git a/src/data/utils/arc/types.ts b/src/data/utils/arc/types.ts index ab73dd5ad0..1a46a2cf87 100644 --- a/src/data/utils/arc/types.ts +++ b/src/data/utils/arc/types.ts @@ -21,7 +21,25 @@ export type ArcOptions = { thickness?: number; }; +export interface Edge { + source: string; + target: string; + sourceWeight: number; + targetWeight: number; + x: number | number[]; + value: any; + [key: string]: any; +} + +export interface Node { + key: string; + id: string; + x: number | number[]; + y: number | number[]; + [key: string]: any; +} + export type ArcData = { - nodes: any[]; - edges: any[]; + nodes: Node[]; + edges: Edge[]; }; From 3292aca66989af51a1fd514ee6330d57dc91b905 Mon Sep 17 00:00:00 2001 From: bqxbqx Date: Sat, 15 Feb 2025 01:07:00 +0800 Subject: [PATCH 3/3] chore: improve type definitions for ArcNode and ArcEdge --- src/data/utils/arc/arc.ts | 10 +++++----- src/data/utils/arc/types.ts | 28 ++++++++++++++++++---------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/data/utils/arc/arc.ts b/src/data/utils/arc/arc.ts index 38e9bf311d..ba8a13322a 100644 --- a/src/data/utils/arc/arc.ts +++ b/src/data/utils/arc/arc.ts @@ -1,6 +1,6 @@ import { group, sum } from '@antv/vendor/d3-array'; import { error } from '../../../utils/helper'; -import { ArcData, ArcOptions, Edge, Node } from './types'; +import { ArcData, ArcOptions, ArcEdge, ArcNode } from './types'; import * as SortMethods from './sort'; const DEFAULT_OPTIONS = { @@ -53,7 +53,7 @@ export function Arc(options?: ArcOptions) { /** * Calculate id, value, frequency for node, and source,target for edge. */ - function preprocess(nodes: Node[], edges: Edge[]) { + function preprocess(nodes: ArcNode[], edges: ArcEdge[]) { edges.forEach((edge) => { edge.source = source(edge); edge.target = target(edge); @@ -83,7 +83,7 @@ export function Arc(options?: ArcOptions) { return { nodes, edges }; } - function sortNodes(nodes: Node[], edges: Edge[]) { + function sortNodes(nodes: ArcNode[], edges: ArcEdge[]) { const method = typeof sortBy === 'function' ? sortBy : SortMethods[sortBy]; if (method) { @@ -91,7 +91,7 @@ export function Arc(options?: ArcOptions) { } } - function layoutNodes(nodes: Node[], edges: Edge[]) { + function layoutNodes(nodes: ArcNode[], edges: ArcEdge[]) { const size = nodes.length; if (!size) { throw error("Invalid nodes: it's empty!"); @@ -145,7 +145,7 @@ export function Arc(options?: ArcOptions) { /** * Get edge layout information from nodes, and save into edge object. */ - function layoutEdges(nodes: Node[], edges: Edge[]) { + function layoutEdges(nodes: ArcNode[], edges: ArcEdge[]) { const nodesMap = new Map(nodes.map((d) => [d.id, d])); if (!weight) { diff --git a/src/data/utils/arc/types.ts b/src/data/utils/arc/types.ts index 1a46a2cf87..3b0b1fdd16 100644 --- a/src/data/utils/arc/types.ts +++ b/src/data/utils/arc/types.ts @@ -20,26 +20,34 @@ export type ArcOptions = { /** Thickness of node, default: 0.05 */ thickness?: number; }; - -export interface Edge { +export interface ArcEdge { source: string; target: string; sourceWeight: number; targetWeight: number; - x: number | number[]; - value: any; + x: number[] | number; + y: number[] | number; + value: number; + weight?: number; + width?: number; + height?: number; + frequency?: number; [key: string]: any; } -export interface Node { - key: string; +export interface ArcNode { id: string; - x: number | number[]; - y: number | number[]; + x: number[] | number; + y: number[] | number; + value: number; + frequency: number; + weight?: number; + width?: number; + height?: number; [key: string]: any; } export type ArcData = { - nodes: Node[]; - edges: Edge[]; + nodes: ArcNode[]; + edges: ArcEdge[]; };