import { patchClass } from './modules/class' import { patchStyle } from './modules/style' import { patchAttr } from './modules/attrs' import { patchDOMProp } from './modules/props' import { patchEvent } from './modules/events' import { isOn } from '@vue/shared' import { RendererOptions } from '@vue/runtime-core' export const patchProp: RendererOptions['patchProp'] = ( el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren ) => { switch (key) { // special case 'class': patchClass(el, nextValue, isSVG) break case 'style': patchStyle(el, prevValue, nextValue) break default: if (isOn(key)) { // ignore v-model listeners if (key.indexOf('onUpdate:') < 0) { patchEvent( el, key.slice(2).toLowerCase(), prevValue, nextValue, parentComponent ) } } else if (!isSVG && key in el) { patchDOMProp( el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren ) } else { // special case for with // :true-value & :false-value // store value as dom properties since non-string values will be // stringified. if (key === 'true-value') { ;(el as any)._trueValue = nextValue } else if (key === 'false-value') { ;(el as any)._falseValue = nextValue } patchAttr(el, key, nextValue, isSVG) } break } }