correct types
This commit is contained in:
@@ -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<DataType> = UmbTreeStore<DataType>
|
||||
> {
|
||||
private _host: UmbControllerHostInterface;
|
||||
@@ -19,9 +20,9 @@ export class UmbCollectionContext<
|
||||
#repository?: UmbTreeRepository;
|
||||
|
||||
private _store?: StoreType;
|
||||
protected _dataObserver?: UmbObserverController<EntityTreeItemResponseModel[]>;
|
||||
protected _dataObserver?: UmbObserverController<DataType[]>;
|
||||
|
||||
#data = new ArrayState(<Array<EntityTreeItemResponseModel>>[]);
|
||||
#data = new ArrayState(<Array<DataType>>[]);
|
||||
public readonly data = this.#data.asObservable();
|
||||
|
||||
#selection = new ArrayState(<Array<string>>[]);
|
||||
@@ -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<DataType[]>, (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<DataType[]>, (nodes) => {
|
||||
if (nodes) {
|
||||
this.#data.next(nodes);
|
||||
}
|
||||
@@ -174,6 +175,4 @@ export class UmbCollectionContext<
|
||||
}
|
||||
}
|
||||
|
||||
export const UMB_COLLECTION_CONTEXT_TOKEN = new UmbContextToken<UmbCollectionContext<any, any>>(
|
||||
'UmbCollectionContext'
|
||||
);
|
||||
export const UMB_COLLECTION_CONTEXT_TOKEN = new UmbContextToken<UmbCollectionContext<any, any>>('UmbCollectionContext');
|
||||
|
||||
@@ -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<FolderTreeItemResponseModel>;
|
||||
private _pickedItemsObserver?: UmbObserverController<EntityTreeItemResponseModel[]>;
|
||||
|
||||
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`
|
||||
<uui-ref-node name=${ifDefined(item.name === null ? undefined : item.name)} detail=${ifDefined(item.key)}>
|
||||
|
||||
@@ -83,7 +83,7 @@ export class UmbInputLanguagePickerElement extends FormControlMixin(UmbLitElemen
|
||||
|
||||
private _modalContext?: UmbModalContext;
|
||||
private _repository = new UmbLanguageRepository(this);
|
||||
private _pickedItemsObserver?: UmbObserverController<LanguageResponseModel>;
|
||||
private _pickedItemsObserver?: UmbObserverController<LanguageResponseModel[]>;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
@@ -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<EntityTreeItemResponseModel>;
|
||||
|
||||
private _modalContext?: UmbModalContext;
|
||||
private _pickedItemsObserver?: UmbObserverController<FolderTreeItemResponseModel>;
|
||||
private _pickedItemsObserver?: UmbObserverController<EntityTreeItemResponseModel[]>;
|
||||
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)
|
||||
</uui-button>`;
|
||||
}
|
||||
|
||||
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`
|
||||
<uui-card-media
|
||||
|
||||
@@ -5,7 +5,11 @@ import { customElement, property, state } from 'lit/decorators.js';
|
||||
import { UmbDataTypeRepository } from '../../../settings/data-types/repository/data-type.repository';
|
||||
import { UmbVariantId } from '../../variants/variant-id.class';
|
||||
import { UmbDocumentWorkspaceContext } from '../../../documents/documents/workspace/document-workspace.context';
|
||||
import type { DataTypeResponseModel, DataTypePropertyPresentationModel, PropertyTypeResponseModelBaseModel } from '@umbraco-cms/backend-api';
|
||||
import type {
|
||||
DataTypeResponseModel,
|
||||
DataTypePropertyPresentationModel,
|
||||
PropertyTypeResponseModelBaseModel,
|
||||
} from '@umbraco-cms/backend-api';
|
||||
import '../workspace-property/workspace-property.element';
|
||||
import { UmbLitElement } from '@umbraco-cms/element';
|
||||
import { UmbObserverController } from '@umbraco-cms/observable-api';
|
||||
@@ -42,7 +46,7 @@ export class UmbPropertyTypeBasedPropertyElement extends UmbLitElement {
|
||||
private _dataTypeData: DataTypePropertyPresentationModel[] = [];
|
||||
|
||||
private _dataTypeRepository: UmbDataTypeRepository = new UmbDataTypeRepository(this);
|
||||
private _dataTypeObserver?: UmbObserverController<DataTypeResponseModel | null>;
|
||||
private _dataTypeObserver?: UmbObserverController<DataTypeResponseModel | undefined>;
|
||||
|
||||
@state()
|
||||
private _value?: unknown;
|
||||
|
||||
@@ -39,7 +39,7 @@ export class UmbSectionViewsElement extends UmbLitElement {
|
||||
private _activeViewPathname?: string;
|
||||
|
||||
private _sectionContext?: UmbSectionContext;
|
||||
private _extensionsObserver?: UmbObserverController;
|
||||
private _extensionsObserver?: UmbObserverController<ManifestSectionView[]>;
|
||||
|
||||
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'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<ManifestTypes>;
|
||||
private propertyEditorUIObserver?: UmbObserverController<ManifestPropertyEditorUI | null>;
|
||||
|
||||
private _valueObserver?: UmbObserverController<unknown>;
|
||||
private _configObserver?: UmbObserverController<unknown>;
|
||||
private _configObserver?: UmbObserverController<DataTypePropertyPresentationModel[] | undefined>;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
@@ -20,7 +20,7 @@ export class UmbEntityWorkspaceManager<
|
||||
|
||||
state = new ObjectState<EntityDetailsType | undefined>(undefined);
|
||||
|
||||
protected _storeSubscription?: UmbObserverController;
|
||||
protected _storeSubscription?: UmbObserverController<EntityDetailsType | undefined>;
|
||||
|
||||
private _notificationContext?: UmbNotificationContext;
|
||||
private _store?: StoreType;
|
||||
|
||||
@@ -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<ManifestTheme[]>;
|
||||
|
||||
#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);
|
||||
|
||||
Reference in New Issue
Block a user