import Component from '@ember/component'; import { get, setProperties } from '@ember/object'; import { task } from 'ember-concurrency'; import { IBrowserRouteParams } from 'wherehows-web/routes/browse/entity'; import { IDatasetView } from 'wherehows-web/typings/api/datasets/dataset'; import { readDatasets } from 'wherehows-web/utils/api/datasets/dataset'; // Describes the index signature for strategy pattern in the getEntitiesTask type IGetEntityTaskStrategy = { [K in IBrowserRouteParams['entity']]: Promise> }; export default class BrowserViewport extends Component { /** * Passed in parameters containing route or queryparameters values to be used in request * @type {IBrowserRouteParams} * @memberof BrowserViewport */ params: IBrowserRouteParams; /** * Initial value for the entity being viewed * @memberof BrowserViewport */ currentEntity: IBrowserRouteParams['entity'] = 'datasets'; /** * Ember route for the entities being rendered * @type {string} * @memberof BrowserViewport */ entityRoute = ''; /** * List of entities to be rendered in view * @type {Array} * @memberof BrowserViewport */ entities: Array = []; didUpdateAttrs() { this._super(...arguments); get(this, 'getEntitiesTask').perform(); } didInsertElement() { this._super(...arguments); get(this, 'getEntitiesTask').perform(); } /** * Async requests for the list of entities and sets the value on class * @type {TaskProperty> & {perform: (a?: {} | undefined) => TaskInstance>}} * @memberof BrowserViewport */ getEntitiesTask = task(function*(this: BrowserViewport): IterableIterator>> { const { prefix, platform, entity } = get(this, 'params'); const entities = ({ datasets: readDatasets({ platform, prefix }), metrics: Promise.resolve([]), flows: Promise.resolve([]) })[entity]; setProperties(this, { entities: yield entities, currentEntity: entity, entityRoute: `${entity}.${entity.slice(0, -1)}` }); }); }