From 425f538a626b2b7bd44f3bea5172fbd4434cc500 Mon Sep 17 00:00:00 2001 From: Julia Gru <56249914+julczka@users.noreply.github.com> Date: Mon, 26 Jun 2023 12:33:21 +0200 Subject: [PATCH] get data in the modal --- .../query-builder/query-builder.element.ts | 54 +++++++++++++++++-- .../template.query-builder.server.data.ts | 8 ++- .../repository/template.repository.ts | 9 +--- 3 files changed, 57 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder.element.ts index 729bd34713..bddcb6785f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder.element.ts @@ -1,7 +1,13 @@ +import { UmbTemplateRepository } from '../../repository/template.repository.js'; import { UUITextStyles } from '@umbraco-cms/backoffice/external/uui'; -import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; +import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbModalBaseElement } from '@umbraco-cms/internal/modal'; import { UMB_MODAL_MANAGER_CONTEXT_TOKEN, UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; +import { + TemplateQueryExecuteModel, + TemplateQueryResultResponseModel, + TemplateQuerySettingsResponseModel, +} from '@umbraco-cms/backoffice/backend-api'; export interface TemplateQueryBuilderModalData { hidePartialViews?: boolean; @@ -16,17 +22,52 @@ export default class UmbChooseInsertTypeModalElement extends UmbModalBaseElement TemplateQueryBuilderModalData, TemplateQueryBuilderModalResult > { - private _close() { + #close() { this.modalContext?.reject(); } - private _modalContext?: UmbModalManagerContext; + #submit() { + this.modalContext?.submit({ + value: this._templateQuery?.queryExpression ?? '', + }); + } + + @state() + private _templateQuery?: TemplateQueryResultResponseModel; + + #queryRequest: TemplateQueryExecuteModel = {}; + + @state() + private _queryBuiilderSettings?: TemplateQuerySettingsResponseModel; + + #modalManagerContext?: UmbModalManagerContext; + #templateRepository: UmbTemplateRepository; constructor() { super(); + this.#templateRepository = new UmbTemplateRepository(this); + this.consumeContext(UMB_MODAL_MANAGER_CONTEXT_TOKEN, (instance) => { - this._modalContext = instance; + this.#modalManagerContext = instance; }); + this.#init(); + } + + #init() { + this.#getTemplateQuerySettings(); + this.#postTemplateQuery(); + } + + async #getTemplateQuerySettings() { + const { data, error } = await this.#templateRepository.getTemplateQuerySettings(); + if (data) this._queryBuiilderSettings = data; + } + + async #postTemplateQuery() { + const { data, error } = await this.#templateRepository.postTemplateQueryExecute({ + requestBody: this.#queryRequest, + }); + if (data) this._templateQuery = data; } render() { @@ -43,8 +84,11 @@ export default class UmbChooseInsertTypeModalElement extends UmbModalBaseElement + + ${this._templateQuery?.queryExpression ?? ''}
- Close + Close + Submit
`; 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 index b9bd23caa5..f6a718016d 100644 --- 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 @@ -27,7 +27,13 @@ export class UmbTemplateQueryBuilderServerDataSource { async getTemplateQuerySettings() { return tryExecuteAndNotify(this.#host, TemplateResource.getTemplateQuerySettings()); } - + /** + * Executes a query builder query on the server + * + * @param {{ requestBody?: TemplateQueryExecuteModel }} { requestBody } + * @return {*} + * @memberof UmbTemplateQueryBuilderServerDataSource + */ 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 5506f658bd..46e157024a 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 @@ -4,9 +4,9 @@ import { UmbTemplateTreeServerDataSource } from './sources/template.tree.server. import { UmbTemplateDetailServerDataSource } from './sources/template.detail.server.data.js'; import { UMB_TEMPLATE_ITEM_STORE_CONTEXT_TOKEN, UmbTemplateItemStore } from './template-item.store.js'; import { UmbTemplateItemServerDataSource } from './sources/template.item.server.data.js'; +import { UmbTemplateQueryBuilderServerDataSource } from './sources/template.query-builder.server.data.js'; import { Observable } from '@umbraco-cms/backoffice/external/rxjs'; import type { - DataSourceResponse, UmbDetailRepository, UmbItemDataSource, UmbItemRepository, @@ -22,17 +22,10 @@ import type { 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,