Skip to content

Commit 89c43ef

Browse files
Portugal, Marcelomportuga
Portugal, Marcelo
authored andcommitted
fix(GridColumn): Respect minimumColumnSize when a valid minWidth is not present
GridOptions.minimumColumnSize is now used as the default minWidth for all colmumns when it is provided and it is valid. However, minWidth will still take precedence over minimumColumnSize if provided. fix #3941
1 parent dfd336a commit 89c43ef

File tree

4 files changed

+38
-12
lines changed

4 files changed

+38
-12
lines changed

src/js/core/factories/GridColumn.js

+15-5
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,8 @@ angular.module('ui.grid')
262262
* @ngdoc property
263263
* @name minWidth
264264
* @propertyOf ui.grid.class:GridOptions.columnDef
265-
* @description sets the minimum column width. Should be a number.
265+
* @description Sets the minimum column width. Should be a number.
266+
* Defaults to gridOptions.minimumColumnSize if minWidth is not provided.
266267
* @example
267268
* <pre> $scope.gridOptions.columnDefs = [ { field: 'field1', minWidth: 100}]; </pre>
268269
*
@@ -502,12 +503,21 @@ angular.module('ui.grid')
502503
}
503504
}
504505

506+
function isValidWidthValue(value) {
507+
return angular.isString(value) || angular.isNumber(value);
508+
}
509+
505510
['minWidth', 'maxWidth'].forEach(function (name) {
506511
var minOrMaxWidth = colDef[name];
507512
var parseErrorMsg = "Cannot parse column " + name + " '" + minOrMaxWidth + "' for column named '" + colDef.name + "'";
508513

509-
if (!angular.isString(minOrMaxWidth) && !angular.isNumber(minOrMaxWidth)) {
510-
//Sets default minWidth and maxWidth values
514+
// default minWidth to the minimumColumnSize
515+
if (name === 'minWidth' && !isValidWidthValue(minOrMaxWidth) && angular.isDefined(self.grid.options.minimumColumnSize)) {
516+
minOrMaxWidth = self.grid.options.minimumColumnSize;
517+
}
518+
519+
if (!isValidWidthValue(minOrMaxWidth)) {
520+
// Sets default minWidth and maxWidth values
511521
self[name] = ((name === 'minWidth') ? 30 : 9000);
512522
} else if (angular.isString(minOrMaxWidth)) {
513523
if (minOrMaxWidth.match(/^(\d+)$/)) {
@@ -871,13 +881,13 @@ angular.module('ui.grid')
871881
GridColumn.prototype.unsort = function () {
872882
//Decrease priority for every col where priority is higher than the removed sort's priority.
873883
var thisPriority = this.sort.priority;
874-
884+
875885
this.grid.columns.forEach(function (col) {
876886
if (col.sort && col.sort.priority !== undefined && col.sort.priority > thisPriority) {
877887
col.sort.priority -= 1;
878888
}
879889
});
880-
890+
881891
this.sort = {};
882892
this.grid.api.core.raise.sortChanged( this.grid, this.grid.getColumnSorting() );
883893
};

src/js/core/factories/GridOptions.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -438,9 +438,11 @@ angular.module('ui.grid')
438438
* @ngdoc boolean
439439
* @name minimumColumnSize
440440
* @propertyOf ui.grid.class:GridOptions
441-
* @description Columns can't be smaller than this, defaults to 10 pixels
441+
* @description Sets the default minimum column width, in other words,
442+
* it defines the default value for a column minWidth attribute if that is not otherwise specified.
443+
* Should be a number. Defaults to 30 pixels.
442444
*/
443-
baseOptions.minimumColumnSize = typeof(baseOptions.minimumColumnSize) !== "undefined" ? baseOptions.minimumColumnSize : 10;
445+
baseOptions.minimumColumnSize = typeof(baseOptions.minimumColumnSize) !== "undefined" ? baseOptions.minimumColumnSize : 30;
444446

445447
/**
446448
* @ngdoc function

test/unit/core/factories/GridColumn.spec.js

+18-3
Original file line numberDiff line numberDiff line change
@@ -562,9 +562,23 @@ describe('GridColumn factory', function () {
562562
expect(updateCol(colDef.width)).toThrow();
563563
});
564564

565-
it ('should set the value of minWidth to 30 when colDef.minWidth is undefined', invalidMinOrMaxWidthDef(undefined, 'minWidth'));
566-
it ('should set the value of minWidth to 30 when colDef.minWidth is null', invalidMinOrMaxWidthDef(null, 'minWidth'));
567-
it ('should set the value of minWidth to 30 when colDef.minWidth is an object', invalidMinOrMaxWidthDef({}, 'minWidth'));
565+
it ('should set the value of minWidth to 30 when colDef.minWidth and options.minimumColumnSize are undefined', invalidMinOrMaxWidthDef(undefined, 'minWidth'));
566+
it ('should set the value of minWidth to 30 when colDef.minWidth and options.minimumColumnSize are null', invalidMinOrMaxWidthDef(null, 'minWidth'));
567+
it ('should set the value of minWidth to 30 when colDef.minWidth and options.minimumColumnSize are an object', invalidMinOrMaxWidthDef({}, 'minWidth'));
568+
569+
describe('when options.minimumColumnSize is valid', function() {
570+
function validMinimumColumnSize(colSize, colMinWidth) {
571+
return function() {
572+
col.grid.options.minimumColumnSize = colSize;
573+
colDef.minWidth = colMinWidth;
574+
col.updateColumnDef(colDef);
575+
expect(col.minWidth).toBe(parseInt(grid.options.minimumColumnSize));
576+
};
577+
}
578+
it ('should set the value of minWidth to options.minimumColumnSize when colDef.minWidth is undefined', validMinimumColumnSize(50, undefined));
579+
it ('should set the value of minWidth to options.minimumColumnSize when colDef.minWidth is null', validMinimumColumnSize('60', null));
580+
it ('should set the value of minWidth to options.minimumColumnSize when colDef.minWidth is an object', validMinimumColumnSize(70, {}));
581+
});
568582

569583
it ('should set the value of minWidth to the parsed integer colDef.minWidth when it is a string', function () {
570584
colDef.minWidth = '90';
@@ -632,6 +646,7 @@ describe('GridColumn factory', function () {
632646

633647
function invalidMinOrMaxWidthDef(width, minOrMax) {
634648
return function () {
649+
col.grid.options.minimumColumnSize = width;
635650
colDef[minOrMax] = width;
636651
col.updateColumnDef(colDef);
637652
expect(col[minOrMax]).toBe(minOrMax === 'minWidth' ? 30 : 9000);

test/unit/core/factories/GridOptions.spec.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ describe('GridOptions factory', function () {
4545
enableVerticalScrollbar: 1,
4646
enableHorizontalScrollbar: 1,
4747
enableMinHeightCheck: true,
48-
minimumColumnSize: 10,
48+
minimumColumnSize: 30,
4949
rowEquality: jasmine.any(Function),
5050
headerTemplate: null,
5151
footerTemplate: 'ui-grid/ui-grid-footer',
@@ -238,4 +238,3 @@ describe('GridOptions factory', function () {
238238
});
239239
});
240240
});
241-

0 commit comments

Comments
 (0)