neo.mjs 8.0.0-beta.2 → 8.0.1

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 (63) hide show
  1. package/apps/ServiceWorker.mjs +2 -2
  2. package/apps/covid/view/MainContainerController.mjs +7 -4
  3. package/apps/portal/index.html +1 -1
  4. package/apps/portal/view/about/Container.mjs +0 -2
  5. package/apps/portal/view/about/MemberContainer.mjs +1 -20
  6. package/apps/portal/view/home/FooterContainer.mjs +1 -5
  7. package/apps/sharedcovid/view/MainContainerController.mjs +7 -4
  8. package/examples/ConfigurationViewport.mjs +37 -32
  9. package/examples/ServiceWorker.mjs +2 -2
  10. package/examples/calendar/weekview/MainContainer.mjs +6 -6
  11. package/examples/grid/cellEditing/MainContainer.mjs +175 -0
  12. package/examples/grid/cellEditing/MainContainerStateProvider.mjs +62 -0
  13. package/examples/grid/cellEditing/MainModel.mjs +30 -0
  14. package/examples/grid/cellEditing/MainStore.mjs +54 -0
  15. package/examples/grid/cellEditing/app.mjs +6 -0
  16. package/examples/grid/cellEditing/index.html +11 -0
  17. package/examples/grid/cellEditing/neo-config.json +6 -0
  18. package/examples/grid/container/MainContainer.mjs +7 -6
  19. package/examples/grid/covid/GridContainer.mjs +36 -36
  20. package/examples/grid/covid/Util.mjs +1 -1
  21. package/examples/table/cellEditing/MainContainer.mjs +174 -0
  22. package/examples/table/cellEditing/MainContainerStateProvider.mjs +62 -0
  23. package/examples/table/cellEditing/MainModel.mjs +30 -0
  24. package/examples/table/cellEditing/MainStore.mjs +54 -0
  25. package/examples/table/cellEditing/app.mjs +6 -0
  26. package/examples/table/cellEditing/index.html +11 -0
  27. package/examples/table/cellEditing/neo-config.json +6 -0
  28. package/examples/table/nestedRecordFields/MainContainerStateProvider.mjs +2 -1
  29. package/package.json +8 -8
  30. package/resources/scss/src/apps/portal/home/FooterContainer.scss +11 -2
  31. package/resources/scss/src/grid/Container.scss +0 -13
  32. package/resources/scss/src/grid/plugin/CellEditing.scss +11 -0
  33. package/resources/scss/src/table/plugin/CellEditing.scss +11 -0
  34. package/src/DefaultConfig.mjs +2 -2
  35. package/src/Neo.mjs +2 -2
  36. package/src/code/LivePreview.mjs +2 -2
  37. package/src/component/DateSelector.mjs +15 -0
  38. package/src/core/Base.mjs +1 -1
  39. package/src/form/field/Base.mjs +1 -4
  40. package/src/form/field/ComboBox.mjs +18 -2
  41. package/src/form/field/Date.mjs +10 -4
  42. package/src/grid/Container.mjs +242 -39
  43. package/src/grid/README.md +1 -1
  44. package/src/grid/View.mjs +282 -129
  45. package/src/grid/header/Button.mjs +327 -36
  46. package/src/grid/header/Toolbar.mjs +68 -4
  47. package/src/grid/plugin/CellEditing.mjs +30 -0
  48. package/src/main/DomEvents.mjs +12 -3
  49. package/src/manager/Focus.mjs +2 -2
  50. package/src/plugin/Base.mjs +15 -1
  51. package/src/plugin/Resizable.mjs +1 -5
  52. package/src/selection/Model.mjs +5 -1
  53. package/src/selection/grid/CellColumnModel.mjs +1 -1
  54. package/src/selection/grid/CellColumnRowModel.mjs +1 -1
  55. package/src/selection/grid/CellModel.mjs +1 -1
  56. package/src/selection/grid/ColumnModel.mjs +2 -2
  57. package/src/table/Container.mjs +32 -3
  58. package/src/table/View.mjs +9 -4
  59. package/src/table/header/Toolbar.mjs +15 -1
  60. package/src/table/plugin/CellEditing.mjs +330 -0
  61. package/src/tooltip/Base.mjs +17 -17
  62. package/src/util/KeyNavigation.mjs +14 -8
  63. package/src/vdom/Helper.mjs +1 -3
@@ -1,5 +1,7 @@
1
- import BaseButton from '../../button/Base.mjs';
2
- import NeoArray from '../../util/Array.mjs';
1
+ import BaseButton from '../../button/Base.mjs';
2
+ import NeoArray from '../../util/Array.mjs';
3
+ import TextField from '../../form/field/Text.mjs';
4
+ import {resolveCallback} from '../../util/Function.mjs';
3
5
 
4
6
  /**
5
7
  * @class Neo.grid.header.Button
@@ -8,7 +10,7 @@ import NeoArray from '../../util/Array.mjs';
8
10
  class Button extends BaseButton {
9
11
  /**
10
12
  * Valid values for align
11
- * @member {String[]} cellAlignValues: ['left', 'center', 'right']
13
+ * @member {String[]} cellAlignValues: ['left','center','right']
12
14
  * @protected
13
15
  * @static
14
16
  */
@@ -30,10 +32,36 @@ class Button extends BaseButton {
30
32
  */
31
33
  baseCls: ['neo-grid-header-button'],
32
34
  /**
33
- * Alignment of the matching table cells. Valid values are left, center, right
35
+ * Alignment of the matching grid cells. Valid values are left, center, right
34
36
  * @member {String} cellAlign_='left'
35
37
  */
36
38
  cellAlign_: 'left',
39
+ /**
40
+ * @member {String|null} dataField=null
41
+ */
42
+ dataField: null,
43
+ /**
44
+ * Sort direction when clicking on an unsorted button
45
+ * @member {String} defaultSortDirection='ASC'
46
+ */
47
+ defaultSortDirection: 'ASC',
48
+ /**
49
+ * @member {Boolean} draggable_=true
50
+ */
51
+ draggable_: true,
52
+ /**
53
+ * @member {Object} editorConfig=null
54
+ */
55
+ editorConfig: null,
56
+ /**
57
+ * @member {Object} filterConfig=null
58
+ */
59
+ filterConfig: null,
60
+ /**
61
+ * @member {Neo.form.field.Base|null} filterField=null
62
+ * @protected
63
+ */
64
+ filterField: null,
37
65
  /**
38
66
  * @member {String} iconCls='fa fa-arrow-circle-up'
39
67
  */
@@ -47,19 +75,27 @@ class Button extends BaseButton {
47
75
  * @member {String|null} isSorted_=null
48
76
  * @protected
49
77
  */
50
- isSorted_: null
78
+ isSorted_: null,
79
+ /**
80
+ * @member {Function|String|null} renderer_='cellRenderer'
81
+ */
82
+ renderer_: 'cellRenderer',
83
+ /**
84
+ * Scope to execute the column renderer.
85
+ * Defaults to the matching grid.Container
86
+ * @member {Neo.core.Base|null} rendererScope=null
87
+ */
88
+ rendererScope: null,
89
+ /**
90
+ * @member {Boolean} showHeaderFilter_=false
91
+ */
92
+ showHeaderFilter_: false,
93
+ /**
94
+ * @member {Boolean} sortable_=true
95
+ */
96
+ sortable_: true
51
97
  }
52
98
 
53
- /**
54
- * Sort direction when clicking on an unsorted button
55
- * @member {String} defaultSortDirection='ASC'
56
- */
57
- defaultSortDirection = 'ASC'
58
- /**
59
- * @member {String|null} field=null
60
- */
61
- field = null
62
-
63
99
  /**
64
100
  * @param {Object} config
65
101
  */
@@ -68,46 +104,146 @@ class Button extends BaseButton {
68
104
 
69
105
  let me = this;
70
106
 
71
- me.addDomListeners({
72
- click: me.onButtonClick,
73
- scope: me
107
+ me.draggable && me.addDomListeners({
108
+ dragend : me.onDragEnd,
109
+ dragenter: me.onDragEnter,
110
+ dragleave: me.onDragLeave,
111
+ dragover : me.onDragOver,
112
+ dragstart: me.onDragStart,
113
+ drop : me.onDrop,
114
+ scope : me
74
115
  })
75
116
  }
76
117
 
77
118
  /**
78
- * Triggered after the isSorted config got changed
119
+ * Triggered after the draggable config got changed
79
120
  * @param {Boolean} value
80
121
  * @param {Boolean} oldValue
81
122
  * @protected
82
123
  */
124
+ afterSetDraggable(value, oldValue) {
125
+ let me = this;
126
+
127
+ if (value === true) {
128
+ me.getVdomRoot().draggable = true
129
+ } else {
130
+ delete me.getVdomRoot().draggable
131
+ }
132
+
133
+ me.update()
134
+ }
135
+
136
+ /**
137
+ * Triggered after the isSorted config got changed
138
+ * @param {String|null} value
139
+ * @param {String|null} oldValue
140
+ * @protected
141
+ */
83
142
  afterSetIsSorted(value, oldValue) {
84
- let me = this,
85
- {cls} = me;
143
+ let me = this,
144
+ {cls} = me,
145
+ container = me.up('grid-container');
86
146
 
87
147
  switch(value) {
88
148
  case null:
89
149
  NeoArray.add(cls, 'neo-sort-hidden');
90
- break;
150
+ break
91
151
  case 'ASC':
92
152
  NeoArray.remove(cls, 'neo-sort-desc');
93
153
  NeoArray.remove(cls, 'neo-sort-hidden');
94
154
  NeoArray.add(cls, 'neo-sort-asc');
95
- break;
155
+ break
96
156
  case 'DESC':
97
157
  NeoArray.remove(cls, 'neo-sort-asc');
98
158
  NeoArray.remove(cls, 'neo-sort-hidden');
99
159
  NeoArray.add(cls, 'neo-sort-desc');
100
- break;
160
+ break
101
161
  }
102
162
 
103
163
  me.cls = cls;
104
164
 
165
+ // testing check until all example grids have a store
166
+ if (!container || !container.store) {
167
+ return
168
+ }
169
+
105
170
  me.mounted && me.fire('sort', {
106
171
  direction: value,
107
- property : me.field
172
+ property : me.dataField
108
173
  })
109
174
  }
110
175
 
176
+ /**
177
+ * Triggered after the showHeaderFilter config got changed
178
+ * @param {Boolean} value
179
+ * @param {Boolean} oldValue
180
+ * @protected
181
+ */
182
+ afterSetShowHeaderFilter(value, oldValue) {
183
+ let me = this;
184
+
185
+ if (value) {
186
+ if (!me.filterField) {
187
+ me.filterField = Neo.create({
188
+ module : TextField,
189
+ appName : me.appName,
190
+ flag : 'filter-field',
191
+ hideLabel: true,
192
+ parentId : me.id,
193
+ style : {marginLeft: '.5em', marginRight: '.5em'},
194
+ windowId : me.windowId,
195
+
196
+ listeners: {
197
+ change : me.changeFilterValue,
198
+ operatorChange: me.changeFilterOperator,
199
+ scope : me
200
+ },
201
+
202
+ ...me.editorConfig
203
+ });
204
+
205
+ me.vdom.cn.push(me.filterField.createVdomReference())
206
+ } else {
207
+ delete me.filterField.vdom.removeDom
208
+ }
209
+ } else if (me.filterField) {
210
+ me.filterField.vdom.removeDom = true
211
+ }
212
+
213
+ me.updateDepth = 2;
214
+ me.update()
215
+ }
216
+
217
+ /**
218
+ * Triggered after the sortable config got changed
219
+ * @param {Boolean} value
220
+ * @param {Boolean} oldValue
221
+ * @protected
222
+ */
223
+ afterSetSortable(value, oldValue) {
224
+ let me = this,
225
+ {cls} = me;
226
+
227
+ if (value === true) {
228
+ NeoArray.remove(cls, 'neo-sort-hidden');
229
+
230
+ me.addDomListeners({
231
+ click: me.onButtonClick,
232
+ scope: me
233
+ })
234
+ } else {
235
+ NeoArray.add(cls, 'neo-sort-hidden');
236
+
237
+ me.removeDomListeners({
238
+ click: me.onButtonClick,
239
+ scope: me
240
+ })
241
+ }
242
+
243
+ me.cls = cls;
244
+ me.update()
245
+ }
246
+
111
247
  /**
112
248
  * Triggered before the cellAlign config gets changed
113
249
  * @param {String} value
@@ -118,6 +254,39 @@ class Button extends BaseButton {
118
254
  return this.beforeSetEnumValue(value, oldValue, 'cellAlign', 'cellAlignValues')
119
255
  }
120
256
 
257
+ /**
258
+ * Triggered before the renderer config gets changed
259
+ * @param {Function|String|null} value
260
+ * @param {Function|String|null} oldValue
261
+ * @protected
262
+ */
263
+ beforeSetRenderer(value, oldValue) {
264
+ return resolveCallback(value, this).fn
265
+ }
266
+
267
+ /**
268
+ * @param {Object} data
269
+ * @param {Neo.button.Base} data.column
270
+ * @param {String} data.dataField
271
+ * @param {Neo.grid.Container} data.gridContainer
272
+ * @param {Number} data.index
273
+ * @param {Object} data.record
274
+ * @param {Number|String} data.value
275
+ * @returns {*}
276
+ */
277
+ cellRenderer(data) {
278
+ return data.value
279
+ }
280
+
281
+ /**
282
+ *
283
+ */
284
+ destroy(...args) {
285
+ this.filterField?.destroy();
286
+
287
+ super.destroy(...args)
288
+ }
289
+
121
290
  /**
122
291
  * @protected
123
292
  */
@@ -145,26 +314,148 @@ class Button extends BaseButton {
145
314
  /**
146
315
  * @protected
147
316
  */
148
- removeSortingCss() {
317
+ onDragEnd() {
318
+ let me = this,
319
+ {style} = me;
320
+
321
+ delete style.opacity;
322
+ me.style = style
323
+ }
324
+
325
+ /**
326
+ * @protected
327
+ */
328
+ onDragEnter() {
149
329
  let me = this,
150
330
  {cls} = me;
151
331
 
152
- NeoArray.add(cls, 'neo-sort-hidden');
332
+ NeoArray.add(cls, 'neo-drag-over');
333
+ me.cls = cls
334
+ }
153
335
 
154
- me.cls = cls;
155
- me._isSorted = null
336
+ /**
337
+ * @protected
338
+ */
339
+ onDragLeave() {
340
+ let me = this,
341
+ {cls} = me;
342
+
343
+ NeoArray.remove(cls, 'neo-drag-over');
344
+ me.cls = cls
345
+ }
346
+
347
+ /**
348
+ * @param {Object} event
349
+ */
350
+ onDragOver(event) {
351
+ //console.log('onDragOver', event);
352
+ }
353
+
354
+ /**
355
+ * @protected
356
+ */
357
+ onDragStart() {
358
+ let me = this,
359
+ {style} = me;
360
+
361
+ style.opacity = 0.4;
362
+ me.style = style
156
363
  }
157
364
 
158
365
  /**
159
366
  * @param {Object} data
160
- * @param {String} data.field
161
- * @param {Number} data.index
162
- * @param {Object} data.record
163
- * @param {Number|String} data.value
164
- * @returns {*}
165
367
  */
166
- renderer(data) {
167
- return data.value
368
+ onDrop(data) {
369
+ let me = this,
370
+ headerToolbar = me.parent,
371
+ {style} = me,
372
+ gridContainer = headerToolbar.parent;
373
+
374
+ me.onDragLeave();
375
+ headerToolbar.switchItems(me.id, data.srcId);
376
+ gridContainer.createViewData(gridContainer.store.data);
377
+
378
+ style.opacity = 1;
379
+ me.style = style
380
+ }
381
+
382
+ /**
383
+ * @param {Object} data
384
+ */
385
+ changeFilterOperator(data) {
386
+ let me = this,
387
+ gridContainer = me.up('grid-container'),
388
+ store = gridContainer?.store,
389
+ operator = data.value,
390
+ filter, filters;
391
+
392
+ if (store) {
393
+ filter = store.getFilter(me.dataField);
394
+
395
+ if (!filter) {
396
+ filters = store.filters;
397
+
398
+ filters.push({
399
+ property: me.dataField,
400
+ operator,
401
+ value : null,
402
+ ...me.filterConfig
403
+ });
404
+
405
+ store.filters = filters
406
+ } else {
407
+ filter.operator = operator
408
+ }
409
+ }
410
+ }
411
+
412
+ /**
413
+ * @param {Object} data
414
+ */
415
+ changeFilterValue(data) {
416
+ let me = this,
417
+ gridContainer = me.up('grid-container'),
418
+ store = gridContainer?.store,
419
+ {value} = data,
420
+ field, filter, filters, model;
421
+
422
+ if (store) {
423
+ filter = store.getFilter(me.dataField);
424
+ model = store.model;
425
+ field = model && model.getField(me.dataField);
426
+
427
+ if (value && field.type.toLowerCase() === 'date') {
428
+ value = new Date(value)
429
+ }
430
+
431
+ if (!filter) {
432
+ filters = store.filters;
433
+
434
+ filters.push({
435
+ property: me.dataField,
436
+ operator: 'like',
437
+ value,
438
+ ...me.filterConfig
439
+ });
440
+
441
+ store.filters = filters
442
+ } else {
443
+ filter.value = value
444
+ }
445
+ }
446
+ }
447
+
448
+ /**
449
+ * @protected
450
+ */
451
+ removeSortingCss() {
452
+ let me = this,
453
+ {cls} = me;
454
+
455
+ NeoArray.add(cls, 'neo-sort-hidden');
456
+
457
+ me.cls = cls;
458
+ me._isSorted = null
168
459
  }
169
460
  }
170
461
 
@@ -1,4 +1,5 @@
1
1
  import BaseToolbar from '../../toolbar/Base.mjs';
2
+ import NeoArray from '../../util/Array.mjs';
2
3
 
3
4
  /**
4
5
  * @class Neo.grid.header.Toolbar
@@ -21,11 +22,59 @@ class Toolbar extends BaseToolbar {
21
22
  */
22
23
  baseCls: ['neo-grid-header-toolbar', 'neo-toolbar'],
23
24
  /**
24
- * @member {Object} itemDefaults={ntype:'grid-header-button'}
25
- * @protected
25
+ * @member {Object} itemDefaults={ntype: 'grid-header-button'}
26
26
  */
27
27
  itemDefaults: {
28
28
  ntype: 'grid-header-button'
29
+ },
30
+ /**
31
+ * @member {Boolean} showHeaderFilters_=false
32
+ */
33
+ showHeaderFilters_: false,
34
+ /**
35
+ * @member {Boolean} sortable=true
36
+ */
37
+ sortable: true
38
+ }
39
+
40
+ /**
41
+ * Triggered after the showHeaderFilters config got changed
42
+ * @param {Boolean} value
43
+ * @param {Boolean} oldValue
44
+ * @protected
45
+ */
46
+ afterSetShowHeaderFilters(value, oldValue) {
47
+ if (oldValue !== undefined) {
48
+ let me = this;
49
+
50
+ me.items.forEach(item => {
51
+ item.setSilent({
52
+ showHeaderFilter: value
53
+ })
54
+ });
55
+
56
+ me.updateDepth = -1; // filters can be deeply nested
57
+ me.update()
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Triggered after the sortable config got changed
63
+ * @param {Boolean} value
64
+ * @param {Boolean} oldValue
65
+ * @protected
66
+ */
67
+ afterSetSortable(value, oldValue) {
68
+ if (oldValue !== undefined) {
69
+ let me = this;
70
+
71
+ me.items.forEach(item => {
72
+ item.setSilent({
73
+ sortable: value
74
+ })
75
+ });
76
+
77
+ me.update()
29
78
  }
30
79
  }
31
80
 
@@ -41,7 +90,7 @@ class Toolbar extends BaseToolbar {
41
90
 
42
91
  let dockLeftWidth = 0,
43
92
  dockRightWidth = 0,
44
- items = me.items,
93
+ {items} = me,
45
94
  len = items.length,
46
95
  style;
47
96
 
@@ -54,7 +103,7 @@ class Toolbar extends BaseToolbar {
54
103
  if (item.width) {style.width = item.width + 'px'}
55
104
 
56
105
  if (item.dock) {
57
- item.vdom.cls.push('neo-locked');
106
+ NeoArray.add(item.vdom.cls, 'neo-locked');
58
107
 
59
108
  if (item.dock === 'left') {
60
109
  style.left = dockLeftWidth + 'px'
@@ -63,6 +112,7 @@ class Toolbar extends BaseToolbar {
63
112
  dockLeftWidth += (item.width + 1) // todo: borders fix
64
113
  }
65
114
 
115
+ item.sortable = me.sortable;
66
116
  item.wrapperStyle = style;
67
117
 
68
118
  // inverse loop direction
@@ -80,6 +130,20 @@ class Toolbar extends BaseToolbar {
80
130
 
81
131
  me.update()
82
132
  }
133
+
134
+ /**
135
+ * @param {String} dataField
136
+ * @returns {Neo.button.Base|null}
137
+ */
138
+ getColumn(dataField) {
139
+ for (const item of this.items) {
140
+ if (item.dataField === dataField) {
141
+ return item
142
+ }
143
+ }
144
+
145
+ return null
146
+ }
83
147
  }
84
148
 
85
149
  export default Neo.setupClass(Toolbar);
@@ -0,0 +1,30 @@
1
+ import BaseCellEditing from '../../table/plugin/CellEditing.mjs';
2
+
3
+ /**
4
+ * @class Neo.grid.plugin.CellEditing
5
+ * @extends Neo.table.plugin.CellEditing
6
+ */
7
+ class CellEditing extends BaseCellEditing {
8
+ static config = {
9
+ /**
10
+ * @member {String} className='Neo.grid.plugin.CellEditing'
11
+ * @protected
12
+ */
13
+ className: 'Neo.grid.plugin.CellEditing',
14
+ /**
15
+ * @member {String} ntype='plugin-grid-cell-editing'
16
+ * @protected
17
+ */
18
+ ntype: 'plugin-grid-cell-editing',
19
+ /**
20
+ * @member {String} cellCls='neo-grid-cell'
21
+ */
22
+ cellCls: 'neo-grid-cell',
23
+ /**
24
+ * @member {String[]} editorCls=['neo-grid-editor']
25
+ */
26
+ editorCls: ['neo-grid-editor']
27
+ }
28
+ }
29
+
30
+ export default Neo.setupClass(CellEditing);
@@ -541,19 +541,28 @@ class DomEvents extends Base {
541
541
  * @param {KeyboardEvent} event
542
542
  */
543
543
  onKeyDown(event) {
544
- let {target} = event,
544
+ let me = this,
545
+ {target} = event,
545
546
  {tagName} = target,
546
547
  isInput = tagName === 'INPUT' || tagName === 'TEXTAREA';
547
548
 
548
549
  if (isInput && disabledInputKeys[target.id]?.includes(event.key)) {
549
550
  event.preventDefault()
550
551
  } else {
551
- this.sendMessageToApp(this.getKeyboardEventData(event));
552
+ me.sendMessageToApp(me.getKeyboardEventData(event));
553
+
554
+ if (
555
+ isInput &&
556
+ event.key === 'Tab' &&
557
+ me.testPathInclusion(event, ['neo-table-editor'], true)
558
+ ) {
559
+ event.preventDefault()
560
+ }
552
561
 
553
562
  if (
554
563
  !isInput &&
555
564
  ['ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowUp'].includes(event.key) &&
556
- this.testPathInclusion(event, ['neo-selection'], true)
565
+ me.testPathInclusion(event, ['neo-selection'], true)
557
566
  ) {
558
567
  event.preventDefault()
559
568
  }
@@ -35,9 +35,9 @@ class Focus extends CoreBase {
35
35
  /**
36
36
  * The amount of time for a focusIn to occur after the last focusOut
37
37
  * to get combined into a focusmove event.
38
- * @member {Number} maxFocusInOutGap=10
38
+ * @member {Number} maxFocusInOutGap=50
39
39
  */
40
- maxFocusInOutGap: 10,
40
+ maxFocusInOutGap: 50,
41
41
  /**
42
42
  * The maximum amount of items stored inside the history array
43
43
  * @member {Number} maxHistoryLength=20
@@ -24,7 +24,11 @@ class Base extends CoreBase {
24
24
  * @member {Neo.component.Base} owner=null
25
25
  * @protected
26
26
  */
27
- owner: null
27
+ owner: null,
28
+ /**
29
+ * @member {Number|null} windowId_=null
30
+ */
31
+ windowId_: null
28
32
  }
29
33
 
30
34
  /**
@@ -42,6 +46,16 @@ class Base extends CoreBase {
42
46
  }
43
47
  }
44
48
 
49
+ /**
50
+ * Triggered after the windowId config got changed
51
+ * @param {Number|null} value
52
+ * @param {Number|null} oldValue
53
+ * @protected
54
+ */
55
+ afterSetWindowId(value, oldValue) {
56
+ value && Neo.currentWorker.insertThemeFiles(value, this.__proto__)
57
+ }
58
+
45
59
  /**
46
60
  * Override this method to apply changes to the owner Component when it does get mounted
47
61
  */
@@ -164,11 +164,7 @@ class Resizable extends Base {
164
164
  * @member {Object} targetNode=null
165
165
  * @protected
166
166
  */
167
- targetNode: null,
168
- /**
169
- * @member {Number|null} windowId_=null
170
- */
171
- windowId_: null
167
+ targetNode: null
172
168
  }
173
169
 
174
170
  /**
@@ -191,7 +191,11 @@ class Model extends Base {
191
191
  }
192
192
 
193
193
  me.view = component;
194
- me.addDomListener()
194
+ me.addDomListener();
195
+
196
+ component.fire('selectionModelChange', {
197
+ value: me
198
+ })
195
199
  }
196
200
 
197
201
  /**
@@ -88,7 +88,7 @@ class CellColumnModel extends CellModel {
88
88
  idArray = ColumnModel.getCellId(data.path).split('__'),
89
89
  currentColumn = idArray[2],
90
90
  {view} = me,
91
- fields = view.columns.map(c => c.field),
91
+ fields = view.columns.map(c => c.dataField),
92
92
  newIndex = (fields.indexOf(currentColumn) + step) % fields.length,
93
93
  columnNodeIds, tbodyNode;
94
94