mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
feat(hmr): preserve navigation history on applying changes (#7146)
This commit is contained in:
@@ -83,22 +83,20 @@ export function livesync(rootView: View, context?: ModuleContext) {
|
||||
events.notify(<EventData>{ eventName: "livesync", object: app });
|
||||
const liveSyncCore = global.__onLiveSyncCore;
|
||||
let reapplyAppStyles = false;
|
||||
let reapplyLocalStyles = false;
|
||||
|
||||
// ModuleContext is available only for Hot Module Replacement
|
||||
if (context && context.path) {
|
||||
const extensions = ["css", "scss"];
|
||||
const styleExtensions = ["css", "scss"];
|
||||
const appStylesFullFileName = getCssFileName();
|
||||
const appStylesFileName = appStylesFullFileName.substring(0, appStylesFullFileName.lastIndexOf(".") + 1);
|
||||
reapplyAppStyles = extensions.some(ext => context.path === appStylesFileName.concat(ext));
|
||||
if (!reapplyAppStyles) {
|
||||
reapplyLocalStyles = extensions.some(ext => context.path.endsWith(ext));
|
||||
}
|
||||
reapplyAppStyles = styleExtensions.some(ext => context.path === appStylesFileName.concat(ext));
|
||||
}
|
||||
|
||||
// Handle application styles
|
||||
if (reapplyAppStyles && rootView) {
|
||||
rootView._onCssStateChange();
|
||||
} else if (liveSyncCore) {
|
||||
reapplyLocalStyles ? liveSyncCore(context) : liveSyncCore();
|
||||
liveSyncCore(context);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
notify, launchEvent, resumeEvent, suspendEvent, exitEvent, lowMemoryEvent,
|
||||
orientationChangedEvent, setApplication, livesync, displayedEvent, getCssFileName
|
||||
} from "./application-common";
|
||||
import { ModuleType } from "../ui/core/view/view-common";
|
||||
|
||||
// First reexport so that app module is initialized.
|
||||
export * from "./application-common";
|
||||
@@ -106,6 +107,7 @@ class IOSApplication implements IOSApplicationDefinition {
|
||||
get delegate(): typeof UIApplicationDelegate {
|
||||
return this._delegate;
|
||||
}
|
||||
|
||||
set delegate(value: typeof UIApplicationDelegate) {
|
||||
if (this._delegate !== value) {
|
||||
this._delegate = value;
|
||||
@@ -228,8 +230,16 @@ class IOSApplication implements IOSApplicationDefinition {
|
||||
}
|
||||
|
||||
public _onLivesync(context?: ModuleContext): void {
|
||||
// If view can't handle livesync set window controller.
|
||||
if (this._rootView && !this._rootView._onLivesync(context)) {
|
||||
// Handle application root module
|
||||
const isAppRootModuleChanged = context && context.path && context.path.includes(getMainEntry().moduleName) && context.type !== ModuleType.style;
|
||||
|
||||
// Set window content when:
|
||||
// + Application root module is changed
|
||||
// + View did not handle the change
|
||||
// Note:
|
||||
// The case when neither app root module is changed, nor livesync is handled on View,
|
||||
// then changes will not apply until navigate forward to the module.
|
||||
if (isAppRootModuleChanged || (this._rootView && !this._rootView._onLivesync(context))) {
|
||||
this.setWindowContent();
|
||||
}
|
||||
}
|
||||
@@ -258,7 +268,6 @@ class IOSApplication implements IOSApplicationDefinition {
|
||||
this._window.makeKeyAndVisible();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const iosApp = new IOSApplication();
|
||||
|
||||
Reference in New Issue
Block a user