{"version":3,"sources":["../src/tree/getRelatedTreeNode.ts"],"names":["RelatedTreeNode","getRelatedTreeNode","treeObj","nodeId","pos","options","opts","idKey","result","nodeInfo","forEachTreeByDfs","node","parent","index","ABORT","getTreeNodeInfo"],"mappings":";;;;AAaYA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GACRA,IAAA,MAAS,CAAA,CAAA,CAAA,CAAT,SACAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAO,CAAP,CAAA,CAAA,MAAA,CACAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAW,GAAX,UAHQA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAA,IAML,SAASC,CAAAA,CAAqFC,EAAuBC,CAAmBC,CAAAA,CAAAA,CAAsBC,CAAgD,CAAA,CACjN,IAAMC,CAAAA,CAAO,OAAO,MAAO,CAAA,GAAGD,CAAO,CAAA,CAC/B,CAAE,KAAAE,CAAAA,CAAM,CAAID,CAAAA,CAAAA,CACdE,CAAiC,CAAA,IAAA,CACjCC,EACJ,OAAAC,CAAAA,CAAuBR,CAAQ,CAAA,CAAC,CAAC,IAAA,CAAAS,EAAK,MAAAC,CAAAA,CAAAA,CAAO,KAAAC,CAAAA,CAAK,CAAI,GAAA,CAClD,GAAGT,CAAK,EAAA,CAAA,EAA0BO,EAAKJ,CAAK,CAAA,EAAGJ,EAC3C,OAAAK,CAAAA,CAASI,CACFE,CAAAA,GAAAA,CACL,GAAGV,CAAAA,EAAK,GAEV,GADIK,CAAAA,GAAUA,CAAWM,CAAAA,GAAAA,CAAgBb,CAAQC,CAAAA,CAAAA,CAAOE,CAAO,CAC5DI,CAAAA,CAAAA,CAAAA,EAAaI,CAASJ,EAAAA,CAAAA,CAAS,KAAQ,CAAA,CAAA,CACtC,OAAAD,CAASG,CAAAA,CAAAA,CACFG,YAENV,CAAK,EAAA,CAAA,GACNK,IAAUA,CAAWM,CAAAA,GAAAA,CAAgBb,CAAQC,CAAAA,CAAAA,CAAOE,CAAO,CAAA,CAAA,CAC5DI,GAAaI,CAASJ,EAAAA,CAAAA,CAAS,KAAS,CAAA,CAAA,CAAA,CACvC,OAAAD,CAAAA,CAASG,EACFG,GAGnB,CAAA,CAAER,CAAI,CAAA,CACCE,CACX","file":"chunk-WBWVU2WO.mjs","sourcesContent":["/**\n * 获取指定的节点的关联节点\n */\n\nimport { TreeNode, TreeNodeBase, TreeNodeOptions } from \"./types\";\nimport { ABORT } from '../object/forEachObject';\nimport { getTreeNodeInfo, TreeNodeInfo } from \"./getTreeNodeInfo\";\nimport { forEachTreeByDfs } from \"./forEachTreeByDfs\";\n\nexport interface GetRelatedTreeNodeOptions extends TreeNodeOptions {\n    \n}\n\nexport enum RelatedTreeNode{\n    Parent = 1,\n    Next = 2,\n    Previous = 3 \n}\n\nexport function getRelatedTreeNode<Node extends TreeNodeBase = TreeNode,IdKey extends string = 'id'>(treeObj: Node | Node[],nodeId:Node[IdKey],pos:RelatedTreeNode , options?:GetRelatedTreeNodeOptions):Node | null {\n    const opts = Object.assign({},options) as Required<GetRelatedTreeNodeOptions>\n    const { idKey } = opts\n    let result:Node | null | undefined = null\n    let nodeInfo:TreeNodeInfo<Node> | undefined\n    forEachTreeByDfs<Node>(treeObj,({node,parent,index})=>{\n        if(pos==RelatedTreeNode.Parent && node[idKey]==nodeId){\n            result = parent\n            return ABORT\n        }else if(pos==RelatedTreeNode.Next){\n            if(!nodeInfo) nodeInfo = getTreeNodeInfo(treeObj,nodeId,options)\n            if(nodeInfo && (index == nodeInfo.index  +1)){\n                result = node\n                return ABORT\n            }\n        }else if(pos==RelatedTreeNode.Previous){\n            if(!nodeInfo) nodeInfo = getTreeNodeInfo(treeObj,nodeId,options)\n            if(nodeInfo && (index == nodeInfo.index  - 1)){\n                result = node\n                return ABORT\n            }\n        }\n    },opts)\n    return result\n}\n"]}