@umbraco-cms/backoffice 14.0.0-1c3e1277 → 14.0.0-1ebba150
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-cms/custom-elements.json +94 -35
- package/dist-cms/external/uui/index.js +210 -702
- package/dist-cms/mocks/data/template.data.d.ts +5 -23
- package/dist-cms/mocks/data/template.data.js +44 -21
- package/dist-cms/mocks/handlers/template.handlers.js +4 -0
- package/dist-cms/packages/core/components/button-with-dropdown/button-with-dropdown.element.d.ts +2 -0
- package/dist-cms/packages/core/components/button-with-dropdown/button-with-dropdown.element.js +4 -4
- package/dist-cms/packages/core/components/code-block/code-block.element.d.ts +6 -1
- package/dist-cms/packages/core/components/code-block/code-block.element.js +93 -19
- package/dist-cms/packages/core/components/index.d.ts +1 -0
- package/dist-cms/packages/core/components/index.js +1 -1
- package/dist-cms/packages/core/modal/token/dictionary-item-picker-modal.token.d.ts +0 -1
- package/dist-cms/packages/core/modal/token/dictionary-item-picker-modal.token.js +1 -2
- package/dist-cms/packages/core/tree/tree.context.js +8 -11
- package/dist-cms/packages/templating/components/insert-menu/templating-insert-menu.element.js +3 -31
- package/dist-cms/packages/templating/modals/insert-choose-type-sidebar.element.d.ts +2 -4
- package/dist-cms/packages/templating/modals/insert-choose-type-sidebar.element.js +5 -27
- package/dist-cms/packages/templating/modals/insert-section-modal/insert-section-input.element.js +1 -0
- package/dist-cms/packages/templating/modals/insert-section-modal/insert-section-modal.element.js +5 -4
- package/dist-cms/packages/templating/modals/manifests.d.ts +0 -1
- package/dist-cms/packages/templating/modals/manifests.js +0 -7
- package/dist-cms/packages/templating/templates/components/alias-input/alias-input.js +1 -1
- package/dist-cms/packages/templating/templates/index.d.ts +2 -0
- package/dist-cms/packages/templating/templates/index.js +2 -0
- package/dist-cms/packages/templating/templates/manifests.d.ts +1 -1
- package/dist-cms/packages/templating/templates/manifests.js +2 -0
- package/dist-cms/packages/templating/templates/modals/manifests.d.ts +3 -0
- package/dist-cms/packages/templating/templates/modals/manifests.js +10 -0
- package/dist-cms/packages/templating/templates/modals/modal-tokens.d.ts +3 -0
- package/dist-cms/packages/templating/templates/modals/modal-tokens.js +6 -0
- package/dist-cms/packages/templating/templates/modals/query-builder/query-builder-filter.element.d.ts +24 -0
- package/dist-cms/packages/templating/templates/modals/query-builder/query-builder-filter.element.js +156 -0
- package/dist-cms/packages/templating/templates/modals/query-builder/query-builder.element.d.ts +28 -0
- package/dist-cms/packages/templating/templates/modals/query-builder/query-builder.element.js +277 -0
- package/dist-cms/packages/templating/templates/repository/sources/template.query-builder.server.data.d.ts +33 -0
- package/dist-cms/packages/templating/templates/repository/sources/template.query-builder.server.data.js +37 -0
- package/dist-cms/packages/templating/templates/repository/template.repository.d.ts +11 -7
- package/dist-cms/packages/templating/templates/repository/template.repository.js +28 -14
- package/dist-cms/packages/templating/templates/workspace/template-workspace-editor.element.js +21 -3
- package/dist-cms/packages/templating/templates/workspace/template-workspace.context.js +2 -1
- package/dist-cms/packages/templating/templates/workspace/template-workspace.element.d.ts +1 -0
- package/dist-cms/packages/templating/templates/workspace/template-workspace.element.js +2 -1
- package/dist-cms/tinymce/langs/nb_NO.js +62 -62
- package/dist-cms/tinymce/langs/uz.js +406 -0
- package/dist-cms/tsconfig.tsbuildinfo +1 -1
- package/dist-cms/vscode-html-custom-data.json +40 -7
- package/package.json +3 -3
- package/dist-cms/packages/templating/modals/insert-value-sidebar.element.d.ts +0 -19
- package/dist-cms/packages/templating/modals/insert-value-sidebar.element.js +0 -135
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ManifestModal } from '../../core/extension-registry/index.js';
|
|
2
2
|
export declare const UMB_MODAL_TEMPLATING_INSERT_CHOOSE_TYPE_SIDEBAR_ALIAS = "Umb.Modal.Templating.Insert.ChooseType.Sidebar";
|
|
3
|
-
export declare const UMB_MODAL_TEMPLATING_INSERT_FIELD_SIDEBAR_ALIAS = "Umb.Modal.Templating.Insert.Value.Sidebar";
|
|
4
3
|
export declare const UMB_MODAL_TEMPLATING_INSERT_SECTION_SIDEBAR_ALIAS = "Umb.Modal.Templating.Insert.Section.Sidebar";
|
|
5
4
|
export declare const manifests: ManifestModal[];
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { UMB_PARTIAL_VIEW_PICKER_MODAL_ALIAS } from '../../core/modal/index.js';
|
|
2
2
|
export const UMB_MODAL_TEMPLATING_INSERT_CHOOSE_TYPE_SIDEBAR_ALIAS = 'Umb.Modal.Templating.Insert.ChooseType.Sidebar';
|
|
3
|
-
export const UMB_MODAL_TEMPLATING_INSERT_FIELD_SIDEBAR_ALIAS = 'Umb.Modal.Templating.Insert.Value.Sidebar';
|
|
4
3
|
export const UMB_MODAL_TEMPLATING_INSERT_SECTION_SIDEBAR_ALIAS = 'Umb.Modal.Templating.Insert.Section.Sidebar';
|
|
5
4
|
const modals = [
|
|
6
5
|
{
|
|
@@ -9,12 +8,6 @@ const modals = [
|
|
|
9
8
|
name: 'Choose insert type sidebar',
|
|
10
9
|
loader: () => import('./insert-choose-type-sidebar.element.js'),
|
|
11
10
|
},
|
|
12
|
-
{
|
|
13
|
-
type: 'modal',
|
|
14
|
-
alias: UMB_MODAL_TEMPLATING_INSERT_FIELD_SIDEBAR_ALIAS,
|
|
15
|
-
name: 'Insert value type sidebar',
|
|
16
|
-
loader: () => import('./insert-value-sidebar.element.js'),
|
|
17
|
-
},
|
|
18
11
|
{
|
|
19
12
|
type: 'modal',
|
|
20
13
|
alias: UMB_PARTIAL_VIEW_PICKER_MODAL_ALIAS,
|
|
@@ -16,7 +16,7 @@ export let UmbTemplateAliasInputElement = class UmbTemplateAliasInputElement ext
|
|
|
16
16
|
}
|
|
17
17
|
render() {
|
|
18
18
|
return html `
|
|
19
|
-
<uui-button compact @click=${this.#handleClick}>
|
|
19
|
+
<uui-button compact @click=${this.#handleClick} label="unlock alias input">
|
|
20
20
|
<uui-symbol-lock .open=${this.isOpen} ></uui-symbol-lock>
|
|
21
21
|
</uui-button>
|
|
22
22
|
<input placeholder="Enter alias..." .value=${this.value} ?disabled=${!this.isOpen} @input=${this.#setValue}></input>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const manifests: (import("../../core/index.js").ManifestEntityAction | import("../../core/index.js").ManifestMenuItemTreeKind | import("../../core/index.js").ManifestRepository | import("../../core/index.js").ManifestStore | import("../../core/index.js").ManifestTreeStore | import("../../core/index.js").ManifestItemStore | import("../../core/index.js").ManifestTree | import("../../core/index.js").ManifestTreeItem | import("../../core/index.js").ManifestWorkspace | import("../../core/index.js").ManifestWorkspaceAction | import("../../core/index.js").ManifestWorkspaceEditorView)[];
|
|
1
|
+
export declare const manifests: (import("../../core/index.js").ManifestEntityAction | import("../../core/index.js").ManifestMenuItemTreeKind | import("../../core/index.js").ManifestModal | import("../../core/index.js").ManifestRepository | import("../../core/index.js").ManifestStore | import("../../core/index.js").ManifestTreeStore | import("../../core/index.js").ManifestItemStore | import("../../core/index.js").ManifestTree | import("../../core/index.js").ManifestTreeItem | import("../../core/index.js").ManifestWorkspace | import("../../core/index.js").ManifestWorkspaceAction | import("../../core/index.js").ManifestWorkspaceEditorView)[];
|
|
@@ -3,7 +3,9 @@ import { manifests as menuItemManifests } from './menu-item/manifests.js';
|
|
|
3
3
|
import { manifests as treeManifests } from './tree/manifests.js';
|
|
4
4
|
import { manifests as entityActionsManifests } from './entity-actions/manifests.js';
|
|
5
5
|
import { manifests as workspaceManifests } from './workspace/manifests.js';
|
|
6
|
+
import { manifests as modalManifests } from './modals/manifests.js';
|
|
6
7
|
export const manifests = [
|
|
8
|
+
...modalManifests,
|
|
7
9
|
...repositoryManifests,
|
|
8
10
|
...menuItemManifests,
|
|
9
11
|
...treeManifests,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const UMB_MODAL_TEMPLATING_QUERY_BUILDER_SIDEBAR_ALIAS = 'Umb.Modal.Templating.Query.Builder.Sidebar';
|
|
2
|
+
const modals = [
|
|
3
|
+
{
|
|
4
|
+
type: 'modal',
|
|
5
|
+
alias: UMB_MODAL_TEMPLATING_QUERY_BUILDER_SIDEBAR_ALIAS,
|
|
6
|
+
name: 'Template query builder',
|
|
7
|
+
loader: () => import('./query-builder/query-builder.element.js'),
|
|
8
|
+
},
|
|
9
|
+
];
|
|
10
|
+
export const manifests = [...modals];
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { TemplateQueryBuilderModalData, TemplateQueryBuilderModalResult } from './query-builder/query-builder.element.js';
|
|
2
|
+
import { UmbModalToken } from '../../../core/modal/index.js';
|
|
3
|
+
export declare const UMB_TEMPLATE_QUERY_BUILDER_MODAL: UmbModalToken<TemplateQueryBuilderModalData, TemplateQueryBuilderModalResult>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { UMB_MODAL_TEMPLATING_QUERY_BUILDER_SIDEBAR_ALIAS } from './manifests.js';
|
|
2
|
+
import { UmbModalToken } from '../../../core/modal/index.js';
|
|
3
|
+
export const UMB_TEMPLATE_QUERY_BUILDER_MODAL = new UmbModalToken(UMB_MODAL_TEMPLATING_QUERY_BUILDER_SIDEBAR_ALIAS, {
|
|
4
|
+
type: 'sidebar',
|
|
5
|
+
size: 'large',
|
|
6
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { PropertyValueMap } from '../../../../../external/lit/index.js';
|
|
2
|
+
import { UmbLitElement } from '../../../../../shared/lit-element/index.js';
|
|
3
|
+
import { TemplateQueryExecuteFilterPresentationModel, TemplateQueryPropertyTypeModel, TemplateQuerySettingsResponseModel } from '../../../../../external/backend-api/index.js';
|
|
4
|
+
export declare class UmbQueryBuilderFilterElement extends UmbLitElement {
|
|
5
|
+
#private;
|
|
6
|
+
private _propertyAliasDropdown?;
|
|
7
|
+
private _operatorDropdown?;
|
|
8
|
+
filter: TemplateQueryExecuteFilterPresentationModel;
|
|
9
|
+
unremovable: boolean;
|
|
10
|
+
settings?: TemplateQuerySettingsResponseModel;
|
|
11
|
+
currentPropertyType: TemplateQueryPropertyTypeModel | null;
|
|
12
|
+
get isFilterValid(): boolean;
|
|
13
|
+
protected willUpdate(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
|
|
14
|
+
private _renderOperatorsDropdown;
|
|
15
|
+
private _renderConstraintValueInput;
|
|
16
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
17
|
+
static styles: import("@lit/reactive-element/css-tag").CSSResult[];
|
|
18
|
+
}
|
|
19
|
+
export default UmbQueryBuilderFilterElement;
|
|
20
|
+
declare global {
|
|
21
|
+
interface HTMLElementTagNameMap {
|
|
22
|
+
'umb-query-builder-filter': UmbQueryBuilderFilterElement;
|
|
23
|
+
}
|
|
24
|
+
}
|
package/dist-cms/packages/templating/templates/modals/query-builder/query-builder-filter.element.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { UUITextStyles } from '../../../../../external/uui/index.js';
|
|
8
|
+
import { css, html, customElement, property, query, state } from '../../../../../external/lit/index.js';
|
|
9
|
+
import { UmbLitElement } from '../../../../../shared/lit-element/index.js';
|
|
10
|
+
import { TemplateQueryPropertyTypeModel, } from '../../../../../external/backend-api/index.js';
|
|
11
|
+
export let UmbQueryBuilderFilterElement = class UmbQueryBuilderFilterElement extends UmbLitElement {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.filter = {};
|
|
15
|
+
this.unremovable = false;
|
|
16
|
+
this.currentPropertyType = null;
|
|
17
|
+
this.#setPropertyAlias = (e) => {
|
|
18
|
+
const target = e.target;
|
|
19
|
+
const oldCurrentPropertyType = this.currentPropertyType;
|
|
20
|
+
this.filter = { ...this.filter, propertyAlias: target.value };
|
|
21
|
+
this.currentPropertyType =
|
|
22
|
+
this.settings?.properties?.find((p) => p.alias === this.filter.propertyAlias)?.type ?? null;
|
|
23
|
+
if (oldCurrentPropertyType !== this.currentPropertyType)
|
|
24
|
+
this.#resetOperator();
|
|
25
|
+
this._propertyAliasDropdown?.closePopover();
|
|
26
|
+
};
|
|
27
|
+
this.#setConstrainValue = (e) => {
|
|
28
|
+
const target = e.target;
|
|
29
|
+
this.filter = { ...this.filter, constraintValue: target.value };
|
|
30
|
+
};
|
|
31
|
+
this.#setOperator = (e) => {
|
|
32
|
+
const target = e.target;
|
|
33
|
+
this.filter = { ...this.filter, operator: target.value };
|
|
34
|
+
this._operatorDropdown?.closePopover();
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
#setPropertyAlias;
|
|
38
|
+
#setConstrainValue;
|
|
39
|
+
#setOperator;
|
|
40
|
+
#resetOperator() {
|
|
41
|
+
this.filter = { ...this.filter, operator: undefined };
|
|
42
|
+
}
|
|
43
|
+
#resetFilter() {
|
|
44
|
+
this.filter = {};
|
|
45
|
+
}
|
|
46
|
+
#removeOrReset() {
|
|
47
|
+
if (this.unremovable)
|
|
48
|
+
this.#resetFilter();
|
|
49
|
+
else
|
|
50
|
+
this.dispatchEvent(new Event('remove-filter'));
|
|
51
|
+
}
|
|
52
|
+
#addFilter() {
|
|
53
|
+
this.dispatchEvent(new Event('add-filter'));
|
|
54
|
+
}
|
|
55
|
+
get isFilterValid() {
|
|
56
|
+
return Object.keys(this.filter).length === 3 && Object.values(this.filter).every((v) => !!v);
|
|
57
|
+
}
|
|
58
|
+
willUpdate(_changedProperties) {
|
|
59
|
+
if (_changedProperties.has('filter')) {
|
|
60
|
+
if (this.isFilterValid) {
|
|
61
|
+
this.dispatchEvent(new Event('update-query'));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
_renderOperatorsDropdown() {
|
|
66
|
+
return html `<umb-button-with-dropdown look="outline" id="operator-dropdown" label="choose operator">
|
|
67
|
+
${this.filter?.operator ?? ''}
|
|
68
|
+
<uui-combobox-list slot="dropdown" @change=${this.#setOperator} class="options-list">
|
|
69
|
+
${this.settings?.operators
|
|
70
|
+
?.filter((operator) => this.currentPropertyType ? operator.applicableTypes?.includes(this.currentPropertyType) : true)
|
|
71
|
+
.map((operator) => html `<uui-combobox-list-option .value=${operator.operator ?? ''}
|
|
72
|
+
>${operator.operator}</uui-combobox-list-option
|
|
73
|
+
>`)}</uui-combobox-list
|
|
74
|
+
>
|
|
75
|
+
</umb-button-with-dropdown>`;
|
|
76
|
+
}
|
|
77
|
+
_renderConstraintValueInput() {
|
|
78
|
+
switch (this.currentPropertyType) {
|
|
79
|
+
case TemplateQueryPropertyTypeModel.INTEGER:
|
|
80
|
+
return html `<uui-input type="number" @change=${this.#setConstrainValue} label="constrain value"></uui-input>`;
|
|
81
|
+
case TemplateQueryPropertyTypeModel.STRING:
|
|
82
|
+
return html `<uui-input type="text" @change=${this.#setConstrainValue} label="constrain value"></uui-input>`;
|
|
83
|
+
case TemplateQueryPropertyTypeModel.DATE_TIME:
|
|
84
|
+
return html `<uui-input type="date" @change=${this.#setConstrainValue} label="constrain value"></uui-input>`;
|
|
85
|
+
default:
|
|
86
|
+
return html `<uui-input type="text" @change=${this.#setConstrainValue} label="constrain value"></uui-input>`;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
render() {
|
|
90
|
+
return html `
|
|
91
|
+
<span>${this.unremovable ? 'where' : 'and'}</span>
|
|
92
|
+
<umb-button-with-dropdown look="outline" id="property-alias-dropdown" label="Property alias"
|
|
93
|
+
>${this.filter?.propertyAlias ?? ''}
|
|
94
|
+
<uui-combobox-list slot="dropdown" @change=${this.#setPropertyAlias} class="options-list">
|
|
95
|
+
${this.settings?.properties?.map((property) => html `<uui-combobox-list-option tabindex="0" .value=${property.alias ?? ''}
|
|
96
|
+
>${property.alias}</uui-combobox-list-option
|
|
97
|
+
>`)}
|
|
98
|
+
</uui-combobox-list></umb-button-with-dropdown
|
|
99
|
+
>
|
|
100
|
+
${this.filter?.propertyAlias ? this._renderOperatorsDropdown() : ''}
|
|
101
|
+
${this.filter?.operator ? this._renderConstraintValueInput() : ''}
|
|
102
|
+
<uui-button-group>
|
|
103
|
+
<uui-button title="Add filter" label="Add filter" compact @click=${this.#addFilter}
|
|
104
|
+
><uui-icon name="add"></uui-icon
|
|
105
|
+
></uui-button>
|
|
106
|
+
<uui-button title="Remove filter" label="Remove filter" compact @click=${this.#removeOrReset}
|
|
107
|
+
><uui-icon name="delete"></uui-icon
|
|
108
|
+
></uui-button>
|
|
109
|
+
</uui-button-group>
|
|
110
|
+
`;
|
|
111
|
+
}
|
|
112
|
+
static { this.styles = [
|
|
113
|
+
UUITextStyles,
|
|
114
|
+
css `
|
|
115
|
+
:host {
|
|
116
|
+
display: flex;
|
|
117
|
+
gap: 10px;
|
|
118
|
+
border-bottom: 1px solid #f3f3f5;
|
|
119
|
+
align-items: center;
|
|
120
|
+
padding: 20px 0;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.options-list {
|
|
124
|
+
min-width: 25ch;
|
|
125
|
+
background-color: var(--uui-color-surface);
|
|
126
|
+
box-shadow: var(--uui-shadow-depth-3);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
uui-combobox-list-option {
|
|
130
|
+
padding: 8px 20px;
|
|
131
|
+
}
|
|
132
|
+
`,
|
|
133
|
+
]; }
|
|
134
|
+
};
|
|
135
|
+
__decorate([
|
|
136
|
+
query('#property-alias-dropdown')
|
|
137
|
+
], UmbQueryBuilderFilterElement.prototype, "_propertyAliasDropdown", void 0);
|
|
138
|
+
__decorate([
|
|
139
|
+
query('#operator-dropdown')
|
|
140
|
+
], UmbQueryBuilderFilterElement.prototype, "_operatorDropdown", void 0);
|
|
141
|
+
__decorate([
|
|
142
|
+
property({ type: Object, attribute: false })
|
|
143
|
+
], UmbQueryBuilderFilterElement.prototype, "filter", void 0);
|
|
144
|
+
__decorate([
|
|
145
|
+
property({ type: Boolean })
|
|
146
|
+
], UmbQueryBuilderFilterElement.prototype, "unremovable", void 0);
|
|
147
|
+
__decorate([
|
|
148
|
+
property({ type: Object, attribute: false })
|
|
149
|
+
], UmbQueryBuilderFilterElement.prototype, "settings", void 0);
|
|
150
|
+
__decorate([
|
|
151
|
+
state()
|
|
152
|
+
], UmbQueryBuilderFilterElement.prototype, "currentPropertyType", void 0);
|
|
153
|
+
UmbQueryBuilderFilterElement = __decorate([
|
|
154
|
+
customElement('umb-query-builder-filter')
|
|
155
|
+
], UmbQueryBuilderFilterElement);
|
|
156
|
+
export default UmbQueryBuilderFilterElement;
|
package/dist-cms/packages/templating/templates/modals/query-builder/query-builder.element.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { UmbModalBaseElement } from '../../../../../shared/modal/index.js';
|
|
2
|
+
import './query-builder-filter.element.js';
|
|
3
|
+
export interface TemplateQueryBuilderModalData {
|
|
4
|
+
hidePartialViews?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface TemplateQueryBuilderModalResult {
|
|
7
|
+
value: string;
|
|
8
|
+
}
|
|
9
|
+
export default class UmbChooseInsertTypeModalElement extends UmbModalBaseElement<TemplateQueryBuilderModalData, TemplateQueryBuilderModalResult> {
|
|
10
|
+
#private;
|
|
11
|
+
private _contentTypeDropdown?;
|
|
12
|
+
private _sortDropdown?;
|
|
13
|
+
private _filterContainer?;
|
|
14
|
+
private _filterElements;
|
|
15
|
+
private _templateQuery?;
|
|
16
|
+
private _queryRequest;
|
|
17
|
+
private _queryBuilderSettings?;
|
|
18
|
+
private _selectedRootContentName;
|
|
19
|
+
private _defaultSortDirection;
|
|
20
|
+
constructor();
|
|
21
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
22
|
+
static styles: import("@lit/reactive-element/css-tag.js").CSSResult[];
|
|
23
|
+
}
|
|
24
|
+
declare global {
|
|
25
|
+
interface HTMLElementTagNameMap {
|
|
26
|
+
'umb-templating-query-builder-modal': UmbChooseInsertTypeModalElement;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { UmbTemplateRepository } from '../../repository/template.repository.js';
|
|
8
|
+
import { UUITextStyles } from '../../../../../external/uui/index.js';
|
|
9
|
+
import { css, html, customElement, state, query, queryAll } from '../../../../../external/lit/index.js';
|
|
10
|
+
import { UmbModalBaseElement } from '../../../../../shared/modal/index.js';
|
|
11
|
+
import { UMB_DOCUMENT_PICKER_MODAL, UMB_MODAL_MANAGER_CONTEXT_TOKEN, } from '../../../../core/modal/index.js';
|
|
12
|
+
import { UmbDocumentRepository } from '../../../../documents/documents/index.js';
|
|
13
|
+
import './query-builder-filter.element.js';
|
|
14
|
+
var SortOrder;
|
|
15
|
+
(function (SortOrder) {
|
|
16
|
+
SortOrder["Ascending"] = "ascending";
|
|
17
|
+
SortOrder["Descending"] = "descending";
|
|
18
|
+
})(SortOrder || (SortOrder = {}));
|
|
19
|
+
let UmbChooseInsertTypeModalElement = class UmbChooseInsertTypeModalElement extends UmbModalBaseElement {
|
|
20
|
+
#documentRepository;
|
|
21
|
+
#modalManagerContext;
|
|
22
|
+
#templateRepository;
|
|
23
|
+
constructor() {
|
|
24
|
+
super();
|
|
25
|
+
this._queryRequest = {};
|
|
26
|
+
this._selectedRootContentName = 'all pages';
|
|
27
|
+
this._defaultSortDirection = SortOrder.Descending;
|
|
28
|
+
this.#postTemplateQuery = async () => {
|
|
29
|
+
const { data, error } = await this.#templateRepository.postTemplateQueryExecute({
|
|
30
|
+
requestBody: this._queryRequest,
|
|
31
|
+
});
|
|
32
|
+
if (data)
|
|
33
|
+
this._templateQuery = { ...data };
|
|
34
|
+
};
|
|
35
|
+
this.#openDocumentPicker = () => {
|
|
36
|
+
this.#modalManagerContext
|
|
37
|
+
?.open(UMB_DOCUMENT_PICKER_MODAL)
|
|
38
|
+
.onSubmit()
|
|
39
|
+
.then((result) => {
|
|
40
|
+
this.#updateQueryRequest({ rootContentId: result.selection[0] });
|
|
41
|
+
if (result.selection.length > 0 && result.selection[0] === null) {
|
|
42
|
+
this._selectedRootContentName = 'all pages';
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (result.selection.length > 0) {
|
|
46
|
+
this.#getDocumentItem(result.selection);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
this.#addFilterElement = () => {
|
|
52
|
+
this._filterContainer?.appendChild(this.#createFilterElement());
|
|
53
|
+
};
|
|
54
|
+
this.#updateFilters = () => {
|
|
55
|
+
this.#updateQueryRequest({ filters: Array.from(this._filterElements)?.map((filter) => filter.filter) ?? [] });
|
|
56
|
+
};
|
|
57
|
+
this.#removeFilter = (event) => {
|
|
58
|
+
const target = event.target;
|
|
59
|
+
this._filterContainer?.removeChild(target);
|
|
60
|
+
this.#updateFilters();
|
|
61
|
+
};
|
|
62
|
+
this.#templateRepository = new UmbTemplateRepository(this);
|
|
63
|
+
this.#documentRepository = new UmbDocumentRepository(this);
|
|
64
|
+
this.consumeContext(UMB_MODAL_MANAGER_CONTEXT_TOKEN, (instance) => {
|
|
65
|
+
this.#modalManagerContext = instance;
|
|
66
|
+
});
|
|
67
|
+
this.#init();
|
|
68
|
+
}
|
|
69
|
+
#init() {
|
|
70
|
+
this.#getTemplateQuerySettings();
|
|
71
|
+
this.#postTemplateQuery();
|
|
72
|
+
}
|
|
73
|
+
#close() {
|
|
74
|
+
this.modalContext?.reject();
|
|
75
|
+
}
|
|
76
|
+
#submit() {
|
|
77
|
+
this.modalContext?.submit({
|
|
78
|
+
value: this._templateQuery?.queryExpression ?? '',
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
#updateQueryRequest(update) {
|
|
82
|
+
this._queryRequest = { ...this._queryRequest, ...update };
|
|
83
|
+
this.#postTemplateQuery();
|
|
84
|
+
}
|
|
85
|
+
async #getTemplateQuerySettings() {
|
|
86
|
+
const { data, error } = await this.#templateRepository.getTemplateQuerySettings();
|
|
87
|
+
if (data)
|
|
88
|
+
this._queryBuilderSettings = data;
|
|
89
|
+
}
|
|
90
|
+
#postTemplateQuery;
|
|
91
|
+
#openDocumentPicker;
|
|
92
|
+
async #getDocumentItem(ids) {
|
|
93
|
+
const { data, error } = await this.#documentRepository.requestItemsLegacy(ids);
|
|
94
|
+
if (data) {
|
|
95
|
+
this._selectedRootContentName = data[0].name;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
#createFilterElement() {
|
|
99
|
+
const filterElement = document.createElement('umb-query-builder-filter');
|
|
100
|
+
filterElement.settings = this._queryBuilderSettings;
|
|
101
|
+
filterElement.classList.add('row');
|
|
102
|
+
filterElement.addEventListener('add-filter', this.#addFilterElement);
|
|
103
|
+
filterElement.addEventListener('remove-filter', this.#removeFilter);
|
|
104
|
+
filterElement.addEventListener('update-query', this.#updateFilters);
|
|
105
|
+
return filterElement;
|
|
106
|
+
}
|
|
107
|
+
#setContentType(event) {
|
|
108
|
+
const target = event.target;
|
|
109
|
+
this.#updateQueryRequest({ contentTypeAlias: target.value ?? '' });
|
|
110
|
+
this._contentTypeDropdown.closePopover();
|
|
111
|
+
}
|
|
112
|
+
#setSortProperty(event) {
|
|
113
|
+
const target = event.target;
|
|
114
|
+
if (!this._queryRequest.sort)
|
|
115
|
+
this.#setSortDirection();
|
|
116
|
+
this.#updateQueryRequest({
|
|
117
|
+
sort: { ...this._queryRequest.sort, propertyAlias: target.value ?? '' },
|
|
118
|
+
});
|
|
119
|
+
this._sortDropdown.closePopover();
|
|
120
|
+
}
|
|
121
|
+
#setSortDirection() {
|
|
122
|
+
if (!this._queryRequest.sort?.direction) {
|
|
123
|
+
this.#updateQueryRequest({
|
|
124
|
+
sort: { ...this._queryRequest.sort, direction: this._defaultSortDirection },
|
|
125
|
+
});
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
this.#updateQueryRequest({
|
|
129
|
+
sort: {
|
|
130
|
+
...this._queryRequest.sort,
|
|
131
|
+
direction: this._queryRequest.sort?.direction === SortOrder.Ascending ? SortOrder.Descending : SortOrder.Ascending,
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
#addFilterElement;
|
|
136
|
+
#updateFilters;
|
|
137
|
+
#removeFilter;
|
|
138
|
+
render() {
|
|
139
|
+
return html `
|
|
140
|
+
<umb-body-layout headline="Query builder">
|
|
141
|
+
<div id="main">
|
|
142
|
+
<uui-box>
|
|
143
|
+
<div class="row">
|
|
144
|
+
I want
|
|
145
|
+
<umb-button-with-dropdown look="outline" id="content-type-dropdown" label="Choose content type"
|
|
146
|
+
>${this._queryRequest?.contentTypeAlias ?? 'all content'}
|
|
147
|
+
<uui-combobox-list slot="dropdown" @change=${this.#setContentType} class="options-list">
|
|
148
|
+
<uui-combobox-list-option value="">all content</uui-combobox-list-option>
|
|
149
|
+
${this._queryBuilderSettings?.contentTypeAliases?.map((alias) => html `<uui-combobox-list-option .value=${alias}
|
|
150
|
+
>content of type "${alias}"</uui-combobox-list-option
|
|
151
|
+
>`)}
|
|
152
|
+
</uui-combobox-list></umb-button-with-dropdown
|
|
153
|
+
>
|
|
154
|
+
from
|
|
155
|
+
<uui-button look="outline" @click=${this.#openDocumentPicker} label="Choose root content"
|
|
156
|
+
>${this._selectedRootContentName}
|
|
157
|
+
</uui-button>
|
|
158
|
+
</div>
|
|
159
|
+
<div id="filter-container">
|
|
160
|
+
<umb-query-builder-filter
|
|
161
|
+
unremovable
|
|
162
|
+
class="row"
|
|
163
|
+
.settings=${this._queryBuilderSettings}
|
|
164
|
+
@add-filter=${this.#addFilterElement}
|
|
165
|
+
@update-query=${this.#updateFilters}
|
|
166
|
+
@remove-filter=${this.#removeFilter}></umb-query-builder-filter>
|
|
167
|
+
</div>
|
|
168
|
+
<div class="row">
|
|
169
|
+
ordered by
|
|
170
|
+
<umb-button-with-dropdown look="outline" id="sort-dropdown" label="Property alias"
|
|
171
|
+
>${this._queryRequest.sort?.propertyAlias ?? ''}
|
|
172
|
+
<uui-combobox-list slot="dropdown" @change=${this.#setSortProperty} class="options-list">
|
|
173
|
+
${this._queryBuilderSettings?.properties?.map((property) => html `<uui-combobox-list-option .value=${property.alias ?? ''}
|
|
174
|
+
>${property.alias}</uui-combobox-list-option
|
|
175
|
+
>`)}
|
|
176
|
+
</uui-combobox-list></umb-button-with-dropdown
|
|
177
|
+
>
|
|
178
|
+
|
|
179
|
+
${this._queryRequest.sort?.propertyAlias
|
|
180
|
+
? html `<uui-button look="outline" @click=${this.#setSortDirection}
|
|
181
|
+
>${this._queryRequest.sort.direction ?? this._defaultSortDirection}</uui-button
|
|
182
|
+
>`
|
|
183
|
+
: ''}
|
|
184
|
+
</div>
|
|
185
|
+
<div class="row">
|
|
186
|
+
<span id="results-count"
|
|
187
|
+
>${this._templateQuery?.resultCount ?? 0} items returned, in ${this._templateQuery?.executionTime ?? 0}
|
|
188
|
+
ms</span
|
|
189
|
+
>
|
|
190
|
+
</div>
|
|
191
|
+
<umb-code-block language="C#" copy> ${this._templateQuery?.queryExpression ?? ''} </umb-code-block>
|
|
192
|
+
</uui-box>
|
|
193
|
+
</div>
|
|
194
|
+
|
|
195
|
+
<div slot="actions">
|
|
196
|
+
<uui-button @click=${this.#close} look="secondary" label="Close">Close</uui-button>
|
|
197
|
+
<uui-button @click=${this.#submit} look="primary" color="positive" label="Submit">Submit</uui-button>
|
|
198
|
+
</div>
|
|
199
|
+
</umb-body-layout>
|
|
200
|
+
`;
|
|
201
|
+
}
|
|
202
|
+
static { this.styles = [
|
|
203
|
+
UUITextStyles,
|
|
204
|
+
css `
|
|
205
|
+
:host {
|
|
206
|
+
display: block;
|
|
207
|
+
color: var(--uui-color-text);
|
|
208
|
+
--umb-header-layout-height: 70px;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
#main {
|
|
212
|
+
box-sizing: border-box;
|
|
213
|
+
height: calc(
|
|
214
|
+
100dvh - var(--umb-header-layout-height) - var(--umb-footer-layout-height) - 2 * var(--uui-size-layout-1)
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.options-list {
|
|
219
|
+
min-width: 30ch;
|
|
220
|
+
background-color: var(--uui-color-surface);
|
|
221
|
+
box-shadow: var(--uui-shadow-depth-3);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
uui-combobox-list-option {
|
|
225
|
+
padding: 8px 20px;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.row {
|
|
229
|
+
display: flex;
|
|
230
|
+
gap: 10px;
|
|
231
|
+
border-bottom: 1px solid #f3f3f5;
|
|
232
|
+
align-items: center;
|
|
233
|
+
padding: 20px 0;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
#filter-container {
|
|
237
|
+
flex-direction: column;
|
|
238
|
+
justify-content: flex-start;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
#results-count {
|
|
242
|
+
font-weight: bold;
|
|
243
|
+
}
|
|
244
|
+
`,
|
|
245
|
+
]; }
|
|
246
|
+
};
|
|
247
|
+
__decorate([
|
|
248
|
+
query('#content-type-dropdown')
|
|
249
|
+
], UmbChooseInsertTypeModalElement.prototype, "_contentTypeDropdown", void 0);
|
|
250
|
+
__decorate([
|
|
251
|
+
query('#sort-dropdown')
|
|
252
|
+
], UmbChooseInsertTypeModalElement.prototype, "_sortDropdown", void 0);
|
|
253
|
+
__decorate([
|
|
254
|
+
query('#filter-container')
|
|
255
|
+
], UmbChooseInsertTypeModalElement.prototype, "_filterContainer", void 0);
|
|
256
|
+
__decorate([
|
|
257
|
+
queryAll('umb-query-builder-filter')
|
|
258
|
+
], UmbChooseInsertTypeModalElement.prototype, "_filterElements", void 0);
|
|
259
|
+
__decorate([
|
|
260
|
+
state()
|
|
261
|
+
], UmbChooseInsertTypeModalElement.prototype, "_templateQuery", void 0);
|
|
262
|
+
__decorate([
|
|
263
|
+
state()
|
|
264
|
+
], UmbChooseInsertTypeModalElement.prototype, "_queryRequest", void 0);
|
|
265
|
+
__decorate([
|
|
266
|
+
state()
|
|
267
|
+
], UmbChooseInsertTypeModalElement.prototype, "_queryBuilderSettings", void 0);
|
|
268
|
+
__decorate([
|
|
269
|
+
state()
|
|
270
|
+
], UmbChooseInsertTypeModalElement.prototype, "_selectedRootContentName", void 0);
|
|
271
|
+
__decorate([
|
|
272
|
+
state()
|
|
273
|
+
], UmbChooseInsertTypeModalElement.prototype, "_defaultSortDirection", void 0);
|
|
274
|
+
UmbChooseInsertTypeModalElement = __decorate([
|
|
275
|
+
customElement('umb-templating-query-builder-modal')
|
|
276
|
+
], UmbChooseInsertTypeModalElement);
|
|
277
|
+
export default UmbChooseInsertTypeModalElement;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { TemplateQueryExecuteModel } from '../../../../../external/backend-api/index.js';
|
|
2
|
+
import type { UmbControllerHostElement } from '../../../../../libs/controller-api/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* A data source for the Template Query Builder that fetches data from the server
|
|
5
|
+
* @export
|
|
6
|
+
* @class UmbTemplateQueryBuilderServerDataSource
|
|
7
|
+
*/
|
|
8
|
+
export declare class UmbTemplateQueryBuilderServerDataSource {
|
|
9
|
+
#private;
|
|
10
|
+
/**
|
|
11
|
+
* Creates an instance of UmbTemplateQueryBuilderServerDataSource.
|
|
12
|
+
* @param {UmbControllerHostElement} host
|
|
13
|
+
* @memberof UmbTemplateQueryBuilderServerDataSource
|
|
14
|
+
*/
|
|
15
|
+
constructor(host: UmbControllerHostElement);
|
|
16
|
+
/**
|
|
17
|
+
* Fetches the query builder settings from the server
|
|
18
|
+
*
|
|
19
|
+
* @return {*}
|
|
20
|
+
* @memberof UmbTemplateQueryBuilderServerDataSource
|
|
21
|
+
*/
|
|
22
|
+
getTemplateQuerySettings(): Promise<import("../../../../../shared/repository/index.js").DataSourceResponse<import("../../../../../external/backend-api/index.js").TemplateQuerySettingsResponseModel>>;
|
|
23
|
+
/**
|
|
24
|
+
* Executes a query builder query on the server
|
|
25
|
+
*
|
|
26
|
+
* @param {{ requestBody?: TemplateQueryExecuteModel }} { requestBody }
|
|
27
|
+
* @return {*}
|
|
28
|
+
* @memberof UmbTemplateQueryBuilderServerDataSource
|
|
29
|
+
*/
|
|
30
|
+
postTemplateQueryExecute({ requestBody }: {
|
|
31
|
+
requestBody?: TemplateQueryExecuteModel;
|
|
32
|
+
}): Promise<import("../../../../../shared/repository/index.js").DataSourceResponse<import("../../../../../external/backend-api/index.js").TemplateQueryResultResponseModel>>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { TemplateResource } from '../../../../../external/backend-api/index.js';
|
|
2
|
+
import { tryExecuteAndNotify } from '../../../../../shared/resources/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* A data source for the Template Query Builder that fetches data from the server
|
|
5
|
+
* @export
|
|
6
|
+
* @class UmbTemplateQueryBuilderServerDataSource
|
|
7
|
+
*/
|
|
8
|
+
export class UmbTemplateQueryBuilderServerDataSource {
|
|
9
|
+
#host;
|
|
10
|
+
/**
|
|
11
|
+
* Creates an instance of UmbTemplateQueryBuilderServerDataSource.
|
|
12
|
+
* @param {UmbControllerHostElement} host
|
|
13
|
+
* @memberof UmbTemplateQueryBuilderServerDataSource
|
|
14
|
+
*/
|
|
15
|
+
constructor(host) {
|
|
16
|
+
this.#host = host;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Fetches the query builder settings from the server
|
|
20
|
+
*
|
|
21
|
+
* @return {*}
|
|
22
|
+
* @memberof UmbTemplateQueryBuilderServerDataSource
|
|
23
|
+
*/
|
|
24
|
+
async getTemplateQuerySettings() {
|
|
25
|
+
return tryExecuteAndNotify(this.#host, TemplateResource.getTemplateQuerySettings());
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Executes a query builder query on the server
|
|
29
|
+
*
|
|
30
|
+
* @param {{ requestBody?: TemplateQueryExecuteModel }} { requestBody }
|
|
31
|
+
* @return {*}
|
|
32
|
+
* @memberof UmbTemplateQueryBuilderServerDataSource
|
|
33
|
+
*/
|
|
34
|
+
async postTemplateQueryExecute({ requestBody }) {
|
|
35
|
+
return tryExecuteAndNotify(this.#host, TemplateResource.postTemplateQueryExecute({ requestBody }));
|
|
36
|
+
}
|
|
37
|
+
}
|