summaryrefslogtreecommitdiffstats
path: root/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js
diff options
context:
space:
mode:
Diffstat (limited to 'ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js')
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js151
1 files changed, 151 insertions, 0 deletions
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js
new file mode 100644
index 00000000..bbf107a8
--- /dev/null
+++ b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
+ *
+ * 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.
+ */
+
+'use strict';
+
+angular.module('ui.dashboard')
+ .directive('dashboardLayouts', ['LayoutStorage', '$timeout', '$uibModal',
+ function(LayoutStorage, $timeout, $uibModal) {
+ return {
+ scope: true,
+ templateUrl: function(element, attr) {
+ return attr.templateUrl ? attr.templateUrl : 'app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.html';
+ },
+ link: function(scope, element, attrs) {
+
+ scope.options = scope.$eval(attrs.dashboardLayouts);
+
+ var layoutStorage = new LayoutStorage(scope.options);
+
+ scope.layouts = layoutStorage.layouts;
+
+ scope.createNewLayout = function() {
+ var newLayout = {
+ title: 'Custom',
+ defaultWidgets: scope.options.defaultWidgets || []
+ };
+ layoutStorage.add(newLayout);
+ scope.makeLayoutActive(newLayout);
+ layoutStorage.save();
+ return newLayout;
+ };
+
+ scope.removeLayout = function(layout) {
+ layoutStorage.remove(layout);
+ layoutStorage.save();
+ };
+
+ scope.makeLayoutActive = function(layout) {
+
+ var current = layoutStorage.getActiveLayout();
+
+ if (current && current.dashboard.unsavedChangeCount) {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'template/SaveChangesModal.html',
+ resolve: {
+ layout: function() {
+ return layout;
+ }
+ },
+ controller: 'SaveChangesModalCtrl'
+ });
+
+ // Set resolve and reject callbacks for the result promise
+ modalInstance.result.then(
+ function() {
+ current.dashboard.saveDashboard();
+ scope._makeLayoutActive(layout);
+ },
+ function() {
+ scope._makeLayoutActive(layout);
+ }
+ );
+ } else {
+ scope._makeLayoutActive(layout);
+ }
+
+ };
+
+ scope._makeLayoutActive = function(layout) {
+ angular.forEach(scope.layouts, function(l) {
+ if (l !== layout) {
+ l.active = false;
+ } else {
+ l.active = true;
+ }
+ });
+ layoutStorage.save();
+ };
+
+ scope.isActive = function(layout) {
+ return !!layout.active;
+ };
+
+ scope.editTitle = function(layout) {
+ if (layout.locked) {
+ return;
+ }
+
+ var input = element.find('input[data-layout="' + layout.id + '"]');
+ layout.editingTitle = true;
+
+ $timeout(function() {
+ input.focus()[0].setSelectionRange(0, 9999);
+ });
+ };
+
+ // saves whatever is in the title input as the new title
+ scope.saveTitleEdit = function(layout) {
+ layout.editingTitle = false;
+ layoutStorage.save();
+ };
+
+ scope.options.saveLayouts = function() {
+ layoutStorage.save(true);
+ };
+ scope.options.addWidget = function() {
+ var layout = layoutStorage.getActiveLayout();
+ if (layout) {
+ layout.dashboard.addWidget.apply(layout.dashboard, arguments);
+ }
+ };
+ scope.options.loadWidgets = function() {
+ var layout = layoutStorage.getActiveLayout();
+ if (layout) {
+ layout.dashboard.loadWidgets.apply(layout.dashboard, arguments);
+ }
+ };
+ scope.options.saveDashboard = function() {
+ console.log("================= saveDashboard called =================")
+ var layout = layoutStorage.getActiveLayout();
+ console.log("===================== layout ===========================");
+ console.log(layout);
+ if (layout) {
+ layout.dashboard.saveDashboard.apply(layout.dashboard, arguments);
+ }
+ };
+
+ var sortableDefaults = {
+ stop: function() {
+ scope.options.saveLayouts();
+ },
+ distance: 5
+ };
+ scope.sortableOptions = angular.extend({}, sortableDefaults, scope.options.sortableOptions || {});
+ }
+ };
+ }
+ ]); \ No newline at end of file