add template query source and update repository

This commit is contained in:
Julia Gru
2023-06-26 10:41:28 +02:00
parent 337f7d8bbe
commit dfe3a105e0
2 changed files with 82 additions and 18 deletions

View File

@@ -0,0 +1,34 @@
import { TemplateQueryExecuteModel, TemplateResource } from '@umbraco-cms/backoffice/backend-api';
import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';
/**
* A data source for the Template Query Builder that fetches data from the server
* @export
* @class UmbTemplateQueryBuilderServerDataSource
*/
export class UmbTemplateQueryBuilderServerDataSource {
#host: UmbControllerHostElement;
/**
* Creates an instance of UmbTemplateQueryBuilderServerDataSource.
* @param {UmbControllerHostElement} host
* @memberof UmbTemplateQueryBuilderServerDataSource
*/
constructor(host: UmbControllerHostElement) {
this.#host = host;
}
/**
* Fetches the query builder settings from the server
*
* @return {*}
* @memberof UmbTemplateQueryBuilderServerDataSource
*/
async getTemplateQuerySettings() {
return tryExecuteAndNotify(this.#host, TemplateResource.getTemplateQuerySettings());
}
async postTemplateQueryExecute({ requestBody }: { requestBody?: TemplateQueryExecuteModel }) {
return tryExecuteAndNotify(this.#host, TemplateResource.postTemplateQueryExecute({ requestBody }));
}
}

View File

@@ -6,6 +6,7 @@ import { UMB_TEMPLATE_ITEM_STORE_CONTEXT_TOKEN, UmbTemplateItemStore } from './t
import { UmbTemplateItemServerDataSource } from './sources/template.item.server.data.js';
import { Observable } from '@umbraco-cms/backoffice/external/rxjs';
import type {
DataSourceResponse,
UmbDetailRepository,
UmbItemDataSource,
UmbItemRepository,
@@ -20,10 +21,18 @@ import type {
EntityTreeItemResponseModel,
ItemResponseModelBaseModel,
TemplateItemResponseModel,
TemplateQueryExecuteModel,
TemplateQueryResultResponseModel,
TemplateQuerySettingsResponseModel,
TemplateResponseModel,
UpdateTemplateRequestModel,
} from '@umbraco-cms/backoffice/backend-api';
import { UmbTemplateQueryBuilderServerDataSource } from './sources/template.query-builder.server.data.js';
// interface UmbTemplateQueryBuilderRepository {
// getTemplateQuerySettings(): Promise<DataSourceResponse<TemplateQuerySettingsResponseModel>>;
// postTemplateQueryExecute({ requestBody }: { requestBody?: any }): Promise<DataSourceResponse<TemplateQueryResultResponseModel>>;
// }
export class UmbTemplateRepository
implements
UmbTreeRepository<EntityTreeItemResponseModel>,
@@ -42,6 +51,7 @@ export class UmbTemplateRepository
#store?: UmbTemplateStore;
#notificationContext?: UmbNotificationContext;
#queryBuilderSource: UmbTemplateQueryBuilderServerDataSource;
constructor(host: UmbControllerHostElement) {
this.#host = host;
@@ -49,6 +59,7 @@ export class UmbTemplateRepository
this.#treeDataSource = new UmbTemplateTreeServerDataSource(this.#host);
this.#detailDataSource = new UmbTemplateDetailServerDataSource(this.#host);
this.#itemSource = new UmbTemplateItemServerDataSource(this.#host);
this.#queryBuilderSource = new UmbTemplateQueryBuilderServerDataSource(this.#host);
this.#init = Promise.all([
new UmbContextConsumerController(this.#host, UMB_TEMPLATE_ITEM_STORE_CONTEXT_TOKEN, (instance) => {
@@ -160,24 +171,6 @@ export class UmbTemplateRepository
return { data, error, asObservable: () => this.#treeStore!.items([id]) };
}
// ITEMS:
async requestItems(ids: Array<string>) {
if (!ids) throw new Error('Ids are missing');
await this.#init;
const { data, error } = await this.#itemSource.getItems(ids);
if (data) {
this.#itemStore?.appendItems(data);
}
return { data, error, asObservable: () => this.#itemStore!.items(ids) };
}
async items(uniques: string[]): Promise<Observable<ItemResponseModelBaseModel[]>> {
throw new Error('items method is not implemented in UmbTemplateRepository');
}
async byId(id: string) {
if (!id) throw new Error('Key is missing');
await this.#init;
@@ -255,4 +248,41 @@ export class UmbTemplateRepository
return { error };
}
//#endregion
//#region TEMPLATE_QUERY:
async getTemplateQuerySettings() {
await this.#init;
return this.#queryBuilderSource.getTemplateQuerySettings();
}
async postTemplateQueryExecute({ requestBody }: { requestBody?: TemplateQueryExecuteModel }) {
await this.#init;
return this.#queryBuilderSource.postTemplateQueryExecute({ requestBody });
}
//#endregion
//#region ITEMS:
async requestItems(ids: Array<string>) {
if (!ids) throw new Error('Ids are missing');
await this.#init;
const { data, error } = await this.#itemSource.getItems(ids);
if (data) {
this.#itemStore?.appendItems(data);
}
return { data, error, asObservable: () => this.#itemStore!.items(ids) };
}
async items(uniques: string[]): Promise<Observable<ItemResponseModelBaseModel[]>> {
throw new Error('items method is not implemented in UmbTemplateRepository');
}
//#endregion
}