UNPKG

virool-pivot

Version:

A web-based exploratory visualization UI for Druid.io

119 lines (101 loc) 3.23 kB
import { List } from 'immutable'; import { Class, Instance, isInstanceOf } from 'immutable-class'; import { $, Expression } from 'plywood'; import { verifyUrlSafeName, makeTitle } from '../../utils/general/general'; import { DataSource, DataSourceJS } from '../data-source/data-source'; import { Essence, EssenceJS } from '../essence/essence'; import { Manifest } from '../manifest/manifest'; export interface LinkItemValue { name: string; title: string; description: string; group: string; dataSource: DataSource; essence: Essence; } export interface LinkItemJS { name: string; title?: string; description?: string; group: string; dataSource: string; essence: EssenceJS; } export interface LinkItemContext { dataSources: List<DataSource>; visualizations: List<Manifest>; } var check: Class<LinkItemValue, LinkItemJS>; export class LinkItem implements Instance<LinkItemValue, LinkItemJS> { static isLinkItem(candidate: any): candidate is LinkItem { return isInstanceOf(candidate, LinkItem); } static fromJS(parameters: LinkItemJS, context?: LinkItemContext): LinkItem { if (!context) throw new Error('must have context'); const { dataSources, visualizations } = context; var dataSourceName = parameters.dataSource; var dataSource = dataSources.find(d => d.name === dataSourceName); if (!dataSource) throw new Error(`can not find dataSource '${dataSourceName}'`); var essence = Essence.fromJS(parameters.essence, { dataSource, visualizations }).updateSplitsWithFilter(); return new LinkItem({ name: parameters.name, title: parameters.title, description: parameters.description, group: parameters.group, dataSource, essence }); } public name: string; public title: string; public description: string; public group: string; public dataSource: DataSource; public essence: Essence; constructor(parameters: LinkItemValue) { var name = parameters.name; verifyUrlSafeName(name); this.name = name; this.title = parameters.title || makeTitle(name); this.description = parameters.description || ''; this.group = parameters.group; this.dataSource = parameters.dataSource; this.essence = parameters.essence; } public valueOf(): LinkItemValue { return { name: this.name, title: this.title, description: this.description, group: this.group, dataSource: this.dataSource, essence: this.essence }; } public toJS(): LinkItemJS { return { name: this.name, title: this.title, description: this.description, group: this.group, dataSource: this.dataSource.name, essence: this.essence.toJS() }; } public toJSON(): LinkItemJS { return this.toJS(); } public toString(): string { return `[LinkItem: ${this.name}]`; } public equals(other: LinkItem): boolean { return LinkItem.isLinkItem(other) && this.name === other.name && this.title === other.title && this.description === other.description && this.group === other.group && this.dataSource.equals(other.dataSource) && this.essence.equals(other.essence); } } check = LinkItem;