Merge pull request #930 from umbraco/feature/multi-url-picker-fixes
Multi URL picker Modal - small adjustments
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { UmbTreeElement } from '../../../tree/tree.element.js';
|
||||
import { css, html, nothing, customElement, query, state } from '@umbraco-cms/backoffice/external/lit';
|
||||
import { css, html, nothing, customElement, query, state, styleMap } from '@umbraco-cms/backoffice/external/lit';
|
||||
import { UUIBooleanInputEvent, UUIInputElement } from '@umbraco-cms/backoffice/external/uui';
|
||||
import {
|
||||
UmbLinkPickerConfig,
|
||||
@@ -36,6 +36,12 @@ export class UmbLinkPickerModalElement extends UmbModalBaseElement<UmbLinkPicker
|
||||
ignoreUserStartNodes: false,
|
||||
};
|
||||
|
||||
@state()
|
||||
documentExpand = false;
|
||||
|
||||
@state()
|
||||
mediaExpanded = false;
|
||||
|
||||
@query('#link-input')
|
||||
private _linkInput!: UUIInputElement;
|
||||
|
||||
@@ -59,9 +65,17 @@ export class UmbLinkPickerModalElement extends UmbModalBaseElement<UmbLinkPicker
|
||||
private _handleQueryString() {
|
||||
if (!this._linkQueryInput) return;
|
||||
const query = this._linkQueryInput.value as string;
|
||||
//TODO: Handle query strings (add # etc)
|
||||
|
||||
this._link.queryString = query;
|
||||
if (query.startsWith('#') || query.startsWith('?')) {
|
||||
this._link.queryString = query;
|
||||
return;
|
||||
}
|
||||
|
||||
if (query.includes('=')) {
|
||||
this._link.queryString = `?${query}`;
|
||||
} else {
|
||||
this._link.queryString = `#${query}`;
|
||||
}
|
||||
}
|
||||
|
||||
private _handleSelectionChange(e: CustomEvent, entityType: string) {
|
||||
@@ -69,13 +83,20 @@ export class UmbLinkPickerModalElement extends UmbModalBaseElement<UmbLinkPicker
|
||||
e.stopPropagation();
|
||||
const element = e.target as UmbTreeElement;
|
||||
const selectedKey = element.selection[element.selection.length - 1];
|
||||
if (!selectedKey) return;
|
||||
|
||||
if (!selectedKey) {
|
||||
this._link.url = '';
|
||||
this._link.udi = undefined;
|
||||
this._selectedKey = undefined;
|
||||
this.requestUpdate();
|
||||
return;
|
||||
}
|
||||
|
||||
const udi = buildUdi(entityType, selectedKey);
|
||||
|
||||
this._selectedKey = selectedKey;
|
||||
this._link.udi = udi;
|
||||
this._link.url = udi; // TODO
|
||||
this._link.url = udi;
|
||||
this.requestUpdate();
|
||||
}
|
||||
|
||||
@@ -93,22 +114,22 @@ export class UmbLinkPickerModalElement extends UmbModalBaseElement<UmbLinkPicker
|
||||
<uui-box>
|
||||
<div class="url-link">${this._renderLinkUrlInput()} ${this._renderAnchorInput()}</div>
|
||||
|
||||
<uui-label for="link-title-input">Link Title</uui-label>
|
||||
<uui-label for="link-title-input">${this.localize.term('defaultdialogs_nodeNameLinkPicker')}</uui-label>
|
||||
<uui-input
|
||||
id="link-title-input"
|
||||
placeholder="Enter a title"
|
||||
label="link title"
|
||||
placeholder=${this.localize.term('defaultdialogs_nodeNameLinkPicker')}
|
||||
label=${this.localize.term('defaultdialogs_nodeNameLinkPicker')}
|
||||
@input=${() => (this._link.name = this._linkTitleInput.value as string)}
|
||||
.value="${this._link.name ?? ''}"></uui-input>
|
||||
|
||||
<uui-label>Target</uui-label>
|
||||
<uui-label>${this.localize.term('content_target')}</uui-label>
|
||||
<uui-toggle
|
||||
id="#target-toggle"
|
||||
label="Toggle if link should open in a new tab"
|
||||
label=${this.localize.term('defaultdialogs_openInNewWindow')}
|
||||
.checked="${this._link.target === '_blank' ? true : false}"
|
||||
@change="${(e: UUIBooleanInputEvent) =>
|
||||
e.target.checked ? (this._link.target = '_blank') : (this._link.target = '')}">
|
||||
Open the link in a new tab
|
||||
${this.localize.term('defaultdialogs_openInNewWindow')}
|
||||
</uui-toggle>
|
||||
|
||||
<hr />
|
||||
@@ -116,8 +137,12 @@ export class UmbLinkPickerModalElement extends UmbModalBaseElement<UmbLinkPicker
|
||||
${this._renderTrees()}
|
||||
</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>
|
||||
<uui-button label=${this.localize.term('general_close')} @click=${this._close}></uui-button>
|
||||
<uui-button
|
||||
label=${this.localize.term('general_submit')}
|
||||
look="primary"
|
||||
color="positive"
|
||||
@click=${this._submit}></uui-button>
|
||||
</div>
|
||||
</umb-body-layout>
|
||||
`;
|
||||
@@ -125,50 +150,67 @@ export class UmbLinkPickerModalElement extends UmbModalBaseElement<UmbLinkPicker
|
||||
|
||||
private _renderLinkUrlInput() {
|
||||
return html`<span>
|
||||
<uui-label for="link-input">Link</uui-label>
|
||||
<uui-label for="link-input">${this.localize.term('defaultdialogs_link')}</uui-label>
|
||||
<uui-input
|
||||
id="link-input"
|
||||
placeholder="URL"
|
||||
label="URL"
|
||||
placeholder=${this.localize.term('general_url')}
|
||||
label=${this.localize.term('general_url')}
|
||||
.value="${this._link.udi ?? this._link.url ?? ''}"
|
||||
@input=${() => (this._link.url = this._linkInput.value as string)}
|
||||
.disabled="${this._link.udi ? true : false}"></uui-input>
|
||||
?disabled="${this._link.udi ? true : false}"></uui-input>
|
||||
</span>`;
|
||||
}
|
||||
|
||||
private _renderAnchorInput() {
|
||||
if (this._layout.hideAnchor) return nothing;
|
||||
return html`<span>
|
||||
<uui-label for="anchor-input">Anchor / querystring</uui-label>
|
||||
<uui-label for="anchor-input">${this.localize.term('defaultdialogs_anchorLinkPicker')}</uui-label>
|
||||
<uui-input
|
||||
id="anchor-input"
|
||||
placeholder="#value or ?key=value"
|
||||
label="#value or ?key=value"
|
||||
placeholder=${this.localize.term('placeholders_anchor')}
|
||||
label=${this.localize.term('placeholders_anchor')}
|
||||
@input=${this._handleQueryString}
|
||||
.value="${this._link.queryString ?? ''}"></uui-input>
|
||||
</span>`;
|
||||
}
|
||||
|
||||
private _renderTrees() {
|
||||
return html`<uui-label for="search-input">Link to page</uui-label>
|
||||
<uui-input id="search-input" placeholder="Type to search" label="Type to search"></uui-input>
|
||||
<umb-tree
|
||||
?multiple=${false}
|
||||
alias="Umb.Tree.Documents"
|
||||
@selection-change=${(event: CustomEvent) => this._handleSelectionChange(event, 'document')}
|
||||
.selection=${[this._selectedKey ?? '']}
|
||||
selectable></umb-tree>
|
||||
|
||||
//TODO: Make search work
|
||||
return html`
|
||||
<uui-symbol-expand
|
||||
id="document-expand"
|
||||
@click=${() => (this.documentExpand = !this.documentExpand)}
|
||||
.open=${!this.documentExpand}></uui-symbol-expand>
|
||||
<uui-label for="document-expand">${this.localize.term('defaultdialogs_linkToPage')}</uui-label>
|
||||
<div style="${styleMap({ display: !this.documentExpand ? 'block' : 'none' })}">
|
||||
<uui-input
|
||||
id="search-input"
|
||||
placeholder=${this.localize.term('placeholders_search')}
|
||||
label=${this.localize.term('placeholders_search')}></uui-input>
|
||||
<umb-tree
|
||||
?hide-tree-root=${true}
|
||||
?multiple=${false}
|
||||
alias="Umb.Tree.Documents"
|
||||
@selection-change=${(event: CustomEvent) => this._handleSelectionChange(event, 'document')}
|
||||
.selection=${[this._selectedKey ?? '']}
|
||||
selectable></umb-tree>
|
||||
</div>
|
||||
<hr />
|
||||
|
||||
<uui-label>Link to media</uui-label>
|
||||
|
||||
<umb-tree
|
||||
?multiple=${false}
|
||||
alias="Umb.Tree.Media"
|
||||
@selection-change=${(event: CustomEvent) => this._handleSelectionChange(event, 'media')}
|
||||
.selection=${[this._selectedKey ?? '']}
|
||||
selectable></umb-tree>`;
|
||||
<uui-symbol-expand
|
||||
id="media-expand"
|
||||
@click=${() => (this.mediaExpanded = !this.mediaExpanded)}
|
||||
.open=${!this.mediaExpanded}></uui-symbol-expand>
|
||||
<uui-label for="media-expand">${this.localize.term('defaultdialogs_linkToMedia')}</uui-label>
|
||||
<div style="${styleMap({ display: !this.mediaExpanded ? 'block' : 'none' })}">
|
||||
<umb-tree
|
||||
?hide-tree-root=${true}
|
||||
?multiple=${false}
|
||||
alias="Umb.Tree.Media"
|
||||
@selection-change=${(event: CustomEvent) => this._handleSelectionChange(event, 'media')}
|
||||
.selection=${[this._selectedKey ?? '']}
|
||||
selectable></umb-tree>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
static styles = [
|
||||
@@ -185,7 +227,7 @@ export class UmbLinkPickerModalElement extends UmbModalBaseElement<UmbLinkPicker
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
uui-input,
|
||||
uui-input:not(#search-input),
|
||||
uui-label {
|
||||
margin-bottom: var(--uui-size-space-6);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user