add repository to use package store

This commit is contained in:
Jacob Overgaard
2023-02-23 16:06:56 +01:00
parent 0d37de62b4
commit 2d8b28a3c5

View File

@@ -0,0 +1,47 @@
import { UmbPackageStore, UMB_PACKAGE_STORE_TOKEN } from './package.store';
import { UmbPackageServerDataSource } from './sources/package.server.data';
import { UmbControllerHostInterface } from '@umbraco-cms/controller';
import { UmbContextConsumerController } from '@umbraco-cms/context-api';
/**
* A repository for Packages which mimicks a tree store.
* @export
*/
export class UmbPackageRepository {
#init!: Promise<void>;
#packageStore?: UmbPackageStore;
#packageSource: UmbPackageServerDataSource;
constructor(host: UmbControllerHostInterface) {
this.#packageSource = new UmbPackageServerDataSource(host);
this.#init = new Promise((res) => {
new UmbContextConsumerController(host, UMB_PACKAGE_STORE_TOKEN, (instance) => {
this.#packageStore = instance;
this.#requestRootItems(instance);
res();
});
});
}
/**
* Request the root items from the Data Source
* @memberOf UmbPackageRepository
* @private
*/
async #requestRootItems(store: UmbPackageStore) {
const { data } = await this.#packageSource.getRootItems();
if (data) {
store.appendItems(data.items);
}
}
/**
* Observable of root items
* @memberOf UmbPackageRepository
*/
async rootItems() {
await this.#init;
return this.#packageStore!.rootItems;
}
}