}"
`;
+exports[`compiler: element transform > component dynamic event with once modifier 1`] = `
+"import { resolveComponent as _resolveComponent, toHandlerKey as _toHandlerKey, createComponentWithFallback as _createComponentWithFallback } from 'vue';
+
+export function render(_ctx) {
+ const _component_Foo = _resolveComponent("Foo")
+ const n0 = _createComponentWithFallback(_component_Foo, { $: [
+ () => ({ [_toHandlerKey(_ctx.foo) + "Once"]: () => _ctx.bar })
+ ] }, null, true)
+ return n0
+}"
+`;
+
+exports[`compiler: element transform > component event with once modifier 1`] = `
+"import { resolveComponent as _resolveComponent, createComponentWithFallback as _createComponentWithFallback } from 'vue';
+
+export function render(_ctx) {
+ const _component_Foo = _resolveComponent("Foo")
+ const n0 = _createComponentWithFallback(_component_Foo, { onFooOnce: () => _ctx.bar }, null, true)
+ return n0
+}"
+`;
+
exports[`compiler: element transform > component with dynamic event arguments 1`] = `
"import { resolveComponent as _resolveComponent, toHandlerKey as _toHandlerKey, createComponentWithFallback as _createComponentWithFallback } from 'vue';
])
})
+ test('component event with once modifier', () => {
+ const { code } = compileWithElementTransform(`<Foo @foo.once="bar" />`)
+ expect(code).toMatchSnapshot()
+ })
+
+ test('component dynamic event with once modifier', () => {
+ const { code } = compileWithElementTransform(`<Foo @[foo].once="bar" />`)
+ expect(code).toMatchSnapshot()
+ })
+
test('invalid html nesting', () => {
const { code, ir } = compileWithElementTransform(
`<p><div>123</div></p>
} from './utils'
import {
canSetValueDirectly,
+ capitalize,
isSVGTag,
shouldSetAsAttr,
toHandlerKey,
}
export function genPropKey(
- { key: node, modifier, runtimeCamelize, handler }: IRProp,
+ { key: node, modifier, runtimeCamelize, handler, handlerModifiers }: IRProp,
context: CodegenContext,
): CodeFragment[] {
const { helper } = context
+ const handlerModifierPostfix = handlerModifiers
+ ? handlerModifiers.map(capitalize).join('')
+ : ''
// static arg was transformed by v-bind transformer
if (node.isStatic) {
// only quote keys if necessary
- const keyName = handler ? toHandlerKey(node.content) : node.content
+ const keyName =
+ (handler ? toHandlerKey(node.content) : node.content) +
+ handlerModifierPostfix
return [
[
isSimpleIdentifier(keyName) ? keyName : JSON.stringify(keyName),
if (handler) {
key = genCall(helper('toHandlerKey'), key)
}
- return ['[', modifier && `${JSON.stringify(modifier)} + `, ...key, ']']
+ return [
+ '[',
+ modifier && `${JSON.stringify(modifier)} + `,
+ ...key,
+ handlerModifierPostfix
+ ? ` + ${JSON.stringify(handlerModifierPostfix)}`
+ : undefined,
+ ']',
+ ]
}
export function genPropValue(
modifier?: '.' | '^'
runtimeCamelize?: boolean
handler?: boolean
+ handlerModifiers?: string[]
model?: boolean
modelModifiers?: string[]
}
key: arg,
value: handler,
handler: true,
+ handlerModifiers: eventOptionModifiers,
}
}
let i = dynamicSources.length
while (i--) {
const source = resolveSource(dynamicSources[i])
- if (hasOwn(source, key)) return source[key]
+ if (hasOwn(source, key)) return resolveSource(source[key])
}
}
return rawProps[key] && resolveSource(rawProps[key])