/// /// 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 { Observable } from 'rxjs'; import { EntityId } from '@app/shared/models/id/entity-id'; import { WidgetActionDescriptor, widgetType } from '@shared/models/widget.models'; import { TimeService } from '../services/time.service'; import { DeviceService } from '../http/device.service'; import { AlarmService } from '../http/alarm.service'; import { UtilsService } from '@core/services/utils.service'; export interface TimewindowFunctions { onUpdateTimewindow: (startTimeMs: number, endTimeMs: number, interval: number) => void; onResetTimewindow: () => void; } export interface WidgetSubscriptionApi { createSubscription: (options: WidgetSubscriptionOptions, subscribe: boolean) => Observable; createSubscriptionFromInfo: (type: widgetType, subscriptionsInfo: Array, options: WidgetSubscriptionOptions, useDefaultComponents: boolean, subscribe: boolean) => Observable; removeSubscription: (id: string) => void; } export interface RpcApi { sendOneWayCommand: (method: string, params?: any, timeout?: number) => Observable; sendTwoWayCommand: (method: string, params?: any, timeout?: number) => Observable; } export interface IWidgetUtils { formatValue: (value: any, dec?: number, units?: string, showZeroDecimals?: boolean) => string | undefined; } export interface WidgetActionsApi { actionDescriptorsBySourceId: {[sourceId: string]: Array}; getActionDescriptors: (actionSourceId: string) => Array; handleWidgetAction: ($event: Event, descriptor: WidgetActionDescriptor, entityId?: EntityId, entityName?: string, additionalParams?: any) => void; elementClick: ($event: Event) => void; } export interface IAliasController { [key: string]: any | null; // TODO: } export interface StateObject { id?: string; params?: StateParams; } export interface StateParams { entityName?: string; targetEntityParamName?: string; entityId?: EntityId; [key: string]: any | null; } export interface IStateController { getStateParams: () => StateParams; openState: (id: string, params?: StateParams, openRightLayout?: boolean) => void; updateState: (id?: string, params?: StateParams, openRightLayout?: boolean) => void; // TODO: } export interface EntityInfo { entityId: EntityId; entityName: string; } export interface SubscriptionInfo { [key: string]: any; // TODO: } export interface WidgetSubscriptionContext { timeService: TimeService; deviceService: DeviceService; alarmService: AlarmService; utils: UtilsService; widgetUtils: IWidgetUtils; dashboardTimewindowApi: TimewindowFunctions; getServerTimeDiff: Observable; aliasController: IAliasController; [key: string]: any; // TODO: } export interface WidgetSubscriptionOptions { [key: string]: any; // TODO: } export interface IWidgetSubscription { onUpdateTimewindow: (startTimeMs: number, endTimeMs: number, interval: number) => void; onResetTimewindow: () => void; sendOneWayCommand: (method: string, params?: any, timeout?: number) => Observable; sendTwoWayCommand: (method: string, params?: any, timeout?: number) => Observable; clearRpcError: () => void; getFirstEntityInfo: () => EntityInfo; destroy(): void; [key: string]: any; // TODO: }