From 103ec2f770dbb785ef4bc26f8662c74edded796a Mon Sep 17 00:00:00 2001 From: Spencer Ahrens Date: Thu, 1 Aug 2019 18:17:22 -0700 Subject: [PATCH] Fix Dimensions for ComponentScript Summary: ComponentScript uses Dimensions, but doesn't support native modules, so we need to keep the `nativeExtensions` stuff that was dropped in D16525189. Reviewed By: PeteTheHeat Differential Revision: D16611233 fbshipit-source-id: c0add40529743e02ab7943814dc9f2188e8e0633 --- Libraries/Utilities/Dimensions.js | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/Libraries/Utilities/Dimensions.js b/Libraries/Utilities/Dimensions.js index 145f032347b..4a07a7f38c3 100644 --- a/Libraries/Utilities/Dimensions.js +++ b/Libraries/Utilities/Dimensions.js @@ -118,13 +118,23 @@ class Dimensions { } } -// Subscribe before calling getConstants to make sure we don't miss any updates in between. -RCTDeviceEventEmitter.addListener( - 'didUpdateDimensions', - (update: DimensionsPayload) => { - Dimensions.set(update); - }, -); -Dimensions.set(NativeDeviceInfo.getConstants().Dimensions); +let initialDims: ?$ReadOnly<{[key: string]: any}> = + global.nativeExtensions && + global.nativeExtensions.DeviceInfo && + global.nativeExtensions.DeviceInfo.Dimensions; +if (!initialDims) { + // Subscribe before calling getConstants to make sure we don't miss any updates in between. + RCTDeviceEventEmitter.addListener( + 'didUpdateDimensions', + (update: DimensionsPayload) => { + Dimensions.set(update); + }, + ); + // Can't use NativeDeviceInfo in ComponentScript because it does not support NativeModules, + // but has nativeExtensions instead. + initialDims = NativeDeviceInfo.getConstants().Dimensions; +} + +Dimensions.set(initialDims); module.exports = Dimensions;