import { DataObject } from '../../data'; import { DataFrame } from '../../data/DataFrame'; import { PullOptions } from '../../graph/options'; import { SourceNode, SourceNodeOptions } from '../SourceNode'; /** * @category Source node */ export class HistorySourceNode extends SourceNode { constructor(options?: SourceNodeOptions) { super(options); } public onPull(options: PullOptions = { requestedObjects: [] }): Promise { return new Promise((resolve, reject) => { const service = this.model.findDataService(DataObject); const requestPromises: Array> = []; options.requestedObjects.forEach((uid) => { requestPromises.push( new Promise((resolve) => { service .findByUID(uid) .then((object) => { resolve(object); }) .catch(() => { // Ignore resolve(undefined); }); }), ); }); // Complete service requests Promise.all(requestPromises) .then((objects) => { // Create a new dataframe from these objects const frame = new DataFrame(this.source); objects.forEach((object) => { if (object) { frame.addObject(object); } }); resolve(frame as Out); }) .catch(reject); }); } }