fix query builder types

This commit is contained in:
Mads Rasmussen
2024-02-04 20:17:04 +01:00
parent adfe233b3f
commit d7b780bed3
4 changed files with 30 additions and 25 deletions

View File

@@ -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 = <TemplateQueryExecuteModel>{};
private _queryRequest: UmbExecuteTemplateQueryArgs = <UmbExecuteTemplateQueryArgs>{};
@state()
private _queryBuilderSettings?: TemplateQuerySettingsResponseModel;
@@ -80,7 +80,7 @@ export default class UmbTemplateQueryBuilderModalElement extends UmbModalBaseEle
this.modalContext?.submit();
}
#updateQueryRequest(update: TemplateQueryExecuteModel) {
#updateQueryRequest(update: Partial<UmbExecuteTemplateQueryArgs>) {
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
</uui-combobox-list></umb-dropdown
>
<umb-localize key="template_from">from</umb-localize>
<uui-button look="outline" @click=${this.#openDocumentPicker} label="Choose root content">
<uui-button look="outline" @click=${this.#openDocumentPicker} label="Choose root document">
${this._selectedRootContentName}
</uui-button>
</div>

View File

@@ -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);
}
}

View File

@@ -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,

View File

@@ -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<TemplateQueryExecuteFilterPresentationModel> | null;
sort: TemplateQueryExecuteSortModel | null;
take: number;
}