diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/index.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/index.ts index 23ab781cf9..610a3732b3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/index.ts @@ -1,3 +1,4 @@ export * from './entities.js'; export * from './repository/index.js'; import './components/index.js'; +import './modals/modal-tokens.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/manifests.ts index 1f440270ba..d455cacfe6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/manifests.ts @@ -3,8 +3,10 @@ import { manifests as menuItemManifests } from './menu-item/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as entityActionsManifests } from './entity-actions/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; +import { manifests as modalManifests } from './modals/manifests.js'; export const manifests = [ + ...modalManifests, ...repositoryManifests, ...menuItemManifests, ...treeManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/manifests.ts new file mode 100644 index 0000000000..5a506a54ec --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/manifests.ts @@ -0,0 +1,14 @@ +import { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; + +export const UMB_MODAL_TEMPLATING_QUERY_BUILDER_SIDEBAR_ALIAS = 'Umb.Modal.Templating.Query.Builder.Sidebar'; + +const modals: Array = [ + { + type: 'modal', + alias: UMB_MODAL_TEMPLATING_QUERY_BUILDER_SIDEBAR_ALIAS, + name: 'Template query builder', + loader: () => import('./query-builder/query-builder.element.js'), + }, +]; + +export const manifests = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/modal-tokens.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/modal-tokens.ts new file mode 100644 index 0000000000..42bd4c2010 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/modal-tokens.ts @@ -0,0 +1,14 @@ +import { UMB_MODAL_TEMPLATING_QUERY_BUILDER_SIDEBAR_ALIAS } from './manifests.js'; +import { + TemplateQueryBuilderModalData, + TemplateQueryBuilderModalResult, +} from './query-builder/query-builder.element.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; + +export const UMB_TEMPLATE_QUERY_BUILDER_MODAL = new UmbModalToken< + TemplateQueryBuilderModalData, + TemplateQueryBuilderModalResult +>(UMB_MODAL_TEMPLATING_QUERY_BUILDER_SIDEBAR_ALIAS, { + type: 'sidebar', + size: 'large', +}); 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 new file mode 100644 index 0000000000..729bd34713 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder.element.ts @@ -0,0 +1,76 @@ +import { UUITextStyles } from '@umbraco-cms/backoffice/external/uui'; +import { css, html, customElement } 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'; + +export interface TemplateQueryBuilderModalData { + hidePartialViews?: boolean; +} + +export interface TemplateQueryBuilderModalResult { + value: string; +} + +@customElement('umb-templating-query-builder-modal') +export default class UmbChooseInsertTypeModalElement extends UmbModalBaseElement< + TemplateQueryBuilderModalData, + TemplateQueryBuilderModalResult +> { + private _close() { + this.modalContext?.reject(); + } + + private _modalContext?: UmbModalManagerContext; + + constructor() { + super(); + this.consumeContext(UMB_MODAL_MANAGER_CONTEXT_TOKEN, (instance) => { + this._modalContext = instance; + }); + } + + render() { + return html` + +
+ +
+ I want all content from + all pages +
+
+ where from all pages +
+
+
+
+ Close +
+
+ `; + } + + static styles = [ + UUITextStyles, + css` + :host { + display: block; + color: var(--uui-color-text); + --umb-header-layout-height: 70px; + } + + #main { + box-sizing: border-box; + height: calc( + 100dvh - var(--umb-header-layout-height) - var(--umb-footer-layout-height) - 2 * var(--uui-size-layout-1) + ); + } + `, + ]; +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-templating-query-builder-modal': UmbChooseInsertTypeModalElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/template-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/template-workspace-editor.element.ts index fb62e2ec6d..b90b83d30c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/template-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/template-workspace-editor.element.ts @@ -12,6 +12,8 @@ import { } from '@umbraco-cms/backoffice/modal'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { Subject, debounceTime } from '@umbraco-cms/backoffice/external/rxjs'; +import { UMB_MODAL_TEMPLATING_QUERY_BUILDER_SIDEBAR_ALIAS } from '../modals/manifests.js'; +import { UMB_TEMPLATE_QUERY_BUILDER_MODAL } from '../modals/modal-tokens.js'; @customElement('umb-template-workspace-editor') export class UmbTemplateWorkspaceEditorElement extends UmbLitElement { @@ -165,6 +167,14 @@ ${this._content}`; }); } + #openQueryBuilder() { + const modalContext = this._modalContext?.open(UMB_TEMPLATE_QUERY_BUILDER_MODAL); + + modalContext?.onSubmit().then((data) => { + console.log(data); + }); + } + #renderMasterTemplatePicker() { return html` @@ -200,7 +210,7 @@ ${this._content}`; @@ -208,9 +218,13 @@ ${this._content}`; ${this.#renderMasterTemplatePicker()}
- +