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.
- package/buildScripts/addConfig.mjs +398 -0
- package/buildScripts/createApp.mjs +3 -3
- package/buildScripts/createClass.mjs +7 -7
- package/examples/grid/covid/GridContainer.mjs +113 -0
- package/examples/grid/covid/GridContainerController.mjs +62 -0
- package/examples/grid/covid/MainContainer.mjs +36 -0
- package/examples/grid/covid/Model.mjs +65 -0
- package/examples/grid/covid/Store.mjs +35 -0
- package/examples/grid/covid/Util.mjs +165 -0
- package/examples/grid/covid/app.mjs +6 -0
- package/examples/grid/covid/index.html +11 -0
- package/examples/grid/covid/neo-config.json +8 -0
- package/package.json +5 -4
- package/resources/scss/src/examples/grid/covid/GridContainer.scss +21 -0
- package/resources/scss/src/grid/Container.scss +6 -34
- package/resources/scss/src/grid/View.scss +73 -1
- package/resources/scss/src/grid/header/Button.scss +67 -7
- package/resources/scss/src/grid/header/Toolbar.scss +6 -2
- package/resources/scss/src/table/View.scss +2 -2
- package/resources/scss/theme-dark/grid/Container.scss +17 -0
- package/resources/scss/theme-dark/grid/View.scss +29 -0
- package/resources/scss/theme-dark/grid/_all.scss +3 -0
- package/resources/scss/theme-dark/grid/header/Button.scss +15 -0
- package/resources/scss/theme-dark/grid/header/Toolbar.scss +0 -0
- package/resources/scss/theme-dark/grid/header/_all.scss +2 -0
- package/resources/scss/theme-light/grid/Container.scss +17 -0
- package/resources/scss/theme-light/grid/View.scss +29 -0
- package/resources/scss/theme-light/grid/_all.scss +3 -0
- package/resources/scss/theme-light/grid/header/Button.scss +15 -0
- package/resources/scss/theme-light/grid/header/Toolbar.scss +0 -0
- package/resources/scss/theme-light/grid/header/_all.scss +2 -0
- package/src/grid/Container.mjs +252 -83
- package/src/grid/View.mjs +206 -11
- package/src/grid/header/Button.mjs +127 -2
- package/src/grid/header/Toolbar.mjs +42 -54
- package/src/selection/grid/CellColumnModel.mjs +122 -0
- package/src/selection/grid/CellColumnRowModel.mjs +122 -0
- package/src/selection/grid/CellModel.mjs +184 -0
- package/src/selection/grid/CellRowModel.mjs +164 -0
- package/src/selection/grid/ColumnModel.mjs +185 -0
- package/src/selection/grid/RowModel.mjs +188 -0
- package/src/selection/table/RowModel.mjs +26 -32
- package/src/table/Container.mjs +9 -13
- 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
|
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
|
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
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
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
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
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
|
}
|
package/src/table/Container.mjs
CHANGED
@@ -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
|
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 {
|
42
|
+
* @member {String[]} cls=['neo-table-container']
|
43
43
|
*/
|
44
44
|
cls: ['neo-table-container'],
|
45
45
|
/**
|
46
|
-
* @member {
|
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
|
-
|
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 {
|
203
|
-
* @param {
|
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
|
-
|
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
|