(layoutState: LayoutTreeState, action: LayoutTreeSwapNodeAction)
| 321 | } |
| 322 | |
| 323 | export function swapNode(layoutState: LayoutTreeState, action: LayoutTreeSwapNodeAction) { |
| 324 | if (!action.node1Id || !action.node2Id) { |
| 325 | console.error("invalid swapNode action, both node1 and node2 must be defined"); |
| 326 | return; |
| 327 | } |
| 328 | |
| 329 | if (action.node1Id === layoutState.rootNode.id || action.node2Id === layoutState.rootNode.id) { |
| 330 | console.error("invalid swapNode action, the root node cannot be swapped"); |
| 331 | return; |
| 332 | } |
| 333 | if (action.node1Id === action.node2Id) { |
| 334 | console.error("invalid swapNode action, node1 and node2 are equal"); |
| 335 | return; |
| 336 | } |
| 337 | |
| 338 | const parentNode1 = findParent(layoutState.rootNode, action.node1Id); |
| 339 | const parentNode2 = findParent(layoutState.rootNode, action.node2Id); |
| 340 | const parentNode1Index = parentNode1.children!.findIndex((child) => child.id === action.node1Id); |
| 341 | const parentNode2Index = parentNode2.children!.findIndex((child) => child.id === action.node2Id); |
| 342 | |
| 343 | const node1 = parentNode1.children![parentNode1Index]; |
| 344 | const node2 = parentNode2.children![parentNode2Index]; |
| 345 | |
| 346 | const node1Size = node1.size; |
| 347 | node1.size = node2.size; |
| 348 | node2.size = node1Size; |
| 349 | |
| 350 | parentNode1.children[parentNode1Index] = node2; |
| 351 | parentNode2.children[parentNode2Index] = node1; |
| 352 | } |
| 353 | |
| 354 | export function deleteNode(layoutState: LayoutTreeState, action: LayoutTreeDeleteNodeAction) { |
| 355 | if (!action?.nodeId) { |
no test coverage detected