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`