all files / src/modules/ focus.ts

57.14% Statements 8/14
0% Branches 0/6
20% Functions 1/5
53.85% Lines 7/13
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                                   
import { ElementVNode, Module } from '../'
 
import { BaseModule } from './BaseModule'
 
export function createFocusModule(): Module {
  return new FocusModule()
}
 
class FocusModule extends BaseModule {
  public insert(vNode: ElementVNode) {
    setFocus(vNode)
  }
 
  public update(_: ElementVNode, vNode: ElementVNode) {
    setFocus(vNode)
  }
}
 
function setFocus(vNode: ElementVNode) {
  const { props: { focus = false }, element } = vNode
 
  if (focus && typeof (element as HTMLElement).focus === 'function')
    (element as HTMLElement).focus()
}