@@ -58,15 +58,24 @@ export const addEventHandlerToTag = (
58
58
} )
59
59
60
60
let expressionContent : types . ArrowFunctionExpression | types . Expression
61
+ const functionParams = eventHandlerStatements . some (
62
+ ( eventHandler ) => eventHandler . includeEventObject
63
+ )
64
+ ? [ t . identifier ( 'event' ) ]
65
+ : [ ]
66
+
61
67
if ( eventHandlerASTStatements . length === 1 ) {
62
68
const expression = eventHandlerASTStatements [ 0 ] . expression
63
69
64
70
expressionContent =
65
71
expression . type === 'CallExpression' && expression . arguments . length === 0
66
72
? ( expression . callee as types . ArrowFunctionExpression | types . Expression )
67
- : t . arrowFunctionExpression ( [ ] , expression )
73
+ : t . arrowFunctionExpression ( functionParams , expression )
68
74
} else {
69
- expressionContent = t . arrowFunctionExpression ( [ ] , t . blockStatement ( eventHandlerASTStatements ) )
75
+ expressionContent = t . arrowFunctionExpression (
76
+ functionParams ,
77
+ t . blockStatement ( eventHandlerASTStatements )
78
+ )
70
79
}
71
80
72
81
tag . openingElement . attributes . push (
@@ -122,10 +131,21 @@ const createStateChangeStatement = (
122
131
? options . dynamicReferencePrefixMap . state + '.'
123
132
: ''
124
133
125
- const newStateValue =
126
- eventHandlerStatement . newState === '$toggle'
127
- ? t . unaryExpression ( '!' , t . identifier ( statePrefix + stateKey ) )
128
- : convertValueToLiteral ( eventHandlerStatement . newState , stateDefinition . type )
134
+ let newStateValue
135
+
136
+ if ( eventHandlerStatement . newState === '$toggle' ) {
137
+ newStateValue = t . unaryExpression ( '!' , t . identifier ( statePrefix + stateKey ) )
138
+ } else if ( typeof eventHandlerStatement . newState === 'object' ) {
139
+ if ( eventHandlerStatement . newState . type === 'expr' ) {
140
+ newStateValue = getExpressionFromUIDLExpressionNode ( eventHandlerStatement . newState )
141
+ } else if ( eventHandlerStatement . newState . type === 'dynamic' ) {
142
+ newStateValue = createDynamicValueExpression ( eventHandlerStatement . newState , options )
143
+ } else {
144
+ newStateValue = convertValueToLiteral ( eventHandlerStatement . newState , stateDefinition . type )
145
+ }
146
+ } else {
147
+ newStateValue = convertValueToLiteral ( eventHandlerStatement . newState , stateDefinition . type )
148
+ }
129
149
130
150
switch ( options . stateHandling ) {
131
151
case 'hooks' :
0 commit comments