neo.mjs 4.1.0 → 4.2.0

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 (44) hide show
  1. package/buildScripts/addConfig.mjs +398 -0
  2. package/buildScripts/createApp.mjs +3 -3
  3. package/buildScripts/createClass.mjs +7 -7
  4. package/examples/grid/covid/GridContainer.mjs +113 -0
  5. package/examples/grid/covid/GridContainerController.mjs +62 -0
  6. package/examples/grid/covid/MainContainer.mjs +36 -0
  7. package/examples/grid/covid/Model.mjs +65 -0
  8. package/examples/grid/covid/Store.mjs +35 -0
  9. package/examples/grid/covid/Util.mjs +165 -0
  10. package/examples/grid/covid/app.mjs +6 -0
  11. package/examples/grid/covid/index.html +11 -0
  12. package/examples/grid/covid/neo-config.json +8 -0
  13. package/package.json +5 -4
  14. package/resources/scss/src/examples/grid/covid/GridContainer.scss +21 -0
  15. package/resources/scss/src/grid/Container.scss +6 -34
  16. package/resources/scss/src/grid/View.scss +73 -1
  17. package/resources/scss/src/grid/header/Button.scss +67 -7
  18. package/resources/scss/src/grid/header/Toolbar.scss +6 -2
  19. package/resources/scss/src/table/View.scss +2 -2
  20. package/resources/scss/theme-dark/grid/Container.scss +17 -0
  21. package/resources/scss/theme-dark/grid/View.scss +29 -0
  22. package/resources/scss/theme-dark/grid/_all.scss +3 -0
  23. package/resources/scss/theme-dark/grid/header/Button.scss +15 -0
  24. package/resources/scss/theme-dark/grid/header/Toolbar.scss +0 -0
  25. package/resources/scss/theme-dark/grid/header/_all.scss +2 -0
  26. package/resources/scss/theme-light/grid/Container.scss +17 -0
  27. package/resources/scss/theme-light/grid/View.scss +29 -0
  28. package/resources/scss/theme-light/grid/_all.scss +3 -0
  29. package/resources/scss/theme-light/grid/header/Button.scss +15 -0
  30. package/resources/scss/theme-light/grid/header/Toolbar.scss +0 -0
  31. package/resources/scss/theme-light/grid/header/_all.scss +2 -0
  32. package/src/grid/Container.mjs +252 -83
  33. package/src/grid/View.mjs +206 -11
  34. package/src/grid/header/Button.mjs +127 -2
  35. package/src/grid/header/Toolbar.mjs +42 -54
  36. package/src/selection/grid/CellColumnModel.mjs +122 -0
  37. package/src/selection/grid/CellColumnRowModel.mjs +122 -0
  38. package/src/selection/grid/CellModel.mjs +184 -0
  39. package/src/selection/grid/CellRowModel.mjs +164 -0
  40. package/src/selection/grid/ColumnModel.mjs +185 -0
  41. package/src/selection/grid/RowModel.mjs +188 -0
  42. package/src/selection/table/RowModel.mjs +26 -32
  43. package/src/table/Container.mjs +9 -13
  44. package/src/table/header/Toolbar.mjs +1 -1
@@ -0,0 +1,188 @@
1
+ import Model from '../Model.mjs';
2
+ import VDomUtil from '../../util/VDom.mjs';
3
+
4
+ /**
5
+ * @class Neo.selection.grid.RowModel
6
+ * @extends Neo.selection.Model
7
+ */
8
+ class RowModel extends Model {
9
+ static getConfig() {return {
10
+ /**
11
+ * @member {String} className='Neo.selection.grid.RowModel'
12
+ * @protected
13
+ */
14
+ className: 'Neo.selection.grid.RowModel',
15
+ /**
16
+ * @member {String} ntype='selection-grid-rowmodel'
17
+ * @protected
18
+ */
19
+ ntype: 'selection-grid-rowmodel',
20
+ /**
21
+ * @member {String} cls='selection-rowmodel'
22
+ * @protected
23
+ */
24
+ cls: 'neo-selection-rowmodel'
25
+ }}
26
+
27
+ /**
28
+ *
29
+ */
30
+ addDomListener() {
31
+ let me = this,
32
+ view = me.view,
33
+ domListeners = view.domListeners;
34
+
35
+ domListeners.push({
36
+ click : me.onRowClick,
37
+ delegate: '.neo-grid-row',
38
+ scope : me
39
+ });
40
+
41
+ view.domListeners = domListeners;
42
+ }
43
+
44
+ /**
45
+ * Finds the matching table row for a given row index
46
+ * @param {Number} index row index
47
+ * @returns {String|null} The table row node id
48
+ */
49
+ getRowId(index) {
50
+ if (index < 0 || this.view.store.getCount() < index) {
51
+ return null;
52
+ }
53
+
54
+ return this.view.vdom.cn[0].cn[1].cn[index].id;
55
+ }
56
+
57
+ /**
58
+ * Finds the matching table row for a given event path
59
+ * @param {Object} path The event path
60
+ * @returns {Object|null} The node containing the table row class or null
61
+ * @protected
62
+ */
63
+ static getRowNode(path) {
64
+ let i = 0,
65
+ len = path.length,
66
+ node = null;
67
+
68
+ for (; i < len; i++) {
69
+ if (path[i].cls.includes('neo-grid-row')) {
70
+ node = path[i];
71
+ }
72
+ }
73
+
74
+ return node;
75
+ }
76
+
77
+ /**
78
+ * @param {Object} data
79
+ */
80
+ onKeyDownDown(data) {
81
+ this.onNavKeyRow(data, 1);
82
+ }
83
+
84
+ /**
85
+ * @param {Object} data
86
+ */
87
+ onKeyDownUp(data) {
88
+ this.onNavKeyRow(data, -1);
89
+ }
90
+
91
+ /**
92
+ * @param {Object} data
93
+ * @param {Number} step
94
+ */
95
+ onNavKeyRow(data, step) {
96
+ let me = this,
97
+ node = RowModel.getRowNode(data.path),
98
+ view = me.view,
99
+ store = view.store,
100
+ vdomNode = VDomUtil.findVdomChild(view.vdom, node.id),
101
+ newIndex = (vdomNode.index + step) % store.getCount(),
102
+ parentNode = vdomNode.parentNode,
103
+ id;
104
+
105
+ while (newIndex < 0) {
106
+ newIndex += store.getCount();
107
+ }
108
+
109
+ id = parentNode.cn[newIndex].id;
110
+
111
+ if (id) {
112
+ me.select(id);
113
+ view.focus(id);
114
+
115
+ view.fire('select', {
116
+ record: store.getAt(newIndex)
117
+ });
118
+ }
119
+ }
120
+
121
+ /**
122
+ * @param {Object} data
123
+ */
124
+ onRowClick(data) {
125
+ let me = this,
126
+ node = RowModel.getRowNode(data.path),
127
+ id = node?.id,
128
+ view = me.view,
129
+ isSelected, record;
130
+
131
+ if (id) {
132
+ me.toggleSelection(id);
133
+
134
+ isSelected = me.isSelected(id);
135
+ record = view.store.getAt(VDomUtil.findVdomChild(view.vdom, id).index);
136
+
137
+ !isSelected && view.onDeselect?.(record);
138
+
139
+ view.fire(isSelected ? 'select' : 'deselect', {
140
+ record
141
+ });
142
+ }
143
+ }
144
+
145
+ /**
146
+ * @param {Neo.component.Base} component
147
+ */
148
+ register(component) {
149
+ super.register(component);
150
+
151
+ let id = this.id,
152
+ view = this.view;
153
+
154
+ view.keys?._keys.push({
155
+ fn : 'onKeyDownDown',
156
+ key : 'Down',
157
+ scope: id
158
+ }, {
159
+ fn : 'onKeyDownUp',
160
+ key : 'Up',
161
+ scope: id
162
+ });
163
+ }
164
+
165
+ /**
166
+ *
167
+ */
168
+ unregister() {
169
+ let id = this.id,
170
+ view = this.view;
171
+
172
+ view.keys?.removeKeys([{
173
+ fn : 'onKeyDownDown',
174
+ key : 'Down',
175
+ scope: id
176
+ }, {
177
+ fn : 'onKeyDownUp',
178
+ key : 'Up',
179
+ scope: id
180
+ }]);
181
+
182
+ super.unregister();
183
+ }
184
+ }
185
+
186
+ Neo.applyClassConfig(RowModel);
187
+
188
+ export default RowModel;
@@ -124,7 +124,7 @@ class RowModel extends Model {
124
124
  onRowClick(data) {
125
125
  let me = this,
126
126
  node = RowModel.getRowNode(data.path),
127
- id = node && node.id,
127
+ id = node?.id,
128
128
  view = me.view,
129
129
  isSelected, record;
130
130
 
@@ -137,7 +137,7 @@ class RowModel extends Model {
137
137
  !isSelected && view.onDeselect?.(record);
138
138
 
139
139
  view.fire(isSelected ? 'select' : 'deselect', {
140
- record: record
140
+ record
141
141
  });
142
142
  }
143
143
  }
@@ -148,42 +148,36 @@ class RowModel extends Model {
148
148
  register(component) {
149
149
  super.register(component);
150
150
 
151
- let me = this,
152
- id = me.id,
153
- view = me.view;
154
-
155
- if (view.keys) {
156
- view.keys._keys.push({
157
- fn : 'onKeyDownDown',
158
- key : 'Down',
159
- scope: id
160
- }, {
161
- fn : 'onKeyDownUp',
162
- key : 'Up',
163
- scope: id
164
- });
165
- }
151
+ let id = this.id,
152
+ view = this.view;
153
+
154
+ view.keys?._keys.push({
155
+ fn : 'onKeyDownDown',
156
+ key : 'Down',
157
+ scope: id
158
+ }, {
159
+ fn : 'onKeyDownUp',
160
+ key : 'Up',
161
+ scope: id
162
+ });
166
163
  }
167
164
 
168
165
  /**
169
166
  *
170
167
  */
171
168
  unregister() {
172
- let me = this,
173
- id = me.id,
174
- view = me.view;
175
-
176
- if (view.keys) {
177
- view.keys.removeKeys([{
178
- fn : 'onKeyDownDown',
179
- key : 'Down',
180
- scope: id
181
- }, {
182
- fn : 'onKeyDownUp',
183
- key : 'Up',
184
- scope: id
185
- }]);
186
- }
169
+ let id = this.id,
170
+ view = this.view;
171
+
172
+ view.keys?.removeKeys([{
173
+ fn : 'onKeyDownDown',
174
+ key : 'Down',
175
+ scope: id
176
+ }, {
177
+ fn : 'onKeyDownUp',
178
+ key : 'Up',
179
+ scope: id
180
+ }]);
187
181
 
188
182
  super.unregister();
189
183
  }
@@ -5,7 +5,7 @@ import NeoArray from '../util/Array.mjs';
5
5
  import RowModel from '../selection/table/RowModel.mjs';
6
6
  import Store from '../data/Store.mjs';
7
7
  import View from './View.mjs';
8
- import * as header from './header/_export.mjs';
8
+ import * as header from './header/_export.mjs';
9
9
 
10
10
  /**
11
11
  * @class Neo.table.Container
@@ -39,11 +39,11 @@ class Container extends BaseContainer {
39
39
  */
40
40
  createRandomData: false,
41
41
  /**
42
- * @member {Array} cls=['neo-table-container']
42
+ * @member {String[]} cls=['neo-table-container']
43
43
  */
44
44
  cls: ['neo-table-container'],
45
45
  /**
46
- * @member {Array} columns_=[]
46
+ * @member {Object[]} columns_=[]
47
47
  */
48
48
  columns_: [],
49
49
  /**
@@ -147,9 +147,7 @@ class Container extends BaseContainer {
147
147
  * @protected
148
148
  */
149
149
  afterSetSelectionModel(value, oldValue) {
150
- if (this.rendered) {
151
- value.register(this);
152
- }
150
+ this.rendered && value.register(this);
153
151
  }
154
152
 
155
153
  /**
@@ -199,8 +197,8 @@ class Container extends BaseContainer {
199
197
 
200
198
  /**
201
199
  * Triggered before the columns config gets changed.
202
- * @param {Array} value
203
- * @param {Array} oldValue
200
+ * @param {Object[]} value
201
+ * @param {Object[]} oldValue
204
202
  * @protected
205
203
  */
206
204
  beforeSetColumns(value, oldValue) {
@@ -294,12 +292,12 @@ class Container extends BaseContainer {
294
292
  }
295
293
 
296
294
  columns.forEach(column => {
295
+ columnDefaults && Neo.assignDefaults(column, columnDefaults);
296
+
297
297
  if (column.dock && !column.width) {
298
298
  Neo.logError('Attempting to create a docked column without a defined width', column, me.id);
299
299
  }
300
300
 
301
- columnDefaults && Neo.assignDefaults(column, columnDefaults);
302
-
303
301
  if (sorters?.[0]) {
304
302
  if (column.dataField === sorters[0].property) {
305
303
  column.isSorted = sorters[0].direction;
@@ -391,9 +389,7 @@ class Container extends BaseContainer {
391
389
 
392
390
  let me = this;
393
391
 
394
- if (me.selectionModel) {
395
- me.selectionModel.register(me);
396
- }
392
+ me.selectionModel?.register(me);
397
393
 
398
394
  if (me.createRandomData) {
399
395
  // todo: if mounting apply after mount
@@ -35,7 +35,7 @@ class Toolbar extends BaseToolbar {
35
35
  */
36
36
  showHeaderFilters_: false,
37
37
  /**
38
- * @member {Object} _vdom={tag: 'thead',cn : [{tag: 'tr',cn : []}]}
38
+ * @member {Object} _vdom={tag:'thead',cn:[{tag:'tr',cn:[]}]}
39
39
  */
40
40
  _vdom:
41
41
  {tag: 'thead', cn: [