neo.mjs 8.4.1 → 8.4.2

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.
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='8.4.1'
23
+ * @member {String} version='8.4.2'
24
24
  */
25
- version: '8.4.1'
25
+ version: '8.4.2'
26
26
  }
27
27
 
28
28
  /**
@@ -107,7 +107,7 @@ class FooterContainer extends Container {
107
107
  }, {
108
108
  module: Component,
109
109
  cls : ['neo-version'],
110
- html : 'v8.4.1'
110
+ html : 'v8.4.2'
111
111
  }]
112
112
  }],
113
113
  /**
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='8.4.1'
23
+ * @member {String} version='8.4.2'
24
24
  */
25
- version: '8.4.1'
25
+ version: '8.4.2'
26
26
  }
27
27
 
28
28
  /**
@@ -49,12 +49,19 @@ class MainContainer extends Viewport {
49
49
  value : '50',
50
50
  width : 200
51
51
  }, {
52
- labelText : 'Buffer Row Range',
53
- labelWidth: 140,
52
+ labelText : 'Buffer Rows',
53
+ labelWidth: 95,
54
54
  listeners : {change: 'up.ontBufferRowRangeChange'},
55
55
  store : ['0', '3', '5', '10', '25', '50'],
56
56
  value : '5',
57
- width : 200
57
+ width : 160
58
+ }, {
59
+ labelText : 'Buffer Columns',
60
+ labelWidth: 120,
61
+ listeners : {change: 'up.ontBufferColumnRangeChange'},
62
+ store : ['0', '3', '5', '10', '20'],
63
+ value : '0',
64
+ width : 185
58
65
  }]
59
66
  }, {
60
67
  module : GridContainer,
@@ -73,12 +80,16 @@ class MainContainer extends Viewport {
73
80
  style: {padding: '20px'}
74
81
  }
75
82
 
83
+ get grid() {
84
+ return this.getItem('grid')
85
+ }
86
+
76
87
  /**
77
88
  * @param {Object} data
78
89
  */
79
90
  onAmountColumnsChange(data) {
80
91
  if (data.oldValue) {
81
- this.getItem('grid').amountColumns = parseInt(data.value.id)
92
+ this.grid.amountColumns = parseInt(data.value.id)
82
93
  }
83
94
  }
84
95
 
@@ -87,7 +98,16 @@ class MainContainer extends Viewport {
87
98
  */
88
99
  onAmountRowsChange(data) {
89
100
  if (data.oldValue) {
90
- this.getItem('grid').store.amountRows = parseInt(data.value.id)
101
+ this.grid.store.amountRows = parseInt(data.value.id)
102
+ }
103
+ }
104
+
105
+ /**
106
+ * @param {Object} data
107
+ */
108
+ ontBufferColumnRangeChange(data) {
109
+ if (data.oldValue) {
110
+ this.grid.view.bufferColumnRange = parseInt(data.value.id)
91
111
  }
92
112
  }
93
113
 
@@ -96,7 +116,7 @@ class MainContainer extends Viewport {
96
116
  */
97
117
  ontBufferRowRangeChange(data) {
98
118
  if (data.oldValue) {
99
- this.getItem('grid').view.bufferRowRange = parseInt(data.value.id)
119
+ this.grid.view.bufferRowRange = parseInt(data.value.id)
100
120
  }
101
121
  }
102
122
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "8.4.1",
3
+ "version": "8.4.2",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -262,12 +262,12 @@ const DefaultConfig = {
262
262
  useVdomWorker: true,
263
263
  /**
264
264
  * buildScripts/injectPackageVersion.mjs will update this value
265
- * @default '8.4.1'
265
+ * @default '8.4.2'
266
266
  * @memberOf! module:Neo
267
267
  * @name config.version
268
268
  * @type String
269
269
  */
270
- version: '8.4.1'
270
+ version: '8.4.2'
271
271
  };
272
272
 
273
273
  Object.assign(DefaultConfig, {
@@ -608,12 +608,6 @@ class GridContainer extends BaseContainer {
608
608
  if (me.store.sorters.length < 1) {
609
609
  me.removeSortingCss()
610
610
  }
611
- } else {
612
- me.on('rendered', () => {
613
- me.timeout(50).then(() => {
614
- me.createViewData(data)
615
- })
616
- }, me, {once: true})
617
611
  }
618
612
  }
619
613
 
package/src/grid/View.mjs CHANGED
@@ -38,6 +38,12 @@ class GridView extends Component {
38
38
  * @protected
39
39
  */
40
40
  baseCls: ['neo-grid-view'],
41
+ /**
42
+ * The amount of columns (cells) to paint before the first & after the last visible column,
43
+ * to enhance the scrolling performance
44
+ * @member {Number} bufferColumnRange_=0
45
+ */
46
+ bufferColumnRange_: 0,
41
47
  /**
42
48
  * The amount of rows to paint before the first & after the last visible row,
43
49
  * to enhance the scrolling performance
@@ -54,6 +60,11 @@ class GridView extends Component {
54
60
  * @protected
55
61
  */
56
62
  containerId: null,
63
+ /**
64
+ * Internal flag. Gets calculated after mounting grid.View rows
65
+ * @member {Number} containerWidth_=0
66
+ */
67
+ containerWidth_: 0,
57
68
  /**
58
69
  * @member {Object[]} columnPositions_=[]
59
70
  * @protected
@@ -98,7 +109,7 @@ class GridView extends Component {
98
109
  useRowRecordIds: true,
99
110
  /**
100
111
  * Stores the indexes of the first & last painted columns
101
- * @member {Array} visibleColumns_=[0,0]
112
+ * @member {Number[]} visibleColumns_=[0,0]
102
113
  * @protected
103
114
  */
104
115
  visibleColumns_: [0, 0],
@@ -205,6 +216,16 @@ class GridView extends Component {
205
216
  }
206
217
  }
207
218
 
219
+ /**
220
+ * Triggered after the bufferColumnRange config got changed
221
+ * @param {Number} value
222
+ * @param {Number} oldValue
223
+ * @protected
224
+ */
225
+ afterSetBufferColumnRange(value, oldValue) {
226
+ oldValue !== undefined && this.createViewData()
227
+ }
228
+
208
229
  /**
209
230
  * Triggered after the bufferRowRange config got changed
210
231
  * @param {Number} value
@@ -215,6 +236,18 @@ class GridView extends Component {
215
236
  oldValue !== undefined && this.createViewData()
216
237
  }
217
238
 
239
+ /**
240
+ * Triggered after the containerWidth config got changed
241
+ * @param {Number} value
242
+ * @param {Number} oldValue
243
+ * @protected
244
+ */
245
+ afterSetContainerWidth(value, oldValue) {
246
+ if (value > 0 && this.columnPositions.length > 0) {
247
+ this.updateVisibleColumns()
248
+ }
249
+ }
250
+
218
251
  /**
219
252
  * Triggered after the columnPositions config got changed
220
253
  * @param {Object[]} value
@@ -222,13 +255,8 @@ class GridView extends Component {
222
255
  * @protected
223
256
  */
224
257
  afterSetColumnPositions(value, oldValue) {
225
- let me = this;
226
-
227
- if (value.length > 0) {
228
- // for changing an array inline, we need to use the leading underscore
229
- me._visibleColumns[1] = value.length - 1;
230
-
231
- me.createViewData()
258
+ if (value.length > 0 && this.containerWidth > 0) {
259
+ this.updateVisibleColumns()
232
260
  }
233
261
  }
234
262
 
@@ -322,8 +350,8 @@ class GridView extends Component {
322
350
 
323
351
  /**
324
352
  * Triggered after the visibleColumns config got changed
325
- * @param {Number} value
326
- * @param {Number} oldValue
353
+ * @param {Number[]} value
354
+ * @param {Number[]} oldValue
327
355
  * @protected
328
356
  */
329
357
  afterSetVisibleColumns(value, oldValue) {
@@ -433,11 +461,11 @@ class GridView extends Component {
433
461
  }
434
462
 
435
463
  let me = this,
436
- {gridContainer, selectedRows, visibleColumns} = me,
464
+ {bufferColumnRange, gridContainer, selectedRows, visibleColumns} = me,
437
465
  columns = gridContainer.items[0].items,
438
466
  id = me.getRowId(record, rowIndex),
439
467
  trCls = me.getTrClass(record, rowIndex),
440
- config, column, gridRow, i;
468
+ config, column, endIndex, gridRow, i, startIndex;
441
469
 
442
470
  me.recordVnodeMap[id] = rowIndex;
443
471
 
@@ -471,7 +499,10 @@ class GridView extends Component {
471
499
  }
472
500
  };
473
501
 
474
- for (i=visibleColumns[0]; i <= visibleColumns[1]; i++) {
502
+ endIndex = Math.min(columns.length - 1, visibleColumns[1] + bufferColumnRange);
503
+ startIndex = Math.max(0, visibleColumns[0] - bufferColumnRange);
504
+
505
+ for (i=startIndex; i <= endIndex; i++) {
475
506
  column = columns[i];
476
507
  config = me.applyRendererOutput({column, gridContainer, index: rowIndex, record});
477
508
 
@@ -495,16 +526,23 @@ class GridView extends Component {
495
526
  *
496
527
  */
497
528
  createViewData() {
498
- let me = this,
529
+ let me = this,
499
530
  {bufferRowRange, startIndex, store} = me,
500
- rows = [],
531
+ countRecords = store.getCount(),
532
+ rows = [],
501
533
  endIndex, i;
502
534
 
503
- if (store.getCount() < 1 || me.availableRows < 1 || me.columnPositions.length < 1) {
535
+ if (
536
+ countRecords < 1 ||
537
+ me.availableRows < 1 ||
538
+ me._containerWidth < 1 || // we are not checking me.containerWidth, since we want to ignore the config symbol
539
+ me.columnPositions.length < 1 ||
540
+ me.visibleColumns[1] < 1
541
+ ) {
504
542
  return
505
543
  }
506
544
 
507
- endIndex = Math.min(store.getCount(), me.availableRows + startIndex + bufferRowRange);
545
+ endIndex = Math.min(countRecords, me.availableRows + startIndex + bufferRowRange);
508
546
  startIndex = Math.max(0, startIndex - bufferRowRange);
509
547
 
510
548
  for (i=startIndex; i < endIndex; i++) {
@@ -787,15 +825,16 @@ class GridView extends Component {
787
825
  *
788
826
  */
789
827
  updateVisibleColumns() {
790
- let me = this,
791
- {x} = me.scrollPosition,
792
- i = 0,
793
- len = me.columnPositions.length,
794
- endIndex = len - 1,
828
+ let me = this,
829
+ {columnPositions} = me,
830
+ {x} = me.scrollPosition,
831
+ i = 0,
832
+ len = columnPositions.length,
833
+ endIndex = len - 1,
795
834
  column, startIndex;
796
835
 
797
836
  for (; i < len; i++) {
798
- column = me.columnPositions[i];
837
+ column = columnPositions[i];
799
838
 
800
839
  if (x >= column.x && x <= column.x + column.width) {
801
840
  startIndex = i
@@ -807,7 +846,12 @@ class GridView extends Component {
807
846
  }
808
847
  }
809
848
 
810
- me.visibleColumns = [startIndex, endIndex]
849
+ if (
850
+ Math.abs(startIndex - me.visibleColumns[0]) >= me.bufferColumnRange ||
851
+ me.visibleColumns[1] < 1 // initial call
852
+ ) {
853
+ me.visibleColumns = [startIndex, endIndex]
854
+ }
811
855
  }
812
856
  }
813
857