neo.mjs 8.0.1 → 8.1.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.
- package/apps/ServiceWorker.mjs +2 -2
- package/apps/portal/index.html +1 -1
- package/apps/portal/view/home/FooterContainer.mjs +1 -1
- package/examples/ServiceWorker.mjs +2 -2
- package/examples/grid/covid/neo-config.json +6 -5
- package/package.json +5 -5
- package/resources/scss/src/examples/grid/covid/GridContainer.scss +1 -1
- package/resources/scss/src/grid/Container.scss +13 -10
- 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 +2 -3
- 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/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 +2 -2
- package/src/form/field/CheckBox.mjs +2 -2
- 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 +156 -62
- package/src/grid/View.mjs +396 -74
- package/src/grid/header/Button.mjs +6 -2
- package/src/grid/header/Toolbar.mjs +48 -4
- 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/manager/Base.mjs +3 -3
- package/src/manager/Component.mjs +20 -11
- package/src/manager/DomEvent.mjs +5 -6
- 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 +3 -3
- package/src/plugin/Popover.mjs +3 -3
- package/src/plugin/PrefixField.mjs +2 -2
- package/src/plugin/Resizable.mjs +2 -2
- package/src/plugin/Responsive.mjs +2 -2
- package/src/selection/Model.mjs +12 -1
- package/src/toolbar/Base.mjs +2 -2
- package/src/toolbar/Breadcrumb.mjs +1 -1
- package/src/tooltip/Base.mjs +2 -2
- package/src/worker/Base.mjs +3 -3
- package/src/grid/README.md +0 -3
package/src/grid/Container.mjs
CHANGED
@@ -1,17 +1,24 @@
|
|
1
1
|
import BaseContainer from '../container/Base.mjs';
|
2
2
|
import ClassSystemUtil from '../util/ClassSystem.mjs';
|
3
|
-
import
|
4
|
-
import NeoArray from '../util/Array.mjs';
|
3
|
+
import GridView from './View.mjs';
|
5
4
|
import RowModel from '../selection/grid/RowModel.mjs';
|
6
5
|
import Store from '../data/Store.mjs';
|
7
|
-
import View from './View.mjs';
|
8
6
|
import * as header from './header/_export.mjs';
|
9
7
|
|
10
8
|
/**
|
11
9
|
* @class Neo.grid.Container
|
12
10
|
* @extends Neo.container.Base
|
13
11
|
*/
|
14
|
-
class
|
12
|
+
class GridContainer extends BaseContainer {
|
13
|
+
/**
|
14
|
+
* @member {Object} delayable
|
15
|
+
* @protected
|
16
|
+
* @static
|
17
|
+
*/
|
18
|
+
static delayable = {
|
19
|
+
onResize: {type: 'buffer', timer: 300}
|
20
|
+
}
|
21
|
+
|
15
22
|
static config = {
|
16
23
|
/**
|
17
24
|
* @member {String} className='Neo.grid.Container'
|
@@ -25,10 +32,11 @@ class Container extends BaseContainer {
|
|
25
32
|
ntype: 'grid-container',
|
26
33
|
/**
|
27
34
|
* @member {String[]} baseCls=['neo-grid-container']
|
35
|
+
* @protected
|
28
36
|
*/
|
29
37
|
baseCls: ['neo-grid-container'],
|
30
38
|
/**
|
31
|
-
* true uses
|
39
|
+
* true uses grid.plugin.CellEditing
|
32
40
|
* @member {Boolean} cellEditing_=false
|
33
41
|
*/
|
34
42
|
cellEditing_: false,
|
@@ -42,7 +50,7 @@ class Container extends BaseContainer {
|
|
42
50
|
*/
|
43
51
|
columns_: [],
|
44
52
|
/**
|
45
|
-
* Configs for Neo.
|
53
|
+
* Configs for Neo.grid.header.Toolbar
|
46
54
|
* @member {Object|null} [headerToolbarConfig=null]
|
47
55
|
*/
|
48
56
|
headerToolbarConfig: null,
|
@@ -60,10 +68,19 @@ class Container extends BaseContainer {
|
|
60
68
|
*/
|
61
69
|
layout: 'base',
|
62
70
|
/**
|
63
|
-
* @member {
|
71
|
+
* @member {String} role='grid'
|
72
|
+
*/
|
73
|
+
role: 'grid',
|
74
|
+
/**
|
75
|
+
* Number in px
|
76
|
+
* @member {Number} rowHeight_=32
|
77
|
+
*/
|
78
|
+
rowHeight_: 32,
|
79
|
+
/**
|
80
|
+
* @member {String|null} scrollbarId_=null
|
64
81
|
* @protected
|
65
82
|
*/
|
66
|
-
|
83
|
+
scrollbarId_: null,
|
67
84
|
/**
|
68
85
|
* @member {Neo.selection.Model} selectionModel_=null
|
69
86
|
*/
|
@@ -81,12 +98,7 @@ class Container extends BaseContainer {
|
|
81
98
|
*/
|
82
99
|
store_: null,
|
83
100
|
/**
|
84
|
-
*
|
85
|
-
* @member {Boolean} useCustomScrollbars_=true
|
86
|
-
*/
|
87
|
-
useCustomScrollbars_: true,
|
88
|
-
/**
|
89
|
-
* Configs for Neo.table.View
|
101
|
+
* Configs for Neo.grid.View
|
90
102
|
* @member {Object|null} [viewConfig=null]
|
91
103
|
*/
|
92
104
|
viewConfig: null,
|
@@ -105,21 +117,35 @@ class Container extends BaseContainer {
|
|
105
117
|
*/
|
106
118
|
_vdom:
|
107
119
|
{cls: ['neo-grid-wrapper'], cn: [
|
108
|
-
{cn: []}
|
120
|
+
{'aria-rowcount': 1, cn: []} // aria-rowcount includes the column headers
|
109
121
|
]}
|
110
122
|
}
|
111
123
|
|
124
|
+
/**
|
125
|
+
* We do not need the first event to trigger logic, since afterSetMounted() handles this
|
126
|
+
* @member {Boolean}} initialResizeEvent=true
|
127
|
+
*/
|
128
|
+
initialResizeEvent = true
|
129
|
+
|
112
130
|
/**
|
113
131
|
* Convenience method to access the Neo.grid.header.Toolbar
|
114
|
-
* @returns {Neo.
|
132
|
+
* @returns {Neo.grid.header.Toolbar|null}
|
115
133
|
*/
|
116
134
|
get headerToolbar() {
|
117
135
|
return Neo.getComponent(this.headerToolbarId) || Neo.get(this.headerToolbarId)
|
118
136
|
}
|
119
137
|
|
138
|
+
/**
|
139
|
+
* Convenience method to access the Neo.grid.Scrollbar
|
140
|
+
* @returns {Neo.grid.Scrollbar|null}
|
141
|
+
*/
|
142
|
+
get scrollbar() {
|
143
|
+
return Neo.getComponent(this.scrollbarId) || Neo.get(this.scrollbarId)
|
144
|
+
}
|
145
|
+
|
120
146
|
/**
|
121
147
|
* Convenience method to access the Neo.grid.View
|
122
|
-
* @returns {Neo.
|
148
|
+
* @returns {Neo.grid.View|null}
|
123
149
|
*/
|
124
150
|
get view() {
|
125
151
|
return Neo.getComponent(this.viewId) || Neo.get(this.viewId)
|
@@ -131,28 +157,38 @@ class Container extends BaseContainer {
|
|
131
157
|
construct(config) {
|
132
158
|
super.construct(config);
|
133
159
|
|
134
|
-
let me
|
160
|
+
let me = this,
|
161
|
+
{rowHeight, store} = me;
|
135
162
|
|
136
163
|
me.headerToolbarId = Neo.getId('grid-header-toolbar');
|
164
|
+
me.scrollbarId = Neo.getId('grid-scrollbar');
|
137
165
|
me.viewId = Neo.getId('grid-view');
|
138
166
|
|
139
167
|
me.items = [{
|
140
168
|
module : header.Toolbar,
|
169
|
+
gridContainer : me,
|
141
170
|
id : me.headerToolbarId,
|
142
171
|
showHeaderFilters: me.showHeaderFilters,
|
143
172
|
sortable : me.sortable,
|
144
173
|
...me.headerToolbarConfig
|
145
174
|
}, {
|
146
|
-
module :
|
175
|
+
module : GridView,
|
147
176
|
containerId: me.id,
|
148
177
|
id : me.viewId,
|
149
|
-
|
178
|
+
rowHeight,
|
179
|
+
store,
|
150
180
|
...me.viewConfig
|
151
181
|
}];
|
152
182
|
|
153
183
|
me.vdom.id = me.getWrapperId();
|
154
184
|
|
155
|
-
me.createColumns(me.columns)
|
185
|
+
me.createColumns(me.columns);
|
186
|
+
|
187
|
+
me.addDomListeners({
|
188
|
+
resize: me.onResize,
|
189
|
+
scroll: me.onScroll,
|
190
|
+
scope : me
|
191
|
+
})
|
156
192
|
}
|
157
193
|
|
158
194
|
/**
|
@@ -199,6 +235,48 @@ class Container extends BaseContainer {
|
|
199
235
|
}
|
200
236
|
}
|
201
237
|
|
238
|
+
/**
|
239
|
+
* Triggered after the mounted config got changed
|
240
|
+
* @param {Boolean} value
|
241
|
+
* @param {Boolean} oldValue
|
242
|
+
* @protected
|
243
|
+
*/
|
244
|
+
afterSetMounted(value, oldValue) {
|
245
|
+
super.afterSetMounted(value, oldValue);
|
246
|
+
|
247
|
+
let me = this,
|
248
|
+
{ResizeObserver} = Neo.main.addon,
|
249
|
+
resizeParams = {id: me.id, windowId: me.windowId};
|
250
|
+
|
251
|
+
if (value) {
|
252
|
+
ResizeObserver.register(resizeParams);
|
253
|
+
me.passSizeToView()
|
254
|
+
} else if (!value && oldValue) { // unmount
|
255
|
+
me.initialResizeEvent = true;
|
256
|
+
ResizeObserver.unregister(resizeParams)
|
257
|
+
}
|
258
|
+
}
|
259
|
+
|
260
|
+
/**
|
261
|
+
* Triggered after the rowHeight config got changed
|
262
|
+
* @param {Number} value
|
263
|
+
* @param {Number} oldValue
|
264
|
+
* @protected
|
265
|
+
*/
|
266
|
+
afterSetRowHeight(value, oldValue) {
|
267
|
+
if (value > 0) {
|
268
|
+
let {scrollbar, view} = this;
|
269
|
+
|
270
|
+
if (scrollbar) {
|
271
|
+
scrollbar.rowHeight = value
|
272
|
+
}
|
273
|
+
|
274
|
+
if (view) {
|
275
|
+
view.rowHeight = value
|
276
|
+
}
|
277
|
+
}
|
278
|
+
}
|
279
|
+
|
202
280
|
/**
|
203
281
|
* Triggered after the selectionModel config got changed
|
204
282
|
* @param {Neo.selection.Model} value
|
@@ -233,41 +311,6 @@ class Container extends BaseContainer {
|
|
233
311
|
}
|
234
312
|
}
|
235
313
|
|
236
|
-
/**
|
237
|
-
* Triggered after the useCustomScrollbars config got changed
|
238
|
-
* @param {Boolean} value
|
239
|
-
* @param {Boolean} oldValue
|
240
|
-
* @protected
|
241
|
-
*/
|
242
|
-
afterSetUseCustomScrollbars(value, oldValue) {
|
243
|
-
if (value === true) {
|
244
|
-
this.vdom.cls = NeoArray.union(this.vdom.cls, ['neo-use-custom-scrollbar'])
|
245
|
-
}
|
246
|
-
}
|
247
|
-
|
248
|
-
/**
|
249
|
-
* @protected
|
250
|
-
*/
|
251
|
-
applyCustomScrollbarsCss() {
|
252
|
-
let me = this,
|
253
|
-
id = me.getWrapperId(),
|
254
|
-
cssRules = [];
|
255
|
-
|
256
|
-
if (me.dockLeftMargin) {
|
257
|
-
cssRules.push('#' + id + '::-webkit-scrollbar-track:horizontal {margin-left: ' + me.dockLeftMargin + 'px;}')
|
258
|
-
}
|
259
|
-
|
260
|
-
if (me.dockRightMargin) {
|
261
|
-
cssRules.push('#' + id + '::-webkit-scrollbar-track:horizontal {margin-right: ' + me.dockRightMargin + 'px;}')
|
262
|
-
}
|
263
|
-
|
264
|
-
if (cssRules.length > 0) {
|
265
|
-
CssUtil.insertRules(me.appName, cssRules)
|
266
|
-
}
|
267
|
-
|
268
|
-
me.scrollbarsCssApplied = true
|
269
|
-
}
|
270
|
-
|
271
314
|
/**
|
272
315
|
* Triggered before the columns config gets changed.
|
273
316
|
* @param {Object[]} value
|
@@ -385,7 +428,7 @@ class Container extends BaseContainer {
|
|
385
428
|
renderer;
|
386
429
|
|
387
430
|
if (!columns || !columns.length) {
|
388
|
-
Neo.logError('Attempting to create a
|
431
|
+
Neo.logError('Attempting to create a grid.Container without defined columns', me.id);
|
389
432
|
}
|
390
433
|
|
391
434
|
columns.forEach(column => {
|
@@ -424,11 +467,24 @@ class Container extends BaseContainer {
|
|
424
467
|
createViewData(inputData) {
|
425
468
|
let me = this;
|
426
469
|
|
427
|
-
me.
|
470
|
+
me.getVdomRoot()['aria-rowcount'] = inputData.length + 2; // 1 based & the header row counts as well
|
471
|
+
me.update();
|
428
472
|
|
429
|
-
|
430
|
-
|
431
|
-
|
473
|
+
me.view.createViewData()
|
474
|
+
}
|
475
|
+
|
476
|
+
/**
|
477
|
+
* @param args
|
478
|
+
*/
|
479
|
+
destroy(...args) {
|
480
|
+
let me = this;
|
481
|
+
|
482
|
+
me.mounted && Neo.main.addon.ResizeObserver.unregister({
|
483
|
+
id : me.id,
|
484
|
+
windowId: me.windowId
|
485
|
+
});
|
486
|
+
|
487
|
+
super.destroy(...args)
|
432
488
|
}
|
433
489
|
|
434
490
|
/**
|
@@ -469,6 +525,30 @@ class Container extends BaseContainer {
|
|
469
525
|
this.selectionModel?.register(this)
|
470
526
|
}
|
471
527
|
|
528
|
+
/**
|
529
|
+
* @param {Object} data
|
530
|
+
*/
|
531
|
+
async onResize(data) {
|
532
|
+
let me = this;
|
533
|
+
|
534
|
+
if (!me.initialResizeEvent) {
|
535
|
+
await me.passSizeToView(true);
|
536
|
+
|
537
|
+
me.view.updateVisibleColumns();
|
538
|
+
|
539
|
+
await me.headerToolbar.passSizeToView()
|
540
|
+
} else {
|
541
|
+
me.initialResizeEvent = false
|
542
|
+
}
|
543
|
+
}
|
544
|
+
|
545
|
+
/**
|
546
|
+
* @param {Object} data
|
547
|
+
*/
|
548
|
+
onScroll(data) {
|
549
|
+
this.view.scrollPosition = {x: data.scrollLeft, y: this.view.scrollPosition.y}
|
550
|
+
}
|
551
|
+
|
472
552
|
/**
|
473
553
|
* @param {Object} opts
|
474
554
|
* @param {String} opts.direction
|
@@ -526,6 +606,20 @@ class Container extends BaseContainer {
|
|
526
606
|
this.view.onStoreRecordChange(opts)
|
527
607
|
}
|
528
608
|
|
609
|
+
/**
|
610
|
+
* @param {Boolean} silent=false
|
611
|
+
* @returns {Promise<void>}
|
612
|
+
*/
|
613
|
+
async passSizeToView(silent=false) {
|
614
|
+
let me = this,
|
615
|
+
[containerRect, headerRect] = await me.getDomRect([me.id, me.headerToolbarId]);
|
616
|
+
|
617
|
+
me.view[silent ? 'setSilent' : 'set']({
|
618
|
+
availableHeight: containerRect.height - headerRect.height,
|
619
|
+
containerWidth : containerRect.width
|
620
|
+
})
|
621
|
+
}
|
622
|
+
|
529
623
|
/**
|
530
624
|
* @param {String} dataField
|
531
625
|
* @protected
|
@@ -539,4 +633,4 @@ class Container extends BaseContainer {
|
|
539
633
|
}
|
540
634
|
}
|
541
635
|
|
542
|
-
export default Neo.setupClass(
|
636
|
+
export default Neo.setupClass(GridContainer);
|