all files / src/patchVNode/ patchVNodeChildren.ts

100% Statements 17/17
100% Branches 11/11
100% Functions 2/2
100% Lines 17/17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32                  75× 75× 75×   75×   75× 62× 13× 10×     10×    
import { ElementVNode, VNode } from '../'
 
import { ModuleCallbacks } from '../modules/ModuleCallbacks'
import { addVNodes } from '../addVNodes'
import { removeVNodes } from '../removeVNodes'
import { updateChildren } from '../updateChildren'
 
export function patchVNodeChildren(
  formerVNode: VNode,
  vNode: VNode,
  moduleCallbacks: ModuleCallbacks,
  insertedVNodeQueue: Array<ElementVNode>)
{
  const element = vNode.element as Element
  const formerChildren = formerVNode.children as Array<ElementVNode>
  const children = vNode.children as Array<ElementVNode>
 
  if (formerVNode.text)
    element.textContent = ''
 
  if (formerChildren && children && formerChildren !== children)
    updateChildren(element, formerChildren, children, moduleCallbacks, insertedVNodeQueue)
  else if (children)
    addVNodes(element, null, children, 0, endIndex(children), moduleCallbacks, insertedVNodeQueue)
  else if (formerChildren)
    removeVNodes(element, formerChildren, 0, endIndex(formerChildren), moduleCallbacks)
}
 
function endIndex(vNodeChildren: Array<ElementVNode>) {
  return vNodeChildren.length - 1
}