From c53160feedbdfa50676152409cf3fa09498a86eb Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 20 Nov 2023 15:59:37 +0100 Subject: [PATCH] get repository from manifest instead of constructor --- .../core/collection/collection.context.ts | 95 +++++++++++++------ 1 file changed, 65 insertions(+), 30 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection.context.ts index 14dd632904..0d2d5ad0fb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection.context.ts @@ -2,21 +2,31 @@ import { UmbCollectionConfiguration } from './types.js'; import { UmbCollectionRepository } from '@umbraco-cms/backoffice/repository'; import { UmbBaseController, type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; +import { UmbArrayState, UmbNumberState, UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import { - UmbArrayState, - UmbNumberState, - UmbObjectState, -} from '@umbraco-cms/backoffice/observable-api'; -import { UmbExtensionsManifestInitializer, createExtensionApi } from '@umbraco-cms/backoffice/extension-api'; -import { ManifestCollectionView, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; + UmbExtensionApiInitializer, + UmbExtensionsManifestInitializer, + createExtensionApi, +} from '@umbraco-cms/backoffice/extension-api'; +import { + ManifestCollectionView, + ManifestRepository, + umbExtensionsRegistry, +} from '@umbraco-cms/backoffice/extension-registry'; import type { UmbCollectionFilterModel } from '@umbraco-cms/backoffice/collection'; import { UmbSelectionManager, UmbPaginationManager } from '@umbraco-cms/backoffice/utils'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; +import { ManifestCollection } from '../extension-registry/models/collection.models.js'; -export class UmbCollectionContext extends UmbBaseController { +export class UmbCollectionContext< + ItemType, + FilterModelType extends UmbCollectionFilterModel, +> extends UmbBaseController { protected entityType: string; protected init; + #alias?: string; + #items = new UmbArrayState([]); public readonly items = this.#items.asObservable(); @@ -38,9 +48,20 @@ export class UmbCollectionContext void; + #initialized = false; + + #init = new Promise((resolve) => { + this.#initialized ? resolve() : (this.#initResolver = resolve); + }); + public readonly pagination = new UmbPaginationManager(); - constructor(host: UmbControllerHostElement, entityType: string, repositoryAlias: string, config: UmbCollectionConfiguration = { pageSize: 50 }) { + constructor( + host: UmbControllerHostElement, + entityType: string, + config: UmbCollectionConfiguration = { pageSize: 50 }, + ) { super(host); this.entityType = entityType; @@ -50,16 +71,30 @@ export class UmbCollectionContext { - if (repositoryManifest) { - // TODO: Maybe use the UmbExtensionApiController instead of createExtensionApi, to ensure usage of conditions: - const result = await createExtensionApi(repositoryManifest, [this._host]); - this.repository = result as UmbCollectionRepository; - this.requestCollection(); - } - }, - 'umbCollectionRepositoryObserver' - ) - } - #observeViews() { return new UmbExtensionsManifestInitializer(this, umbExtensionsRegistry, 'collectionView', null, (views) => { - this.#views.next(views.map(view => view.manifest)); + this.#views.next(views.map((view) => view.manifest)); this.#setCurrentView(); }); } @@ -202,7 +222,7 @@ export class UmbCollectionContext; this.setFilter(skipFilter); - } + }; #setCurrentView() { const currentUrl = new URL(window.location.href); @@ -217,6 +237,21 @@ export class UmbCollectionContext { + if (!manifest) return; + const repositoryAlias = manifest.meta.repositoryAlias; + if (!repositoryAlias) throw new Error('A collection must have a repository alias.'); + console.log(repositoryAlias); + }, + 'umbObserveCollectionManifest', + ); + } } export const UMB_COLLECTION_CONTEXT = new UmbContextToken>('UmbCollectionContext');