UNPKG

@blockv/sdk

Version:

Allows web apps to display and interact with vatoms.

96 lines (71 loc) 2.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _lodash = require("lodash"); /** * A Filter exposes the same functions as a Region, except the returned data is filtered by the specified key. */ class Filter { /** Constructor */ constructor(region, keyPath, value) { // Store values this.region = region; this.keyPath = keyPath; this.value = value; } /** Passthrough */ get objects() { return this.region.objects; } /** Passthrough */ synchronize() { return this.region.synchronize(); } /** Passthrough */ getItem(id, waitUntilStable = true) { return this.region.getItem(id, waitUntilStable); } /** Passthrough */ map(object) { return this.region.map(object); } /** * Returns all the objects within this region, filtered by this filter. * * @param {Boolean} waitUntilStable If true, will wait until all data objects have been retrieved. If false, will return immediately with current data. * @returns {Promise<Object[]>} An array of objects in this region. If `waitUntilStable` is false, returns the array immediately (without the promise). */ get(waitUntilStable = true) { // Synchronize now if (waitUntilStable) return this.synchronize().then(e => this.get(false)); // Create an array of all data objects let items = []; for (let object of this.objects.values()) { // Check filtered value let value = (0, _lodash.get)(object.data, this.keyPath); if (value != this.value) continue; // Check for cached object if (object.cached) { items.push(object.cached); continue; } // Map to the plugin's intended type let mapped = this.map(object); if (!mapped) continue; // Cache it object.cached = mapped; // Add to list items.push(mapped); } // Done return items; } /** * Create a filter. * * @param {String} keyPath The data path to check * @param {*} value The value to check for * @returns {Filter} The filtered region */ // TODO: Implement subfiltering // filter(keyPath, value) { // return new Filter(this, keyPath, value) // } } exports.default = Filter;