neo.mjs 8.0.0 → 8.1.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/apps/ServiceWorker.mjs +2 -2
- package/apps/portal/index.html +1 -1
- package/apps/portal/view/about/Container.mjs +0 -2
- package/apps/portal/view/about/MemberContainer.mjs +1 -20
- package/apps/portal/view/home/FooterContainer.mjs +1 -5
- package/examples/ConfigurationViewport.mjs +37 -32
- package/examples/ServiceWorker.mjs +2 -2
- package/examples/grid/cellEditing/MainContainer.mjs +175 -0
- package/examples/grid/cellEditing/MainContainerStateProvider.mjs +62 -0
- package/examples/grid/cellEditing/MainModel.mjs +30 -0
- package/examples/grid/cellEditing/MainStore.mjs +54 -0
- package/examples/grid/cellEditing/app.mjs +6 -0
- package/examples/grid/cellEditing/index.html +11 -0
- package/examples/grid/cellEditing/neo-config.json +6 -0
- package/examples/grid/container/MainContainer.mjs +7 -6
- package/examples/grid/covid/GridContainer.mjs +36 -36
- package/examples/grid/covid/Util.mjs +1 -1
- package/examples/grid/covid/neo-config.json +6 -5
- package/examples/table/cellEditing/MainContainer.mjs +174 -0
- package/examples/table/cellEditing/MainContainerStateProvider.mjs +62 -0
- package/examples/table/cellEditing/MainModel.mjs +30 -0
- package/examples/table/cellEditing/MainStore.mjs +54 -0
- package/examples/table/cellEditing/app.mjs +6 -0
- package/examples/table/cellEditing/index.html +11 -0
- package/examples/table/cellEditing/neo-config.json +6 -0
- package/examples/table/nestedRecordFields/MainContainerStateProvider.mjs +2 -1
- package/package.json +8 -8
- package/resources/scss/src/apps/portal/home/FooterContainer.scss +11 -2
- package/resources/scss/src/examples/grid/covid/GridContainer.scss +1 -1
- package/resources/scss/src/grid/Container.scss +13 -23
- package/resources/scss/src/grid/View.scss +45 -19
- package/resources/scss/src/grid/header/Button.scss +2 -4
- package/resources/scss/src/grid/header/Toolbar.scss +1 -2
- package/resources/scss/src/grid/plugin/CellEditing.scss +11 -0
- package/resources/scss/src/table/plugin/CellEditing.scss +11 -0
- package/src/DefaultConfig.mjs +2 -2
- package/src/Xhr.mjs +1 -1
- package/src/button/Base.mjs +2 -2
- package/src/collection/Base.mjs +5 -5
- package/src/component/Base.mjs +3 -3
- package/src/component/DateSelector.mjs +15 -0
- package/src/container/Base.mjs +2 -2
- package/src/controller/Base.mjs +3 -3
- package/src/dialog/Base.mjs +2 -2
- package/src/form/field/Base.mjs +3 -6
- package/src/form/field/CheckBox.mjs +2 -2
- package/src/form/field/ComboBox.mjs +18 -2
- package/src/form/field/Date.mjs +10 -4
- package/src/form/field/FileUpload.mjs +4 -4
- package/src/form/field/Hidden.mjs +2 -2
- package/src/form/field/Text.mjs +2 -2
- package/src/grid/Container.mjs +340 -43
- package/src/grid/View.mjs +599 -124
- package/src/grid/header/Button.mjs +331 -36
- package/src/grid/header/Toolbar.mjs +111 -4
- package/src/grid/plugin/CellEditing.mjs +30 -0
- package/src/layout/Base.mjs +3 -3
- package/src/list/Base.mjs +2 -2
- package/src/list/Circle.mjs +2 -2
- package/src/list/Color.mjs +2 -2
- package/src/list/Component.mjs +2 -2
- package/src/main/DomEvents.mjs +12 -3
- package/src/manager/Base.mjs +3 -3
- package/src/manager/Component.mjs +20 -11
- package/src/manager/DomEvent.mjs +5 -6
- package/src/manager/Focus.mjs +2 -2
- package/src/manager/Instance.mjs +4 -4
- package/src/manager/Task.mjs +2 -2
- package/src/manager/Toast.mjs +3 -3
- package/src/plugin/Base.mjs +18 -4
- package/src/plugin/Popover.mjs +3 -3
- package/src/plugin/PrefixField.mjs +2 -2
- package/src/plugin/Resizable.mjs +3 -7
- package/src/plugin/Responsive.mjs +2 -2
- package/src/selection/Model.mjs +17 -2
- package/src/selection/grid/CellColumnModel.mjs +1 -1
- package/src/selection/grid/CellColumnRowModel.mjs +1 -1
- package/src/selection/grid/CellModel.mjs +1 -1
- package/src/selection/grid/ColumnModel.mjs +2 -2
- package/src/table/Container.mjs +32 -3
- package/src/table/View.mjs +9 -4
- package/src/table/header/Toolbar.mjs +15 -1
- package/src/table/plugin/CellEditing.mjs +330 -0
- package/src/toolbar/Base.mjs +2 -2
- package/src/toolbar/Breadcrumb.mjs +1 -1
- package/src/tooltip/Base.mjs +2 -2
- package/src/util/KeyNavigation.mjs +14 -8
- package/src/worker/Base.mjs +3 -3
- package/src/grid/README.md +0 -3
@@ -1,5 +1,7 @@
|
|
1
|
-
import BaseButton
|
2
|
-
import NeoArray
|
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',
|
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
|
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,31 @@ 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 {String} role='columnheader'
|
91
|
+
*/
|
92
|
+
role: 'columnheader',
|
93
|
+
/**
|
94
|
+
* @member {Boolean} showHeaderFilter_=false
|
95
|
+
*/
|
96
|
+
showHeaderFilter_: false,
|
97
|
+
/**
|
98
|
+
* @member {Boolean} sortable_=true
|
99
|
+
*/
|
100
|
+
sortable_: true
|
51
101
|
}
|
52
102
|
|
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
103
|
/**
|
64
104
|
* @param {Object} config
|
65
105
|
*/
|
@@ -68,46 +108,146 @@ class Button extends BaseButton {
|
|
68
108
|
|
69
109
|
let me = this;
|
70
110
|
|
71
|
-
me.addDomListeners({
|
72
|
-
|
73
|
-
|
111
|
+
me.draggable && me.addDomListeners({
|
112
|
+
dragend : me.onDragEnd,
|
113
|
+
dragenter: me.onDragEnter,
|
114
|
+
dragleave: me.onDragLeave,
|
115
|
+
dragover : me.onDragOver,
|
116
|
+
dragstart: me.onDragStart,
|
117
|
+
drop : me.onDrop,
|
118
|
+
scope : me
|
74
119
|
})
|
75
120
|
}
|
76
121
|
|
77
122
|
/**
|
78
|
-
* Triggered after the
|
123
|
+
* Triggered after the draggable config got changed
|
79
124
|
* @param {Boolean} value
|
80
125
|
* @param {Boolean} oldValue
|
81
126
|
* @protected
|
82
127
|
*/
|
128
|
+
afterSetDraggable(value, oldValue) {
|
129
|
+
let me = this;
|
130
|
+
|
131
|
+
if (value === true) {
|
132
|
+
me.getVdomRoot().draggable = true
|
133
|
+
} else {
|
134
|
+
delete me.getVdomRoot().draggable
|
135
|
+
}
|
136
|
+
|
137
|
+
me.update()
|
138
|
+
}
|
139
|
+
|
140
|
+
/**
|
141
|
+
* Triggered after the isSorted config got changed
|
142
|
+
* @param {String|null} value
|
143
|
+
* @param {String|null} oldValue
|
144
|
+
* @protected
|
145
|
+
*/
|
83
146
|
afterSetIsSorted(value, oldValue) {
|
84
|
-
let me
|
85
|
-
{cls}
|
147
|
+
let me = this,
|
148
|
+
{cls} = me,
|
149
|
+
container = me.up('grid-container');
|
86
150
|
|
87
151
|
switch(value) {
|
88
152
|
case null:
|
89
153
|
NeoArray.add(cls, 'neo-sort-hidden');
|
90
|
-
break
|
154
|
+
break
|
91
155
|
case 'ASC':
|
92
156
|
NeoArray.remove(cls, 'neo-sort-desc');
|
93
157
|
NeoArray.remove(cls, 'neo-sort-hidden');
|
94
158
|
NeoArray.add(cls, 'neo-sort-asc');
|
95
|
-
break
|
159
|
+
break
|
96
160
|
case 'DESC':
|
97
161
|
NeoArray.remove(cls, 'neo-sort-asc');
|
98
162
|
NeoArray.remove(cls, 'neo-sort-hidden');
|
99
163
|
NeoArray.add(cls, 'neo-sort-desc');
|
100
|
-
break
|
164
|
+
break
|
101
165
|
}
|
102
166
|
|
103
167
|
me.cls = cls;
|
104
168
|
|
169
|
+
// testing check until all example grids have a store
|
170
|
+
if (!container || !container.store) {
|
171
|
+
return
|
172
|
+
}
|
173
|
+
|
105
174
|
me.mounted && me.fire('sort', {
|
106
175
|
direction: value,
|
107
|
-
property : me.
|
176
|
+
property : me.dataField
|
108
177
|
})
|
109
178
|
}
|
110
179
|
|
180
|
+
/**
|
181
|
+
* Triggered after the showHeaderFilter config got changed
|
182
|
+
* @param {Boolean} value
|
183
|
+
* @param {Boolean} oldValue
|
184
|
+
* @protected
|
185
|
+
*/
|
186
|
+
afterSetShowHeaderFilter(value, oldValue) {
|
187
|
+
let me = this;
|
188
|
+
|
189
|
+
if (value) {
|
190
|
+
if (!me.filterField) {
|
191
|
+
me.filterField = Neo.create({
|
192
|
+
module : TextField,
|
193
|
+
appName : me.appName,
|
194
|
+
flag : 'filter-field',
|
195
|
+
hideLabel: true,
|
196
|
+
parentId : me.id,
|
197
|
+
style : {marginLeft: '.5em', marginRight: '.5em'},
|
198
|
+
windowId : me.windowId,
|
199
|
+
|
200
|
+
listeners: {
|
201
|
+
change : me.changeFilterValue,
|
202
|
+
operatorChange: me.changeFilterOperator,
|
203
|
+
scope : me
|
204
|
+
},
|
205
|
+
|
206
|
+
...me.editorConfig
|
207
|
+
});
|
208
|
+
|
209
|
+
me.vdom.cn.push(me.filterField.createVdomReference())
|
210
|
+
} else {
|
211
|
+
delete me.filterField.vdom.removeDom
|
212
|
+
}
|
213
|
+
} else if (me.filterField) {
|
214
|
+
me.filterField.vdom.removeDom = true
|
215
|
+
}
|
216
|
+
|
217
|
+
me.updateDepth = 2;
|
218
|
+
me.update()
|
219
|
+
}
|
220
|
+
|
221
|
+
/**
|
222
|
+
* Triggered after the sortable config got changed
|
223
|
+
* @param {Boolean} value
|
224
|
+
* @param {Boolean} oldValue
|
225
|
+
* @protected
|
226
|
+
*/
|
227
|
+
afterSetSortable(value, oldValue) {
|
228
|
+
let me = this,
|
229
|
+
{cls} = me;
|
230
|
+
|
231
|
+
if (value === true) {
|
232
|
+
NeoArray.remove(cls, 'neo-sort-hidden');
|
233
|
+
|
234
|
+
me.addDomListeners({
|
235
|
+
click: me.onButtonClick,
|
236
|
+
scope: me
|
237
|
+
})
|
238
|
+
} else {
|
239
|
+
NeoArray.add(cls, 'neo-sort-hidden');
|
240
|
+
|
241
|
+
me.removeDomListeners({
|
242
|
+
click: me.onButtonClick,
|
243
|
+
scope: me
|
244
|
+
})
|
245
|
+
}
|
246
|
+
|
247
|
+
me.cls = cls;
|
248
|
+
me.update()
|
249
|
+
}
|
250
|
+
|
111
251
|
/**
|
112
252
|
* Triggered before the cellAlign config gets changed
|
113
253
|
* @param {String} value
|
@@ -118,6 +258,39 @@ class Button extends BaseButton {
|
|
118
258
|
return this.beforeSetEnumValue(value, oldValue, 'cellAlign', 'cellAlignValues')
|
119
259
|
}
|
120
260
|
|
261
|
+
/**
|
262
|
+
* Triggered before the renderer config gets changed
|
263
|
+
* @param {Function|String|null} value
|
264
|
+
* @param {Function|String|null} oldValue
|
265
|
+
* @protected
|
266
|
+
*/
|
267
|
+
beforeSetRenderer(value, oldValue) {
|
268
|
+
return resolveCallback(value, this).fn
|
269
|
+
}
|
270
|
+
|
271
|
+
/**
|
272
|
+
* @param {Object} data
|
273
|
+
* @param {Neo.button.Base} data.column
|
274
|
+
* @param {String} data.dataField
|
275
|
+
* @param {Neo.grid.Container} data.gridContainer
|
276
|
+
* @param {Number} data.index
|
277
|
+
* @param {Object} data.record
|
278
|
+
* @param {Number|String} data.value
|
279
|
+
* @returns {*}
|
280
|
+
*/
|
281
|
+
cellRenderer(data) {
|
282
|
+
return data.value
|
283
|
+
}
|
284
|
+
|
285
|
+
/**
|
286
|
+
*
|
287
|
+
*/
|
288
|
+
destroy(...args) {
|
289
|
+
this.filterField?.destroy();
|
290
|
+
|
291
|
+
super.destroy(...args)
|
292
|
+
}
|
293
|
+
|
121
294
|
/**
|
122
295
|
* @protected
|
123
296
|
*/
|
@@ -145,26 +318,148 @@ class Button extends BaseButton {
|
|
145
318
|
/**
|
146
319
|
* @protected
|
147
320
|
*/
|
148
|
-
|
321
|
+
onDragEnd() {
|
322
|
+
let me = this,
|
323
|
+
{style} = me;
|
324
|
+
|
325
|
+
delete style.opacity;
|
326
|
+
me.style = style
|
327
|
+
}
|
328
|
+
|
329
|
+
/**
|
330
|
+
* @protected
|
331
|
+
*/
|
332
|
+
onDragEnter() {
|
149
333
|
let me = this,
|
150
334
|
{cls} = me;
|
151
335
|
|
152
|
-
NeoArray.add(cls, 'neo-
|
336
|
+
NeoArray.add(cls, 'neo-drag-over');
|
337
|
+
me.cls = cls
|
338
|
+
}
|
153
339
|
|
154
|
-
|
155
|
-
|
340
|
+
/**
|
341
|
+
* @protected
|
342
|
+
*/
|
343
|
+
onDragLeave() {
|
344
|
+
let me = this,
|
345
|
+
{cls} = me;
|
346
|
+
|
347
|
+
NeoArray.remove(cls, 'neo-drag-over');
|
348
|
+
me.cls = cls
|
349
|
+
}
|
350
|
+
|
351
|
+
/**
|
352
|
+
* @param {Object} event
|
353
|
+
*/
|
354
|
+
onDragOver(event) {
|
355
|
+
//console.log('onDragOver', event);
|
356
|
+
}
|
357
|
+
|
358
|
+
/**
|
359
|
+
* @protected
|
360
|
+
*/
|
361
|
+
onDragStart() {
|
362
|
+
let me = this,
|
363
|
+
{style} = me;
|
364
|
+
|
365
|
+
style.opacity = 0.4;
|
366
|
+
me.style = style
|
156
367
|
}
|
157
368
|
|
158
369
|
/**
|
159
370
|
* @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
371
|
*/
|
166
|
-
|
167
|
-
|
372
|
+
onDrop(data) {
|
373
|
+
let me = this,
|
374
|
+
headerToolbar = me.parent,
|
375
|
+
{style} = me,
|
376
|
+
gridContainer = headerToolbar.parent;
|
377
|
+
|
378
|
+
me.onDragLeave();
|
379
|
+
headerToolbar.switchItems(me.id, data.srcId);
|
380
|
+
gridContainer.createViewData(gridContainer.store.data);
|
381
|
+
|
382
|
+
style.opacity = 1;
|
383
|
+
me.style = style
|
384
|
+
}
|
385
|
+
|
386
|
+
/**
|
387
|
+
* @param {Object} data
|
388
|
+
*/
|
389
|
+
changeFilterOperator(data) {
|
390
|
+
let me = this,
|
391
|
+
gridContainer = me.up('grid-container'),
|
392
|
+
store = gridContainer?.store,
|
393
|
+
operator = data.value,
|
394
|
+
filter, filters;
|
395
|
+
|
396
|
+
if (store) {
|
397
|
+
filter = store.getFilter(me.dataField);
|
398
|
+
|
399
|
+
if (!filter) {
|
400
|
+
filters = store.filters;
|
401
|
+
|
402
|
+
filters.push({
|
403
|
+
property: me.dataField,
|
404
|
+
operator,
|
405
|
+
value : null,
|
406
|
+
...me.filterConfig
|
407
|
+
});
|
408
|
+
|
409
|
+
store.filters = filters
|
410
|
+
} else {
|
411
|
+
filter.operator = operator
|
412
|
+
}
|
413
|
+
}
|
414
|
+
}
|
415
|
+
|
416
|
+
/**
|
417
|
+
* @param {Object} data
|
418
|
+
*/
|
419
|
+
changeFilterValue(data) {
|
420
|
+
let me = this,
|
421
|
+
gridContainer = me.up('grid-container'),
|
422
|
+
store = gridContainer?.store,
|
423
|
+
{value} = data,
|
424
|
+
field, filter, filters, model;
|
425
|
+
|
426
|
+
if (store) {
|
427
|
+
filter = store.getFilter(me.dataField);
|
428
|
+
model = store.model;
|
429
|
+
field = model && model.getField(me.dataField);
|
430
|
+
|
431
|
+
if (value && field.type.toLowerCase() === 'date') {
|
432
|
+
value = new Date(value)
|
433
|
+
}
|
434
|
+
|
435
|
+
if (!filter) {
|
436
|
+
filters = store.filters;
|
437
|
+
|
438
|
+
filters.push({
|
439
|
+
property: me.dataField,
|
440
|
+
operator: 'like',
|
441
|
+
value,
|
442
|
+
...me.filterConfig
|
443
|
+
});
|
444
|
+
|
445
|
+
store.filters = filters
|
446
|
+
} else {
|
447
|
+
filter.value = value
|
448
|
+
}
|
449
|
+
}
|
450
|
+
}
|
451
|
+
|
452
|
+
/**
|
453
|
+
* @protected
|
454
|
+
*/
|
455
|
+
removeSortingCss() {
|
456
|
+
let me = this,
|
457
|
+
{cls} = me;
|
458
|
+
|
459
|
+
NeoArray.add(cls, 'neo-sort-hidden');
|
460
|
+
|
461
|
+
me.cls = cls;
|
462
|
+
me._isSorted = null
|
168
463
|
}
|
169
464
|
}
|
170
465
|
|
@@ -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,83 @@ class Toolbar extends BaseToolbar {
|
|
21
22
|
*/
|
22
23
|
baseCls: ['neo-grid-header-toolbar', 'neo-toolbar'],
|
23
24
|
/**
|
24
|
-
* @member {
|
25
|
-
|
25
|
+
* @member {Neo.grid.Container|null} gridContainer=null
|
26
|
+
*/
|
27
|
+
gridContainer: null,
|
28
|
+
/**
|
29
|
+
* @member {Object} itemDefaults={ntype: 'grid-header-button'}
|
26
30
|
*/
|
27
31
|
itemDefaults: {
|
28
32
|
ntype: 'grid-header-button'
|
33
|
+
},
|
34
|
+
/**
|
35
|
+
* @member {String} role='row'
|
36
|
+
*/
|
37
|
+
role: 'row',
|
38
|
+
/**
|
39
|
+
* @member {Boolean} showHeaderFilters_=false
|
40
|
+
*/
|
41
|
+
showHeaderFilters_: false,
|
42
|
+
/**
|
43
|
+
* @member {Boolean} sortable=true
|
44
|
+
*/
|
45
|
+
sortable: true,
|
46
|
+
/**
|
47
|
+
* @member {Object} _vdom
|
48
|
+
*/
|
49
|
+
_vdom:
|
50
|
+
{'aria-rowindex': 1, cn: [{cn: []}]}
|
51
|
+
}
|
52
|
+
|
53
|
+
/**
|
54
|
+
* Triggered after the mounted config got changed
|
55
|
+
* @param {Boolean} value
|
56
|
+
* @param {Boolean} oldValue
|
57
|
+
* @protected
|
58
|
+
*/
|
59
|
+
afterSetMounted(value, oldValue) {
|
60
|
+
super.afterSetMounted(value, oldValue);
|
61
|
+
value && this.passSizeToView()
|
62
|
+
}
|
63
|
+
|
64
|
+
/**
|
65
|
+
* Triggered after the showHeaderFilters config got changed
|
66
|
+
* @param {Boolean} value
|
67
|
+
* @param {Boolean} oldValue
|
68
|
+
* @protected
|
69
|
+
*/
|
70
|
+
afterSetShowHeaderFilters(value, oldValue) {
|
71
|
+
if (oldValue !== undefined) {
|
72
|
+
let me = this;
|
73
|
+
|
74
|
+
me.items.forEach(item => {
|
75
|
+
item.setSilent({
|
76
|
+
showHeaderFilter: value
|
77
|
+
})
|
78
|
+
});
|
79
|
+
|
80
|
+
me.updateDepth = -1; // filters can be deeply nested
|
81
|
+
me.update()
|
82
|
+
}
|
83
|
+
}
|
84
|
+
|
85
|
+
/**
|
86
|
+
* Triggered after the sortable config got changed
|
87
|
+
* @param {Boolean} value
|
88
|
+
* @param {Boolean} oldValue
|
89
|
+
* @protected
|
90
|
+
*/
|
91
|
+
afterSetSortable(value, oldValue) {
|
92
|
+
if (oldValue !== undefined) {
|
93
|
+
let me = this;
|
94
|
+
|
95
|
+
me.items.forEach(item => {
|
96
|
+
item.setSilent({
|
97
|
+
sortable: value
|
98
|
+
})
|
99
|
+
});
|
100
|
+
|
101
|
+
me.update()
|
29
102
|
}
|
30
103
|
}
|
31
104
|
|
@@ -41,11 +114,13 @@ class Toolbar extends BaseToolbar {
|
|
41
114
|
|
42
115
|
let dockLeftWidth = 0,
|
43
116
|
dockRightWidth = 0,
|
44
|
-
items
|
117
|
+
{items} = me,
|
45
118
|
len = items.length,
|
46
119
|
style;
|
47
120
|
|
48
121
|
items.forEach((item, index) => {
|
122
|
+
item.vdom['aria-colindex'] = index + 1; // 1 based
|
123
|
+
|
49
124
|
style = item.wrapperStyle;
|
50
125
|
|
51
126
|
// todo: only add px if number
|
@@ -54,7 +129,7 @@ class Toolbar extends BaseToolbar {
|
|
54
129
|
if (item.width) {style.width = item.width + 'px'}
|
55
130
|
|
56
131
|
if (item.dock) {
|
57
|
-
item.vdom.cls
|
132
|
+
NeoArray.add(item.vdom.cls, 'neo-locked');
|
58
133
|
|
59
134
|
if (item.dock === 'left') {
|
60
135
|
style.left = dockLeftWidth + 'px'
|
@@ -63,6 +138,7 @@ class Toolbar extends BaseToolbar {
|
|
63
138
|
dockLeftWidth += (item.width + 1) // todo: borders fix
|
64
139
|
}
|
65
140
|
|
141
|
+
item.sortable = me.sortable;
|
66
142
|
item.wrapperStyle = style;
|
67
143
|
|
68
144
|
// inverse loop direction
|
@@ -80,6 +156,37 @@ class Toolbar extends BaseToolbar {
|
|
80
156
|
|
81
157
|
me.update()
|
82
158
|
}
|
159
|
+
|
160
|
+
/**
|
161
|
+
* @param {String} dataField
|
162
|
+
* @returns {Neo.button.Base|null}
|
163
|
+
*/
|
164
|
+
getColumn(dataField) {
|
165
|
+
for (const item of this.items) {
|
166
|
+
if (item.dataField === dataField) {
|
167
|
+
return item
|
168
|
+
}
|
169
|
+
}
|
170
|
+
|
171
|
+
return null
|
172
|
+
}
|
173
|
+
|
174
|
+
|
175
|
+
|
176
|
+
/**
|
177
|
+
* @param {Boolean} silent=false
|
178
|
+
* @returns {Promise<void>}
|
179
|
+
*/
|
180
|
+
async passSizeToView(silent=false) {
|
181
|
+
let me = this,
|
182
|
+
rects = await me.getDomRect(me.items.map(item => item.id)),
|
183
|
+
lastItem = rects[rects.length - 1];
|
184
|
+
|
185
|
+
me.gridContainer.view[silent ? 'setSilent' : 'set']({
|
186
|
+
availableWidth : lastItem.x + lastItem.width - rects[0].x,
|
187
|
+
columnPositions: rects.map(item => ({width: item.width, x: item.x - rects[0].x}))
|
188
|
+
})
|
189
|
+
}
|
83
190
|
}
|
84
191
|
|
85
192
|
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);
|
package/src/layout/Base.mjs
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import
|
1
|
+
import Base from '../core/Base.mjs';
|
2
2
|
import NeoArray from '../util/Array.mjs';
|
3
3
|
|
4
4
|
/**
|
@@ -7,7 +7,7 @@ import NeoArray from '../util/Array.mjs';
|
|
7
7
|
* @class Neo.layout.Base
|
8
8
|
* @extends Neo.core.Base
|
9
9
|
*/
|
10
|
-
class
|
10
|
+
class Layout extends Base {
|
11
11
|
static config = {
|
12
12
|
/**
|
13
13
|
* @member {String} className='Neo.layout.Base'
|
@@ -156,4 +156,4 @@ class Base extends CoreBase {
|
|
156
156
|
}
|
157
157
|
}
|
158
158
|
|
159
|
-
export default Neo.setupClass(
|
159
|
+
export default Neo.setupClass(Layout);
|
package/src/list/Base.mjs
CHANGED
@@ -8,7 +8,7 @@ import Store from '../data/Store.mjs';
|
|
8
8
|
* @class Neo.list.Base
|
9
9
|
* @extends Neo.component.Base
|
10
10
|
*/
|
11
|
-
class
|
11
|
+
class List extends Component {
|
12
12
|
static config = {
|
13
13
|
/**
|
14
14
|
* @member {String} className='Neo.list.Base'
|
@@ -848,4 +848,4 @@ class Base extends Component {
|
|
848
848
|
}
|
849
849
|
}
|
850
850
|
|
851
|
-
export default Neo.setupClass(
|
851
|
+
export default Neo.setupClass(List);
|
package/src/list/Circle.mjs
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
import CircleComponent from '../component/Circle.mjs';
|
2
|
-
import
|
2
|
+
import ComponentList from './Component.mjs';
|
3
3
|
|
4
4
|
/**
|
5
5
|
* @class Neo.list.Circle
|
6
6
|
* @extends Neo.list.Component
|
7
7
|
*/
|
8
|
-
class Circle extends
|
8
|
+
class Circle extends ComponentList {
|
9
9
|
static config = {
|
10
10
|
/**
|
11
11
|
* @member {String} className='Neo.list.Circle'
|
package/src/list/Color.mjs
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
import
|
1
|
+
import List from './Base.mjs';
|
2
2
|
|
3
3
|
/**
|
4
4
|
* @class Neo.list.Color
|
5
5
|
* @extends Neo.list.Base
|
6
6
|
*/
|
7
|
-
class Color extends
|
7
|
+
class Color extends List {
|
8
8
|
static config = {
|
9
9
|
/**
|
10
10
|
* @member {String} className='Neo.list.Color'
|