/* * Copyright © 2016-2018 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 angularStorage from 'angular-storage'; export default angular.module('thingsboard.itembuffer', [angularStorage]) .factory('itembuffer', ItemBuffer) .factory('bufferStore', function(store) { var newStore = store.getNamespacedStore('tbBufferStore', null, null, false); return newStore; }) .name; /*@ngInject*/ function ItemBuffer($q, bufferStore, types, utils, dashboardUtils, ruleChainService) { const WIDGET_ITEM = "widget_item"; const WIDGET_REFERENCE = "widget_reference"; const RULE_NODES = "rule_nodes"; var service = { prepareWidgetItem: prepareWidgetItem, copyWidget: copyWidget, copyWidgetReference: copyWidgetReference, hasWidget: hasWidget, canPasteWidgetReference: canPasteWidgetReference, pasteWidget: pasteWidget, pasteWidgetReference: pasteWidgetReference, addWidgetToDashboard: addWidgetToDashboard, copyRuleNodes: copyRuleNodes, hasRuleNodes: hasRuleNodes, pasteRuleNodes: pasteRuleNodes } return service; /** aliasesInfo { datasourceAliases: { datasourceIndex: { alias: "...", filter: "..." } } targetDeviceAliases: { targetDeviceAliasIndex: { alias: "...", filter: "..." } } .... } **/ function prepareAliasInfo(entityAlias) { return { alias: entityAlias.alias, filter: entityAlias.filter }; } function getOriginalColumns(dashboard, sourceState, sourceLayout) { var originalColumns = 24; var gridSettings = null; var state = dashboard.configuration.states[sourceState]; var layoutCount = Object.keys(state.layouts).length; if (state) { var layout = state.layouts[sourceLayout]; if (layout) { gridSettings = layout.gridSettings; } } if (gridSettings && gridSettings.columns) { originalColumns = gridSettings.columns; } originalColumns = originalColumns * layoutCount; return originalColumns; } function getOriginalSize(dashboard, sourceState, sourceLayout, widget) { var layout = dashboard.configuration.states[sourceState].layouts[sourceLayout]; var widgetLayout = layout.widgets[widget.id]; return { sizeX: widgetLayout.sizeX, sizeY: widgetLayout.sizeY } } function prepareWidgetItem(dashboard, sourceState, sourceLayout, widget) { var aliasesInfo = { datasourceAliases: {}, targetDeviceAliases: {} }; var originalColumns = getOriginalColumns(dashboard, sourceState, sourceLayout); var originalSize = getOriginalSize(dashboard, sourceState, sourceLayout, widget); if (widget.config && dashboard.configuration && dashboard.configuration.entityAliases) { var entityAlias; if (widget.config.datasources) { for (var i=0;i