define([
'angular', 'lodash'
], function (angular, _) {
'use strict'; var module = angular.module('kibana.services'); module.service('panelMove', function(dashboard, $rootScope) { /* each of these can take event,ui,data parameters */ this.onStart = function() { dashboard.panelDragging = true; $rootScope.$apply(); }; this.onOver = function() { $rootScope.$apply(); }; this.onOut = function() { $rootScope.$apply(); }; /* Use our own drop logic. the $parent.$parent this is ugly. */ this.onDrop = function(event,ui,data) { var dragRow = data.draggableScope.$parent.$parent.row.panels, dropRow = data.droppableScope.$parent.$parent.row.panels, dragIndex = data.dragSettings.index, dropIndex = data.dropSettings.index; // Remove panel from source row if the model we were passed is not a panel if(!data.dragSettings.embedded) { dragRow.splice(dragIndex,1); } // Add to destination row if(!_.isUndefined(dropRow)) { dropRow.splice(dropIndex,0,angular.fromJson(angular.toJson(data.dragItem))); } dashboard.panelDragging = false; // Cleanup nulls/undefined left behind cleanup(); $rootScope.$apply(); $rootScope.$broadcast('render'); }; this.onStop = function() { dashboard.panelDragging = false; cleanup(); $rootScope.$apply(); }; var cleanup = function () { _.each(dashboard.current.rows, function(row) { row.panels = _.without(row.panels,{}); row.panels = _.compact(row.panels); }); }; });
});