@apia/tree 4.0.20 → 4.0.25

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/util.ts","../src/TreeDataController.ts","../src/getDomProps.ts","../src/SearchLabel.tsx","../src/TreeContext.tsx","../src/renderers/DefaultIconRenderer.tsx","../src/renderers/DefaultLabelRenderer.tsx","../src/renderers/Spacer.tsx","../src/TreeItemLabel.tsx","../src/TreeItem.tsx","../src/TreeItemChildren.tsx","../src/useTreeData.ts","../src/Tree.tsx","../src/OOTree/OOTreeNode.ts","../src/OOTree/OOTreeChildren.ts","../src/OOTree/index.tsx"],"sourcesContent":["import TreeDataController from './TreeDataController';\r\nimport { TDataNode, TId } from './types';\r\n\r\nexport const getLastVisibleChild: <\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>(\r\n handler: TreeDataController<NodeProps, NodeType>,\r\n id: TId,\r\n avoidFiltered?: boolean,\r\n) => TId | null = (handler, id, avoidFiltered) => {\r\n const nodeProps = handler.propsStore.getFieldProps(id);\r\n if (\r\n (id !== 'root' && (nodeProps.isDisabled || !nodeProps.isExpanded)) ||\r\n nodeProps.children.length === 0\r\n )\r\n return null;\r\n\r\n for (let i = nodeProps.children.length - 1; i >= 0; i--) {\r\n const currentId = nodeProps.children[i];\r\n const currentProps = handler.propsStore.getFieldProps(currentId);\r\n if (!avoidFiltered || !currentProps.isFiltered) {\r\n const lastChildrenLastChildren = getLastVisibleChild(\r\n handler,\r\n currentId,\r\n avoidFiltered,\r\n );\r\n return lastChildrenLastChildren !== null\r\n ? lastChildrenLastChildren\r\n : currentId;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexport const getPreviousChild: <\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>(\r\n handler: TreeDataController<NodeProps, NodeType>,\r\n id: TId,\r\n avoidFiltered?: boolean,\r\n) => TId | null = (handler, id, avoidFiltered) => {\r\n const nodeProps = handler.propsStore.getFieldProps(id);\r\n const fatherProps = handler.propsStore.getFieldProps(nodeProps.parentId);\r\n let childPosition =\r\n fatherProps.children?.findIndex((current) => current === nodeProps.id) ??\r\n -1;\r\n\r\n while (childPosition > 0) {\r\n const prevSibling = handler.propsStore.getFieldProps(\r\n fatherProps.children[childPosition - 1],\r\n );\r\n const prevSiblingLastChild = getLastVisibleChild(\r\n handler,\r\n prevSibling.id,\r\n avoidFiltered,\r\n );\r\n if (prevSiblingLastChild !== null) return prevSiblingLastChild;\r\n if (!avoidFiltered || !prevSibling.isFiltered) return prevSibling.id;\r\n\r\n childPosition--;\r\n }\r\n if (nodeProps.parentId === 'root') return null;\r\n return nodeProps.parentId;\r\n};\r\n\r\nexport const getFirstNonFilteredChild: <\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>(\r\n handler: TreeDataController<NodeProps, NodeType>,\r\n id: TId,\r\n) => null | TId = (handler, id) => {\r\n const nodeProps = handler.propsStore.getFieldProps(id);\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const child of nodeProps.children) {\r\n if (!handler.propsStore.getFieldProps(child).isFiltered) return child;\r\n }\r\n return null;\r\n};\r\n\r\nexport const getNextChild: <\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>(\r\n handler: TreeDataController<NodeProps, NodeType>,\r\n id: TId,\r\n avoidChildren?: boolean,\r\n avoidFiltered?: boolean,\r\n) => TId | null = (handler, id, avoidChildren, avoidFiltered) => {\r\n const nodeProps = handler.propsStore.getFieldProps(id);\r\n const fatherProps = handler.propsStore.getFieldProps(nodeProps.parentId);\r\n let childPosition =\r\n fatherProps.children?.findIndex((current) => current === nodeProps.id) ??\r\n Infinity;\r\n if (!avoidChildren && nodeProps.isExpanded) {\r\n if (!avoidFiltered && nodeProps.children.length > 0)\r\n return nodeProps.children[0];\r\n\r\n const firstNonFilteredChild = getFirstNonFilteredChild(\r\n handler,\r\n nodeProps.id,\r\n );\r\n if (firstNonFilteredChild !== null) return firstNonFilteredChild;\r\n }\r\n while (childPosition < fatherProps.children.length - 1) {\r\n const nextSibling = fatherProps.children[childPosition + 1];\r\n if (\r\n !avoidFiltered ||\r\n !handler.propsStore.getFieldProps(nextSibling).isFiltered\r\n )\r\n return nextSibling;\r\n childPosition++;\r\n }\r\n if (nodeProps.parentId === 'root') return null;\r\n return getNextChild(handler, fatherProps.id, true, avoidFiltered);\r\n};\r\n\r\nexport const getNextNodeWithKey: <\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>(\r\n handler: TreeDataController<NodeProps, NodeType>,\r\n id: TId,\r\n firstKey: string,\r\n avoidFiltered?: boolean,\r\n) => TId | null = (handler, id, firstKey, avoidFiltered) => {\r\n let nextChildWithKey: TId | null = id;\r\n do {\r\n nextChildWithKey = getNextChild(\r\n handler,\r\n nextChildWithKey,\r\n false,\r\n avoidFiltered,\r\n );\r\n if (nextChildWithKey !== null) {\r\n const nodeProps = handler.propsStore.getFieldProps(nextChildWithKey);\r\n if (\r\n (!nodeProps.isFiltered || !avoidFiltered) &&\r\n nodeProps.label.toUpperCase().startsWith(firstKey.toUpperCase())\r\n )\r\n return nextChildWithKey;\r\n }\r\n } while (nextChildWithKey !== null);\r\n\r\n const nodeProps = handler.propsStore.getFieldProps(id);\r\n const positionInParent = handler.propsStore\r\n .getFieldProps(nodeProps.parentId)\r\n .children.findIndex((current) => current === id);\r\n\r\n if (nodeProps.parentId !== 'root' || positionInParent > 0) {\r\n const [firstChildOfTree] =\r\n handler.propsStore.getFieldProps('root').children;\r\n const firstChildProps = handler.propsStore.getFieldProps(firstChildOfTree);\r\n\r\n if (\r\n firstChildOfTree &&\r\n (!avoidFiltered || !firstChildProps.isFiltered) &&\r\n firstChildProps.label.toUpperCase().startsWith(firstKey.toUpperCase())\r\n )\r\n return firstChildOfTree;\r\n\r\n nextChildWithKey = firstChildOfTree;\r\n do {\r\n nextChildWithKey = getNextChild(\r\n handler,\r\n nextChildWithKey,\r\n false,\r\n avoidFiltered,\r\n );\r\n if (nextChildWithKey) {\r\n const currentNodeProps =\r\n handler.propsStore.getFieldProps(nextChildWithKey);\r\n if (\r\n (!avoidFiltered || !currentNodeProps.isFiltered) &&\r\n currentNodeProps.label\r\n .toUpperCase()\r\n .startsWith(firstKey.toUpperCase())\r\n )\r\n return nextChildWithKey;\r\n }\r\n } while (nextChildWithKey !== id && nextChildWithKey !== null);\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const getNodePath: <\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>(\r\n handler: TreeDataController<NodeProps, NodeType>,\r\n nodeId: TId,\r\n) => TId[] = (handler, nodeId) => {\r\n const path: TId[] = [nodeId];\r\n let currentStep: TId = nodeId;\r\n do {\r\n currentStep = handler.propsStore.getFieldProps(currentStep).parentId;\r\n path.unshift(currentStep);\r\n } while (currentStep !== 'root');\r\n return path;\r\n};\r\n\r\nexport const getCommonAncestor: <\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>(\r\n handler: TreeDataController<NodeProps, NodeType>,\r\n oneNodeId: TId,\r\n anotherNodeId: TId,\r\n) => {\r\n commonAncestor: TId;\r\n oneNodeAncestorChild: TId;\r\n anotherNodeAncestorChild: TId;\r\n} | null = (handler, oneNodeId, anotherNodeId) => {\r\n const oneNodePath = getNodePath(handler, oneNodeId);\r\n const anotherNodePath = getNodePath(handler, anotherNodeId);\r\n\r\n for (let i = oneNodePath.length - 1; i >= 0; i--) {\r\n const anotherNodeIndex = anotherNodePath.indexOf(oneNodePath[i]);\r\n if (anotherNodeIndex !== -1)\r\n return {\r\n commonAncestor: oneNodePath[i],\r\n oneNodeAncestorChild: oneNodePath[i + 1],\r\n anotherNodeAncestorChild: anotherNodePath[anotherNodeIndex + 1],\r\n };\r\n }\r\n\r\n console.warn(\r\n 'This point should have never been reached since the root node is common to all nodes',\r\n { oneNodeId, anotherNodeId, oneNodePath, anotherNodePath },\r\n );\r\n return null;\r\n};\r\n\r\nexport const unfilterNodes: <\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>(\r\n handler: TreeDataController<NodeProps, NodeType>,\r\n) => void = (handler) => {\r\n handler.state.filteredNodes.forEach((current) => {\r\n handler.propsStore.updateField(\r\n current,\r\n { isFiltered: false },\r\n { noEmit: true },\r\n );\r\n });\r\n\r\n const firstChild = handler.propsStore.getFieldProps('root').children[0];\r\n if (firstChild) handler.setFocusedNode(firstChild);\r\n handler.setState({ filteredNodes: [] });\r\n};\r\n\r\nexport const matchNodesAgainstString: <\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>(\r\n handler: TreeDataController<NodeProps, NodeType>,\r\n searchString: string,\r\n nodeId?: TId,\r\n) => boolean = (handler, searchString, nodeId = 'root') => {\r\n let hasMatched = false;\r\n let matchNode: TId | null = null;\r\n const nodeProps = handler.propsStore.getFieldProps(nodeId);\r\n if (\r\n nodeId !== 'root' &&\r\n nodeProps.label.match(new RegExp(searchString, 'i'))\r\n ) {\r\n handler.propsStore.updateField(nodeId, { isFiltered: false });\r\n hasMatched = true;\r\n matchNode = nodeProps.id;\r\n handler.setState({\r\n filteredNodes: handler.state.filteredNodes.filter(\r\n (current) => current !== nodeId,\r\n ),\r\n });\r\n }\r\n let hasChildrenMatched = false;\r\n nodeProps.children.forEach((current) => {\r\n hasChildrenMatched =\r\n matchNodesAgainstString(handler, searchString, current) || hasMatched;\r\n hasMatched = hasChildrenMatched || hasMatched;\r\n if (hasMatched && !matchNode) matchNode = current;\r\n });\r\n if (hasChildrenMatched) {\r\n handler.propsStore.updateField(nodeId, { isExpanded: true });\r\n if (hasMatched && !matchNode) matchNode = nodeId;\r\n }\r\n if (!hasMatched) {\r\n handler.propsStore.updateField(\r\n nodeId,\r\n { isFiltered: true },\r\n { noEmit: true },\r\n );\r\n handler.setState({\r\n filteredNodes: [...handler.state.filteredNodes, nodeId],\r\n });\r\n }\r\n if (matchNode !== null) handler.setFocusedNode(matchNode);\r\n return hasMatched;\r\n};\r\n\r\nexport const selectAllNodesBetweenTwoNodes: <\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>(\r\n handler: TreeDataController<NodeProps, NodeType>,\r\n oneNodeId: TId,\r\n anotherNodeId: TId,\r\n avoidFiltered?: boolean,\r\n) => void = (handler, oneNodeId, anotherNodeId, avoidFiltered) => {\r\n const commonAncestorData = getCommonAncestor(\r\n handler,\r\n oneNodeId,\r\n anotherNodeId,\r\n );\r\n if (commonAncestorData) {\r\n const { anotherNodeAncestorChild, commonAncestor, oneNodeAncestorChild } =\r\n commonAncestorData;\r\n const ancestorProps = handler.propsStore.getFieldProps(commonAncestor);\r\n const oneNodePosition = ancestorProps.children.findIndex(\r\n (current) => current === oneNodeAncestorChild,\r\n );\r\n const anotherNodePosition = ancestorProps.children.findIndex(\r\n (current) => current === anotherNodeAncestorChild,\r\n );\r\n\r\n let currentId: TId | null =\r\n oneNodePosition >= anotherNodePosition ? anotherNodeId : oneNodeId;\r\n const lastNodeId =\r\n oneNodePosition < anotherNodePosition ? anotherNodeId : oneNodeId;\r\n handler.toggleNodeSelectedState(currentId, true);\r\n do {\r\n currentId = getNextChild(handler, currentId, false, avoidFiltered);\r\n if (currentId !== null) handler.toggleNodeSelectedState(currentId, true);\r\n } while (currentId !== lastNodeId && currentId !== null);\r\n }\r\n};\r\n","/* eslint-disable @typescript-eslint/no-dynamic-delete */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable max-classes-per-file */\r\nimport React, { RefObject, useEffect, useState } from 'react';\r\nimport {\r\n TDataNode,\r\n TDataNodeContainer,\r\n TId,\r\n TTreeDataControllerConfig,\r\n TTreeDataControllerState,\r\n} from './types';\r\nimport {\r\n getFirstNonFilteredChild,\r\n getLastVisibleChild,\r\n getNextChild,\r\n getNextNodeWithKey,\r\n getPreviousChild,\r\n selectAllNodesBetweenTwoNodes,\r\n} from './util';\r\nimport {\r\n EventEmitter,\r\n PropsStore,\r\n TModify,\r\n TRequireOnlyOne,\r\n addBoundary,\r\n getSpecificParent,\r\n TUpdateFieldConfiguration,\r\n TPropsConfiguration,\r\n usePropsSelector,\r\n useMount,\r\n useLatest,\r\n shallowEqual,\r\n} from '@apia/util';\r\n\r\nconst trees: Record<string, TreeDataController> = {};\r\nconst treesRecordEmitter = new (class TreesRecordEmitter extends EventEmitter<{\r\n addController: { name: string; controller: TreeDataController };\r\n}> {\r\n emit<K extends 'addController'>(\r\n eventName: K,\r\n params: {\r\n addController: {\r\n name: string;\r\n controller: TreeDataController;\r\n };\r\n }[K],\r\n ): void {\r\n super.emit(eventName, params);\r\n\r\n trees[params.name] = params.controller;\r\n }\r\n})();\r\n\r\nexport function useTreeDataController<\r\n TreeType extends TreeDataController<any, any> = TreeDataController<any, any>,\r\n>(name: string) {\r\n const [controller, setDataController] = useState<TreeDataController>(\r\n trees[name],\r\n );\r\n\r\n useEffect(() => {\r\n if (trees[name] !== controller) setDataController(trees[name]);\r\n\r\n return treesRecordEmitter.on('addController', (ev) => {\r\n if (ev.name === name) setDataController(ev.controller);\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return controller as unknown as TreeType;\r\n}\r\n\r\nexport function getTreeDataController<TreeType = TreeDataController>(\r\n name: string,\r\n) {\r\n return trees[name] as unknown as TreeType;\r\n}\r\n\r\nexport function deleteTreeDataController(name: string) {\r\n delete trees[name];\r\n}\r\n\r\nclass TreeDataController<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n> extends EventEmitter<{\r\n onArrowUpOnFirstElement: boolean;\r\n expandNode: NodeType;\r\n mustFocus: TId;\r\n stateUpdate: null;\r\n}> {\r\n _configuration: RefObject<TTreeDataControllerConfig<NodeProps, NodeType>>;\r\n\r\n get configuration() {\r\n return { ...this._configuration };\r\n }\r\n\r\n hasApendedFirstChild = false;\r\n\r\n /**\r\n * Este array se usa para conocer los padres faltantes al momento de la\r\n * construcción del árbol, de forma de optimizar el proceso\r\n */\r\n missingParents: TId[] = [];\r\n\r\n nonEmittedUpdates: TId[] = [];\r\n\r\n get state() {\r\n return this.propsStore.getFieldProps<TTreeDataControllerState>(\r\n this.stateKey,\r\n );\r\n }\r\n\r\n stateKey = 'treeState';\r\n\r\n get stateStore() {\r\n return this.propsStore as unknown as PropsStore<TTreeDataControllerState>;\r\n }\r\n\r\n constructor(\r\n public name: string,\r\n configuration: RefObject<\r\n Partial<TTreeDataControllerConfig<NodeProps, NodeType>>\r\n >,\r\n public propsStore = new PropsStore<NodeType>({\r\n logCommands: {\r\n propsStore: `treeProps_${name}`,\r\n propsLog: `treeLog_${name}`,\r\n propsSuscriptors: `propsSuscriptors_${name}`,\r\n updateProp: `updateProp_${name}`,\r\n },\r\n }),\r\n ) {\r\n super();\r\n\r\n this._configuration = (configuration ?? {\r\n current: { emitUpdates: true },\r\n }) as RefObject<Partial<TTreeDataControllerConfig<NodeProps, NodeType>>>;\r\n\r\n (this._configuration.current as TTreeDataControllerConfig).emitUpdates =\r\n (this._configuration.current as TTreeDataControllerConfig).emitUpdates ??\r\n true;\r\n\r\n this.setState(this.getInitialState());\r\n treesRecordEmitter.emit('addController', {\r\n name,\r\n controller: this as unknown as TreeDataController,\r\n });\r\n this.initRoot();\r\n }\r\n\r\n destructor() {\r\n this.propsStore.destructor();\r\n }\r\n\r\n append(\r\n node: Omit<\r\n TModify<\r\n NodeType,\r\n { children?: NodeType['children']; parentId?: NodeType['parentId'] }\r\n >,\r\n 'nodeProps' | 'actualParentId'\r\n > &\r\n Partial<Pick<NodeType, 'nodeProps'>>,\r\n ) {\r\n const newNode = { ...(node as NodeType), nodeProps: node.nodeProps ?? {} };\r\n\r\n // Se busca el padre, si el padre no existe se agrega a la raíz\r\n let father: TId;\r\n if (\r\n newNode.parentId !== undefined &&\r\n this.propsStore.getFieldProps(newNode.parentId)?.children\r\n ) {\r\n father = newNode.parentId;\r\n } else {\r\n father = 'root';\r\n if (newNode.parentId) this.missingParents.push(newNode.parentId);\r\n newNode.actualParentId = newNode.parentId;\r\n newNode.parentId = 'root';\r\n }\r\n\r\n this.propsStore.updateField(\r\n newNode.id,\r\n {\r\n ...newNode,\r\n children: newNode.children ?? [],\r\n },\r\n { isUrgent: true },\r\n );\r\n this.setState({ length: this.state.length + 1 });\r\n\r\n // Se buscan elementos que estén en la raíz y sean hijos del nodo que se\r\n // está agregando. De esta forma al crear el árbol nos aseguramos que ningún\r\n // nodo quede afuera y evitamos iteraciones innecesarias\r\n if (this.missingParents.includes(newNode.id)) {\r\n this.propsStore.getFieldProps('root').children.forEach((currentChild) => {\r\n if (\r\n this.propsStore.getFieldProps(currentChild).actualParentId ===\r\n newNode.id\r\n ) {\r\n this.move(currentChild, newNode.id);\r\n }\r\n });\r\n this.missingParents = this.missingParents.filter(\r\n (current) => current !== newNode.id,\r\n );\r\n }\r\n\r\n // Se agrega el nodo a los hijos del padre\r\n this.propsStore.updateField(\r\n father,\r\n {\r\n children: [\r\n ...this.propsStore.getFieldProps(father).children,\r\n newNode.id,\r\n ],\r\n hasLoaded: true,\r\n },\r\n { noEmit: this._configuration.current?.emitUpdates === false },\r\n );\r\n\r\n if (this._configuration.current?.emitUpdates === false)\r\n this.nonEmittedUpdates.push(father);\r\n\r\n if (!this.hasApendedFirstChild) {\r\n this.hasApendedFirstChild = true;\r\n this.setFocusedNode(newNode.id, true);\r\n }\r\n\r\n if (newNode.isExpanded) this.toggleNodeExpandedState(newNode.id, true);\r\n }\r\n\r\n /**\r\n * Cuando se quieren agregar muchos nodos, es conveniente llamar primero al\r\n * método batchInit y luego de finalizar, al método batchFinish()\r\n */\r\n batchInit() {\r\n this.config({ emitUpdates: false });\r\n this.setState({ isLoading: true }, { isUrgent: true });\r\n }\r\n\r\n private getNodesRecursive(nodeId: TId = 'root'): TId[] {\r\n const node = this.propsStore.getFieldProps(nodeId);\r\n\r\n return node.children.reduce<TId[]>(\r\n (prev, current) => [...prev, ...this.getNodesRecursive(current)],\r\n [...node.children],\r\n );\r\n }\r\n\r\n /**\r\n * Cuando se quieren agregar muchos nodos, es conveniente llamar primero al\r\n * método batchInit y luego de finalizar, al método batchFinish()\r\n */\r\n batchFinish() {\r\n this.config({ emitUpdates: true });\r\n setTimeout(() => this.setState({ isLoading: false }), 0);\r\n\r\n const children = [...this.getNodesRecursive()];\r\n\r\n const deleteNodes = this.previousNodes.filter(\r\n (current) => !children.find((search) => search === current),\r\n );\r\n deleteNodes.forEach((current) => this.remove(current));\r\n\r\n this.config({ emitUpdates: true });\r\n setTimeout(() => this.setState({ isLoading: false }), 0);\r\n }\r\n\r\n config(newConf: Partial<TTreeDataControllerConfig<NodeProps, NodeType>>) {\r\n if (\r\n this._configuration.current?.emitUpdates === false &&\r\n newConf.emitUpdates !== false\r\n ) {\r\n this.nonEmittedUpdates.forEach((current) =>\r\n this.propsStore.updateField(current, {\r\n children: [...this.propsStore.getFieldProps(current).children],\r\n }),\r\n );\r\n this.nonEmittedUpdates = [];\r\n }\r\n Object.assign(\r\n this._configuration.current as TTreeDataControllerConfig,\r\n newConf,\r\n );\r\n }\r\n\r\n deselectAll() {\r\n this.state.selectedNodes.forEach((currentId) =>\r\n this.propsStore.updateField(currentId, { isSelected: false }),\r\n );\r\n this.setState({ selectedNodes: [] });\r\n }\r\n\r\n forceEmitUpdate() {\r\n this.propsStore.updateField<{ forceUpdate: number }>('root', {\r\n forceUpdate:\r\n (this.propsStore.getFieldProps<{ forceUpdate: number }>('root')\r\n .forceUpdate ?? 0) + 1,\r\n });\r\n }\r\n\r\n getInitialState(): TTreeDataControllerState {\r\n return {\r\n expandedNodes: [],\r\n filteredNodes: [],\r\n focusedNode: null,\r\n isLoading: false,\r\n length: 0,\r\n selectedNodes: [],\r\n };\r\n }\r\n\r\n getNodesAsArray() {\r\n const allFields = { ...this.propsStore.fields };\r\n delete allFields[this.stateKey];\r\n delete allFields.root;\r\n return Object.values(allFields);\r\n }\r\n\r\n /**\r\n * Devuelve un array que contiene el id de todos los nodos pertenecientes al\r\n * árbol\r\n */\r\n getNodesIds() {\r\n const allFields = { ...this.propsStore.fields };\r\n delete allFields[this.stateKey];\r\n delete allFields.root;\r\n return Object.keys(allFields);\r\n }\r\n\r\n getParentId(parentId: TId) {\r\n return this.propsStore.getFieldProps(parentId).parentId;\r\n }\r\n\r\n /**\r\n * Este método permite controlar el comportamiento con el teclado desde fuera\r\n * del componente.\r\n */\r\n handleKey(ev: React.KeyboardEvent) {\r\n const focusedId = this.state.focusedNode as TId;\r\n const nodeProps = this.propsStore.getFieldProps(focusedId);\r\n if (ev.key === '*') {\r\n if (this.state.focusedNode === null) return;\r\n const parent = this.propsStore.getFieldProps(\r\n this.propsStore.getFieldProps(this.state.focusedNode).parentId,\r\n );\r\n parent.children.forEach((current) =>\r\n this.toggleNodeExpandedState(current, true),\r\n );\r\n } else if (ev.key.match(/^\\w$/)) {\r\n const nextChildWithKey = getNextNodeWithKey(\r\n this,\r\n focusedId,\r\n ev.key,\r\n true,\r\n );\r\n if (nextChildWithKey !== null) {\r\n this.setFocusedNode(nextChildWithKey);\r\n this.emit('mustFocus', nextChildWithKey);\r\n }\r\n } else\r\n switch (ev.code) {\r\n case 'Home': {\r\n const firstChild = getFirstNonFilteredChild(this, 'root');\r\n if (firstChild === null) return;\r\n if (ev.shiftKey && ev.ctrlKey && this.state.focusedNode !== null) {\r\n selectAllNodesBetweenTwoNodes(\r\n this,\r\n firstChild,\r\n this.state.focusedNode,\r\n true,\r\n );\r\n }\r\n this.setFocusedNode(firstChild);\r\n this.emit('mustFocus', firstChild);\r\n break;\r\n }\r\n case 'End': {\r\n const lastVisibleChild = getLastVisibleChild(this, 'root', true);\r\n if (lastVisibleChild !== null) {\r\n if (ev.shiftKey && ev.ctrlKey && this.state.focusedNode !== null) {\r\n selectAllNodesBetweenTwoNodes(\r\n this,\r\n lastVisibleChild,\r\n this.state.focusedNode,\r\n true,\r\n );\r\n }\r\n this.setFocusedNode(lastVisibleChild);\r\n this.emit('mustFocus', lastVisibleChild);\r\n }\r\n break;\r\n }\r\n case 'ArrowRight': {\r\n if (nodeProps.isLeaf) return;\r\n ev.preventDefault();\r\n if (nodeProps.isExpanded) {\r\n const firstChild = getFirstNonFilteredChild(this, nodeProps.id);\r\n if (firstChild !== null) {\r\n this.setFocusedNode(firstChild);\r\n this.emit('mustFocus', firstChild);\r\n }\r\n } else this.toggleNodeExpandedState(nodeProps.id, true);\r\n break;\r\n }\r\n case 'ArrowLeft': {\r\n ev.preventDefault();\r\n if (nodeProps.isLeaf || !nodeProps.isExpanded) {\r\n if (\r\n nodeProps.parentId !== 'root' &&\r\n nodeProps.parentId !== undefined\r\n ) {\r\n this.setFocusedNode(nodeProps.parentId);\r\n this.emit('mustFocus', nodeProps.parentId);\r\n }\r\n } else this.toggleNodeExpandedState(nodeProps.id, false);\r\n break;\r\n }\r\n case 'ArrowUp': {\r\n ev.preventDefault();\r\n const prevChild = getPreviousChild(this, nodeProps.id, true);\r\n if (prevChild !== null) {\r\n if (ev.shiftKey) this.toggleNodeSelectedState(prevChild, true);\r\n this.setFocusedNode(prevChild);\r\n this.emit('mustFocus', prevChild);\r\n } else this.emit('onArrowUpOnFirstElement', true);\r\n break;\r\n }\r\n case 'ArrowDown': {\r\n ev.preventDefault();\r\n const nextChild = getNextChild(this, nodeProps.id, false, true);\r\n if (nextChild !== null) {\r\n if (ev.shiftKey) this.toggleNodeSelectedState(nextChild, true);\r\n this.setFocusedNode(nextChild);\r\n this.emit('mustFocus', nextChild);\r\n }\r\n break;\r\n }\r\n case 'Space': {\r\n if (this._configuration.current?.disableSelection) return;\r\n ev.preventDefault();\r\n this.toggleNodeSelectedState(nodeProps.id);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n isNode(\r\n node: NodeType | TDataNodeContainer<NodeProps> | TId,\r\n ): node is NodeType {\r\n return typeof node === 'object' && 'parentId' in node;\r\n }\r\n\r\n isNodeContainer(\r\n node: NodeType | TDataNodeContainer<NodeProps> | TId,\r\n ): node is TDataNodeContainer<NodeProps> {\r\n return typeof node === 'object' && !this.isNode(node);\r\n }\r\n\r\n includes(searchNode: NodeType) {\r\n return !!this.propsStore.getFieldProps(searchNode.id);\r\n }\r\n\r\n initRoot() {\r\n this.propsStore.updateField(\r\n 'root',\r\n { children: [], id: 'root' },\r\n { isUrgent: true },\r\n );\r\n }\r\n\r\n move(\r\n moveNode: TId,\r\n destinationNode: TId,\r\n afterOrBefore?: TRequireOnlyOne<{\r\n after: NodeType | TId;\r\n before: NodeType | TId;\r\n position: number;\r\n }>,\r\n ) {\r\n const currentFather = this.propsStore.getFieldProps(\r\n this.propsStore.getFieldProps(moveNode).parentId,\r\n );\r\n const newFather = this.propsStore.getFieldProps(destinationNode);\r\n\r\n if (!currentFather) {\r\n console.warn('The current node does not belong to the tree.', moveNode);\r\n return;\r\n }\r\n\r\n if (!newFather) {\r\n console.warn(\r\n 'The destination node does not belong to the tree. No action will be made',\r\n destinationNode,\r\n );\r\n return;\r\n }\r\n\r\n currentFather.children = currentFather.children?.filter(\r\n (search) => search !== moveNode,\r\n );\r\n if (!newFather.children) newFather.children = [];\r\n if (!afterOrBefore) newFather.children.push(moveNode);\r\n else if (afterOrBefore.position) {\r\n newFather.children.splice(afterOrBefore.position - 1, 0, moveNode);\r\n } else {\r\n const key = afterOrBefore.after\r\n ? afterOrBefore.after\r\n : afterOrBefore.before;\r\n\r\n const relatedNodeKey = key && this.isNode(key) ? key.id : key;\r\n const relatedNodeIndex = newFather.children.findIndex(\r\n (search) => search === relatedNodeKey,\r\n );\r\n\r\n const actualIndex = addBoundary(\r\n afterOrBefore.before !== undefined\r\n ? relatedNodeIndex\r\n : relatedNodeIndex + 1,\r\n 0,\r\n );\r\n\r\n if (actualIndex === -1 || actualIndex === newFather.children.length)\r\n newFather.children.push(moveNode);\r\n else newFather.children.splice(actualIndex, 0, moveNode);\r\n }\r\n\r\n this.propsStore.updateField(currentFather.id, {\r\n children: [...(currentFather.children ?? [])],\r\n });\r\n this.propsStore.updateField(newFather.id, {\r\n children: [...newFather.children],\r\n });\r\n this.propsStore.updateField(moveNode, {\r\n parentId: newFather.id,\r\n });\r\n }\r\n\r\n /**\r\n * Borra el nodo del árbol, y dependiendo del parámetro removeChildren, borra\r\n * también sus hijos.\r\n *\r\n * @param removeChildren - Si se pasa en false, los nodos hijos son movidos al root\r\n */\r\n remove(removeNode: NodeType | TId, removeChildren = true) {\r\n const removeNodeId = this.isNode(removeNode) ? removeNode.id : removeNode;\r\n\r\n const removingNode = this.propsStore.getFieldProps(removeNodeId);\r\n if (!removingNode) return;\r\n\r\n const father = this.propsStore.getFieldProps(removingNode.parentId);\r\n if (father) {\r\n this.propsStore.updateField(father.id, {\r\n children: father.children?.filter((search) => search !== removeNodeId),\r\n });\r\n }\r\n\r\n removingNode.children?.forEach((current) => {\r\n if (removeChildren) {\r\n this.remove(current);\r\n } else {\r\n this.move(current, 'root');\r\n }\r\n });\r\n\r\n this.setState({\r\n selectedNodes: this.state.selectedNodes.filter(\r\n (current) => current !== removeNodeId,\r\n ),\r\n focusedNode:\r\n this.state.focusedNode === removeNodeId ? null : this.state.focusedNode,\r\n length: this.state.length - 1,\r\n });\r\n this.propsStore.removeField(removeNodeId);\r\n }\r\n\r\n removeMultiple(nodes: TId[], removeChildren = true) {\r\n nodes.forEach((current) => this.remove(current, removeChildren));\r\n }\r\n\r\n previousNodes: TId[] = [];\r\n /**\r\n * Borra todos los nodos del árbol.\r\n */\r\n removeAll() {\r\n if (this.configuration.current?.emitUpdates === false) {\r\n this.previousNodes = this.getNodesIds();\r\n this.propsStore.updateField(\r\n 'root',\r\n { children: [], id: 'root' },\r\n { isUrgent: true, noEmit: true },\r\n );\r\n /* this.previousNodes.forEach((current) =>\r\n this.propsStore.removeField(current),\r\n ); */\r\n } else {\r\n this.hasApendedFirstChild = false;\r\n this.setState({ focusedNode: null }, { isUrgent: true });\r\n this.setSelectedNodes([]);\r\n this.initRoot();\r\n Object.keys(this.propsStore.fields).forEach((current) => {\r\n if (!['root', this.stateKey].includes(current))\r\n this.propsStore.removeField(current);\r\n });\r\n }\r\n }\r\n\r\n selectAll() {\r\n this.setState({\r\n selectedNodes: this.getNodesIds(),\r\n });\r\n this.state.selectedNodes.forEach((currentId) =>\r\n this.propsStore.updateField(currentId, { isSelected: true }),\r\n );\r\n }\r\n\r\n setExpandedNodes(nodes: TId[]) {\r\n this.state.expandedNodes.forEach((current) =>\r\n this.propsStore.updateField(current, { isExpanded: false }),\r\n );\r\n\r\n this.setState({ expandedNodes: nodes });\r\n nodes.forEach((current) =>\r\n this.propsStore.updateField(current, { isExpanded: true }),\r\n );\r\n }\r\n\r\n setFocusedNode(key: TId, avoidSelection?: boolean) {\r\n if (this.state.focusedNode !== null)\r\n this.propsStore.updateField(this.state.focusedNode, { isFocused: false });\r\n this.setState({\r\n focusedNode: key,\r\n });\r\n if (\r\n !this._configuration.current?.isMultiple &&\r\n !avoidSelection &&\r\n (this._configuration.current?.selectionMode ?? 'onFocus') === 'onFocus'\r\n )\r\n this.setSelectedNodes([key]);\r\n this.propsStore.updateField(key, { isFocused: true });\r\n }\r\n\r\n setSelectedNodes(nodes: TId[], force = false) {\r\n if (this._configuration.current?.disableSelection && !force) return;\r\n this.state.selectedNodes.forEach((current) =>\r\n this.propsStore.updateField(current, { isSelected: false }),\r\n );\r\n this.setState({\r\n selectedNodes: nodes.filter((current) => {\r\n const { isSelectable } = this.propsStore.getFieldProps(current);\r\n if (isSelectable !== false)\r\n this.propsStore.updateField(current, { isSelected: true });\r\n return isSelectable !== false;\r\n }),\r\n });\r\n }\r\n\r\n setSelectedNodesByClickEvent(ev: React.MouseEvent) {\r\n if (this._configuration.current?.disableSelection) return;\r\n const nodeKey = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => current.getAttribute('role') === 'treeitem',\r\n )?.getAttribute('data-key');\r\n if (nodeKey) {\r\n const nodeProps = this.propsStore.getFieldProps(nodeKey);\r\n if (nodeProps.isDisabled || nodeProps.isSelectable === false) return;\r\n\r\n const previousSelectionKeys = [...this.state.selectedNodes];\r\n const allowMultiple =\r\n this._configuration.current?.isMultiple &&\r\n (this._configuration.current?.selectionMode !== 'explicitMultiple' ||\r\n ev.ctrlKey ||\r\n ev.shiftKey);\r\n\r\n // eslint-disable-next-line no-nested-ternary\r\n const newSelection: TId[] = allowMultiple\r\n ? nodeProps.isSelected\r\n ? previousSelectionKeys.filter((current) => current !== nodeKey)\r\n : [...previousSelectionKeys, nodeKey]\r\n : [nodeKey];\r\n\r\n this.setSelectedNodes(newSelection);\r\n } else console.warn('Cannot set selection, no treeitem found', ev);\r\n }\r\n\r\n setState = (\r\n updateProps: Partial<TTreeDataControllerState>,\r\n conf?: TUpdateFieldConfiguration,\r\n ) => {\r\n this.propsStore.updateField<TTreeDataControllerState>(\r\n this.stateKey,\r\n {\r\n ...this.state,\r\n ...updateProps,\r\n },\r\n conf,\r\n );\r\n this.emit('stateUpdate', null);\r\n };\r\n\r\n useState = <T>(selector: (state: TTreeDataControllerState) => T) => {\r\n const [selectedState, setSelectedState] = useState(selector(this.state));\r\n const latestState = useLatest(selectedState);\r\n\r\n useMount(() => {\r\n return this.on('stateUpdate', () => {\r\n const newSelection = selector(this.state);\r\n\r\n if (!shallowEqual(newSelection, latestState.current)) {\r\n setSelectedState(newSelection);\r\n }\r\n });\r\n });\r\n\r\n return selectedState;\r\n };\r\n\r\n toggleNodeExpandedState(key: TId, shouldExpand?: boolean) {\r\n const nodeProps = this.propsStore.getFieldProps(key);\r\n if (nodeProps.isDisabled || nodeProps.isLeaf || nodeProps.isLoading) return;\r\n\r\n if (this._configuration.current?.onLoadData && !nodeProps.hasLoaded) {\r\n this.propsStore.updateField(key, { isLoading: true });\r\n this._configuration.current?.onLoadData(nodeProps).finally(() => {\r\n this.propsStore.updateField(key, {\r\n isLoading: false,\r\n isExpanded: true,\r\n hasLoaded: true,\r\n });\r\n\r\n this.setState({\r\n expandedNodes: [...this.state.expandedNodes, key],\r\n });\r\n this._configuration.current?.onExpand?.(\r\n this.propsStore.getFieldProps(key),\r\n );\r\n });\r\n } else {\r\n const { expandedNodes } = this.state;\r\n const shouldExpandInner =\r\n shouldExpand !== undefined\r\n ? shouldExpand\r\n : !expandedNodes.includes(key);\r\n if (this.propsStore.getFieldProps(key)?.isDisabled) return;\r\n\r\n this.setState({\r\n expandedNodes: shouldExpandInner\r\n ? [...expandedNodes, key]\r\n : expandedNodes.filter((current) => current !== key),\r\n });\r\n this.propsStore.updateField(key, { isExpanded: shouldExpandInner });\r\n this._configuration.current?.onExpand?.(\r\n this.propsStore.getFieldProps(key),\r\n );\r\n }\r\n }\r\n\r\n toggleNodeSelectedState(key: TId, isSelected?: boolean) {\r\n if (this._configuration.current?.disableSelection) return;\r\n const nodeProps = this.propsStore.getFieldProps(key);\r\n if (nodeProps.isDisabled || nodeProps.isSelectable === false) return;\r\n\r\n const shouldSelect =\r\n isSelected !== undefined\r\n ? isSelected\r\n : !this.state.selectedNodes.includes(key);\r\n\r\n if (\r\n (shouldSelect && nodeProps.isSelected) ||\r\n (isSelected === false && !nodeProps.isSelected)\r\n )\r\n return;\r\n\r\n if (\r\n shouldSelect &&\r\n !this._configuration.current?.isMultiple &&\r\n this.state.selectedNodes[0]\r\n )\r\n this.toggleNodeSelectedState(this.state.selectedNodes[0], false);\r\n this.propsStore.updateField(key, { isSelected: shouldSelect });\r\n this.setState({\r\n selectedNodes: shouldSelect\r\n ? [...this.state.selectedNodes, key]\r\n : this.state.selectedNodes.filter((current) => current !== key),\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Este hook permite escuchar las props de un árbol, para ello es necesario\r\n * pasar el handler.\r\n *\r\n * @param handler\r\n * @param configuration\r\n * @returns\r\n */\r\nexport function useTreeSelector<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n Selected = Record<string, unknown>,\r\n PropsType extends Record<string, unknown> = TTreeDataControllerState,\r\n>(\r\n handler: TreeDataController<NodeProps, NodeType>,\r\n configuration?: TPropsConfiguration<Selected, PropsType>,\r\n): Selected {\r\n return usePropsSelector<Selected, PropsType>(\r\n handler?.stateKey ?? '__NO__TREE__KEY__',\r\n {\r\n propsStore: handler?.propsStore as unknown as PropsStore<PropsType>,\r\n ...configuration,\r\n },\r\n );\r\n}\r\n\r\n/**\r\n * Este hook permite escuchar las props de un árbol, para ello es necesario\r\n * pasar el handler.\r\n *\r\n * @param handler\r\n * @param configuration\r\n * @returns\r\n */\r\nexport function useTreeSelectorByName<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n Selected = Record<string, unknown>,\r\n PropsType extends Record<string, unknown> = TTreeDataControllerState,\r\n>(\r\n treeName: string,\r\n configuration?: TPropsConfiguration<Selected, PropsType>,\r\n): {\r\n handler: TreeDataController<NodeProps, NodeType>;\r\n selection: Selected;\r\n} {\r\n const handler =\r\n useTreeDataController<TreeDataController<NodeProps, NodeType>>(treeName);\r\n const selection = usePropsSelector<Selected, PropsType>(\r\n handler?.stateKey ?? '__NO__TREE__KEY__',\r\n {\r\n propsStore: handler?.propsStore as unknown as PropsStore<PropsType>,\r\n ...configuration,\r\n },\r\n );\r\n return { selection, handler };\r\n}\r\n\r\nexport default TreeDataController;\r\n","import { BoxProps } from '@apia/theme';\r\nimport { TTreeProps, TDataNode, TId } from './types';\r\nimport TreeDataController, {\r\n getTreeDataController,\r\n} from './TreeDataController';\r\n\r\nexport type TDomProps = Omit<BoxProps, 'as'> & Record<string, unknown>;\r\n\r\nexport function getActiveDescendantName(treeName: string, nodeId: TId) {\r\n return `${treeName}__${nodeId}`;\r\n}\r\n\r\nexport function getDomProps(\r\n treeProps: TTreeProps,\r\n treeName: string,\r\n type: 'tree',\r\n node: TTreeProps,\r\n controller: TreeDataController,\r\n): BoxProps;\r\nexport function getDomProps(\r\n treeProps: TTreeProps,\r\n treeName: string,\r\n type: 'node',\r\n node: TDataNode,\r\n): BoxProps;\r\nexport function getDomProps(\r\n _: TTreeProps,\r\n treeName: string,\r\n type: 'tree' | 'node',\r\n par: TDataNode | TTreeProps,\r\n): TDomProps {\r\n switch (type) {\r\n case 'node': {\r\n const node = par as TDataNode;\r\n const tree = getTreeDataController(treeName);\r\n return {\r\n 'aria-disabled': node.isDisabled,\r\n 'aria-expanded': node.isLeaf ? undefined : !!node.isExpanded,\r\n 'aria-label': node.label,\r\n ...(tree.configuration.current?.disableSelection\r\n ? undefined\r\n : {\r\n 'aria-selected':\r\n node.isSelectable !== false && !node.isDisabled\r\n ? !!node.isSelected\r\n : undefined,\r\n }),\r\n className: node.className,\r\n color: node.color,\r\n 'data-key': node.id,\r\n id: getActiveDescendantName(treeName, node.id),\r\n role: 'treeitem',\r\n title: node.title,\r\n };\r\n }\r\n default: {\r\n const tree = par as TTreeProps;\r\n return {\r\n role: 'tree',\r\n 'aria-multiselectable': tree.isMultiple,\r\n };\r\n }\r\n }\r\n}\r\n","import { IconButton } from '@apia/components';\r\nimport { getVariant } from '@apia/theme';\r\nimport { formatMessage } from '@apia/util';\r\nimport { Box } from '@apia/theme';\r\nimport { LoaderSpinner } from '@apia/components';\r\nconst SearchLabel = ({\r\n isLoading: isSearching,\r\n onDelete,\r\n searchString,\r\n}: {\r\n isLoading: boolean;\r\n onDelete?: () => unknown;\r\n searchString: string;\r\n}) => {\r\n if (!searchString && !isSearching) return null;\r\n return (\r\n <Box className={`tree__searchLabelBox ${isSearching ? 'isLoading' : ''}`}>\r\n {isSearching ? (\r\n <LoaderSpinner className=\"tree__loading\" />\r\n ) : (\r\n <Box as=\"label\" className=\"tree__searchLabel\">\r\n {formatMessage(window.LBL_FILTERING_BY, { TOK1: searchString })}\r\n <IconButton\r\n icon=\"Close\"\r\n aria-label={window.LBL_DELETE_FILTER}\r\n onClick={onDelete}\r\n title={window.LBL_DELETE_FILTER}\r\n size=\"Sm\"\r\n {...getVariant('icon-inherit')}\r\n />\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default SearchLabel;\r\n","import React from 'react';\r\nimport TreeDataController from './TreeDataController';\r\nimport { TDataNode, TTreeProps } from './types';\r\n\r\nexport type TTreeContext<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n> = {\r\n forceUpdate: number;\r\n name: string;\r\n handler: TreeDataController<NodeProps, NodeType>;\r\n treeProps: TTreeProps<NodeProps, NodeType>;\r\n} & Pick<TTreeProps, 'focusGetter'>;\r\n\r\nconst TreeContext = React.createContext({} as TTreeContext);\r\n\r\nexport function useTreeContext<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>() {\r\n const context = React.useContext(TreeContext);\r\n if (!context) throw new Error('There is no tree context');\r\n return context as unknown as TTreeContext<NodeProps, NodeType>;\r\n}\r\n\r\nexport const TreeContextProvider = <\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>({\r\n children,\r\n value,\r\n}: {\r\n children: React.ReactNode;\r\n value: TTreeContext<NodeProps, NodeType>;\r\n}) => {\r\n const Provider = React.useMemo(() => {\r\n return TreeContext.Provider as unknown as React.Provider<\r\n TTreeContext<NodeProps, NodeType>\r\n >;\r\n }, []);\r\n\r\n return <Provider value={value}>{children}</Provider>;\r\n};\r\n\r\nexport default TreeContext;\r\n","import { Icon, TIconName } from '@apia/icons';\r\nimport { TTreeIconRenderer } from '../types';\r\n\r\nconst DefaultIconRenderer: TTreeIconRenderer = (props) => {\r\n return (\r\n <Icon\r\n name={props.icon as TIconName}\r\n title=\"\"\r\n size={props.iconSize ?? 'iconSm'}\r\n className=\"tree__node__icon\"\r\n />\r\n );\r\n};\r\n\r\nexport default DefaultIconRenderer;\r\n","import { Box } from '@apia/theme';\r\nimport { TTreeLabelRenderer } from '../types';\r\n\r\nconst DefaultLabelRenderer: TTreeLabelRenderer = (props) => {\r\n return <Box as=\"span\">{props.label}</Box>;\r\n};\r\n\r\nexport default DefaultLabelRenderer;\r\n","import React from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\nconst Spacer: React.FunctionComponent<{ level: number }> = ({ level }) => {\r\n return (\r\n <>\r\n {Array(level)\r\n .fill('')\r\n .map((_, i) => i)\r\n .map((current) => (\r\n <Box className=\"spacer\" key={current} />\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default Spacer;\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { Box, Spinner } from '@apia/theme';\r\nimport DefaultIconRenderer from './renderers/DefaultIconRenderer';\r\nimport DefaultLabelRenderer from './renderers/DefaultLabelRenderer';\r\nimport Spacer from './renderers/Spacer';\r\nimport { useTreeContext } from './TreeContext';\r\nimport { TDataNode, TId } from './types';\r\nimport { usePropsSelector } from '@apia/util';\r\nimport { Icon } from '@apia/icons';\r\n\r\nconst TreeItemLabel = ({ level, treeKey }: { level: number; treeKey: TId }) => {\r\n const {\r\n handler,\r\n treeProps: { toggleNodesOnLabelClick },\r\n } = useTreeContext();\r\n\r\n const props = usePropsSelector<TDataNode, TDataNode>(treeKey, {\r\n selector: (current) => current,\r\n comparator: (prevProps, newProps) => {\r\n return (\r\n shallowEqual(prevProps, newProps) &&\r\n shallowEqual(prevProps?.children, newProps?.children)\r\n );\r\n },\r\n propsStore: handler.propsStore,\r\n });\r\n\r\n const Renderer = React.useMemo(\r\n () => props.labelRenderer ?? DefaultLabelRenderer,\r\n [props.labelRenderer],\r\n );\r\n\r\n const handleToggle = React.useCallback(() => {\r\n handler.toggleNodeExpandedState(treeKey);\r\n }, [handler, treeKey]);\r\n\r\n const IconRenderer = React.useMemo(() => {\r\n return typeof props.icon === 'string' ? DefaultIconRenderer : props.icon;\r\n }, [props.icon]);\r\n\r\n const onClick = React.useCallback(() => {\r\n if (props.allowToggleExpandedFromLabel !== false)\r\n handler.toggleNodeExpandedState(treeKey);\r\n }, [handler, props.allowToggleExpandedFromLabel, treeKey]);\r\n\r\n return (\r\n <Box\r\n as=\"span\"\r\n className={`tree__nodeItemLabel ${props.isFocused ? 'focus' : ''}`}\r\n >\r\n <Spacer level={level} />\r\n {(props.isLoading ||\r\n (props.isExpanded && props.isLeaf !== true) ||\r\n props.isLeaf === false ||\r\n (props.children?.length ?? 0) > 0 ||\r\n (props.isLeaf === undefined &&\r\n !props.hasLoaded &&\r\n handler.configuration.current?.onLoadData)) && (\r\n <Box className=\"tree__expanderWrapper\">\r\n {props.isLoading ? (\r\n <Spinner sx={{ width: 'iconSm', height: 'iconSm' }} />\r\n ) : (\r\n <Icon\r\n className=\"tree__expandIcon\"\r\n onClick={handleToggle}\r\n name={props.isExpanded ? 'ArrowDownThin' : 'ArrowRightThin'}\r\n title=\"\"\r\n size={20}\r\n />\r\n )}\r\n </Box>\r\n )}\r\n {props.icon && IconRenderer && <IconRenderer {...props} />}\r\n <Box\r\n as=\"span\"\r\n className=\"tree__nodeItemLabelRenderer\"\r\n onClick={toggleNodesOnLabelClick !== false ? onClick : undefined}\r\n >\r\n <Renderer {...props} />\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default React.memo(TreeItemLabel);\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { Box } from '@apia/theme';\r\nimport { getDomProps } from './getDomProps';\r\nimport { useTreeContext } from './TreeContext';\r\nimport TreeItemChildren from './TreeItemChildren';\r\nimport TreeItemLabel from './TreeItemLabel';\r\nimport { TDataNode, TId } from './types';\r\nimport { usePropsSelector } from '@apia/util';\r\n\r\nconst TreeItem = ({ level, treeKey }: { level: number; treeKey: TId }) => {\r\n const { handler, name, forceUpdate, treeProps } = useTreeContext();\r\n\r\n const props = usePropsSelector<TDataNode, TDataNode>(treeKey, {\r\n selector: (current) => current,\r\n comparator: (prevProps, newProps) => {\r\n return (\r\n shallowEqual(prevProps, newProps) &&\r\n shallowEqual(prevProps?.children, newProps?.children)\r\n );\r\n },\r\n propsStore: handler.propsStore,\r\n });\r\n\r\n const nodes = React.useMemo(\r\n () =>\r\n props.children?.map((current) =>\r\n handler.propsStore.getFieldProps(current),\r\n ) ?? [],\r\n [props.children, handler.propsStore],\r\n );\r\n\r\n const domProps = getDomProps(treeProps, name, 'node', props);\r\n\r\n return (\r\n <>\r\n <Box\r\n as=\"li\"\r\n {...domProps}\r\n className={`${domProps.className ?? ''} tree__item`}\r\n >\r\n <TreeItemLabel level={level} treeKey={treeKey} />\r\n {props.isExpanded && (\r\n <TreeItemChildren\r\n forceUpdate={forceUpdate}\r\n role=\"group\"\r\n level={level}\r\n nodes={nodes}\r\n />\r\n )}\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default React.memo(TreeItem);\r\n","import React from 'react';\r\nimport { Box, BoxProps } from '@apia/theme';\r\nimport { useTreeContext } from './TreeContext';\r\nimport TreeItem from './TreeItem';\r\nimport { TDataNode } from './types';\r\n\r\nconst TreeItemChildren = React.forwardRef<\r\n HTMLDivElement,\r\n {\r\n forceUpdate: number;\r\n level: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n nodes: TDataNode<any>[];\r\n } & BoxProps\r\n>(({ level, nodes, forceUpdate, ...props }, ref) => {\r\n const { handler } = useTreeContext();\r\n\r\n return (\r\n <Box ref={ref} as=\"ul\" {...props}>\r\n {nodes?.map((current) => {\r\n const currentProps = handler.propsStore.getFieldProps(current.id);\r\n if (!currentProps) return null;\r\n\r\n return currentProps.isFiltered ? null : (\r\n <TreeItem level={level + 1} key={current.id} treeKey={current.id} />\r\n );\r\n })}\r\n </Box>\r\n );\r\n});\r\n\r\nTreeItemChildren.displayName = 'TreeItemChildren';\r\n\r\nexport default React.memo(TreeItemChildren);\r\n","import { useMount } from 'ahooks';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\nimport React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport TreeDataController from './TreeDataController';\r\nimport { TTreeProps, TDataNode, TId } from './types';\r\nimport { selectAllNodesBetweenTwoNodes } from './util';\r\nimport { getSpecificParent, useLatest, usePropsSelector } from '@apia/util';\r\n\r\ninterface IUseTreeData<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n> {\r\n name: string;\r\n treeProps: TTreeProps<NodeProps, NodeType>;\r\n}\r\n\r\nexport default function useTreeData<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>({ name, treeProps }: IUseTreeData<NodeProps, NodeType>) {\r\n const props = useLatest(treeProps);\r\n const handler = React.useMemo(\r\n () =>\r\n props?.current.controller ??\r\n new TreeDataController<NodeProps, NodeType>(name, props),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n );\r\n\r\n useMount(() => {\r\n treeProps?.initialNodes?.forEach((current) => handler.append(current));\r\n });\r\n\r\n const data = usePropsSelector<{ children: number[]; forceUpdate: number }>(\r\n 'root',\r\n {\r\n comparator: shallowEqual,\r\n propsStore: handler.propsStore as any,\r\n selector: (current) => ({\r\n children: (current.children as any) ?? [],\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\r\n forceUpdate: (current as any).forceUpdate as number,\r\n }),\r\n },\r\n );\r\n\r\n const keyHandlerId = React.useMemo(() => `keyHandler${uniqueId()}`, []);\r\n const keyHandlerRef = React.useRef<HTMLDivElement | null>(null);\r\n\r\n const focusOnNode = React.useCallback(\r\n (key: TId, retry = 3) => {\r\n if (keyHandlerRef.current) {\r\n const focusElement = keyHandlerRef.current.querySelector(\r\n `[data-key=\"${key}\"]`,\r\n ) as HTMLElement;\r\n keyHandlerRef.current?.focus();\r\n\r\n if (focusElement) {\r\n const actualFocusElement = (\r\n treeProps.focusGetter ??\r\n ((liElement: HTMLElement) =>\r\n liElement.querySelector(\r\n ':scope > .tree__nodeItemLabel',\r\n ) as HTMLElement)\r\n )(focusElement);\r\n\r\n const nodeProps = handler.propsStore.getFieldProps(key);\r\n\r\n if (!treeProps.focusGetter || !nodeProps.labelRenderer)\r\n actualFocusElement.classList.add('focused');\r\n actualFocusElement.scrollIntoView({\r\n inline: 'nearest',\r\n block: 'nearest',\r\n });\r\n } else if (retry > 0) setTimeout(() => focusOnNode(key, retry - 1), 30);\r\n }\r\n },\r\n [handler.propsStore, treeProps.focusGetter],\r\n );\r\n\r\n React.useEffect(() => {\r\n const unsuscribe1 = handler.on('mustFocus', (node) => focusOnNode(node));\r\n const unsuscribe2 = handler.on('onArrowUpOnFirstElement', () =>\r\n treeProps.onArrowUpOnFirstElement?.(),\r\n );\r\n\r\n return () => {\r\n unsuscribe1();\r\n unsuscribe2();\r\n };\r\n }, [focusOnNode, handler, treeProps]);\r\n\r\n return {\r\n data,\r\n handler,\r\n keyHandler: {\r\n id: keyHandlerId,\r\n onKeyDown: React.useCallback(\r\n (ev: React.KeyboardEvent) => {\r\n if (ev.key === 'Enter') {\r\n const key = handler.state.focusedNode;\r\n if (key) {\r\n const nodeProps = handler.propsStore.getFieldProps(key);\r\n treeProps.onNodeClick?.(ev, nodeProps);\r\n }\r\n } else {\r\n handler.handleKey(ev);\r\n }\r\n },\r\n [handler, treeProps],\r\n ),\r\n onMouseDown: React.useCallback(\r\n (ev: React.MouseEvent) => {\r\n const previousFocused = handler.state.focusedNode;\r\n if (\r\n previousFocused !== null &&\r\n ev.shiftKey &&\r\n handler.configuration.current?.isMultiple\r\n )\r\n ev.preventDefault();\r\n },\r\n [handler.configuration, handler.state.focusedNode],\r\n ),\r\n onClick: React.useCallback(\r\n (ev: React.MouseEvent) => {\r\n if (\r\n getSpecificParent(ev.target as HTMLElement, (current) =>\r\n current.classList.contains('tree__expandIcon'),\r\n )\r\n )\r\n return;\r\n\r\n const node = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => !!current.getAttribute('data-key'),\r\n );\r\n if (node) {\r\n const previousFocused = handler.state.focusedNode;\r\n const key = node.getAttribute('data-key') as string;\r\n\r\n const nodeProps = handler.propsStore.getFieldProps(key);\r\n treeProps.onNodeClick?.(ev, nodeProps);\r\n\r\n if (\r\n previousFocused !== null &&\r\n ev.shiftKey &&\r\n handler.configuration.current?.isMultiple\r\n ) {\r\n selectAllNodesBetweenTwoNodes(\r\n handler,\r\n previousFocused,\r\n key,\r\n true,\r\n );\r\n } else {\r\n handler.setFocusedNode(key);\r\n handler.setSelectedNodesByClickEvent(ev);\r\n }\r\n\r\n if (key) focusOnNode(key);\r\n }\r\n },\r\n [focusOnNode, handler, treeProps],\r\n ),\r\n ref: keyHandlerRef,\r\n },\r\n };\r\n}\r\n","import { useDebounceFn, useMount, useUnmount } from 'ahooks';\r\nimport React, { memo } from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { Box } from '@apia/theme';\r\nimport { getActiveDescendantName } from './getDomProps';\r\nimport SearchLabel from './SearchLabel';\r\nimport { TTreeContext, TreeContextProvider } from './TreeContext';\r\nimport { useTreeSelector } from './TreeDataController';\r\nimport TreeItemChildren from './TreeItemChildren';\r\nimport { TDataNode, TId, TTreeDataControllerState, TTreeProps } from './types';\r\nimport useTreeData from './useTreeData';\r\nimport { unfilterNodes, matchNodesAgainstString } from './util';\r\nimport { PropsStore, usePropsSelector } from '@apia/util';\r\nimport { getVariant } from '@apia/theme';\r\n\r\nconst Tree = <\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>(\r\n props: TTreeProps<NodeProps, NodeType>,\r\n) => {\r\n const { data, handler, keyHandler } = useTreeData<NodeProps, NodeType>({\r\n name: props.name,\r\n treeProps: { ...props },\r\n });\r\n\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const [currentSearchString, setCurrentSearchString] = React.useState('');\r\n const isTreeLoading = useTreeSelector(handler, {\r\n selector: (current) => current.isLoading,\r\n });\r\n React.useEffect(() => {\r\n setIsLoading(isTreeLoading);\r\n }, [isTreeLoading]);\r\n\r\n const search = useDebounceFn(\r\n () => {\r\n if (props.filterString === undefined) return;\r\n setIsLoading(true);\r\n React.startTransition(() => {\r\n setCurrentSearchString(props.filterString as string);\r\n });\r\n if (props.filterString !== undefined && props.filterString !== '') {\r\n unfilterNodes(handler);\r\n matchNodesAgainstString(handler, props.filterString);\r\n handler.forceEmitUpdate();\r\n } else {\r\n unfilterNodes(handler);\r\n handler.forceEmitUpdate();\r\n }\r\n setTimeout(() => setIsLoading(false), 0);\r\n },\r\n { wait: 200 },\r\n );\r\n\r\n React.useEffect(() => {\r\n search.run();\r\n if (!props.filterString) search.flush();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [props.filterString]);\r\n\r\n usePropsSelector<TTreeDataControllerState, TTreeDataControllerState>(\r\n handler.stateKey,\r\n {\r\n propsStore:\r\n handler.propsStore as unknown as PropsStore<TTreeDataControllerState>,\r\n selector: (current) => current,\r\n comparator: (prevProps, newProps) => {\r\n if (\r\n props.onSelect &&\r\n !shallowEqual(prevProps?.selectedNodes, newProps?.selectedNodes)\r\n ) {\r\n props.onSelect(\r\n (newProps?.selectedNodes ?? []).map((currentId) =>\r\n handler.propsStore.getFieldProps(currentId),\r\n ),\r\n );\r\n }\r\n return true;\r\n },\r\n },\r\n );\r\n\r\n const { focusedNode } = usePropsSelector<\r\n { focusedNode: TId | null },\r\n TTreeDataControllerState\r\n >(handler.stateKey, {\r\n propsStore:\r\n handler.propsStore as unknown as PropsStore<TTreeDataControllerState>,\r\n selector: (current) => ({\r\n focusedNode: current.focusedNode,\r\n }),\r\n });\r\n\r\n useMount(() => {\r\n if (props.getHandler) props.getHandler(handler);\r\n });\r\n\r\n useUnmount(() => handler.destructor());\r\n\r\n const contextValue = React.useMemo(() => {\r\n const actualValue: TTreeContext<NodeProps, NodeType> = {\r\n handler,\r\n name: props.name,\r\n forceUpdate: data.forceUpdate,\r\n focusGetter: props.focusGetter,\r\n treeProps: props,\r\n };\r\n return actualValue;\r\n }, [handler, props, data.forceUpdate]);\r\n\r\n return (\r\n <TreeContextProvider value={contextValue}>\r\n <Box\r\n className={`tree ${props.className ?? ''}`}\r\n {...getVariant(props.variant ?? 'layout.common.trees.primary')}\r\n >\r\n <SearchLabel\r\n isLoading={props.isLoading ?? isLoading}\r\n onDelete={props.onDeleteFilterString}\r\n searchString={props.hideSearchLabel ? '' : currentSearchString}\r\n />\r\n <TreeItemChildren\r\n aria-activedescendant={\r\n focusedNode !== null\r\n ? getActiveDescendantName(props.name, focusedNode)\r\n : undefined\r\n }\r\n aria-label={props.label}\r\n as=\"ul\"\r\n forceUpdate={data.forceUpdate}\r\n level={-1}\r\n nodes={React.useMemo(\r\n () =>\r\n data.children.map((current) =>\r\n handler.propsStore.getFieldProps(current),\r\n ),\r\n [data.children, handler.propsStore],\r\n )}\r\n role=\"tree\"\r\n tabIndex={0}\r\n {...keyHandler}\r\n />\r\n </Box>\r\n </TreeContextProvider>\r\n );\r\n};\r\n\r\nexport default memo(Tree) as typeof Tree;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { OOTree } from '.';\r\nimport { TOOTreeNodeProps, TSortOOTreeChildren } from './types';\r\nimport { TDataNode, TId } from '../types';\r\n\r\nexport function isOOTreeNode<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n>(\r\n element: OOTreeNode<NodeProps> | TDataNode<NodeProps>,\r\n): element is OOTreeNode<NodeProps> {\r\n return typeof (element as OOTreeNode).attachToTree === 'function';\r\n}\r\n\r\nexport class OOTreeNode<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n> {\r\n id = '';\r\n prefix = '';\r\n\r\n constructor(\r\n protected tree: OOTree<NodeProps>,\r\n protected parent: OOTreeNode<NodeProps> | TDataNode<NodeProps> | null,\r\n protected props: TOOTreeNodeProps<NodeProps>,\r\n ) {\r\n if (parent) {\r\n if (isOOTreeNode<NodeProps>(parent)) {\r\n /**\r\n * Cada noto contará con un prefijo en su identificador de forma que\r\n * dos nodos en distintas rutas puedan compartir id.\r\n */\r\n Object.assign(\r\n this,\r\n this.tree.calculateNodePrefix(props.id, parent?.prefix),\r\n );\r\n } else {\r\n this.prefix = props.nodeProps.__prefix as string;\r\n this.id = String(props.id);\r\n }\r\n }\r\n }\r\n\r\n attachToTree() {\r\n const parentId = this.parent?.id ?? undefined;\r\n this.tree.getController().append({\r\n ...this.props,\r\n id: this.id,\r\n label: this.props.label,\r\n parentId,\r\n nodeProps: {\r\n ...this.props.nodeProps,\r\n __prefix: this.prefix,\r\n __id: this.props.id,\r\n },\r\n });\r\n }\r\n\r\n append(props: TOOTreeNodeProps<NodeProps>) {\r\n const newNode = new OOTreeNode(this.tree, this, props);\r\n\r\n newNode.attachToTree();\r\n\r\n return newNode;\r\n }\r\n\r\n collapse() {\r\n this.tree\r\n .getController()\r\n .setExpandedNodes(\r\n this.tree\r\n .getController()\r\n .state.expandedNodes.filter(\r\n (current) => current !== this.getProps().id,\r\n ),\r\n );\r\n }\r\n\r\n expand() {\r\n this.tree\r\n .getController()\r\n .setExpandedNodes([\r\n ...this.tree.getController().state.expandedNodes,\r\n this.getProps().id,\r\n ]);\r\n\r\n (this.parent as OOTreeNode).expand?.();\r\n }\r\n\r\n focus(expand?: boolean) {\r\n this.tree.getController().setFocusedNode(this.getProps().id);\r\n\r\n if (expand) {\r\n this.expand();\r\n }\r\n }\r\n\r\n getAll() {\r\n return this.tree\r\n .getController()\r\n .propsStore.getFieldProps(this.id)\r\n .children.map((current) => {\r\n return () => {\r\n return this.#getByAbsoluteId(String(current));\r\n };\r\n });\r\n }\r\n\r\n #getByAbsoluteId = (id: string) => {\r\n const props = this.tree.getController().propsStore.getFieldProps(id);\r\n\r\n if (props === undefined) return undefined;\r\n\r\n return new OOTreeNode(this.tree, props, props);\r\n };\r\n\r\n getById(id: TId) {\r\n const { id: actualId } = this.tree.calculateNodePrefix(id, this.prefix);\r\n const props = this.tree.getController().propsStore.getFieldProps(actualId);\r\n\r\n if (props === undefined) return undefined;\r\n\r\n return new OOTreeNode(this.tree, props, props);\r\n }\r\n\r\n getOriginalId() {\r\n return this.getProps().nodeProps.__id as string;\r\n }\r\n\r\n getParent() {\r\n if (!this.parent) return null;\r\n\r\n const props = this.tree\r\n .getController()\r\n .propsStore.getFieldProps(this.parent.id);\r\n\r\n const parent = props.parentId;\r\n const parentProps = this.tree\r\n .getController()\r\n .propsStore.getFieldProps(parent);\r\n\r\n return new OOTreeNode(this.tree, parentProps, props);\r\n }\r\n\r\n getProps() {\r\n return this.tree.getController().propsStore.getFieldProps(this.id);\r\n }\r\n\r\n remove() {\r\n this.tree.getController().remove(this.id, true);\r\n }\r\n\r\n sort(sortFunction: TSortOOTreeChildren<NodeProps>) {\r\n const children = this.getProps()\r\n .children.map((current) =>\r\n this.tree.getController().propsStore.getFieldProps(current),\r\n )\r\n .sort((a, b) => sortFunction(a, b))\r\n .map((current) => current.id);\r\n this.tree.getController().propsStore.updateField(this.id, { children });\r\n }\r\n\r\n update(props: Partial<Omit<TOOTreeNodeProps<NodeProps>, 'id'>>) {\r\n this.tree.getController().propsStore.updateField(this.id, props);\r\n }\r\n}\r\n","import { OOTree } from '.';\r\nimport { OOTreeNode } from './OOTreeNode';\r\nimport { TOOTreeNodeProps } from './types';\r\n\r\nexport class OOTreeChildren<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n> extends OOTreeNode<NodeProps> {\r\n constructor(protected tree: OOTree<NodeProps, any>) {\r\n super(tree, null, {} as TOOTreeNodeProps<NodeProps>);\r\n\r\n this.prefix = 'c';\r\n }\r\n\r\n /**\r\n * Se sobreescribe para evitar problemas\r\n */\r\n expand() {}\r\n}\r\n","import { EventEmitter, TId } from '@apia/util';\r\nimport TreeDataController from '../TreeDataController';\r\nimport Tree from '../Tree';\r\nimport { PrefixMapEntry } from './types';\r\nimport { OOTreeChildren } from './OOTreeChildren';\r\nimport { TTreeProps } from '../types';\r\n\r\nexport class OOTree<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n Events extends Record<string, unknown> = Record<string, unknown>,\r\n> extends EventEmitter<Events> {\r\n constructor(public props: TTreeProps<NodeProps>) {\r\n super();\r\n\r\n this.#makeHandler();\r\n }\r\n\r\n /**\r\n * Accessors\r\n */\r\n #children: OOTreeChildren<NodeProps> | null = null;\r\n\r\n #controller: TreeDataController<NodeProps> =\r\n {} as TreeDataController<NodeProps>;\r\n\r\n getChildren = () => {\r\n if (this.#children === null)\r\n throw new Error(\r\n 'Children was not assigned yet, maybe you forgot to listen to onReady event on OOTree component.',\r\n );\r\n\r\n return this.#children;\r\n };\r\n\r\n getController = () => {\r\n if (this.#controller === null)\r\n throw new Error(\r\n 'Controller was not assigned yet, maybe you forgot to listen to onReady event on OOTree component.',\r\n );\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const c = this;\r\n\r\n return new Proxy(this.#controller, {\r\n get(target, prop) {\r\n if (prop === 'removeAll') {\r\n return () => {\r\n c.prefixesMap = {};\r\n c.#controller?.removeAll();\r\n };\r\n }\r\n\r\n return target[prop as keyof typeof target];\r\n },\r\n });\r\n };\r\n\r\n /**\r\n * Component\r\n */\r\n #makeHandler = () => {\r\n this.#controller = new TreeDataController<NodeProps>(this.props.name, {\r\n current: this.props,\r\n });\r\n this.#children = new OOTreeChildren<NodeProps>(this);\r\n };\r\n\r\n Component = (props: Partial<TTreeProps<NodeProps>>) => {\r\n return (\r\n <Tree<NodeProps>\r\n controller={this.#controller}\r\n {...this.props}\r\n {...props}\r\n />\r\n );\r\n };\r\n\r\n /**\r\n * Data manipulation\r\n */\r\n private prefixJoinCharacter = '$$';\r\n private prefixWithIdJoinCharacter = '__';\r\n\r\n protected prefixesMap: Record<string, PrefixMapEntry> = {};\r\n\r\n calculateDepth = (id: TId) => {\r\n return [...String(id).matchAll(/\\$\\$/g)].length;\r\n };\r\n\r\n /**\r\n * Calcula el prefijo de un nodo que se está agregando al árbol evitando\r\n * colisiones. Ese prefijo estará asociado a cada nodo y se utilizará para dar\r\n * nombres únicos a sus hijos, no para el nodo en sí. Entonces, cada vez que\r\n * se construye un nodo, se le asigna un prefijo considerando el prefijo de su\r\n * padre, pero su nombre se hace a partir del prefijo del padre y su id.\r\n */\r\n calculateNodePrefix = (id: TId, prefix?: string) => {\r\n const expectedPrefix = [prefix, String(id).charAt(0)]\r\n .filter(Boolean)\r\n .join(this.prefixJoinCharacter);\r\n\r\n let i = 1;\r\n let actualPrefix = expectedPrefix;\r\n while (this.prefixesMap[actualPrefix] !== undefined) {\r\n actualPrefix = `${expectedPrefix}${i++}`;\r\n }\r\n\r\n this.prefixesMap[actualPrefix] = {\r\n nodeId: id,\r\n prefix: actualPrefix,\r\n };\r\n\r\n const data = {\r\n prefix: actualPrefix,\r\n id: [[prefix].filter(Boolean).join(this.prefixJoinCharacter), id]\r\n .filter(Boolean)\r\n .join(this.prefixWithIdJoinCharacter),\r\n };\r\n return data;\r\n };\r\n}\r\n"],"names":["nodeProps","__publicField","shallowEqual","TreeItemLabel","TreeItemChildren","TreeItem","useMount","__privateAdd","__privateGet","Tree"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/util.ts","../src/TreeDataController.ts","../src/getDomProps.ts","../src/SearchLabel.tsx","../src/TreeContext.tsx","../src/renderers/DefaultIconRenderer.tsx","../src/renderers/DefaultLabelRenderer.tsx","../src/renderers/Spacer.tsx","../src/TreeItemLabel.tsx","../src/TreeItem.tsx","../src/TreeItemChildren.tsx","../src/useTreeData.ts","../src/Tree.tsx","../src/OOTree/OOTreeNode.ts","../src/OOTree/OOTreeChildren.ts","../src/OOTree/index.tsx"],"sourcesContent":["import TreeDataController from './TreeDataController';\nimport { TDataNode, TId } from './types';\n\nexport const getLastVisibleChild: <\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n>(\n handler: TreeDataController<NodeProps, NodeType>,\n id: TId,\n avoidFiltered?: boolean,\n) => TId | null = (handler, id, avoidFiltered) => {\n const nodeProps = handler.propsStore.getFieldProps(id);\n if (\n (id !== 'root' && (nodeProps.isDisabled || !nodeProps.isExpanded)) ||\n nodeProps.children.length === 0\n )\n return null;\n\n for (let i = nodeProps.children.length - 1; i >= 0; i--) {\n const currentId = nodeProps.children[i];\n const currentProps = handler.propsStore.getFieldProps(currentId);\n if (!avoidFiltered || !currentProps.isFiltered) {\n const lastChildrenLastChildren = getLastVisibleChild(\n handler,\n currentId,\n avoidFiltered,\n );\n return lastChildrenLastChildren !== null\n ? lastChildrenLastChildren\n : currentId;\n }\n }\n return null;\n};\n\nexport const getPreviousChild: <\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n>(\n handler: TreeDataController<NodeProps, NodeType>,\n id: TId,\n avoidFiltered?: boolean,\n) => TId | null = (handler, id, avoidFiltered) => {\n const nodeProps = handler.propsStore.getFieldProps(id);\n const fatherProps = handler.propsStore.getFieldProps(nodeProps.parentId);\n let childPosition =\n fatherProps.children?.findIndex((current) => current === nodeProps.id) ??\n -1;\n\n while (childPosition > 0) {\n const prevSibling = handler.propsStore.getFieldProps(\n fatherProps.children[childPosition - 1],\n );\n const prevSiblingLastChild = getLastVisibleChild(\n handler,\n prevSibling.id,\n avoidFiltered,\n );\n if (prevSiblingLastChild !== null) return prevSiblingLastChild;\n if (!avoidFiltered || !prevSibling.isFiltered) return prevSibling.id;\n\n childPosition--;\n }\n if (nodeProps.parentId === 'root') return null;\n return nodeProps.parentId;\n};\n\nexport const getFirstNonFilteredChild: <\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n>(\n handler: TreeDataController<NodeProps, NodeType>,\n id: TId,\n) => null | TId = (handler, id) => {\n const nodeProps = handler.propsStore.getFieldProps(id);\n // eslint-disable-next-line no-restricted-syntax\n for (const child of nodeProps.children) {\n if (!handler.propsStore.getFieldProps(child).isFiltered) return child;\n }\n return null;\n};\n\nexport const getNextChild: <\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n>(\n handler: TreeDataController<NodeProps, NodeType>,\n id: TId,\n avoidChildren?: boolean,\n avoidFiltered?: boolean,\n) => TId | null = (handler, id, avoidChildren, avoidFiltered) => {\n const nodeProps = handler.propsStore.getFieldProps(id);\n const fatherProps = handler.propsStore.getFieldProps(nodeProps.parentId);\n let childPosition =\n fatherProps.children?.findIndex((current) => current === nodeProps.id) ??\n Infinity;\n if (!avoidChildren && nodeProps.isExpanded) {\n if (!avoidFiltered && nodeProps.children.length > 0)\n return nodeProps.children[0];\n\n const firstNonFilteredChild = getFirstNonFilteredChild(\n handler,\n nodeProps.id,\n );\n if (firstNonFilteredChild !== null) return firstNonFilteredChild;\n }\n while (childPosition < fatherProps.children.length - 1) {\n const nextSibling = fatherProps.children[childPosition + 1];\n if (\n !avoidFiltered ||\n !handler.propsStore.getFieldProps(nextSibling).isFiltered\n )\n return nextSibling;\n childPosition++;\n }\n if (nodeProps.parentId === 'root') return null;\n return getNextChild(handler, fatherProps.id, true, avoidFiltered);\n};\n\nexport const getNextNodeWithKey: <\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n>(\n handler: TreeDataController<NodeProps, NodeType>,\n id: TId,\n firstKey: string,\n avoidFiltered?: boolean,\n) => TId | null = (handler, id, firstKey, avoidFiltered) => {\n let nextChildWithKey: TId | null = id;\n do {\n nextChildWithKey = getNextChild(\n handler,\n nextChildWithKey,\n false,\n avoidFiltered,\n );\n if (nextChildWithKey !== null) {\n const nodeProps = handler.propsStore.getFieldProps(nextChildWithKey);\n if (\n (!nodeProps.isFiltered || !avoidFiltered) &&\n nodeProps.label.toUpperCase().startsWith(firstKey.toUpperCase())\n )\n return nextChildWithKey;\n }\n } while (nextChildWithKey !== null);\n\n const nodeProps = handler.propsStore.getFieldProps(id);\n const positionInParent = handler.propsStore\n .getFieldProps(nodeProps.parentId)\n .children.findIndex((current) => current === id);\n\n if (nodeProps.parentId !== 'root' || positionInParent > 0) {\n const [firstChildOfTree] =\n handler.propsStore.getFieldProps('root').children;\n const firstChildProps = handler.propsStore.getFieldProps(firstChildOfTree);\n\n if (\n firstChildOfTree &&\n (!avoidFiltered || !firstChildProps.isFiltered) &&\n firstChildProps.label.toUpperCase().startsWith(firstKey.toUpperCase())\n )\n return firstChildOfTree;\n\n nextChildWithKey = firstChildOfTree;\n do {\n nextChildWithKey = getNextChild(\n handler,\n nextChildWithKey,\n false,\n avoidFiltered,\n );\n if (nextChildWithKey) {\n const currentNodeProps =\n handler.propsStore.getFieldProps(nextChildWithKey);\n if (\n (!avoidFiltered || !currentNodeProps.isFiltered) &&\n currentNodeProps.label\n .toUpperCase()\n .startsWith(firstKey.toUpperCase())\n )\n return nextChildWithKey;\n }\n } while (nextChildWithKey !== id && nextChildWithKey !== null);\n }\n\n return null;\n};\n\nexport const getNodePath: <\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n>(\n handler: TreeDataController<NodeProps, NodeType>,\n nodeId: TId,\n) => TId[] = (handler, nodeId) => {\n const path: TId[] = [nodeId];\n let currentStep: TId = nodeId;\n do {\n currentStep = handler.propsStore.getFieldProps(currentStep).parentId;\n path.unshift(currentStep);\n } while (currentStep !== 'root');\n return path;\n};\n\nexport const getCommonAncestor: <\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n>(\n handler: TreeDataController<NodeProps, NodeType>,\n oneNodeId: TId,\n anotherNodeId: TId,\n) => {\n commonAncestor: TId;\n oneNodeAncestorChild: TId;\n anotherNodeAncestorChild: TId;\n} | null = (handler, oneNodeId, anotherNodeId) => {\n const oneNodePath = getNodePath(handler, oneNodeId);\n const anotherNodePath = getNodePath(handler, anotherNodeId);\n\n for (let i = oneNodePath.length - 1; i >= 0; i--) {\n const anotherNodeIndex = anotherNodePath.indexOf(oneNodePath[i]);\n if (anotherNodeIndex !== -1)\n return {\n commonAncestor: oneNodePath[i],\n oneNodeAncestorChild: oneNodePath[i + 1],\n anotherNodeAncestorChild: anotherNodePath[anotherNodeIndex + 1],\n };\n }\n\n console.warn(\n 'This point should have never been reached since the root node is common to all nodes',\n { oneNodeId, anotherNodeId, oneNodePath, anotherNodePath },\n );\n return null;\n};\n\nexport const unfilterNodes: <\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n>(\n handler: TreeDataController<NodeProps, NodeType>,\n) => void = (handler) => {\n handler.state.filteredNodes.forEach((current) => {\n handler.propsStore.updateField(\n current,\n { isFiltered: false },\n { noEmit: true },\n );\n });\n\n const firstChild = handler.propsStore.getFieldProps('root').children[0];\n if (firstChild) handler.setFocusedNode(firstChild);\n handler.setState({ filteredNodes: [] });\n};\n\nexport const matchNodesAgainstString: <\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n>(\n handler: TreeDataController<NodeProps, NodeType>,\n searchString: string,\n nodeId?: TId,\n) => boolean = (handler, searchString, nodeId = 'root') => {\n let hasMatched = false;\n let matchNode: TId | null = null;\n const nodeProps = handler.propsStore.getFieldProps(nodeId);\n if (\n nodeId !== 'root' &&\n nodeProps.label.match(new RegExp(searchString, 'i'))\n ) {\n handler.propsStore.updateField(nodeId, { isFiltered: false });\n hasMatched = true;\n matchNode = nodeProps.id;\n handler.setState({\n filteredNodes: handler.state.filteredNodes.filter(\n (current) => current !== nodeId,\n ),\n });\n }\n let hasChildrenMatched = false;\n nodeProps.children.forEach((current) => {\n hasChildrenMatched =\n matchNodesAgainstString(handler, searchString, current) || hasMatched;\n hasMatched = hasChildrenMatched || hasMatched;\n if (hasMatched && !matchNode) matchNode = current;\n });\n if (hasChildrenMatched) {\n handler.propsStore.updateField(nodeId, { isExpanded: true });\n if (hasMatched && !matchNode) matchNode = nodeId;\n }\n if (!hasMatched) {\n handler.propsStore.updateField(\n nodeId,\n { isFiltered: true },\n { noEmit: true },\n );\n handler.setState({\n filteredNodes: [...handler.state.filteredNodes, nodeId],\n });\n }\n if (matchNode !== null) handler.setFocusedNode(matchNode);\n return hasMatched;\n};\n\nexport const selectAllNodesBetweenTwoNodes: <\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n>(\n handler: TreeDataController<NodeProps, NodeType>,\n oneNodeId: TId,\n anotherNodeId: TId,\n avoidFiltered?: boolean,\n) => void = (handler, oneNodeId, anotherNodeId, avoidFiltered) => {\n const commonAncestorData = getCommonAncestor(\n handler,\n oneNodeId,\n anotherNodeId,\n );\n if (commonAncestorData) {\n const { anotherNodeAncestorChild, commonAncestor, oneNodeAncestorChild } =\n commonAncestorData;\n const ancestorProps = handler.propsStore.getFieldProps(commonAncestor);\n const oneNodePosition = ancestorProps.children.findIndex(\n (current) => current === oneNodeAncestorChild,\n );\n const anotherNodePosition = ancestorProps.children.findIndex(\n (current) => current === anotherNodeAncestorChild,\n );\n\n let currentId: TId | null =\n oneNodePosition >= anotherNodePosition ? anotherNodeId : oneNodeId;\n const lastNodeId =\n oneNodePosition < anotherNodePosition ? anotherNodeId : oneNodeId;\n handler.toggleNodeSelectedState(currentId, true);\n do {\n currentId = getNextChild(handler, currentId, false, avoidFiltered);\n if (currentId !== null) handler.toggleNodeSelectedState(currentId, true);\n } while (currentId !== lastNodeId && currentId !== null);\n }\n};\n","/* eslint-disable @typescript-eslint/no-dynamic-delete */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable max-classes-per-file */\nimport React, { RefObject, useEffect, useState } from 'react';\nimport {\n TDataNode,\n TDataNodeContainer,\n TId,\n TTreeDataControllerConfig,\n TTreeDataControllerState,\n} from './types';\nimport {\n getFirstNonFilteredChild,\n getLastVisibleChild,\n getNextChild,\n getNextNodeWithKey,\n getPreviousChild,\n selectAllNodesBetweenTwoNodes,\n} from './util';\nimport {\n EventEmitter,\n PropsStore,\n TModify,\n TRequireOnlyOne,\n addBoundary,\n getSpecificParent,\n TUpdateFieldConfiguration,\n TPropsConfiguration,\n usePropsSelector,\n useMount,\n useLatest,\n shallowEqual,\n} from '@apia/util';\n\nconst trees: Record<string, TreeDataController> = {};\nconst treesRecordEmitter = new (class TreesRecordEmitter extends EventEmitter<{\n addController: { name: string; controller: TreeDataController };\n}> {\n emit<K extends 'addController'>(\n eventName: K,\n params: {\n addController: {\n name: string;\n controller: TreeDataController;\n };\n }[K],\n ): void {\n super.emit(eventName, params);\n\n trees[params.name] = params.controller;\n }\n})();\n\nexport function useTreeDataController<\n TreeType extends TreeDataController<any, any> = TreeDataController<any, any>,\n>(name: string) {\n const [controller, setDataController] = useState<TreeDataController>(\n trees[name],\n );\n\n useEffect(() => {\n if (trees[name] !== controller) setDataController(trees[name]);\n\n return treesRecordEmitter.on('addController', (ev) => {\n if (ev.name === name) setDataController(ev.controller);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return controller as unknown as TreeType;\n}\n\nexport function getTreeDataController<TreeType = TreeDataController>(\n name: string,\n) {\n return trees[name] as unknown as TreeType;\n}\n\nexport function deleteTreeDataController(name: string) {\n delete trees[name];\n}\n\nclass TreeDataController<\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n> extends EventEmitter<{\n onArrowUpOnFirstElement: boolean;\n expandNode: NodeType;\n mustFocus: TId;\n stateUpdate: null;\n}> {\n _configuration: RefObject<TTreeDataControllerConfig<NodeProps, NodeType>>;\n\n get configuration() {\n return { ...this._configuration };\n }\n\n hasApendedFirstChild = false;\n\n /**\n * Este array se usa para conocer los padres faltantes al momento de la\n * construcción del árbol, de forma de optimizar el proceso\n */\n missingParents: TId[] = [];\n\n nonEmittedUpdates: TId[] = [];\n\n get state() {\n return this.propsStore.getFieldProps<TTreeDataControllerState>(\n this.stateKey,\n );\n }\n\n stateKey = 'treeState';\n\n get stateStore() {\n return this.propsStore as unknown as PropsStore<TTreeDataControllerState>;\n }\n\n constructor(\n public name: string,\n configuration: RefObject<\n Partial<TTreeDataControllerConfig<NodeProps, NodeType>>\n >,\n public propsStore = new PropsStore<NodeType>({\n logCommands: {\n propsStore: `treeProps_${name}`,\n propsLog: `treeLog_${name}`,\n propsSuscriptors: `propsSuscriptors_${name}`,\n updateProp: `updateProp_${name}`,\n },\n }),\n ) {\n super();\n\n this._configuration = (configuration ?? {\n current: { emitUpdates: true },\n }) as RefObject<Partial<TTreeDataControllerConfig<NodeProps, NodeType>>>;\n\n (this._configuration.current as TTreeDataControllerConfig).emitUpdates =\n (this._configuration.current as TTreeDataControllerConfig).emitUpdates ??\n true;\n\n this.setState(this.getInitialState());\n treesRecordEmitter.emit('addController', {\n name,\n controller: this as unknown as TreeDataController,\n });\n this.initRoot();\n }\n\n destructor() {\n this.propsStore.destructor();\n }\n\n append(\n node: Omit<\n TModify<\n NodeType,\n { children?: NodeType['children']; parentId?: NodeType['parentId'] }\n >,\n 'nodeProps' | 'actualParentId'\n > &\n Partial<Pick<NodeType, 'nodeProps'>>,\n ) {\n const newNode = { ...(node as NodeType), nodeProps: node.nodeProps ?? {} };\n\n // Se busca el padre, si el padre no existe se agrega a la raíz\n let father: TId;\n if (\n newNode.parentId !== undefined &&\n this.propsStore.getFieldProps(newNode.parentId)?.children\n ) {\n father = newNode.parentId;\n } else {\n father = 'root';\n if (newNode.parentId) this.missingParents.push(newNode.parentId);\n newNode.actualParentId = newNode.parentId;\n newNode.parentId = 'root';\n }\n\n this.propsStore.updateField(\n newNode.id,\n {\n ...newNode,\n children: newNode.children ?? [],\n },\n { isUrgent: true },\n );\n this.setState({ length: this.state.length + 1 });\n\n // Se buscan elementos que estén en la raíz y sean hijos del nodo que se\n // está agregando. De esta forma al crear el árbol nos aseguramos que ningún\n // nodo quede afuera y evitamos iteraciones innecesarias\n if (this.missingParents.includes(newNode.id)) {\n this.propsStore.getFieldProps('root').children.forEach((currentChild) => {\n if (\n this.propsStore.getFieldProps(currentChild).actualParentId ===\n newNode.id\n ) {\n this.move(currentChild, newNode.id);\n }\n });\n this.missingParents = this.missingParents.filter(\n (current) => current !== newNode.id,\n );\n }\n\n // Se agrega el nodo a los hijos del padre\n this.propsStore.updateField(\n father,\n {\n children: [\n ...this.propsStore.getFieldProps(father).children,\n newNode.id,\n ],\n hasLoaded: true,\n },\n { noEmit: this._configuration.current?.emitUpdates === false },\n );\n\n if (this._configuration.current?.emitUpdates === false)\n this.nonEmittedUpdates.push(father);\n\n if (!this.hasApendedFirstChild) {\n this.hasApendedFirstChild = true;\n this.setFocusedNode(newNode.id, true);\n }\n\n if (newNode.isExpanded) this.toggleNodeExpandedState(newNode.id, true);\n }\n\n /**\n * Cuando se quieren agregar muchos nodos, es conveniente llamar primero al\n * método batchInit y luego de finalizar, al método batchFinish()\n */\n batchInit() {\n this.config({ emitUpdates: false });\n this.setState({ isLoading: true }, { isUrgent: true });\n }\n\n private getNodesRecursive(nodeId: TId = 'root'): TId[] {\n const node = this.propsStore.getFieldProps(nodeId);\n\n return node.children.reduce<TId[]>(\n (prev, current) => [...prev, ...this.getNodesRecursive(current)],\n [...node.children],\n );\n }\n\n /**\n * Cuando se quieren agregar muchos nodos, es conveniente llamar primero al\n * método batchInit y luego de finalizar, al método batchFinish()\n */\n batchFinish() {\n this.config({ emitUpdates: true });\n setTimeout(() => this.setState({ isLoading: false }), 0);\n\n const children = [...this.getNodesRecursive()];\n\n const deleteNodes = this.previousNodes.filter(\n (current) => !children.find((search) => search === current),\n );\n deleteNodes.forEach((current) => this.remove(current));\n\n this.config({ emitUpdates: true });\n setTimeout(() => this.setState({ isLoading: false }), 0);\n }\n\n config(newConf: Partial<TTreeDataControllerConfig<NodeProps, NodeType>>) {\n if (\n this._configuration.current?.emitUpdates === false &&\n newConf.emitUpdates !== false\n ) {\n this.nonEmittedUpdates.forEach((current) =>\n this.propsStore.updateField(current, {\n children: [...this.propsStore.getFieldProps(current).children],\n }),\n );\n this.nonEmittedUpdates = [];\n }\n Object.assign(\n this._configuration.current as TTreeDataControllerConfig,\n newConf,\n );\n }\n\n deselectAll() {\n this.state.selectedNodes.forEach((currentId) =>\n this.propsStore.updateField(currentId, { isSelected: false }),\n );\n this.setState({ selectedNodes: [] });\n }\n\n forceEmitUpdate() {\n this.propsStore.updateField<{ forceUpdate: number }>('root', {\n forceUpdate:\n (this.propsStore.getFieldProps<{ forceUpdate: number }>('root')\n .forceUpdate ?? 0) + 1,\n });\n }\n\n getInitialState(): TTreeDataControllerState {\n return {\n expandedNodes: [],\n filteredNodes: [],\n focusedNode: null,\n isLoading: false,\n length: 0,\n selectedNodes: [],\n };\n }\n\n getNodesAsArray() {\n const allFields = { ...this.propsStore.fields };\n delete allFields[this.stateKey];\n delete allFields.root;\n return Object.values(allFields);\n }\n\n /**\n * Devuelve un array que contiene el id de todos los nodos pertenecientes al\n * árbol\n */\n getNodesIds() {\n const allFields = { ...this.propsStore.fields };\n delete allFields[this.stateKey];\n delete allFields.root;\n return Object.keys(allFields);\n }\n\n getParentId(parentId: TId) {\n return this.propsStore.getFieldProps(parentId).parentId;\n }\n\n /**\n * Este método permite controlar el comportamiento con el teclado desde fuera\n * del componente.\n */\n handleKey(ev: React.KeyboardEvent) {\n const focusedId = this.state.focusedNode as TId;\n const nodeProps = this.propsStore.getFieldProps(focusedId);\n if (ev.key === '*') {\n if (this.state.focusedNode === null) return;\n const parent = this.propsStore.getFieldProps(\n this.propsStore.getFieldProps(this.state.focusedNode).parentId,\n );\n parent.children.forEach((current) =>\n this.toggleNodeExpandedState(current, true),\n );\n } else if (ev.key.match(/^\\w$/)) {\n const nextChildWithKey = getNextNodeWithKey(\n this,\n focusedId,\n ev.key,\n true,\n );\n if (nextChildWithKey !== null) {\n this.setFocusedNode(nextChildWithKey);\n this.emit('mustFocus', nextChildWithKey);\n }\n } else\n switch (ev.code) {\n case 'Home': {\n const firstChild = getFirstNonFilteredChild(this, 'root');\n if (firstChild === null) return;\n if (ev.shiftKey && ev.ctrlKey && this.state.focusedNode !== null) {\n selectAllNodesBetweenTwoNodes(\n this,\n firstChild,\n this.state.focusedNode,\n true,\n );\n }\n this.setFocusedNode(firstChild);\n this.emit('mustFocus', firstChild);\n break;\n }\n case 'End': {\n const lastVisibleChild = getLastVisibleChild(this, 'root', true);\n if (lastVisibleChild !== null) {\n if (ev.shiftKey && ev.ctrlKey && this.state.focusedNode !== null) {\n selectAllNodesBetweenTwoNodes(\n this,\n lastVisibleChild,\n this.state.focusedNode,\n true,\n );\n }\n this.setFocusedNode(lastVisibleChild);\n this.emit('mustFocus', lastVisibleChild);\n }\n break;\n }\n case 'ArrowRight': {\n if (nodeProps.isLeaf) return;\n ev.preventDefault();\n if (nodeProps.isExpanded) {\n const firstChild = getFirstNonFilteredChild(this, nodeProps.id);\n if (firstChild !== null) {\n this.setFocusedNode(firstChild);\n this.emit('mustFocus', firstChild);\n }\n } else this.toggleNodeExpandedState(nodeProps.id, true);\n break;\n }\n case 'ArrowLeft': {\n ev.preventDefault();\n if (nodeProps.isLeaf || !nodeProps.isExpanded) {\n if (\n nodeProps.parentId !== 'root' &&\n nodeProps.parentId !== undefined\n ) {\n this.setFocusedNode(nodeProps.parentId);\n this.emit('mustFocus', nodeProps.parentId);\n }\n } else this.toggleNodeExpandedState(nodeProps.id, false);\n break;\n }\n case 'ArrowUp': {\n ev.preventDefault();\n const prevChild = getPreviousChild(this, nodeProps.id, true);\n if (prevChild !== null) {\n if (ev.shiftKey) this.toggleNodeSelectedState(prevChild, true);\n this.setFocusedNode(prevChild);\n this.emit('mustFocus', prevChild);\n } else this.emit('onArrowUpOnFirstElement', true);\n break;\n }\n case 'ArrowDown': {\n ev.preventDefault();\n const nextChild = getNextChild(this, nodeProps.id, false, true);\n if (nextChild !== null) {\n if (ev.shiftKey) this.toggleNodeSelectedState(nextChild, true);\n this.setFocusedNode(nextChild);\n this.emit('mustFocus', nextChild);\n }\n break;\n }\n case 'Space': {\n if (this._configuration.current?.disableSelection) return;\n ev.preventDefault();\n this.toggleNodeSelectedState(nodeProps.id);\n break;\n }\n default:\n break;\n }\n }\n\n isNode(\n node: NodeType | TDataNodeContainer<NodeProps> | TId,\n ): node is NodeType {\n return typeof node === 'object' && 'parentId' in node;\n }\n\n isNodeContainer(\n node: NodeType | TDataNodeContainer<NodeProps> | TId,\n ): node is TDataNodeContainer<NodeProps> {\n return typeof node === 'object' && !this.isNode(node);\n }\n\n includes(searchNode: NodeType) {\n return !!this.propsStore.getFieldProps(searchNode.id);\n }\n\n initRoot() {\n this.propsStore.updateField(\n 'root',\n { children: [], id: 'root' },\n { isUrgent: true },\n );\n }\n\n move(\n moveNode: TId,\n destinationNode: TId,\n afterOrBefore?: TRequireOnlyOne<{\n after: NodeType | TId;\n before: NodeType | TId;\n position: number;\n }>,\n ) {\n const currentFather = this.propsStore.getFieldProps(\n this.propsStore.getFieldProps(moveNode).parentId,\n );\n const newFather = this.propsStore.getFieldProps(destinationNode);\n\n if (!currentFather) {\n console.warn('The current node does not belong to the tree.', moveNode);\n return;\n }\n\n if (!newFather) {\n console.warn(\n 'The destination node does not belong to the tree. No action will be made',\n destinationNode,\n );\n return;\n }\n\n currentFather.children = currentFather.children?.filter(\n (search) => search !== moveNode,\n );\n if (!newFather.children) newFather.children = [];\n if (!afterOrBefore) newFather.children.push(moveNode);\n else if (afterOrBefore.position) {\n newFather.children.splice(afterOrBefore.position - 1, 0, moveNode);\n } else {\n const key = afterOrBefore.after\n ? afterOrBefore.after\n : afterOrBefore.before;\n\n const relatedNodeKey = key && this.isNode(key) ? key.id : key;\n const relatedNodeIndex = newFather.children.findIndex(\n (search) => search === relatedNodeKey,\n );\n\n const actualIndex = addBoundary(\n afterOrBefore.before !== undefined\n ? relatedNodeIndex\n : relatedNodeIndex + 1,\n 0,\n );\n\n if (actualIndex === -1 || actualIndex === newFather.children.length)\n newFather.children.push(moveNode);\n else newFather.children.splice(actualIndex, 0, moveNode);\n }\n\n this.propsStore.updateField(currentFather.id, {\n children: [...(currentFather.children ?? [])],\n });\n this.propsStore.updateField(newFather.id, {\n children: [...newFather.children],\n });\n this.propsStore.updateField(moveNode, {\n parentId: newFather.id,\n });\n }\n\n /**\n * Borra el nodo del árbol, y dependiendo del parámetro removeChildren, borra\n * también sus hijos.\n *\n * @param removeChildren - Si se pasa en false, los nodos hijos son movidos al root\n */\n remove(removeNode: NodeType | TId, removeChildren = true) {\n const removeNodeId = this.isNode(removeNode) ? removeNode.id : removeNode;\n\n const removingNode = this.propsStore.getFieldProps(removeNodeId);\n if (!removingNode) return;\n\n const father = this.propsStore.getFieldProps(removingNode.parentId);\n if (father) {\n this.propsStore.updateField(father.id, {\n children: father.children?.filter((search) => search !== removeNodeId),\n });\n }\n\n removingNode.children?.forEach((current) => {\n if (removeChildren) {\n this.remove(current);\n } else {\n this.move(current, 'root');\n }\n });\n\n this.setState({\n selectedNodes: this.state.selectedNodes.filter(\n (current) => current !== removeNodeId,\n ),\n focusedNode:\n this.state.focusedNode === removeNodeId ? null : this.state.focusedNode,\n length: this.state.length - 1,\n });\n this.propsStore.removeField(removeNodeId);\n }\n\n removeMultiple(nodes: TId[], removeChildren = true) {\n nodes.forEach((current) => this.remove(current, removeChildren));\n }\n\n previousNodes: TId[] = [];\n /**\n * Borra todos los nodos del árbol.\n */\n removeAll() {\n if (this.configuration.current?.emitUpdates === false) {\n this.previousNodes = this.getNodesIds();\n this.propsStore.updateField(\n 'root',\n { children: [], id: 'root' },\n { isUrgent: true, noEmit: true },\n );\n /* this.previousNodes.forEach((current) =>\n this.propsStore.removeField(current),\n ); */\n } else {\n this.hasApendedFirstChild = false;\n this.setState({ focusedNode: null }, { isUrgent: true });\n this.setSelectedNodes([]);\n this.initRoot();\n Object.keys(this.propsStore.fields).forEach((current) => {\n if (!['root', this.stateKey].includes(current))\n this.propsStore.removeField(current);\n });\n }\n }\n\n selectAll() {\n this.setState({\n selectedNodes: this.getNodesIds(),\n });\n this.state.selectedNodes.forEach((currentId) =>\n this.propsStore.updateField(currentId, { isSelected: true }),\n );\n }\n\n setExpandedNodes(nodes: TId[]) {\n this.state.expandedNodes.forEach((current) =>\n this.propsStore.updateField(current, { isExpanded: false }),\n );\n\n this.setState({ expandedNodes: nodes });\n nodes.forEach((current) =>\n this.propsStore.updateField(current, { isExpanded: true }),\n );\n }\n\n setFocusedNode(key: TId, avoidSelection?: boolean) {\n if (this.state.focusedNode !== null)\n this.propsStore.updateField(this.state.focusedNode, { isFocused: false });\n this.setState({\n focusedNode: key,\n });\n if (\n !this._configuration.current?.isMultiple &&\n !avoidSelection &&\n (this._configuration.current?.selectionMode ?? 'onFocus') === 'onFocus'\n )\n this.setSelectedNodes([key]);\n this.propsStore.updateField(key, { isFocused: true });\n }\n\n setSelectedNodes(nodes: TId[], force = false) {\n if (this._configuration.current?.disableSelection && !force) return;\n this.state.selectedNodes.forEach((current) =>\n this.propsStore.updateField(current, { isSelected: false }),\n );\n this.setState({\n selectedNodes: nodes.filter((current) => {\n const { isSelectable } = this.propsStore.getFieldProps(current);\n if (isSelectable !== false)\n this.propsStore.updateField(current, { isSelected: true });\n return isSelectable !== false;\n }),\n });\n }\n\n setSelectedNodesByClickEvent(ev: React.MouseEvent) {\n if (this._configuration.current?.disableSelection) return;\n const nodeKey = getSpecificParent(\n ev.target as HTMLElement,\n (current) => current.getAttribute('role') === 'treeitem',\n )?.getAttribute('data-key');\n if (nodeKey) {\n const nodeProps = this.propsStore.getFieldProps(nodeKey);\n if (nodeProps.isDisabled || nodeProps.isSelectable === false) return;\n\n const previousSelectionKeys = [...this.state.selectedNodes];\n const allowMultiple =\n this._configuration.current?.isMultiple &&\n (this._configuration.current?.selectionMode !== 'explicitMultiple' ||\n ev.ctrlKey ||\n ev.shiftKey);\n\n // eslint-disable-next-line no-nested-ternary\n const newSelection: TId[] = allowMultiple\n ? nodeProps.isSelected\n ? previousSelectionKeys.filter((current) => current !== nodeKey)\n : [...previousSelectionKeys, nodeKey]\n : [nodeKey];\n\n this.setSelectedNodes(newSelection);\n } else console.warn('Cannot set selection, no treeitem found', ev);\n }\n\n setState = (\n updateProps: Partial<TTreeDataControllerState>,\n conf?: TUpdateFieldConfiguration,\n ) => {\n this.propsStore.updateField<TTreeDataControllerState>(\n this.stateKey,\n {\n ...this.state,\n ...updateProps,\n },\n conf,\n );\n this.emit('stateUpdate', null);\n };\n\n useState = <T>(selector: (state: TTreeDataControllerState) => T) => {\n const [selectedState, setSelectedState] = useState(selector(this.state));\n const latestState = useLatest(selectedState);\n\n useMount(() => {\n return this.on('stateUpdate', () => {\n const newSelection = selector(this.state);\n\n if (!shallowEqual(newSelection, latestState.current)) {\n setSelectedState(newSelection);\n }\n });\n });\n\n return selectedState;\n };\n\n toggleNodeExpandedState(key: TId, shouldExpand?: boolean) {\n const nodeProps = this.propsStore.getFieldProps(key);\n if (nodeProps.isDisabled || nodeProps.isLeaf || nodeProps.isLoading) return;\n\n if (this._configuration.current?.onLoadData && !nodeProps.hasLoaded) {\n this.propsStore.updateField(key, { isLoading: true });\n this._configuration.current?.onLoadData(nodeProps).finally(() => {\n this.propsStore.updateField(key, {\n isLoading: false,\n isExpanded: true,\n hasLoaded: true,\n });\n\n this.setState({\n expandedNodes: [...this.state.expandedNodes, key],\n });\n this._configuration.current?.onExpand?.(\n this.propsStore.getFieldProps(key),\n );\n });\n } else {\n const { expandedNodes } = this.state;\n const shouldExpandInner =\n shouldExpand !== undefined\n ? shouldExpand\n : !expandedNodes.includes(key);\n if (this.propsStore.getFieldProps(key)?.isDisabled) return;\n\n this.setState({\n expandedNodes: shouldExpandInner\n ? [...expandedNodes, key]\n : expandedNodes.filter((current) => current !== key),\n });\n this.propsStore.updateField(key, { isExpanded: shouldExpandInner });\n this._configuration.current?.onExpand?.(\n this.propsStore.getFieldProps(key),\n );\n }\n }\n\n toggleNodeSelectedState(key: TId, isSelected?: boolean) {\n if (this._configuration.current?.disableSelection) return;\n const nodeProps = this.propsStore.getFieldProps(key);\n if (nodeProps.isDisabled || nodeProps.isSelectable === false) return;\n\n const shouldSelect =\n isSelected !== undefined\n ? isSelected\n : !this.state.selectedNodes.includes(key);\n\n if (\n (shouldSelect && nodeProps.isSelected) ||\n (isSelected === false && !nodeProps.isSelected)\n )\n return;\n\n if (\n shouldSelect &&\n !this._configuration.current?.isMultiple &&\n this.state.selectedNodes[0]\n )\n this.toggleNodeSelectedState(this.state.selectedNodes[0], false);\n this.propsStore.updateField(key, { isSelected: shouldSelect });\n this.setState({\n selectedNodes: shouldSelect\n ? [...this.state.selectedNodes, key]\n : this.state.selectedNodes.filter((current) => current !== key),\n });\n }\n}\n\n/**\n * Este hook permite escuchar las props de un árbol, para ello es necesario\n * pasar el handler.\n *\n * @param handler\n * @param configuration\n * @returns\n */\nexport function useTreeSelector<\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n Selected = Record<string, unknown>,\n PropsType extends Record<string, unknown> = TTreeDataControllerState,\n>(\n handler: TreeDataController<NodeProps, NodeType>,\n configuration?: TPropsConfiguration<Selected, PropsType>,\n): Selected {\n return usePropsSelector<Selected, PropsType>(\n handler?.stateKey ?? '__NO__TREE__KEY__',\n {\n propsStore: handler?.propsStore as unknown as PropsStore<PropsType>,\n ...configuration,\n },\n );\n}\n\n/**\n * Este hook permite escuchar las props de un árbol, para ello es necesario\n * pasar el handler.\n *\n * @param handler\n * @param configuration\n * @returns\n */\nexport function useTreeSelectorByName<\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n Selected = Record<string, unknown>,\n PropsType extends Record<string, unknown> = TTreeDataControllerState,\n>(\n treeName: string,\n configuration?: TPropsConfiguration<Selected, PropsType>,\n): {\n handler: TreeDataController<NodeProps, NodeType>;\n selection: Selected;\n} {\n const handler =\n useTreeDataController<TreeDataController<NodeProps, NodeType>>(treeName);\n const selection = usePropsSelector<Selected, PropsType>(\n handler?.stateKey ?? '__NO__TREE__KEY__',\n {\n propsStore: handler?.propsStore as unknown as PropsStore<PropsType>,\n ...configuration,\n },\n );\n return { selection, handler };\n}\n\nexport default TreeDataController;\n","import { BoxProps } from '@apia/theme';\nimport { TTreeProps, TDataNode, TId } from './types';\nimport TreeDataController, {\n getTreeDataController,\n} from './TreeDataController';\n\nexport type TDomProps = Omit<BoxProps, 'as'> & Record<string, unknown>;\n\nexport function getActiveDescendantName(treeName: string, nodeId: TId) {\n return `${treeName}__${nodeId}`;\n}\n\nexport function getDomProps(\n treeProps: TTreeProps,\n treeName: string,\n type: 'tree',\n node: TTreeProps,\n controller: TreeDataController,\n): BoxProps;\nexport function getDomProps(\n treeProps: TTreeProps,\n treeName: string,\n type: 'node',\n node: TDataNode,\n): BoxProps;\nexport function getDomProps(\n _: TTreeProps,\n treeName: string,\n type: 'tree' | 'node',\n par: TDataNode | TTreeProps,\n): TDomProps {\n switch (type) {\n case 'node': {\n const node = par as TDataNode;\n const tree = getTreeDataController(treeName);\n return {\n 'aria-disabled': node.isDisabled,\n 'aria-expanded': node.isLeaf ? undefined : !!node.isExpanded,\n 'aria-label': node.label,\n ...(tree.configuration.current?.disableSelection\n ? undefined\n : {\n 'aria-selected':\n node.isSelectable !== false && !node.isDisabled\n ? !!node.isSelected\n : undefined,\n }),\n className: node.className,\n color: node.color,\n 'data-key': node.id,\n id: getActiveDescendantName(treeName, node.id),\n role: 'treeitem',\n title: node.title,\n };\n }\n default: {\n const tree = par as TTreeProps;\n return {\n role: 'tree',\n 'aria-multiselectable': tree.isMultiple,\n };\n }\n }\n}\n","import { IconButton } from '@apia/components';\nimport { getVariant } from '@apia/theme';\nimport { formatMessage } from '@apia/util';\nimport { Box } from '@apia/theme';\nimport { LoaderSpinner } from '@apia/components';\nconst SearchLabel = ({\n isLoading: isSearching,\n onDelete,\n searchString,\n}: {\n isLoading: boolean;\n onDelete?: () => unknown;\n searchString: string;\n}) => {\n if (!searchString && !isSearching) return null;\n return (\n <Box className={`tree__searchLabelBox ${isSearching ? 'isLoading' : ''}`}>\n {isSearching ? (\n <LoaderSpinner className=\"tree__loading\" />\n ) : (\n <Box as=\"label\" className=\"tree__searchLabel\">\n {formatMessage(window.LBL_FILTERING_BY, { TOK1: searchString })}\n <IconButton\n icon=\"Close\"\n aria-label={window.LBL_DELETE_FILTER}\n onClick={onDelete}\n title={window.LBL_DELETE_FILTER}\n size=\"Sm\"\n {...getVariant('icon-inherit')}\n />\n </Box>\n )}\n </Box>\n );\n};\n\nexport default SearchLabel;\n","import React from 'react';\nimport TreeDataController from './TreeDataController';\nimport { TDataNode, TTreeProps } from './types';\n\nexport type TTreeContext<\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n> = {\n forceUpdate: number;\n name: string;\n handler: TreeDataController<NodeProps, NodeType>;\n treeProps: TTreeProps<NodeProps, NodeType>;\n} & Pick<TTreeProps, 'focusGetter'>;\n\nconst TreeContext = React.createContext({} as TTreeContext);\n\nexport function useTreeContext<\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n>() {\n const context = React.useContext(TreeContext);\n if (!context) throw new Error('There is no tree context');\n return context as unknown as TTreeContext<NodeProps, NodeType>;\n}\n\nexport const TreeContextProvider = <\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n>({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: TTreeContext<NodeProps, NodeType>;\n}) => {\n const Provider = React.useMemo(() => {\n return TreeContext.Provider as unknown as React.Provider<\n TTreeContext<NodeProps, NodeType>\n >;\n }, []);\n\n return <Provider value={value}>{children}</Provider>;\n};\n\nexport default TreeContext;\n","import { Icon, TIconName } from '@apia/icons';\nimport { TTreeIconRenderer } from '../types';\n\nconst DefaultIconRenderer: TTreeIconRenderer = (props) => {\n return (\n <Icon\n name={props.icon as TIconName}\n title=\"\"\n size={props.iconSize ?? 'iconSm'}\n className=\"tree__node__icon\"\n />\n );\n};\n\nexport default DefaultIconRenderer;\n","import { Box } from '@apia/theme';\nimport { TTreeLabelRenderer } from '../types';\n\nconst DefaultLabelRenderer: TTreeLabelRenderer = (props) => {\n return <Box as=\"span\">{props.label}</Box>;\n};\n\nexport default DefaultLabelRenderer;\n","import React from 'react';\nimport { Box } from '@apia/theme';\n\nconst Spacer: React.FunctionComponent<{ level: number }> = ({ level }) => {\n return (\n <>\n {Array(level)\n .fill('')\n .map((_, i) => i)\n .map((current) => (\n <Box className=\"spacer\" key={current} />\n ))}\n </>\n );\n};\n\nexport default Spacer;\n","import React from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { Box, Spinner } from '@apia/theme';\nimport DefaultIconRenderer from './renderers/DefaultIconRenderer';\nimport DefaultLabelRenderer from './renderers/DefaultLabelRenderer';\nimport Spacer from './renderers/Spacer';\nimport { useTreeContext } from './TreeContext';\nimport { TDataNode, TId } from './types';\nimport { usePropsSelector } from '@apia/util';\nimport { Icon } from '@apia/icons';\n\nconst TreeItemLabel = ({ level, treeKey }: { level: number; treeKey: TId }) => {\n const {\n handler,\n treeProps: { toggleNodesOnLabelClick },\n } = useTreeContext();\n\n const props = usePropsSelector<TDataNode, TDataNode>(treeKey, {\n selector: (current) => current,\n comparator: (prevProps, newProps) => {\n return (\n shallowEqual(prevProps, newProps) &&\n shallowEqual(prevProps?.children, newProps?.children)\n );\n },\n propsStore: handler.propsStore,\n });\n\n const Renderer = React.useMemo(\n () => props.labelRenderer ?? DefaultLabelRenderer,\n [props.labelRenderer],\n );\n\n const handleToggle = React.useCallback(() => {\n handler.toggleNodeExpandedState(treeKey);\n }, [handler, treeKey]);\n\n const IconRenderer = React.useMemo(() => {\n return typeof props.icon === 'string' ? DefaultIconRenderer : props.icon;\n }, [props.icon]);\n\n const onClick = React.useCallback(() => {\n if (props.allowToggleExpandedFromLabel !== false)\n handler.toggleNodeExpandedState(treeKey);\n }, [handler, props.allowToggleExpandedFromLabel, treeKey]);\n\n return (\n <Box\n as=\"span\"\n className={`tree__nodeItemLabel ${props.isFocused ? 'focus' : ''}`}\n >\n <Spacer level={level} />\n {(props.isLoading ||\n (props.isExpanded && props.isLeaf !== true) ||\n props.isLeaf === false ||\n (props.children?.length ?? 0) > 0 ||\n (props.isLeaf === undefined &&\n !props.hasLoaded &&\n handler.configuration.current?.onLoadData)) && (\n <Box className=\"tree__expanderWrapper\">\n {props.isLoading ? (\n <Spinner sx={{ width: 'iconSm', height: 'iconSm' }} />\n ) : (\n <Icon\n className=\"tree__expandIcon\"\n onClick={handleToggle}\n name={props.isExpanded ? 'ArrowDownThin' : 'ArrowRightThin'}\n title=\"\"\n size={20}\n />\n )}\n </Box>\n )}\n {props.icon && IconRenderer && <IconRenderer {...props} />}\n <Box\n as=\"span\"\n className=\"tree__nodeItemLabelRenderer\"\n onClick={toggleNodesOnLabelClick !== false ? onClick : undefined}\n >\n <Renderer {...props} />\n </Box>\n </Box>\n );\n};\n\nexport default React.memo(TreeItemLabel);\n","import React from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { Box } from '@apia/theme';\nimport { getDomProps } from './getDomProps';\nimport { useTreeContext } from './TreeContext';\nimport TreeItemChildren from './TreeItemChildren';\nimport TreeItemLabel from './TreeItemLabel';\nimport { TDataNode, TId } from './types';\nimport { usePropsSelector } from '@apia/util';\n\nconst TreeItem = ({ level, treeKey }: { level: number; treeKey: TId }) => {\n const { handler, name, forceUpdate, treeProps } = useTreeContext();\n\n const props = usePropsSelector<TDataNode, TDataNode>(treeKey, {\n selector: (current) => current,\n comparator: (prevProps, newProps) => {\n return (\n shallowEqual(prevProps, newProps) &&\n shallowEqual(prevProps?.children, newProps?.children)\n );\n },\n propsStore: handler.propsStore,\n });\n\n const nodes = React.useMemo(\n () =>\n props.children?.map((current) =>\n handler.propsStore.getFieldProps(current),\n ) ?? [],\n [props.children, handler.propsStore],\n );\n\n const domProps = getDomProps(treeProps, name, 'node', props);\n\n return (\n <>\n <Box\n as=\"li\"\n {...domProps}\n className={`${domProps.className ?? ''} tree__item`}\n >\n <TreeItemLabel level={level} treeKey={treeKey} />\n {props.isExpanded && (\n <TreeItemChildren\n forceUpdate={forceUpdate}\n role=\"group\"\n level={level}\n nodes={nodes}\n />\n )}\n </Box>\n </>\n );\n};\n\nexport default React.memo(TreeItem);\n","import React from 'react';\nimport { Box, BoxProps } from '@apia/theme';\nimport { useTreeContext } from './TreeContext';\nimport TreeItem from './TreeItem';\nimport { TDataNode } from './types';\n\nconst TreeItemChildren = React.forwardRef<\n HTMLDivElement,\n {\n forceUpdate: number;\n level: number;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nodes: TDataNode<any>[];\n } & BoxProps\n>(({ level, nodes, forceUpdate, ...props }, ref) => {\n const { handler } = useTreeContext();\n\n return (\n <Box ref={ref} as=\"ul\" {...props}>\n {nodes?.map((current) => {\n const currentProps = handler.propsStore.getFieldProps(current.id);\n if (!currentProps) return null;\n\n return currentProps.isFiltered ? null : (\n <TreeItem level={level + 1} key={current.id} treeKey={current.id} />\n );\n })}\n </Box>\n );\n});\n\nTreeItemChildren.displayName = 'TreeItemChildren';\n\nexport default React.memo(TreeItemChildren);\n","import { useMount } from 'ahooks';\nimport uniqueId from 'lodash-es/uniqueId';\nimport React from 'react';\nimport { shallowEqual } from 'react-redux';\nimport TreeDataController from './TreeDataController';\nimport { TTreeProps, TDataNode, TId } from './types';\nimport { selectAllNodesBetweenTwoNodes } from './util';\nimport { getSpecificParent, useLatest, usePropsSelector } from '@apia/util';\n\ninterface IUseTreeData<\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n> {\n name: string;\n treeProps: TTreeProps<NodeProps, NodeType>;\n}\n\nexport default function useTreeData<\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n>({ name, treeProps }: IUseTreeData<NodeProps, NodeType>) {\n const props = useLatest(treeProps);\n const handler = React.useMemo(\n () =>\n props?.current.controller ??\n new TreeDataController<NodeProps, NodeType>(name, props),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n useMount(() => {\n treeProps?.initialNodes?.forEach((current) => handler.append(current));\n });\n\n const data = usePropsSelector<{ children: number[]; forceUpdate: number }>(\n 'root',\n {\n comparator: shallowEqual,\n propsStore: handler.propsStore as any,\n selector: (current) => ({\n children: (current.children as any) ?? [],\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n forceUpdate: (current as any).forceUpdate as number,\n }),\n },\n );\n\n const keyHandlerId = React.useMemo(() => `keyHandler${uniqueId()}`, []);\n const keyHandlerRef = React.useRef<HTMLDivElement | null>(null);\n\n const focusOnNode = React.useCallback(\n (key: TId, retry = 3) => {\n if (keyHandlerRef.current) {\n const focusElement = keyHandlerRef.current.querySelector(\n `[data-key=\"${key}\"]`,\n ) as HTMLElement;\n keyHandlerRef.current?.focus();\n\n if (focusElement) {\n const actualFocusElement = (\n treeProps.focusGetter ??\n ((liElement: HTMLElement) =>\n liElement.querySelector(\n ':scope > .tree__nodeItemLabel',\n ) as HTMLElement)\n )(focusElement);\n\n const nodeProps = handler.propsStore.getFieldProps(key);\n\n if (!treeProps.focusGetter || !nodeProps.labelRenderer)\n actualFocusElement.classList.add('focused');\n actualFocusElement.scrollIntoView({\n inline: 'nearest',\n block: 'nearest',\n });\n } else if (retry > 0) setTimeout(() => focusOnNode(key, retry - 1), 30);\n }\n },\n [handler.propsStore, treeProps.focusGetter],\n );\n\n React.useEffect(() => {\n const unsuscribe1 = handler.on('mustFocus', (node) => focusOnNode(node));\n const unsuscribe2 = handler.on('onArrowUpOnFirstElement', () =>\n treeProps.onArrowUpOnFirstElement?.(),\n );\n\n return () => {\n unsuscribe1();\n unsuscribe2();\n };\n }, [focusOnNode, handler, treeProps]);\n\n return {\n data,\n handler,\n keyHandler: {\n id: keyHandlerId,\n onKeyDown: React.useCallback(\n (ev: React.KeyboardEvent) => {\n if (ev.key === 'Enter') {\n const key = handler.state.focusedNode;\n if (key) {\n const nodeProps = handler.propsStore.getFieldProps(key);\n treeProps.onNodeClick?.(ev, nodeProps);\n }\n } else {\n handler.handleKey(ev);\n }\n },\n [handler, treeProps],\n ),\n onMouseDown: React.useCallback(\n (ev: React.MouseEvent) => {\n const previousFocused = handler.state.focusedNode;\n if (\n previousFocused !== null &&\n ev.shiftKey &&\n handler.configuration.current?.isMultiple\n )\n ev.preventDefault();\n },\n [handler.configuration, handler.state.focusedNode],\n ),\n onClick: React.useCallback(\n (ev: React.MouseEvent) => {\n if (\n getSpecificParent(ev.target as HTMLElement, (current) =>\n current.classList.contains('tree__expandIcon'),\n )\n )\n return;\n\n const node = getSpecificParent(\n ev.target as HTMLElement,\n (current) => !!current.getAttribute('data-key'),\n );\n if (node) {\n const previousFocused = handler.state.focusedNode;\n const key = node.getAttribute('data-key') as string;\n\n const nodeProps = handler.propsStore.getFieldProps(key);\n treeProps.onNodeClick?.(ev, nodeProps);\n\n if (\n previousFocused !== null &&\n ev.shiftKey &&\n handler.configuration.current?.isMultiple\n ) {\n selectAllNodesBetweenTwoNodes(\n handler,\n previousFocused,\n key,\n true,\n );\n } else {\n handler.setFocusedNode(key);\n handler.setSelectedNodesByClickEvent(ev);\n }\n\n if (key) focusOnNode(key);\n }\n },\n [focusOnNode, handler, treeProps],\n ),\n ref: keyHandlerRef,\n },\n };\n}\n","import { useDebounceFn, useMount, useUnmount } from 'ahooks';\nimport React, { memo } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { Box } from '@apia/theme';\nimport { getActiveDescendantName } from './getDomProps';\nimport SearchLabel from './SearchLabel';\nimport { TTreeContext, TreeContextProvider } from './TreeContext';\nimport { useTreeSelector } from './TreeDataController';\nimport TreeItemChildren from './TreeItemChildren';\nimport { TDataNode, TId, TTreeDataControllerState, TTreeProps } from './types';\nimport useTreeData from './useTreeData';\nimport { unfilterNodes, matchNodesAgainstString } from './util';\nimport { PropsStore, usePropsSelector } from '@apia/util';\nimport { getVariant } from '@apia/theme';\n\nconst Tree = <\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\n>(\n props: TTreeProps<NodeProps, NodeType>,\n) => {\n const { data, handler, keyHandler } = useTreeData<NodeProps, NodeType>({\n name: props.name,\n treeProps: { ...props },\n });\n\n const [isLoading, setIsLoading] = React.useState(false);\n const [currentSearchString, setCurrentSearchString] = React.useState('');\n const isTreeLoading = useTreeSelector(handler, {\n selector: (current) => current.isLoading,\n });\n React.useEffect(() => {\n setIsLoading(isTreeLoading);\n }, [isTreeLoading]);\n\n const search = useDebounceFn(\n () => {\n if (props.filterString === undefined) return;\n setIsLoading(true);\n React.startTransition(() => {\n setCurrentSearchString(props.filterString as string);\n });\n if (props.filterString !== undefined && props.filterString !== '') {\n unfilterNodes(handler);\n matchNodesAgainstString(handler, props.filterString);\n handler.forceEmitUpdate();\n } else {\n unfilterNodes(handler);\n handler.forceEmitUpdate();\n }\n setTimeout(() => setIsLoading(false), 0);\n },\n { wait: 200 },\n );\n\n React.useEffect(() => {\n search.run();\n if (!props.filterString) search.flush();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.filterString]);\n\n usePropsSelector<TTreeDataControllerState, TTreeDataControllerState>(\n handler.stateKey,\n {\n propsStore:\n handler.propsStore as unknown as PropsStore<TTreeDataControllerState>,\n selector: (current) => current,\n comparator: (prevProps, newProps) => {\n if (\n props.onSelect &&\n !shallowEqual(prevProps?.selectedNodes, newProps?.selectedNodes)\n ) {\n props.onSelect(\n (newProps?.selectedNodes ?? []).map((currentId) =>\n handler.propsStore.getFieldProps(currentId),\n ),\n );\n }\n return true;\n },\n },\n );\n\n const { focusedNode } = usePropsSelector<\n { focusedNode: TId | null },\n TTreeDataControllerState\n >(handler.stateKey, {\n propsStore:\n handler.propsStore as unknown as PropsStore<TTreeDataControllerState>,\n selector: (current) => ({\n focusedNode: current.focusedNode,\n }),\n });\n\n useMount(() => {\n if (props.getHandler) props.getHandler(handler);\n });\n\n useUnmount(() => handler.destructor());\n\n const contextValue = React.useMemo(() => {\n const actualValue: TTreeContext<NodeProps, NodeType> = {\n handler,\n name: props.name,\n forceUpdate: data.forceUpdate,\n focusGetter: props.focusGetter,\n treeProps: props,\n };\n return actualValue;\n }, [handler, props, data.forceUpdate]);\n\n return (\n <TreeContextProvider value={contextValue}>\n <Box\n className={`tree ${props.className ?? ''}`}\n {...getVariant(props.variant ?? 'layout.common.trees.primary')}\n >\n <SearchLabel\n isLoading={props.isLoading ?? isLoading}\n onDelete={props.onDeleteFilterString}\n searchString={props.hideSearchLabel ? '' : currentSearchString}\n />\n <TreeItemChildren\n aria-activedescendant={\n focusedNode !== null\n ? getActiveDescendantName(props.name, focusedNode)\n : undefined\n }\n aria-label={props.label}\n as=\"ul\"\n forceUpdate={data.forceUpdate}\n level={-1}\n nodes={React.useMemo(\n () =>\n data.children.map((current) =>\n handler.propsStore.getFieldProps(current),\n ),\n [data.children, handler.propsStore],\n )}\n role=\"tree\"\n tabIndex={0}\n {...keyHandler}\n />\n </Box>\n </TreeContextProvider>\n );\n};\n\nexport default memo(Tree) as typeof Tree;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { OOTree } from '.';\nimport { TOOTreeNodeProps, TSortOOTreeChildren } from './types';\nimport { TDataNode, TId } from '../types';\n\nexport function isOOTreeNode<\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n>(\n element: OOTreeNode<NodeProps> | TDataNode<NodeProps>,\n): element is OOTreeNode<NodeProps> {\n return typeof (element as OOTreeNode).attachToTree === 'function';\n}\n\nexport class OOTreeNode<\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n> {\n id = '';\n prefix = '';\n\n constructor(\n protected tree: OOTree<NodeProps>,\n protected parent: OOTreeNode<NodeProps> | TDataNode<NodeProps> | null,\n protected props: TOOTreeNodeProps<NodeProps>,\n ) {\n if (parent) {\n if (isOOTreeNode<NodeProps>(parent)) {\n /**\n * Cada noto contará con un prefijo en su identificador de forma que\n * dos nodos en distintas rutas puedan compartir id.\n */\n Object.assign(\n this,\n this.tree.calculateNodePrefix(props.id, parent?.prefix),\n );\n } else {\n this.prefix = props.nodeProps.__prefix as string;\n this.id = String(props.id);\n }\n }\n }\n\n attachToTree() {\n const parentId = this.parent?.id ?? undefined;\n this.tree.getController().append({\n ...this.props,\n id: this.id,\n label: this.props.label,\n parentId,\n nodeProps: {\n ...this.props.nodeProps,\n __prefix: this.prefix,\n __id: this.props.id,\n },\n });\n }\n\n append(props: TOOTreeNodeProps<NodeProps>) {\n const newNode = new OOTreeNode(this.tree, this, props);\n\n newNode.attachToTree();\n\n return newNode;\n }\n\n collapse() {\n this.tree\n .getController()\n .setExpandedNodes(\n this.tree\n .getController()\n .state.expandedNodes.filter(\n (current) => current !== this.getProps().id,\n ),\n );\n }\n\n expand() {\n this.tree\n .getController()\n .setExpandedNodes([\n ...this.tree.getController().state.expandedNodes,\n this.getProps().id,\n ]);\n\n (this.parent as OOTreeNode).expand?.();\n }\n\n focus(expand?: boolean) {\n this.tree.getController().setFocusedNode(this.getProps().id);\n\n if (expand) {\n this.expand();\n }\n }\n\n getAll() {\n return this.tree\n .getController()\n .propsStore.getFieldProps(this.id)\n .children.map((current) => {\n return () => {\n return this.#getByAbsoluteId(String(current));\n };\n });\n }\n\n #getByAbsoluteId = (id: string) => {\n const props = this.tree.getController().propsStore.getFieldProps(id);\n\n if (props === undefined) return undefined;\n\n return new OOTreeNode(this.tree, props, props);\n };\n\n getById(id: TId) {\n const { id: actualId } = this.tree.calculateNodePrefix(id, this.prefix);\n const props = this.tree.getController().propsStore.getFieldProps(actualId);\n\n if (props === undefined) return undefined;\n\n return new OOTreeNode(this.tree, props, props);\n }\n\n getOriginalId() {\n return this.getProps().nodeProps.__id as string;\n }\n\n getParent() {\n if (!this.parent) return null;\n\n const props = this.tree\n .getController()\n .propsStore.getFieldProps(this.parent.id);\n\n const parent = props.parentId;\n const parentProps = this.tree\n .getController()\n .propsStore.getFieldProps(parent);\n\n return new OOTreeNode(this.tree, parentProps, props);\n }\n\n getProps() {\n return this.tree.getController().propsStore.getFieldProps(this.id);\n }\n\n remove() {\n this.tree.getController().remove(this.id, true);\n }\n\n sort(sortFunction: TSortOOTreeChildren<NodeProps>) {\n const children = this.getProps()\n .children.map((current) =>\n this.tree.getController().propsStore.getFieldProps(current),\n )\n .sort((a, b) => sortFunction(a, b))\n .map((current) => current.id);\n this.tree.getController().propsStore.updateField(this.id, { children });\n }\n\n update(props: Partial<Omit<TOOTreeNodeProps<NodeProps>, 'id'>>) {\n this.tree.getController().propsStore.updateField(this.id, props);\n }\n}\n","import { OOTree } from '.';\nimport { OOTreeNode } from './OOTreeNode';\nimport { TOOTreeNodeProps } from './types';\n\nexport class OOTreeChildren<\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n> extends OOTreeNode<NodeProps> {\n constructor(protected tree: OOTree<NodeProps, any>) {\n super(tree, null, {} as TOOTreeNodeProps<NodeProps>);\n\n this.prefix = 'c';\n }\n\n /**\n * Se sobreescribe para evitar problemas\n */\n expand() {}\n}\n","import { EventEmitter, TId } from '@apia/util';\nimport TreeDataController from '../TreeDataController';\nimport Tree from '../Tree';\nimport { PrefixMapEntry } from './types';\nimport { OOTreeChildren } from './OOTreeChildren';\nimport { TTreeProps } from '../types';\n\nexport class OOTree<\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\n Events extends Record<string, unknown> = Record<string, unknown>,\n> extends EventEmitter<Events> {\n constructor(public props: TTreeProps<NodeProps>) {\n super();\n\n this.#makeHandler();\n }\n\n /**\n * Accessors\n */\n #children: OOTreeChildren<NodeProps> | null = null;\n\n #controller: TreeDataController<NodeProps> =\n {} as TreeDataController<NodeProps>;\n\n getChildren = () => {\n if (this.#children === null)\n throw new Error(\n 'Children was not assigned yet, maybe you forgot to listen to onReady event on OOTree component.',\n );\n\n return this.#children;\n };\n\n getController = () => {\n if (this.#controller === null)\n throw new Error(\n 'Controller was not assigned yet, maybe you forgot to listen to onReady event on OOTree component.',\n );\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const c = this;\n\n return new Proxy(this.#controller, {\n get(target, prop) {\n if (prop === 'removeAll') {\n return () => {\n c.prefixesMap = {};\n c.#controller?.removeAll();\n };\n }\n\n return target[prop as keyof typeof target];\n },\n });\n };\n\n /**\n * Component\n */\n #makeHandler = () => {\n this.#controller = new TreeDataController<NodeProps>(this.props.name, {\n current: this.props,\n });\n this.#children = new OOTreeChildren<NodeProps>(this);\n };\n\n Component = (props: Partial<TTreeProps<NodeProps>>) => {\n return (\n <Tree<NodeProps>\n controller={this.#controller}\n {...this.props}\n {...props}\n />\n );\n };\n\n /**\n * Data manipulation\n */\n private prefixJoinCharacter = '$$';\n private prefixWithIdJoinCharacter = '__';\n\n protected prefixesMap: Record<string, PrefixMapEntry> = {};\n\n calculateDepth = (id: TId) => {\n return [...String(id).matchAll(/\\$\\$/g)].length;\n };\n\n /**\n * Calcula el prefijo de un nodo que se está agregando al árbol evitando\n * colisiones. Ese prefijo estará asociado a cada nodo y se utilizará para dar\n * nombres únicos a sus hijos, no para el nodo en sí. Entonces, cada vez que\n * se construye un nodo, se le asigna un prefijo considerando el prefijo de su\n * padre, pero su nombre se hace a partir del prefijo del padre y su id.\n */\n calculateNodePrefix = (id: TId, prefix?: string) => {\n const expectedPrefix = [prefix, String(id).charAt(0)]\n .filter(Boolean)\n .join(this.prefixJoinCharacter);\n\n let i = 1;\n let actualPrefix = expectedPrefix;\n while (this.prefixesMap[actualPrefix] !== undefined) {\n actualPrefix = `${expectedPrefix}${i++}`;\n }\n\n this.prefixesMap[actualPrefix] = {\n nodeId: id,\n prefix: actualPrefix,\n };\n\n const data = {\n prefix: actualPrefix,\n id: [[prefix].filter(Boolean).join(this.prefixJoinCharacter), id]\n .filter(Boolean)\n .join(this.prefixWithIdJoinCharacter),\n };\n return data;\n };\n}\n"],"names":["nodeProps","__publicField","shallowEqual","TreeItemLabel","TreeItemChildren","TreeItem","useMount","__privateAdd","__privateGet","Tree"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apia/tree",
3
- "version": "4.0.20",
3
+ "version": "4.0.25",
4
4
  "sideEffects": false,
5
5
  "author": "Alexis Leite <alexisleite@live.com>",
6
6
  "main": "dist/index.js",
@@ -11,14 +11,14 @@
11
11
  "libDev": "rollup --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts",
12
12
  "libBuild": "rollup --config ../../config/rollup.common.mjs --environment MODE:production,ENTRY:index.ts",
13
13
  "libWatch": "rollup --watch --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true",
14
- "libWatchDevExecution": "rollup --watch --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true,DEV_SERVER_MODULE:execution",
15
- "libWatchDevDashboards": "rollup --watch --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true,DEV_SERVER_MODULE:dashboards"
14
+ "libWatchForExecution": "rollup --watch --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true,DEV_SERVER_MODULE:execution",
15
+ "libWatchForDashboards": "rollup --watch --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true,DEV_SERVER_MODULE:dashboards"
16
16
  },
17
17
  "dependencies": {
18
- "@apia/components": "^4.0.20",
19
- "@apia/icons": "^4.0.20",
20
- "@apia/theme": "^4.0.20",
21
- "@apia/util": "^4.0.20",
18
+ "@apia/components": "^4.0.25",
19
+ "@apia/icons": "^4.0.25",
20
+ "@apia/theme": "^4.0.25",
21
+ "@apia/util": "^4.0.25",
22
22
  "@types/uuid": "^9.0.8",
23
23
  "ahooks": "^3.7.10",
24
24
  "mobx": "^6.12.3",
@@ -40,5 +40,5 @@
40
40
  "access": "public",
41
41
  "registry": "https://registry.npmjs.org/"
42
42
  },
43
- "gitHead": "dabff9ca7bf9d14298fe7a661d73607a35a4df2a"
43
+ "gitHead": "3e7ab497e829f8dbd6e9c2080b8606aa00f6e478"
44
44
  }