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 ab31bb8a0a..994c5d6613 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,20 +1,16 @@ import { TimeOptions } from './utils.js'; -import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { css, html, customElement, state, repeat, ifDefined } from '@umbraco-cms/backoffice/external/lit'; +import { css, customElement, html, ifDefined, 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 { UMB_MODAL_MANAGER_CONTEXT, UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; -import { - UMB_DOCUMENT_WORKSPACE_CONTEXT, - type UmbDocumentVariantModel, - type UmbDocumentWorkspaceContext, -} from '@umbraco-cms/backoffice/document'; -import { DocumentVariantStateModel, type DocumentUrlInfoModel } from '@umbraco-cms/backoffice/external/backend-api'; -import { - type UmbDocumentTypeDetailModel, - UmbDocumentTypeDetailRepository, -} from '@umbraco-cms/backoffice/document-type'; -import { UmbTemplateDetailRepository, UMB_TEMPLATE_PICKER_MODAL } from '@umbraco-cms/backoffice/template'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/document'; +import { UMB_MODAL_MANAGER_CONTEXT, UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +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 import './document-workspace-view-info-history.element.js'; @@ -44,9 +40,6 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { @state() private _documentTypeIcon?: string; - @state() - private _editDocumentTypePath = ''; - @state() private _allowedTemplates?: UmbDocumentTypeDetailModel['allowedTemplates']; @@ -57,50 +50,54 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { @state() private _templateName?: string; - @state() - private _editTemplatePath = ''; - @state() private _variants: UmbDocumentVariantModel[] = []; - #workspaceContext?: UmbDocumentWorkspaceContext; + #workspaceContext?: typeof UMB_DOCUMENT_WORKSPACE_CONTEXT.TYPE; - #templateRepository = new UmbTemplateDetailRepository(this); - #documentTypeRepository = new UmbDocumentTypeDetailRepository(this); + #templateRepository = new UmbTemplateItemRepository(this); + + #routeBuilder?: UmbModalRouteBuilder; constructor() { super(); new UmbModalRouteRegistrationController(this, UMB_WORKSPACE_MODAL) - .addAdditionalPath('document-type') - .onSetup(() => { - return { data: { entityType: 'document-type', preset: {} } }; + .addAdditionalPath(':entityType') + .onSetup((params) => { + return { data: { entityType: params.entityType, preset: {} } }; }) .observeRouteBuilder((routeBuilder) => { - this._editDocumentTypePath = routeBuilder({}); + this.#routeBuilder = routeBuilder; }); this.consumeContext(UMB_DOCUMENT_WORKSPACE_CONTEXT, (context) => { this.#workspaceContext = context; this._documentTypeUnique = this.#workspaceContext.getContentTypeId()!; - this.#getData(); - this._observeContent(); + this.#observeContent(); }); } - async #getData() { - const { data } = await this.#documentTypeRepository.requestByUnique(this._documentTypeUnique); - this._documentTypeName = data?.name; - this._documentTypeIcon = data?.icon; - this._allowedTemplates = data?.allowedTemplates; - } - - private _observeContent() { + #observeContent() { if (!this.#workspaceContext) return; - this.observe(this.#workspaceContext.urls, (urls) => { - this._urls = urls; - }); + this.observe( + this.#workspaceContext.structure.ownerContentType, + (documentType) => { + this._documentTypeName = documentType?.name; + this._documentTypeIcon = documentType?.icon; + this._allowedTemplates = documentType?.allowedTemplates; + }, + '_documentType', + ); + + this.observe( + this.#workspaceContext.urls, + (urls) => { + this._urls = urls; + }, + '_documentUrls', + ); this.observe( this.#workspaceContext.unique, @@ -116,17 +113,9 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { this._templateUnique = templateUnique!; if (!templateUnique) return; - const { data } = await this.#templateRepository.requestByUnique(templateUnique!); - this._templateName = data?.name; - - new UmbModalRouteRegistrationController(this, UMB_WORKSPACE_MODAL) - .addAdditionalPath('template') - .onSetup(() => { - return { data: { entityType: 'template', preset: {} } }; - }) - .observeRouteBuilder((routeBuilder) => { - this._editTemplatePath = routeBuilder({}); - }); + const { data } = await this.#templateRepository.requestItems([templateUnique]); + if (!data?.length) return; + this._templateName = data[0].name; }, '_templateUnique', ); @@ -143,9 +132,12 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { #observeVariants() { // Find the oldest variant - const oldestVariant = this._variants - .filter((v) => !!v.createDate) - .reduce((prev, current) => (prev.createDate! < current.createDate! ? prev : current)); + 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(); } @@ -154,41 +146,47 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { return repeat( this._variants, (variant) => `${variant.culture}_${variant.segment}`, - (variant) => - html`
- ${variant.culture ?? this._invariantCulture} ${this.#renderStateTag( - variant, - )} -
`, + (variant) => html` +
+ ${variant.culture ?? this._invariantCulture} + ${this.#renderStateTag(variant)} +
+ `, ); } #renderStateTag(variant: UmbDocumentVariantModel) { switch (variant.state) { case DocumentVariantStateModel.DRAFT: - return html` - ${this.localize.term('content_unpublished')} - `; + return html` + + ${this.localize.term('content_unpublished')} + + `; case DocumentVariantStateModel.PUBLISHED: - return html` - ${this.localize.term('content_published')} - `; + return html` + + ${this.localize.term('content_published')} + + `; case DocumentVariantStateModel.PUBLISHED_PENDING_CHANGES: - return html` - ${this.localize.term('content_published')} - `; + return html` + + ${this.localize.term('content_published')} + + `; default: - return html` - ${this.localize.term('content_published')} - `; + return html` + + ${this.localize.term('content_published')} + + `; } } render() { - return html`
+ return html` +
@@ -200,8 +198,11 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { .documentUnique=${this._documentUnique}>
- ${this.#renderGeneralSection()} -
`; + ${this.#renderGeneralSection()} +
+ `; } #renderLinksSection() { @@ -221,18 +222,23 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { )} `; } else { - return html``; + return html` + + `; } } #renderGeneralSection() { + const editDocumentTypePath = this.#routeBuilder?.({ entityType: 'document-type' }) ?? ''; + const editTemplatePath = this.#routeBuilder?.({ entityType: 'template' }) ?? ''; + return html`
Publication Status - ${this.#renderVariantStates()} + ${this.#renderVariantStates()}
Created @@ -244,7 +250,7 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { Document Type @@ -252,18 +258,25 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement {
Template ${this._templateUnique - ? html` - - - - - ` - : html``} + ? html` + + + + + + + ` + : html` + + `}
Id @@ -329,9 +342,13 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { margin-bottom: var(--uui-size-space-6); } - .variant-name { + .variant-state { + display: flex; + gap: var(--uui-size-space-4); + } + + .variant-state > span { color: var(--uui-color-divider-emphasis); - padding-right: var(--uui-size-space-2); } // Link section