@danielgindi/selectbox 2.0.7 → 2.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/lib.es6.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @danielgindi/selectbox 2.0.7
2
+ * @danielgindi/selectbox 2.0.8
3
3
  * git://github.com/danielgindi/selectbox.git
4
4
  */
5
5
  import { createElement, closestUntil, setElementAttrs, next, prev } from '@danielgindi/dom-utils/lib/Dom';
@@ -186,7 +186,7 @@ Emits the following events:
186
186
  'hide': the drop list was hidden.
187
187
  'hide:after': emitted after the hide css transition has ended, or immediately after 'hide'.
188
188
  'check' {value, item, checked: boolean, isGroup: boolean, isCheckingGroup: boolean}: item was selected (in multi mode).
189
- 'groupcheck' {value, item, affectedItems}: item was selected (in multi mode).
189
+ 'groupcheck' {value, item, affectedCount: number}: item was selected (in multi mode).
190
190
  'blur' {event}: element lost focus
191
191
  'show_subitems {value, item, el, droplist: DropList}': subitems dropdown will show.
192
192
  'hide_subitems {value, item, el}': subitems dropdown did hide.
@@ -779,6 +779,10 @@ class DropList {
779
779
  p.groupCount++;
780
780
  }
781
781
 
782
+ if (typeof oitem._level === 'number') {
783
+ item._level = oitem._level;
784
+ }
785
+
782
786
  if (oitem._child) {
783
787
  // This is used for setting a child class,
784
788
  // But can be used to determine that current item is not part of above group,
@@ -881,6 +885,10 @@ class DropList {
881
885
  }
882
886
  }
883
887
 
888
+ if (hasOwnProperty.call(newItem, '_level')) {
889
+ newItem._level = item._level;
890
+ }
891
+
884
892
  if (hasOwnProperty.call(newItem, '_child'))
885
893
  item._child = !!newItem._child;
886
894
 
@@ -1210,6 +1218,7 @@ class DropList {
1210
1218
  _nointeraction: !!oitem._nointeraction,
1211
1219
  _subitems: oitem._subitems,
1212
1220
  _group: !!oitem._group,
1221
+ _level: !!oitem._level,
1213
1222
  _checked: !!oitem._checked,
1214
1223
  };
1215
1224
  }
@@ -3016,17 +3025,19 @@ class DropList {
3016
3025
  if (item._group) {
3017
3026
  // Now loop through children below the group
3018
3027
 
3019
- let affectedItems = 0;
3028
+ let affectedCount = 0;
3020
3029
 
3021
3030
  if (p.autoCheckGroupChildren) {
3022
3031
  const items = p.filteredItems ?? p.items;
3023
3032
  let groupIndex = items.indexOf(item);
3033
+ const groupLevel = item._level;
3024
3034
 
3025
3035
  for (let i = groupIndex + 1, len = items.length; i < len; i++) {
3026
3036
  let next = items[i];
3027
3037
 
3028
3038
  // Hit the next group, break out
3029
- if (next._group || (!next._child && items[i - 1]._child))
3039
+ if ((!next._child && items[i - 1]._child) ||
3040
+ (groupLevel === undefined ? next._group || next._level !== undefined : next._level <= groupLevel))
3030
3041
  break;
3031
3042
 
3032
3043
  // No change, skip
@@ -3036,7 +3047,7 @@ class DropList {
3036
3047
  // Update state
3037
3048
  next._checked = item._checked;
3038
3049
 
3039
- affectedItems++;
3050
+ affectedCount++;
3040
3051
 
3041
3052
  // Update DOM
3042
3053
  let nextEl = p.virtualListHelper.getItemElementAt(i);
@@ -3059,7 +3070,7 @@ class DropList {
3059
3070
  this._trigger('groupcheck', {
3060
3071
  value: item.value,
3061
3072
  item: item[ItemSymbol] ?? item,
3062
- affectedItems: affectedItems,
3073
+ affectedCount: affectedCount,
3063
3074
  });
3064
3075
  } else if (p.groupCount > 0 && p.autoCheckGroupChildren) {
3065
3076
  const items = p.filteredItems ?? p.items;
@@ -3093,18 +3104,21 @@ class DropList {
3093
3104
 
3094
3105
  if (!groupItem || !groupItem._group) return this;
3095
3106
 
3096
- let item, hasChecked = false, hasUnchecked = false;
3107
+ let next, hasChecked = false, hasUnchecked = false;
3108
+
3109
+ const groupLevel = groupItem._level;
3097
3110
 
3098
3111
  for (let i = groupIndex + 1, len = items.length; i < len; i++) {
3099
- item = items[i];
3112
+ next = items[i];
3100
3113
 
3101
3114
  // Hit the next group, break out
3102
- if (item._group || (!item._child && items[i - 1]._child))
3115
+ if ((!next._child && items[i - 1]._child) ||
3116
+ (groupLevel === undefined ? next._group || next._level !== undefined : next._level <= groupLevel))
3103
3117
  break;
3104
3118
 
3105
- if (item._checked) {
3119
+ if (next._checked) {
3106
3120
  hasChecked = true;
3107
- } else if (!item._checked) {
3121
+ } else if (!next._checked) {
3108
3122
  hasUnchecked = true;
3109
3123
  }
3110
3124
  }
@@ -3461,11 +3475,12 @@ Emits the following events:
3461
3475
  'open' { list: DropList }: the drop list is opening
3462
3476
  'open:before' { list: DropList }: the drop list will open
3463
3477
  'close': the drop list is closing
3464
- 'addsel:before' {value, item, cancel: false}: an item selection is about to be added (in multi mode). return false to abort.
3465
- 'removesel:before' {value, item, cancel: false}: an item selection is about to be removed (in multi mode). return false to abort.
3478
+ 'addsel:before' {value, item, cancel: false, isCheckingGroup: bool}: an item selection is about to be added (in multi mode). return false to abort.
3479
+ 'removesel:before' {value, item, cancel: false, isCheckingGroup: bool}: an item selection is about to be removed (in multi mode). return false to abort.
3480
+ 'addsel' {value, item, isCheckingGroup: bool}: an item selection has been added (in multi mode)
3481
+ 'removesel' {value, item, isCheckingGroup: bool}: an item selection has been removed (in multi mode)
3482
+ 'groupcheck' {value, item, affectedCount: number}: an item selection has been removed (in multi mode)
3466
3483
  'select:before' {value, item, cancel: false}: an item is about to be selected (in single mode). return false to abort.
3467
- 'addsel' {value, item}: an item selection has been added (in multi mode)
3468
- 'removesel' {value, item}: an item selection has been removed (in multi mode)
3469
3484
  'select' {value, item}: an item has been selected (in single mode)
3470
3485
  'search' {value}: input box value has changed
3471
3486
  'search:focus': input box has gained focus
@@ -5143,7 +5158,12 @@ class SelectBox {
5143
5158
  let checked = event.checked;
5144
5159
  if (event.isGroup && !p.treatGroupSelectionAsItems) return; // Ignore groups
5145
5160
 
5146
- let selEvt = { value: value, item: item, cancel: false };
5161
+ let selEvt = {
5162
+ value: value,
5163
+ item: item,
5164
+ cancel: false,
5165
+ isCheckingGroup: event.isCheckingGroup,
5166
+ };
5147
5167
  this._trigger((checked ? 'addsel' : 'removesel') + ':before', selEvt);
5148
5168
 
5149
5169
  if (selEvt.cancel) {
@@ -5201,16 +5221,26 @@ class SelectBox {
5201
5221
  this._scheduleSync('syncPlaceholder');
5202
5222
  }
5203
5223
 
5204
- this._trigger(checked ? 'addsel' : 'removesel', { value: value, item: item });
5224
+ this._trigger(checked ? 'addsel' : 'removesel', {
5225
+ value: value,
5226
+ item: item,
5227
+ isCheckingGroup: event.isCheckingGroup,
5228
+ });
5205
5229
  }
5206
5230
  break;
5207
5231
 
5208
5232
  case 'groupcheck': {
5209
5233
  if (!p.multi) return;
5210
5234
 
5211
- if (event.affectedItems) {
5235
+ if (event.affectedCount) {
5212
5236
  this._scheduleSync(p.sortSelectedItems ? 'full' : 'render_base');
5213
5237
  }
5238
+
5239
+ this._trigger('groupcheck', {
5240
+ value: event.value,
5241
+ item: event.item,
5242
+ affectedCount: event.affectedCount,
5243
+ });
5214
5244
  }
5215
5245
  break;
5216
5246