From 169b7676f79db2899823014ef0ee5157b0e34889 Mon Sep 17 00:00:00 2001
From: Lone Iversen <108085781+loivsen@users.noreply.github.com>
Date: Wed, 28 Feb 2024 08:52:07 +0100
Subject: [PATCH 1/3] Feature: Document WorkspaceView Info Cleanup
---
.../document-workspace-view-info.element.ts | 48 ++++++++++++++-----
.../input-template/input-template.element.ts | 28 +++++++----
2 files changed, 56 insertions(+), 20 deletions(-)
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 fe6b40a1c2..e0d4b6bc35 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
@@ -12,7 +12,7 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
import './document-workspace-view-info-history.element.js';
import './document-workspace-view-info-reference.element.js';
import type { UmbDocumentWorkspaceContext } from '@umbraco-cms/backoffice/document';
-import type { DocumentUrlInfoModel } from '@umbraco-cms/backoffice/external/backend-api';
+import { DocumentVariantStateModel, type DocumentUrlInfoModel } from '@umbraco-cms/backoffice/external/backend-api';
@customElement('umb-document-workspace-view-info')
export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement {
@@ -39,6 +39,9 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement {
@state()
private _createDate = 'Unknown';
+ @state()
+ private _state = DocumentVariantStateModel.DRAFT;
+
#modalManagerContext?: typeof UMB_MODAL_MANAGER_CONTEXT.TYPE;
constructor() {
@@ -93,9 +96,34 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement {
/** TODO: Doubt this is the right way to get the create date... */
this.observe(this._workspaceContext.variants, (variants) => {
this._createDate = Array.isArray(variants) ? variants[0].createDate || 'Unknown' : 'Unknown';
+ if (variants[0].state) this._state = variants[0].state;
});
}
+ #renderStateTag() {
+ switch (this._state) {
+ case DocumentVariantStateModel.DRAFT:
+ return html`${this.localize.term('content_unpublished')}`;
+ case DocumentVariantStateModel.PUBLISHED:
+ return html`${this.localize.term('content_published')}`;
+ case DocumentVariantStateModel.PUBLISHED_PENDING_CHANGES:
+ return html`${this.localize.term('content_published')}`;
+ default:
+ return html`${this.localize.term('content_published')}`;
+ }
+ }
+
render() {
return html`
@@ -140,36 +168,32 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement {
#renderGeneralSection() {
return html`
- ${this.localize.term('content_publishStatus')}
-
-
-
-
-
+ Publication Status
+ ${this.#renderStateTag()}
-
+ Created
-
+ Document Type
-
+ Template
-
- ${this._documentTypeId}
+ Id
+ ${this._documentUnique}
`;
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/components/input-template/input-template.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/components/input-template/input-template.element.ts
index aabef26f3d..9795a836ce 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/components/input-template/input-template.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/components/input-template/input-template.element.ts
@@ -5,7 +5,12 @@ import { UmbTemplateItemRepository } from '../../repository/item/index.js';
import { css, html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit';
import { FormControlMixin } from '@umbraco-cms/backoffice/external/uui';
import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal';
-import { UMB_TEMPLATE_PICKER_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal';
+import {
+ UMB_TEMPLATE_PICKER_MODAL,
+ UMB_MODAL_MANAGER_CONTEXT,
+ UMB_WORKSPACE_MODAL,
+ UmbModalRouteRegistrationController,
+} from '@umbraco-cms/backoffice/modal';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { UmbChangeEvent } from '@umbraco-cms/backoffice/event';
@@ -73,12 +78,23 @@ export class UmbInputTemplateElement extends FormControlMixin(UmbLitElement) {
@state()
_pickedTemplates: UmbTemplateItemModel[] = [];
+ #templatePath = '';
+
constructor() {
super();
this.consumeContext(UMB_MODAL_MANAGER_CONTEXT, (instance) => {
this._modalContext = instance;
});
+
+ new UmbModalRouteRegistrationController(this, UMB_WORKSPACE_MODAL)
+ .addAdditionalPath('template')
+ .onSetup(() => {
+ return { data: { entityType: 'template', preset: {} } };
+ })
+ .observeRouteBuilder((routeBuilder) => {
+ this.#templatePath = routeBuilder({});
+ });
}
async #observePickedTemplates() {
@@ -160,19 +176,15 @@ export class UmbInputTemplateElement extends FormControlMixin(UmbLitElement) {
this.dispatchEvent(new UmbChangeEvent());
}
- #openTemplate(e: CustomEvent) {
- alert('open template modal');
- }
-
render() {
return html`
${this._pickedTemplates.map(
(template) => html`
window.history.pushState({}, '', this.#templatePath + 'edit/' + template.unique)}
@change=${this.#onCardChange}
- @open="${this.#openTemplate}"
?default="${template.unique === this.defaultUnique}">
Date: Wed, 28 Feb 2024 13:01:35 +0100
Subject: [PATCH 2/3] link up template modals
---
...ent-workspace-view-info-history.element.ts | 29 ++++-
.../document-workspace-view-info.element.ts | 119 +++++++++++++-----
2 files changed, 112 insertions(+), 36 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-history.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-history.element.ts
index 25feac848d..600d06260f 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-history.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-history.element.ts
@@ -89,7 +89,18 @@ export class UmbDocumentWorkspaceViewInfoHistoryElement extends UmbLitElement {
}
render() {
- return html`
+ return html`
+
+
History
+ alert('TODO: Rollback Modal')}>
+
+
+
+
${this._items ? this.#renderHistory() : html` `}
${this.#renderHistoryPagination()}`;
@@ -114,10 +125,6 @@ export class UmbDocumentWorkspaceViewInfoHistoryElement extends UmbLitElement {
${this.localize.term(text.label)}
${this.localize.term(text.desc, item.parameters)}
-
-
-
-
`;
},
)}
@@ -147,6 +154,18 @@ export class UmbDocumentWorkspaceViewInfoHistoryElement extends UmbLitElement {
font-size: 2rem;
}
+ #rollback {
+ display: flex;
+ width: 100%;
+ align-items: center;
+ justify-content: space-between;
+ }
+
+ #rollback h2 {
+ font-size: var(--uui-type-h5-size);
+ margin: 0;
+ }
+
uui-tag uui-icon {
margin-right: var(--uui-size-space-1);
}
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 e0d4b6bc35..86318b9381 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,5 +1,6 @@
import { TimeOptions } from './utils.js';
-import { css, html, customElement, state, repeat } from '@umbraco-cms/backoffice/external/lit';
+import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
+import { css, html, customElement, state, repeat, ifDefined } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { UMB_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace';
import {
@@ -8,31 +9,24 @@ import {
UMB_WORKSPACE_MODAL,
UmbModalRouteRegistrationController,
} from '@umbraco-cms/backoffice/modal';
-import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
import './document-workspace-view-info-history.element.js';
import './document-workspace-view-info-reference.element.js';
import 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 } from '@umbraco-cms/backoffice/template';
@customElement('umb-document-workspace-view-info')
export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement {
@state()
private _nodeName = '';
- @state()
- private _documentTypeId = '';
-
@state()
private _documentUnique = '';
- @state()
- private _templateUnique = '';
-
- private _workspaceContext?: UmbDocumentWorkspaceContext;
-
- @state()
- private _editDocumentTypePath = '';
-
@state()
private _urls?: Array;
@@ -42,7 +36,37 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement {
@state()
private _state = DocumentVariantStateModel.DRAFT;
+ /**Document Type */
+ @state()
+ private _documentTypeUnique = '';
+
+ @state()
+ private _documentTypeName?: string;
+
+ @state()
+ private _documentTypeIcon?: string;
+
+ @state()
+ private _editDocumentTypePath = '';
+
+ @state()
+ private _allowedTemplates?: UmbDocumentTypeDetailModel['allowedTemplates'];
+
+ /**Template */
+ @state()
+ private _templateUnique = '';
+
+ @state()
+ private _templateName?: string;
+
+ @state()
+ private _editTemplatePath = '';
+
#modalManagerContext?: typeof UMB_MODAL_MANAGER_CONTEXT.TYPE;
+ #workspaceContext?: UmbDocumentWorkspaceContext;
+
+ #templateRepository = new UmbTemplateDetailRepository(this);
+ #documentTypeRepository = new UmbDocumentTypeDetailRepository(this);
constructor() {
super();
@@ -57,7 +81,9 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement {
});
this.consumeContext(UMB_WORKSPACE_CONTEXT, (nodeContext) => {
- this._workspaceContext = nodeContext as UmbDocumentWorkspaceContext;
+ this.#workspaceContext = nodeContext as UmbDocumentWorkspaceContext;
+ this._documentTypeUnique = this.#workspaceContext.getContentTypeId()!;
+ this.#getData();
this._observeContent();
});
@@ -66,19 +92,24 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement {
});
}
+ async #getData() {
+ const { data } = await this.#documentTypeRepository.requestByUnique(this._documentTypeUnique);
+ this._documentTypeName = data?.name;
+ this._documentTypeIcon = data?.icon;
+ this._allowedTemplates = data?.allowedTemplates;
+ }
+
private _observeContent() {
- if (!this._workspaceContext) return;
+ if (!this.#workspaceContext) return;
this._nodeName = 'TBD, with variants this is not as simple.';
- this._documentTypeId = this._workspaceContext.getContentTypeId()!;
-
- this.observe(this._workspaceContext.urls, (urls) => {
+ this.observe(this.#workspaceContext.urls, (urls) => {
this._urls = urls;
});
this.observe(
- this._workspaceContext.unique,
+ this.#workspaceContext.unique,
(unique) => {
this._documentUnique = unique!;
},
@@ -86,15 +117,28 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement {
);
this.observe(
- this._workspaceContext.templateId,
- (templateUnique) => {
+ this.#workspaceContext.templateId,
+ async (templateUnique) => {
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({});
+ });
},
'_templateUnique',
);
/** TODO: Doubt this is the right way to get the create date... */
- this.observe(this._workspaceContext.variants, (variants) => {
+ this.observe(this.#workspaceContext.variants, (variants) => {
this._createDate = Array.isArray(variants) ? variants[0].createDate || 'Unknown' : 'Unknown';
if (variants[0].state) this._state = variants[0].state;
});
@@ -179,17 +223,27 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement {
Document Type
-
+
+
+
Template
-
+ ${this._templateUnique
+ ? html`
+
+
+ `
+ : html``}
Id
@@ -199,10 +253,13 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement {
}
async #openTemplatePicker() {
+ console.log(this._allowedTemplates);
const modal = this.#modalManagerContext?.open(UMB_TEMPLATE_PICKER_MODAL, {
data: {
hideTreeRoot: true,
multiple: false,
+ pickableFilter: (template) =>
+ this._allowedTemplates?.find((allowed) => template.unique === allowed.id) ? true : false,
},
value: {
selection: [this._templateUnique],
@@ -217,7 +274,7 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement {
if (!templateUnique) return;
- this._workspaceContext?.setTemplate(templateUnique);
+ this.#workspaceContext?.setTemplate(templateUnique);
}
static styles = [
From 7a23a39da047d97e00750282a8ef2802d65dca5e Mon Sep 17 00:00:00 2001
From: leekelleher
Date: Wed, 28 Feb 2024 12:40:30 +0000
Subject: [PATCH 3/3] Updates to Media section-view collection
as the server no longer needs a `dataTypeId` value for the Media root.
---
.../repository/media-collection.server.data-source.ts | 4 ----
.../media/media/section-view/media-section-view.element.ts | 2 +-
2 files changed, 1 insertion(+), 5 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/repository/media-collection.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/repository/media-collection.server.data-source.ts
index 6efc7fa75f..cecb87e09e 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/repository/media-collection.server.data-source.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/repository/media-collection.server.data-source.ts
@@ -13,10 +13,6 @@ export class UmbMediaCollectionServerDataSource implements UmbCollectionDataSour
}
async getCollection(query: UmbMediaCollectionFilterModel) {
- if (!query.dataTypeId) {
- throw new Error('Data type ID is required to fetch a collection.');
- }
-
const params = {
id: query.unique ?? '',
dataTypeId: query.dataTypeId,
diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/section-view/media-section-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/section-view/media-section-view.element.ts
index 911bbe8d44..2e3e4b9b26 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/media/media/section-view/media-section-view.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/section-view/media-section-view.element.ts
@@ -62,7 +62,7 @@ export class UmbMediaSectionViewElement extends UmbLitElement {
const config = new UmbPropertyEditorConfigCollection(dataType.values);
return {
unique: '',
- dataTypeId: dataType.unique,
+ dataTypeId: '',
allowedEntityBulkActions: config?.getValueByAlias('bulkActionPermissions'),
orderBy: config?.getValueByAlias('orderBy') ?? 'updateDate',
orderDirection: config?.getValueByAlias('orderDirection') ?? 'asc',