all files / src/patchVNode/ patchVNode.ts

94.44% Statements 17/18
87.5% Branches 7/8
100% Functions 1/1
94.12% Lines 16/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 33 34                  354×   354×   354×   353×     353×   353× 199× 154×   353×    
import { ElementVNode, TextVNode, VNode } from '../'
import { postpatchHooks, prepatchHooks, updateHooks } from './hooks'
 
import { ModuleCallbacks } from '../modules/ModuleCallbacks'
import { patchVNodeChildren } from './patchVNodeChildren'
import { replacePreviousElement } from './replacePreviousElement'
import { updateElement } from './updateElement'
import { vNodesAreEqual } from '../helpers'
 
export function patchVNode(
  formerVNode: VNode,
  vNode: VNode,
  moduleCallbacks: ModuleCallbacks,
  insertedVNodeQueue: Array<ElementVNode>): void
{
  prepatchHooks(formerVNode as ElementVNode, vNode as VNode<Element>, moduleCallbacks)
 
  vNode = updateElement(formerVNode, vNode)
 
  if (formerVNode === vNode) return
 
  Iif (!vNodesAreEqual(formerVNode, vNode))
    return replacePreviousElement(formerVNode, vNode, moduleCallbacks, insertedVNodeQueue)
 
  updateHooks(formerVNode as ElementVNode, vNode as ElementVNode, moduleCallbacks)
 
  if (!vNode.text)
    patchVNodeChildren(formerVNode, vNode, moduleCallbacks, insertedVNodeQueue)
  else if (formerVNode.text !== (vNode as TextVNode).text)
    (vNode.element as Element).textContent = vNode.text
 
  postpatchHooks(formerVNode as ElementVNode, vNode as ElementVNode, moduleCallbacks)
}