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 b6825550db..5a3e30e821 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 @@ -196,6 +196,12 @@ export abstract class UmbEntityDetailWorkspaceContextBase< #onWillNavigate = async (e: CustomEvent) => { const newUrl = e.detail.url; + /* TODO: temp removal of discard changes in workspace modals. + The modal closes before the discard changes dialog is resolved.*/ + if (newUrl.includes('/modal/umb-modal-workspace/')) { + return true; + } + if (this._checkWillNavigateAway(newUrl) && this._data.getHasUnpersistedChanges()) { e.preventDefault(); const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/index.ts new file mode 100644 index 0000000000..6585fe3792 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/index.ts @@ -0,0 +1 @@ +export * from './document-property-dataset-context.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts index 3a0eee8dc7..c6a42baecf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts @@ -1,16 +1,17 @@ +import { UMB_DOCUMENT_PROPERTY_DATASET_CONTEXT } from '../../../property-dataset-context/index.js'; +import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../../document-workspace.context-token.js'; +import type { UmbDocumentVariantModel } from '../../../types.js'; import { TimeOptions } from './utils.js'; -import { css, customElement, html, ifDefined, repeat, state } from '@umbraco-cms/backoffice/external/lit'; +import { css, customElement, html, ifDefined, nothing, repeat, state } from '@umbraco-cms/backoffice/external/lit'; import { DocumentVariantStateModel } from '@umbraco-cms/backoffice/external/backend-api'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/document'; import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UMB_TEMPLATE_PICKER_MODAL, UmbTemplateItemRepository } from '@umbraco-cms/backoffice/template'; import type { DocumentUrlInfoModel } from '@umbraco-cms/backoffice/external/backend-api'; import type { UmbDocumentTypeDetailModel } from '@umbraco-cms/backoffice/document-type'; -import type { UmbDocumentVariantModel } from '@umbraco-cms/backoffice/document'; import type { UmbModalRouteBuilder } from '@umbraco-cms/backoffice/router'; // import of local components @@ -28,9 +29,6 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { @state() private _urls?: Array; - @state() - private _createDate?: string; - /**Document Type */ @state() private _documentTypeUnique = ''; @@ -52,7 +50,7 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { private _templateName?: string; @state() - private _variants: UmbDocumentVariantModel[] = []; + private _variant?: UmbDocumentVariantModel; #workspaceContext?: typeof UMB_DOCUMENT_WORKSPACE_CONTEXT.TYPE; @@ -78,6 +76,13 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { this._documentTypeUnique = this.#workspaceContext.getContentTypeId()!; this.#observeContent(); }); + + this.consumeContext(UMB_DOCUMENT_PROPERTY_DATASET_CONTEXT, (context) => { + this.observe(context.currentVariant, (value) => { + // TODO: get the correct type automatically + this._variant = value as UmbDocumentVariantModel; + }); + }); } #observeContent() { @@ -121,44 +126,10 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { }, '_templateUnique', ); - - this.observe( - this.#workspaceContext.variants, - (variants) => { - this._variants = variants; - this.#observeVariants(); - }, - '_variants', - ); } - #observeVariants() { - // Find the oldest variant - const oldestVariant = - this._variants.length > 0 - ? this._variants - .filter((v) => !!v.createDate) - .reduce((prev, current) => (prev.createDate! < current.createDate! ? prev : current)) - : null; - - this._createDate = oldestVariant?.createDate ?? new Date().toISOString(); - } - - #renderVariantStates() { - return repeat( - this._variants, - (variant) => `${variant.culture}_${variant.segment}`, - (variant) => html` -
- ${variant.culture ?? this._invariantCulture} - ${this.#renderStateTag(variant)} -
- `, - ); - } - - #renderStateTag(variant: UmbDocumentVariantModel) { - switch (variant.state) { + #renderStateTag() { + switch (this._variant?.state) { case DocumentVariantStateModel.DRAFT: return html` @@ -174,13 +145,13 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { case DocumentVariantStateModel.PUBLISHED_PENDING_CHANGES: return html` - ${this.localize.term('content_published')} + ${this.localize.term('content_publishedPendingChanges')} `; default: return html` - - ${this.localize.term('content_published')} + + ${this.localize.term('content_notCreated')} `; } @@ -240,14 +211,10 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { return html`
Publication Status - ${this.#renderVariantStates()} -
-
- Created - - - + ${this.#renderStateTag()}
+ ${this.#renderCreateDate()} +
Document Type + Created + + + +
+ `; + } + async #openTemplatePicker() { const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); const modal = modalManager.open(this, UMB_TEMPLATE_PICKER_MODAL, {