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 ee7398c019..4485d4ba1c 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 @@ -130,39 +130,9 @@ export abstract class UmbEntityDetailWorkspaceContextBase< } if (this.getIsNew()) { - const parent = this.#parent.getValue(); - if (!parent) throw new Error('Parent is not set'); - const { error, data } = await this._detailRepository!.create(currentData, parent.unique); - if (error || !data) { - throw error?.message ?? 'Repository did not return data after create.'; - } - - this._data.setPersisted(data); - this._data.setCurrent(data); - - const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbRequestReloadChildrenOfEntityEvent({ - entityType: parent.entityType, - unique: parent.unique, - }); - eventContext.dispatchEvent(event); - this.setIsNew(false); + this.#create(currentData); } else { - const { error, data } = await this._detailRepository!.save(currentData); - if (error || !data) { - throw error?.message ?? 'Repository did not return data after create.'; - } - - this._data.setPersisted(data); - this._data.setCurrent(data); - - const actionEventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbRequestReloadStructureForEntityEvent({ - unique: this.getUnique()!, - entityType: this.getEntityType(), - }); - - actionEventContext.dispatchEvent(event); + this.#update(currentData); } } @@ -184,6 +154,44 @@ export abstract class UmbEntityDetailWorkspaceContextBase< return !newUrl.includes(currentWorkspacePathIdentifier); } + async #create(currentData: DetailModelType) { + const parent = this.#parent.getValue(); + if (!parent) throw new Error('Parent is not set'); + const { error, data } = await this._detailRepository!.create(currentData, parent.unique); + if (error || !data) { + throw error?.message ?? 'Repository did not return data after create.'; + } + + this._data.setPersisted(data); + this._data.setCurrent(data); + + const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); + const event = new UmbRequestReloadChildrenOfEntityEvent({ + entityType: parent.entityType, + unique: parent.unique, + }); + eventContext.dispatchEvent(event); + this.setIsNew(false); + } + + async #update(currentData: DetailModelType) { + const { error, data } = await this._detailRepository!.save(currentData); + if (error || !data) { + throw error?.message ?? 'Repository did not return data after create.'; + } + + this._data.setPersisted(data); + this._data.setCurrent(data); + + const actionEventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); + const event = new UmbRequestReloadStructureForEntityEvent({ + unique: this.getUnique()!, + entityType: this.getEntityType(), + }); + + actionEventContext.dispatchEvent(event); + } + #onWillNavigate = async (e: CustomEvent) => { const newUrl = e.detail.url;