lyra icon indicating copy to clipboard operation
lyra copied to clipboard

Expose an API

Open davidanthoff opened this issue 4 years ago • 1 comments

Is there a way to easily add a new dataset via code? For example, in voyager, I can run voyagerInstance.updateData(data) as JavaScript to update the data source.

Can I do something similar here, i.e. something like lyraInstance.addDataset(data), where data would just be inline data values in the format that vega accepts?

Something like store.dispatch(addDataset(...)) ? But I'm not sure what to pass to addDataset. Or am I on a wrong track entirely here?

Other APIs that would be nice to have are: a) a way to extract the current spec (i.e. lyraInstance.getCurrentSpec()) as a vega spec (I think this is all based on vega, right?). And maybe b) can one load a vega spec into lyra? The latter is a little less crucial for what I hope to do.

davidanthoff avatar Mar 14 '20 18:03 davidanthoff

For now I added

(global as any).addData = (name: string, data: string) => {
  const parsed = dsUtils.parseRaw(data);

  const values = parsed.values;

  const pipeline = Pipeline({name});

  const ds = Dataset({
        name: name,
        format: parsed.format,
        _schema: dsUtils.schema(values)
      });

  addPipeline(pipeline, ds, values)(store.dispatch);
}

(global as any).getVegaSpec = () => {
  return ctrl.export()
}

to index.ts and that essentially is all I need.

Could something like that be added to the repo here?

There is one twist: instead of passing data as string it would probably make more sense if I could pass it directly as a list of objects, i.e. if I could pass something that is already parsed.

davidanthoff avatar Mar 15 '20 01:03 davidanthoff