@@ -118,77 +118,6 @@ export default defineComponent({
118
118
} ,
119
119
)
120
120
121
- watch (
122
- ( ) => props [ modelValueProp ] ,
123
- ( newModelValue : any ) => {
124
- if ( preventUpdatingContent . value ) {
125
- preventUpdatingContent . value = false
126
- return
127
- }
128
- if ( jsonEditor . value ) {
129
- preventUpdatingModelValue . value = true
130
- jsonEditor . value . set (
131
- [ undefined , '' ] . includes ( newModelValue )
132
- // `undefined` is not accepted by vanilla-jsoneditor
133
- // The default value is `{ text: '' }`
134
- // Only default value can clear the editor
135
- ? { text : '' }
136
- : { json : newModelValue } ,
137
- )
138
- }
139
- } ,
140
- {
141
- deep : true ,
142
- } ,
143
- )
144
-
145
- watch (
146
- ( ) => props . mode ,
147
- ( mode ) => {
148
- // `jsonEditor.value` could be `undefined` in Vue 2.6
149
- jsonEditor . value ?. updateProps ( {
150
- mode,
151
- } )
152
- } ,
153
- )
154
-
155
- watch (
156
- ( ) => Array . from ( boolAttrs , boolAttr => props [ boolAttr ] ) ,
157
- ( values ) => {
158
- jsonEditor . value ?. updateProps (
159
- Object . fromEntries ( Array . from ( values , ( v , i ) => [ boolAttrs [ i ] , v ] ) . filter ( ( [ , v ] ) => v !== undefined ) ) ,
160
- )
161
- } ,
162
- )
163
-
164
- watch (
165
- ( ) => attrs ,
166
- ( newAttrs ) => {
167
- // Functions need to be merged again
168
- const defaultFunctionAttrs : {
169
- onChange ?: ( ...args : any ) => unknown
170
- onChangeMode ?: ( ...args : any ) => unknown
171
- } = { }
172
- if ( newAttrs . onChange ) {
173
- defaultFunctionAttrs . onChange = onChange
174
- }
175
- if ( newAttrs . onChangeMode ) {
176
- defaultFunctionAttrs . onChangeMode = onChangeMode
177
- }
178
- jsonEditor . value ?. updateProps (
179
- Object . getOwnPropertyNames ( defaultFunctionAttrs ) . length > 0
180
- ? conclude ( [ newAttrs , defaultFunctionAttrs ] , {
181
- type : Object ,
182
- mergeFunction,
183
- } )
184
- : newAttrs ,
185
- )
186
- } ,
187
- {
188
- deep : true ,
189
- } ,
190
- )
191
-
192
121
expose ?.( { jsonEditor } )
193
122
194
123
onUnmounted ( ( ) => {
@@ -201,6 +130,77 @@ export default defineComponent({
201
130
props : initialAttrs ,
202
131
} )
203
132
133
+ watch (
134
+ ( ) => props [ modelValueProp ] ,
135
+ ( newModelValue : any ) => {
136
+ if ( preventUpdatingContent . value ) {
137
+ preventUpdatingContent . value = false
138
+ return
139
+ }
140
+ if ( jsonEditor . value ) {
141
+ preventUpdatingModelValue . value = true
142
+ jsonEditor . value . set (
143
+ [ undefined , '' ] . includes ( newModelValue )
144
+ // `undefined` is not accepted by vanilla-jsoneditor
145
+ // The default value is `{ text: '' }`
146
+ // Only default value can clear the editor
147
+ ? { text : '' }
148
+ : { json : newModelValue } ,
149
+ )
150
+ }
151
+ } ,
152
+ {
153
+ deep : true ,
154
+ } ,
155
+ )
156
+
157
+ watch (
158
+ ( ) => props . mode ,
159
+ ( mode ) => {
160
+ // `jsonEditor.value` could be `undefined` in Vue 2.6
161
+ jsonEditor . value ?. updateProps ( {
162
+ mode,
163
+ } )
164
+ } ,
165
+ )
166
+
167
+ watch (
168
+ ( ) => Array . from ( boolAttrs , boolAttr => props [ boolAttr ] ) ,
169
+ ( values ) => {
170
+ jsonEditor . value ?. updateProps (
171
+ Object . fromEntries ( Array . from ( values , ( v , i ) => [ boolAttrs [ i ] , v ] ) . filter ( ( [ , v ] ) => v !== undefined ) ) ,
172
+ )
173
+ } ,
174
+ )
175
+
176
+ watch (
177
+ ( ) => attrs ,
178
+ ( newAttrs ) => {
179
+ // Functions need to be merged again
180
+ const defaultFunctionAttrs : {
181
+ onChange ?: ( ...args : any ) => unknown
182
+ onChangeMode ?: ( ...args : any ) => unknown
183
+ } = { }
184
+ if ( newAttrs . onChange ) {
185
+ defaultFunctionAttrs . onChange = onChange
186
+ }
187
+ if ( newAttrs . onChangeMode ) {
188
+ defaultFunctionAttrs . onChangeMode = onChangeMode
189
+ }
190
+ jsonEditor . value ?. updateProps (
191
+ Object . getOwnPropertyNames ( defaultFunctionAttrs ) . length > 0
192
+ ? conclude ( [ newAttrs , defaultFunctionAttrs ] , {
193
+ type : Object ,
194
+ mergeFunction,
195
+ } )
196
+ : newAttrs ,
197
+ )
198
+ } ,
199
+ {
200
+ deep : true ,
201
+ } ,
202
+ )
203
+
204
204
// There's no `expose` in @vue/composition-api
205
205
if ( ! expose ) {
206
206
expose = ( exposed : Record < string , any > | undefined ) : void => {
0 commit comments