From 987c345a8acd5a9d6f60ac1b9ec5046a49a2e30d Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Sun, 21 Jul 2019 22:08:28 -0400 Subject: [PATCH] fix(picker): column exclude from ColumnPicker, GridMenu caussing issue - found by looking into Cypress E2E tests, ref PR #399 - because there is a grid setColumns, we cannot just remove the excluded columns, if we do it causes some issues when showing/hiding columns later. - what is better is to simply keep excluded item in the list but simply hide the checkbox from the picker list. --- controls/slick.columnpicker.css | 5 +++++ controls/slick.columnpicker.js | 17 +++++------------ controls/slick.gridmenu.css | 6 +++++- controls/slick.gridmenu.js | 18 ++++++------------ 4 files changed, 21 insertions(+), 25 deletions(-) diff --git a/controls/slick.columnpicker.css b/controls/slick.columnpicker.css index 6e57fba9..92e1c893 100644 --- a/controls/slick.columnpicker.css +++ b/controls/slick.columnpicker.css @@ -44,3 +44,8 @@ .slick-columnpicker li a:hover { background: white; } + +/* Excluded item from Column Picker will be hidden */ +.slick-columnpicker-list li.hidden { + display: none; +} \ No newline at end of file diff --git a/controls/slick.columnpicker.js b/controls/slick.columnpicker.js index 9dcd4e97..b359551e 100644 --- a/controls/slick.columnpicker.js +++ b/controls/slick.columnpicker.js @@ -32,6 +32,7 @@ var _grid = grid; var _options = options; var $columnTitleElm; + var columns; var $list; var $menu; var columnCheckboxes; @@ -97,9 +98,10 @@ columnCheckboxes = []; var $li, $input; - var columnLabel; + var columnLabel, excludeCssClass; for (var i = 0; i < columns.length; i++) { - $li = $("
  • ").appendTo($list); + excludeCssClass = columns[i].excludeFromColumnPicker ? "hidden" : ""; + $li = $('
  • ').appendTo($list); $input = $("").data("column-id", columns[i].id); columnCheckboxes.push($input); @@ -177,16 +179,7 @@ ordered[i] = current.shift(); } } - - // filter out excluded column header when necessary - // (works with IE9+, older browser requires a polyfill for the filter to work, visit MDN for more info) - if (Array.isArray(ordered) && typeof ordered.filter === 'function') { - columns = ordered.filter(function (columnDef) { - return !columnDef.excludeFromColumnPicker; - }); - } else { - columns = ordered; - } + columns = ordered; } /** Update the Titles of each sections (command, customTitle, ...) */ diff --git a/controls/slick.gridmenu.css b/controls/slick.gridmenu.css index 204e6d77..776eda23 100644 --- a/controls/slick.gridmenu.css +++ b/controls/slick.gridmenu.css @@ -106,12 +106,16 @@ vertical-align: middle; } - /* Disabled */ .slick-gridmenu-item-disabled { color: silver; } +/* Excluded item from Grid Menu will be hidden */ +.slick-gridmenu-list li.hidden { + display: none; +} + /* Divider */ .slick-gridmenu-item.slick-gridmenu-item-divider { cursor: default; diff --git a/controls/slick.gridmenu.js b/controls/slick.gridmenu.js index a3e6b153..8bcd3849 100644 --- a/controls/slick.gridmenu.js +++ b/controls/slick.gridmenu.js @@ -105,6 +105,7 @@ var $list; var $button; var $menu; + var columns; var columnCheckboxes; var _defaults = { hideForceFitButton: false, @@ -262,9 +263,11 @@ } } - var $li, $input; + var $li, $input, excludeCssClass; for (var i = 0; i < columns.length; i++) { - $li = $("
  • ").appendTo($list); + excludeCssClass = columns[i].excludeFromGridMenu ? "hidden" : ""; + $li = $('
  • ').appendTo($list); + $input = $("").data("column-id", columns[i].id); columnCheckboxes.push($input); @@ -395,16 +398,7 @@ ordered[i] = current.shift(); } } - - // filter out excluded column header when necessary - // (works with IE9+, older browser requires a polyfill for the filter to work, visit MDN for more info) - if (Array.isArray(ordered) && typeof ordered.filter === 'function') { - columns = ordered.filter(function (columnDef) { - return !columnDef.excludeFromGridMenu; - }); - } else { - columns = ordered; - } + columns = ordered; } function updateColumn(e) {