neo.mjs 4.6.3 → 4.6.5

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.
@@ -3,7 +3,7 @@ import ToastManager from '../manager/Toast.mjs';
3
3
  import NeoArray from "../util/Array.mjs";
4
4
 
5
5
  /**
6
- * @class Neo.dialog.Toast
6
+ * @class Neo.component.Toast
7
7
  * @extends Neo.component.Base
8
8
  *
9
9
  * @example
@@ -16,7 +16,7 @@ import NeoArray from "../util/Array.mjs";
16
16
  iconCls : 'fa fa-bell', // null
17
17
  maxWidth : 300, // 250
18
18
  position : 'br', // 'tr'
19
- slideDirection : 'right', // 'down'
19
+ slideDirection : 'right', // 'right'
20
20
  title : 'Alarm Clock' // null
21
21
  })
22
22
  */
@@ -28,11 +28,10 @@ class Toast extends Base {
28
28
  */
29
29
  running = false
30
30
  /**
31
- * Used by the ToastManager
32
- * @member {String|null} toastManagerId=null
33
- * @private
31
+ * Timeout in ms after which the toast is removed
32
+ * @member {Number} timeout=3000
34
33
  */
35
- toastManagerId = null
34
+ timeout = 3000
36
35
 
37
36
  static getStaticConfig() {return {
38
37
  /**
@@ -52,24 +51,15 @@ class Toast extends Base {
52
51
 
53
52
  static getConfig() {return {
54
53
  /**
55
- * @member {String} className='Neo.dialog.Toast'
54
+ * @member {String} className='Neo.component.Toast'
56
55
  * @protected
57
56
  */
58
- className: 'Neo.dialog.Toast',
57
+ className: 'Neo.component.Toast',
59
58
  /**
60
59
  * @member {String} ntype='toast'
61
60
  * @protected
62
61
  */
63
62
  ntype: 'toast',
64
-
65
- /**
66
- * @member {Boolean} autoMount=true
67
- */
68
- autoMount: true,
69
- /**
70
- * @member {Boolean} autoRender=true
71
- */
72
- autoRender: true,
73
63
  /**
74
64
  * @member {String[]} baseCls=['neo-toast']
75
65
  * @protected
@@ -110,14 +100,9 @@ class Toast extends Base {
110
100
  /**
111
101
  * Describes which direction from which side the toasts slides-in
112
102
  * This creates a cls `neo-toast-slide-${direction}-in`
113
- * @member {'down'|'up'|'left'|'right'} slideDirection_=null
114
- */
115
- slideDirection_: 'down',
116
- /**
117
- * Timeout in ms after which the toast is removed
118
- * @member {Number} timeout_=3000
103
+ * @member {'down'|'up'|'left'|'right'} slideDirection_='right'
119
104
  */
120
- timeout_: 3000,
105
+ slideDirection_: 'right',
121
106
  /**
122
107
  * Adds a title to the toast
123
108
  * @member {Number} title_=null
@@ -126,7 +111,8 @@ class Toast extends Base {
126
111
  /**
127
112
  * @member {String|null} title=null
128
113
  */
129
- vdom: {cn: [{
114
+ vdom:
115
+ {cn: [{
130
116
  cls: 'neo-toast-inner', cn: [
131
117
  {cls: ['neo-toast-icon'], removeDom: true},
132
118
  {cls: 'neo-toast-text', cn: [
@@ -138,6 +124,9 @@ class Toast extends Base {
138
124
  }]}
139
125
  }}
140
126
 
127
+ /**
128
+ * @param {Object} config
129
+ */
141
130
  construct(config) {
142
131
  super.construct(config);
143
132
 
@@ -145,8 +134,10 @@ class Toast extends Base {
145
134
 
146
135
  // click listener for close
147
136
  me.addDomListeners([
148
- {click: {fn: me.unregister, delegate: '.neo-toast-close', scope: me}}
149
- ])
137
+ {click: {fn: me.destroy, delegate: '.neo-toast-close', scope: me}}
138
+ ]);
139
+
140
+ ToastManager.register(me);
150
141
  }
151
142
 
152
143
  /**
@@ -164,41 +155,26 @@ class Toast extends Base {
164
155
  * @param {String|null} oldValue
165
156
  */
166
157
  afterSetIconCls(value, oldValue) {
167
- let vdom = this.getVdomInner().cn[0],
168
- cls = vdom.cls,
169
- clsFn = !!value ? 'add' : 'remove';
158
+ let vdom = this.getVdomInner().cn[0],
159
+ cls = vdom.cls;
170
160
 
171
161
  vdom.removeDom = Neo.isEmpty(value);
172
- NeoArray[clsFn](cls, value);
162
+ NeoArray[value ? 'add' : 'remove'](cls, value);
173
163
  }
174
164
 
175
165
  /**
176
166
  * Using the afterSetMsg to trigger the setup of the dom
177
167
  * A new container is added as an item.
178
168
  * We cannot use the vdom here.
179
- *
180
169
  * @param {String|null} value
181
170
  * @param {String|null} oldValue
182
171
  */
183
172
  afterSetMsg(value, oldValue) {
184
- let vdom = this.getTextRootVdom().cn[1];
173
+ let vdom = this.getTextRootVdom().cn[1];
185
174
 
186
175
  vdom.innerHTML = value;
187
176
  }
188
177
 
189
- /**
190
- * @param {String|null} value
191
- * @param {String|null} oldValue
192
- */
193
- afterSetTitle(value, oldValue) {
194
- let vdom = this.getTextRootVdom().cn[0],
195
- clsFn = !!value ? 'add' : 'remove';
196
-
197
- vdom.removeDom = Neo.isEmpty(value);
198
- vdom.innerHTML = value;
199
- NeoArray[clsFn](vdom.cls, 'neo-toast-has-title');
200
- }
201
-
202
178
  /**
203
179
  * Apply a cls, based on the position
204
180
  * @param {String} value
@@ -218,17 +194,34 @@ class Toast extends Base {
218
194
  }
219
195
 
220
196
  /**
221
- * Close the toast after the timeout if not closable
222
- * @param {Number} value
223
- * @param {Number} oldValue
197
+ * Close the toast after the mounted if not closable
198
+ * @param {Boolean} value
199
+ * @param {Boolean} oldValue
224
200
  */
225
- async afterSetTimeout(value, oldValue) {
226
- if (!this.closable && value) {
227
- await Neo.timeout(value);
228
- this.unregister();
201
+ afterSetMounted(value, oldValue) {
202
+ super.afterSetMounted(value, oldValue);
203
+
204
+ let me = this;
205
+
206
+ if (!me.closable && value) {
207
+ setTimeout(() => {
208
+ this.destroy(true);
209
+ }, me.timeout)
229
210
  }
230
211
  }
231
212
 
213
+ /**
214
+ * @param {String|null} value
215
+ * @param {String|null} oldValue
216
+ */
217
+ afterSetTitle(value, oldValue) {
218
+ let vdom = this.getTextRootVdom().cn[0];
219
+
220
+ vdom.removeDom = Neo.isEmpty(value);
221
+ vdom.innerHTML = value;
222
+ NeoArray[value ? 'add' : 'remove'](vdom.cls, 'neo-toast-has-title');
223
+ }
224
+
232
225
  /**
233
226
  * Triggered before the position config gets changed
234
227
  * @param {String} value
@@ -250,32 +243,36 @@ class Toast extends Base {
250
243
  }
251
244
 
252
245
  /**
253
- * This is a dialog, so we have to add an item to be able to
254
- * @returns {vdom}
246
+ *
255
247
  */
256
- getVdomInner() {
257
- return this.vdom.cn[0];
248
+ async destroy(...args) {
249
+ let me = this;
250
+
251
+ me.addDomListeners({
252
+ animationend: function () {
253
+ ToastManager.removeToast(me.id);
254
+ ToastManager.unregister(me);
255
+ me.destroy(true);
256
+ }
257
+ });
258
+
259
+ me.addCls('neo-toast-fade-out')
258
260
  }
259
261
 
262
+ /**
263
+ * This is a dialog, so we have to add an item to be able to
264
+ * @returns {Object} vdom
265
+ */
260
266
  getTextRootVdom() {
261
267
  return this.getVdomInner().cn[1];
262
268
  }
263
269
 
264
270
  /**
265
- * After the close-click or timeout, we unregister the toast
266
- * from the ToastManager
271
+ * This is a dialog, so we have to add an item to be able to
272
+ * @returns {Object} vdom
267
273
  */
268
- unregister() {
269
- let me = this;
270
-
271
- me.addDomListeners({
272
- animationend: function () {
273
- ToastManager.removeToast(me.toastManagerId);
274
- me.destroy(true);
275
- }
276
- })
277
-
278
- me.addCls('neo-toast-fade-out');
274
+ getVdomInner() {
275
+ return this.vdom.cn[0];
279
276
  }
280
277
  }
281
278
 
@@ -102,9 +102,9 @@ class Select extends Picker {
102
102
  * Showing the list via the down trigger can either show all list items or only show items which
103
103
  * match the filter string inside the input field.
104
104
  * Valid values: all, filtered
105
- * @member {String} triggerAction_='filtered'
105
+ * @member {String} triggerAction_='all'
106
106
  */
107
- triggerAction_: 'filtered',
107
+ triggerAction_: 'all',
108
108
  /**
109
109
  * Display the first matching result while typing
110
110
  * @member {Boolean} typeAhead_=true
@@ -150,7 +150,7 @@ class Select extends Picker {
150
150
  scope : me
151
151
  });
152
152
 
153
- me.typeAhead && me.updateTypeAhead();
153
+ me.typeAhead && me.updateTypeAhead()
154
154
  }
155
155
 
156
156
  /**
@@ -173,7 +173,7 @@ class Select extends Picker {
173
173
  value : value.get(me.value)?.[me.displayField] || me.value
174
174
  });
175
175
 
176
- value.filters = filters;
176
+ value.filters = filters
177
177
  }
178
178
  }
179
179
 
@@ -184,14 +184,14 @@ class Select extends Picker {
184
184
  * @protected
185
185
  */
186
186
  afterSetTypeAhead(value, oldValue) {
187
- this.rendered && this.updateTypeAhead();
187
+ this.rendered && this.updateTypeAhead()
188
188
  }
189
189
 
190
190
  /**
191
191
  * Triggered after the value config got changed
192
192
  * @param {Number|String|null} value
193
193
  * @param {Number|String|null} oldValue
194
- * @param {Boolean} [preventFilter=false]
194
+ * @param {Boolean} preventFilter=false
195
195
  * @protected
196
196
  */
197
197
  afterSetValue(value, oldValue, preventFilter=false) {
@@ -201,7 +201,7 @@ class Select extends Picker {
201
201
  !preventFilter && this.updateValue(true);
202
202
  list && (list.silentVdomUpdate = false);
203
203
 
204
- super.afterSetValue(value, oldValue);
204
+ super.afterSetValue(value, oldValue)
205
205
  }
206
206
 
207
207
  /**
@@ -213,7 +213,7 @@ class Select extends Picker {
213
213
  */
214
214
  beforeSetListConfig(value, oldValue) {
215
215
  value && this.parseItemConfigs(value);
216
- return value;
216
+ return value
217
217
  }
218
218
 
219
219
  /**
@@ -237,7 +237,7 @@ class Select extends Picker {
237
237
  }
238
238
  }
239
239
 
240
- return ClassSystemUtil.beforeSetInstance(value, Store);
240
+ return ClassSystemUtil.beforeSetInstance(value, Store)
241
241
  }
242
242
 
243
243
  /**
@@ -247,7 +247,7 @@ class Select extends Picker {
247
247
  * @protected
248
248
  */
249
249
  beforeSetTriggerAction(value, oldValue) {
250
- return this.beforeSetEnumValue(value, oldValue, 'triggerAction');
250
+ return this.beforeSetEnumValue(value, oldValue, 'triggerAction')
251
251
  }
252
252
 
253
253
  /**
@@ -277,14 +277,14 @@ class Select extends Picker {
277
277
 
278
278
  me.record = store.find(displayField, value)[0] || null;
279
279
 
280
- return value;
280
+ return value
281
281
  }
282
282
 
283
283
  /**
284
284
  * @returns {Neo.list.Base}
285
285
  */
286
286
  createPickerComponent() {
287
- return this.list;
287
+ return this.list
288
288
  }
289
289
 
290
290
  /**
@@ -307,7 +307,7 @@ class Select extends Picker {
307
307
  oldValue,
308
308
  record,
309
309
  value
310
- });
310
+ })
311
311
  }
312
312
  }
313
313
 
@@ -322,18 +322,18 @@ class Select extends Picker {
322
322
  me.value = lastManualInput;
323
323
 
324
324
  Neo.main.DomAccess.focus({
325
- id: me.getInputElId()
325
+ appName: me.appName,
326
+ id : me.getInputElId()
326
327
  }).then(() => {
327
- callback?.apply(me);
328
- });
328
+ callback?.apply(me)
329
+ })
329
330
  }
330
331
 
331
332
  /**
332
333
  * @returns {Object}
333
334
  */
334
335
  getInputHintEl() {
335
- let el = VDomUtil.findVdomChild(this.vdom, this.getInputHintId());
336
- return el?.vdom;
336
+ return VDomUtil.findVdomChild(this.vdom, this.getInputHintId())?.vdom
337
337
  }
338
338
 
339
339
  /**
@@ -351,7 +351,7 @@ class Select extends Picker {
351
351
  let list = this.list,
352
352
  recordKey = list.selectionModel.getSelection()[0];
353
353
 
354
- return recordKey && this.store.get(list.getItemRecordId(recordKey)) || null;
354
+ return recordKey && this.store.get(list.getItemRecordId(recordKey)) || null
355
355
  }
356
356
 
357
357
  /**
@@ -360,7 +360,7 @@ class Select extends Picker {
360
360
  getSubmitValue() {
361
361
  let me = this;
362
362
 
363
- return me.record?.[me.valueField] || me.value;
363
+ return me.record?.[me.valueField] || me.value
364
364
  }
365
365
 
366
366
  /**
@@ -368,7 +368,7 @@ class Select extends Picker {
368
368
  * @protected
369
369
  */
370
370
  onContainerKeyDownEnter(data) {
371
- this.hidePicker();
371
+ this.hidePicker()
372
372
  }
373
373
 
374
374
  /**
@@ -376,7 +376,7 @@ class Select extends Picker {
376
376
  * @protected
377
377
  */
378
378
  onContainerKeyDownEscape(data) {
379
- this.focusInputEl(this.hidePicker);
379
+ this.focusInputEl(this.hidePicker)
380
380
  }
381
381
 
382
382
  /**
@@ -391,7 +391,7 @@ class Select extends Picker {
391
391
  me.value = me.hintRecordId;
392
392
  }
393
393
 
394
- super.onFocusLeave(data);
394
+ super.onFocusLeave(data)
395
395
  }
396
396
 
397
397
  /**
@@ -400,7 +400,7 @@ class Select extends Picker {
400
400
  */
401
401
  onInputValueChange(data) {
402
402
  super.onInputValueChange(data);
403
- this.lastManualInput = data.value;
403
+ this.lastManualInput = data.value
404
404
  }
405
405
 
406
406
  /**
@@ -408,7 +408,7 @@ class Select extends Picker {
408
408
  * @protected
409
409
  */
410
410
  onKeyDownDown(data) {
411
- this.onKeyDownEnter(data);
411
+ this.onKeyDownEnter(data)
412
412
  }
413
413
 
414
414
  /**
@@ -420,9 +420,9 @@ class Select extends Picker {
420
420
 
421
421
  if (me.pickerIsMounted) {
422
422
  me.selectListItem();
423
- super.onKeyDownEnter(data);
423
+ super.onKeyDownEnter(data)
424
424
  } else {
425
- super.onKeyDownEnter(data, me.selectListItem);
425
+ super.onKeyDownEnter(data, me.selectListItem)
426
426
  }
427
427
  }
428
428
 
@@ -441,7 +441,7 @@ class Select extends Picker {
441
441
  me.record = record;
442
442
  me._value = record[me.displayField];
443
443
 
444
- me.afterSetValue(me._value, oldValue);
444
+ me.afterSetValue(me._value, oldValue)
445
445
  }
446
446
  }
447
447
 
@@ -454,9 +454,9 @@ class Select extends Picker {
454
454
 
455
455
  if (me.pickerIsMounted) {
456
456
  me.selectLastListItem();
457
- super.onKeyDownEnter(data);
457
+ super.onKeyDownEnter(data)
458
458
  } else {
459
- super.onKeyDownEnter(data, me.selectLastListItem);
459
+ super.onKeyDownEnter(data, me.selectLastListItem)
460
460
  }
461
461
  }
462
462
 
@@ -465,7 +465,32 @@ class Select extends Picker {
465
465
  */
466
466
  onListCreateItems() {
467
467
  let me = this;
468
- me.typeAhead && me.picker?.mounted && me.updateTypeAheadValue();
468
+ me.typeAhead && me.picker?.mounted && me.updateTypeAheadValue()
469
+ }
470
+
471
+ /**
472
+ * @param {Object} record
473
+ * @protected
474
+ */
475
+ onListItemChange(record) {
476
+ let me = this,
477
+ displayField = me.displayField,
478
+ oldValue = me.value,
479
+ value = record[displayField];
480
+
481
+ if (me.value !== value) {
482
+ me.hintRecordId = null;
483
+ me.record = record;
484
+ me._value = value;
485
+ me.getInputHintEl().value = null;
486
+
487
+ me.afterSetValue(value, oldValue, true); // prevent the list from getting filtered
488
+
489
+ me.fire('select', {
490
+ record,
491
+ value: record[displayField]
492
+ })
493
+ }
469
494
  }
470
495
 
471
496
  /**
@@ -474,7 +499,15 @@ class Select extends Picker {
474
499
  */
475
500
  onListItemClick(record) {
476
501
  this.onListItemChange(record);
477
- this.hidePicker();
502
+ this.hidePicker()
503
+ }
504
+
505
+ /**
506
+ * @param {Object} record
507
+ * @protected
508
+ */
509
+ onListItemNavigate(record) {
510
+ this.onListItemChange(record)
478
511
  }
479
512
 
480
513
  /**
@@ -493,7 +526,7 @@ class Select extends Picker {
493
526
  }
494
527
  }
495
528
 
496
- super.onPickerTriggerClick();
529
+ super.onPickerTriggerClick()
497
530
  }
498
531
 
499
532
  /**
@@ -501,7 +534,7 @@ class Select extends Picker {
501
534
  */
502
535
  onSelectPostLastItem() {
503
536
  this.record = null;
504
- this.focusInputEl();
537
+ this.focusInputEl()
505
538
  }
506
539
 
507
540
  /**
@@ -509,55 +542,21 @@ class Select extends Picker {
509
542
  */
510
543
  onSelectPreFirstItem() {
511
544
  this.record = null;
512
- this.focusInputEl();
513
- }
514
-
515
-
516
- /**
517
- * @param {Object} record
518
- * @protected
519
- */
520
- onListItemChange(record) {
521
- let me = this,
522
- displayField = me.displayField,
523
- oldValue = me.value,
524
- value = record[displayField];
525
-
526
- if (me.value !== value) {
527
- me.hintRecordId = null;
528
- me.record = record;
529
- me._value = value;
530
- me.getInputHintEl().value = null;
531
-
532
- me.afterSetValue(value, oldValue, true); // prevent the list from getting filtered
533
-
534
- me.fire('select', {
535
- record,
536
- value: record[displayField]
537
- });
538
- }
539
- }
540
-
541
- /**
542
- * @param {Object} record
543
- * @protected
544
- */
545
- onListItemNavigate(record) {
546
- this.onListItemChange(record);
545
+ this.focusInputEl()
547
546
  }
548
547
 
549
548
  /**
550
549
  *
551
550
  */
552
551
  selectFirstListItem() {
553
- this.selectListItem(0);
552
+ this.selectListItem(0)
554
553
  }
555
554
 
556
555
  /**
557
556
  *
558
557
  */
559
558
  selectLastListItem() {
560
- this.selectListItem(this.store.getCount() -1);
559
+ this.selectListItem(this.store.getCount() -1)
561
560
  }
562
561
 
563
562
  /**
@@ -576,7 +575,7 @@ class Select extends Picker {
576
575
  }
577
576
 
578
577
  me.list.selectItem(index);
579
- me.onListItemNavigate(me.store.getAt(index));
578
+ me.onListItemNavigate(me.store.getAt(index))
580
579
  }
581
580
 
582
581
  /**
@@ -605,7 +604,7 @@ class Select extends Picker {
605
604
  VDomUtil.replaceVdomChild(vdom, inputEl.parentNode.id, inputEl.vdom);
606
605
  }
607
606
 
608
- me[silent ? '_vdom' : 'vdom'] = vdom;
607
+ !silent && me.update()
609
608
  }
610
609
 
611
610
  /**
@@ -619,7 +618,6 @@ class Select extends Picker {
619
618
  store = me.store,
620
619
  i = 0,
621
620
  len = store.getCount(),
622
- vdom = me.vdom,
623
621
  inputHintEl = me.getInputHintEl(),
624
622
  storeValue;
625
623
 
@@ -628,7 +626,6 @@ class Select extends Picker {
628
626
  storeValue = store.items[i][me.displayField];
629
627
 
630
628
  if (!Neo.isString(storeValue)) {
631
- console.log(store);
632
629
  return;
633
630
  }
634
631
 
@@ -640,7 +637,7 @@ class Select extends Picker {
640
637
 
641
638
  if (hasMatch && inputHintEl) {
642
639
  inputHintEl.value = value + storeValue.substr(value.length);
643
- me.hintRecordId = store.items[i][store.keyProperty || store.model.keyProperty];
640
+ me.hintRecordId = store.items[i][store.keyProperty || store.model.keyProperty]
644
641
  }
645
642
  }
646
643
 
@@ -649,11 +646,11 @@ class Select extends Picker {
649
646
  me.hintRecordId = null;
650
647
  }
651
648
 
652
- me[silent ? '_vdom' : 'vdom'] = vdom;
649
+ !silent && me.update()
653
650
  }
654
651
 
655
652
  /**
656
- * @param {Boolean} [silent=false]
653
+ * @param {Boolean} silent=false
657
654
  * @protected
658
655
  */
659
656
  updateValue(silent=false) {
@@ -661,19 +658,18 @@ class Select extends Picker {
661
658
  displayField = me.displayField,
662
659
  store = me.store,
663
660
  value = me._value,
664
- record = me.record,
665
661
  filter;
666
662
 
667
663
  if (store && !Neo.isEmpty(store.filters)) {
668
664
  filter = store.getFilter(displayField);
669
665
 
670
666
  if (filter) {
671
- filter.value = record?.[displayField] || value;
667
+ filter.value = me.record?.[displayField] || value;
672
668
  }
673
669
  }
674
670
 
675
671
  if (me.typeAhead && !me.picker?.containsFocus) {
676
- me.updateTypeAheadValue(value, silent);
672
+ me.updateTypeAheadValue(value, silent)
677
673
  }
678
674
  }
679
675
  }