From dfe3a105e050ec0707337316b99137cd786dca4a Mon Sep 17 00:00:00 2001 From: Julia Gru <56249914+julczka@users.noreply.github.com> Date: Mon, 26 Jun 2023 10:41:28 +0200 Subject: [PATCH] add template query source and update repository --- .../template.query-builder.server.data.ts | 34 ++++++++++ .../repository/template.repository.ts | 66 ++++++++++++++----- 2 files changed, 82 insertions(+), 18 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/sources/template.query-builder.server.data.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/sources/template.query-builder.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/sources/template.query-builder.server.data.ts new file mode 100644 index 0000000000..b9bd23caa5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/sources/template.query-builder.server.data.ts @@ -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 })); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/template.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/template.repository.ts index ca7b933e8d..5506f658bd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/template.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/template.repository.ts @@ -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>; +// postTemplateQueryExecute({ requestBody }: { requestBody?: any }): Promise>; +// } export class UmbTemplateRepository implements UmbTreeRepository, @@ -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) { - 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> { - 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) { + 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> { + throw new Error('items method is not implemented in UmbTemplateRepository'); + } + + //#endregion }