File tree Expand file tree Collapse file tree 2 files changed +50
-1
lines changed
tests/cypress/integration Expand file tree Collapse file tree 2 files changed +50
-1
lines changed Original file line number Diff line number Diff line change @@ -72,7 +72,8 @@ let mergeProxyTrap = {
72
72
) || objects [ objects . length - 1 ] ;
73
73
const descriptor = Object . getOwnPropertyDescriptor ( target , name ) ;
74
74
if ( descriptor ?. set && descriptor ?. get )
75
- return Reflect . set ( target , name , value , thisProxy ) ;
75
+ // Can't use Reflect.set here due to [upstream bug](https://github.com/vuejs/core/blob/31abdc8adad569d83b476c340e678c4daa901545/packages/reactivity/src/baseHandlers.ts#L148) in @vue/reactivity
76
+ return descriptor . set . call ( thisProxy , value ) || true ;
76
77
return Reflect . set ( target , name , value ) ;
77
78
} ,
78
79
}
Original file line number Diff line number Diff line change @@ -109,3 +109,51 @@ test(
109
109
get ( "button" ) . should ( haveText ( "clicked" ) ) ;
110
110
}
111
111
) ;
112
+
113
+ test (
114
+ "properly merges the datastack with nested data" ,
115
+ [
116
+ html `
117
+ < div x-data ="{ foo: { bar: 'fizz' } } ">
118
+ < div x-data ="{ bar: 'buzz' } ">
119
+ < span
120
+ id ="1 "
121
+ x-text ="foo.bar + bar "
122
+ @click ="foo.bar = foo.bar + bar "
123
+ > </ span >
124
+ </ div >
125
+ < span id ="2 " x-text ="foo.bar "> </ span >
126
+ </ div >
127
+ ` ,
128
+ ] ,
129
+ ( { get } ) => {
130
+ get ( "span#1" ) . should ( haveText ( "fizzbuzz" ) ) ;
131
+ get ( "span#2" ) . should ( haveText ( "fizz" ) ) ;
132
+ get ( "span#1" ) . click ( ) ;
133
+ get ( "span#1" ) . should ( haveText ( "fizzbuzzbuzz" ) ) ;
134
+ get ( "span#2" ) . should ( haveText ( "fizzbuzz" ) ) ;
135
+ }
136
+ ) ;
137
+
138
+ test (
139
+ "handles getter setter pairs of object" ,
140
+ [
141
+ html `
142
+ < div x-data ="{ foo: { bar: 'fizzbuzz' } } ">
143
+ < div
144
+ x-data ="{ get bar() { return this.foo.bar }, set bar(value) { this.foo.bar = value } } "
145
+ >
146
+ < span id ="one " x-text ="bar " @click ="bar = 'foobar' "> </ span >
147
+ </ div >
148
+ < span id ="two " x-text ="foo.bar "> </ span >
149
+ </ div >
150
+ ` ,
151
+ ] ,
152
+ ( { get } ) => {
153
+ get ( "span#one" ) . should ( haveText ( "fizzbuzz" ) ) ;
154
+ get ( "span#two" ) . should ( haveText ( "fizzbuzz" ) ) ;
155
+ get ( "span#one" ) . click ( ) ;
156
+ get ( "span#one" ) . should ( haveText ( "foobar" ) ) ;
157
+ get ( "span#two" ) . should ( haveText ( "foobar" ) ) ;
158
+ }
159
+ ) ;
You can’t perform that action at this time.
0 commit comments