genFlagText([PatchFlags.PROPS, PatchFlags.NEED_HYDRATION])
)
})
+
+ test('should not have PROPS patchflag for constant v-on handlers', () => {
+ const { node } = parseWithElementTransform(`<div @keydown="foo" />`, {
+ prefixIdentifiers: true,
+ bindingMetadata: {
+ foo: BindingTypes.SETUP_CONST
+ },
+ directiveTransforms: {
+ on: transformOn
+ }
+ })
+ // should only have hydration flag
+ expect(node.patchFlag).toBe(genFlagText(PatchFlags.NEED_HYDRATION))
+ })
})
describe('dynamic component', () => {
TemplateTextChildNode,
DirectiveArguments,
createVNodeCall,
- ConstantTypes
+ ConstantTypes,
+ JSChildNode
} from '../ast'
import {
PatchFlags,
hasVnodeHook = true
}
+ if (isEventHandler && value.type === NodeTypes.JS_CALL_EXPRESSION) {
+ // handler wrapped with internal helper e.g. withModifiers(fn)
+ // extract the actual expression
+ value = value.arguments[0] as JSChildNode
+ }
+
if (
value.type === NodeTypes.JS_CACHE_EXPRESSION ||
((value.type === NodeTypes.SIMPLE_EXPRESSION ||
NodeTypes,
ObjectExpression,
transform,
- VNodeCall
+ VNodeCall,
+ BindingTypes
} from '@vue/compiler-core'
import { transformOn } from '../../src/transforms/vOn'
import { V_ON_WITH_KEYS, V_ON_WITH_MODIFIERS } from '../../src/runtimeHelpers'
},
...options
})
+ const node = (ast.children[0] as ElementNode).codegenNode as VNodeCall
return {
root: ast,
- props: (
- ((ast.children[0] as ElementNode).codegenNode as VNodeCall)
- .props as ObjectExpression
- ).properties
+ node,
+ props: (node.props as ObjectExpression).properties
}
}
}
})
})
+
+ test('should not have PROPS patchFlag for constant v-on handlers with modifiers', () => {
+ const { node } = parseWithVOn(`<div @keydown.up="foo" />`, {
+ prefixIdentifiers: true,
+ bindingMetadata: {
+ foo: BindingTypes.SETUP_CONST
+ },
+ directiveTransforms: {
+ on: transformOn
+ }
+ })
+ // should only have hydration flag
+ expect(node.patchFlag).toBe(genFlagText(PatchFlags.NEED_HYDRATION))
+ })
})