diff --git a/src/app/features/project-editor/facade/project-editor.facade.ts b/src/app/features/project-editor/facade/project-editor.facade.ts index 7390587..489376d 100644 --- a/src/app/features/project-editor/facade/project-editor.facade.ts +++ b/src/app/features/project-editor/facade/project-editor.facade.ts @@ -461,7 +461,17 @@ export class ProjectEditorFacade { } const reset = this.normalize(JSON.parse(JSON.stringify(original)) as BootstrapConfig); this.draftStorage.clear(); - this.state.update(state => ({ ...state, bootstrap: reset, lastSavedAt: null, draftRestored: false })); + this.state.update(state => ({ + ...state, + bootstrap: reset, + // Reset also clears the persisted draft, so there is nothing pending + // to save at this point - keep `lastSavedBootstrap` in sync too, + // otherwise `dirty` (computed against it) immediately flags + // "unsaved changes" right after a full discard. + lastSavedBootstrap: JSON.parse(JSON.stringify(reset)), + lastSavedAt: null, + draftRestored: false + })); this.clearHistory(); } diff --git a/src/app/guards/language.guard.ts b/src/app/guards/language.guard.ts index aa51706..b8117be 100644 --- a/src/app/guards/language.guard.ts +++ b/src/app/guards/language.guard.ts @@ -24,9 +24,12 @@ export const languageGuard: CanActivateFn = async (route, state) => { if (langObj && !langObj.enabled) { // Known but disabled language — redirect to default lang, keep the rest of the path const pathAfterLang = state.url.slice(1 + lang.length); - return router.createUrlTree([`/${defaultLang}${pathAfterLang}`]); + return router.parseUrl(`/${defaultLang}${pathAfterLang}`); } - // Not a recognized language code — treat as a legacy URL without lang prefix - return router.createUrlTree([`/${defaultLang}${state.url}`]); + // Not a recognized language code — treat as a legacy URL without lang prefix. + // Use parseUrl (not createUrlTree with a single path-segment array entry) so + // the query string/fragment on state.url are preserved as real query params + // instead of being percent-encoded into the path segment. + return router.parseUrl(`/${defaultLang}${state.url}`); };