Skip to content

Commit

Permalink
fix(vue3): codegen v-model on prop with dash in name
Browse files Browse the repository at this point in the history
  • Loading branch information
Akryum committed Feb 5, 2023
1 parent 47517f8 commit c53ea61
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions packages/histoire-plugin-vue/src/client/codegen.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// @TODO remove @ts-ignore

import { VNode, vModelText, vModelCheckbox, vModelSelect, vModelRadio, vModelDynamic, Text } from 'vue'
import { pascalCase } from 'change-case'
import { pascalCase, camelCase } from 'change-case'
import { createAutoBuildingObject, indent, serializeJs, voidElements } from '@histoire/shared'
import type { Variant } from '@histoire/shared'

Expand Down Expand Up @@ -74,7 +74,8 @@ async function printVNode (vnode: VNode, propsOverrides: Record<string, any> = n
for (const dir of vnode.dirs) {
// Vmodel
if (dir.dir === vModelText || dir.dir === vModelSelect || dir.dir === vModelRadio || dir.dir === vModelCheckbox || dir.dir === vModelDynamic) {
const listenerKey = `onUpdate:${dir.arg ?? 'modelValue'}`
const listenerKeys = [`onUpdate:${dir.arg ?? 'modelValue'}`, `onUpdate:${camelCase(dir.arg ?? 'modelValue')}`]
const listenerKey = listenerKeys.find(key => vnode.props[key])
const listener = vnode.props[listenerKey]
let valueCode: string = null
if (listener) {
Expand Down Expand Up @@ -118,9 +119,10 @@ async function printVNode (vnode: VNode, propsOverrides: Record<string, any> = n
const arg = directive === '@' ? `${prop[2].toLowerCase()}${prop.slice(3)}` : prop

// v-model on component
const vmodelListener = `onUpdate:${prop}`
const vmodelListeners = [`onUpdate:${prop}`, `onUpdate:${camelCase(prop)}`]
// @ts-ignore
if (directive === ':' && vnode.dynamicProps?.includes(vmodelListener)) {
const vmodelListener = vmodelListeners.find(key => vnode.dynamicProps?.includes(key))
if (directive === ':' && vmodelListener) {
// Listener
skipProps.push(vmodelListener)
const listener = vnode.props[vmodelListener]
Expand Down

0 comments on commit c53ea61

Please sign in to comment.