Skip to content

Commit c2824d5

Browse files
Portugal, Marcelomportuga
Portugal, Marcelo
authored andcommitted
fix(tree-base.js): Stop event propagation on click of the row header.
fix #4241
1 parent 8ff9e40 commit c2824d5

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

src/features/tree-base/js/tree-base.js

+1
Original file line numberDiff line numberDiff line change
@@ -1580,6 +1580,7 @@
15801580
link: function($scope, $elm, $attrs, uiGridCtrl) {
15811581
var self = uiGridCtrl.grid;
15821582
$scope.treeButtonClick = function(row, evt) {
1583+
evt.stopPropagation();
15831584
uiGridTreeBaseService.toggleRowTreeState(self, row, evt);
15841585
};
15851586
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
describe('ui.grid.treeBase uiGridTreeBaseRowHeaderButtons', function () {
2+
var $compile, $templateCache, $rootScope, $scope, uiGridTreeBaseService,
3+
uiGridTreeBaseRowHeaderButtons;
4+
5+
function compileTreeBaseRowHeaderButton(elem) {
6+
uiGridTreeBaseRowHeaderButtons = angular.element(elem);
7+
$compile(uiGridTreeBaseRowHeaderButtons)($scope);
8+
$scope.$apply();
9+
}
10+
11+
beforeEach(function() {
12+
module('ui.grid');
13+
module('ui.grid.treeBase');
14+
module('ui.grid.treeView');
15+
16+
inject(function(_$compile_, _$rootScope_, _$templateCache_, _uiGridTreeBaseService_) {
17+
$compile = _$compile_;
18+
$rootScope = _$rootScope_;
19+
$templateCache = _$templateCache_;
20+
uiGridTreeBaseService = _uiGridTreeBaseService_;
21+
});
22+
23+
$scope = $rootScope.$new();
24+
$scope.gridOptions = {
25+
showHeader: false,
26+
data: [
27+
{name: 'Dynamic 1', gender: 'female', age: 53, company: 'Griddable grids', balance: 38000, $$treeLevel: 0}
28+
]
29+
};
30+
31+
compileTreeBaseRowHeaderButton('<div ui-grid="gridOptions" ui-grid-tree-view></div>');
32+
});
33+
afterEach(function() {
34+
uiGridTreeBaseRowHeaderButtons = null;
35+
});
36+
it('should compile the menu item', function() {
37+
expect(uiGridTreeBaseRowHeaderButtons.find('.ui-grid-tree-base-row-header-buttons').length).toBe(1);
38+
});
39+
describe('on tree button click', function() {
40+
var event;
41+
42+
beforeEach(function() {
43+
event = $.Event('click');
44+
45+
spyOn(event, 'stopPropagation').and.callThrough();
46+
spyOn(uiGridTreeBaseService, 'toggleRowTreeState').and.callFake(angular.noop);
47+
48+
uiGridTreeBaseRowHeaderButtons.find('.ui-grid-tree-base-row-header-buttons').trigger(event);
49+
});
50+
afterEach(function() {
51+
event.stopPropagation.calls.reset();
52+
uiGridTreeBaseService.toggleRowTreeState.calls.reset();
53+
});
54+
it('should stop event propagation', function() {
55+
expect(event.stopPropagation).toHaveBeenCalled();
56+
});
57+
it('should toggle the row tree state', function() {
58+
expect(uiGridTreeBaseService.toggleRowTreeState).toHaveBeenCalled();
59+
});
60+
});
61+
});

0 commit comments

Comments
 (0)