diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.context.ts index 5335a14efe..ff2b2e6753 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.context.ts @@ -1,4 +1,4 @@ -import type { ContentTreeItemResponseModel, EntityTreeItemResponseModel } from '@umbraco-cms/backend-api'; +import type { EntityTreeItemResponseModel } from '@umbraco-cms/backend-api'; import type { UmbTreeStore } from '@umbraco-cms/store'; import type { UmbControllerHostInterface } from '@umbraco-cms/controller'; import { UmbContextToken, UmbContextConsumerController } from '@umbraco-cms/context-api'; @@ -6,10 +6,11 @@ import { ArrayState, UmbObserverController } from '@umbraco-cms/observable-api'; import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import { createExtensionClass } from 'libs/extensions-api/create-extension-class.function'; import { UmbTreeRepository } from '@umbraco-cms/repository'; +import { Observable } from 'rxjs'; // TODO: Clean up the need for store as Media has switched to use Repositories(repository). export class UmbCollectionContext< - DataType extends ContentTreeItemResponseModel, + DataType extends EntityTreeItemResponseModel = EntityTreeItemResponseModel, StoreType extends UmbTreeStore = UmbTreeStore > { private _host: UmbControllerHostInterface; @@ -19,9 +20,9 @@ export class UmbCollectionContext< #repository?: UmbTreeRepository; private _store?: StoreType; - protected _dataObserver?: UmbObserverController; + protected _dataObserver?: UmbObserverController; - #data = new ArrayState(>[]); + #data = new ArrayState(>[]); public readonly data = this.#data.asObservable(); #selection = new ArrayState(>[]); @@ -123,7 +124,7 @@ export class UmbCollectionContext< const observable = (await this.#repository.requestTreeItemsOf(this._entityKey)).asObservable?.(); if (observable) { - this._dataObserver = new UmbObserverController(this._host, observable, (nodes) => { + this._dataObserver = new UmbObserverController(this._host, observable as Observable, (nodes) => { if (nodes) { this.#data.next(nodes); } @@ -133,7 +134,7 @@ export class UmbCollectionContext< const observable = (await this.#repository.requestRootTreeItems()).asObservable?.(); if (observable) { - this._dataObserver = new UmbObserverController(this._host, observable, (nodes) => { + this._dataObserver = new UmbObserverController(this._host, observable as Observable, (nodes) => { if (nodes) { this.#data.next(nodes); } @@ -174,6 +175,4 @@ export class UmbCollectionContext< } } -export const UMB_COLLECTION_CONTEXT_TOKEN = new UmbContextToken>( - 'UmbCollectionContext' -); +export const UMB_COLLECTION_CONTEXT_TOKEN = new UmbContextToken>('UmbCollectionContext'); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-document-picker/input-document-picker.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-document-picker/input-document-picker.element.ts index a2a287ab6f..f51dc2af03 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-document-picker/input-document-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-document-picker/input-document-picker.element.ts @@ -9,7 +9,7 @@ import { UMB_CONFIRM_MODAL_TOKEN } from '../../modals/confirm'; import { UMB_DOCUMENT_PICKER_MODAL_TOKEN } from '../../../documents/documents/modals/document-picker'; import { UmbModalContext, UMB_MODAL_CONTEXT_TOKEN } from '@umbraco-cms/modal'; import { UmbLitElement } from '@umbraco-cms/element'; -import type { DocumentTreeItemResponseModel, FolderTreeItemResponseModel } from '@umbraco-cms/backend-api'; +import type { DocumentTreeItemResponseModel, EntityTreeItemResponseModel } from '@umbraco-cms/backend-api'; import type { UmbObserverController } from '@umbraco-cms/observable-api'; @customElement('umb-input-document-picker') @@ -81,7 +81,7 @@ export class UmbInputDocumentPickerElement extends FormControlMixin(UmbLitElemen private _modalContext?: UmbModalContext; private _documentStore?: UmbDocumentTreeStore; - private _pickedItemsObserver?: UmbObserverController; + private _pickedItemsObserver?: UmbObserverController; constructor() { super(); @@ -133,7 +133,7 @@ export class UmbInputDocumentPickerElement extends FormControlMixin(UmbLitElemen }); } - private async _removeItem(item: FolderTreeItemResponseModel) { + private async _removeItem(item: EntityTreeItemResponseModel) { const modalHandler = this._modalContext?.open(UMB_CONFIRM_MODAL_TOKEN, { color: 'danger', headline: `Remove ${item.name}?`, @@ -158,9 +158,9 @@ export class UmbInputDocumentPickerElement extends FormControlMixin(UmbLitElemen `; } - private _renderItem(item: FolderTreeItemResponseModel) { + private _renderItem(item: EntityTreeItemResponseModel) { // TODO: remove when we have a way to handle trashed items - const tempItem = item as FolderTreeItemResponseModel & { isTrashed: boolean }; + const tempItem = item as EntityTreeItemResponseModel & { isTrashed: boolean }; return html` diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-language-picker/input-language-picker.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-language-picker/input-language-picker.element.ts index 512cf9d4bd..7372d64a27 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-language-picker/input-language-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-language-picker/input-language-picker.element.ts @@ -83,7 +83,7 @@ export class UmbInputLanguagePickerElement extends FormControlMixin(UmbLitElemen private _modalContext?: UmbModalContext; private _repository = new UmbLanguageRepository(this); - private _pickedItemsObserver?: UmbObserverController; + private _pickedItemsObserver?: UmbObserverController; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-media-picker/input-media-picker.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-media-picker/input-media-picker.element.ts index 165e02f077..ef74cc83da 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-media-picker/input-media-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-media-picker/input-media-picker.element.ts @@ -8,7 +8,7 @@ import { UMB_CONFIRM_MODAL_TOKEN } from '../../modals/confirm'; import { UMB_MEDIA_PICKER_MODAL_TOKEN } from '../../../media/media/modals/media-picker'; import { UmbModalContext, UMB_MODAL_CONTEXT_TOKEN } from '@umbraco-cms/modal'; import { UmbLitElement } from '@umbraco-cms/element'; -import type { EntityTreeItemResponseModel, FolderTreeItemResponseModel } from '@umbraco-cms/backend-api'; +import type { EntityTreeItemResponseModel } from '@umbraco-cms/backend-api'; import type { UmbObserverController } from '@umbraco-cms/observable-api'; @customElement('umb-input-media-picker') @@ -91,7 +91,7 @@ export class UmbInputMediaPickerElement extends FormControlMixin(UmbLitElement) private _items?: Array; private _modalContext?: UmbModalContext; - private _pickedItemsObserver?: UmbObserverController; + private _pickedItemsObserver?: UmbObserverController; private _repository = new UmbMediaRepository(this); constructor() { @@ -147,7 +147,7 @@ export class UmbInputMediaPickerElement extends FormControlMixin(UmbLitElement) }); } - private _removeItem(item: FolderTreeItemResponseModel) { + private _removeItem(item: EntityTreeItemResponseModel) { const modalHandler = this._modalContext?.open(UMB_CONFIRM_MODAL_TOKEN, { color: 'danger', headline: `Remove ${item.name}?`, @@ -177,9 +177,9 @@ export class UmbInputMediaPickerElement extends FormControlMixin(UmbLitElement) `; } - private _renderItem(item: FolderTreeItemResponseModel) { + private _renderItem(item: EntityTreeItemResponseModel) { // TODO: remove when we have a way to handle trashed items - const tempItem = item as FolderTreeItemResponseModel & { isTrashed: boolean }; + const tempItem = item as EntityTreeItemResponseModel & { isTrashed: boolean }; return html` ; + private _dataTypeObserver?: UmbObserverController; @state() private _value?: unknown; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-views/section-views.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-views/section-views.element.ts index fe8129400f..ce66e3de28 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-views/section-views.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-views/section-views.element.ts @@ -39,7 +39,7 @@ export class UmbSectionViewsElement extends UmbLitElement { private _activeViewPathname?: string; private _sectionContext?: UmbSectionContext; - private _extensionsObserver?: UmbObserverController; + private _extensionsObserver?: UmbObserverController; constructor() { super(); @@ -60,34 +60,43 @@ export class UmbSectionViewsElement extends UmbLitElement { private _observeViews() { if (!this._sectionContext) return; - this.observe(this._sectionContext.alias, (sectionAlias) => { - this._observeExtensions(sectionAlias); - }, 'viewsObserver') + this.observe( + this._sectionContext.alias, + (sectionAlias) => { + this._observeExtensions(sectionAlias); + }, + 'viewsObserver' + ); } private _observeExtensions(sectionAlias?: string) { this._extensionsObserver?.destroy(); - if(sectionAlias) { + if (sectionAlias) { this._extensionsObserver = this.observe( - umbExtensionsRegistry?.extensionsOfType('sectionView').pipe( + umbExtensionsRegistry + ?.extensionsOfType('sectionView') + .pipe( map((views) => views .filter((view) => view.meta.sections.includes(sectionAlias)) .sort((a, b) => b.meta.weight - a.meta.weight) ) - ) ?? of([]) - , - (views) => { - this._views = views; - } + ) ?? of([]), + (views) => { + this._views = views; + } ); } } private _observeActiveView() { - if(this._sectionContext) { - this.observe(this._sectionContext?.activeViewPathname, (pathname) => { - this._activeViewPathname = pathname; - }, 'activeViewPathnameObserver'); + if (this._sectionContext) { + this.observe( + this._sectionContext?.activeViewPathname, + (pathname) => { + this._activeViewPathname = pathname; + }, + 'activeViewPathnameObserver' + ); } } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace-property/workspace-property.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace-property/workspace-property.element.ts index e670c5d8e8..6574b32776 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace-property/workspace-property.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace-property/workspace-property.element.ts @@ -2,17 +2,17 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, html } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; import { ifDefined } from 'lit-html/directives/if-defined.js'; +import { UmbPropertyEditorElement } from '@umbraco-cms/property-editor'; import { UmbVariantId } from '../../variants/variant-id.class'; import { UmbWorkspacePropertyContext } from './workspace-property.context'; import { createExtensionElement, umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; -import type { ManifestPropertyEditorUI, ManifestTypes } from '@umbraco-cms/models'; +import type { ManifestPropertyEditorUI } from '@umbraco-cms/models'; import '../../property-actions/shared/property-action-menu/property-action-menu.element'; import '../../../../backoffice/shared/components/workspace/workspace-property-layout/workspace-property-layout.element'; import { UmbObserverController } from '@umbraco-cms/observable-api'; import { UmbLitElement } from '@umbraco-cms/element'; import { DataTypePropertyPresentationModel } from '@umbraco-cms/backend-api'; -import { UmbPropertyEditorElement } from '@umbraco-cms/property-editor'; /** * @element umb-workspace-property @@ -151,10 +151,10 @@ export class UmbWorkspacePropertyElement extends UmbLitElement { private _propertyContext = new UmbWorkspacePropertyContext(this); - private propertyEditorUIObserver?: UmbObserverController; + private propertyEditorUIObserver?: UmbObserverController; private _valueObserver?: UmbObserverController; - private _configObserver?: UmbObserverController; + private _configObserver?: UmbObserverController; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-context/entity-manager-controller.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-context/entity-manager-controller.ts index 08137a4d6f..0fdd21a59e 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-context/entity-manager-controller.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-context/entity-manager-controller.ts @@ -20,7 +20,7 @@ export class UmbEntityWorkspaceManager< state = new ObjectState(undefined); - protected _storeSubscription?: UmbObserverController; + protected _storeSubscription?: UmbObserverController; private _notificationContext?: UmbNotificationContext; private _store?: StoreType; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/themes/theme.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/themes/theme.context.ts index 5e246bc46e..9f5f0d36fb 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/themes/theme.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/themes/theme.context.ts @@ -14,9 +14,9 @@ export class UmbThemeContext { #theme = new StringState('umb-light-theme'); public readonly theme = this.#theme.asObservable(); - private themeSubscription?: UmbObserverController; + private themeSubscription?: UmbObserverController; - #styleElement: HTMLLinkElement| HTMLStyleElement | null = null; + #styleElement: HTMLLinkElement | HTMLStyleElement | null = null; constructor(host: UmbControllerHostInterface) { this._host = host; @@ -43,25 +43,21 @@ export class UmbThemeContext { async (themes) => { this.#styleElement?.remove(); if (themes.length > 0) { - if(themes[0].loader) { - - const styleEl = this.#styleElement = document.createElement('style'); + if (themes[0].loader) { + const styleEl = (this.#styleElement = document.createElement('style')); styleEl.setAttribute('type', 'text/css'); document.head.appendChild(styleEl); const result = await themes[0].loader(); // Checking that this is still our styleElement, it has not been replaced with another theme in between. - if(styleEl === this.#styleElement) { + if (styleEl === this.#styleElement) { (styleEl as any).appendChild(document.createTextNode(result)); } - } else if (themes[0].css) { - this.#styleElement = document.createElement('link'); this.#styleElement.setAttribute('rel', 'stylesheet'); this.#styleElement.setAttribute('href', themes[0].css); document.head.appendChild(this.#styleElement); - } } else { localStorage.removeItem(LOCAL_STORAGE_KEY);