@apia/tree2-controller 4.0.45 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -276,6 +276,8 @@ declare class MobXTreeNode implements IMobXChildKeeper {
276
276
  */
277
277
  append(node: MobXTreeNode): void;
278
278
  create(props: TCreateNode): MobXTreeNode;
279
+ collapse(): void;
280
+ expand(): void;
279
281
  getChild(id: string): MobXTreeNode | undefined;
280
282
  getChildren(): MobXTreeNode[];
281
283
  getFirstChildren(omitFiltered?: boolean | undefined): MobXTreeNode | null;
package/dist/index.js CHANGED
@@ -214,6 +214,12 @@ class MobXTreeNode {
214
214
  create(props) {
215
215
  return MobXChildKeeper.create.call(this, props);
216
216
  }
217
+ collapse() {
218
+ this.state.isExpanded = false;
219
+ }
220
+ expand() {
221
+ this.state.isExpanded = true;
222
+ }
217
223
  getChild(id) {
218
224
  return MobXChildKeeper.getChild.call(this, id);
219
225
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/store/error.ts","../src/store/MobXChildKeeper/MobXChildKeeper.ts","../src/store/MobXTreeNode.ts","../src/store/traversal.ts","../src/store/MobXTreeEventsHandler/MobXTreeEventsHandler.ts","../src/store/MobXTree.ts"],"sourcesContent":["export class DuplicatedNodeInsertionError extends Error {}\r\n","import { v4 } from 'uuid';\r\nimport { MobXTree } from '../MobXTree';\r\nimport { MobXTreeNode } from '../MobXTreeNode';\r\nimport { DuplicatedNodeInsertionError } from '../error';\r\nimport { TCreateNode } from '../types';\r\nimport { IMobXChildKeeper } from './types';\r\n\r\nexport const MobXChildKeeper: IMobXChildKeeper = {\r\n append(this: MobXTreeNode | MobXTree, node: MobXTreeNode) {\r\n const existingNode = this.tree.indexedChildren.get(node.id);\r\n\r\n if (existingNode && existingNode !== node) {\r\n console.error(\r\n new DuplicatedNodeInsertionError('Duplicated node insertion'),\r\n );\r\n return;\r\n }\r\n\r\n if (existingNode?.parent && existingNode.parent !== this) {\r\n existingNode.parent.removeChild(node.id);\r\n }\r\n\r\n this.state.children.set(node.id, node);\r\n this.tree.indexedChildren.set(node.id, node);\r\n\r\n node.parent = this;\r\n },\r\n create(\r\n this: MobXTreeNode | MobXTree,\r\n { id, initialState, parentId = this.id }: TCreateNode,\r\n ): MobXTreeNode {\r\n let parentNode = parentId ? this.tree.getNodeById(parentId) : this;\r\n\r\n if (!parentNode) {\r\n console.warn('Cannot find parent node with id = ', parentId);\r\n parentNode = this;\r\n }\r\n\r\n const newNode = new MobXTreeNode(id ?? v4(), parentNode, initialState);\r\n parentNode.append(newNode);\r\n\r\n if (initialState?.isSelected) {\r\n this.tree.toggleNodeSelection(newNode, true);\r\n }\r\n\r\n return newNode;\r\n },\r\n getChild(this: MobXTreeNode | MobXTree, id) {\r\n return this.state.children.get(id);\r\n },\r\n getChildren(this: MobXTreeNode | MobXTree): MobXTreeNode[] {\r\n return [...this.state.children.values()];\r\n },\r\n getFirstChildren(\r\n this: MobXTreeNode | MobXTree,\r\n omitFiltered?: boolean | undefined,\r\n ): MobXTreeNode | null {\r\n return (\r\n this.getChildren().find((c) => !c.state.isFiltered || !omitFiltered) ||\r\n null\r\n );\r\n },\r\n getLastChildren(\r\n this: MobXTreeNode | MobXTree,\r\n omitFiltered?: boolean | undefined,\r\n ): MobXTreeNode | null {\r\n return (\r\n this.getChildren().findLast(\r\n (c) => !c.state.isFiltered || !omitFiltered,\r\n ) || null\r\n );\r\n },\r\n getFollowingSibling(\r\n this: MobXTreeNode | MobXTree,\r\n omitFiltered?: boolean | undefined,\r\n ): MobXTreeNode | null {\r\n const sibling = this.getSibling();\r\n const thisIndex = sibling.indexOf(this as MobXTreeNode);\r\n\r\n for (let i = thisIndex + 1; i < sibling.length; i++) {\r\n if (!omitFiltered || !sibling[i].state.isFiltered) {\r\n return sibling[i];\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n getPreviousSibling(\r\n this: MobXTreeNode | MobXTree,\r\n omitFiltered?: boolean | undefined,\r\n ): MobXTreeNode | null {\r\n const sibling = this.getSibling();\r\n const thisIndex = sibling.indexOf(this as MobXTreeNode);\r\n\r\n for (let i = thisIndex - 1; i >= 0; i--) {\r\n if (!omitFiltered || !sibling[i].state.isFiltered) {\r\n return sibling[i];\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n getSibling(this: MobXTreeNode | MobXTree): MobXTreeNode[] {\r\n return this.parent?.getChildren() ?? [];\r\n },\r\n removeAllChildren(this: MobXTreeNode | MobXTree): void {\r\n this.getChildren().forEach(this.removeChild.bind(this));\r\n },\r\n removeChild(\r\n this: MobXTreeNode | MobXTree,\r\n param: string | MobXTreeNode,\r\n ): void {\r\n const id = param instanceof MobXTreeNode ? param.id : param;\r\n\r\n this.state.children\r\n .get(id)\r\n ?.getChildren()\r\n .forEach((c) => c.remove());\r\n\r\n this.state.children.delete(id);\r\n this.tree.indexedChildren.delete(id);\r\n\r\n this.tree.reviewFocus();\r\n },\r\n};\r\n","import { action, observable, computed, makeObservable } from 'mobx';\r\nimport { MobXTree } from './MobXTree';\r\nimport { MobXTreeNodeState, TCreateNode } from './types';\r\nimport { IMobXChildKeeper } from './MobXChildKeeper/types';\r\nimport { MobXChildKeeper } from './MobXChildKeeper/MobXChildKeeper';\r\nimport { KeyboardEvent, MouseEvent } from 'react';\r\n\r\nexport class MobXTreeNode implements IMobXChildKeeper {\r\n state: MobXTreeNodeState = {\r\n 'aria-label': '',\r\n asyncNode: false,\r\n canCollapse: true,\r\n children: new Map(),\r\n className: '',\r\n color: '',\r\n hasLoaded: true,\r\n icon: null,\r\n iconSize: 'Md',\r\n isDisabled: false,\r\n isFiltered: false,\r\n isExpanded: false,\r\n isHidden: false,\r\n isLoading: false,\r\n isSelectable: true,\r\n label: '',\r\n labelIcons: [],\r\n labelRenderer: null,\r\n nodeProps: {},\r\n title: '',\r\n };\r\n\r\n constructor(\r\n public readonly id: string,\r\n public parent: MobXTreeNode | MobXTree | null,\r\n initialState?: Omit<Partial<MobXTreeNodeState>, 'children'>,\r\n ) {\r\n Object.assign(this.state, initialState);\r\n\r\n makeObservable(this, {\r\n isFocused: computed,\r\n isSelected: computed,\r\n showExpander: computed,\r\n\r\n create: action,\r\n handleClick: action,\r\n handleDoubleClick: action,\r\n handleExpanderClick: action,\r\n handleKeyDown: action,\r\n handleSelectionEvent: action,\r\n remove: action,\r\n removeAllChildren: action,\r\n removeChild: action,\r\n toggleExpansion: action,\r\n\r\n state: observable,\r\n });\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * GETTERS\r\n *\r\n *\r\n */\r\n get isFocused() {\r\n return this.tree.focusedNode === this;\r\n }\r\n\r\n get isSelected() {\r\n return this.tree.selectedItems.has(this);\r\n }\r\n\r\n get showExpander() {\r\n return (\r\n this.state.canCollapse !== false &&\r\n (this.state.asyncNode ||\r\n this.state.isLeaf === false ||\r\n (this.state.isLeaf !== true && this.state.children.size > 0))\r\n );\r\n }\r\n\r\n /**\r\n * Da acceso al árbol raíz de cada nodo\r\n */\r\n get tree(): MobXTree {\r\n let parent: MobXTreeNode | MobXTree = this;\r\n while (parent.parent !== null) {\r\n parent = parent.parent;\r\n }\r\n\r\n if (!(parent instanceof MobXTree))\r\n throw new Error('The node is not inside the tree');\r\n\r\n return parent;\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * OWN METHODS\r\n *\r\n *\r\n */\r\n async toggleExpansion(isExpanded = !this.state.isExpanded) {\r\n if (this.state.canCollapse === false) {\r\n return;\r\n }\r\n\r\n if (\r\n !this.state.isExpanded &&\r\n isExpanded &&\r\n (this.state.asyncNode ||\r\n (!this.state.hasLoaded &&\r\n this.tree.state.onLoadData &&\r\n !this.getChildren().length))\r\n ) {\r\n if (!this.state.asyncNode) {\r\n this.state.hasLoaded = true;\r\n }\r\n let cancelIsLoading = false;\r\n setTimeout(() => {\r\n if (!cancelIsLoading) {\r\n this.state.isLoading = true;\r\n }\r\n }, 50);\r\n\r\n if (this.tree.state.onLoadData) {\r\n try {\r\n await this.tree.state.onLoadData?.(this);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n this.state.isExpanded = true;\r\n cancelIsLoading = true;\r\n this.state.isLoading = false;\r\n } else {\r\n this.state.isExpanded = isExpanded;\r\n }\r\n }\r\n\r\n getNodeProps<T>() {\r\n return this.state.nodeProps as T;\r\n }\r\n\r\n remove() {\r\n this.parent?.removeChild(this.id);\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * MobXChildKeeper\r\n *\r\n *\r\n */\r\n append(node: MobXTreeNode) {\r\n return MobXChildKeeper.append.call(this, node);\r\n }\r\n create(props: TCreateNode): MobXTreeNode {\r\n return MobXChildKeeper.create.call(this, props);\r\n }\r\n getChild(id: string): MobXTreeNode | undefined {\r\n return MobXChildKeeper.getChild.call(this, id);\r\n }\r\n getChildren(): MobXTreeNode[] {\r\n return MobXChildKeeper.getChildren.call(this);\r\n }\r\n getFirstChildren(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getFirstChildren.call(this, omitFiltered);\r\n }\r\n getLastChildren(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getLastChildren.call(this, omitFiltered);\r\n }\r\n getFollowingSibling(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getFollowingSibling.call(this, omitFiltered);\r\n }\r\n getPreviousSibling(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getPreviousSibling.call(this, omitFiltered);\r\n }\r\n getSibling(): MobXTreeNode[] {\r\n return MobXChildKeeper.getSibling.call(this);\r\n }\r\n removeAllChildren(): void {\r\n return MobXChildKeeper.removeAllChildren.call(this);\r\n }\r\n removeChild(param: string | MobXTreeNode): void {\r\n return MobXChildKeeper.removeChild.call(this, param);\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * MobXTreeEventsHandler\r\n *\r\n *\r\n */\r\n handleClick(ev: MouseEvent) {\r\n return this.tree.handleNodeClick.call(this.tree, this, ev);\r\n }\r\n handleDoubleClick(ev: MouseEvent<Element, globalThis.MouseEvent>): void {\r\n return this.tree.handleNodeDoubleClick.call(this.tree, this, ev);\r\n }\r\n handleExpanderClick(ev: MouseEvent<Element, globalThis.MouseEvent>): void {\r\n return this.tree.handleNodeExpanderClick.call(this.tree, this, ev);\r\n }\r\n handleKeyDown(ev: KeyboardEvent<Element>): void {\r\n return this.tree.handleNodeKeyDown.call(this.tree, this, ev);\r\n }\r\n handleSelectionEvent(mods?: {\r\n ctrlKey?: boolean;\r\n shiftKey?: boolean;\r\n type: string;\r\n }) {\r\n return this.tree.handleSelectionEvent.call(this.tree, this, mods);\r\n }\r\n}\r\n","import { MobXTree } from './MobXTree';\r\nimport { MobXTreeNode } from './MobXTreeNode';\r\n\r\nexport function getNodePath(node: MobXTreeNode) {\r\n const path: (MobXTreeNode | MobXTree)[] = [node];\r\n let current: MobXTreeNode | MobXTree = node;\r\n while (current.parent) {\r\n current = current.parent;\r\n path.unshift(current);\r\n }\r\n return path;\r\n}\r\n\r\n/**\r\n * Resuelve el problema de saber cuál nodo va primero en el árbol para facilitar el algoritmo de búsqueda de nodos pertenecientes a la selección\r\n *\r\n * @returns [commonAncestor, firstSelected, lastSelected, indexAonCommon, indexBonCommon]\r\n */\r\nexport function findCommonAncestor(\r\n nodeA: MobXTreeNode,\r\n nodeB: MobXTreeNode,\r\n): [MobXTreeNode | MobXTree, MobXTreeNode, MobXTreeNode, number, number] {\r\n const pathA = getNodePath(nodeA);\r\n const pathB = getNodePath(nodeB);\r\n\r\n let commonAncestor: ReturnType<typeof getNodePath>[0] = pathA[0];\r\n\r\n let i = 0;\r\n for (i; i < Math.min(pathA.length, pathB.length); i++) {\r\n if (pathA[i] === pathB[i]) {\r\n commonAncestor = pathA[i];\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n const indexA = commonAncestor.getChildren().indexOf(pathA[i] as MobXTreeNode);\r\n const indexB = commonAncestor.getChildren().indexOf(pathB[i] as MobXTreeNode);\r\n\r\n return [\r\n commonAncestor,\r\n indexA < indexB ? nodeA : nodeB,\r\n indexA > indexB ? nodeA : nodeB,\r\n indexA < indexB ? indexA : indexB,\r\n indexA > indexB ? indexA : indexB,\r\n ];\r\n}\r\n\r\nexport function getAllDescendants(node: MobXTreeNode) {\r\n const descendants: MobXTreeNode[] = node.getChildren();\r\n\r\n descendants.forEach((current) => {\r\n descendants.push(...getAllDescendants(current));\r\n });\r\n\r\n return descendants;\r\n}\r\n\r\nexport type TTraverseTreeConf = {\r\n omitChildren?: boolean;\r\n /**\r\n * Elementos que no están a la vista porque su padre está colapsado\r\n */\r\n omitCollapsed?: boolean;\r\n omitFiltered?: boolean;\r\n};\r\n\r\n/**\r\n *\r\n * @param node\r\n * @returns\r\n */\r\nexport function getLastDescendant(\r\n node: MobXTreeNode,\r\n conf?: TTraverseTreeConf,\r\n): MobXTreeNode {\r\n if (conf?.omitChildren) {\r\n return node;\r\n }\r\n\r\n if (!conf?.omitCollapsed || node.state.isExpanded) {\r\n const lastChild = node.getLastChildren(conf?.omitFiltered);\r\n\r\n if (lastChild) {\r\n return getLastDescendant(lastChild, conf);\r\n }\r\n }\r\n\r\n return node;\r\n}\r\n\r\nexport function getPreviousNode(\r\n node: MobXTreeNode,\r\n conf?: TTraverseTreeConf,\r\n): MobXTreeNode | null {\r\n const previousSibling = node.getPreviousSibling(conf?.omitFiltered);\r\n if (previousSibling) {\r\n return getLastDescendant(previousSibling, conf);\r\n }\r\n if (node.parent instanceof MobXTreeNode) {\r\n return node.parent;\r\n }\r\n return null;\r\n}\r\n\r\nexport function getNextNode(\r\n node: MobXTreeNode,\r\n conf?: TTraverseTreeConf,\r\n): MobXTreeNode | null {\r\n if (\r\n !conf?.omitChildren &&\r\n (!conf?.omitCollapsed || node.state.isExpanded) &&\r\n node.getChildren().length > 0\r\n ) {\r\n const firstChild = node\r\n .getChildren()\r\n .find((c) => !conf?.omitFiltered || !c.state.isFiltered);\r\n\r\n if (firstChild) {\r\n return firstChild;\r\n }\r\n }\r\n\r\n const nextSibling = node.getFollowingSibling(conf?.omitFiltered);\r\n if (nextSibling) {\r\n return nextSibling;\r\n }\r\n\r\n if (node.parent instanceof MobXTreeNode) {\r\n return getNextNode(node.parent as MobXTreeNode, {\r\n ...conf,\r\n omitChildren: true,\r\n });\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function findAllNodesBetweenTwoNodes(\r\n nodeA: MobXTreeNode,\r\n nodeB: MobXTreeNode,\r\n) {\r\n const [, actualA, actualB] = findCommonAncestor(nodeA, nodeB);\r\n const selectedNodes = [actualA];\r\n\r\n if (nodeA !== nodeB) {\r\n let node = getNextNode(actualA);\r\n while (node !== null && node !== actualB) {\r\n selectedNodes.push(node);\r\n node = getNextNode(node);\r\n }\r\n\r\n if (node === null) {\r\n throw new Error('Error on findAllNodesBetweenTwoNodes');\r\n } else {\r\n selectedNodes.push(node); // actualB\r\n }\r\n }\r\n\r\n return selectedNodes;\r\n}\r\n","import { KeyboardEvent, MouseEvent } from 'react';\r\nimport { MobXTree } from '../MobXTree';\r\nimport { MobXTreeNode } from '../MobXTreeNode';\r\nimport {\r\n findAllNodesBetweenTwoNodes,\r\n getLastDescendant,\r\n getNextNode,\r\n getPreviousNode,\r\n} from '../traversal';\r\nimport { IMobXTreeEventsHandler } from './types';\r\n\r\nexport async function handleSelectionEvent(\r\n this: MobXTree,\r\n node: MobXTreeNode,\r\n mods?: {\r\n ctrlKey?: boolean;\r\n shiftKey?: boolean;\r\n type: string;\r\n },\r\n) {\r\n const focused = this.focusedNode || this.getFirstChildren(true) || node;\r\n\r\n let newSelection: Set<MobXTreeNode> = new Set();\r\n\r\n if (mods?.shiftKey) {\r\n newSelection = new Set<MobXTreeNode>(this.selectedItems);\r\n findAllNodesBetweenTwoNodes(focused, node).forEach((c) =>\r\n newSelection.add(c),\r\n );\r\n } else if (mods?.ctrlKey) {\r\n newSelection = this.selectedItems;\r\n\r\n if (newSelection.has(node)) {\r\n newSelection.delete(node);\r\n } else {\r\n newSelection.add(node);\r\n }\r\n } else {\r\n newSelection.add(node);\r\n }\r\n\r\n const res = await this.state.onSelect?.(new Set(newSelection));\r\n if (res !== false) {\r\n this.setSelectedNodes(new Set(newSelection));\r\n }\r\n\r\n this.focusNode(node);\r\n}\r\n\r\nexport function handleNodeDoubleClick(\r\n this: MobXTree,\r\n node: MobXTreeNode,\r\n ev: MouseEvent,\r\n) {\r\n this.state.onNodeDoubleClick?.(ev, node);\r\n}\r\n\r\nexport function handleNodeExpanderClick(\r\n this: MobXTree,\r\n node: MobXTreeNode,\r\n ev: MouseEvent,\r\n) {\r\n this.state.onNodeExpanderClick?.(ev, node);\r\n\r\n if (!ev.isDefaultPrevented()) {\r\n ev.stopPropagation();\r\n node.toggleExpansion();\r\n this.handleSelectionEvent(node, ev);\r\n }\r\n}\r\n\r\nexport function handleNodeClick(\r\n this: MobXTree,\r\n node: MobXTreeNode,\r\n ev: MouseEvent,\r\n) {\r\n node.state.onClick?.(ev);\r\n this.state.onNodeClick?.(ev, node);\r\n\r\n if (!ev.isDefaultPrevented()) {\r\n ev.preventDefault();\r\n\r\n if (this.state.toggleNodesOnLabelClick !== false) {\r\n node.toggleExpansion();\r\n }\r\n\r\n this.handleSelectionEvent(node, ev);\r\n }\r\n}\r\n\r\nexport function handleNodeKeyDown(\r\n this: MobXTree,\r\n node: MobXTreeNode,\r\n ev: KeyboardEvent,\r\n) {\r\n node.state.onKeyDown?.(ev);\r\n if (ev.key === 'Enter') {\r\n node.state.onClick?.(ev as any);\r\n }\r\n this.state.onNodeKeyDown?.(ev, node);\r\n\r\n const assignSelection = (\r\n newFocusedNode: MobXTreeNode,\r\n innerEvent: KeyboardEvent = ev,\r\n ) => {\r\n ev.preventDefault();\r\n this.handleSelectionEvent(newFocusedNode, innerEvent);\r\n };\r\n\r\n if (!ev.isDefaultPrevented()) {\r\n switch (ev.code) {\r\n case 'ArrowDown': {\r\n const nextFocused = getNextNode(node, {\r\n omitFiltered: true,\r\n omitCollapsed: true,\r\n });\r\n\r\n if (nextFocused) {\r\n assignSelection(nextFocused);\r\n }\r\n break;\r\n }\r\n case 'ArrowLeft':\r\n if (!node.state.isDisabled) {\r\n if (!node.state.isLeaf && node.state.isExpanded) {\r\n node.toggleExpansion(false);\r\n } else if (node.parent instanceof MobXTreeNode) {\r\n assignSelection(node.parent);\r\n }\r\n }\r\n break;\r\n case 'ArrowRight':\r\n if (!node.state.isDisabled && !node.state.isLeaf) {\r\n if (!node.state.isExpanded) {\r\n node.toggleExpansion(true);\r\n } else {\r\n const child = node.getFirstChildren(true);\r\n if (child) {\r\n assignSelection(child);\r\n }\r\n }\r\n }\r\n break;\r\n case 'ArrowUp': {\r\n const previousFocused = getPreviousNode(node, {\r\n omitFiltered: true,\r\n omitCollapsed: true,\r\n });\r\n\r\n if (previousFocused) {\r\n assignSelection(previousFocused);\r\n }\r\n break;\r\n }\r\n case 'End': {\r\n const lastChild = this.getLastChildren(true);\r\n\r\n if (lastChild) {\r\n const nextFocused = getLastDescendant(lastChild, {\r\n omitCollapsed: true,\r\n omitFiltered: true,\r\n });\r\n\r\n assignSelection(nextFocused);\r\n }\r\n break;\r\n }\r\n case 'Home': {\r\n const nextFocused = this.getFirstChildren(true);\r\n\r\n if (nextFocused) {\r\n assignSelection(nextFocused);\r\n }\r\n break;\r\n }\r\n case 'PageDown': {\r\n ev.preventDefault();\r\n\r\n let nextFocused = getNextNode(node, {\r\n omitFiltered: true,\r\n omitCollapsed: true,\r\n });\r\n\r\n if (nextFocused) {\r\n for (let i = 0; i <= 10; i++) {\r\n const newPrevious = getNextNode(nextFocused, {\r\n omitFiltered: true,\r\n omitCollapsed: true,\r\n });\r\n if (newPrevious) {\r\n nextFocused = newPrevious;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n assignSelection(nextFocused);\r\n }\r\n break;\r\n }\r\n case 'PageUp': {\r\n ev.preventDefault();\r\n\r\n let previousFocused = getPreviousNode(node, {\r\n omitFiltered: true,\r\n omitCollapsed: true,\r\n });\r\n\r\n if (previousFocused) {\r\n for (let i = 0; i <= 10; i++) {\r\n const newPrevious = getPreviousNode(previousFocused, {\r\n omitFiltered: true,\r\n omitCollapsed: true,\r\n });\r\n if (newPrevious) {\r\n previousFocused = newPrevious;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n assignSelection(previousFocused);\r\n }\r\n break;\r\n }\r\n case 'Space': {\r\n assignSelection(\r\n this.focusedNode || this.getFirstChildren(true) || node,\r\n Object.assign(ev, { type: 'click' }) as any,\r\n );\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const MobXTreeEventsHandler: IMobXTreeEventsHandler = {\r\n handleNodeClick,\r\n handleNodeDoubleClick,\r\n handleNodeExpanderClick,\r\n handleNodeKeyDown,\r\n handleSelectionEvent,\r\n};\r\n","import { action, makeObservable, observable, reaction } from 'mobx';\r\nimport type { MobXTreeNodeState, MobXTreeState, TCreateNode } from './types';\r\nimport { MobXTreeNode } from './MobXTreeNode';\r\nimport { v4 } from 'uuid';\r\nimport { MobXTreeEventsHandler } from './MobXTreeEventsHandler/MobXTreeEventsHandler';\r\nimport { IMobXChildKeeper } from './MobXChildKeeper/types';\r\nimport { MobXChildKeeper } from './MobXChildKeeper/MobXChildKeeper';\r\nimport { IMobXTreeEventsHandler } from './MobXTreeEventsHandler/types';\r\nimport { MouseEvent, KeyboardEvent } from 'react';\r\n\r\nexport class MobXTree implements IMobXChildKeeper, IMobXTreeEventsHandler {\r\n focusedNode: MobXTreeNode | null = null;\r\n get id() {\r\n return this.state.id;\r\n }\r\n indexedChildren: Map<string, MobXTreeNode> = new Map();\r\n public readonly parent = null;\r\n get tree() {\r\n return this;\r\n }\r\n selectedItems: Set<MobXTreeNode> = new Set();\r\n state: MobXTreeState = {\r\n 'aria-label': '',\r\n children: new Map(),\r\n className: '',\r\n disableSelection: false,\r\n filterString: '',\r\n hideEmptyFolders: false,\r\n id: v4(),\r\n isLoading: false,\r\n isMultiple: true,\r\n selectionMode: 'explicit',\r\n title: '',\r\n toggleNodesOnLabelClick: true,\r\n variant: '',\r\n };\r\n\r\n constructor(initialTreeState?: Omit<Partial<MobXTreeState>, 'children'>) {\r\n Object.assign(this.state, initialTreeState ?? {});\r\n\r\n makeObservable(this, {\r\n focusedNode: observable,\r\n indexedChildren: observable,\r\n selectedItems: observable,\r\n state: observable,\r\n\r\n append: action,\r\n clearSelection: action,\r\n create: action,\r\n focusNode: action,\r\n handleNodeClick: action,\r\n handleNodeExpanderClick: action,\r\n handleNodeKeyDown: action,\r\n handleSelectionEvent: action,\r\n removeAllChildren: action,\r\n removeChild: action,\r\n reviewFocus: action,\r\n setSelectedNodes: action,\r\n toggleNodeSelection: action,\r\n });\r\n\r\n reaction(\r\n () => this.state.toggleNodesOnLabelClick,\r\n () => {\r\n console.log(this.state.toggleNodesOnLabelClick);\r\n },\r\n );\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * OWN METHODS\r\n *\r\n *\r\n */\r\n clearSelection() {\r\n [...this.selectedItems.values()].forEach((c) =>\r\n this.toggleNodeSelection(c, false),\r\n );\r\n }\r\n\r\n focusNode(node: MobXTreeNode) {\r\n const storedNode = this.getNodeById(node.id);\r\n if (!node.state.isDisabled && storedNode instanceof MobXTreeNode) {\r\n this.focusedNode = storedNode;\r\n }\r\n }\r\n\r\n /**\r\n * Devuelve el nodo con el id especificado o undefined si no existe.\r\n */\r\n getNodeById(id: string) {\r\n if (id === 'root' || id === this.id) return this;\r\n\r\n return this.indexedChildren.get(id);\r\n }\r\n\r\n /**\r\n * Actúa si el nodo que está en foco ya no existe en el árbol y restaura el foco en el primer nodo visible.\r\n */\r\n reviewFocus() {\r\n if (!this.getNodeById(this.focusedNode?.id ?? '')) {\r\n const firstChild = this.getFirstChildren(true);\r\n if (firstChild) {\r\n this.focusNode(firstChild);\r\n }\r\n }\r\n }\r\n\r\n setSelectedNodes(newSelection: Set<string>): void;\r\n setSelectedNodes(newSelection: Set<MobXTreeNode>): void;\r\n setSelectedNodes(newSelection: Set<string> | Set<MobXTreeNode>): void {\r\n this.clearSelection();\r\n newSelection.forEach((value) => {\r\n const node: MobXTreeNode = (\r\n typeof value === 'string' ? this.getNodeById(value) : value\r\n ) as MobXTreeNode;\r\n\r\n if (node) {\r\n this.toggleNodeSelection(node, true);\r\n }\r\n });\r\n }\r\n\r\n toggleNodeSelection(node: MobXTreeNode, isSelected?: boolean) {\r\n if (\r\n !this.state.disableSelection &&\r\n node.state.isSelectable &&\r\n !node.state.isDisabled\r\n ) {\r\n const actualSelected = isSelected ?? !node.isSelected;\r\n\r\n if (actualSelected) {\r\n if (!this.state.isMultiple) {\r\n this.selectedItems.clear();\r\n }\r\n this.selectedItems.add(node);\r\n } else {\r\n this.selectedItems.delete(node);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * MobXChildKeeper\r\n *\r\n *\r\n */\r\n append(node: MobXTreeNode) {\r\n MobXChildKeeper.append.call(this, node);\r\n }\r\n create(props: TCreateNode): MobXTreeNode {\r\n return MobXChildKeeper.create.call(this, props);\r\n }\r\n getChild(id: string): MobXTreeNode | undefined {\r\n return MobXChildKeeper.getChild.call(this, id);\r\n }\r\n getChildren(): MobXTreeNode[] {\r\n return MobXChildKeeper.getChildren.call(this);\r\n }\r\n getFirstChildren(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getFirstChildren.call(this, omitFiltered);\r\n }\r\n getLastChildren(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getLastChildren.call(this, omitFiltered);\r\n }\r\n getFollowingSibling(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getFollowingSibling.call(this, omitFiltered);\r\n }\r\n getPreviousSibling(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getPreviousSibling.call(this, omitFiltered);\r\n }\r\n getSibling(): MobXTreeNode[] {\r\n return MobXChildKeeper.getSibling.call(this);\r\n }\r\n removeAllChildren(): void {\r\n return MobXChildKeeper.removeAllChildren.call(this);\r\n }\r\n removeChild(param: string | MobXTreeNode): void {\r\n return MobXChildKeeper.removeChild.call(this, param);\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * MobXTreeEventsHandler\r\n *\r\n *\r\n */\r\n handleNodeClick(node: MobXTreeNode, ev: MouseEvent) {\r\n return MobXTreeEventsHandler.handleNodeClick.call(this, node, ev);\r\n }\r\n handleNodeDoubleClick(\r\n node: MobXTreeNode,\r\n ev: MouseEvent<Element, globalThis.MouseEvent>,\r\n ): void {\r\n return MobXTreeEventsHandler.handleNodeDoubleClick.call(this, node, ev);\r\n }\r\n handleNodeExpanderClick(\r\n node: MobXTreeNode,\r\n ev: MouseEvent<Element, globalThis.MouseEvent>,\r\n ): void {\r\n return MobXTreeEventsHandler.handleNodeExpanderClick.call(this, node, ev);\r\n }\r\n handleNodeKeyDown(node: MobXTreeNode, ev: KeyboardEvent<Element>): void {\r\n return MobXTreeEventsHandler.handleNodeKeyDown.call(this, node, ev);\r\n }\r\n handleSelectionEvent(\r\n node: MobXTreeNode,\r\n mods?: { ctrlKey?: boolean; shiftKey?: boolean; type: string },\r\n ) {\r\n return MobXTreeEventsHandler.handleSelectionEvent.call(this, node, mods);\r\n }\r\n\r\n public static fromNodes(nodes: MobxTreeStaticBuilderNode[]) {\r\n const controller = new MobXTree({});\r\n\r\n nodes.forEach((current) => {\r\n const parent = current.parentId\r\n ? controller.getNodeById(current.parentId)\r\n : controller;\r\n\r\n if (parent) {\r\n parent.create(current);\r\n }\r\n });\r\n\r\n return controller;\r\n }\r\n}\r\n\r\nexport type MobxTreeStaticBuilderNode = Omit<\r\n Partial<MobXTreeNodeState>,\r\n 'children'\r\n> & {\r\n parentId?: string;\r\n id: string;\r\n};\r\n"],"names":["__publicField"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/store/error.ts","../src/store/MobXChildKeeper/MobXChildKeeper.ts","../src/store/MobXTreeNode.ts","../src/store/traversal.ts","../src/store/MobXTreeEventsHandler/MobXTreeEventsHandler.ts","../src/store/MobXTree.ts"],"sourcesContent":["export class DuplicatedNodeInsertionError extends Error {}\r\n","import { v4 } from 'uuid';\r\nimport { MobXTree } from '../MobXTree';\r\nimport { MobXTreeNode } from '../MobXTreeNode';\r\nimport { DuplicatedNodeInsertionError } from '../error';\r\nimport { TCreateNode } from '../types';\r\nimport { IMobXChildKeeper } from './types';\r\n\r\nexport const MobXChildKeeper: IMobXChildKeeper = {\r\n append(this: MobXTreeNode | MobXTree, node: MobXTreeNode) {\r\n const existingNode = this.tree.indexedChildren.get(node.id);\r\n\r\n if (existingNode && existingNode !== node) {\r\n console.error(\r\n new DuplicatedNodeInsertionError('Duplicated node insertion'),\r\n );\r\n return;\r\n }\r\n\r\n if (existingNode?.parent && existingNode.parent !== this) {\r\n existingNode.parent.removeChild(node.id);\r\n }\r\n\r\n this.state.children.set(node.id, node);\r\n this.tree.indexedChildren.set(node.id, node);\r\n\r\n node.parent = this;\r\n },\r\n create(\r\n this: MobXTreeNode | MobXTree,\r\n { id, initialState, parentId = this.id }: TCreateNode,\r\n ): MobXTreeNode {\r\n let parentNode = parentId ? this.tree.getNodeById(parentId) : this;\r\n\r\n if (!parentNode) {\r\n console.warn('Cannot find parent node with id = ', parentId);\r\n parentNode = this;\r\n }\r\n\r\n const newNode = new MobXTreeNode(id ?? v4(), parentNode, initialState);\r\n parentNode.append(newNode);\r\n\r\n if (initialState?.isSelected) {\r\n this.tree.toggleNodeSelection(newNode, true);\r\n }\r\n\r\n return newNode;\r\n },\r\n getChild(this: MobXTreeNode | MobXTree, id) {\r\n return this.state.children.get(id);\r\n },\r\n getChildren(this: MobXTreeNode | MobXTree): MobXTreeNode[] {\r\n return [...this.state.children.values()];\r\n },\r\n getFirstChildren(\r\n this: MobXTreeNode | MobXTree,\r\n omitFiltered?: boolean | undefined,\r\n ): MobXTreeNode | null {\r\n return (\r\n this.getChildren().find((c) => !c.state.isFiltered || !omitFiltered) ||\r\n null\r\n );\r\n },\r\n getLastChildren(\r\n this: MobXTreeNode | MobXTree,\r\n omitFiltered?: boolean | undefined,\r\n ): MobXTreeNode | null {\r\n return (\r\n this.getChildren().findLast(\r\n (c) => !c.state.isFiltered || !omitFiltered,\r\n ) || null\r\n );\r\n },\r\n getFollowingSibling(\r\n this: MobXTreeNode | MobXTree,\r\n omitFiltered?: boolean | undefined,\r\n ): MobXTreeNode | null {\r\n const sibling = this.getSibling();\r\n const thisIndex = sibling.indexOf(this as MobXTreeNode);\r\n\r\n for (let i = thisIndex + 1; i < sibling.length; i++) {\r\n if (!omitFiltered || !sibling[i].state.isFiltered) {\r\n return sibling[i];\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n getPreviousSibling(\r\n this: MobXTreeNode | MobXTree,\r\n omitFiltered?: boolean | undefined,\r\n ): MobXTreeNode | null {\r\n const sibling = this.getSibling();\r\n const thisIndex = sibling.indexOf(this as MobXTreeNode);\r\n\r\n for (let i = thisIndex - 1; i >= 0; i--) {\r\n if (!omitFiltered || !sibling[i].state.isFiltered) {\r\n return sibling[i];\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n getSibling(this: MobXTreeNode | MobXTree): MobXTreeNode[] {\r\n return this.parent?.getChildren() ?? [];\r\n },\r\n removeAllChildren(this: MobXTreeNode | MobXTree): void {\r\n this.getChildren().forEach(this.removeChild.bind(this));\r\n },\r\n removeChild(\r\n this: MobXTreeNode | MobXTree,\r\n param: string | MobXTreeNode,\r\n ): void {\r\n const id = param instanceof MobXTreeNode ? param.id : param;\r\n\r\n this.state.children\r\n .get(id)\r\n ?.getChildren()\r\n .forEach((c) => c.remove());\r\n\r\n this.state.children.delete(id);\r\n this.tree.indexedChildren.delete(id);\r\n\r\n this.tree.reviewFocus();\r\n },\r\n};\r\n","import { action, observable, computed, makeObservable } from 'mobx';\r\nimport { MobXTree } from './MobXTree';\r\nimport { MobXTreeNodeState, TCreateNode } from './types';\r\nimport { IMobXChildKeeper } from './MobXChildKeeper/types';\r\nimport { MobXChildKeeper } from './MobXChildKeeper/MobXChildKeeper';\r\nimport { KeyboardEvent, MouseEvent } from 'react';\r\n\r\nexport class MobXTreeNode implements IMobXChildKeeper {\r\n state: MobXTreeNodeState = {\r\n 'aria-label': '',\r\n asyncNode: false,\r\n canCollapse: true,\r\n children: new Map(),\r\n className: '',\r\n color: '',\r\n hasLoaded: true,\r\n icon: null,\r\n iconSize: 'Md',\r\n isDisabled: false,\r\n isFiltered: false,\r\n isExpanded: false,\r\n isHidden: false,\r\n isLoading: false,\r\n isSelectable: true,\r\n label: '',\r\n labelIcons: [],\r\n labelRenderer: null,\r\n nodeProps: {},\r\n title: '',\r\n };\r\n\r\n constructor(\r\n public readonly id: string,\r\n public parent: MobXTreeNode | MobXTree | null,\r\n initialState?: Omit<Partial<MobXTreeNodeState>, 'children'>,\r\n ) {\r\n Object.assign(this.state, initialState);\r\n\r\n makeObservable(this, {\r\n isFocused: computed,\r\n isSelected: computed,\r\n showExpander: computed,\r\n\r\n create: action,\r\n handleClick: action,\r\n handleDoubleClick: action,\r\n handleExpanderClick: action,\r\n handleKeyDown: action,\r\n handleSelectionEvent: action,\r\n remove: action,\r\n removeAllChildren: action,\r\n removeChild: action,\r\n toggleExpansion: action,\r\n\r\n state: observable,\r\n });\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * GETTERS\r\n *\r\n *\r\n */\r\n get isFocused() {\r\n return this.tree.focusedNode === this;\r\n }\r\n\r\n get isSelected() {\r\n return this.tree.selectedItems.has(this);\r\n }\r\n\r\n get showExpander() {\r\n return (\r\n this.state.canCollapse !== false &&\r\n (this.state.asyncNode ||\r\n this.state.isLeaf === false ||\r\n (this.state.isLeaf !== true && this.state.children.size > 0))\r\n );\r\n }\r\n\r\n /**\r\n * Da acceso al árbol raíz de cada nodo\r\n */\r\n get tree(): MobXTree {\r\n let parent: MobXTreeNode | MobXTree = this;\r\n while (parent.parent !== null) {\r\n parent = parent.parent;\r\n }\r\n\r\n if (!(parent instanceof MobXTree))\r\n throw new Error('The node is not inside the tree');\r\n\r\n return parent;\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * OWN METHODS\r\n *\r\n *\r\n */\r\n async toggleExpansion(isExpanded = !this.state.isExpanded) {\r\n if (this.state.canCollapse === false) {\r\n return;\r\n }\r\n\r\n if (\r\n !this.state.isExpanded &&\r\n isExpanded &&\r\n (this.state.asyncNode ||\r\n (!this.state.hasLoaded &&\r\n this.tree.state.onLoadData &&\r\n !this.getChildren().length))\r\n ) {\r\n if (!this.state.asyncNode) {\r\n this.state.hasLoaded = true;\r\n }\r\n let cancelIsLoading = false;\r\n setTimeout(() => {\r\n if (!cancelIsLoading) {\r\n this.state.isLoading = true;\r\n }\r\n }, 50);\r\n\r\n if (this.tree.state.onLoadData) {\r\n try {\r\n await this.tree.state.onLoadData?.(this);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n this.state.isExpanded = true;\r\n cancelIsLoading = true;\r\n this.state.isLoading = false;\r\n } else {\r\n this.state.isExpanded = isExpanded;\r\n }\r\n }\r\n\r\n getNodeProps<T>() {\r\n return this.state.nodeProps as T;\r\n }\r\n\r\n remove() {\r\n this.parent?.removeChild(this.id);\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * MobXChildKeeper\r\n *\r\n *\r\n */\r\n append(node: MobXTreeNode) {\r\n return MobXChildKeeper.append.call(this, node);\r\n }\r\n create(props: TCreateNode): MobXTreeNode {\r\n return MobXChildKeeper.create.call(this, props);\r\n }\r\n collapse() {\r\n this.state.isExpanded = false;\r\n }\r\n expand() {\r\n this.state.isExpanded = true;\r\n }\r\n getChild(id: string): MobXTreeNode | undefined {\r\n return MobXChildKeeper.getChild.call(this, id);\r\n }\r\n getChildren(): MobXTreeNode[] {\r\n return MobXChildKeeper.getChildren.call(this);\r\n }\r\n getFirstChildren(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getFirstChildren.call(this, omitFiltered);\r\n }\r\n getLastChildren(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getLastChildren.call(this, omitFiltered);\r\n }\r\n getFollowingSibling(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getFollowingSibling.call(this, omitFiltered);\r\n }\r\n getPreviousSibling(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getPreviousSibling.call(this, omitFiltered);\r\n }\r\n getSibling(): MobXTreeNode[] {\r\n return MobXChildKeeper.getSibling.call(this);\r\n }\r\n removeAllChildren(): void {\r\n return MobXChildKeeper.removeAllChildren.call(this);\r\n }\r\n removeChild(param: string | MobXTreeNode): void {\r\n return MobXChildKeeper.removeChild.call(this, param);\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * MobXTreeEventsHandler\r\n *\r\n *\r\n */\r\n handleClick(ev: MouseEvent) {\r\n return this.tree.handleNodeClick.call(this.tree, this, ev);\r\n }\r\n handleDoubleClick(ev: MouseEvent<Element, globalThis.MouseEvent>): void {\r\n return this.tree.handleNodeDoubleClick.call(this.tree, this, ev);\r\n }\r\n handleExpanderClick(ev: MouseEvent<Element, globalThis.MouseEvent>): void {\r\n return this.tree.handleNodeExpanderClick.call(this.tree, this, ev);\r\n }\r\n handleKeyDown(ev: KeyboardEvent<Element>): void {\r\n return this.tree.handleNodeKeyDown.call(this.tree, this, ev);\r\n }\r\n handleSelectionEvent(mods?: {\r\n ctrlKey?: boolean;\r\n shiftKey?: boolean;\r\n type: string;\r\n }) {\r\n return this.tree.handleSelectionEvent.call(this.tree, this, mods);\r\n }\r\n}\r\n","import { MobXTree } from './MobXTree';\r\nimport { MobXTreeNode } from './MobXTreeNode';\r\n\r\nexport function getNodePath(node: MobXTreeNode) {\r\n const path: (MobXTreeNode | MobXTree)[] = [node];\r\n let current: MobXTreeNode | MobXTree = node;\r\n while (current.parent) {\r\n current = current.parent;\r\n path.unshift(current);\r\n }\r\n return path;\r\n}\r\n\r\n/**\r\n * Resuelve el problema de saber cuál nodo va primero en el árbol para facilitar el algoritmo de búsqueda de nodos pertenecientes a la selección\r\n *\r\n * @returns [commonAncestor, firstSelected, lastSelected, indexAonCommon, indexBonCommon]\r\n */\r\nexport function findCommonAncestor(\r\n nodeA: MobXTreeNode,\r\n nodeB: MobXTreeNode,\r\n): [MobXTreeNode | MobXTree, MobXTreeNode, MobXTreeNode, number, number] {\r\n const pathA = getNodePath(nodeA);\r\n const pathB = getNodePath(nodeB);\r\n\r\n let commonAncestor: ReturnType<typeof getNodePath>[0] = pathA[0];\r\n\r\n let i = 0;\r\n for (i; i < Math.min(pathA.length, pathB.length); i++) {\r\n if (pathA[i] === pathB[i]) {\r\n commonAncestor = pathA[i];\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n const indexA = commonAncestor.getChildren().indexOf(pathA[i] as MobXTreeNode);\r\n const indexB = commonAncestor.getChildren().indexOf(pathB[i] as MobXTreeNode);\r\n\r\n return [\r\n commonAncestor,\r\n indexA < indexB ? nodeA : nodeB,\r\n indexA > indexB ? nodeA : nodeB,\r\n indexA < indexB ? indexA : indexB,\r\n indexA > indexB ? indexA : indexB,\r\n ];\r\n}\r\n\r\nexport function getAllDescendants(node: MobXTreeNode) {\r\n const descendants: MobXTreeNode[] = node.getChildren();\r\n\r\n descendants.forEach((current) => {\r\n descendants.push(...getAllDescendants(current));\r\n });\r\n\r\n return descendants;\r\n}\r\n\r\nexport type TTraverseTreeConf = {\r\n omitChildren?: boolean;\r\n /**\r\n * Elementos que no están a la vista porque su padre está colapsado\r\n */\r\n omitCollapsed?: boolean;\r\n omitFiltered?: boolean;\r\n};\r\n\r\n/**\r\n *\r\n * @param node\r\n * @returns\r\n */\r\nexport function getLastDescendant(\r\n node: MobXTreeNode,\r\n conf?: TTraverseTreeConf,\r\n): MobXTreeNode {\r\n if (conf?.omitChildren) {\r\n return node;\r\n }\r\n\r\n if (!conf?.omitCollapsed || node.state.isExpanded) {\r\n const lastChild = node.getLastChildren(conf?.omitFiltered);\r\n\r\n if (lastChild) {\r\n return getLastDescendant(lastChild, conf);\r\n }\r\n }\r\n\r\n return node;\r\n}\r\n\r\nexport function getPreviousNode(\r\n node: MobXTreeNode,\r\n conf?: TTraverseTreeConf,\r\n): MobXTreeNode | null {\r\n const previousSibling = node.getPreviousSibling(conf?.omitFiltered);\r\n if (previousSibling) {\r\n return getLastDescendant(previousSibling, conf);\r\n }\r\n if (node.parent instanceof MobXTreeNode) {\r\n return node.parent;\r\n }\r\n return null;\r\n}\r\n\r\nexport function getNextNode(\r\n node: MobXTreeNode,\r\n conf?: TTraverseTreeConf,\r\n): MobXTreeNode | null {\r\n if (\r\n !conf?.omitChildren &&\r\n (!conf?.omitCollapsed || node.state.isExpanded) &&\r\n node.getChildren().length > 0\r\n ) {\r\n const firstChild = node\r\n .getChildren()\r\n .find((c) => !conf?.omitFiltered || !c.state.isFiltered);\r\n\r\n if (firstChild) {\r\n return firstChild;\r\n }\r\n }\r\n\r\n const nextSibling = node.getFollowingSibling(conf?.omitFiltered);\r\n if (nextSibling) {\r\n return nextSibling;\r\n }\r\n\r\n if (node.parent instanceof MobXTreeNode) {\r\n return getNextNode(node.parent as MobXTreeNode, {\r\n ...conf,\r\n omitChildren: true,\r\n });\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function findAllNodesBetweenTwoNodes(\r\n nodeA: MobXTreeNode,\r\n nodeB: MobXTreeNode,\r\n) {\r\n const [, actualA, actualB] = findCommonAncestor(nodeA, nodeB);\r\n const selectedNodes = [actualA];\r\n\r\n if (nodeA !== nodeB) {\r\n let node = getNextNode(actualA);\r\n while (node !== null && node !== actualB) {\r\n selectedNodes.push(node);\r\n node = getNextNode(node);\r\n }\r\n\r\n if (node === null) {\r\n throw new Error('Error on findAllNodesBetweenTwoNodes');\r\n } else {\r\n selectedNodes.push(node); // actualB\r\n }\r\n }\r\n\r\n return selectedNodes;\r\n}\r\n","import { KeyboardEvent, MouseEvent } from 'react';\r\nimport { MobXTree } from '../MobXTree';\r\nimport { MobXTreeNode } from '../MobXTreeNode';\r\nimport {\r\n findAllNodesBetweenTwoNodes,\r\n getLastDescendant,\r\n getNextNode,\r\n getPreviousNode,\r\n} from '../traversal';\r\nimport { IMobXTreeEventsHandler } from './types';\r\n\r\nexport async function handleSelectionEvent(\r\n this: MobXTree,\r\n node: MobXTreeNode,\r\n mods?: {\r\n ctrlKey?: boolean;\r\n shiftKey?: boolean;\r\n type: string;\r\n },\r\n) {\r\n const focused = this.focusedNode || this.getFirstChildren(true) || node;\r\n\r\n let newSelection: Set<MobXTreeNode> = new Set();\r\n\r\n if (mods?.shiftKey) {\r\n newSelection = new Set<MobXTreeNode>(this.selectedItems);\r\n findAllNodesBetweenTwoNodes(focused, node).forEach((c) =>\r\n newSelection.add(c),\r\n );\r\n } else if (mods?.ctrlKey) {\r\n newSelection = this.selectedItems;\r\n\r\n if (newSelection.has(node)) {\r\n newSelection.delete(node);\r\n } else {\r\n newSelection.add(node);\r\n }\r\n } else {\r\n newSelection.add(node);\r\n }\r\n\r\n const res = await this.state.onSelect?.(new Set(newSelection));\r\n if (res !== false) {\r\n this.setSelectedNodes(new Set(newSelection));\r\n }\r\n\r\n this.focusNode(node);\r\n}\r\n\r\nexport function handleNodeDoubleClick(\r\n this: MobXTree,\r\n node: MobXTreeNode,\r\n ev: MouseEvent,\r\n) {\r\n this.state.onNodeDoubleClick?.(ev, node);\r\n}\r\n\r\nexport function handleNodeExpanderClick(\r\n this: MobXTree,\r\n node: MobXTreeNode,\r\n ev: MouseEvent,\r\n) {\r\n this.state.onNodeExpanderClick?.(ev, node);\r\n\r\n if (!ev.isDefaultPrevented()) {\r\n ev.stopPropagation();\r\n node.toggleExpansion();\r\n this.handleSelectionEvent(node, ev);\r\n }\r\n}\r\n\r\nexport function handleNodeClick(\r\n this: MobXTree,\r\n node: MobXTreeNode,\r\n ev: MouseEvent,\r\n) {\r\n node.state.onClick?.(ev);\r\n this.state.onNodeClick?.(ev, node);\r\n\r\n if (!ev.isDefaultPrevented()) {\r\n ev.preventDefault();\r\n\r\n if (this.state.toggleNodesOnLabelClick !== false) {\r\n node.toggleExpansion();\r\n }\r\n\r\n this.handleSelectionEvent(node, ev);\r\n }\r\n}\r\n\r\nexport function handleNodeKeyDown(\r\n this: MobXTree,\r\n node: MobXTreeNode,\r\n ev: KeyboardEvent,\r\n) {\r\n node.state.onKeyDown?.(ev);\r\n if (ev.key === 'Enter') {\r\n node.state.onClick?.(ev as any);\r\n }\r\n this.state.onNodeKeyDown?.(ev, node);\r\n\r\n const assignSelection = (\r\n newFocusedNode: MobXTreeNode,\r\n innerEvent: KeyboardEvent = ev,\r\n ) => {\r\n ev.preventDefault();\r\n this.handleSelectionEvent(newFocusedNode, innerEvent);\r\n };\r\n\r\n if (!ev.isDefaultPrevented()) {\r\n switch (ev.code) {\r\n case 'ArrowDown': {\r\n const nextFocused = getNextNode(node, {\r\n omitFiltered: true,\r\n omitCollapsed: true,\r\n });\r\n\r\n if (nextFocused) {\r\n assignSelection(nextFocused);\r\n }\r\n break;\r\n }\r\n case 'ArrowLeft':\r\n if (!node.state.isDisabled) {\r\n if (!node.state.isLeaf && node.state.isExpanded) {\r\n node.toggleExpansion(false);\r\n } else if (node.parent instanceof MobXTreeNode) {\r\n assignSelection(node.parent);\r\n }\r\n }\r\n break;\r\n case 'ArrowRight':\r\n if (!node.state.isDisabled && !node.state.isLeaf) {\r\n if (!node.state.isExpanded) {\r\n node.toggleExpansion(true);\r\n } else {\r\n const child = node.getFirstChildren(true);\r\n if (child) {\r\n assignSelection(child);\r\n }\r\n }\r\n }\r\n break;\r\n case 'ArrowUp': {\r\n const previousFocused = getPreviousNode(node, {\r\n omitFiltered: true,\r\n omitCollapsed: true,\r\n });\r\n\r\n if (previousFocused) {\r\n assignSelection(previousFocused);\r\n }\r\n break;\r\n }\r\n case 'End': {\r\n const lastChild = this.getLastChildren(true);\r\n\r\n if (lastChild) {\r\n const nextFocused = getLastDescendant(lastChild, {\r\n omitCollapsed: true,\r\n omitFiltered: true,\r\n });\r\n\r\n assignSelection(nextFocused);\r\n }\r\n break;\r\n }\r\n case 'Home': {\r\n const nextFocused = this.getFirstChildren(true);\r\n\r\n if (nextFocused) {\r\n assignSelection(nextFocused);\r\n }\r\n break;\r\n }\r\n case 'PageDown': {\r\n ev.preventDefault();\r\n\r\n let nextFocused = getNextNode(node, {\r\n omitFiltered: true,\r\n omitCollapsed: true,\r\n });\r\n\r\n if (nextFocused) {\r\n for (let i = 0; i <= 10; i++) {\r\n const newPrevious = getNextNode(nextFocused, {\r\n omitFiltered: true,\r\n omitCollapsed: true,\r\n });\r\n if (newPrevious) {\r\n nextFocused = newPrevious;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n assignSelection(nextFocused);\r\n }\r\n break;\r\n }\r\n case 'PageUp': {\r\n ev.preventDefault();\r\n\r\n let previousFocused = getPreviousNode(node, {\r\n omitFiltered: true,\r\n omitCollapsed: true,\r\n });\r\n\r\n if (previousFocused) {\r\n for (let i = 0; i <= 10; i++) {\r\n const newPrevious = getPreviousNode(previousFocused, {\r\n omitFiltered: true,\r\n omitCollapsed: true,\r\n });\r\n if (newPrevious) {\r\n previousFocused = newPrevious;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n assignSelection(previousFocused);\r\n }\r\n break;\r\n }\r\n case 'Space': {\r\n assignSelection(\r\n this.focusedNode || this.getFirstChildren(true) || node,\r\n Object.assign(ev, { type: 'click' }) as any,\r\n );\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const MobXTreeEventsHandler: IMobXTreeEventsHandler = {\r\n handleNodeClick,\r\n handleNodeDoubleClick,\r\n handleNodeExpanderClick,\r\n handleNodeKeyDown,\r\n handleSelectionEvent,\r\n};\r\n","import { action, makeObservable, observable, reaction } from 'mobx';\r\nimport type { MobXTreeNodeState, MobXTreeState, TCreateNode } from './types';\r\nimport { MobXTreeNode } from './MobXTreeNode';\r\nimport { v4 } from 'uuid';\r\nimport { MobXTreeEventsHandler } from './MobXTreeEventsHandler/MobXTreeEventsHandler';\r\nimport { IMobXChildKeeper } from './MobXChildKeeper/types';\r\nimport { MobXChildKeeper } from './MobXChildKeeper/MobXChildKeeper';\r\nimport { IMobXTreeEventsHandler } from './MobXTreeEventsHandler/types';\r\nimport { MouseEvent, KeyboardEvent } from 'react';\r\n\r\nexport class MobXTree implements IMobXChildKeeper, IMobXTreeEventsHandler {\r\n focusedNode: MobXTreeNode | null = null;\r\n get id() {\r\n return this.state.id;\r\n }\r\n indexedChildren: Map<string, MobXTreeNode> = new Map();\r\n public readonly parent = null;\r\n get tree() {\r\n return this;\r\n }\r\n selectedItems: Set<MobXTreeNode> = new Set();\r\n state: MobXTreeState = {\r\n 'aria-label': '',\r\n children: new Map(),\r\n className: '',\r\n disableSelection: false,\r\n filterString: '',\r\n hideEmptyFolders: false,\r\n id: v4(),\r\n isLoading: false,\r\n isMultiple: true,\r\n selectionMode: 'explicit',\r\n title: '',\r\n toggleNodesOnLabelClick: true,\r\n variant: '',\r\n };\r\n\r\n constructor(initialTreeState?: Omit<Partial<MobXTreeState>, 'children'>) {\r\n Object.assign(this.state, initialTreeState ?? {});\r\n\r\n makeObservable(this, {\r\n focusedNode: observable,\r\n indexedChildren: observable,\r\n selectedItems: observable,\r\n state: observable,\r\n\r\n append: action,\r\n clearSelection: action,\r\n create: action,\r\n focusNode: action,\r\n handleNodeClick: action,\r\n handleNodeExpanderClick: action,\r\n handleNodeKeyDown: action,\r\n handleSelectionEvent: action,\r\n removeAllChildren: action,\r\n removeChild: action,\r\n reviewFocus: action,\r\n setSelectedNodes: action,\r\n toggleNodeSelection: action,\r\n });\r\n\r\n reaction(\r\n () => this.state.toggleNodesOnLabelClick,\r\n () => {\r\n console.log(this.state.toggleNodesOnLabelClick);\r\n },\r\n );\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * OWN METHODS\r\n *\r\n *\r\n */\r\n clearSelection() {\r\n [...this.selectedItems.values()].forEach((c) =>\r\n this.toggleNodeSelection(c, false),\r\n );\r\n }\r\n\r\n focusNode(node: MobXTreeNode) {\r\n const storedNode = this.getNodeById(node.id);\r\n if (!node.state.isDisabled && storedNode instanceof MobXTreeNode) {\r\n this.focusedNode = storedNode;\r\n }\r\n }\r\n\r\n /**\r\n * Devuelve el nodo con el id especificado o undefined si no existe.\r\n */\r\n getNodeById(id: string) {\r\n if (id === 'root' || id === this.id) return this;\r\n\r\n return this.indexedChildren.get(id);\r\n }\r\n\r\n /**\r\n * Actúa si el nodo que está en foco ya no existe en el árbol y restaura el foco en el primer nodo visible.\r\n */\r\n reviewFocus() {\r\n if (!this.getNodeById(this.focusedNode?.id ?? '')) {\r\n const firstChild = this.getFirstChildren(true);\r\n if (firstChild) {\r\n this.focusNode(firstChild);\r\n }\r\n }\r\n }\r\n\r\n setSelectedNodes(newSelection: Set<string>): void;\r\n setSelectedNodes(newSelection: Set<MobXTreeNode>): void;\r\n setSelectedNodes(newSelection: Set<string> | Set<MobXTreeNode>): void {\r\n this.clearSelection();\r\n newSelection.forEach((value) => {\r\n const node: MobXTreeNode = (\r\n typeof value === 'string' ? this.getNodeById(value) : value\r\n ) as MobXTreeNode;\r\n\r\n if (node) {\r\n this.toggleNodeSelection(node, true);\r\n }\r\n });\r\n }\r\n\r\n toggleNodeSelection(node: MobXTreeNode, isSelected?: boolean) {\r\n if (\r\n !this.state.disableSelection &&\r\n node.state.isSelectable &&\r\n !node.state.isDisabled\r\n ) {\r\n const actualSelected = isSelected ?? !node.isSelected;\r\n\r\n if (actualSelected) {\r\n if (!this.state.isMultiple) {\r\n this.selectedItems.clear();\r\n }\r\n this.selectedItems.add(node);\r\n } else {\r\n this.selectedItems.delete(node);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * MobXChildKeeper\r\n *\r\n *\r\n */\r\n append(node: MobXTreeNode) {\r\n MobXChildKeeper.append.call(this, node);\r\n }\r\n create(props: TCreateNode): MobXTreeNode {\r\n return MobXChildKeeper.create.call(this, props);\r\n }\r\n getChild(id: string): MobXTreeNode | undefined {\r\n return MobXChildKeeper.getChild.call(this, id);\r\n }\r\n getChildren(): MobXTreeNode[] {\r\n return MobXChildKeeper.getChildren.call(this);\r\n }\r\n getFirstChildren(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getFirstChildren.call(this, omitFiltered);\r\n }\r\n getLastChildren(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getLastChildren.call(this, omitFiltered);\r\n }\r\n getFollowingSibling(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getFollowingSibling.call(this, omitFiltered);\r\n }\r\n getPreviousSibling(omitFiltered?: boolean | undefined): MobXTreeNode | null {\r\n return MobXChildKeeper.getPreviousSibling.call(this, omitFiltered);\r\n }\r\n getSibling(): MobXTreeNode[] {\r\n return MobXChildKeeper.getSibling.call(this);\r\n }\r\n removeAllChildren(): void {\r\n return MobXChildKeeper.removeAllChildren.call(this);\r\n }\r\n removeChild(param: string | MobXTreeNode): void {\r\n return MobXChildKeeper.removeChild.call(this, param);\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * MobXTreeEventsHandler\r\n *\r\n *\r\n */\r\n handleNodeClick(node: MobXTreeNode, ev: MouseEvent) {\r\n return MobXTreeEventsHandler.handleNodeClick.call(this, node, ev);\r\n }\r\n handleNodeDoubleClick(\r\n node: MobXTreeNode,\r\n ev: MouseEvent<Element, globalThis.MouseEvent>,\r\n ): void {\r\n return MobXTreeEventsHandler.handleNodeDoubleClick.call(this, node, ev);\r\n }\r\n handleNodeExpanderClick(\r\n node: MobXTreeNode,\r\n ev: MouseEvent<Element, globalThis.MouseEvent>,\r\n ): void {\r\n return MobXTreeEventsHandler.handleNodeExpanderClick.call(this, node, ev);\r\n }\r\n handleNodeKeyDown(node: MobXTreeNode, ev: KeyboardEvent<Element>): void {\r\n return MobXTreeEventsHandler.handleNodeKeyDown.call(this, node, ev);\r\n }\r\n handleSelectionEvent(\r\n node: MobXTreeNode,\r\n mods?: { ctrlKey?: boolean; shiftKey?: boolean; type: string },\r\n ) {\r\n return MobXTreeEventsHandler.handleSelectionEvent.call(this, node, mods);\r\n }\r\n\r\n public static fromNodes(nodes: MobxTreeStaticBuilderNode[]) {\r\n const controller = new MobXTree({});\r\n\r\n nodes.forEach((current) => {\r\n const parent = current.parentId\r\n ? controller.getNodeById(current.parentId)\r\n : controller;\r\n\r\n if (parent) {\r\n parent.create(current);\r\n }\r\n });\r\n\r\n return controller;\r\n }\r\n}\r\n\r\nexport type MobxTreeStaticBuilderNode = Omit<\r\n Partial<MobXTreeNodeState>,\r\n 'children'\r\n> & {\r\n parentId?: string;\r\n id: string;\r\n};\r\n"],"names":["__publicField"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apia/tree2-controller",
3
- "version": "4.0.45",
3
+ "version": "5.0.0",
4
4
  "sideEffects": false,
5
5
  "author": "Alexis Leite <alexisleite@live.com>",
6
6
  "main": "dist/index.js",
@@ -36,5 +36,5 @@
36
36
  "access": "public",
37
37
  "registry": "https://registry.npmjs.org/"
38
38
  },
39
- "gitHead": "1b035d1b515ceb49207373a4fafcf0ff465bc439"
39
+ "gitHead": "985b675635fb9d3dc5e26a90a6d9898864418b84"
40
40
  }