From a4f385ba01f8e0a69e445cfae6d1745e85a0ca80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Mon, 24 Feb 2025 22:09:43 +0100 Subject: [PATCH] Fix: remember validation state when creating (#18432) * only reset state and load if its a new unique * related clean up * return response promise --- .../src/packages/core/utils/state-manager/state.manager.ts | 5 +++++ .../controllers/workspace-is-new-redirect.controller.ts | 2 +- .../entity-detail/entity-detail-workspace-base.ts | 6 ++++++ .../submittable/submittable-workspace-context-base.ts | 1 - .../documents/workspace/document-workspace.context.ts | 7 ++++++- .../media/media/workspace/media-workspace.context.ts | 3 ++- .../member/workspace/member/member-workspace.context.ts | 2 +- 7 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/utils/state-manager/state.manager.ts b/src/Umbraco.Web.UI.Client/src/packages/core/utils/state-manager/state.manager.ts index 890f31b6e2..4c163593df 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/utils/state-manager/state.manager.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/utils/state-manager/state.manager.ts @@ -92,4 +92,9 @@ export class UmbStateManager extends UmbC clear() { this._states.setValue([]); } + + override destroy() { + super.destroy(); + this._states.destroy(); + } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-is-new-redirect.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-is-new-redirect.controller.ts index 37c8bf0bec..3f88fbb826 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-is-new-redirect.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-is-new-redirect.controller.ts @@ -34,7 +34,7 @@ export class UmbWorkspaceIsNewRedirectController extends UmbControllerBase { id: unique, }); this.destroy(); - window.history.replaceState({}, '', newPath); + window.history.replaceState(null, '', newPath); } } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts index 88321ebd6f..08b2126e01 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts @@ -167,6 +167,9 @@ export abstract class UmbEntityDetailWorkspaceContextBase< } async load(unique: string) { + if (unique === this.getUnique() && this._getDataPromise) { + return (await this._getDataPromise) as GetDataType; + } this.resetState(); this.#entityContext.setUnique(unique); this.loading.addState({ unique: LOADING_STATE_UNIQUE, message: `Loading ${this.getEntityType()} Details` }); @@ -389,8 +392,10 @@ export abstract class UmbEntityDetailWorkspaceContextBase< override resetState() { super.resetState(); + this.loading.clear(); this._data.clear(); this.#allowNavigateAway = false; + this._getDataPromise = undefined; } #checkIfInitialized() { @@ -447,6 +452,7 @@ export abstract class UmbEntityDetailWorkspaceContextBase< ); this._detailRepository?.destroy(); this.#entityContext.destroy(); + this._getDataPromise = undefined; super.destroy(); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts index 367ba75712..80bfa5740b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts @@ -57,7 +57,6 @@ export abstract class UmbSubmittableWorkspaceContextBase } protected resetState() { - //this.validation.reset(); this.#validationContexts.forEach((context) => context.reset()); this.#isNew.setValue(undefined); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts index 4f989c98ae..b0c6e04ff6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts @@ -177,10 +177,15 @@ export class UmbDocumentWorkspaceContext ]); } + override resetState(): void { + super.resetState(); + this.#isTrashedContext.setIsTrashed(false); + } + override async load(unique: string) { const response = await super.load(unique); - if (response.data) { + if (response?.data) { this.#isTrashedContext.setIsTrashed(response.data.isTrashed); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts index 2a2e35395b..7e072f50b1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts @@ -89,13 +89,14 @@ export class UmbMediaWorkspaceContext public override resetState() { super.resetState(); + this.#isTrashedContext.setIsTrashed(false); this.removeUmbControllerByAlias(UmbWorkspaceIsNewRedirectControllerAlias); } public override async load(unique: string) { const response = await super.load(unique); - if (response.data) { + if (response?.data) { this.#isTrashedContext.setIsTrashed(response.data.isTrashed); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/member-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/member-workspace.context.ts index 6cab3770f1..121de10724 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/member-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/member-workspace.context.ts @@ -78,7 +78,7 @@ export class UmbMemberWorkspaceContext preset: { memberType: { unique: memberTypeUnique, - icon: "icon-user" + icon: 'icon-user', }, }, });