neo.mjs 8.10.1 → 8.12.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 (47) hide show
  1. package/apps/ServiceWorker.mjs +2 -2
  2. package/apps/portal/index.html +1 -1
  3. package/apps/portal/view/home/FooterContainer.mjs +1 -1
  4. package/examples/ConfigurationViewport.mjs +1 -7
  5. package/examples/ServiceWorker.mjs +2 -2
  6. package/examples/table/container/MainContainer.mjs +1 -2
  7. package/examples/tableFiltering/MainContainer.mjs +1 -1
  8. package/examples/tableFiltering/MainStore.mjs +10 -10
  9. package/package.json +2 -2
  10. package/resources/scss/src/draggable/DragProxyComponent.scss +9 -0
  11. package/resources/scss/src/draggable/grid/header/toolbar/SortZone.scss +16 -0
  12. package/resources/scss/src/draggable/table/header/toolbar/SortZone.scss +32 -0
  13. package/resources/scss/src/grid/View.scss +0 -18
  14. package/resources/scss/src/grid/header/Toolbar.scss +0 -1
  15. package/resources/scss/src/table/View.scss +4 -18
  16. package/resources/scss/src/table/header/Button.scss +0 -4
  17. package/resources/scss/theme-dark/draggable/grid/header/toolbar/SortZone.scss +3 -0
  18. package/resources/scss/theme-dark/draggable/table/header/toolbar/SortZone.scss +3 -0
  19. package/resources/scss/theme-light/draggable/grid/header/toolbar/SortZone.scss +3 -0
  20. package/resources/scss/theme-light/draggable/table/header/toolbar/SortZone.scss +3 -0
  21. package/resources/scss/theme-neo-light/draggable/grid/header/toolbar/SortZone.scss +3 -0
  22. package/resources/scss/theme-neo-light/draggable/table/header/toolbar/SortZone.scss +3 -0
  23. package/src/DefaultConfig.mjs +2 -2
  24. package/src/Main.mjs +9 -3
  25. package/src/component/Base.mjs +2 -6
  26. package/src/draggable/grid/header/toolbar/SortZone.mjs +74 -0
  27. package/src/draggable/table/header/toolbar/SortZone.mjs +70 -0
  28. package/src/draggable/toolbar/SortZone.mjs +23 -14
  29. package/src/form/field/ComboBox.mjs +1 -5
  30. package/src/grid/header/Button.mjs +0 -109
  31. package/src/grid/header/Toolbar.mjs +32 -0
  32. package/src/main/DomAccess.mjs +14 -17
  33. package/src/main/DomEvents.mjs +10 -50
  34. package/src/main/addon/DragDrop.mjs +9 -20
  35. package/src/selection/grid/BaseModel.mjs +1 -1
  36. package/src/selection/table/BaseModel.mjs +8 -0
  37. package/src/selection/table/CellColumnModel.mjs +28 -26
  38. package/src/selection/table/CellColumnRowModel.mjs +25 -23
  39. package/src/selection/table/CellModel.mjs +49 -42
  40. package/src/selection/table/CellRowModel.mjs +18 -20
  41. package/src/selection/table/ColumnModel.mjs +26 -60
  42. package/src/selection/table/RowModel.mjs +16 -48
  43. package/src/table/Container.mjs +6 -6
  44. package/src/table/View.mjs +26 -20
  45. package/src/table/header/Button.mjs +55 -156
  46. package/src/table/header/Toolbar.mjs +34 -2
  47. package/src/util/Rectangle.mjs +1 -1
@@ -110,43 +110,6 @@ class Button extends BaseButton {
110
110
  ]}
111
111
  }
112
112
 
113
- /**
114
- * @param {Object} config
115
- */
116
- construct(config) {
117
- super.construct(config);
118
-
119
- let me = this;
120
-
121
- me.draggable && me.addDomListeners({
122
- dragend : me.onDragEnd,
123
- dragenter: me.onDragEnter,
124
- dragleave: me.onDragLeave,
125
- dragover : me.onDragOver,
126
- dragstart: me.onDragStart,
127
- drop : me.onDrop,
128
- scope : me
129
- })
130
- }
131
-
132
- /**
133
- * Triggered after the draggable config got changed
134
- * @param {Boolean} value
135
- * @param {Boolean} oldValue
136
- * @protected
137
- */
138
- afterSetDraggable(value, oldValue) {
139
- let me = this;
140
-
141
- if (value === true) {
142
- me.getVdomRoot().draggable = true
143
- } else {
144
- delete me.getVdomRoot().draggable
145
- }
146
-
147
- me.update()
148
- }
149
-
150
113
  /**
151
114
  * Triggered after the isSorted config got changed
152
115
  * @param {String|null} value
@@ -292,125 +255,6 @@ class Button extends BaseButton {
292
255
  return data.value
293
256
  }
294
257
 
295
- /**
296
- *
297
- */
298
- destroy(...args) {
299
- this.filterField?.destroy();
300
-
301
- super.destroy(...args)
302
- }
303
-
304
- /**
305
- * Specify a different vdom root if needed to apply the top level style attributes on a different level.
306
- * Make sure to use getVnodeRoot() as well, to keep the vdom & vnode trees in sync.
307
- * @returns {Object} The new vdom root
308
- */
309
- getVdomRoot() {
310
- return this.vdom.cn[0]
311
- }
312
-
313
- /**
314
- * Specify a different vnode root if needed to apply the top level style attributes on a different level.
315
- * Make sure to use getVdomRoot() as well, to keep the vdom & vnode trees in sync.
316
- * @returns {Object} The new vnode root
317
- */
318
- getVnodeRoot() {
319
- return this.vnode.childNodes[0]
320
- }
321
-
322
- /**
323
- * @protected
324
- */
325
- onButtonClick() {
326
- let me = this,
327
- map;
328
-
329
- if (me.defaultSortDirection === 'DESC') {
330
- map = {
331
- ASC : null,
332
- DESC: 'ASC',
333
- null: 'DESC'
334
- }
335
- } else {
336
- map = {
337
- ASC : 'DESC',
338
- DESC: null,
339
- null: 'ASC'
340
- }
341
- }
342
-
343
- me.isSorted = map[me.isSorted + '']
344
- }
345
-
346
- /**
347
- * @protected
348
- */
349
- onDragEnd() {
350
- let me = this,
351
- {style} = me;
352
-
353
- delete style.opacity;
354
- me.style = style
355
- }
356
-
357
- /**
358
- * @protected
359
- */
360
- onDragEnter() {
361
- let me = this,
362
- {cls} = me;
363
-
364
- NeoArray.add(cls, 'neo-drag-over');
365
- me.cls = cls
366
- }
367
-
368
- /**
369
- * @protected
370
- */
371
- onDragLeave() {
372
- let me = this,
373
- {cls} = me;
374
-
375
- NeoArray.remove(cls, 'neo-drag-over');
376
- me.cls = cls
377
- }
378
-
379
- /**
380
- * @param {Object} event
381
- */
382
- onDragOver(event) {
383
- //console.log('onDragOver', event);
384
- }
385
-
386
- /**
387
- * @protected
388
- */
389
- onDragStart() {
390
- let me = this,
391
- {style} = me;
392
-
393
- style.opacity = 0.4;
394
- me.style = style
395
- }
396
-
397
- /**
398
- * @param {Object} data
399
- */
400
- onDrop(data) {
401
- let me = this,
402
- headerToolbar = me.parent,
403
- {style} = me,
404
- tableContainer = headerToolbar.parent;
405
-
406
- me.onDragLeave();
407
- headerToolbar.switchItems(me.id, data.srcId);
408
- tableContainer.createViewData(tableContainer.store.data);
409
-
410
- style.opacity = 1;
411
- me.style = style
412
- }
413
-
414
258
  /**
415
259
  * @param {Object} data
416
260
  */
@@ -460,6 +304,10 @@ class Button extends BaseButton {
460
304
  value = new Date(value)
461
305
  }
462
306
 
307
+ if (Neo.isRecord(value)) {
308
+ value = value[me.filterField.displayField]
309
+ }
310
+
463
311
  if (!filter) {
464
312
  filters = store.filters;
465
313
 
@@ -477,6 +325,57 @@ class Button extends BaseButton {
477
325
  }
478
326
  }
479
327
 
328
+ /**
329
+ *
330
+ */
331
+ destroy(...args) {
332
+ this.filterField?.destroy();
333
+
334
+ super.destroy(...args)
335
+ }
336
+
337
+ /**
338
+ * Specify a different vdom root if needed to apply the top level style attributes on a different level.
339
+ * Make sure to use getVnodeRoot() as well, to keep the vdom & vnode trees in sync.
340
+ * @returns {Object} The new vdom root
341
+ */
342
+ getVdomRoot() {
343
+ return this.vdom.cn[0]
344
+ }
345
+
346
+ /**
347
+ * Specify a different vnode root if needed to apply the top level style attributes on a different level.
348
+ * Make sure to use getVdomRoot() as well, to keep the vdom & vnode trees in sync.
349
+ * @returns {Object} The new vnode root
350
+ */
351
+ getVnodeRoot() {
352
+ return this.vnode.childNodes[0]
353
+ }
354
+
355
+ /**
356
+ * @protected
357
+ */
358
+ onButtonClick() {
359
+ let me = this,
360
+ map;
361
+
362
+ if (me.defaultSortDirection === 'DESC') {
363
+ map = {
364
+ ASC : null,
365
+ DESC: 'ASC',
366
+ null: 'DESC'
367
+ }
368
+ } else {
369
+ map = {
370
+ ASC : 'DESC',
371
+ DESC: null,
372
+ null: 'ASC'
373
+ }
374
+ }
375
+
376
+ me.isSorted = map[me.isSorted + '']
377
+ }
378
+
480
379
  /**
481
380
  * @protected
482
381
  */
@@ -17,9 +17,13 @@ class Toolbar extends BaseToolbar {
17
17
  */
18
18
  ntype: 'table-header-toolbar',
19
19
  /**
20
- * @member {String[]} baseCls=['table-header-toolbar']
20
+ * @member {String[]} baseCls=['neo-table-header-toolbar']
21
21
  */
22
- baseCls: ['table-header-toolbar'],
22
+ baseCls: ['neo-table-header-toolbar'],
23
+ /**
24
+ * @member {Boolean} draggable_=true
25
+ */
26
+ draggable_: true,
23
27
  /**
24
28
  * @member {String} layout='base'
25
29
  */
@@ -35,6 +39,8 @@ class Toolbar extends BaseToolbar {
35
39
  */
36
40
  showHeaderFilters_: false,
37
41
  /**
42
+ * Convenience shortcut to pass sortable to all toolbar items.
43
+ * If set to true, header clicks will sort the matching column (ASC, DESC, null)
38
44
  * @member {Boolean} sortable=true
39
45
  */
40
46
  sortable: true,
@@ -47,6 +53,31 @@ class Toolbar extends BaseToolbar {
47
53
  ]}
48
54
  }
49
55
 
56
+ /**
57
+ * Triggered after the draggable config got changed
58
+ * @param {Boolean} value
59
+ * @param {Boolean} oldValue
60
+ * @protected
61
+ */
62
+ afterSetDraggable(value, oldValue) {
63
+ let me = this;
64
+
65
+ if (value && !me.sortZone) {
66
+ import('../../draggable/table/header/toolbar/SortZone.mjs').then(module => {
67
+ let {appName, id, windowId} = me;
68
+
69
+ me.sortZone = Neo.create({
70
+ module : module.default,
71
+ appName,
72
+ boundaryContainerId: id,
73
+ owner : me,
74
+ windowId,
75
+ ...me.sortZoneConfig
76
+ })
77
+ })
78
+ }
79
+ }
80
+
50
81
  /**
51
82
  * Triggered after the showHeaderFilters config got changed
52
83
  * @param {Boolean} value
@@ -84,6 +115,7 @@ class Toolbar extends BaseToolbar {
84
115
  })
85
116
  });
86
117
 
118
+ me.updateDepth = 2;
87
119
  me.update()
88
120
  }
89
121
  }
@@ -309,7 +309,7 @@ export default class Rectangle extends DOMRect {
309
309
 
310
310
  /**
311
311
  * Returns a clone of this Rectangle expanded according to the edges array.
312
- * @param {Number}Number[]} edges
312
+ * @param {Number[]} edges
313
313
  * @returns {Rectangle}
314
314
  */
315
315
  expand(edges) {