Bugfix: screenOnRoute sometimes failed

This commit is contained in:
the-djmaze 2023-02-11 20:41:54 +01:00
parent 415102aa37
commit e4b0d43b3d

View file

@ -169,67 +169,58 @@ const
* @returns {void} * @returns {void}
*/ */
screenOnRoute = (screenName, subPart) => { screenOnRoute = (screenName, subPart) => {
let vmScreen = null, screenName = screenName || defaultScreenName;
isSameScreen = false; if (screenName && fireEvent('sm-show-screen', screenName, 1)) {
if (null == screenName || '' == screenName) {
screenName = defaultScreenName;
}
if (fireEvent('sm-show-screen', screenName, 1)) {
// Close all popups // Close all popups
for (let vm of visiblePopups) { for (let vm of visiblePopups) {
(false === vm.onClose()) || vm.close(); (false === vm.onClose()) || vm.close();
} }
if (screenName) { let vmScreen = screen(screenName);
vmScreen = screen(screenName); if (!vmScreen) {
if (!vmScreen) { vmScreen = screen(defaultScreenName);
vmScreen = screen(defaultScreenName); if (vmScreen) {
if (vmScreen) { subPart = screenName + '/' + subPart;
subPart = screenName + '/' + subPart; screenName = defaultScreenName;
screenName = defaultScreenName; }
} }
if (vmScreen?.__started) {
let isSameScreen = currentScreen && vmScreen === currentScreen;
if (!vmScreen.__builded) {
vmScreen.__builded = true;
vmScreen.viewModels.forEach(ViewModelClass =>
buildViewModel(ViewModelClass, vmScreen)
);
vmScreen.onBuild?.();
} }
if (vmScreen?.__started) { setTimeout(() => {
isSameScreen = currentScreen && vmScreen === currentScreen; // hide screen
currentScreen && !isSameScreen && hideScreen(currentScreen);
// --
if (!vmScreen.__builded) { currentScreen = vmScreen;
vmScreen.__builded = true;
vmScreen.viewModels.forEach(ViewModelClass => // show screen
buildViewModel(ViewModelClass, vmScreen) if (!isSameScreen) {
); vmScreen.onShow?.();
vmScreen.onBuild?.(); forEachViewModel(vmScreen, (vm, dom) => {
vm.beforeShow?.();
i18nToNodes(dom);
dom.hidden = false;
vm.onShow?.();
autofocus(dom);
});
} }
// --
setTimeout(() => { vmScreen.__cross?.parse(subPart);
// hide screen }, 1);
currentScreen && !isSameScreen && hideScreen(currentScreen);
// --
currentScreen = vmScreen;
// show screen
if (!isSameScreen) {
vmScreen.onShow?.();
forEachViewModel(vmScreen, (vm, dom) => {
vm.beforeShow?.();
i18nToNodes(dom);
dom.hidden = false;
vm.onShow?.();
autofocus(dom);
});
}
// --
vmScreen.__cross?.parse(subPart);
}, 1);
}
} }
} }
}; };