Merge branch 'main' into v14/feature/block-custom-view-example-with-settings
This commit is contained in:
@@ -102,6 +102,27 @@ export class UmbInputMemberElement extends UmbFormControlMixin<string | undefine
|
||||
@property({ type: Object, attribute: false })
|
||||
public filter: (member: UmbMemberItemModel) => boolean = () => true;
|
||||
|
||||
/**
|
||||
* Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content.
|
||||
* @type {boolean}
|
||||
* @attr
|
||||
* @default false
|
||||
*/
|
||||
@property({ type: Boolean, reflect: true })
|
||||
public get readonly() {
|
||||
return this.#readonly;
|
||||
}
|
||||
public set readonly(value) {
|
||||
this.#readonly = value;
|
||||
|
||||
if (this.#readonly) {
|
||||
this.#sorter.disable();
|
||||
} else {
|
||||
this.#sorter.enable();
|
||||
}
|
||||
}
|
||||
#readonly = false;
|
||||
|
||||
@state()
|
||||
private _editMemberPath = '';
|
||||
|
||||
@@ -180,28 +201,22 @@ export class UmbInputMemberElement extends UmbFormControlMixin<string | undefine
|
||||
id="btn-add"
|
||||
look="placeholder"
|
||||
@click=${this.#openPicker}
|
||||
label=${this.localize.term('general_choose')}></uui-button>
|
||||
label=${this.localize.term('general_choose')}
|
||||
?disabled=${this.readonly}></uui-button>
|
||||
`;
|
||||
}
|
||||
|
||||
#renderItem(item: UmbMemberItemModel) {
|
||||
if (!item.unique) return nothing;
|
||||
return html`
|
||||
<uui-ref-node name=${item.name} id=${item.unique}>
|
||||
${this.#renderIcon(item)}
|
||||
<uui-ref-node-member name=${item.name} id=${item.unique} ?readonly=${this.readonly}>
|
||||
<uui-action-bar slot="actions">
|
||||
${this.#renderOpenButton(item)}
|
||||
<uui-button @click=${() => this.#onRemove(item)} label=${this.localize.term('general_remove')}></uui-button>
|
||||
${this.#renderOpenButton(item)} ${this.#renderRemoveButton(item)}
|
||||
</uui-action-bar>
|
||||
</uui-ref-node>
|
||||
</uui-ref-node-member>
|
||||
`;
|
||||
}
|
||||
|
||||
#renderIcon(item: UmbMemberItemModel) {
|
||||
if (!item.memberType.icon) return;
|
||||
return html`<umb-icon slot="icon" name=${item.memberType.icon}></umb-icon>`;
|
||||
}
|
||||
|
||||
#renderOpenButton(item: UmbMemberItemModel) {
|
||||
if (!this.showOpenButton) return nothing;
|
||||
return html`
|
||||
@@ -213,6 +228,13 @@ export class UmbInputMemberElement extends UmbFormControlMixin<string | undefine
|
||||
`;
|
||||
}
|
||||
|
||||
#renderRemoveButton(item: UmbMemberItemModel) {
|
||||
if (this.readonly) return nothing;
|
||||
return html`
|
||||
<uui-button @click=${() => this.#onRemove(item)} label=${this.localize.term('general_remove')}></uui-button>
|
||||
`;
|
||||
}
|
||||
|
||||
static override styles = [
|
||||
css`
|
||||
#btn-add {
|
||||
|
||||
@@ -12,6 +12,7 @@ export const manifests: Array<ManifestTypes> = [
|
||||
propertyEditorSchemaAlias: 'Umbraco.MemberPicker',
|
||||
icon: 'icon-user',
|
||||
group: 'people',
|
||||
supportsReadOnly: true,
|
||||
},
|
||||
},
|
||||
memberPickerSchemaManifest,
|
||||
|
||||
@@ -16,13 +16,27 @@ export class UmbPropertyEditorUIMemberPickerElement extends UmbLitElement implem
|
||||
@property({ attribute: false })
|
||||
public config?: UmbPropertyEditorConfigCollection;
|
||||
|
||||
/**
|
||||
* Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content.
|
||||
* @type {boolean}
|
||||
* @attr
|
||||
* @default false
|
||||
*/
|
||||
@property({ type: Boolean, reflect: true })
|
||||
readonly = false;
|
||||
|
||||
#onChange(event: CustomEvent & { target: UmbInputMemberElement }) {
|
||||
this.value = event.target.value;
|
||||
this.dispatchEvent(new UmbPropertyValueChangeEvent());
|
||||
}
|
||||
|
||||
override render() {
|
||||
return html`<umb-input-member min="0" max="1" .value=${this.value} @change=${this.#onChange}></umb-input-member>`;
|
||||
return html`<umb-input-member
|
||||
min="0"
|
||||
max="1"
|
||||
.value=${this.value}
|
||||
@change=${this.#onChange}
|
||||
?readonly=${this.readonly}></umb-input-member>`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,15 @@
|
||||
import type { UmbLinkPickerLink } from '../../link-picker-modal/types.js';
|
||||
import { UMB_LINK_PICKER_MODAL } from '../../link-picker-modal/link-picker-modal.token.js';
|
||||
import { css, customElement, html, property, repeat, state } from '@umbraco-cms/backoffice/external/lit';
|
||||
import {
|
||||
css,
|
||||
customElement,
|
||||
html,
|
||||
ifDefined,
|
||||
nothing,
|
||||
property,
|
||||
repeat,
|
||||
state,
|
||||
} from '@umbraco-cms/backoffice/external/lit';
|
||||
import { simpleHashCode } from '@umbraco-cms/backoffice/observable-api';
|
||||
import { UmbChangeEvent } from '@umbraco-cms/backoffice/event';
|
||||
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
|
||||
@@ -124,6 +133,27 @@ export class UmbInputMultiUrlElement extends UUIFormControlMixin(UmbLitElement,
|
||||
|
||||
#urls: Array<UmbLinkPickerLink> = [];
|
||||
|
||||
/**
|
||||
* Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content.
|
||||
* @type {boolean}
|
||||
* @attr
|
||||
* @default false
|
||||
*/
|
||||
@property({ type: Boolean, reflect: true })
|
||||
public get readonly() {
|
||||
return this.#readonly;
|
||||
}
|
||||
public set readonly(value) {
|
||||
this.#readonly = value;
|
||||
|
||||
if (this.#readonly) {
|
||||
this.#sorter.disable();
|
||||
} else {
|
||||
this.#sorter.enable();
|
||||
}
|
||||
}
|
||||
#readonly = false;
|
||||
|
||||
@state()
|
||||
private _modalRoute?: UmbModalRouteBuilder;
|
||||
|
||||
@@ -248,7 +278,8 @@ export class UmbInputMultiUrlElement extends UUIFormControlMixin(UmbLitElement,
|
||||
id="btn-add"
|
||||
look="placeholder"
|
||||
label=${this.localize.term('general_add')}
|
||||
.href=${this._modalRoute?.({ index: -1 })}></uui-button>
|
||||
.href=${this._modalRoute?.({ index: -1 })}
|
||||
?disabled=${this.readonly}></uui-button>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -267,24 +298,34 @@ export class UmbInputMultiUrlElement extends UUIFormControlMixin(UmbLitElement,
|
||||
|
||||
#renderItem(link: UmbLinkPickerLink, index: number) {
|
||||
const unique = this.#getUnique(link);
|
||||
const href = this._modalRoute?.({ index }) ?? '#';
|
||||
const href = this.readonly ? undefined : (this._modalRoute?.({ index }) ?? undefined);
|
||||
return html`
|
||||
<uui-ref-node
|
||||
id=${unique}
|
||||
href=${href}
|
||||
href=${ifDefined(href)}
|
||||
name=${link.name || ''}
|
||||
detail=${(link.url || '') + (link.queryString || '')}>
|
||||
detail=${(link.url || '') + (link.queryString || '')}
|
||||
?readonly=${this.readonly}>
|
||||
<umb-icon slot="icon" name=${link.icon || 'icon-link'}></umb-icon>
|
||||
<uui-action-bar slot="actions">
|
||||
<uui-button href=${href} label=${this.localize.term('general_edit')}></uui-button>
|
||||
<uui-button
|
||||
@click=${() => this.#requestRemoveItem(index)}
|
||||
label=${this.localize.term('general_remove')}></uui-button>
|
||||
${this.#renderEditAction(href)} ${this.#renderRemoveAction(index)}
|
||||
</uui-action-bar>
|
||||
</uui-ref-node>
|
||||
`;
|
||||
}
|
||||
|
||||
#renderEditAction(href?: string) {
|
||||
if (this.readonly || !href) return nothing;
|
||||
return html` <uui-button href=${href} label=${this.localize.term('general_edit')}></uui-button> `;
|
||||
}
|
||||
|
||||
#renderRemoveAction(index: number) {
|
||||
if (this.readonly) return nothing;
|
||||
return html` <uui-button
|
||||
@click=${() => this.#requestRemoveItem(index)}
|
||||
label=${this.localize.term('general_remove')}></uui-button>`;
|
||||
}
|
||||
|
||||
static override styles = [
|
||||
css`
|
||||
#btn-add {
|
||||
|
||||
@@ -181,11 +181,6 @@ export class UmbLinkPickerModalElement extends UmbModalBaseElement<UmbLinkPicker
|
||||
.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
|
||||
disabled
|
||||
id="search-input"
|
||||
placeholder=${this.localize.term('placeholders_search')}
|
||||
label=${this.localize.term('placeholders_search')}></uui-input>
|
||||
<umb-tree
|
||||
alias=${UMB_DOCUMENT_TREE_ALIAS}
|
||||
.props=${{
|
||||
|
||||
@@ -11,6 +11,7 @@ export const manifests = [
|
||||
propertyEditorSchemaAlias: 'Umbraco.MultiUrlPicker',
|
||||
icon: 'icon-link',
|
||||
group: 'pickers',
|
||||
supportsReadOnly: true,
|
||||
settings: {
|
||||
properties: [
|
||||
{
|
||||
|
||||
@@ -27,6 +27,15 @@ export class UmbPropertyEditorUIMultiUrlPickerElement extends UmbLitElement impl
|
||||
this._overlaySize = config.getValueByAlias<UUIModalSidebarSize>('overlaySize') ?? 'small';
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content.
|
||||
* @type {boolean}
|
||||
* @attr
|
||||
* @default false
|
||||
*/
|
||||
@property({ type: Boolean, reflect: true })
|
||||
readonly = false;
|
||||
|
||||
#parseInt(value: unknown, fallback: number): number {
|
||||
const num = Number(value);
|
||||
return !isNaN(num) && num > 0 ? num : fallback;
|
||||
@@ -74,6 +83,7 @@ export class UmbPropertyEditorUIMultiUrlPickerElement extends UmbLitElement impl
|
||||
.urls=${this.value ?? []}
|
||||
.variantId=${this._variantId}
|
||||
?hide-anchor=${this._hideAnchor}
|
||||
?readonly=${this.readonly}
|
||||
@change=${this.#onChange}>
|
||||
</umb-input-multi-url>
|
||||
`;
|
||||
|
||||
@@ -29,6 +29,15 @@ export class UmbInputCheckboxListElement extends UUIFormControlMixin(UmbLitEleme
|
||||
return this.selection.join(',');
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content.
|
||||
* @type {boolean}
|
||||
* @attr
|
||||
* @default false
|
||||
*/
|
||||
@property({ type: Boolean, reflect: true })
|
||||
readonly = false;
|
||||
|
||||
protected override getFormElement() {
|
||||
return undefined;
|
||||
}
|
||||
@@ -64,7 +73,11 @@ export class UmbInputCheckboxListElement extends UUIFormControlMixin(UmbLitEleme
|
||||
}
|
||||
|
||||
#renderCheckbox(item: (typeof this.list)[0]) {
|
||||
return html`<uui-checkbox ?checked=${item.checked} label=${item.label} value=${item.value}></uui-checkbox>`;
|
||||
return html`<uui-checkbox
|
||||
?checked=${item.checked}
|
||||
label=${item.label}
|
||||
value=${item.value}
|
||||
?readonly=${this.readonly}></uui-checkbox>`;
|
||||
}
|
||||
|
||||
static override styles = [
|
||||
|
||||
@@ -12,6 +12,7 @@ export const manifests: Array<ManifestTypes> = [
|
||||
propertyEditorSchemaAlias: 'Umbraco.CheckBoxList',
|
||||
icon: 'icon-bulleted-list',
|
||||
group: 'lists',
|
||||
supportsReadOnly: true,
|
||||
settings: {
|
||||
properties: [
|
||||
{
|
||||
|
||||
@@ -39,6 +39,15 @@ export class UmbPropertyEditorUICheckboxListElement extends UmbLitElement implem
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content.
|
||||
* @type {boolean}
|
||||
* @attr
|
||||
* @default false
|
||||
*/
|
||||
@property({ type: Boolean, reflect: true })
|
||||
readonly = false;
|
||||
|
||||
@state()
|
||||
private _list: UmbInputCheckboxListElement['list'] = [];
|
||||
|
||||
@@ -52,6 +61,7 @@ export class UmbPropertyEditorUICheckboxListElement extends UmbLitElement implem
|
||||
<umb-input-checkbox-list
|
||||
.list=${this._list}
|
||||
.selection=${this.#selection}
|
||||
?readonly=${this.readonly}
|
||||
@change=${this.#onChange}></umb-input-checkbox-list>
|
||||
`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user