use tree picker modal for template picker modal
This commit is contained in:
@@ -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',
|
||||
}
|
||||
);
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user