/// /// Copyright © 2016-2019 The Thingsboard Authors /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. /// You may obtain a copy of the License at /// /// http://www.apache.org/licenses/LICENSE-2.0 /// /// Unless required by applicable law or agreed to in writing, software /// distributed under the License is distributed on an "AS IS" BASIS, /// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. /// See the License for the specific language governing permissions and /// limitations under the License. /// import { BaseData } from '@shared/models/base-data'; import { DashboardId } from '@shared/models/id/dashboard-id'; import { TenantId } from '@shared/models/id/tenant-id'; import { ShortCustomerInfo } from '@shared/models/customer.model'; import { Widget } from './widget.models'; import { Timewindow } from '@shared/models/time/time.models'; import { EntityType } from '@shared/models/entity-type.models'; import { EntityAlias, EntityAliases } from './alias.models'; export interface DashboardInfo extends BaseData { tenantId?: TenantId; title?: string; assignedCustomers?: Array; } export interface WidgetLayout { sizeX: number; sizeY: number; mobileHeight?: number; mobileOrder?: number; col: number; row: number; } export interface WidgetLayouts { [id: string]: WidgetLayout; } export interface GridSettings { backgroundColor?: string; color?: string; columns?: number; margins?: [number, number]; backgroundSizeMode?: string; [key: string]: any; // TODO: } export interface DashboardLayout { widgets: WidgetLayouts; gridSettings: GridSettings; } export declare type DashboardLayoutId = 'main' | 'right'; export interface DashboardStateLayouts { main?: DashboardLayout; right?: DashboardLayout; } export interface DashboardState { name: string; root: boolean; layouts: DashboardStateLayouts; } export declare type StateControllerId = 'entity' | 'default' | string; export interface DashboardSettings { stateControllerId?: StateControllerId; showTitle?: boolean; showDashboardsSelect?: boolean; showEntitiesSelect?: boolean; showDashboardTimewindow?: boolean; showDashboardExport?: boolean; toolbarAlwaysOpen?: boolean; titleColor?: string; } export interface DashboardConfiguration { timewindow?: Timewindow; settings?: DashboardSettings; widgets?: {[id: string]: Widget } | Widget[]; states?: {[id: string]: DashboardState }; entityAliases?: EntityAliases; [key: string]: any; // TODO: } export interface Dashboard extends DashboardInfo { configuration?: DashboardConfiguration; } export function isPublicDashboard(dashboard: DashboardInfo): boolean { if (dashboard && dashboard.assignedCustomers) { return dashboard.assignedCustomers .filter(customerInfo => customerInfo.public).length > 0; } else { return false; } } export function getDashboardAssignedCustomersText(dashboard: DashboardInfo): string { if (dashboard && dashboard.assignedCustomers && dashboard.assignedCustomers.length > 0) { return dashboard.assignedCustomers .filter(customerInfo => !customerInfo.public) .map(customerInfo => customerInfo.title) .join(', '); } else { return null; } } export function isCurrentPublicDashboardCustomer(dashboard: DashboardInfo, customerId: string): boolean { if (customerId && dashboard && dashboard.assignedCustomers) { return dashboard.assignedCustomers.filter(customerInfo => { return customerInfo.public && customerId === customerInfo.customerId.id; }).length > 0; } else { return false; } }