vega-lite
Version:
Vega-Lite is a concise high-level language for interactive visualization.
49 lines (41 loc) • 1.34 kB
text/typescript
import {PivotTransform} from '../../transform.js';
import {duplicate, hash, unique} from '../../util.js';
import {PivotTransform as VgPivotTransform} from 'vega';
import {DataFlowNode} from './dataflow.js';
/**
* A class for pivot transform nodes.
*/
export class PivotTransformNode extends DataFlowNode {
public clone() {
return new PivotTransformNode(null, duplicate(this.transform));
}
constructor(
parent: DataFlowNode,
private transform: PivotTransform,
) {
super(parent);
}
public addDimensions(fields: readonly string[]) {
this.transform.groupby = unique((this.transform.groupby ?? []).concat(fields), (d) => d);
}
public producedFields(): undefined {
return undefined; // return undefined so that potentially everything can depend on the pivot
}
public dependentFields() {
return new Set([this.transform.pivot, this.transform.value, ...(this.transform.groupby ?? [])]);
}
public hash() {
return `PivotTransform ${hash(this.transform)}`;
}
public assemble(): VgPivotTransform {
const {pivot, value, groupby, limit, op} = this.transform;
return {
type: 'pivot',
field: pivot,
value,
...(limit !== undefined ? {limit} : {}),
...(op !== undefined ? {op} : {}),
...(groupby !== undefined ? {groupby} : {}),
};
}
}