UNPKG

1.52 kBJavaScriptView Raw
1import Facet from './Facet';
2import {ingest, tupleid} from 'vega-dataflow';
3import {accessorFields, error, inherits} from 'vega-util';
4
5/**
6 * Partitions pre-faceted data into tuple subflows.
7 * @constructor
8 * @param {object} params - The parameters for this operator.
9 * @param {function(Dataflow, string): Operator} params.subflow - A function
10 * that generates a subflow of operators and returns its root operator.
11 * @param {function(object): Array<object>} params.field - The field
12 * accessor for an array of subflow tuple objects.
13 */
14export default function PreFacet(params) {
15 Facet.call(this, params);
16}
17
18var prototype = inherits(PreFacet, Facet);
19
20prototype.transform = function(_, pulse) {
21 var self = this,
22 flow = _.subflow,
23 field = _.field;
24
25 if (_.modified('field') || field && pulse.modified(accessorFields(field))) {
26 error('PreFacet does not support field modification.');
27 }
28
29 this._targets.active = 0; // reset list of active subflows
30
31 pulse.visit(pulse.MOD, function(t) {
32 var sf = self.subflow(tupleid(t), flow, pulse, t);
33 field ? field(t).forEach(function(_) { sf.mod(_); }) : sf.mod(t);
34 });
35
36 pulse.visit(pulse.ADD, function(t) {
37 var sf = self.subflow(tupleid(t), flow, pulse, t);
38 field ? field(t).forEach(function(_) { sf.add(ingest(_)); }) : sf.add(t);
39 });
40
41 pulse.visit(pulse.REM, function(t) {
42 var sf = self.subflow(tupleid(t), flow, pulse, t);
43 field ? field(t).forEach(function(_) { sf.rem(_); }) : sf.rem(t);
44 });
45
46 return pulse;
47};