Skip to content

Commit 250127c

Browse files
committed
wip(vapor): v-model checkbox, radio, select, dynamic
1 parent 01d6aa0 commit 250127c

File tree

9 files changed

+221
-149
lines changed

9 files changed

+221
-149
lines changed

packages/compiler-vapor/src/generators/component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ import {
3737
} from '@vue/compiler-core'
3838
import { genEventHandler } from './event'
3939
import { genDirectiveModifiers, genDirectivesForElement } from './directive'
40-
import { genModelHandler } from './modelValue'
4140
import { genBlock } from './block'
41+
import { genModelHandler } from './vModel'
4242

4343
export function genCreateComponent(
4444
operation: CreateComponentIRNode,
@@ -223,7 +223,7 @@ function genModelEvent(prop: IRProp, context: CodegenContext): CodeFragment[] {
223223
: ['["onUpdate:" + ', ...genExpression(prop.key, context), ']']
224224
const handler = genModelHandler(prop.values[0], context)
225225

226-
return [',', NEWLINE, ...name, ': ', ...handler]
226+
return [',', NEWLINE, ...name, ': () => ', ...handler]
227227
}
228228

229229
function genModelModifiers(

packages/compiler-vapor/src/generators/modelValue.ts

Lines changed: 0 additions & 38 deletions
This file was deleted.

packages/compiler-vapor/src/generators/operation.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { genSetDynamicEvents, genSetEvent } from './event'
55
import { genFor } from './for'
66
import { genSetHtml } from './html'
77
import { genIf } from './if'
8-
import { genSetModelValue } from './modelValue'
98
import { genDynamicProps, genSetProp } from './prop'
109
import { genDeclareOldRef, genSetTemplateRef } from './templateRef'
1110
import { genCreateTextNode, genSetText } from './text'
@@ -51,8 +50,6 @@ export function genOperation(
5150
return genSetHtml(oper, context)
5251
case IRNodeTypes.SET_TEMPLATE_REF:
5352
return genSetTemplateRef(oper, context)
54-
case IRNodeTypes.SET_MODEL_VALUE:
55-
return genSetModelValue(oper, context)
5653
case IRNodeTypes.CREATE_TEXT_NODE:
5754
return genCreateTextNode(oper, context)
5855
case IRNodeTypes.INSERT_NODE:

packages/compiler-vapor/src/generators/vModel.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { CodegenContext } from '../generate'
22
import type { DirectiveIRNode } from '../ir'
33
import { type CodeFragment, NEWLINE, genCall } from './utils'
44
import { genExpression } from './expression'
5+
import type { SimpleExpressionNode } from '@vue/compiler-dom'
56

67
const helperMap = {
78
text: 'applyTextModel',
@@ -30,15 +31,22 @@ export function genVModel(
3031
// getter
3132
[`() => (`, ...genExpression(exp!, context), `)`],
3233
// setter
33-
[
34-
`${context.options.isTS ? `($event: any)` : `$event`} => (`,
35-
...genExpression(exp!, context, '$event'),
36-
')',
37-
],
34+
genModelHandler(exp!, context),
3835
// modifiers
3936
modifiers.length
4037
? `{ ${modifiers.map(e => e.content + ': true').join(',')} }`
4138
: undefined,
4239
),
4340
]
4441
}
42+
43+
export function genModelHandler(
44+
exp: SimpleExpressionNode,
45+
context: CodegenContext,
46+
): CodeFragment[] {
47+
return [
48+
`${context.options.isTS ? `(_value: any)` : `_value`} => (`,
49+
...genExpression(exp, context, '_value'),
50+
')',
51+
]
52+
}

packages/compiler-vapor/src/ir/index.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import type {
2-
BindingTypes,
32
CompoundExpressionNode,
43
DirectiveNode,
54
RootNode,
@@ -23,7 +22,6 @@ export enum IRNodeTypes {
2322
SET_DYNAMIC_EVENTS,
2423
SET_HTML,
2524
SET_TEMPLATE_REF,
26-
SET_MODEL_VALUE,
2725

2826
INSERT_NODE,
2927
PREPEND_NODE,
@@ -154,15 +152,6 @@ export interface SetTemplateRefIRNode extends BaseIRNode {
154152
effect: boolean
155153
}
156154

157-
export interface SetModelValueIRNode extends BaseIRNode {
158-
type: IRNodeTypes.SET_MODEL_VALUE
159-
element: number
160-
key: SimpleExpressionNode
161-
value: SimpleExpressionNode
162-
bindingType?: BindingTypes
163-
isComponent: boolean
164-
}
165-
166155
export interface CreateTextNodeIRNode extends BaseIRNode {
167156
type: IRNodeTypes.CREATE_TEXT_NODE
168157
id: number
@@ -227,7 +216,6 @@ export type OperationNode =
227216
| SetDynamicEventsIRNode
228217
| SetHtmlIRNode
229218
| SetTemplateRefIRNode
230-
| SetModelValueIRNode
231219
| CreateTextNodeIRNode
232220
| InsertNodeIRNode
233221
| PrependNodeIRNode

packages/compiler-vapor/src/transforms/vModel.ts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -139,15 +139,6 @@ export const transformVModel: DirectiveTransform = (dir, node, context) => {
139139
)
140140
}
141141

142-
// TODO this should no longer be needed
143-
context.registerOperation({
144-
type: IRNodeTypes.SET_MODEL_VALUE,
145-
element: context.reference(),
146-
key: arg || createSimpleExpression('modelValue', true),
147-
value: exp,
148-
isComponent,
149-
})
150-
151142
if (modelType)
152143
context.registerOperation({
153144
type: IRNodeTypes.DIRECTIVE,

0 commit comments

Comments
 (0)