correct types

This commit is contained in:
Niels Lyngsø
2023-03-16 09:48:27 +01:00
parent 3dfaa27d57
commit 3c9aef06ad
9 changed files with 59 additions and 51 deletions

View File

@@ -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');

View File

@@ -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)}>

View File

@@ -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();

View File

@@ -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

View File

@@ -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;

View File

@@ -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'
);
}
}

View File

@@ -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();

View File

@@ -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;

View File

@@ -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);