mirror of
https://github.com/datahub-project/datahub.git
synced 2025-09-27 01:55:17 +00:00
Merge pull request #1272 from theseyi/deprecated-old-browser-components
removes obsolete components for browse feature
This commit is contained in:
commit
14987c3726
@ -1,2 +0,0 @@
|
|||||||
import Component from '@ember/component';
|
|
||||||
export default class BrowserRail extends Component {}
|
|
@ -1,2 +0,0 @@
|
|||||||
import Component from '@ember/component';
|
|
||||||
export default class BrowserSummary extends Component {}
|
|
@ -1,17 +0,0 @@
|
|||||||
import Component from '@ember/component';
|
|
||||||
import { action } from '@ember-decorators/object';
|
|
||||||
|
|
||||||
export default class BrowserViewport extends Component {
|
|
||||||
/**
|
|
||||||
* Closure action to request more entities
|
|
||||||
*/
|
|
||||||
getNextEntities: () => void;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles the request to fetch more entities
|
|
||||||
*/
|
|
||||||
@action
|
|
||||||
loadMoreEntities() {
|
|
||||||
this.getNextEntities();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,107 +0,0 @@
|
|||||||
import Component from '@ember/component';
|
|
||||||
import { get, set } from '@ember/object';
|
|
||||||
import { alias } from '@ember/object/computed';
|
|
||||||
import { task } from 'ember-concurrency';
|
|
||||||
import { DatasetPlatform, nodeToQueryParams } from 'wherehows-web/constants';
|
|
||||||
import { IBrowserRouteParams } from 'wherehows-web/routes/browse/entity';
|
|
||||||
import { readPlatforms } from 'wherehows-web/utils/api/platforms/platform';
|
|
||||||
import { arrayMap } from 'wherehows-web/utils/array';
|
|
||||||
import { IReadDatasetsOptionBag } from 'wherehows-web/typings/api/datasets/dataset';
|
|
||||||
import { isDatasetIdentifier, sanitizePlatformNodeString } from 'wherehows-web/utils/validators/platform';
|
|
||||||
import { buildLiUrn } from 'wherehows-web/utils/validators/urn';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Describes a node with parameters used by dynamic-link component to create links to items listed in the rail
|
|
||||||
* @interface IRailNode
|
|
||||||
*/
|
|
||||||
interface IRailNode {
|
|
||||||
title: string;
|
|
||||||
text: string;
|
|
||||||
route: 'browse.entity' | 'datasets.dataset';
|
|
||||||
model: IBrowserRouteParams['entity'];
|
|
||||||
queryParams?: Partial<IReadDatasetsOptionBag>;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Given a platform and entity, returns a closure function that maps each node to a
|
|
||||||
* list of IRailNode
|
|
||||||
* @param {DatasetPlatform} platform
|
|
||||||
* @param {IBrowserRouteParams.entity} entity
|
|
||||||
* @returns {(array: string[]) => IRailNode[]}
|
|
||||||
*/
|
|
||||||
export const mapNodeToRoute = (
|
|
||||||
platform: DatasetPlatform,
|
|
||||||
entity: IBrowserRouteParams['entity']
|
|
||||||
): ((array: string[]) => IRailNode[]) =>
|
|
||||||
arrayMap((node: string): IRailNode => {
|
|
||||||
//FIXME: measure perf, and see if sanitize step can be performed conditionally for list, in a Schwartzian transform instead
|
|
||||||
const sanitizedString = sanitizePlatformNodeString(node);
|
|
||||||
const baseProps = {
|
|
||||||
title: sanitizedString,
|
|
||||||
text: sanitizedString
|
|
||||||
};
|
|
||||||
|
|
||||||
// If node is a dataset identifier, then create link to jump to dataset
|
|
||||||
if (isDatasetIdentifier(node)) {
|
|
||||||
return {
|
|
||||||
...baseProps,
|
|
||||||
route: 'datasets.dataset',
|
|
||||||
model: buildLiUrn(platform, node)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
...baseProps,
|
|
||||||
route: 'browse.entity',
|
|
||||||
model: entity,
|
|
||||||
queryParams: nodeToQueryParams({ platform, node })
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
export default class BrowserRail extends Component {
|
|
||||||
/**
|
|
||||||
* Passed in parameters containing route or query parameters values to be used in request
|
|
||||||
* @type {IBrowserRouteParams}
|
|
||||||
* @memberof BrowserRail
|
|
||||||
*/
|
|
||||||
params: IBrowserRouteParams;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Text to be displayed at the top of the rail
|
|
||||||
* @type {string}
|
|
||||||
*/
|
|
||||||
header = alias('params.platform');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Maintains a list the nodes platforms or prefixes available in the selected entity
|
|
||||||
* @type {Array<IRailNode>}
|
|
||||||
* @memberof BrowserRail
|
|
||||||
*/
|
|
||||||
nodes: Array<IRailNode> = [];
|
|
||||||
|
|
||||||
didUpdateAttrs() {
|
|
||||||
this._super(...arguments);
|
|
||||||
get(this, 'getNodesTask').perform();
|
|
||||||
}
|
|
||||||
|
|
||||||
didInsertElement() {
|
|
||||||
this._super(...arguments);
|
|
||||||
get(this, 'getNodesTask').perform();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the nodes: platforms, or prefixes for the selected entity
|
|
||||||
* @type {TaskProperty<Promise<string[]>> & {perform: (a?: {} | undefined) => TaskInstance<Promise<string[]>>}}
|
|
||||||
* @memberof BrowserRail
|
|
||||||
*/
|
|
||||||
getNodesTask = task(function*(
|
|
||||||
this: BrowserRail
|
|
||||||
): IterableIterator<Promise<Array<string>> | Promise<Array<IRailNode>>> {
|
|
||||||
const { prefix, platform, entity } = get(this, 'params');
|
|
||||||
const nodes: Array<IRailNode> = mapNodeToRoute(<DatasetPlatform>platform, entity)(
|
|
||||||
yield readPlatforms({ platform, prefix })
|
|
||||||
);
|
|
||||||
|
|
||||||
set(this, 'nodes', nodes);
|
|
||||||
}).restartable();
|
|
||||||
}
|
|
@ -1,88 +0,0 @@
|
|||||||
import Component from '@ember/component';
|
|
||||||
import { get, setProperties } from '@ember/object';
|
|
||||||
import { task, TaskInstance } from 'ember-concurrency';
|
|
||||||
import { IBrowserRouteParams } from 'wherehows-web/routes/browse/entity';
|
|
||||||
import { readDatasetsCount } from 'wherehows-web/utils/api/datasets/dataset';
|
|
||||||
|
|
||||||
// Describes the index signature for the metadata object used in the browser summary component
|
|
||||||
type IBrowserMetadata = {
|
|
||||||
[K in IBrowserRouteParams['entity']]: {
|
|
||||||
count: number;
|
|
||||||
currentPlatform: string;
|
|
||||||
currentPrefix: string;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Describes the index signature for the strategy pattern in the getCountsTask
|
|
||||||
type ICountTaskStrategy = { [K in IBrowserRouteParams['entity']]: TaskInstance<Promise<number>> };
|
|
||||||
|
|
||||||
export default class BrowserSummary extends Component {
|
|
||||||
/**
|
|
||||||
* Passed in parameters containing route or query parameters values to be used in request
|
|
||||||
* @type {IBrowserRouteParams}
|
|
||||||
* @memberof BrowserSummary
|
|
||||||
*/
|
|
||||||
params: IBrowserRouteParams;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Lists the types of entities supported
|
|
||||||
* @type {ReadonlyArray<string>}
|
|
||||||
* @memberof BrowserSummary
|
|
||||||
*/
|
|
||||||
entities: ReadonlyArray<IBrowserRouteParams['entity']> = ['datasets', 'metrics', 'flows'];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contains the properties for each entity to displayed UI metadata
|
|
||||||
* @type {IBrowserMetadata}
|
|
||||||
* @memberof BrowserSummary
|
|
||||||
*/
|
|
||||||
metadata: IBrowserMetadata = this.entities.reduce(
|
|
||||||
(metadata, entity) => ({
|
|
||||||
...metadata,
|
|
||||||
[entity]: { count: 0, currentPlatform: '', currentPrefix: '' }
|
|
||||||
}),
|
|
||||||
<IBrowserMetadata>{}
|
|
||||||
);
|
|
||||||
|
|
||||||
didUpdateAttrs() {
|
|
||||||
this._super(...arguments);
|
|
||||||
get(this, 'getCountsTask').perform();
|
|
||||||
}
|
|
||||||
|
|
||||||
didInsertElement() {
|
|
||||||
this._super(...arguments);
|
|
||||||
get(this, 'getCountsTask').perform();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parent task to retrieve counts for each IBrowserParams entity type as needed
|
|
||||||
* @type {TaskProperty<TaskInstance<Promise<number>>> & {perform: (a?: {} | undefined) => TaskInstance<TaskInstance<Promise<number>>>}}
|
|
||||||
* @memberof BrowserSummary
|
|
||||||
*/
|
|
||||||
getCountsTask = task(function*(this: BrowserSummary): IterableIterator<TaskInstance<Promise<number>>> {
|
|
||||||
const { prefix, platform, entity } = get(this, 'params');
|
|
||||||
|
|
||||||
return (<ICountTaskStrategy>{
|
|
||||||
datasets: yield get(this, 'getDatasetsCountTask').perform(platform, prefix)
|
|
||||||
})[entity];
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets and sets the dataset count
|
|
||||||
* @type {TaskProperty<Promise<number>> & {perform: (a1: string, a2: string) => TaskInstance<Promise<number>>}}
|
|
||||||
* @memberof BrowserSummary
|
|
||||||
*/
|
|
||||||
getDatasetsCountTask = task(function*(
|
|
||||||
this: BrowserSummary,
|
|
||||||
platform: string,
|
|
||||||
prefix: string
|
|
||||||
): IterableIterator<Promise<number>> {
|
|
||||||
const entityMetadata = get(get(this, 'metadata'), 'datasets');
|
|
||||||
|
|
||||||
setProperties(entityMetadata, {
|
|
||||||
count: yield readDatasetsCount({ prefix, platform }),
|
|
||||||
currentPlatform: platform,
|
|
||||||
currentPrefix: prefix
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
@ -1,157 +0,0 @@
|
|||||||
import Component from '@ember/component';
|
|
||||||
import { get, setProperties, computed, getProperties } from '@ember/object';
|
|
||||||
import { task, TaskInstance } from 'ember-concurrency';
|
|
||||||
import { IBrowserRouteParams } from 'wherehows-web/routes/browse/entity';
|
|
||||||
import { IDatasetsGetResponse, IDatasetView } from 'wherehows-web/typings/api/datasets/dataset';
|
|
||||||
import { readDatasets } from 'wherehows-web/utils/api/datasets/dataset';
|
|
||||||
import { action } from '@ember-decorators/object';
|
|
||||||
import ComputedProperty from '@ember/object/computed';
|
|
||||||
|
|
||||||
// Describes the index signature for strategy pattern in the getEntityDataTask
|
|
||||||
type IGetEntityTaskStrategy = { [K in IBrowserRouteParams['entity']]: TaskInstance<Promise<IDatasetsGetResponse>> };
|
|
||||||
|
|
||||||
// Describes the operations that can be performed on an entity list
|
|
||||||
type listOp = 'push' | 'set';
|
|
||||||
|
|
||||||
export default class BrowserViewport extends Component {
|
|
||||||
/**
|
|
||||||
* Passed in parameters containing route or query parameters 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<IDatasetView>}
|
|
||||||
* @memberof BrowserViewport
|
|
||||||
*/
|
|
||||||
entities: Array<IDatasetView> = [];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The total number of entities in the segment
|
|
||||||
* @type {number}
|
|
||||||
*/
|
|
||||||
total: number = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of entities to request at a time
|
|
||||||
* @type {number}
|
|
||||||
*/
|
|
||||||
count: number = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The position index in the list to begin requesting data from
|
|
||||||
* @type {number}
|
|
||||||
*/
|
|
||||||
start: number = 0;
|
|
||||||
|
|
||||||
didUpdateAttrs() {
|
|
||||||
this._super(...arguments);
|
|
||||||
get(this, 'getEntityDataTask').perform();
|
|
||||||
}
|
|
||||||
|
|
||||||
didInsertElement() {
|
|
||||||
this._super(...arguments);
|
|
||||||
get(this, 'getEntityDataTask').perform();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Async request a list of datasets with a variable start point
|
|
||||||
* @type {TaskProperty<Promise<IDatasetsGetResponse>> & {perform: (a1: "push" | "set" | undefined, a2: number) => TaskInstance<Promise<IDatasetsGetResponse>>}}
|
|
||||||
* @memberof BrowserViewport
|
|
||||||
*/
|
|
||||||
getDatasetsTask = task(function*(
|
|
||||||
this: BrowserViewport,
|
|
||||||
op: listOp = 'set',
|
|
||||||
start: number
|
|
||||||
): IterableIterator<Promise<IDatasetsGetResponse>> {
|
|
||||||
const { prefix, platform, entity } = get(this, 'params');
|
|
||||||
const response: IDatasetsGetResponse = yield readDatasets({ platform, prefix, start });
|
|
||||||
const { total, count, elements } = response;
|
|
||||||
const entities = get(this, 'entities');
|
|
||||||
// If new segment / data-source, replace all items rather than append
|
|
||||||
const listOp = op === 'set' ? [].setObjects : [].pushObjects;
|
|
||||||
|
|
||||||
listOp.call(entities, elements);
|
|
||||||
|
|
||||||
setProperties(this, {
|
|
||||||
total,
|
|
||||||
count,
|
|
||||||
currentEntity: entity,
|
|
||||||
entityRoute: `${entity}.${entity.slice(0, -1)}`,
|
|
||||||
start: entities.length
|
|
||||||
});
|
|
||||||
|
|
||||||
return response;
|
|
||||||
}).restartable();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Async requests for the list of entities and sets the value on class
|
|
||||||
* @type {TaskProperty<Promise<IDatasetsGetResponse>> & {perform: (a?: number) => TaskInstance<Promise<IDatasetsGetResponse>>}}
|
|
||||||
* @memberof BrowserViewport
|
|
||||||
*/
|
|
||||||
getEntityDataTask = task(function*(
|
|
||||||
this: BrowserViewport,
|
|
||||||
offset: number = 0
|
|
||||||
): IterableIterator<TaskInstance<Promise<IDatasetsGetResponse>>> {
|
|
||||||
const { entity } = get(this, 'params');
|
|
||||||
|
|
||||||
yield (<IGetEntityTaskStrategy>{
|
|
||||||
datasets: get(this, 'getDatasetsTask').perform('set', offset)
|
|
||||||
})[entity];
|
|
||||||
}).restartable();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The max possible entities that can currently be requested up to this.count
|
|
||||||
* @type {ComputedProperty<number>}
|
|
||||||
* @memberof BrowserViewport
|
|
||||||
*/
|
|
||||||
nextCountSize: ComputedProperty<number> = computed('entities.length', function(this: BrowserViewport): number {
|
|
||||||
const {
|
|
||||||
entities: { length },
|
|
||||||
total,
|
|
||||||
count
|
|
||||||
} = getProperties(this, ['entities', 'total', 'count']);
|
|
||||||
return Math.min(count, total - length);
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The total number of items left that can be fetched
|
|
||||||
* @type {ComputedProperty<number>}
|
|
||||||
* @memberof BrowserViewport
|
|
||||||
*/
|
|
||||||
remainingEntityCount: ComputedProperty<number> = computed('entities.length', function(this: BrowserViewport): number {
|
|
||||||
const {
|
|
||||||
entities: { length },
|
|
||||||
total
|
|
||||||
} = getProperties(this, ['entities', 'total']);
|
|
||||||
return total >= length ? total - length : 0;
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Requests the next number of entities for the segment or data source
|
|
||||||
*/
|
|
||||||
@action
|
|
||||||
getNextEntities(this: BrowserViewport) {
|
|
||||||
const { remainingEntityCount, start } = getProperties(this, ['remainingEntityCount', 'start']);
|
|
||||||
|
|
||||||
// Invoke task only if there are more entities that may be available
|
|
||||||
if (remainingEntityCount) {
|
|
||||||
get(this, 'getDatasetsTask').perform('push', start);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
{{#search/filter-rail header=header as |rail|}}
|
|
||||||
|
|
||||||
{{#if nodesTask.isRunning}}
|
|
||||||
<div class="nacho-filter-rail__loading">
|
|
||||||
{{pendulum-ellipsis-animation}}
|
|
||||||
</div>
|
|
||||||
{{else}}
|
|
||||||
|
|
||||||
{{rail.links
|
|
||||||
links=nodes}}
|
|
||||||
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{/search/filter-rail}}
|
|
||||||
|
|
||||||
{{yield}}
|
|
@ -1,35 +0,0 @@
|
|||||||
<nav role="navigation">
|
|
||||||
<ul class="nav navbar-nav browse-nav">
|
|
||||||
{{#each-in metadata as |entity meta|}}
|
|
||||||
{{#nav-link
|
|
||||||
"browse.entity" entity
|
|
||||||
(query-params page=1 platform="" prefix="")
|
|
||||||
tagName="li"
|
|
||||||
class="col-md-4 browse-nav__entity"}}
|
|
||||||
|
|
||||||
{{#if (and datasetTask.isRunning (eq entity "datasets"))}}
|
|
||||||
{{pendulum-ellipsis-animation}}
|
|
||||||
{{else}}
|
|
||||||
|
|
||||||
<span class="browse-nav__alt">
|
|
||||||
See all
|
|
||||||
</span>
|
|
||||||
<div class="browse-nav__item">
|
|
||||||
<p class="browse-nav__count">{{meta.count}}</p>
|
|
||||||
|
|
||||||
<p class="browse-nav__title">{{entity}}</p>
|
|
||||||
|
|
||||||
<p class="browse-nav__subtext">
|
|
||||||
{{if meta.currentPlatform 'in' 'in total'}} <strong>{{meta.currentPlatform}} </strong>
|
|
||||||
|
|
||||||
{{#if meta.currentPrefix}}
|
|
||||||
with prefix <strong>{{meta.currentPrefix}}</strong>
|
|
||||||
{{/if}}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{/if}}
|
|
||||||
{{/nav-link}}
|
|
||||||
{{/each-in}}
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
@ -1,125 +0,0 @@
|
|||||||
{{#if (eq currentEntity 'flows')}}
|
|
||||||
{{#dataset-table
|
|
||||||
fields=entities as |table|}}
|
|
||||||
{{#table.head as |head|}}
|
|
||||||
{{#head.column}}
|
|
||||||
Flow Group
|
|
||||||
{{/head.column}}
|
|
||||||
|
|
||||||
{{#head.column}}
|
|
||||||
Flow Name
|
|
||||||
{{/head.column}}
|
|
||||||
|
|
||||||
{{#head.column}}
|
|
||||||
Flow Level
|
|
||||||
{{/head.column}}
|
|
||||||
|
|
||||||
{{#head.column}}
|
|
||||||
Job Count
|
|
||||||
{{/head.column}}
|
|
||||||
|
|
||||||
{{#head.column}}
|
|
||||||
Creation Time
|
|
||||||
{{/head.column}}
|
|
||||||
|
|
||||||
{{#head.column}}
|
|
||||||
Modified Time
|
|
||||||
{{/head.column}}
|
|
||||||
{{/table.head}}
|
|
||||||
|
|
||||||
{{#table.body as |body|}}
|
|
||||||
{{#each
|
|
||||||
table.data as |flow|}}
|
|
||||||
{{#body.row as |row|}}
|
|
||||||
{{#row.cell}}
|
|
||||||
{{flow.group}}
|
|
||||||
{{/row.cell}}
|
|
||||||
|
|
||||||
{{#row.cell}}
|
|
||||||
{{#link-to entityRoute flow.id (query-params name=flow.appCode)}}
|
|
||||||
{{flow.name}}
|
|
||||||
{{/link-to}}
|
|
||||||
{{/row.cell}}
|
|
||||||
|
|
||||||
{{#row.cell}}
|
|
||||||
{{flow.level}}
|
|
||||||
{{/row.cell}}
|
|
||||||
|
|
||||||
{{#row.cell}}
|
|
||||||
{{flow.jobCount}}
|
|
||||||
{{/row.cell}}
|
|
||||||
|
|
||||||
{{#row.cell}}
|
|
||||||
{{moment-calendar flow.created sameElse="MMM Do YYYY, h:mm a"}}
|
|
||||||
{{/row.cell}}
|
|
||||||
|
|
||||||
{{#row.cell}}
|
|
||||||
{{moment-calendar flow.modified sameElse="MMM Do YYYY, h:mm a"}}
|
|
||||||
{{/row.cell}}
|
|
||||||
{{/body.row}}
|
|
||||||
{{/each}}
|
|
||||||
{{/table.body}}
|
|
||||||
{{/dataset-table}}
|
|
||||||
{{else}}
|
|
||||||
|
|
||||||
{{#infinite-scroller
|
|
||||||
use-document=true
|
|
||||||
class="browse-entities"
|
|
||||||
on-load-more=(action 'loadMoreEntities') as |scroller|
|
|
||||||
}}
|
|
||||||
|
|
||||||
{{#each entities as |entity|}}
|
|
||||||
|
|
||||||
<div class="browse-entities__entity">
|
|
||||||
{{#link-to entityRoute 'urn' (query-params urn=entity.uri)}}
|
|
||||||
<span class="browse-entities__title">
|
|
||||||
{{entity.nativeName}}
|
|
||||||
</span>
|
|
||||||
{{/link-to}}
|
|
||||||
|
|
||||||
<div>
|
|
||||||
{{#if entity.createdTime}}
|
|
||||||
<span class="browse-entities__entity__meta-head">
|
|
||||||
<strong>Created:</strong>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<span title="{{entity.createdTime}}">
|
|
||||||
{{moment-from-now entity.createdTime}}
|
|
||||||
</span>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{#if entity.modifiedTime}}
|
|
||||||
<span class="browse-entities__entity__meta-head">
|
|
||||||
<strong>Modified:</strong>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<span title="{{entity.modifiedTime}}">
|
|
||||||
{{moment-from-now entity.modifiedTime}}
|
|
||||||
</span>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{#if entity.removed}}
|
|
||||||
<span class="browse-entities__entity__meta-head">
|
|
||||||
<span class="removed-dataset removed-dataset--small">REMOVED</span>
|
|
||||||
</span>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{#if entity.deprecated}}
|
|
||||||
<span class="browse-entities__entity__meta-head">
|
|
||||||
<span class="deprecated-dataset deprecated-dataset--small">DEPRECATED</span>
|
|
||||||
</span>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{else}}
|
|
||||||
|
|
||||||
{{empty-state
|
|
||||||
heading="No entities found"
|
|
||||||
subHead="Could not find any datasets in our records"
|
|
||||||
}}
|
|
||||||
|
|
||||||
{{/each}}
|
|
||||||
|
|
||||||
{{/infinite-scroller}}
|
|
||||||
{{/if}}
|
|
@ -1 +0,0 @@
|
|||||||
{{browser/browser-rail nodes=nodes nodesTask=getNodesTask header=header}}
|
|
@ -1 +0,0 @@
|
|||||||
{{browser/browser-summary metadata=metadata datasetTask=getDatasetsCountTask}}
|
|
@ -1,40 +0,0 @@
|
|||||||
{{#if getEntityDataTask.isRunning}}
|
|
||||||
|
|
||||||
<div class="browse-viewport__loading">
|
|
||||||
{{pendulum-ellipsis-animation}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{else}}
|
|
||||||
{{#if getEntityDataTask.last.isError}}
|
|
||||||
|
|
||||||
{{empty-state
|
|
||||||
heading="An error occurred getting entities"
|
|
||||||
subHead=getEntityDataTask.last.error
|
|
||||||
}}
|
|
||||||
|
|
||||||
{{else}}
|
|
||||||
{{browser/browser-viewport
|
|
||||||
currentEntity=currentEntity
|
|
||||||
entities=entities
|
|
||||||
entityRoute=entityRoute
|
|
||||||
getNextEntities=(action 'getNextEntities')
|
|
||||||
}}
|
|
||||||
|
|
||||||
{{#if remainingEntityCount}}
|
|
||||||
{{#if getDatasetsTask.isRunning}}
|
|
||||||
|
|
||||||
<div class="scroll-list-loading">
|
|
||||||
<p class="scroll-list-loading__text">Loading {{nextCountSize}} more of {{total}}</p>
|
|
||||||
{{pendulum-ellipsis-animation}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{else}}
|
|
||||||
|
|
||||||
<div class="scroll-list-loading">
|
|
||||||
<p class="scroll-list-loading__text">Showing {{entities.length}} datasets of {{total}}</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{/if}}
|
|
||||||
{{/if}}
|
|
||||||
{{/if}}
|
|
||||||
{{/if}}
|
|
Loading…
x
Reference in New Issue
Block a user