neo.mjs 4.3.8 → 4.3.10

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.
Files changed (86) hide show
  1. package/apps/covid/view/MainContainerController.mjs +9 -11
  2. package/apps/krausest/view/MainComponent.mjs +3 -4
  3. package/apps/krausest/view/TableComponent.mjs +2 -3
  4. package/apps/realworld/view/HeaderComponent.mjs +7 -10
  5. package/apps/realworld/view/HomeComponent.mjs +16 -24
  6. package/apps/realworld/view/MainContainerController.mjs +3 -3
  7. package/apps/realworld/view/article/CommentComponent.mjs +11 -19
  8. package/apps/realworld/view/article/Component.mjs +20 -36
  9. package/apps/realworld/view/article/CreateCommentComponent.mjs +9 -16
  10. package/apps/realworld/view/article/CreateComponent.mjs +12 -20
  11. package/apps/realworld/view/article/PreviewComponent.mjs +16 -30
  12. package/apps/realworld/view/article/TagListComponent.mjs +4 -5
  13. package/apps/realworld/view/user/ProfileComponent.mjs +14 -21
  14. package/apps/realworld/view/user/SettingsComponent.mjs +9 -16
  15. package/apps/realworld/view/user/SignUpComponent.mjs +6 -9
  16. package/apps/realworld2/view/MainContainerController.mjs +2 -2
  17. package/apps/realworld2/view/article/PreviewComponent.mjs +17 -31
  18. package/apps/realworld2/view/article/PreviewList.mjs +4 -7
  19. package/apps/realworld2/view/article/TagListComponent.mjs +4 -5
  20. package/apps/sharedcovid/view/MainContainerController.mjs +10 -13
  21. package/apps/website/view/blog/List.mjs +2 -3
  22. package/docs/app/view/ApiTreeList.mjs +2 -6
  23. package/docs/app/view/ExamplesTreeList.mjs +2 -6
  24. package/docs/app/view/TutorialsTreeList.mjs +2 -6
  25. package/docs/app/view/classdetails/HeaderComponent.mjs +3 -4
  26. package/docs/app/view/classdetails/HierarchyTreeList.mjs +1 -2
  27. package/docs/app/view/classdetails/MembersList.mjs +4 -6
  28. package/docs/app/view/classdetails/SourceViewComponent.mjs +3 -6
  29. package/docs/app/view/classdetails/TutorialComponent.mjs +4 -5
  30. package/examples/tabs/MainContainer.mjs +4 -6
  31. package/examples/todoList/version1/MainComponent.mjs +5 -7
  32. package/examples/todoList/version2/TodoList.mjs +4 -5
  33. package/package.json +3 -3
  34. package/resources/scss/src/form/field/Text.scss +4 -3
  35. package/src/button/Base.mjs +14 -24
  36. package/src/button/Split.mjs +3 -4
  37. package/src/calendar/view/MainContainer.mjs +3 -5
  38. package/src/calendar/view/SettingsContainer.mjs +3 -5
  39. package/src/calendar/view/YearComponent.mjs +7 -9
  40. package/src/calendar/view/month/Component.mjs +7 -12
  41. package/src/calendar/view/week/Component.mjs +2 -3
  42. package/src/calendar/view/week/TimeAxisComponent.mjs +0 -3
  43. package/src/component/Base.mjs +26 -27
  44. package/src/component/Carousel.mjs +5 -9
  45. package/src/component/Chip.mjs +6 -12
  46. package/src/component/Circle.mjs +16 -22
  47. package/src/component/Clock.mjs +1 -1
  48. package/src/component/DateSelector.mjs +4 -9
  49. package/src/component/Gallery.mjs +12 -21
  50. package/src/component/Helix.mjs +2 -3
  51. package/src/component/Label.mjs +2 -3
  52. package/src/component/Legend.mjs +6 -9
  53. package/src/container/Base.mjs +5 -9
  54. package/src/dialog/Base.mjs +2 -3
  55. package/src/draggable/list/DragZone.mjs +1 -2
  56. package/src/draggable/tree/DragZone.mjs +1 -2
  57. package/src/form/Fieldset.mjs +4 -6
  58. package/src/form/field/CheckBox.mjs +23 -39
  59. package/src/form/field/Color.mjs +2 -3
  60. package/src/form/field/Display.mjs +1 -2
  61. package/src/form/field/Number.mjs +1 -2
  62. package/src/form/field/Picker.mjs +0 -1
  63. package/src/form/field/Text.mjs +34 -52
  64. package/src/form/field/TextArea.mjs +2 -3
  65. package/src/form/field/trigger/Base.mjs +2 -3
  66. package/src/form/field/trigger/SpinUpDown.mjs +3 -4
  67. package/src/form/field/trigger/Time.mjs +3 -4
  68. package/src/grid/header/Toolbar.mjs +1 -2
  69. package/src/layout/Card.mjs +2 -2
  70. package/src/list/Base.mjs +6 -11
  71. package/src/list/plugin/Animate.mjs +5 -12
  72. package/src/plugin/Resizable.mjs +3 -6
  73. package/src/selection/Model.mjs +3 -7
  74. package/src/selection/grid/CellColumnModel.mjs +2 -5
  75. package/src/selection/grid/CellColumnRowModel.mjs +2 -5
  76. package/src/selection/grid/CellRowModel.mjs +4 -13
  77. package/src/selection/table/CellColumnModel.mjs +2 -5
  78. package/src/selection/table/CellColumnRowModel.mjs +2 -5
  79. package/src/selection/table/CellRowModel.mjs +4 -13
  80. package/src/sitemap/Component.mjs +1 -1
  81. package/src/tab/Strip.mjs +8 -11
  82. package/src/tab/header/Toolbar.mjs +2 -3
  83. package/src/table/header/Button.mjs +4 -6
  84. package/src/table/header/Toolbar.mjs +3 -5
  85. package/src/tree/List.mjs +6 -9
  86. package/src/vdom/Helper.mjs +1 -1
package/src/list/Base.mjs CHANGED
@@ -374,13 +374,9 @@ class Base extends Component {
374
374
  listItem && vdom.cn.push(listItem);
375
375
  });
376
376
 
377
- if (silent) {
378
- me._vdom = vdom;
379
- } else {
380
- me.promiseVdomUpdate().then(() => {
381
- me.fire('createItems');
382
- });
383
- }
377
+ !silent && me.promiseVdomUpdate().then(() => {
378
+ me.fire('createItems');
379
+ });
384
380
  }
385
381
  }
386
382
 
@@ -538,13 +534,12 @@ class Base extends Component {
538
534
  */
539
535
  onStoreRecordChange(data) {
540
536
  let me = this,
541
- index = data.index,
542
- vdom = me.vdom;
537
+ index = data.index;
543
538
 
544
539
  // ignore changes for records which have not been added to the list yet
545
540
  if (index > -1) {
546
- vdom.cn[index] = me.createItem(data.record, index);
547
- me.vdom = vdom;
541
+ me.vdom.cn[index] = me.createItem(data.record, index);
542
+ me.update();
548
543
  }
549
544
  }
550
545
 
@@ -265,15 +265,10 @@ class Animate extends Base {
265
265
  }
266
266
  });
267
267
 
268
- if (hasAddedItems) {
269
- owner.vdom = vdom;
270
- }
268
+ hasAddedItems && owner.update();
271
269
 
272
270
  // ensure to get into the next animation frame
273
271
  setTimeout(() => {
274
- // get the latest version of the vdom, since this is a delayed callback
275
- vdom = owner.vdom;
276
-
277
272
  // new items are already added into the vdom, while old items are not yet removed
278
273
  // => we need a map to ensure getting the correct index
279
274
  map = vdom.cn.map(e => e.id);
@@ -309,8 +304,7 @@ class Animate extends Base {
309
304
  }
310
305
  });
311
306
 
312
- owner.vdom = vdom;
313
-
307
+ owner.update();
314
308
  me.triggerTransitionCallback();
315
309
  }, 50);
316
310
  }
@@ -359,9 +353,8 @@ class Animate extends Base {
359
353
  });
360
354
 
361
355
  if (hasChange) {
362
- owner.vdom.cn = newVdomCn;
363
-
364
- owner.vdom = vdom;
356
+ vdom.cn = newVdomCn;
357
+ owner.update();
365
358
 
366
359
  // we need to ensure to get this call into the next animation frame
367
360
  setTimeout(() => {
@@ -398,7 +391,7 @@ class Animate extends Base {
398
391
  item.style.transform = `translate(${position.x}px, ${position.y}px)`;
399
392
  });
400
393
 
401
- owner.vdom = vdom;
394
+ owner.update();
402
395
  }
403
396
  }
404
397
 
@@ -499,9 +499,7 @@ class Resizable extends Base {
499
499
  else if (dir.includes('r') && right) {if (!me.nodeRight) {h = me.addNode('right');}}
500
500
  else if (dir.includes('t') && top) {if (!me.nodeTop) {h = me.addNode('top');}}
501
501
 
502
- if (h) {
503
- owner.vdom = vdom;
504
- }
502
+ h && owner.update();
505
503
  }
506
504
  }
507
505
  }
@@ -533,12 +531,11 @@ class Resizable extends Base {
533
531
  * see: /issues/1139
534
532
  */
535
533
  removeAllNodes() {
536
- let me = this,
537
- vdom = me.owner.vdom;
534
+ let me = this;
538
535
 
539
536
  if (me.currentNodeName) {
540
537
  me.removeNode(me.currentNodeName);
541
- me.owner.vdom = vdom;
538
+ me.owner.update();
542
539
 
543
540
  me.currentNodeName = null;
544
541
  me.targetNode = null;
@@ -98,7 +98,6 @@ class Model extends Base {
98
98
  deselect(item, silent, itemCollection, selectedCls) {
99
99
  let me = this,
100
100
  view = me.view,
101
- vdom = view.vdom,
102
101
  node = view.getVdomChild(item), // todo: support for nodes (right now limited to ids)
103
102
  cls;
104
103
 
@@ -110,9 +109,7 @@ class Model extends Base {
110
109
 
111
110
  NeoArray.remove(itemCollection || me.items, item);
112
111
 
113
- if (!silent) {
114
- view.vdom = vdom;
115
- }
112
+ !silent && view.update();
116
113
  }
117
114
 
118
115
  /**
@@ -121,15 +118,14 @@ class Model extends Base {
121
118
  deselectAll(silent) {
122
119
  let me = this,
123
120
  items = [...me.items],
124
- view = me.view,
125
- vdom = view.vdom;
121
+ view = me.view;
126
122
 
127
123
  items.forEach(item => {
128
124
  me.deselect(item, true);
129
125
  });
130
126
 
131
127
  if (!silent && items.length > 0) {
132
- view.vdom = vdom;
128
+ view.update();
133
129
  }
134
130
  }
135
131
 
@@ -50,16 +50,13 @@ class CellColumnModel extends CellModel {
50
50
  deselectAllCells(silent) {
51
51
  let me = this,
52
52
  cellIds = [...me.selectedColumnCellIds],
53
- view = me.view,
54
- vdom = view.vdom;
53
+ view = me.view;
55
54
 
56
55
  cellIds.forEach(cellId => {
57
56
  me.deselect(cellId, true, me.selectedColumnCellIds, me.selectedColumnCellCls);
58
57
  });
59
58
 
60
- if (!silent) {
61
- view.vdom = vdom;
62
- }
59
+ !silent && view.update();
63
60
  }
64
61
 
65
62
  /**
@@ -50,16 +50,13 @@ class CellColumnRowModel extends CellRowModel {
50
50
  deselectAllCells(silent) {
51
51
  let me = this,
52
52
  cellIds = [...me.selectedColumnCellIds],
53
- view = me.view,
54
- vdom = view.vdom;
53
+ view = me.view;
55
54
 
56
55
  cellIds.forEach(cellId => {
57
56
  me.deselect(cellId, true, me.selectedColumnCellIds, me.selectedColumnCellCls);
58
57
  });
59
58
 
60
- if (!silent) {
61
- view.vdom = vdom;
62
- }
59
+ !silent && view.update();
63
60
  }
64
61
 
65
62
  /**
@@ -46,16 +46,13 @@ class CellRowModel extends CellModel {
46
46
  deselectAllRows(silent) {
47
47
  let me = this,
48
48
  rowIds = [...me.selectedRowIds],
49
- view = me.view,
50
- vdom = view.vdom;
49
+ view = me.view;
51
50
 
52
51
  rowIds.forEach(rowId => {
53
52
  me.deselectRow(rowId, true);
54
53
  });
55
54
 
56
- if (!silent) {
57
- view.vdom = vdom;
58
- }
55
+ !silent && view.update();
59
56
  }
60
57
 
61
58
  /**
@@ -65,7 +62,6 @@ class CellRowModel extends CellModel {
65
62
  deselectRow(rowId, silent) {
66
63
  let me = this,
67
64
  view = me.view,
68
- vdom = view.vdom,
69
65
  node = view.getVdomChild(rowId),
70
66
  cls;
71
67
 
@@ -77,9 +73,7 @@ class CellRowModel extends CellModel {
77
73
 
78
74
  NeoArray.remove(me.selectedRowIds, rowId);
79
75
 
80
- if (!silent) {
81
- view.vdom = vdom;
82
- }
76
+ !silent && view.update();
83
77
  }
84
78
 
85
79
  /**
@@ -133,7 +127,6 @@ class CellRowModel extends CellModel {
133
127
  selectRow(id, silent) {
134
128
  let me = this,
135
129
  view = me.view,
136
- vdom = view.vdom,
137
130
  vdomNode = id && view.getVdomChild(id),
138
131
  cls;
139
132
 
@@ -145,9 +138,7 @@ class CellRowModel extends CellModel {
145
138
  me.selectedRowIds.push(id);
146
139
  }
147
140
 
148
- if (!silent) {
149
- view.vdom = vdom;
150
- }
141
+ !silent && view.update();
151
142
  }
152
143
 
153
144
  /**
@@ -50,16 +50,13 @@ class CellColumnModel extends CellModel {
50
50
  deselectAllCells(silent) {
51
51
  let me = this,
52
52
  cellIds = [...me.selectedColumnCellIds],
53
- view = me.view,
54
- vdom = view.vdom;
53
+ view = me.view;
55
54
 
56
55
  cellIds.forEach(cellId => {
57
56
  me.deselect(cellId, true, me.selectedColumnCellIds, me.selectedColumnCellCls);
58
57
  });
59
58
 
60
- if (!silent) {
61
- view.vdom = vdom;
62
- }
59
+ !silent && view.update();
63
60
  }
64
61
 
65
62
  /**
@@ -50,16 +50,13 @@ class CellColumnRowModel extends CellRowModel {
50
50
  deselectAllCells(silent) {
51
51
  let me = this,
52
52
  cellIds = [...me.selectedColumnCellIds],
53
- view = me.view,
54
- vdom = view.vdom;
53
+ view = me.view;
55
54
 
56
55
  cellIds.forEach(cellId => {
57
56
  me.deselect(cellId, true, me.selectedColumnCellIds, me.selectedColumnCellCls);
58
57
  });
59
58
 
60
- if (!silent) {
61
- view.vdom = vdom;
62
- }
59
+ !silent && view.update();
63
60
  }
64
61
 
65
62
  /**
@@ -46,16 +46,13 @@ class CellRowModel extends CellModel {
46
46
  deselectAllRows(silent) {
47
47
  let me = this,
48
48
  rowIds = [...me.selectedRowIds],
49
- view = me.view,
50
- vdom = view.vdom;
49
+ view = me.view;
51
50
 
52
51
  rowIds.forEach(rowId => {
53
52
  me.deselectRow(rowId, true);
54
53
  });
55
54
 
56
- if (!silent) {
57
- view.vdom = vdom;
58
- }
55
+ !silent && view.update();
59
56
  }
60
57
 
61
58
  /**
@@ -65,7 +62,6 @@ class CellRowModel extends CellModel {
65
62
  deselectRow(rowId, silent) {
66
63
  let me = this,
67
64
  view = me.view,
68
- vdom = view.vdom,
69
65
  node = view.getVdomChild(rowId),
70
66
  cls;
71
67
 
@@ -77,9 +73,7 @@ class CellRowModel extends CellModel {
77
73
 
78
74
  NeoArray.remove(me.selectedRowIds, rowId);
79
75
 
80
- if (!silent) {
81
- view.vdom = vdom;
82
- }
76
+ !silent && view.update();
83
77
  }
84
78
 
85
79
  /**
@@ -133,7 +127,6 @@ class CellRowModel extends CellModel {
133
127
  selectRow(id, silent) {
134
128
  let me = this,
135
129
  view = me.view,
136
- vdom = view.vdom,
137
130
  vdomNode = id && view.getVdomChild(id),
138
131
  cls;
139
132
 
@@ -145,9 +138,7 @@ class CellRowModel extends CellModel {
145
138
  me.selectedRowIds.push(id);
146
139
  }
147
140
 
148
- if (!silent) {
149
- view.vdom = vdom;
150
- }
141
+ !silent && view.update();
151
142
  }
152
143
 
153
144
  /**
@@ -165,7 +165,7 @@ class Component extends Base {
165
165
  column.cn.push(item);
166
166
  }
167
167
 
168
- me.vdom = vdom;
168
+ me.update();
169
169
  }
170
170
 
171
171
  /**
package/src/tab/Strip.mjs CHANGED
@@ -45,16 +45,14 @@ class Strip extends Component {
45
45
  */
46
46
  afterSetUseActiveTabIndicator(value, oldValue) {
47
47
  if (oldValue !== undefined) {
48
- let me = this,
49
- vdom = me.vdom;
48
+ let me = this;
50
49
 
51
- vdom.cn[0].removeDom = !value;
50
+ me.vdom.cn[0].removeDom = !value;
52
51
 
53
52
  if (me.mounted && value) {
54
- me._vdom = vdom; // silent update
55
53
  me.getActiveTabRectThenMove();
56
54
  } else {
57
- me.vdom = vdom;
55
+ me.update();
58
56
  }
59
57
  }
60
58
  }
@@ -109,11 +107,10 @@ class Strip extends Component {
109
107
  moveActiveIndicator(rects) {
110
108
  let me = this,
111
109
  rect = rects[1] || rects[0],
112
- activeTabIndicator, tabContainer, vdom;
110
+ activeTabIndicator, tabContainer;
113
111
 
114
112
  if (me.useActiveTabIndicator) {
115
- vdom = me.vdom;
116
- activeTabIndicator = vdom.cn[0];
113
+ activeTabIndicator = me.vdom.cn[0];
117
114
  tabContainer = me.getTabContainer();
118
115
 
119
116
  switch (tabContainer.tabBarPosition) {
@@ -140,18 +137,18 @@ class Strip extends Component {
140
137
  // in case there is a dynamic change (oldValue), call this method again
141
138
  if (rects[1]) {
142
139
  activeTabIndicator.style.opacity = 0;
143
- me.vdom = vdom;
140
+ me.update();
144
141
 
145
142
  setTimeout(() => {
146
143
  me.moveActiveIndicator([rects[0]]);
147
144
  }, 50)
148
145
  } else {
149
146
  activeTabIndicator.style.opacity = 1;
150
- me.vdom = vdom;
147
+ me.update();
151
148
 
152
149
  setTimeout(() => {
153
150
  activeTabIndicator.style.opacity = 0;
154
- me.vdom = vdom;
151
+ me.update();
155
152
  }, 300);
156
153
  }
157
154
  }
@@ -56,8 +56,7 @@ class Toolbar extends BaseToolbar {
56
56
  */
57
57
  afterSetUseActiveTabIndicator(value, oldValue) {
58
58
  if (oldValue !== undefined) {
59
- let me = this,
60
- vdom = me.vdom;
59
+ let me = this;
61
60
 
62
61
  me.items.forEach(item => {
63
62
  // silent updates
@@ -65,7 +64,7 @@ class Toolbar extends BaseToolbar {
65
64
  item.updateUseActiveTabIndicator(true);
66
65
  });
67
66
 
68
- me.vdom = vdom;
67
+ me.update();
69
68
  }
70
69
  }
71
70
 
@@ -136,8 +136,7 @@ class Button extends BaseButton {
136
136
  * @protected
137
137
  */
138
138
  afterSetDraggable(value, oldValue) {
139
- let me = this,
140
- vdom = me.vdom;
139
+ let me = this;
141
140
 
142
141
  if (value === true) {
143
142
  me.getVdomRoot().draggable = true;
@@ -145,7 +144,7 @@ class Button extends BaseButton {
145
144
  delete me.getVdomRoot().draggable;
146
145
  }
147
146
 
148
- me.vdom = vdom;
147
+ me.update();
149
148
  }
150
149
 
151
150
  /**
@@ -195,8 +194,7 @@ class Button extends BaseButton {
195
194
  * @protected
196
195
  */
197
196
  afterSetShowHeaderFilter(value, oldValue) {
198
- let me = this,
199
- vdom = me.vdom;
197
+ let me = this;
200
198
 
201
199
  if (value) {
202
200
  if (!me.filterField) {
@@ -228,7 +226,7 @@ class Button extends BaseButton {
228
226
  me.filterField.vdom.removeDom = true;
229
227
  }
230
228
 
231
- me.vdom = vdom;
229
+ me.update();
232
230
  }
233
231
 
234
232
  /**
@@ -51,8 +51,7 @@ class Toolbar extends BaseToolbar {
51
51
  */
52
52
  afterSetShowHeaderFilters(value, oldValue) {
53
53
  if (oldValue !== undefined) {
54
- let me = this,
55
- vdom = me.vdom;
54
+ let me = this;
56
55
 
57
56
  me.items.forEach(item => {
58
57
  item.setSilent({
@@ -60,7 +59,7 @@ class Toolbar extends BaseToolbar {
60
59
  });
61
60
  });
62
61
 
63
- me.vdom = vdom;
62
+ me.update();
64
63
  }
65
64
  }
66
65
 
@@ -78,7 +77,6 @@ class Toolbar extends BaseToolbar {
78
77
  dockRightWidth = 0,
79
78
  items = me.items,
80
79
  len = items.length,
81
- vdom = me.vdom,
82
80
  style;
83
81
 
84
82
  items.forEach((item, index) => {
@@ -116,7 +114,7 @@ class Toolbar extends BaseToolbar {
116
114
  }
117
115
  });
118
116
 
119
- me.vdom = vdom;
117
+ me.update();
120
118
  }
121
119
 
122
120
  /**
package/src/tree/List.mjs CHANGED
@@ -265,7 +265,6 @@ class Tree extends Base {
265
265
  let me = this,
266
266
  isFiltered = true,
267
267
  valueRegEx = new RegExp(value, 'gi'),
268
- vdom = me.vdom,
269
268
  childReturnValue, directMatch, node;
270
269
 
271
270
  if (!value) {
@@ -275,7 +274,7 @@ class Tree extends Base {
275
274
  me.store.items.forEach(item => {
276
275
  if (item.parentId === parentId) {
277
276
  directMatch = false;
278
- node = me.getVdomChild(me.getItemId(item.id), vdom);
277
+ node = me.getVdomChild(me.getItemId(item.id), me.vdom);
279
278
 
280
279
  node.cn[0].innerHTML = item[property].replace(valueRegEx, match => {
281
280
  directMatch = true;
@@ -298,7 +297,7 @@ class Tree extends Base {
298
297
 
299
298
  if (parentId === null) {
300
299
  me.expandAll(true);
301
- me.vdom = vdom;
300
+ me.update();
302
301
  }
303
302
 
304
303
  return isFiltered;
@@ -328,11 +327,10 @@ class Tree extends Base {
328
327
  onConstructed() {
329
328
  super.onConstructed();
330
329
 
331
- let me = this,
332
- vdom = me.vdom;
330
+ let me = this;
333
331
 
334
332
  if (me.showCollapseExpandAllIcons) {
335
- vdom.cn.unshift({
333
+ me.vdom.cn.unshift({
336
334
  cls: ['neo-treelist-menu-item', 'neo-treelist-collapse-all-icon'],
337
335
  cn : [{
338
336
  tag: 'span',
@@ -346,7 +344,7 @@ class Tree extends Base {
346
344
  }]
347
345
  });
348
346
 
349
- me.vdom = vdom;
347
+ me.update();
350
348
  }
351
349
  }
352
350
 
@@ -356,7 +354,6 @@ class Tree extends Base {
356
354
  */
357
355
  onItemClick(node, data) {
358
356
  let me = this,
359
- vdom = me.vdom,
360
357
  items = me.store.items,
361
358
  i = 0,
362
359
  len = items.length,
@@ -377,7 +374,7 @@ class Tree extends Base {
377
374
  if (item) {
378
375
  if (item.cls?.includes('neo-list-folder')) {
379
376
  NeoArray.toggle(item.cls, 'neo-folder-open');
380
- me.vdom = vdom;
377
+ me.update();
381
378
  } else {
382
379
  me.onLeafItemClick(record);
383
380
 
@@ -439,7 +439,7 @@ class Helper extends Base {
439
439
 
440
440
  Object.entries(value).forEach(([key, value]) => {
441
441
  if (!(oldVnode.attributes.hasOwnProperty(key) && oldVnode.attributes[key] === value)) {
442
- if (!Neo.isString(value) && Neo.isEmpty(value)) {
442
+ if (value !== null && !Neo.isString(value) && Neo.isEmpty(value)) {
443
443
  // ignore empty arrays & objects
444
444
  } else {
445
445
  attributes[key] = value;