@@ -41,10 +41,18 @@ type Instance = {|
41
41
text : string | null ,
42
42
prop : any ,
43
43
hidden : boolean ,
44
+ context : HostContext ,
44
45
| } ;
45
- type TextInstance = { | text : string , id : number , hidden : boolean | } ;
46
+ type TextInstance = { |
47
+ text : string ,
48
+ id : number ,
49
+ hidden : boolean ,
50
+ context : HostContext ,
51
+ | } ;
52
+ type HostContext = Object ;
46
53
47
54
const NO_CONTEXT = { } ;
55
+ const UPPERCASE_CONTEXT = { } ;
48
56
const UPDATE_SIGNAL = { } ;
49
57
if ( __DEV__ ) {
50
58
Object . freeze ( NO_CONTEXT ) ;
@@ -190,10 +198,11 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
190
198
type : type ,
191
199
children : keepChildren ? instance . children : [ ] ,
192
200
text : shouldSetTextContent ( type , newProps )
193
- ? ( newProps . children : any ) + ''
201
+ ? computeText ( ( newProps . children : any ) + '' , instance . context )
194
202
: null ,
195
203
prop : newProps . prop ,
196
204
hidden : newProps . hidden === true ,
205
+ context : instance . context ,
197
206
} ;
198
207
Object . defineProperty ( clone , 'id' , {
199
208
value : clone . id ,
@@ -203,6 +212,10 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
203
212
value : clone . text ,
204
213
enumerable : false ,
205
214
} ) ;
215
+ Object . defineProperty ( clone , 'context' , {
216
+ value : clone . context ,
217
+ enumerable : false ,
218
+ } ) ;
206
219
hostCloneCounter ++ ;
207
220
return clone ;
208
221
}
@@ -216,20 +229,36 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
216
229
) ;
217
230
}
218
231
232
+ function computeText ( rawText , hostContext ) {
233
+ return hostContext === UPPERCASE_CONTEXT ? rawText . toUpperCase ( ) : rawText ;
234
+ }
235
+
219
236
const sharedHostConfig = {
220
237
getRootHostContext ( ) {
221
238
return NO_CONTEXT ;
222
239
} ,
223
240
224
- getChildHostContext ( ) {
241
+ getChildHostContext (
242
+ parentHostContext : HostContext ,
243
+ type : string ,
244
+ rootcontainerInstance : Container ,
245
+ ) {
246
+ if ( type === 'uppercase' ) {
247
+ return UPPERCASE_CONTEXT ;
248
+ }
225
249
return NO_CONTEXT ;
226
250
} ,
227
251
228
252
getPublicInstance ( instance ) {
229
253
return instance ;
230
254
} ,
231
255
232
- createInstance ( type : string , props : Props ) : Instance {
256
+ createInstance (
257
+ type : string ,
258
+ props : Props ,
259
+ rootContainerInstance : Container ,
260
+ hostContext : HostContext ,
261
+ ) : Instance {
233
262
if ( type === 'errorInCompletePhase' ) {
234
263
throw new Error ( 'Error in host config.' ) ;
235
264
}
@@ -238,17 +267,22 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
238
267
type : type ,
239
268
children : [ ] ,
240
269
text : shouldSetTextContent ( type , props )
241
- ? ( props . children : any ) + ''
270
+ ? computeText ( ( props . children : any ) + '' , hostContext )
242
271
: null ,
243
272
prop : props . prop ,
244
273
hidden : props . hidden === true ,
274
+ context : hostContext ,
245
275
} ;
246
276
// Hide from unit tests
247
277
Object . defineProperty ( inst , 'id' , { value : inst . id , enumerable : false } ) ;
248
278
Object . defineProperty ( inst , 'text' , {
249
279
value : inst . text ,
250
280
enumerable : false ,
251
281
} ) ;
282
+ Object . defineProperty ( inst , 'context' , {
283
+ value : inst . context ,
284
+ enumerable : false ,
285
+ } ) ;
252
286
return inst ;
253
287
} ,
254
288
@@ -298,9 +332,21 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
298
332
hostContext : Object ,
299
333
internalInstanceHandle : Object ,
300
334
) : TextInstance {
301
- const inst = { text : text , id : instanceCounter ++ , hidden : false } ;
335
+ if ( hostContext === UPPERCASE_CONTEXT ) {
336
+ text = text . toUpperCase ( ) ;
337
+ }
338
+ const inst = {
339
+ text : text ,
340
+ id : instanceCounter ++ ,
341
+ hidden : false ,
342
+ context : hostContext ,
343
+ } ;
302
344
// Hide from unit tests
303
345
Object . defineProperty ( inst , 'id' , { value : inst . id , enumerable : false } ) ;
346
+ Object . defineProperty ( inst , 'context' , {
347
+ value : inst . context ,
348
+ enumerable : false ,
349
+ } ) ;
304
350
return inst ;
305
351
} ,
306
352
@@ -351,7 +397,10 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
351
397
instance . prop = newProps . prop ;
352
398
instance . hidden = newProps . hidden === true ;
353
399
if ( shouldSetTextContent ( type , newProps ) ) {
354
- instance . text = ( newProps . children : any ) + '' ;
400
+ instance . text = computeText (
401
+ ( newProps . children : any ) + '' ,
402
+ instance . context ,
403
+ ) ;
355
404
}
356
405
} ,
357
406
@@ -361,7 +410,7 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
361
410
newText : string ,
362
411
) : void {
363
412
hostUpdateCounter ++ ;
364
- textInstance . text = newText ;
413
+ textInstance . text = computeText ( newText , textInstance . context ) ;
365
414
} ,
366
415
367
416
appendChild ,
@@ -471,12 +520,21 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
471
520
hostContext : Object ,
472
521
internalInstanceHandle : Object ,
473
522
) : TextInstance {
474
- const inst = { text : text , id : instanceCounter ++ , hidden : true } ;
523
+ const inst = {
524
+ text : text ,
525
+ id : instanceCounter ++ ,
526
+ hidden : true ,
527
+ context : hostContext ,
528
+ } ;
475
529
// Hide from unit tests
476
530
Object . defineProperty ( inst , 'id' , {
477
531
value : inst . id ,
478
532
enumerable : false ,
479
533
} ) ;
534
+ Object . defineProperty ( inst , 'context' , {
535
+ value : inst . context ,
536
+ enumerable : false ,
537
+ } ) ;
480
538
return inst ;
481
539
} ,
482
540
} ;
0 commit comments