prevent opening tree items in a selectable context, as well disable them if they are not selectable.
This commit is contained in:
@@ -42,6 +42,9 @@ export class UmbTreeItemContextBase<TreeItemType extends TreeItemPresentationMod
|
|||||||
#isSelectable = new UmbBooleanState(false);
|
#isSelectable = new UmbBooleanState(false);
|
||||||
isSelectable = this.#isSelectable.asObservable();
|
isSelectable = this.#isSelectable.asObservable();
|
||||||
|
|
||||||
|
#isSelectableContext = new UmbBooleanState(false);
|
||||||
|
isSelectableContext = this.#isSelectableContext.asObservable();
|
||||||
|
|
||||||
#isSelected = new UmbBooleanState(false);
|
#isSelected = new UmbBooleanState(false);
|
||||||
isSelected = this.#isSelected.asObservable();
|
isSelected = this.#isSelected.asObservable();
|
||||||
|
|
||||||
@@ -138,6 +141,8 @@ export class UmbTreeItemContextBase<TreeItemType extends TreeItemPresentationMod
|
|||||||
#observeIsSelectable() {
|
#observeIsSelectable() {
|
||||||
if (!this.treeContext) return;
|
if (!this.treeContext) return;
|
||||||
new UmbObserverController(this.host, this.treeContext.selectable, (value) => {
|
new UmbObserverController(this.host, this.treeContext.selectable, (value) => {
|
||||||
|
this.#isSelectableContext.next(value);
|
||||||
|
|
||||||
// If the tree is selectable, check if this item is selectable
|
// If the tree is selectable, check if this item is selectable
|
||||||
if (value === true) {
|
if (value === true) {
|
||||||
const isSelectable = this.treeContext?.selectableFilter?.(this.getTreeItem()!) ?? true;
|
const isSelectable = this.treeContext?.selectableFilter?.(this.getTreeItem()!) ?? true;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import type { UmbTreeItemContext } from '../tree-item/index.js';
|
import type { UmbTreeItemContext } from '../tree-item/index.js';
|
||||||
import { UMB_TREE_ITEM_CONTEXT_TOKEN } from './tree-item-base.context.js';
|
import { UMB_TREE_ITEM_CONTEXT_TOKEN } from './tree-item-base.context.js';
|
||||||
import { css, html, nothing , customElement, state , ifDefined , repeat } from '@umbraco-cms/backoffice/external/lit';
|
import { css, html, nothing, customElement, state, ifDefined, repeat } from '@umbraco-cms/backoffice/external/lit';
|
||||||
import { UUITextStyles } from '@umbraco-cms/backoffice/external/uui';
|
import { UUITextStyles } from '@umbraco-cms/backoffice/external/uui';
|
||||||
import { UmbLitElement } from '@umbraco-cms/internal/lit-element';
|
import { UmbLitElement } from '@umbraco-cms/internal/lit-element';
|
||||||
import { TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api';
|
import { TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api';
|
||||||
@@ -19,6 +19,9 @@ export class UmbTreeItemBaseElement extends UmbLitElement {
|
|||||||
@state()
|
@state()
|
||||||
private _isLoading = false;
|
private _isLoading = false;
|
||||||
|
|
||||||
|
@state()
|
||||||
|
private _isSelectableContext = false;
|
||||||
|
|
||||||
@state()
|
@state()
|
||||||
private _isSelectable = false;
|
private _isSelectable = false;
|
||||||
|
|
||||||
@@ -43,6 +46,7 @@ export class UmbTreeItemBaseElement extends UmbLitElement {
|
|||||||
this.observe(this.#treeItemContext.treeItem, (value) => (this._item = value));
|
this.observe(this.#treeItemContext.treeItem, (value) => (this._item = value));
|
||||||
this.observe(this.#treeItemContext.hasChildren, (value) => (this._hasChildren = value));
|
this.observe(this.#treeItemContext.hasChildren, (value) => (this._hasChildren = value));
|
||||||
this.observe(this.#treeItemContext.isLoading, (value) => (this._isLoading = value));
|
this.observe(this.#treeItemContext.isLoading, (value) => (this._isLoading = value));
|
||||||
|
this.observe(this.#treeItemContext.isSelectableContext, (value) => (this._isSelectableContext = value));
|
||||||
this.observe(this.#treeItemContext.isSelectable, (value) => (this._isSelectable = value));
|
this.observe(this.#treeItemContext.isSelectable, (value) => (this._isSelectable = value));
|
||||||
this.observe(this.#treeItemContext.isSelected, (value) => (this._isSelected = value));
|
this.observe(this.#treeItemContext.isSelected, (value) => (this._isSelected = value));
|
||||||
this.observe(this.#treeItemContext.path, (value) => (this._href = value));
|
this.observe(this.#treeItemContext.path, (value) => (this._href = value));
|
||||||
@@ -80,18 +84,21 @@ export class UmbTreeItemBaseElement extends UmbLitElement {
|
|||||||
this.#treeItemContext?.toggleContextMenu();
|
this.#treeItemContext?.toggleContextMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Note: Currently we want to prevent opening when the item is in a selectable context, but this might change in the future.
|
||||||
|
// If we like to be able to open items in selectable context, then we might want to make it as a menu item action, so you have to click ... and chose an action called 'Edit'
|
||||||
render() {
|
render() {
|
||||||
return html`
|
return html`
|
||||||
<uui-menu-item
|
<uui-menu-item
|
||||||
@show-children=${this._onShowChildren}
|
@show-children=${this._onShowChildren}
|
||||||
@selected=${this._handleSelectedItem}
|
@selected=${this._handleSelectedItem}
|
||||||
@deselected=${this._handleDeselectedItem}
|
@deselected=${this._handleDeselectedItem}
|
||||||
|
?disabled=${this._isSelectableContext && !this._isSelectable}
|
||||||
?selectable=${this._isSelectable}
|
?selectable=${this._isSelectable}
|
||||||
?selected=${this._isSelected}
|
?selected=${this._isSelected}
|
||||||
.loading=${this._isLoading}
|
.loading=${this._isLoading}
|
||||||
.hasChildren=${this._hasChildren}
|
.hasChildren=${this._hasChildren}
|
||||||
label="${ifDefined(this._item?.name)}"
|
label="${ifDefined(this._item?.name)}"
|
||||||
href="${ifDefined(this._href)}">
|
href="${ifDefined(this._isSelectableContext ? undefined : this._href)}">
|
||||||
${this.#renderIcon()} ${this.#renderLabel()} ${this.#renderActions()} ${this.#renderChildItems()}
|
${this.#renderIcon()} ${this.#renderLabel()} ${this.#renderActions()} ${this.#renderChildItems()}
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</uui-menu-item>
|
</uui-menu-item>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ export interface UmbTreeItemContext<TreeItemType extends TreeItemPresentationMod
|
|||||||
treeItem: Observable<TreeItemType | undefined>;
|
treeItem: Observable<TreeItemType | undefined>;
|
||||||
hasChildren: Observable<boolean>;
|
hasChildren: Observable<boolean>;
|
||||||
isLoading: Observable<boolean>;
|
isLoading: Observable<boolean>;
|
||||||
|
isSelectableContext: Observable<boolean>;
|
||||||
isSelectable: Observable<boolean>;
|
isSelectable: Observable<boolean>;
|
||||||
isSelected: Observable<boolean>;
|
isSelected: Observable<boolean>;
|
||||||
isActive: Observable<boolean>;
|
isActive: Observable<boolean>;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { html , customElement } from '@umbraco-cms/backoffice/external/lit';
|
import { html, customElement } from '@umbraco-cms/backoffice/external/lit';
|
||||||
import { UmbLitElement } from '@umbraco-cms/internal/lit-element';
|
import { UmbLitElement } from '@umbraco-cms/internal/lit-element';
|
||||||
|
|
||||||
@customElement('umb-document-menu-item')
|
@customElement('umb-document-menu-item')
|
||||||
|
|||||||
Reference in New Issue
Block a user