neo.mjs 10.0.0-alpha.5 → 10.0.0-beta.2
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/ServiceWorker.mjs +2 -2
- package/apps/colors/view/GridContainer.mjs +1 -1
- package/apps/covid/view/AttributionComponent.mjs +1 -1
- package/apps/covid/view/HeaderContainer.mjs +6 -6
- package/apps/covid/view/MainContainerController.mjs +5 -5
- package/apps/covid/view/TableContainerController.mjs +1 -1
- package/apps/covid/view/country/Gallery.mjs +13 -13
- package/apps/covid/view/country/Helix.mjs +13 -13
- package/apps/covid/view/country/HistoricalDataTable.mjs +1 -1
- package/apps/email/view/Viewport.mjs +2 -2
- package/apps/form/view/SideNavList.mjs +1 -1
- package/apps/portal/index.html +1 -1
- package/apps/portal/resources/data/examples_devmode.json +26 -27
- package/apps/portal/resources/data/examples_dist_dev.json +26 -27
- package/apps/portal/resources/data/examples_dist_esm.json +25 -26
- package/apps/portal/resources/data/examples_dist_prod.json +26 -27
- package/apps/portal/view/HeaderToolbar.mjs +3 -3
- package/apps/portal/view/about/Container.mjs +2 -2
- package/apps/portal/view/about/MemberContainer.mjs +3 -3
- package/apps/portal/view/blog/List.mjs +7 -7
- package/apps/portal/view/examples/List.mjs +4 -4
- package/apps/portal/view/home/ContentBox.mjs +2 -2
- package/apps/portal/view/home/FeatureSection.mjs +3 -3
- package/apps/portal/view/home/FooterContainer.mjs +7 -7
- package/apps/portal/view/home/parts/AfterMath.mjs +3 -3
- package/apps/portal/view/home/parts/MainNeo.mjs +3 -3
- package/apps/portal/view/home/parts/References.mjs +6 -6
- package/apps/portal/view/learn/ContentComponent.mjs +102 -111
- package/apps/portal/view/learn/PageSectionsContainer.mjs +1 -1
- package/apps/portal/view/learn/PageSectionsList.mjs +2 -2
- package/apps/portal/view/services/Component.mjs +16 -16
- package/apps/realworld/view/FooterComponent.mjs +1 -1
- package/apps/realworld/view/HeaderComponent.mjs +8 -8
- package/apps/realworld/view/HomeComponent.mjs +6 -6
- package/apps/realworld/view/article/CommentComponent.mjs +4 -4
- package/apps/realworld/view/article/Component.mjs +14 -14
- package/apps/realworld/view/article/CreateCommentComponent.mjs +3 -3
- package/apps/realworld/view/article/CreateComponent.mjs +3 -3
- package/apps/realworld/view/article/PreviewComponent.mjs +1 -1
- package/apps/realworld/view/article/TagListComponent.mjs +2 -2
- package/apps/realworld/view/user/ProfileComponent.mjs +8 -8
- package/apps/realworld/view/user/SettingsComponent.mjs +4 -4
- package/apps/realworld/view/user/SignUpComponent.mjs +4 -4
- package/apps/realworld2/view/FooterComponent.mjs +1 -1
- package/apps/realworld2/view/HomeContainer.mjs +3 -3
- package/apps/realworld2/view/article/DetailsContainer.mjs +1 -1
- package/apps/realworld2/view/article/PreviewComponent.mjs +7 -7
- package/apps/realworld2/view/article/TagListComponent.mjs +2 -2
- package/apps/realworld2/view/user/ProfileContainer.mjs +1 -1
- package/apps/route/view/center/CardAdministration.mjs +2 -2
- package/apps/route/view/center/CardAdministrationDenied.mjs +1 -1
- package/apps/route/view/center/CardContact.mjs +2 -2
- package/apps/route/view/center/CardHome.mjs +1 -1
- package/apps/route/view/center/CardSection1.mjs +1 -1
- package/apps/route/view/center/CardSection2.mjs +1 -1
- package/apps/sharedcovid/view/AttributionComponent.mjs +1 -1
- package/apps/sharedcovid/view/HeaderContainer.mjs +6 -6
- package/apps/sharedcovid/view/MainContainerController.mjs +5 -5
- package/apps/sharedcovid/view/TableContainerController.mjs +1 -1
- package/apps/sharedcovid/view/country/Gallery.mjs +13 -13
- package/apps/sharedcovid/view/country/Helix.mjs +13 -13
- package/apps/sharedcovid/view/country/HistoricalDataTable.mjs +1 -1
- package/apps/shareddialog/childapps/shareddialog2/view/MainContainer.mjs +1 -1
- package/apps/shareddialog/view/MainContainer.mjs +1 -1
- package/buildScripts/createApp.mjs +2 -2
- package/examples/table/cellEditing/MainContainer.mjs +1 -1
- package/examples/table/container/MainContainer.mjs +3 -3
- package/examples/table/nestedRecordFields/Viewport.mjs +6 -6
- package/examples/tableFiltering/MainContainer.mjs +1 -1
- package/examples/tablePerformance/MainContainer.mjs +1 -1
- package/examples/tablePerformance/MainContainer2.mjs +1 -1
- package/examples/tablePerformance/MainContainer3.mjs +2 -2
- package/examples/tableStore/MainContainer.mjs +2 -2
- package/learn/Glossary.md +261 -0
- package/learn/UsingTheseTopics.md +2 -2
- package/learn/benefits/ConfigSystem.md +538 -28
- package/learn/benefits/Effort.md +47 -2
- package/learn/benefits/Features.md +50 -32
- package/learn/benefits/FormsEngine.md +68 -38
- package/learn/benefits/MultiWindow.md +33 -7
- package/learn/benefits/OffTheMainThread.md +2 -2
- package/learn/benefits/Quick.md +45 -12
- package/learn/benefits/RPCLayer.md +75 -0
- package/learn/benefits/Speed.md +16 -11
- package/learn/gettingstarted/ComponentModels.md +4 -4
- package/learn/gettingstarted/Config.md +6 -6
- package/learn/gettingstarted/DescribingTheUI.md +4 -4
- package/learn/gettingstarted/Events.md +6 -6
- package/learn/gettingstarted/Extending.md +4 -4
- package/learn/gettingstarted/References.md +6 -6
- package/learn/gettingstarted/Workspaces.md +6 -6
- package/learn/guides/ApplicationBootstrap.md +26 -26
- package/learn/guides/ComponentsAndContainers.md +12 -12
- package/learn/guides/ConfigSystemDeepDive.md +280 -0
- package/learn/guides/CustomComponents.md +2 -2
- package/learn/guides/DeclarativeComponentTreesVsImperativeVdom.md +17 -17
- package/learn/guides/InstanceLifecycle.md +295 -1
- package/learn/guides/MainThreadAddons.md +475 -0
- package/learn/guides/PortalApp.md +2 -2
- package/learn/guides/StateProviders.md +12 -12
- package/learn/guides/WorkingWithVDom.md +14 -14
- package/learn/guides/events/CustomEvents.md +16 -16
- package/learn/guides/events/DomEvents.md +12 -12
- package/learn/javascript/ClassFeatures.md +3 -2
- package/learn/javascript/Classes.md +8 -8
- package/learn/javascript/NewNode.md +4 -4
- package/learn/javascript/Overrides.md +8 -8
- package/learn/javascript/Super.md +10 -8
- package/learn/tree.json +52 -51
- package/learn/tutorials/Earthquakes.md +54 -57
- package/learn/tutorials/TodoList.md +4 -4
- package/package.json +2 -2
- package/resources/scss/src/apps/portal/learn/ContentComponent.scss +12 -0
- package/resources/scss/src/table/{View.scss → Body.scss} +1 -1
- package/resources/scss/src/table/plugin/CellEditing.scss +1 -1
- package/resources/scss/theme-dark/table/{View.scss → Body.scss} +1 -1
- package/resources/scss/theme-light/table/{View.scss → Body.scss} +1 -1
- package/resources/scss/theme-neo-light/Global.scss +1 -2
- package/resources/scss/theme-neo-light/table/{View.scss → Body.scss} +1 -1
- package/src/DefaultConfig.mjs +2 -2
- package/src/Main.mjs +8 -7
- package/src/Neo.mjs +16 -2
- package/src/button/Base.mjs +2 -2
- package/src/calendar/view/SettingsContainer.mjs +2 -2
- package/src/calendar/view/YearComponent.mjs +9 -9
- package/src/calendar/view/calendars/ColorsList.mjs +1 -1
- package/src/calendar/view/calendars/List.mjs +1 -1
- package/src/calendar/view/month/Component.mjs +15 -15
- package/src/calendar/view/week/Component.mjs +12 -12
- package/src/calendar/view/week/EventDragZone.mjs +4 -4
- package/src/calendar/view/week/TimeAxisComponent.mjs +3 -3
- package/src/component/Base.mjs +17 -2
- package/src/component/Carousel.mjs +2 -2
- package/src/component/Chip.mjs +3 -3
- package/src/component/Circle.mjs +2 -2
- package/src/component/DateSelector.mjs +8 -8
- package/src/component/Helix.mjs +1 -1
- package/src/component/Label.mjs +3 -18
- package/src/component/Legend.mjs +3 -3
- package/src/component/MagicMoveText.mjs +6 -14
- package/src/component/Process.mjs +3 -3
- package/src/component/Progress.mjs +1 -1
- package/src/component/StatusBadge.mjs +2 -2
- package/src/component/Timer.mjs +2 -2
- package/src/component/Toast.mjs +5 -3
- package/src/container/AccordionItem.mjs +2 -2
- package/src/container/Base.mjs +1 -1
- package/src/core/Base.mjs +77 -14
- package/src/core/Util.mjs +14 -2
- package/src/date/DayViewComponent.mjs +2 -2
- package/src/date/SelectorContainer.mjs +1 -1
- package/src/draggable/grid/header/toolbar/SortZone.mjs +21 -21
- package/src/draggable/table/header/toolbar/SortZone.mjs +1 -1
- package/src/form/field/CheckBox.mjs +4 -4
- package/src/form/field/FileUpload.mjs +25 -39
- package/src/form/field/Range.mjs +1 -1
- package/src/form/field/Text.mjs +3 -3
- package/src/form/field/TextArea.mjs +2 -3
- package/src/grid/Body.mjs +8 -5
- package/src/grid/_export.mjs +1 -1
- package/src/list/Color.mjs +2 -2
- package/src/main/DeltaUpdates.mjs +157 -98
- package/src/main/addon/AmCharts.mjs +61 -84
- package/src/main/addon/Base.mjs +161 -42
- package/src/main/addon/GoogleMaps.mjs +9 -16
- package/src/main/addon/HighlightJS.mjs +2 -13
- package/src/main/addon/IntersectionObserver.mjs +21 -21
- package/src/main/addon/MonacoEditor.mjs +32 -64
- package/src/manager/ClassHierarchy.mjs +114 -0
- package/src/menu/List.mjs +1 -1
- package/src/plugin/Popover.mjs +2 -2
- package/src/sitemap/Component.mjs +1 -1
- package/src/table/{View.mjs → Body.mjs} +25 -22
- package/src/table/Container.mjs +43 -43
- package/src/table/_export.mjs +2 -2
- package/src/table/plugin/CellEditing.mjs +19 -19
- package/src/tooltip/Base.mjs +1 -6
- package/src/tree/Accordion.mjs +3 -3
- package/src/vdom/Helper.mjs +19 -22
- package/src/worker/App.mjs +1 -2
- package/src/worker/Base.mjs +7 -5
- package/src/worker/Canvas.mjs +2 -3
- package/src/worker/Data.mjs +5 -7
- package/src/worker/Task.mjs +2 -3
- package/src/worker/VDom.mjs +3 -4
- package/src/worker/mixin/RemoteMethodAccess.mjs +5 -2
- package/learn/guides/MainThreadAddonExample.md +0 -15
- package/learn/guides/MainThreadAddonIntro.md +0 -44
@@ -51,10 +51,6 @@ class MagicMoveText extends Component {
|
|
51
51
|
* @member {String} fontFamily_='Helvetica Neue'
|
52
52
|
*/
|
53
53
|
fontFamily_: 'Helvetica Neue',
|
54
|
-
/**
|
55
|
-
* @member {String} text_=null
|
56
|
-
*/
|
57
|
-
text_: null,
|
58
54
|
/**
|
59
55
|
* Time in ms for the fadeIn, fadeOut and move character OPs
|
60
56
|
* @member {Number} transitionTime_=500
|
@@ -258,11 +254,7 @@ class MagicMoveText extends Component {
|
|
258
254
|
value?.split('').forEach(char => {
|
259
255
|
me.chars.push({name: char});
|
260
256
|
|
261
|
-
|
262
|
-
char = ' '
|
263
|
-
}
|
264
|
-
|
265
|
-
measureElement.cn.push({tag: 'span', html: char})
|
257
|
+
measureElement.cn.push({tag: 'span', text: char})
|
266
258
|
});
|
267
259
|
|
268
260
|
if (me.mounted) {
|
@@ -301,8 +293,8 @@ class MagicMoveText extends Component {
|
|
301
293
|
|
302
294
|
charsContainer.push({
|
303
295
|
cls : ['neo-char'],
|
304
|
-
|
305
|
-
|
296
|
+
style: {color: me.colorFadeIn, left: char.left, opacity: 0, top: char.top},
|
297
|
+
text : char.name
|
306
298
|
})
|
307
299
|
}
|
308
300
|
});
|
@@ -354,7 +346,7 @@ class MagicMoveText extends Component {
|
|
354
346
|
me.chars[index].top = `${rect.top - parentRect.top }px`;
|
355
347
|
});
|
356
348
|
|
357
|
-
measureWrapper.removeDom = true;
|
349
|
+
//measureWrapper.removeDom = true;
|
358
350
|
await me.promiseUpdate()
|
359
351
|
}
|
360
352
|
|
@@ -409,7 +401,7 @@ class MagicMoveText extends Component {
|
|
409
401
|
if (start) {
|
410
402
|
me.intervalId = setInterval(me.cycleText.bind(me), me.autoCycleInterval);
|
411
403
|
|
412
|
-
me.timeout(20).then(() => {me.cycleText()})
|
404
|
+
me.timeout(20).then(() => {me.cycleText()})
|
413
405
|
} else {
|
414
406
|
clearInterval(me.intervalId)
|
415
407
|
}
|
@@ -491,7 +483,7 @@ class MagicMoveText extends Component {
|
|
491
483
|
|
492
484
|
charsContainer.cn.length = 0;
|
493
485
|
|
494
|
-
charsContainer.cn.push({
|
486
|
+
charsContainer.cn.push({text: me.text});
|
495
487
|
await me.promiseUpdate();
|
496
488
|
|
497
489
|
me.isTransitioning = false
|
@@ -169,12 +169,12 @@ class Process extends Base {
|
|
169
169
|
curItem, content;
|
170
170
|
|
171
171
|
items.forEach((newItem) => {
|
172
|
-
curItem = Neo.clone(itemLayout, true)
|
172
|
+
curItem = Neo.clone(itemLayout, true);
|
173
173
|
content = curItem.cn[3];
|
174
174
|
|
175
175
|
content.cn[0].cls.push(newItem.iconCls);
|
176
|
-
content.cn[1].
|
177
|
-
content.cn[2].
|
176
|
+
content.cn[1].text = newItem.title;
|
177
|
+
content.cn[2].text = newItem.text;
|
178
178
|
|
179
179
|
NeoArray.add(vdomRoot.cn, curItem)
|
180
180
|
})
|
@@ -329,7 +329,7 @@ class StatusBadge extends Base {
|
|
329
329
|
break;
|
330
330
|
}
|
331
331
|
|
332
|
-
labelNode.
|
332
|
+
labelNode.text = showLabel;
|
333
333
|
|
334
334
|
me.updateStateIconNode(showStateIcon);
|
335
335
|
me.updateSideIconNode(showSideIcon)
|
@@ -382,7 +382,7 @@ class StatusBadge extends Base {
|
|
382
382
|
updateLabelNode(value) {
|
383
383
|
let labelNode = this.getVdomRoot().cn[1];
|
384
384
|
|
385
|
-
labelNode.
|
385
|
+
labelNode.text = value;
|
386
386
|
labelNode.removeDom = !Boolean(value);
|
387
387
|
|
388
388
|
this.update()
|
package/src/component/Timer.mjs
CHANGED
@@ -74,7 +74,7 @@ class Timer extends Component {
|
|
74
74
|
{tag: 'button',cls: 'fa fa-play'}
|
75
75
|
]},
|
76
76
|
{cls: 'flip-card-back', cn : [
|
77
|
-
{cls: 'runner',
|
77
|
+
{cls: 'runner', text: '00:00'}
|
78
78
|
]}
|
79
79
|
]}
|
80
80
|
]}
|
@@ -283,7 +283,7 @@ class Timer extends Component {
|
|
283
283
|
let me = this,
|
284
284
|
timer = me.vdom.cn[0].cn[1].cn[0].cn[1].cn[0];
|
285
285
|
|
286
|
-
timer.
|
286
|
+
timer.text = value;
|
287
287
|
me.update()
|
288
288
|
}
|
289
289
|
|
package/src/component/Toast.mjs
CHANGED
@@ -175,7 +175,7 @@ class Toast extends Component {
|
|
175
175
|
afterSetMsg(value, oldValue) {
|
176
176
|
let vdom = this.getTextRootVdom().cn[1];
|
177
177
|
|
178
|
-
vdom.
|
178
|
+
vdom.text = value
|
179
179
|
}
|
180
180
|
|
181
181
|
/**
|
@@ -221,8 +221,10 @@ class Toast extends Component {
|
|
221
221
|
let vdom = this.getTextRootVdom().cn[0];
|
222
222
|
|
223
223
|
vdom.removeDom = Neo.isEmpty(value);
|
224
|
-
vdom.
|
225
|
-
NeoArray
|
224
|
+
vdom.text = value;
|
225
|
+
NeoArray.toggle(vdom.cls, 'neo-toast-has-title', value);
|
226
|
+
|
227
|
+
this.update()
|
226
228
|
}
|
227
229
|
|
228
230
|
/**
|
@@ -78,7 +78,7 @@ class AccordionContainer extends Base {
|
|
78
78
|
flag : 'titleEl',
|
79
79
|
ntype : 'component',
|
80
80
|
baseCls: ['neo-accordion-header-title'],
|
81
|
-
|
81
|
+
text : title
|
82
82
|
}, {
|
83
83
|
ntype : 'component',
|
84
84
|
baseCls: ['neo-accordion-header-arrow'],
|
@@ -154,7 +154,7 @@ class AccordionContainer extends Base {
|
|
154
154
|
let titleEl = this.down({flag: 'titleEl'});
|
155
155
|
|
156
156
|
if (titleEl) {
|
157
|
-
titleEl.
|
157
|
+
titleEl.text = newValue
|
158
158
|
}
|
159
159
|
}
|
160
160
|
|
package/src/container/Base.mjs
CHANGED
package/src/core/Base.mjs
CHANGED
@@ -80,12 +80,28 @@ class Base {
|
|
80
80
|
* @member {String|null} id_=null
|
81
81
|
*/
|
82
82
|
id_: null,
|
83
|
+
/**
|
84
|
+
* An array of remote method names that should be intercepted.
|
85
|
+
* Names used here must be present inside the `remote_` config.
|
86
|
+
* If a remote call for one of these methods arrives, `onInterceptRemotes()` will be called.
|
87
|
+
* @member {String[]|null} interceptRemotes=null
|
88
|
+
* @protected
|
89
|
+
*/
|
90
|
+
interceptRemotes: null,
|
83
91
|
/**
|
84
92
|
* Neo.create() will change this flag to true after the onConstructed() chain is done.
|
85
93
|
* @member {Boolean} isConstructed=false
|
86
94
|
* @protected
|
87
95
|
*/
|
88
96
|
isConstructed: false,
|
97
|
+
/**
|
98
|
+
* The config will get set to `true` once the Promise of `async initAsync()` is resolved.
|
99
|
+
* You can use `afterSetIsReady()` to get notified once the ready state is reached.
|
100
|
+
* Since not all classes use the Observable mixin, Neo will not fire an event.
|
101
|
+
* method body.
|
102
|
+
* @member {Boolean} isReady=false
|
103
|
+
*/
|
104
|
+
isReady_: false,
|
89
105
|
/**
|
90
106
|
* Add mixins as an array of classNames, imported modules or a mixed version
|
91
107
|
* @member {String[]|Neo.core.Base[]|null} mixins=null
|
@@ -96,7 +112,17 @@ class Base {
|
|
96
112
|
* @member {Class} module=null
|
97
113
|
* @protected
|
98
114
|
*/
|
99
|
-
module: null
|
115
|
+
module: null,
|
116
|
+
/**
|
117
|
+
* Remote method access for other threads. Example use case:
|
118
|
+
* remote: {app: ['myRemoteMethod']}
|
119
|
+
*
|
120
|
+
* ONLY supported for singletons.
|
121
|
+
*
|
122
|
+
* @member {Object|null} remote_=null
|
123
|
+
* @protected
|
124
|
+
*/
|
125
|
+
remote_: null
|
100
126
|
}
|
101
127
|
|
102
128
|
/**
|
@@ -154,7 +180,11 @@ class Base {
|
|
154
180
|
*/
|
155
181
|
intercept(me, 'destroy', me.isDestroyedCheck, me);
|
156
182
|
|
157
|
-
|
183
|
+
// Triggers async logic after the construction chain is done.
|
184
|
+
Promise.resolve().then(async () => {
|
185
|
+
await me.initAsync();
|
186
|
+
me.isReady = true
|
187
|
+
})
|
158
188
|
}
|
159
189
|
|
160
190
|
/**
|
@@ -181,7 +211,7 @@ class Base {
|
|
181
211
|
if (hasManager) {
|
182
212
|
Neo.manager.Instance.register(me);
|
183
213
|
} else {
|
184
|
-
Neo.idMap
|
214
|
+
Neo.idMap ??= {};
|
185
215
|
Neo.idMap[me.id] = me
|
186
216
|
}
|
187
217
|
}
|
@@ -255,6 +285,24 @@ class Base {
|
|
255
285
|
return value
|
256
286
|
}
|
257
287
|
|
288
|
+
/**
|
289
|
+
* Triggered before the remote config gets changed
|
290
|
+
* @param {Object|null} value
|
291
|
+
* @param {Object|null} oldValue
|
292
|
+
* @returns {Object|null}
|
293
|
+
* @protected
|
294
|
+
*/
|
295
|
+
beforeSetRemote(value, oldValue) {
|
296
|
+
let me = this;
|
297
|
+
|
298
|
+
// Only allow remote access for singletons or main thread addons
|
299
|
+
if (value && !me.singleton && !me.isMainThreadAddon) {
|
300
|
+
throw new Error('Remote method access is only functional for Singleton classes ' + me.className)
|
301
|
+
}
|
302
|
+
|
303
|
+
return value
|
304
|
+
}
|
305
|
+
|
258
306
|
/**
|
259
307
|
* @param {String} fn The name of a function to find in the passed scope object.
|
260
308
|
* @param {Object} originName The name of the method inside the originScope.
|
@@ -367,11 +415,23 @@ class Base {
|
|
367
415
|
|
368
416
|
/**
|
369
417
|
* Gets triggered after onConstructed() is done
|
370
|
-
* @see {@link Neo.core.Base#onConstructed onConstructed}
|
371
|
-
* @tutorial 02_ClassSystem
|
372
418
|
*/
|
373
419
|
init() {}
|
374
420
|
|
421
|
+
/**
|
422
|
+
* You can use this method in subclasses to perform asynchronous initialization logic.
|
423
|
+
* Make sure to use the parent call `await super.initAsync()` at the beginning of their implementations,
|
424
|
+
* or the registration of remote methods will get delayed.
|
425
|
+
*
|
426
|
+
* A common use case is requiring conditional or optional dynamic imports or fetching initial data.
|
427
|
+
*
|
428
|
+
* Once the promise returned by this method is fulfilled, the `isReady` config will be set to `true`.
|
429
|
+
* @returns {Promise<void>} A promise that resolves when the asynchronous initialization is complete.
|
430
|
+
*/
|
431
|
+
async initAsync() {
|
432
|
+
this.remote && this.initRemote()
|
433
|
+
}
|
434
|
+
|
375
435
|
/**
|
376
436
|
* Applies all class configs to this instance
|
377
437
|
* @param {Object} config
|
@@ -393,19 +453,14 @@ class Base {
|
|
393
453
|
* @protected
|
394
454
|
*/
|
395
455
|
initRemote() {
|
396
|
-
let
|
397
|
-
{className, remote} = me,
|
456
|
+
let {className, remote} = this,
|
398
457
|
{currentWorker} = Neo;
|
399
458
|
|
400
|
-
if (!
|
401
|
-
throw new Error('Remote method access is only functional for Singleton classes ' + className)
|
402
|
-
}
|
403
|
-
|
404
|
-
if (!Neo.config.unitTestMode && Neo.isObject(remote)) {
|
459
|
+
if (!Neo.config.unitTestMode) {
|
405
460
|
if (Neo.workerId !== 'main' && currentWorker.isSharedWorker && !currentWorker.isConnected) {
|
406
461
|
currentWorker.on('connected', () => {
|
407
462
|
Base.sendRemotes(className, remote)
|
408
|
-
},
|
463
|
+
}, this, {once: true})
|
409
464
|
} else {
|
410
465
|
Base.sendRemotes(className, remote)
|
411
466
|
}
|
@@ -456,10 +511,18 @@ class Base {
|
|
456
511
|
|
457
512
|
/**
|
458
513
|
* Gets triggered after all constructors are done
|
459
|
-
* @tutorial 02_ClassSystem
|
460
514
|
*/
|
461
515
|
onConstructed() {}
|
462
516
|
|
517
|
+
/**
|
518
|
+
* Placeholder method for intercepting remote calls.
|
519
|
+
* Subclasses can override this method to implement custom interception logic.
|
520
|
+
* @param {Object} msg The remote message object.
|
521
|
+
*/
|
522
|
+
onInterceptRemotes(msg) {
|
523
|
+
// No-op in base class
|
524
|
+
}
|
525
|
+
|
463
526
|
/**
|
464
527
|
* Helper method to replace string based values containing "@config:" with the matching config value
|
465
528
|
* of this instance.
|
package/src/core/Util.mjs
CHANGED
@@ -175,7 +175,18 @@ class Util extends Base {
|
|
175
175
|
* @returns {Boolean}
|
176
176
|
*/
|
177
177
|
static isObject(value) {
|
178
|
-
return value?.constructor?.name === 'Object'
|
178
|
+
return value?.constructor?.name === 'Object'
|
179
|
+
}
|
180
|
+
|
181
|
+
/**
|
182
|
+
* Returns true if the passed value is a promise.
|
183
|
+
* We are intentionally not checking for `value instanceof Promise`,
|
184
|
+
* to support any "thenable" objects for flexibility.
|
185
|
+
* @param {Object} value The value to test
|
186
|
+
* @returns {Boolean}
|
187
|
+
*/
|
188
|
+
static isPromise(value) {
|
189
|
+
return typeof value?.then === 'function'
|
179
190
|
}
|
180
191
|
|
181
192
|
/**
|
@@ -184,7 +195,7 @@ class Util extends Base {
|
|
184
195
|
* @returns {Boolean}
|
185
196
|
*/
|
186
197
|
static isRecord(value) {
|
187
|
-
return value?.constructor?.name === 'Record'
|
198
|
+
return value?.constructor?.name === 'Record'
|
188
199
|
}
|
189
200
|
|
190
201
|
/**
|
@@ -233,6 +244,7 @@ Neo.applyFromNs(Neo, Util, {
|
|
233
244
|
isFunction : 'isFunction',
|
234
245
|
isNumber : 'isNumber',
|
235
246
|
isObject : 'isObject',
|
247
|
+
isPromise : 'isPromise',
|
236
248
|
isRecord : 'isRecord',
|
237
249
|
isString : 'isString',
|
238
250
|
toArray : 'toArray'
|
@@ -104,7 +104,7 @@ class DayViewComponent extends Base {
|
|
104
104
|
for (; i < len; i++) {
|
105
105
|
config =
|
106
106
|
{cls: ['neo-cell'], cn: [
|
107
|
-
{cls : ['neo-cell-content'],
|
107
|
+
{cls : ['neo-cell-content'], text: me.intlFormatDay.format(date)}
|
108
108
|
]};
|
109
109
|
|
110
110
|
day = date.getDay();
|
@@ -168,7 +168,7 @@ class DayViewComponent extends Base {
|
|
168
168
|
tabIndex: hasContent ? -1 : null,
|
169
169
|
cn: [{
|
170
170
|
cls : ['neo-cell-content'],
|
171
|
-
|
171
|
+
text: hasContent ? day : me.showDisabledDays ? date.getDate() : ''
|
172
172
|
}]
|
173
173
|
};
|
174
174
|
|
@@ -54,15 +54,15 @@ class SortZone extends BaseSortZone {
|
|
54
54
|
|
55
55
|
let me = this,
|
56
56
|
grid = me.owner.parent,
|
57
|
-
{
|
58
|
-
|
57
|
+
{body} = grid,
|
58
|
+
bodyWrapperId = Neo.getId('grid-body-wrapper'),
|
59
|
+
gridRows = body.getVdomRoot().cn,
|
59
60
|
columnIndex = me.dragElement['aria-colindex'] - 1,
|
60
|
-
{dataField} =
|
61
|
-
cells =
|
61
|
+
{dataField} = body.columnPositions.getAt(columnIndex),
|
62
|
+
cells = body.getColumnCells(dataField),
|
62
63
|
rows = [],
|
63
64
|
config = await super.createDragProxy(data, false),
|
64
65
|
rect = await grid.getDomRect(),
|
65
|
-
viewWrapperId = Neo.getId('grid-view-wrapper'),
|
66
66
|
row;
|
67
67
|
|
68
68
|
config.cls = ['neo-grid-wrapper', me.owner.getTheme()];
|
@@ -85,9 +85,9 @@ class SortZone extends BaseSortZone {
|
|
85
85
|
{cn: [
|
86
86
|
{cls: ['neo-grid-container'], cn: [
|
87
87
|
{...config.vdom, cls: ['neo-grid-header-toolbar', 'neo-toolbar']},
|
88
|
-
{cls: ['neo-grid-
|
89
|
-
{cls: ['neo-grid-
|
90
|
-
{cls: ['neo-grid-scrollbar'], style: {height:
|
88
|
+
{cls: ['neo-grid-body-wrapper'], id: bodyWrapperId, cn: [
|
89
|
+
{cls: ['neo-grid-body'], cn: rows},
|
90
|
+
{cls: ['neo-grid-scrollbar'], style: {height: body.vdom.cn[0].height}}
|
91
91
|
]}
|
92
92
|
]}
|
93
93
|
]};
|
@@ -95,8 +95,8 @@ class SortZone extends BaseSortZone {
|
|
95
95
|
config.listeners = {
|
96
96
|
mounted() {
|
97
97
|
Neo.main.DomAccess.scrollTo({
|
98
|
-
id :
|
99
|
-
value :
|
98
|
+
id : bodyWrapperId,
|
99
|
+
value : body.scrollTop,
|
100
100
|
windowId: this.windowId
|
101
101
|
})
|
102
102
|
}
|
@@ -133,11 +133,11 @@ class SortZone extends BaseSortZone {
|
|
133
133
|
owner.updateDepth = 2;
|
134
134
|
owner.update();
|
135
135
|
|
136
|
-
await owner.
|
136
|
+
await owner.passSizeToBody();
|
137
137
|
|
138
138
|
await this.timeout(20);
|
139
139
|
|
140
|
-
owner.parent.
|
140
|
+
owner.parent.body.createViewData()
|
141
141
|
}
|
142
142
|
|
143
143
|
/**
|
@@ -148,11 +148,11 @@ class SortZone extends BaseSortZone {
|
|
148
148
|
|
149
149
|
if (this.moveColumnContent) {
|
150
150
|
let me = this,
|
151
|
-
{
|
151
|
+
{body} = me.owner.parent,
|
152
152
|
columnIndex = me.dragElement['aria-colindex'] - 1,
|
153
|
-
columnPosition =
|
153
|
+
columnPosition = body.columnPositions.getAt(columnIndex),
|
154
154
|
{dataField} = columnPosition,
|
155
|
-
cells =
|
155
|
+
cells = body.getColumnCells(dataField);
|
156
156
|
|
157
157
|
columnPosition.hidden = true;
|
158
158
|
|
@@ -160,7 +160,7 @@ class SortZone extends BaseSortZone {
|
|
160
160
|
cell.style.visibility = 'hidden'
|
161
161
|
});
|
162
162
|
|
163
|
-
|
163
|
+
body.update()
|
164
164
|
}
|
165
165
|
}
|
166
166
|
|
@@ -174,12 +174,12 @@ class SortZone extends BaseSortZone {
|
|
174
174
|
if (this.moveColumnContent) {
|
175
175
|
let me = this,
|
176
176
|
{itemRects} = me,
|
177
|
-
{
|
178
|
-
{columnPositions} =
|
177
|
+
{body} = me.owner.parent,
|
178
|
+
{columnPositions} = body,
|
179
179
|
column1Position = columnPositions.getAt(index1),
|
180
180
|
column2Position = columnPositions.getAt(index2),
|
181
|
-
column1Cells =
|
182
|
-
column2Cells =
|
181
|
+
column1Cells = body.getColumnCells(column1Position.dataField),
|
182
|
+
column2Cells = body.getColumnCells(column2Position.dataField);
|
183
183
|
|
184
184
|
Object.assign(column1Position, {
|
185
185
|
width: itemRects[index2].width,
|
@@ -203,7 +203,7 @@ class SortZone extends BaseSortZone {
|
|
203
203
|
node.style.width = column2Position.width + 'px'
|
204
204
|
});
|
205
205
|
|
206
|
-
|
206
|
+
body.update()
|
207
207
|
}
|
208
208
|
}
|
209
209
|
}
|
@@ -397,7 +397,7 @@ class CheckBox extends Field {
|
|
397
397
|
showLabel = !!value; // hide the label, in case value === null || value === ''
|
398
398
|
|
399
399
|
if (showLabel) {
|
400
|
-
valueLabel.
|
400
|
+
valueLabel.text = value
|
401
401
|
}
|
402
402
|
|
403
403
|
valueLabel.removeDom = !showLabel;
|
@@ -582,16 +582,16 @@ class CheckBox extends Field {
|
|
582
582
|
if (!(me.clean && !me.mounted)) {
|
583
583
|
me._error = value; // silent update
|
584
584
|
|
585
|
-
NeoArray
|
585
|
+
NeoArray.toggle(cls, 'neo-invalid', value);
|
586
586
|
me.cls = cls;
|
587
587
|
|
588
588
|
errorWrapper = me.vdom.cn[1];
|
589
589
|
errorNode = errorWrapper.cn[0];
|
590
590
|
|
591
591
|
if (showError) {
|
592
|
-
errorNode.
|
592
|
+
errorNode.text = value
|
593
593
|
} else {
|
594
|
-
delete errorNode.
|
594
|
+
delete errorNode.text
|
595
595
|
}
|
596
596
|
|
597
597
|
errorWrapper.removeDom = !showError;
|