diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder-modal.element.ts index 98622abe35..3de122ca26 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder-modal.element.ts @@ -1,3 +1,4 @@ +import type { UmbExecuteTemplateQueryArgs } from '../../repository/query/types.js'; import { UmbTemplateQueryRepository } from '../../repository/query/index.js'; import { localizePropertyType, localizeSort } from './utils.js'; import type { UmbTemplateQueryBuilderFilterElement } from './query-builder-filter.element.js'; @@ -14,7 +15,6 @@ import { UMB_MODAL_MANAGER_CONTEXT, } from '@umbraco-cms/backoffice/modal'; import type { - TemplateQueryExecuteModel, TemplateQueryResultResponseModel, TemplateQuerySettingsResponseModel, } from '@umbraco-cms/backoffice/backend-api'; @@ -41,7 +41,7 @@ export default class UmbTemplateQueryBuilderModalElement extends UmbModalBaseEle private _templateQuery?: TemplateQueryResultResponseModel; @state() - private _queryRequest: TemplateQueryExecuteModel = {}; + private _queryRequest: UmbExecuteTemplateQueryArgs = {}; @state() private _queryBuilderSettings?: TemplateQuerySettingsResponseModel; @@ -80,7 +80,7 @@ export default class UmbTemplateQueryBuilderModalElement extends UmbModalBaseEle this.modalContext?.submit(); } - #updateQueryRequest(update: TemplateQueryExecuteModel) { + #updateQueryRequest(update: Partial) { this._queryRequest = { ...this._queryRequest, ...update }; this.#executeTemplateQuery(); } @@ -91,7 +91,7 @@ export default class UmbTemplateQueryBuilderModalElement extends UmbModalBaseEle } #executeTemplateQuery = async () => { - const { data } = await this.#templateQueryRepository.executeTemplateQuery(); + const { data } = await this.#templateQueryRepository.executeTemplateQuery(this._queryRequest); if (data) { this._templateQuery = { ...data }; this.value = { value: this._templateQuery?.queryExpression ?? '' }; @@ -103,9 +103,8 @@ export default class UmbTemplateQueryBuilderModalElement extends UmbModalBaseEle ?.open(UMB_DOCUMENT_PICKER_MODAL, { data: { hideTreeRoot: true } }) .onSubmit() .then((result) => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - this.#updateQueryRequest({ rootContentId: result.selection[0] }); + const selection = result.selection[0]; + this.#updateQueryRequest({ rootDocument: selection ? { unique: selection } : null }); if (result.selection.length > 0 && result.selection[0] === null) { this._selectedRootContentName = 'all pages'; @@ -120,7 +119,7 @@ export default class UmbTemplateQueryBuilderModalElement extends UmbModalBaseEle }; async #getDocumentItem(ids: string[]) { - const { data, error } = await this.#documentItemRepository.requestItems(ids); + const { data } = await this.#documentItemRepository.requestItems(ids); if (data) { // TODO: get correct variant name this._selectedRootContentName = data[0].variants[0].name; @@ -139,9 +138,7 @@ export default class UmbTemplateQueryBuilderModalElement extends UmbModalBaseEle #setContentType(event: Event) { const target = event.target as UUIComboboxListElement; - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - this.#updateQueryRequest({ contentTypeAlias: (target.value as string) ?? '' }); + this.#updateQueryRequest({ documentTypeAlias: target.value as string }); } #setSortProperty(event: Event) { @@ -149,10 +146,8 @@ export default class UmbTemplateQueryBuilderModalElement extends UmbModalBaseEle if (!this._queryRequest.sort) this.#setSortDirection(); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore this.#updateQueryRequest({ - sort: { ...this._queryRequest.sort, propertyAlias: (target.value as string) ?? '' }, + sort: { ...this._queryRequest.sort, propertyAlias: target.value as string }, }); } @@ -166,8 +161,6 @@ export default class UmbTemplateQueryBuilderModalElement extends UmbModalBaseEle return; } - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore this.#updateQueryRequest({ sort: { ...this._queryRequest.sort, @@ -182,8 +175,6 @@ export default class UmbTemplateQueryBuilderModalElement extends UmbModalBaseEle }; #updateFilters = () => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore this.#updateQueryRequest({ filters: Array.from(this._filterElements)?.map((filter) => filter.filter) ?? [] }); }; @@ -219,7 +210,7 @@ export default class UmbTemplateQueryBuilderModalElement extends UmbModalBaseEle from - + ${this._selectedRootContentName} diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/template-query.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/template-query.repository.ts index 8755615d39..92401b3733 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/template-query.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/template-query.repository.ts @@ -1,4 +1,5 @@ import { UmbTemplateQueryServerDataSource } from './template-query.server.data-source.js'; +import type { UmbExecuteTemplateQueryArgs } from './types.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; @@ -14,7 +15,7 @@ export class UmbTemplateQueryRepository extends UmbRepositoryBase { return this.#querySource.getTemplateQuerySettings(); } - async executeTemplateQuery() { - return this.#querySource.executeTemplateQuery(); + async executeTemplateQuery(args: UmbExecuteTemplateQueryArgs) { + return this.#querySource.executeTemplateQuery(args); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/template-query.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/template-query.server.data-source.ts index fba6a7f27f..94cc63f38b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/template-query.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/template-query.server.data-source.ts @@ -1,3 +1,4 @@ +import type { UmbExecuteTemplateQueryArgs } from './types.js'; import type { TemplateQueryExecuteModel } from '@umbraco-cms/backoffice/backend-api'; import { TemplateResource } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -33,14 +34,14 @@ export class UmbTemplateQueryServerDataSource { } /** * Executes a query builder query on the server - * + * @param {UmbExecuteTemplateQueryArgs} args * @return {*} * @memberof UmbTemplateQueryServerDataSource */ - async executeTemplateQuery(args: any) { + async executeTemplateQuery(args: UmbExecuteTemplateQueryArgs) { const requestBody: TemplateQueryExecuteModel = { - rootDocument: { id: args.rootContentUnique }, - documentTypeAlias: args.contentTypeAlias, + rootDocument: args.rootDocument ? { id: args.rootDocument.unique } : null, + documentTypeAlias: args.documentTypeAlias, filters: args.filters, sort: args.sort, take: args.take, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/types.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/types.ts new file mode 100644 index 0000000000..ca2049b8d9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/types.ts @@ -0,0 +1,12 @@ +import type { + TemplateQueryExecuteFilterPresentationModel, + TemplateQueryExecuteSortModel, +} from '@umbraco-cms/backoffice/backend-api'; + +export interface UmbExecuteTemplateQueryArgs { + rootDocument: { unique: string } | null; + documentTypeAlias: string | null; + filters: Array | null; + sort: TemplateQueryExecuteSortModel | null; + take: number; +}