{"version":3,"file":"index.js","sources":["../../../../src/packages/core/tree/tree-picker-modal/constants.ts","../../../../src/packages/core/tree/tree-picker-modal/tree-picker-modal.token.ts","../../../../src/packages/core/tree/data/tree-server-data-source-base.ts","../../../../src/packages/core/tree/data/tree-repository-base.ts","../../../../src/packages/core/tree/data/unique-tree-store.ts","../../../../src/packages/core/tree/tree-item/tree-item.element.ts","../../../../src/packages/core/tree/tree-menu-item-default/tree-menu-item-default.element.ts","../../../../src/packages/core/tree/tree.element.ts"],"sourcesContent":["export const UMB_TREE_PICKER_MODAL_ALIAS = 'Umb.Modal.TreePicker';\r\n","import type { UmbTreeStartNode } from '../types.js';\r\nimport { UMB_TREE_PICKER_MODAL_ALIAS } from './constants.js';\r\nimport type { UmbPickerModalData, UmbPickerModalValue } from '@umbraco-cms/backoffice/modal';\r\nimport type { UmbWorkspaceModalData } from '@umbraco-cms/backoffice/workspace';\r\nimport { UmbModalToken } from '@umbraco-cms/backoffice/modal';\r\nimport type { UmbPathPattern, UmbPathPatternParamsType } from '@umbraco-cms/backoffice/router';\r\n\r\nexport interface UmbTreePickerModalCreateActionData {\r\n\tlabel: string;\r\n\tmodalData: UmbWorkspaceModalData;\r\n\tmodalToken?: UmbModalToken;\r\n\textendWithPathPattern: UmbPathPattern;\r\n\textendWithPathParams: PathPatternParamsType;\r\n}\r\n\r\nexport interface UmbTreePickerModalData<\r\n\tTreeItemType,\r\n\tPathPatternParamsType extends UmbPathPatternParamsType = UmbPathPatternParamsType,\r\n> extends UmbPickerModalData {\r\n\thideTreeRoot?: boolean;\r\n\ttreeAlias?: string;\r\n\t// Consider if it makes sense to move this into the UmbPickerModalData interface, but for now this is a TreePicker feature. [NL]\r\n\tcreateAction?: UmbTreePickerModalCreateActionData;\r\n\tstartNode?: UmbTreeStartNode;\r\n\tfoldersOnly?: boolean;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\r\nexport interface UmbTreePickerModalValue extends UmbPickerModalValue {}\r\n\r\nexport const UMB_TREE_PICKER_MODAL = new UmbModalToken, UmbTreePickerModalValue>(\r\n\tUMB_TREE_PICKER_MODAL_ALIAS,\r\n\t{\r\n\t\tmodal: {\r\n\t\t\ttype: 'sidebar',\r\n\t\t\tsize: 'small',\r\n\t\t},\r\n\t},\r\n);\r\n","import type { UmbTreeItemModelBase, UmbTreeItemModel } from '../types.js';\r\nimport type { UmbTreeDataSource } from './tree-data-source.interface.js';\r\nimport type {\r\n\tUmbTreeAncestorsOfRequestArgs,\r\n\tUmbTreeChildrenOfRequestArgs,\r\n\tUmbTreeRootItemsRequestArgs,\r\n} from './types.js';\r\nimport { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport type { UmbPagedModel } from '@umbraco-cms/backoffice/repository';\r\n\r\nexport interface UmbTreeServerDataSourceBaseArgs<\r\n\tServerTreeItemType extends { hasChildren: boolean },\r\n\tClientTreeItemType extends UmbTreeItemModelBase,\r\n\tTreeRootItemsRequestArgsType extends UmbTreeRootItemsRequestArgs = UmbTreeRootItemsRequestArgs,\r\n\tTreeChildrenOfRequestArgsType extends UmbTreeChildrenOfRequestArgs = UmbTreeChildrenOfRequestArgs,\r\n\tTreeAncestorsOfRequestArgsType extends UmbTreeAncestorsOfRequestArgs = UmbTreeAncestorsOfRequestArgs,\r\n> {\r\n\tgetRootItems: (args: TreeRootItemsRequestArgsType) => Promise>;\r\n\tgetChildrenOf: (args: TreeChildrenOfRequestArgsType) => Promise>;\r\n\tgetAncestorsOf: (args: TreeAncestorsOfRequestArgsType) => Promise>;\r\n\tmapper: (item: ServerTreeItemType) => ClientTreeItemType;\r\n}\r\n\r\n/**\r\n * A data source for a tree that fetches data from the server\r\n * @class UmbTreeServerDataSourceBase\r\n * @implements {UmbTreeDataSource}\r\n */\r\nexport abstract class UmbTreeServerDataSourceBase<\r\n\tServerTreeItemType extends { hasChildren: boolean },\r\n\tClientTreeItemType extends UmbTreeItemModel,\r\n\tTreeRootItemsRequestArgsType extends UmbTreeRootItemsRequestArgs = UmbTreeRootItemsRequestArgs,\r\n\tTreeChildrenOfRequestArgsType extends UmbTreeChildrenOfRequestArgs = UmbTreeChildrenOfRequestArgs,\r\n\tTreeAncestorsOfRequestArgsType extends UmbTreeAncestorsOfRequestArgs = UmbTreeAncestorsOfRequestArgs,\r\n> implements\r\n\t\tUmbTreeDataSource<\r\n\t\t\tClientTreeItemType,\r\n\t\t\tTreeRootItemsRequestArgsType,\r\n\t\t\tTreeChildrenOfRequestArgsType,\r\n\t\t\tTreeAncestorsOfRequestArgsType\r\n\t\t>\r\n{\r\n\t#host;\r\n\t#getRootItems;\r\n\t#getChildrenOf;\r\n\t#getAncestorsOf;\r\n\t#mapper;\r\n\r\n\t/**\r\n\t * Creates an instance of UmbTreeServerDataSourceBase.\r\n\t * @param {UmbControllerHost} host - The controller host for this controller to be appended to\r\n\t * @param args\r\n\t * @memberof UmbTreeServerDataSourceBase\r\n\t */\r\n\tconstructor(\r\n\t\thost: UmbControllerHost,\r\n\t\targs: UmbTreeServerDataSourceBaseArgs<\r\n\t\t\tServerTreeItemType,\r\n\t\t\tClientTreeItemType,\r\n\t\t\tTreeRootItemsRequestArgsType,\r\n\t\t\tTreeChildrenOfRequestArgsType,\r\n\t\t\tTreeAncestorsOfRequestArgsType\r\n\t\t>,\r\n\t) {\r\n\t\tthis.#host = host;\r\n\t\tthis.#getRootItems = args.getRootItems;\r\n\t\tthis.#getChildrenOf = args.getChildrenOf;\r\n\t\tthis.#getAncestorsOf = args.getAncestorsOf;\r\n\t\tthis.#mapper = args.mapper;\r\n\t}\r\n\r\n\t/**\r\n\t * Fetches the root items for the tree from the server\r\n\t * @param {UmbTreeRootItemsRequestArgs} args\r\n\t * @returns {*}\r\n\t * @memberof UmbTreeServerDataSourceBase\r\n\t */\r\n\tasync getRootItems(args: TreeRootItemsRequestArgsType) {\r\n\t\tconst { data, error } = await tryExecuteAndNotify(this.#host, this.#getRootItems(args));\r\n\r\n\t\tif (data) {\r\n\t\t\tconst items = data?.items.map((item) => this.#mapper(item));\r\n\t\t\treturn { data: { total: data.total, items } };\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n\r\n\t/**\r\n\t * Fetches the children of a given parent unique from the server\r\n\t * @param {UmbTreeChildrenOfRequestArgs} args\r\n\t * @returns {*}\r\n\t * @memberof UmbTreeServerDataSourceBase\r\n\t */\r\n\tasync getChildrenOf(args: TreeChildrenOfRequestArgsType) {\r\n\t\tif (args.parent.unique === undefined) throw new Error('Parent unique is missing');\r\n\r\n\t\tconst { data, error } = await tryExecuteAndNotify(this.#host, this.#getChildrenOf(args));\r\n\r\n\t\tif (data) {\r\n\t\t\tconst items = data?.items.map((item: ServerTreeItemType) => this.#mapper(item));\r\n\t\t\treturn { data: { total: data.total, items } };\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n\r\n\t/**\r\n\t * Fetches the ancestors of a given item from the server\r\n\t * @param {UmbTreeAncestorsOfRequestArgs} args\r\n\t * @returns {*}\r\n\t * @memberof UmbTreeServerDataSourceBase\r\n\t */\r\n\tasync getAncestorsOf(args: TreeAncestorsOfRequestArgsType) {\r\n\t\tif (!args.treeItem.entityType) throw new Error('Parent unique is missing');\r\n\r\n\t\tconst { data, error } = await tryExecuteAndNotify(this.#host, this.#getAncestorsOf(args));\r\n\r\n\t\tif (data) {\r\n\t\t\tconst items = data?.map((item: ServerTreeItemType) => this.#mapper(item));\r\n\t\t\treturn { data: items };\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n}\r\n","import type { UmbTreeItemModel, UmbTreeRootModel } from '../types.js';\r\nimport type { UmbTreeStore } from './tree-store.interface.js';\r\nimport type { UmbTreeRepository } from './tree-repository.interface.js';\r\nimport type { UmbTreeDataSource, UmbTreeDataSourceConstructor } from './tree-data-source.interface.js';\r\nimport type {\r\n\tUmbTreeAncestorsOfRequestArgs,\r\n\tUmbTreeChildrenOfRequestArgs,\r\n\tUmbTreeRootItemsRequestArgs,\r\n} from './types.js';\r\nimport { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository';\r\nimport type { ProblemDetails } from '@umbraco-cms/backoffice/external/backend-api';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport type { UmbApi } from '@umbraco-cms/backoffice/extension-api';\r\nimport type { UmbContextToken } from '@umbraco-cms/backoffice/context-api';\r\n\r\n/**\r\n * Base class for a tree repository.\r\n * @abstract\r\n * @class UmbTreeRepositoryBase\r\n * @augments {UmbRepositoryBase}\r\n * @implements {UmbTreeRepository}\r\n * @implements {UmbApi}\r\n * @template TreeItemType\r\n * @template TreeRootType\r\n */\r\nexport abstract class UmbTreeRepositoryBase<\r\n\t\tTreeItemType extends UmbTreeItemModel,\r\n\t\tTreeRootType extends UmbTreeRootModel,\r\n\t\tTreeRootItemsRequestArgsType extends UmbTreeRootItemsRequestArgs = UmbTreeRootItemsRequestArgs,\r\n\t\tTreeChildrenOfRequestArgsType extends UmbTreeChildrenOfRequestArgs = UmbTreeChildrenOfRequestArgs,\r\n\t\tTreeAncestorsOfRequestArgsType extends UmbTreeAncestorsOfRequestArgs = UmbTreeAncestorsOfRequestArgs,\r\n\t>\r\n\textends UmbRepositoryBase\r\n\timplements\r\n\t\tUmbTreeRepository<\r\n\t\t\tTreeItemType,\r\n\t\t\tTreeRootType,\r\n\t\t\tTreeRootItemsRequestArgsType,\r\n\t\t\tTreeChildrenOfRequestArgsType,\r\n\t\t\tTreeAncestorsOfRequestArgsType\r\n\t\t>,\r\n\t\tUmbApi\r\n{\r\n\tprotected _init: Promise;\r\n\tprotected _treeStore?: UmbTreeStore;\r\n\tprotected _treeSource: UmbTreeDataSource;\r\n\r\n\t/**\r\n\t * Creates an instance of UmbTreeRepositoryBase.\r\n\t * @param {UmbControllerHost} host - The controller host for this controller to be appended to\r\n\t * @param {UmbTreeDataSourceConstructor} treeSourceConstructor\r\n\t * @param {(string | UmbContextToken)} treeStoreContextAlias\r\n\t * @memberof UmbTreeRepositoryBase\r\n\t */\r\n\tconstructor(\r\n\t\thost: UmbControllerHost,\r\n\t\ttreeSourceConstructor: UmbTreeDataSourceConstructor,\r\n\t\ttreeStoreContextAlias: string | UmbContextToken,\r\n\t) {\r\n\t\tsuper(host);\r\n\t\tthis._treeSource = new treeSourceConstructor(this);\r\n\r\n\t\tthis._init = this.consumeContext(treeStoreContextAlias, (instance) => {\r\n\t\t\tthis._treeStore = instance;\r\n\t\t}).asPromise();\r\n\t}\r\n\r\n\t/**\r\n\t * Request the tree root item\r\n\t * @returns {*}\r\n\t * @memberof UmbTreeRepositoryBase\r\n\t */\r\n\tabstract requestTreeRoot(): Promise<{ data?: TreeRootType; error?: ProblemDetails }>;\r\n\r\n\t/**\r\n\t * Requests root items of a tree\r\n\t * @param args\r\n\t * @returns {*}\r\n\t * @memberof UmbTreeRepositoryBase\r\n\t */\r\n\tasync requestTreeRootItems(args: TreeRootItemsRequestArgsType) {\r\n\t\tawait this._init;\r\n\r\n\t\tconst { data, error: _error } = await this._treeSource.getRootItems(args);\r\n\t\tconst error: any = _error;\r\n\t\tif (data) {\r\n\t\t\tthis._treeStore!.appendItems(data.items);\r\n\t\t}\r\n\r\n\t\treturn { data, error, asObservable: () => this._treeStore!.rootItems };\r\n\t}\r\n\r\n\t/**\r\n\t * Requests tree items of a given parent\r\n\t * @param {(string | null)} parentUnique\r\n\t * @param args\r\n\t * @returns {*}\r\n\t * @memberof UmbTreeRepositoryBase\r\n\t */\r\n\tasync requestTreeItemsOf(args: TreeChildrenOfRequestArgsType) {\r\n\t\tif (!args.parent) throw new Error('Parent is missing');\r\n\t\tif (args.parent.unique === undefined) throw new Error('Parent unique is missing');\r\n\t\tif (args.parent.entityType === null) throw new Error('Parent entity type is missing');\r\n\t\tawait this._init;\r\n\r\n\t\tconst { data, error: _error } = await this._treeSource.getChildrenOf(args);\r\n\t\tconst error: any = _error;\r\n\t\tif (data) {\r\n\t\t\tthis._treeStore!.appendItems(data.items);\r\n\t\t}\r\n\r\n\t\treturn { data, error, asObservable: () => this._treeStore!.childrenOf(args.parent.unique) };\r\n\t}\r\n\r\n\t/**\r\n\t * Requests ancestors of a given item\r\n\t * @param {UmbTreeAncestorsOfRequestArgs} args\r\n\t * @returns {*}\r\n\t * @memberof UmbTreeRepositoryBase\r\n\t */\r\n\tasync requestTreeItemAncestors(args: TreeAncestorsOfRequestArgsType) {\r\n\t\tif (args.treeItem.unique === undefined) throw new Error('Descendant unique is missing');\r\n\t\tawait this._init;\r\n\r\n\t\tconst { data, error: _error } = await this._treeSource.getAncestorsOf(args);\r\n\t\tconst error: any = _error;\r\n\t\t// TODO: implement observable for ancestor items in the store\r\n\t\treturn { data, error };\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a promise with an observable of tree root items\r\n\t * @returns {*}\r\n\t * @memberof UmbTreeRepositoryBase\r\n\t */\r\n\tasync rootTreeItems() {\r\n\t\tawait this._init;\r\n\t\treturn this._treeStore!.rootItems;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a promise with an observable of children items of a given parent\r\n\t * @param {(string | null)} parentUnique\r\n\t * @returns {*}\r\n\t * @memberof UmbTreeRepositoryBase\r\n\t */\r\n\tasync treeItemsOf(parentUnique: string | null) {\r\n\t\tif (parentUnique === undefined) throw new Error('Parent unique is missing');\r\n\t\tawait this._init;\r\n\t\treturn this._treeStore!.childrenOf(parentUnique);\r\n\t}\r\n}\r\n","import type { UmbTreeItemModel } from '../types.js';\r\nimport type { UmbTreeStore } from './tree-store.interface.js';\r\nimport { UmbStoreBase } from '@umbraco-cms/backoffice/store';\r\nimport { UmbArrayState } from '@umbraco-cms/backoffice/observable-api';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\n\r\n// TODO: remove Unique from name when we have switched to uniques\r\n/**\r\n * @class UmbUniqueTreeStore\r\n * @augments {UmbStoreBase}\r\n * @description - Entity Tree Store\r\n */\r\nexport class UmbUniqueTreeStore extends UmbStoreBase implements UmbTreeStore {\r\n\tconstructor(host: UmbControllerHost, storeAlias: string) {\r\n\t\tsuper(host, storeAlias, new UmbArrayState([], (x) => x.unique));\r\n\t}\r\n\r\n\t/**\r\n\t * An observable to observe the root items\r\n\t * @memberof UmbUniqueTreeStore\r\n\t */\r\n\trootItems = this._data.asObservablePart((items) => items.filter((item) => item.parent.unique === null));\r\n\r\n\t/**\r\n\t * Returns an observable to observe the children of a given parent\r\n\t * @param {(string | null)} parentUnique\r\n\t * @returns {*}\r\n\t * @memberof UmbUniqueTreeStore\r\n\t */\r\n\tchildrenOf(parentUnique: string | null) {\r\n\t\treturn this._data.asObservablePart((items) => items.filter((item) => item.parent.unique === parentUnique));\r\n\t}\r\n}\r\n","import type { ManifestTreeItem } from '../extensions/types.js';\r\nimport { customElement, property } from '@umbraco-cms/backoffice/external/lit';\r\nimport {\r\n\tUmbExtensionElementAndApiSlotElementBase,\r\n\tumbExtensionsRegistry,\r\n} from '@umbraco-cms/backoffice/extension-registry';\r\nimport { createObservablePart } from '@umbraco-cms/backoffice/observable-api';\r\n\r\n@customElement('umb-tree-item')\r\nexport class UmbTreeItemElement extends UmbExtensionElementAndApiSlotElementBase {\r\n\t_entityType?: string;\r\n\t@property({ type: String, reflect: true })\r\n\tget entityType() {\r\n\t\treturn this._entityType;\r\n\t}\r\n\tset entityType(newVal) {\r\n\t\tthis._entityType = newVal;\r\n\t\tthis.#observeEntityType();\r\n\t}\r\n\r\n\t#observeEntityType() {\r\n\t\tif (!this._entityType) return;\r\n\r\n\t\tconst filterByEntityType = (manifest: ManifestTreeItem) => {\r\n\t\t\tif (!this._entityType) return false;\r\n\t\t\treturn manifest.forEntityTypes.includes(this._entityType);\r\n\t\t};\r\n\r\n\t\tthis.observe(\r\n\t\t\t// TODO: what should we do if there are multiple tree items for an entity type?\r\n\t\t\t// This method gets all extensions based on a type, then filters them based on the entity type. and then we get the alias of the first one [NL]\r\n\t\t\tcreateObservablePart(\r\n\t\t\t\tumbExtensionsRegistry.byTypeAndFilter(this.getExtensionType(), filterByEntityType),\r\n\t\t\t\t(x) => x[0].alias,\r\n\t\t\t),\r\n\t\t\t(alias) => {\r\n\t\t\t\tthis.alias = alias;\r\n\t\t\t},\r\n\t\t\t'umbObserveAlias',\r\n\t\t);\r\n\t}\r\n\r\n\tgetExtensionType() {\r\n\t\treturn 'treeItem';\r\n\t}\r\n\r\n\tgetDefaultElementName() {\r\n\t\treturn 'umb-default-tree-item';\r\n\t}\r\n}\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-tree-item': UmbTreeItemElement;\r\n\t}\r\n}\r\n","import type { ManifestMenuItemTreeKind } from './types.js';\r\nimport { html, nothing, customElement, property } from '@umbraco-cms/backoffice/external/lit';\r\nimport { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';\r\nimport type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry';\r\nimport { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';\r\nimport type { UmbMenuItemElement } from '@umbraco-cms/backoffice/menu';\r\n\r\n// TODO: Move to separate file:\r\nconst manifest: UmbExtensionManifestKind = {\r\n\ttype: 'kind',\r\n\talias: 'Umb.Kind.Tree',\r\n\tmatchKind: 'tree',\r\n\tmatchType: 'menuItem',\r\n\tmanifest: {\r\n\t\ttype: 'menuItem',\r\n\t\telementName: 'umb-menu-item-tree-default',\r\n\t},\r\n};\r\numbExtensionsRegistry.register(manifest);\r\n\r\n@customElement('umb-menu-item-tree-default')\r\nexport class UmbMenuItemTreeDefaultElement extends UmbLitElement implements UmbMenuItemElement {\r\n\t@property({ type: Object })\r\n\tmanifest?: ManifestMenuItemTreeKind;\r\n\r\n\toverride render() {\r\n\t\treturn this.manifest\r\n\t\t\t? html`\r\n\t\t\t\t\t\r\n\t\t\t\t`\r\n\t\t\t: nothing;\r\n\t}\r\n}\r\n\r\nexport default UmbMenuItemTreeDefaultElement;\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-menu-item-tree-default': UmbMenuItemTreeDefaultElement;\r\n\t}\r\n}\r\n","import type { ManifestTree } from './extensions/types.js';\r\nimport { customElement } from '@umbraco-cms/backoffice/external/lit';\r\nimport { UmbExtensionElementAndApiSlotElementBase } from '@umbraco-cms/backoffice/extension-registry';\r\n\r\n@customElement('umb-tree')\r\nexport class UmbTreeElement extends UmbExtensionElementAndApiSlotElementBase {\r\n\tgetExtensionType() {\r\n\t\treturn 'tree';\r\n\t}\r\n\r\n\tgetDefaultElementName() {\r\n\t\treturn 'umb-default-tree';\r\n\t}\r\n\r\n\tgetSelection() {\r\n\t\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n\t\t// @ts-ignore\r\n\t\t// TODO: make base interface for a tree element\r\n\t\treturn this._element?.getSelection?.() ?? [];\r\n\t}\r\n}\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-tree': UmbTreeElement;\r\n\t}\r\n}\r\n"],"names":["UMB_TREE_PICKER_MODAL_ALIAS","UMB_TREE_PICKER_MODAL","UmbModalToken","UmbTreeServerDataSourceBase","#host","#getRootItems","#getChildrenOf","#getAncestorsOf","#mapper","host","args","data","error","tryExecuteAndNotify","items","item","UmbTreeRepositoryBase","UmbRepositoryBase","treeSourceConstructor","treeStoreContextAlias","instance","_error","parentUnique","UmbUniqueTreeStore","UmbStoreBase","storeAlias","UmbArrayState","x","_UmbTreeItemElement_instances","observeEntityType_fn","UmbTreeItemElement","UmbExtensionElementAndApiSlotElementBase","__privateAdd","newVal","__privateMethod","filterByEntityType","manifest","createObservablePart","umbExtensionsRegistry","alias","__decorateClass","property","customElement","UmbMenuItemTreeDefaultElement","UmbLitElement","html","nothing","UmbTreeElement"],"mappings":"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"}