From 9a564a038dec4ae3f89504e5e0815bb5798a7acb Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 27 May 2024 00:02:52 +0100 Subject: [PATCH] Bugfix: DocumentType history clean UI Also added label localization. Fixes https://github.com/umbraco/Umbraco-CMS/issues/16295 --- .../document-type-workspace.context.ts | 6 +- ...nt-type-workspace-view-settings.element.ts | 137 +++++++++++++++--- 2 files changed, 123 insertions(+), 20 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.context.ts index d4aa7b5813..8ba097d556 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.context.ts @@ -102,7 +102,7 @@ export class UmbDocumentTypeWorkspaceContext // Document type specific: this.allowedTemplateIds = this.structure.ownerContentTypeObservablePart((data) => data?.allowedTemplates); this.defaultTemplate = this.structure.ownerContentTypeObservablePart((data) => data?.defaultTemplate); - this.cleanup = this.structure.ownerContentTypeObservablePart((data) => data?.defaultTemplate); + this.cleanup = this.structure.ownerContentTypeObservablePart((data) => data?.cleanup); this.routes.setRoutes([ { @@ -193,6 +193,10 @@ export class UmbDocumentTypeWorkspaceContext this.structure.updateOwnerContentType({ allowedContentTypes }); } + setCleanup(cleanup: UmbDocumentTypeDetailModel['cleanup']) { + this.structure.updateOwnerContentType({ cleanup }); + } + setCompositions(compositions: Array) { this.structure.updateOwnerContentType({ compositions }); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/settings/document-type-workspace-view-settings.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/settings/document-type-workspace-view-settings.element.ts index 58aef22912..0c3a69eaad 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/settings/document-type-workspace-view-settings.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/settings/document-type-workspace-view-settings.element.ts @@ -1,7 +1,7 @@ import { UMB_DOCUMENT_TYPE_WORKSPACE_CONTEXT } from '../../document-type-workspace.context-token.js'; -import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; +import { css, html, customElement, state, when } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { UUIToggleElement } from '@umbraco-cms/backoffice/external/uui'; +import type { UUIBooleanInputEvent, UUIToggleElement } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; @@ -11,22 +11,33 @@ export class UmbDocumentTypeWorkspaceViewSettingsElement extends UmbLitElement i @state() private _variesByCulture?: boolean; + @state() private _variesBySegment?: boolean; + @state() private _isElement?: boolean; + @state() + private _keepAllVersionsNewerThanDays?: number | null; + + @state() + private _keepLatestVersionPerDayForDays?: number | null; + + @state() + private _preventCleanup?: boolean; + constructor() { super(); // TODO: Figure out if this is the best way to consume the context or if it can be strongly typed with an UmbContextToken this.consumeContext(UMB_DOCUMENT_TYPE_WORKSPACE_CONTEXT, (documentTypeContext) => { this.#workspaceContext = documentTypeContext; - this._observeDocumentType(); + this.#observeDocumentType(); }); } - private _observeDocumentType() { + #observeDocumentType() { if (!this.#workspaceContext) return; this.observe( this.#workspaceContext.variesByCulture, @@ -37,13 +48,52 @@ export class UmbDocumentTypeWorkspaceViewSettingsElement extends UmbLitElement i (variesBySegment) => (this._variesBySegment = variesBySegment), ); this.observe(this.#workspaceContext.isElement, (isElement) => (this._isElement = isElement)); + + this.observe(this.#workspaceContext.cleanup, (cleanup) => { + this._preventCleanup = cleanup?.preventCleanup; + this._keepAllVersionsNewerThanDays = cleanup?.keepAllVersionsNewerThanDays; + this._keepLatestVersionPerDayForDays = cleanup?.keepLatestVersionPerDayForDays; + }); + } + + #setCleanup() { + this.#workspaceContext?.setCleanup({ + preventCleanup: this._preventCleanup ?? false, + keepAllVersionsNewerThanDays: this._keepAllVersionsNewerThanDays, + keepLatestVersionPerDayForDays: this._keepLatestVersionPerDayForDays, + }); + } + + #onChangePreventCleanup(event: UUIBooleanInputEvent) { + this._preventCleanup = event.target.checked; + if (this._preventCleanup) { + this._keepAllVersionsNewerThanDays = null; + this._keepLatestVersionPerDayForDays = null; + } + this.#setCleanup(); + } + + #onChangeKeepAllVersionsNewerThanDays(event: Event & { target: HTMLInputElement }) { + this._keepAllVersionsNewerThanDays = parseInt(event.target.value); + this.#setCleanup(); + } + + #onChangeKeepLatestVersionPerDayForDays(event: Event & { target: HTMLInputElement }) { + this._keepLatestVersionPerDayForDays = parseInt(event.target.value); + this.#setCleanup(); } render() { return html` - -
Allow editors to create content of different languages.
+ +
+ Allow editors to create content of different languages. +
- -
Allow editors to segment their content.
+ +
+ Allow editors to segment their content. +
- +
- An Element Type is used for content instances in Property Editors, like the Block Editors. + An Element Type is used for content instances in Property Editors, like the Block Editors.
{ this.#workspaceContext?.setIsElement((e.target as UUIToggleElement).checked); }} - label="Element type"> + label=${this.localize.term('contentTypeEditor_elementType')}>
- +
- Allow overriding the global history cleanup settings. (TODO: this ui is not working.. ) + Allow overriding the global history cleanup settings.
- - - Keep all versions newer than X days - - Keep latest version per day for X days - + + + + + ${when( + !this._preventCleanup, + () => html` + + + Keep all versions newer than days + + + + + + + + Keep latest version per day for days + + + + `, + )}