use tree picker modal for template picker modal

This commit is contained in:
Mads Rasmussen
2023-05-09 13:05:50 +02:00
parent 9d4f41431a
commit dead3cd9c6
3 changed files with 8 additions and 121 deletions

View File

@@ -1,18 +1,16 @@
import { UmbModalToken } from '@umbraco-cms/backoffice/modal';
import { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api';
import { UmbModalToken, UmbPickerModalResult, UmbTreePickerModalData } from '@umbraco-cms/backoffice/modal';
export interface UmbTemplatePickerModalData {
multiple: boolean;
selection: Array<string | null>;
}
export interface UmbTemplatePickerModalResult {
selection: Array<string | null>;
}
export type UmbTemplatePickerModalData = UmbTreePickerModalData<EntityTreeItemResponseModel>;
export type UmbTemplatePickerModalResult = UmbPickerModalResult;
export const UMB_TEMPLATE_PICKER_MODAL = new UmbModalToken<UmbTemplatePickerModalData, UmbTemplatePickerModalResult>(
'Umb.Modal.TemplatePicker',
'Umb.Modal.TreePicker',
{
type: 'sidebar',
size: 'small',
},
{
treeAlias: 'Umb.Tree.Templates',
}
);

View File

@@ -37,12 +37,6 @@ const modals: Array<ManifestModal> = [
name: 'Section Picker Modal',
loader: () => import('./section-picker/section-picker-modal.element'),
},
{
type: 'modal',
alias: 'Umb.Modal.TemplatePicker',
name: 'Template Picker Modal',
loader: () => import('./template-picker/template-picker-modal.element'),
},
{
type: 'modal',
alias: 'Umb.Modal.Template',

View File

@@ -1,105 +0,0 @@
import { css, html } from 'lit';
import { UUITextStyles } from '@umbraco-ui/uui-css/lib';
import { customElement, state } from 'lit/decorators.js';
import { UmbTreeElement } from '../../components/tree/tree.element';
import { UmbTemplatePickerModalData, UmbTemplatePickerModalResult } from '@umbraco-cms/backoffice/modal';
import { UmbModalBaseElement } from '@umbraco-cms/internal/modal';
//TODO: make a default tree-picker that can be used across multiple pickers
// TODO: make use of UmbPickerLayoutBase
@customElement('umb-template-picker-modal')
export class UmbTemplatePickerModalElement extends UmbModalBaseElement<
UmbTemplatePickerModalData,
UmbTemplatePickerModalResult
> {
@state()
_selection: Array<string | null> = [];
@state()
_multiple = true;
connectedCallback() {
super.connectedCallback();
this._selection = this.data?.selection ?? [];
this._multiple = this.data?.multiple ?? true;
}
private _handleSelectionChange(e: CustomEvent) {
e.stopPropagation();
const element = e.target as UmbTreeElement;
this._selection = this._multiple ? element.selection : [element.selection[element.selection.length - 1]];
}
private _submit() {
this.modalHandler?.submit({ selection: this._selection });
}
private _close() {
this.modalHandler?.reject();
}
// TODO: implement search
// TODO: make umb-tree have a disabled option (string array like selection)?
render() {
return html`
<umb-workspace-editor headline="Select Content">
<uui-box>
<uui-input></uui-input>
<hr />
<umb-tree
alias="Umb.Tree.Templates"
@selected=${this._handleSelectionChange}
.selection=${this._selection}
selectable></umb-tree>
</uui-box>
<div slot="actions">
<uui-button label="Close" @click=${this._close}></uui-button>
<uui-button label="Submit" look="primary" color="positive" @click=${this._submit}></uui-button>
</div>
</umb-workspace-editor>
`;
}
static styles = [
UUITextStyles,
css`
h3 {
margin-left: var(--uui-size-space-5);
margin-right: var(--uui-size-space-5);
}
uui-input {
width: 100%;
}
hr {
border: none;
border-bottom: 1px solid var(--uui-color-divider);
margin: 16px 0;
}
#content-list {
display: flex;
flex-direction: column;
gap: var(--uui-size-space-3);
}
.content-item {
cursor: pointer;
}
.content-item.selected {
background-color: var(--uui-color-selected);
color: var(--uui-color-selected-contrast);
}
`,
];
}
export default UmbTemplatePickerModalElement;
declare global {
interface HTMLElementTagNameMap {
'umb-template-picker-modal': UmbTemplatePickerModalElement;
}
}