{"version":3,"file":"default-tree.context-BaTDK4kc.js","sources":["../../../src/packages/core/tree/default/default-tree.context.ts"],"sourcesContent":["import type { UmbTreeItemModel, UmbTreeRootModel, UmbTreeStartNode } from '../types.js';\r\nimport type { UmbTreeRepository } from '../data/tree-repository.interface.js';\r\nimport type { UmbTreeContext } from '../tree-context.interface.js';\r\nimport type { UmbTreeRootItemsRequestArgs } from '../data/types.js';\r\nimport type { ManifestTree } from '../extensions/types.js';\r\nimport { UMB_TREE_CONTEXT } from './default-tree.context-token.js';\r\nimport { type UmbActionEventContext, UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action';\r\nimport { type ManifestRepository, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';\r\nimport { UmbContextBase } from '@umbraco-cms/backoffice/class-api';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { UmbExtensionApiInitializer } from '@umbraco-cms/backoffice/extension-api';\r\nimport { UmbPaginationManager, UmbSelectionManager, debounce } from '@umbraco-cms/backoffice/utils';\r\nimport {\r\n\tUmbRequestReloadChildrenOfEntityEvent,\r\n\ttype UmbEntityActionEvent,\r\n} from '@umbraco-cms/backoffice/entity-action';\r\nimport { UmbArrayState, UmbBooleanState, UmbObjectState } from '@umbraco-cms/backoffice/observable-api';\r\nimport { UmbChangeEvent } from '@umbraco-cms/backoffice/event';\r\n\r\nexport class UmbDefaultTreeContext<\r\n\t\tTreeItemType extends UmbTreeItemModel,\r\n\t\tTreeRootType extends UmbTreeRootModel,\r\n\t\tRequestArgsType extends UmbTreeRootItemsRequestArgs = UmbTreeRootItemsRequestArgs,\r\n\t>\r\n\textends UmbContextBase>\r\n\timplements UmbTreeContext\r\n{\r\n\t#additionalRequestArgs = new UmbObjectState | object>({});\r\n\tpublic readonly additionalRequestArgs = this.#additionalRequestArgs.asObservable();\r\n\r\n\t#treeRoot = new UmbObjectState(undefined);\r\n\ttreeRoot = this.#treeRoot.asObservable();\r\n\r\n\t#rootItems = new UmbArrayState([], (x) => x.unique);\r\n\trootItems = this.#rootItems.asObservable();\r\n\r\n\tpublic selectableFilter?: (item: TreeItemType) => boolean = () => true;\r\n\tpublic filter?: (item: TreeItemType) => boolean = () => true;\r\n\tpublic readonly selection = new UmbSelectionManager(this._host);\r\n\tpublic readonly pagination = new UmbPaginationManager();\r\n\r\n\t#hideTreeRoot = new UmbBooleanState(false);\r\n\thideTreeRoot = this.#hideTreeRoot.asObservable();\r\n\r\n\t#startNode = new UmbObjectState(undefined);\r\n\tstartNode = this.#startNode.asObservable();\r\n\r\n\t#foldersOnly = new UmbBooleanState(false);\r\n\tfoldersOnly = this.#foldersOnly.asObservable();\r\n\r\n\t#manifest?: ManifestTree;\r\n\t#repository?: UmbTreeRepository;\r\n\t#actionEventContext?: UmbActionEventContext;\r\n\r\n\t#paging = {\r\n\t\tskip: 0,\r\n\t\ttake: 50,\r\n\t};\r\n\r\n\t#initResolver?: () => void;\r\n\t#initialized = false;\r\n\r\n\t#init = new Promise((resolve) => {\r\n\t\tif (this.#initialized) {\r\n\t\t\tresolve();\r\n\t\t} else {\r\n\t\t\tthis.#initResolver = resolve;\r\n\t\t}\r\n\t});\r\n\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n\t\t// @ts-ignore\r\n\t\tsuper(host, UMB_TREE_CONTEXT);\r\n\t\tthis.pagination.setPageSize(this.#paging.take);\r\n\t\tthis.#consumeContexts();\r\n\r\n\t\t// listen for page changes on the pagination manager\r\n\t\tthis.pagination.addEventListener(UmbChangeEvent.TYPE, this.#onPageChange);\r\n\r\n\t\t/* TODO: revisit. This is a temp solution to notify the parent it needs to reload its children\r\n\t\tthere might be a better way to do this through a tree item parent context.\r\n\t\tIt does not look like there is a way to have a \"dynamic\" parent context that will stop when a\r\n\t\tspecific parent is reached (a tree item unique that matches the parentUnique of this item) */\r\n\t\tconst hostElement = this.getHostElement();\r\n\t\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n\t\t// @ts-ignore\r\n\t\thostElement.addEventListener('temp-reload-tree-item-parent', (event: CustomEvent) => {\r\n\t\t\tconst treeRoot = this.#treeRoot.getValue();\r\n\t\t\tconst unique = treeRoot?.unique;\r\n\r\n\t\t\tif (event.detail.unique === unique) {\r\n\t\t\t\tevent.stopPropagation();\r\n\t\t\t\tthis.loadTree();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// always load the tree root because we need the root entity to reload the entire tree\r\n\t\tthis.#loadTreeRoot();\r\n\t}\r\n\r\n\t// TODO: find a generic way to do this\r\n\t#checkIfInitialized() {\r\n\t\tif (this.#repository) {\r\n\t\t\tthis.#initialized = true;\r\n\t\t\tthis.#initResolver?.();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the manifest\r\n\t * @param {ManifestTree} manifest\r\n\t * @memberof UmbDefaultTreeContext\r\n\t */\r\n\tpublic set manifest(manifest: ManifestTree | undefined) {\r\n\t\tif (this.#manifest === manifest) return;\r\n\t\tthis.#manifest = manifest;\r\n\t\tthis.#observeRepository(this.#manifest?.meta.repositoryAlias);\r\n\t}\r\n\tpublic get manifest() {\r\n\t\treturn this.#manifest;\r\n\t}\r\n\r\n\t// TODO: getManifest, could be refactored to use the getter method [NL]\r\n\t/**\r\n\t * Returns the manifest.\r\n\t * @returns {ManifestTree}\r\n\t * @memberof UmbDefaultTreeContext\r\n\t */\r\n\tpublic getManifest() {\r\n\t\treturn this.#manifest;\r\n\t}\r\n\r\n\tpublic getRepository() {\r\n\t\treturn this.#repository;\r\n\t}\r\n\r\n\t/**\r\n\t * Loads the tree\r\n\t * @memberof UmbDefaultTreeContext\r\n\t */\r\n\t// TODO: debouncing the load tree method because multiple props can be set at the same time\r\n\t// that would trigger multiple loadTree calls. This is a temporary solution to avoid that.\r\n\tpublic loadTree = debounce(() => this.#debouncedLoadTree(), 100);\r\n\r\n\t/**\r\n\t * Reloads the tree\r\n\t * @memberof UmbDefaultTreeContext\r\n\t * @returns {void}\r\n\t */\r\n\tpublic loadMore = () => this.#debouncedLoadTree(true);\r\n\r\n\t#debouncedLoadTree(reload = false) {\r\n\t\tif (this.getStartNode()) {\r\n\t\t\tthis.#loadRootItems(reload);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst hideTreeRoot = this.getHideTreeRoot();\r\n\t\tif (hideTreeRoot) {\r\n\t\t\tthis.#loadRootItems(reload);\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\tasync #loadTreeRoot() {\r\n\t\tawait this.#init;\r\n\r\n\t\tconst { data } = await this.#repository!.requestTreeRoot();\r\n\r\n\t\tif (data) {\r\n\t\t\tthis.#treeRoot.setValue(data);\r\n\t\t\tthis.pagination.setTotalItems(1);\r\n\t\t}\r\n\t}\r\n\r\n\tasync #loadRootItems(loadMore = false) {\r\n\t\tawait this.#init;\r\n\r\n\t\tconst skip = loadMore ? this.#paging.skip : 0;\r\n\t\tconst take = loadMore ? this.#paging.take : this.pagination.getCurrentPageNumber() * this.#paging.take;\r\n\r\n\t\t// If we have a start node get children of that instead of the root\r\n\t\tconst startNode = this.getStartNode();\r\n\t\tconst foldersOnly = this.#foldersOnly.getValue();\r\n\t\tconst additionalArgs = this.#additionalRequestArgs.getValue();\r\n\r\n\t\tconst { data } = startNode?.unique\r\n\t\t\t? await this.#repository!.requestTreeItemsOf({\r\n\t\t\t\t\t...additionalArgs,\r\n\t\t\t\t\tparent: {\r\n\t\t\t\t\t\tunique: startNode.unique,\r\n\t\t\t\t\t\tentityType: startNode.entityType,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfoldersOnly,\r\n\t\t\t\t\tskip,\r\n\t\t\t\t\ttake,\r\n\t\t\t\t})\r\n\t\t\t: await this.#repository!.requestTreeRootItems({\r\n\t\t\t\t\t...additionalArgs,\r\n\t\t\t\t\tfoldersOnly,\r\n\t\t\t\t\tskip,\r\n\t\t\t\t\ttake,\r\n\t\t\t\t});\r\n\r\n\t\tif (data) {\r\n\t\t\tif (loadMore) {\r\n\t\t\t\tconst currentItems = this.#rootItems.getValue();\r\n\t\t\t\tthis.#rootItems.setValue([...currentItems, ...data.items]);\r\n\t\t\t} else {\r\n\t\t\t\tthis.#rootItems.setValue(data.items);\r\n\t\t\t}\r\n\r\n\t\t\tthis.pagination.setTotalItems(data.total);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the hideTreeRoot config\r\n\t * @param {boolean} hideTreeRoot - Whether to hide the tree root\r\n\t * @memberof UmbDefaultTreeContext\r\n\t */\r\n\tsetHideTreeRoot(hideTreeRoot: boolean) {\r\n\t\tthis.#hideTreeRoot.setValue(hideTreeRoot);\r\n\t\t// we need to reset the tree if this config changes\r\n\t\tthis.#resetTree();\r\n\t\tthis.loadTree();\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the hideTreeRoot config\r\n\t * @returns {boolean}\r\n\t * @memberof UmbDefaultTreeContext\r\n\t */\r\n\tgetHideTreeRoot() {\r\n\t\treturn this.#hideTreeRoot.getValue();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the startNode config\r\n\t * @param {UmbTreeStartNode} startNode\r\n\t * @memberof UmbDefaultTreeContext\r\n\t */\r\n\tsetStartNode(startNode: UmbTreeStartNode | undefined) {\r\n\t\tthis.#startNode.setValue(startNode);\r\n\t\t// we need to reset the tree if this config changes\r\n\t\tthis.#resetTree();\r\n\t\tthis.loadTree();\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the startNode config\r\n\t * @returns {UmbTreeStartNode} - The start node\r\n\t * @memberof UmbDefaultTreeContext\r\n\t */\r\n\tgetStartNode() {\r\n\t\treturn this.#startNode.getValue();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the foldersOnly config\r\n\t * @param {boolean} foldersOnly - Whether to show only folders\r\n\t * @memberof UmbDefaultTreeContext\r\n\t */\r\n\tsetFoldersOnly(foldersOnly: boolean) {\r\n\t\tthis.#foldersOnly.setValue(foldersOnly);\r\n\t\t// we need to reset the tree if this config changes\r\n\t\tthis.#resetTree();\r\n\t\tthis.loadTree();\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the foldersOnly config\r\n\t * @returns {boolean} - Whether to show only folders\r\n\t * @memberof UmbDefaultTreeContext\r\n\t */\r\n\tgetFoldersOnly() {\r\n\t\treturn this.#foldersOnly.getValue();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the requestArgs config and reloads the tree.\r\n\t * @param args\r\n\t */\r\n\tpublic updateAdditionalRequestArgs(args: Partial) {\r\n\t\tthis.#additionalRequestArgs.setValue({ ...this.#additionalRequestArgs.getValue(), ...args });\r\n\t\tthis.#resetTree();\r\n\t\tthis.loadTree();\r\n\t}\r\n\r\n\tpublic getAdditionalRequestArgs() {\r\n\t\treturn this.#additionalRequestArgs.getValue();\r\n\t}\r\n\r\n\t#resetTree() {\r\n\t\tthis.#treeRoot.setValue(undefined);\r\n\t\tthis.#rootItems.setValue([]);\r\n\t\tthis.pagination.clear();\r\n\t}\r\n\r\n\t#consumeContexts() {\r\n\t\tthis.consumeContext(UMB_ACTION_EVENT_CONTEXT, (instance) => {\r\n\t\t\tthis.#actionEventContext = instance;\r\n\r\n\t\t\tthis.#actionEventContext.removeEventListener(\r\n\t\t\t\tUmbRequestReloadChildrenOfEntityEvent.TYPE,\r\n\t\t\t\tthis.#onReloadRequest as EventListener,\r\n\t\t\t);\r\n\r\n\t\t\tthis.#actionEventContext.removeEventListener(\r\n\t\t\t\tUmbRequestReloadChildrenOfEntityEvent.TYPE,\r\n\t\t\t\tthis.#onReloadRequest as EventListener,\r\n\t\t\t);\r\n\r\n\t\t\tthis.#actionEventContext.addEventListener(\r\n\t\t\t\tUmbRequestReloadChildrenOfEntityEvent.TYPE,\r\n\t\t\t\tthis.#onReloadRequest as EventListener,\r\n\t\t\t);\r\n\r\n\t\t\tthis.#actionEventContext.addEventListener(\r\n\t\t\t\tUmbRequestReloadChildrenOfEntityEvent.TYPE,\r\n\t\t\t\tthis.#onReloadRequest as EventListener,\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\r\n\t#onPageChange = (event: UmbChangeEvent) => {\r\n\t\tconst target = event.target as UmbPaginationManager;\r\n\t\tthis.#paging.skip = target.getSkip();\r\n\t\tthis.loadMore();\r\n\t};\r\n\r\n\t#observeRepository(repositoryAlias?: string) {\r\n\t\tif (!repositoryAlias) throw new Error('Tree must have a repository alias.');\r\n\r\n\t\tnew UmbExtensionApiInitializer>>(\r\n\t\t\tthis,\r\n\t\t\tumbExtensionsRegistry,\r\n\t\t\trepositoryAlias,\r\n\t\t\t[this._host],\r\n\t\t\t(permitted, ctrl) => {\r\n\t\t\t\tthis.#repository = permitted ? ctrl.api : undefined;\r\n\t\t\t\tthis.#checkIfInitialized();\r\n\t\t\t},\r\n\t\t);\r\n\t}\r\n\r\n\t#onReloadRequest = (event: UmbEntityActionEvent) => {\r\n\t\t// Only handle root request here. Items are handled by the tree item context\r\n\t\tconst treeRoot = this.#treeRoot.getValue();\r\n\t\tif (treeRoot === undefined) return;\r\n\t\tif (event.getUnique() !== treeRoot.unique) return;\r\n\t\tif (event.getEntityType() !== treeRoot.entityType) return;\r\n\t\tthis.loadTree();\r\n\t};\r\n\r\n\toverride destroy(): void {\r\n\t\tthis.#actionEventContext?.removeEventListener(\r\n\t\t\tUmbRequestReloadChildrenOfEntityEvent.TYPE,\r\n\t\t\tthis.#onReloadRequest as EventListener,\r\n\t\t);\r\n\r\n\t\tthis.#actionEventContext?.removeEventListener(\r\n\t\t\tUmbRequestReloadChildrenOfEntityEvent.TYPE,\r\n\t\t\tthis.#onReloadRequest as EventListener,\r\n\t\t);\r\n\r\n\t\tsuper.destroy();\r\n\t}\r\n}\r\n\r\nexport { UmbDefaultTreeContext as api };\r\n"],"names":["UmbDefaultTreeContext","UmbContextBase","host","UMB_TREE_CONTEXT","#additionalRequestArgs","UmbObjectState","#treeRoot","#rootItems","UmbArrayState","x","UmbSelectionManager","UmbPaginationManager","#hideTreeRoot","UmbBooleanState","#startNode","#foldersOnly","#paging","#initialized","#init","resolve","#initResolver","debounce","#debouncedLoadTree","#onPageChange","event","target","#onReloadRequest","treeRoot","#consumeContexts","UmbChangeEvent","unique","#loadTreeRoot","#manifest","#repository","#actionEventContext","#checkIfInitialized","manifest","#observeRepository","reload","#loadRootItems","data","loadMore","skip","take","startNode","foldersOnly","additionalArgs","currentItems","hideTreeRoot","#resetTree","args","UMB_ACTION_EVENT_CONTEXT","instance","UmbRequestReloadChildrenOfEntityEvent","repositoryAlias","UmbExtensionApiInitializer","umbExtensionsRegistry","permitted","ctrl"],"mappings":"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"}