@office-iss/react-native-win32 0.0.0-canary.283 → 0.0.0-canary.284
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.flowconfig +1 -1
- package/CHANGELOG.json +40 -1
- package/CHANGELOG.md +20 -8
- package/IntegrationTests/AccessibilityManagerTest.js +17 -12
- package/IntegrationTests/AppEventsTest.js +47 -32
- package/IntegrationTests/GlobalEvalWithSourceUrlTest.js +10 -14
- package/IntegrationTests/ImageCachePolicyTest.js +64 -81
- package/IntegrationTests/ImageSnapshotTest.js +17 -20
- package/IntegrationTests/IntegrationTestHarnessTest.js +34 -52
- package/IntegrationTests/IntegrationTestsApp.js +11 -6
- package/IntegrationTests/LayoutEventsTest.js +1 -1
- package/IntegrationTests/LoggingTestModule.js +2 -1
- package/IntegrationTests/PromiseTest.js +51 -43
- package/IntegrationTests/SimpleSnapshotTest.js +19 -24
- package/IntegrationTests/SyncMethodTest.js +9 -13
- package/IntegrationTests/TimersTest.js +3 -3
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +3 -3
- package/Libraries/Alert/Alert.js +1 -1
- package/Libraries/Alert/Alert.win32.js +1 -1
- package/Libraries/Alert/RCTAlertManager.android.js +1 -1
- package/Libraries/Alert/RCTAlertManager.ios.js +1 -1
- package/Libraries/Animated/AnimatedMock.js +1 -1
- package/Libraries/Animated/AnimatedWeb.js +27 -9
- package/Libraries/Animated/nodes/AnimatedValue.js +35 -13
- package/Libraries/Animated/useAnimatedProps.js +47 -85
- package/Libraries/AppState/AppState.js +1 -1
- package/Libraries/BatchedBridge/BatchedBridge.js +4 -2
- package/Libraries/BatchedBridge/MessageQueue.js +2 -2
- package/Libraries/BatchedBridge/NativeModules.js +4 -3
- package/Libraries/Blob/Blob.js +4 -4
- package/Libraries/Blob/BlobManager.js +3 -2
- package/Libraries/Blob/BlobRegistry.js +3 -9
- package/Libraries/Blob/File.js +3 -2
- package/Libraries/Blob/FileReader.js +1 -1
- package/Libraries/BugReporting/BugReporting.js +2 -2
- package/Libraries/BugReporting/dumpReactTree.js +2 -2
- package/Libraries/BugReporting/getReactData.js +1 -1
- package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js +1 -1
- package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.ios.js +1 -1
- package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.win32.js +1 -1
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +5 -5
- package/Libraries/Components/Button.js +2 -2
- package/Libraries/Components/Button.win32.js +2 -2
- package/Libraries/Components/Clipboard/Clipboard.js +1 -1
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +7 -7
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +1 -2
- package/Libraries/Components/Keyboard/Keyboard.js +9 -9
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +4 -4
- package/Libraries/Components/Pressable/Pressable.js +4 -4
- package/Libraries/Components/Pressable/Pressable.win32.js +4 -4
- package/Libraries/Components/Pressable/useAndroidRippleForView.js +9 -9
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +10 -11
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +1 -1
- package/Libraries/Components/RefreshControl/RefreshControl.js +9 -9
- package/Libraries/Components/ScrollView/ScrollView.js +32 -26
- package/Libraries/Components/ScrollView/ScrollViewCommands.js +2 -2
- package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +2 -2
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -1
- package/Libraries/Components/ScrollView/processDecelerationRate.js +1 -1
- package/Libraries/Components/Sound/SoundManager.js +1 -1
- package/Libraries/Components/StaticRenderer.js +4 -4
- package/Libraries/Components/StatusBar/StatusBar.js +33 -18
- package/Libraries/Components/Switch/Switch.js +6 -6
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +31 -31
- package/Libraries/Components/TextInput/InputAccessoryView.js +2 -2
- package/Libraries/Components/TextInput/TextInput.flow.js +35 -35
- package/Libraries/Components/TextInput/TextInput.js +35 -35
- package/Libraries/Components/TextInput/TextInput.win32.js +35 -35
- package/Libraries/Components/TextInput/TextInputNativeCommands.js +1 -1
- package/Libraries/Components/ToastAndroid/ToastAndroid.d.ts +68 -6
- package/Libraries/Components/Touchable/TouchableBounce.js +5 -5
- package/Libraries/Components/Touchable/TouchableHighlight.js +11 -11
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +14 -14
- package/Libraries/Components/Touchable/TouchableNativeFeedback.win32.js +6 -6
- package/Libraries/Components/Touchable/TouchableOpacity.js +6 -6
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
- package/Libraries/Components/UnimplementedViews/UnimplementedView.js +9 -1
- package/Libraries/Components/View/ViewAccessibility.js +2 -2
- package/Libraries/Components/View/ViewAccessibility.win32.js +2 -2
- package/Libraries/Components/View/ViewPropTypes.js +22 -22
- package/Libraries/Components/View/ViewPropTypes.win32.js +22 -22
- package/Libraries/Core/RawEventEmitter.js +2 -2
- package/Libraries/Core/ReactNativeVersion.js +3 -5
- package/Libraries/Core/Timers/JSTimers.js +3 -3
- package/Libraries/Core/polyfillPromise.js +1 -1
- package/Libraries/Core/registerCallableModule.js +1 -1
- package/Libraries/Core/setUpAlert.js +1 -1
- package/Libraries/Core/setUpDeveloperTools.js +0 -2
- package/Libraries/Core/setUpErrorHandling.js +6 -1
- package/Libraries/Core/setUpReactDevTools.js +1 -1
- package/Libraries/Core/setUpTimers.js +35 -56
- package/Libraries/Core/setUpXHR.js +5 -5
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +2 -1
- package/Libraries/Events/CustomEvent.js +2 -2
- package/Libraries/Image/AssetRegistry.js +6 -1
- package/Libraries/Image/AssetSourceResolver.js +2 -2
- package/Libraries/Image/ImageProps.js +17 -17
- package/Libraries/Image/nativeImageSource.js +2 -2
- package/Libraries/Inspector/ElementProperties.js +4 -3
- package/Libraries/Inspector/Inspector.js +1 -1
- package/Libraries/Inspector/Inspector.win32.js +1 -1
- package/Libraries/Inspector/InspectorOverlay.js +4 -3
- package/Libraries/Inspector/InspectorOverlay.win32.js +3 -3
- package/Libraries/Inspector/InspectorPanel.js +6 -6
- package/Libraries/Inspector/NetworkOverlay.js +6 -5
- package/Libraries/Inspector/PerformanceOverlay.js +2 -1
- package/Libraries/Inspector/resolveBoxStyle.js +2 -2
- package/Libraries/Interaction/InteractionManager.js +3 -2
- package/Libraries/Interaction/PanResponder.js +6 -6
- package/Libraries/Interaction/TouchHistoryMath.js +26 -0
- package/Libraries/JSInspector/NetworkAgent.js +2 -1
- package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -2
- package/Libraries/Linking/Linking.js +0 -1
- package/Libraries/Lists/FlatList.js +9 -10
- package/Libraries/Lists/SectionList.js +7 -9
- package/Libraries/Lists/SectionListModern.js +6 -6
- package/Libraries/LogBox/Data/LogBoxData.js +14 -14
- package/Libraries/LogBox/Data/LogBoxLog.js +51 -29
- package/Libraries/LogBox/Data/parseLogBoxLog.js +10 -10
- package/Libraries/LogBox/LogBox.js +13 -1
- package/Libraries/LogBox/LogBoxInspectorContainer.js +3 -3
- package/Libraries/LogBox/LogBoxNotificationContainer.js +3 -3
- package/Libraries/LogBox/UI/LogBoxButton.js +4 -4
- package/Libraries/LogBox/UI/LogBoxInspectorBody.js +8 -2
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +50 -31
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js +50 -31
- package/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorSection.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +2 -2
- package/Libraries/Modal/Modal.js +7 -7
- package/Libraries/Network/XMLHttpRequest.js +1 -1
- package/Libraries/Network/convertRequestBody.js +3 -1
- package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
- package/Libraries/Pressability/Pressability.js +10 -10
- package/Libraries/Pressability/Pressability.win32.js +10 -10
- package/Libraries/Pressability/PressabilityDebug.js +2 -2
- package/Libraries/Pressability/PressabilityPerformanceEventEmitter.js +2 -2
- package/Libraries/Promise.js +2 -2
- package/Libraries/ReactNative/AppContainer.js +2 -2
- package/Libraries/ReactNative/BridgelessUIManager.js +3 -8
- package/Libraries/ReactNative/I18nManager.js +3 -2
- package/Libraries/ReactNative/PaperUIManager.js +1 -1
- package/Libraries/ReactNative/PaperUIManager.win32.js +1 -1
- package/Libraries/ReactNative/ReactNativeFeatureFlags.js +2 -2
- package/Libraries/ReactNative/ReactNativeRuntimeDiagnostics.js +2 -2
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +3 -2
- package/Libraries/StyleSheet/Rect.js +2 -2
- package/Libraries/StyleSheet/StyleSheet.js +1 -1
- package/Libraries/StyleSheet/StyleSheet.win32.js +1 -1
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +1 -1
- package/Libraries/StyleSheet/private/_TransformStyle.js +18 -18
- package/Libraries/StyleSheet/processBackgroundImage.js +138 -136
- package/Libraries/Text/TextAncestor.js +1 -2
- package/Libraries/TurboModule/TurboModuleRegistry.js +1 -1
- package/Libraries/Types/CodegenTypes.js +2 -1
- package/Libraries/Types/CoreEventTypes.js +40 -40
- package/Libraries/Types/CoreEventTypes.win32.js +40 -40
- package/Libraries/UTFSequence.js +2 -2
- package/Libraries/Utilities/BackHandler.android.js +2 -2
- package/Libraries/Utilities/BackHandler.ios.js +2 -2
- package/Libraries/Utilities/BackHandler.win32.js +2 -2
- package/Libraries/Utilities/HMRClient.js +2 -2
- package/Libraries/Utilities/Platform.android.js +4 -4
- package/Libraries/Utilities/Platform.flow.js +8 -8
- package/Libraries/Utilities/Platform.flow.win32.js +8 -8
- package/Libraries/Utilities/Platform.ios.js +4 -4
- package/Libraries/Utilities/Platform.win32.js +2 -2
- package/Libraries/Utilities/ReactNativeTestTools.js +3 -2
- package/Libraries/Utilities/codegenNativeCommands.js +2 -2
- package/Libraries/Utilities/codegenNativeComponent.js +2 -2
- package/Libraries/Utilities/differ/deepDiffer.js +3 -3
- package/Libraries/Utilities/stringifySafe.js +2 -2
- package/Libraries/Vibration/Vibration.js +1 -1
- package/Libraries/WebSocket/WebSocketEvent.js +1 -1
- package/Libraries/YellowBox/YellowBoxDeprecated.js +4 -3
- package/Libraries/vendor/core/ErrorUtils.js +1 -1
- package/flow/jest.js +14 -14
- package/index.js +16 -13
- package/index.win32.js +16 -13
- package/jest/setup.js +214 -197
- package/overrides.json +26 -26
- package/package.json +16 -16
- package/src/private/featureflags/ReactNativeFeatureFlags.js +11 -30
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +3 -2
- package/src/private/specs/components/ActivityIndicatorViewNativeComponent.js +2 -2
- package/src/private/specs/components/AndroidDrawerLayoutNativeComponent.js +6 -6
- package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +2 -2
- package/src/private/specs/components/AndroidSwipeRefreshLayoutNativeComponent.js +2 -2
- package/src/private/specs/components/AndroidSwitchNativeComponent.js +4 -4
- package/src/private/specs/components/DebuggingOverlayNativeComponent.js +2 -2
- package/src/private/specs/components/ProgressBarAndroidNativeComponent.js +2 -2
- package/src/private/specs/components/PullToRefreshViewNativeComponent.js +2 -2
- package/src/private/specs/components/RCTInputAccessoryViewNativeComponent.js +2 -2
- package/src/private/specs/components/RCTModalHostViewNativeComponent.js +4 -4
- package/src/private/specs/components/RCTSafeAreaViewNativeComponent.js +2 -2
- package/src/private/specs/components/SwitchNativeComponent.js +4 -4
- package/src/private/specs/components/UnimplementedNativeViewNativeComponent.js +2 -2
- package/src/private/specs/modules/NativeAccessibilityManager.js +2 -2
- package/src/private/specs/modules/NativeActionSheetManager.js +7 -7
- package/src/private/specs/modules/NativeAlertManager.js +2 -2
- package/src/private/specs/modules/NativeAnimatedModule.js +2 -2
- package/src/private/specs/modules/NativeAnimatedTurboModule.js +2 -2
- package/src/private/specs/modules/NativeAppState.js +3 -3
- package/src/private/specs/modules/NativeBlobModule.js +1 -1
- package/src/private/specs/modules/NativeClipboard.js +1 -1
- package/src/private/specs/modules/NativeDeviceInfo.js +8 -8
- package/src/private/specs/modules/NativeDialogManagerAndroid.js +4 -4
- package/src/private/specs/modules/NativeExceptionsManager.js +2 -2
- package/src/private/specs/modules/NativeFantom.js +6 -0
- package/src/private/specs/modules/NativeFrameRateLogger.js +1 -1
- package/src/private/specs/modules/NativeI18nManager.js +2 -2
- package/src/private/specs/modules/NativeImageEditor.js +9 -9
- package/src/private/specs/modules/NativeImageLoaderAndroid.js +1 -1
- package/src/private/specs/modules/NativeImageLoaderIOS.js +1 -1
- package/src/private/specs/modules/NativeImageLoaderWin32.js +1 -1
- package/src/private/specs/modules/NativeImageStoreAndroid.js +1 -1
- package/src/private/specs/modules/NativeImageStoreIOS.js +3 -3
- package/src/private/specs/modules/NativeNetworkingIOS.js +2 -2
- package/src/private/specs/modules/NativePlatformConstantsAndroid.js +4 -4
- package/src/private/specs/modules/NativePlatformConstantsIOS.js +4 -4
- package/src/private/specs/modules/NativePlatformConstantsWin.js +5 -10
- package/src/private/specs/modules/NativePushNotificationManagerIOS.js +7 -7
- package/src/private/specs/modules/NativeSampleTurboModule.js +2 -2
- package/src/private/specs/modules/NativeSettingsManager.js +2 -2
- package/src/private/specs/modules/NativeShareModule.js +3 -3
- package/src/private/specs/modules/NativeSourceCode.js +2 -2
- package/src/private/specs/modules/NativeStatusBarManagerAndroid.js +4 -4
- package/src/private/specs/modules/NativeStatusBarManagerIOS.js +6 -6
- package/src/private/specs/modules/NativeToastAndroid.js +2 -2
- package/src/private/specs/modules/NativeVibration.js +1 -1
- package/src/private/specs/modules/NativeWebSocketModule.js +1 -1
- package/src/private/webapis/intersectionobserver/IntersectionObserver.js +2 -2
- package/src/private/webapis/intersectionobserver/{IntersectionObserverManager.js → internals/IntersectionObserverManager.js} +9 -9
- package/src/private/webapis/mutationobserver/MutationObserver.js +2 -2
- package/src/private/webapis/mutationobserver/{MutationObserverManager.js → internals/MutationObserverManager.js} +8 -8
- package/src/private/webapis/performance/EventTiming.js +1 -1
- package/src/private/webapis/performance/Performance.js +3 -3
- package/src/private/webapis/performance/PerformanceObserver.js +2 -2
- package/src/private/webapis/performance/{RawPerformanceEntry.js → internals/RawPerformanceEntry.js} +6 -6
- package/src/private/webapis/performance/{Utilities.js → internals/Utilities.js} +1 -1
- package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +1 -1
|
@@ -174,13 +174,13 @@ const LayoutAnimation = {
|
|
|
174
174
|
easeIn: 'easeIn',
|
|
175
175
|
easeOut: 'easeOut',
|
|
176
176
|
keyboard: 'keyboard',
|
|
177
|
-
})
|
|
177
|
+
}) as $ReadOnly<{[K in LayoutAnimationType]: K}>,
|
|
178
178
|
Properties: Object.freeze({
|
|
179
179
|
opacity: 'opacity',
|
|
180
180
|
scaleX: 'scaleX',
|
|
181
181
|
scaleY: 'scaleY',
|
|
182
182
|
scaleXY: 'scaleXY',
|
|
183
|
-
})
|
|
183
|
+
}) as $ReadOnly<{[K in LayoutAnimationProperty]: K}>,
|
|
184
184
|
checkConfig(...args: Array<mixed>) {
|
|
185
185
|
console.error('LayoutAnimation.checkConfig(...) has been disabled.');
|
|
186
186
|
},
|
|
@@ -41,7 +41,6 @@ class Linking extends NativeEventEmitter<LinkingEventDefinitions> {
|
|
|
41
41
|
addEventListener<K: $Keys<LinkingEventDefinitions>>(
|
|
42
42
|
eventType: K,
|
|
43
43
|
listener: (...$ElementType<LinkingEventDefinitions, K>) => mixed,
|
|
44
|
-
context: $FlowFixMe,
|
|
45
44
|
): EventSubscription {
|
|
46
45
|
return this.addListener(eventType, listener);
|
|
47
46
|
}
|
|
@@ -19,27 +19,27 @@ import type {
|
|
|
19
19
|
|
|
20
20
|
import * as ReactNativeFeatureFlags from '../../src/private/featureflags/ReactNativeFeatureFlags';
|
|
21
21
|
import {type ScrollResponderType} from '../Components/ScrollView/ScrollView';
|
|
22
|
+
import View from '../Components/View/View';
|
|
22
23
|
import {
|
|
23
24
|
VirtualizedList,
|
|
24
25
|
keyExtractor as defaultKeyExtractor,
|
|
25
26
|
} from '@react-native/virtualized-lists';
|
|
26
27
|
import memoizeOne from 'memoize-one';
|
|
28
|
+
import React from 'react';
|
|
27
29
|
|
|
28
|
-
const View = require('../Components/View/View');
|
|
29
30
|
const StyleSheet = require('../StyleSheet/StyleSheet');
|
|
30
31
|
const deepDiffer = require('../Utilities/differ/deepDiffer');
|
|
31
32
|
const Platform = require('../Utilities/Platform');
|
|
32
33
|
const invariant = require('invariant');
|
|
33
|
-
const React = require('react');
|
|
34
34
|
|
|
35
|
-
type RequiredProps<ItemT> = {
|
|
35
|
+
type RequiredProps<ItemT> = {
|
|
36
36
|
/**
|
|
37
37
|
* An array (or array-like list) of items to render. Other data types can be
|
|
38
38
|
* used by targeting VirtualizedList directly.
|
|
39
39
|
*/
|
|
40
40
|
data: ?$ReadOnly<$ArrayLike<ItemT>>,
|
|
41
|
-
|
|
42
|
-
type OptionalProps<ItemT> = {
|
|
41
|
+
};
|
|
42
|
+
type OptionalProps<ItemT> = {
|
|
43
43
|
/**
|
|
44
44
|
* Takes an item from `data` and renders it into the list. Example usage:
|
|
45
45
|
*
|
|
@@ -150,7 +150,7 @@ type OptionalProps<ItemT> = {|
|
|
|
150
150
|
* Enable an optimization to memoize the item renderer to prevent unnecessary rerenders.
|
|
151
151
|
*/
|
|
152
152
|
strictMode?: boolean,
|
|
153
|
-
|
|
153
|
+
};
|
|
154
154
|
|
|
155
155
|
/**
|
|
156
156
|
* Default Props Helper Functions
|
|
@@ -176,10 +176,10 @@ function isArrayLike(data: mixed): boolean {
|
|
|
176
176
|
return typeof Object(data).length === 'number';
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
-
type FlatListProps<ItemT> = {
|
|
179
|
+
type FlatListProps<ItemT> = {
|
|
180
180
|
...RequiredProps<ItemT>,
|
|
181
181
|
...OptionalProps<ItemT>,
|
|
182
|
-
|
|
182
|
+
};
|
|
183
183
|
|
|
184
184
|
type VirtualizedListProps = React.ElementConfig<typeof VirtualizedList>;
|
|
185
185
|
|
|
@@ -672,8 +672,7 @@ class FlatList<ItemT> extends React.PureComponent<Props<ItemT>, void> {
|
|
|
672
672
|
: {renderItem: renderProp};
|
|
673
673
|
};
|
|
674
674
|
|
|
675
|
-
|
|
676
|
-
_memoizedRenderer = memoizeOne(this._renderer);
|
|
675
|
+
_memoizedRenderer: ReturnType<typeof memoizeOne> = memoizeOne(this._renderer);
|
|
677
676
|
|
|
678
677
|
render(): React.Node {
|
|
679
678
|
const {
|
|
@@ -25,7 +25,7 @@ type Item = any;
|
|
|
25
25
|
|
|
26
26
|
export type SectionBase<SectionItemT> = _SectionBase<SectionItemT>;
|
|
27
27
|
|
|
28
|
-
type RequiredProps<SectionT: SectionBase<any>> = {
|
|
28
|
+
type RequiredProps<SectionT: SectionBase<any>> = {
|
|
29
29
|
/**
|
|
30
30
|
* The actual data to render, akin to the `data` prop in [`<FlatList>`](https://reactnative.dev/docs/flatlist).
|
|
31
31
|
*
|
|
@@ -38,9 +38,9 @@ type RequiredProps<SectionT: SectionBase<any>> = {|
|
|
|
38
38
|
* }>
|
|
39
39
|
*/
|
|
40
40
|
sections: $ReadOnlyArray<SectionT>,
|
|
41
|
-
|
|
41
|
+
};
|
|
42
42
|
|
|
43
|
-
type OptionalProps<SectionT: SectionBase<any>> = {
|
|
43
|
+
type OptionalProps<SectionT: SectionBase<any>> = {
|
|
44
44
|
/**
|
|
45
45
|
* Default renderer for every item in every section. Can be over-ridden on a per-section basis.
|
|
46
46
|
*/
|
|
@@ -90,9 +90,9 @@ type OptionalProps<SectionT: SectionBase<any>> = {|
|
|
|
90
90
|
* This may improve scroll performance for large lists.
|
|
91
91
|
*/
|
|
92
92
|
removeClippedSubviews?: boolean,
|
|
93
|
-
|
|
93
|
+
};
|
|
94
94
|
|
|
95
|
-
export type Props<SectionT> = {
|
|
95
|
+
export type Props<SectionT> = {
|
|
96
96
|
...$Diff<
|
|
97
97
|
VirtualizedSectionListProps<SectionT>,
|
|
98
98
|
{
|
|
@@ -114,7 +114,7 @@ export type Props<SectionT> = {|
|
|
|
114
114
|
>,
|
|
115
115
|
...RequiredProps<SectionT>,
|
|
116
116
|
...OptionalProps<SectionT>,
|
|
117
|
-
|
|
117
|
+
};
|
|
118
118
|
|
|
119
119
|
/**
|
|
120
120
|
* A performant interface for rendering sectioned lists, supporting the most handy features:
|
|
@@ -261,9 +261,7 @@ export default class SectionList<
|
|
|
261
261
|
}
|
|
262
262
|
|
|
263
263
|
_wrapperListRef: ?React.ElementRef<typeof VirtualizedSectionList>;
|
|
264
|
-
|
|
265
|
-
* LTI update could not be added via codemod */
|
|
266
|
-
_captureRef = ref => {
|
|
264
|
+
_captureRef = (ref: ?React.RefOf<VirtualizedSectionList>) => {
|
|
267
265
|
this._wrapperListRef = ref;
|
|
268
266
|
};
|
|
269
267
|
}
|
|
@@ -26,7 +26,7 @@ type Item = any;
|
|
|
26
26
|
|
|
27
27
|
export type SectionBase<SectionItemT> = _SectionBase<SectionItemT>;
|
|
28
28
|
|
|
29
|
-
type RequiredProps<SectionT: SectionBase<any>> = {
|
|
29
|
+
type RequiredProps<SectionT: SectionBase<any>> = {
|
|
30
30
|
/**
|
|
31
31
|
* The actual data to render, akin to the `data` prop in [`<FlatList>`](https://reactnative.dev/docs/flatlist).
|
|
32
32
|
*
|
|
@@ -39,9 +39,9 @@ type RequiredProps<SectionT: SectionBase<any>> = {|
|
|
|
39
39
|
* }>
|
|
40
40
|
*/
|
|
41
41
|
sections: $ReadOnlyArray<SectionT>,
|
|
42
|
-
|
|
42
|
+
};
|
|
43
43
|
|
|
44
|
-
type OptionalProps<SectionT: SectionBase<any>> = {
|
|
44
|
+
type OptionalProps<SectionT: SectionBase<any>> = {
|
|
45
45
|
/**
|
|
46
46
|
* Default renderer for every item in every section. Can be over-ridden on a per-section basis.
|
|
47
47
|
*/
|
|
@@ -91,9 +91,9 @@ type OptionalProps<SectionT: SectionBase<any>> = {|
|
|
|
91
91
|
* This may improve scroll performance for large lists.
|
|
92
92
|
*/
|
|
93
93
|
removeClippedSubviews?: boolean,
|
|
94
|
-
|
|
94
|
+
};
|
|
95
95
|
|
|
96
|
-
export type Props<SectionT: SectionBase<any>> = $ReadOnly<{
|
|
96
|
+
export type Props<SectionT: SectionBase<any>> = $ReadOnly<{
|
|
97
97
|
...$Diff<
|
|
98
98
|
VirtualizedSectionListProps<SectionT>,
|
|
99
99
|
{
|
|
@@ -115,7 +115,7 @@ export type Props<SectionT: SectionBase<any>> = $ReadOnly<{|
|
|
|
115
115
|
>,
|
|
116
116
|
...RequiredProps<SectionT>,
|
|
117
117
|
...OptionalProps<SectionT>,
|
|
118
|
-
|
|
118
|
+
}>;
|
|
119
119
|
|
|
120
120
|
/**
|
|
121
121
|
* A performant interface for rendering sectioned lists, supporting the most handy features:
|
|
@@ -37,20 +37,20 @@ export type LogData = $ReadOnly<{
|
|
|
37
37
|
}>;
|
|
38
38
|
|
|
39
39
|
export type Observer = (
|
|
40
|
-
$ReadOnly<{
|
|
40
|
+
$ReadOnly<{
|
|
41
41
|
logs: LogBoxLogs,
|
|
42
42
|
isDisabled: boolean,
|
|
43
43
|
selectedLogIndex: number,
|
|
44
|
-
|
|
44
|
+
}>,
|
|
45
45
|
) => void;
|
|
46
46
|
|
|
47
47
|
export type IgnorePattern = string | RegExp;
|
|
48
48
|
|
|
49
|
-
export type Subscription = $ReadOnly<{
|
|
49
|
+
export type Subscription = $ReadOnly<{
|
|
50
50
|
unsubscribe: () => void,
|
|
51
|
-
|
|
51
|
+
}>;
|
|
52
52
|
|
|
53
|
-
export type WarningInfo = {
|
|
53
|
+
export type WarningInfo = {
|
|
54
54
|
finalFormat: string,
|
|
55
55
|
forceDialogImmediately: boolean,
|
|
56
56
|
suppressDialog_LEGACY: boolean,
|
|
@@ -58,15 +58,15 @@ export type WarningInfo = {|
|
|
|
58
58
|
monitorEvent: string | null,
|
|
59
59
|
monitorListVersion: number,
|
|
60
60
|
monitorSampleRate: number,
|
|
61
|
-
|
|
61
|
+
};
|
|
62
62
|
|
|
63
63
|
export type WarningFilter = (format: string) => WarningInfo;
|
|
64
64
|
|
|
65
|
-
type AppInfo = $ReadOnly<{
|
|
65
|
+
type AppInfo = $ReadOnly<{
|
|
66
66
|
appVersion: string,
|
|
67
67
|
engine: string,
|
|
68
68
|
onPress?: ?() => void,
|
|
69
|
-
|
|
69
|
+
}>;
|
|
70
70
|
|
|
71
71
|
const observers: Set<{observer: Observer, ...}> = new Set();
|
|
72
72
|
const ignorePatterns: Set<IgnorePattern> = new Set();
|
|
@@ -413,25 +413,25 @@ export function observe(observer: Observer): Subscription {
|
|
|
413
413
|
};
|
|
414
414
|
}
|
|
415
415
|
|
|
416
|
-
type Props = $ReadOnly<{
|
|
417
|
-
type State = $ReadOnly<{
|
|
416
|
+
type Props = $ReadOnly<{}>;
|
|
417
|
+
type State = $ReadOnly<{
|
|
418
418
|
logs: LogBoxLogs,
|
|
419
419
|
isDisabled: boolean,
|
|
420
420
|
hasError: boolean,
|
|
421
421
|
selectedLogIndex: number,
|
|
422
|
-
|
|
422
|
+
}>;
|
|
423
423
|
|
|
424
424
|
type SubscribedComponent = React.ComponentType<
|
|
425
|
-
$ReadOnly<{
|
|
425
|
+
$ReadOnly<{
|
|
426
426
|
logs: $ReadOnlyArray<LogBoxLog>,
|
|
427
427
|
isDisabled: boolean,
|
|
428
428
|
selectedLogIndex: number,
|
|
429
|
-
|
|
429
|
+
}>,
|
|
430
430
|
>;
|
|
431
431
|
|
|
432
432
|
export function withSubscription(
|
|
433
433
|
WrappedComponent: SubscribedComponent,
|
|
434
|
-
): React.ComponentType<{
|
|
434
|
+
): React.ComponentType<{}> {
|
|
435
435
|
class LogBoxStateSubscription extends React.Component<Props, State> {
|
|
436
436
|
static getDerivedStateFromError(): {hasError: boolean} {
|
|
437
437
|
return {hasError: true};
|
|
@@ -79,26 +79,27 @@ class LogBoxLog {
|
|
|
79
79
|
count: number;
|
|
80
80
|
level: LogLevel;
|
|
81
81
|
codeFrame: ?CodeFrame;
|
|
82
|
+
componentCodeFrame: ?CodeFrame;
|
|
82
83
|
isComponentError: boolean;
|
|
83
84
|
extraData: mixed | void;
|
|
84
85
|
symbolicated:
|
|
85
|
-
| $ReadOnly<{
|
|
86
|
-
| $ReadOnly<{
|
|
87
|
-
| $ReadOnly<{
|
|
88
|
-
| $ReadOnly<{
|
|
86
|
+
| $ReadOnly<{error: null, stack: null, status: 'NONE'}>
|
|
87
|
+
| $ReadOnly<{error: null, stack: null, status: 'PENDING'}>
|
|
88
|
+
| $ReadOnly<{error: null, stack: Stack, status: 'COMPLETE'}>
|
|
89
|
+
| $ReadOnly<{error: Error, stack: null, status: 'FAILED'}> = {
|
|
89
90
|
error: null,
|
|
90
91
|
stack: null,
|
|
91
92
|
status: 'NONE',
|
|
92
93
|
};
|
|
93
94
|
symbolicatedComponentStack:
|
|
94
|
-
| $ReadOnly<{
|
|
95
|
-
| $ReadOnly<{
|
|
96
|
-
| $ReadOnly<{
|
|
95
|
+
| $ReadOnly<{error: null, componentStack: null, status: 'NONE'}>
|
|
96
|
+
| $ReadOnly<{error: null, componentStack: null, status: 'PENDING'}>
|
|
97
|
+
| $ReadOnly<{
|
|
97
98
|
error: null,
|
|
98
99
|
componentStack: ComponentStack,
|
|
99
100
|
status: 'COMPLETE',
|
|
100
|
-
|
|
101
|
-
| $ReadOnly<{
|
|
101
|
+
}>
|
|
102
|
+
| $ReadOnly<{error: Error, componentStack: null, status: 'FAILED'}> = {
|
|
102
103
|
error: null,
|
|
103
104
|
componentStack: null,
|
|
104
105
|
status: 'NONE',
|
|
@@ -140,8 +141,18 @@ class LogBoxLog {
|
|
|
140
141
|
}
|
|
141
142
|
|
|
142
143
|
retrySymbolicate(callback?: (status: SymbolicationStatus) => void): void {
|
|
144
|
+
let retry = false;
|
|
143
145
|
if (this.symbolicated.status !== 'COMPLETE') {
|
|
144
146
|
LogBoxSymbolication.deleteStack(this.stack);
|
|
147
|
+
retry = true;
|
|
148
|
+
}
|
|
149
|
+
if (this.symbolicatedComponentStack.status !== 'COMPLETE') {
|
|
150
|
+
LogBoxSymbolication.deleteStack(
|
|
151
|
+
convertComponentStateToStack(this.componentStack),
|
|
152
|
+
);
|
|
153
|
+
retry = true;
|
|
154
|
+
}
|
|
155
|
+
if (retry) {
|
|
145
156
|
this.handleSymbolicate(callback);
|
|
146
157
|
}
|
|
147
158
|
}
|
|
@@ -153,7 +164,10 @@ class LogBoxLog {
|
|
|
153
164
|
}
|
|
154
165
|
|
|
155
166
|
handleSymbolicate(callback?: (status: SymbolicationStatus) => void): void {
|
|
156
|
-
if (
|
|
167
|
+
if (
|
|
168
|
+
this.symbolicated.status !== 'PENDING' &&
|
|
169
|
+
this.symbolicated.status !== 'COMPLETE'
|
|
170
|
+
) {
|
|
157
171
|
this.updateStatus(null, null, null, callback);
|
|
158
172
|
LogBoxSymbolication.symbolicate(this.stack, this.extraData).then(
|
|
159
173
|
data => {
|
|
@@ -163,25 +177,30 @@ class LogBoxLog {
|
|
|
163
177
|
this.updateStatus(error, null, null, callback);
|
|
164
178
|
},
|
|
165
179
|
);
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
180
|
+
}
|
|
181
|
+
if (
|
|
182
|
+
this.componentStack != null &&
|
|
183
|
+
this.componentStackType === 'stack' &&
|
|
184
|
+
this.symbolicatedComponentStack.status !== 'PENDING' &&
|
|
185
|
+
this.symbolicatedComponentStack.status !== 'COMPLETE'
|
|
186
|
+
) {
|
|
187
|
+
this.updateComponentStackStatus(null, null, null, callback);
|
|
188
|
+
const componentStackFrames = convertComponentStateToStack(
|
|
189
|
+
this.componentStack,
|
|
190
|
+
);
|
|
191
|
+
LogBoxSymbolication.symbolicate(componentStackFrames, []).then(
|
|
192
|
+
data => {
|
|
193
|
+
this.updateComponentStackStatus(
|
|
194
|
+
null,
|
|
195
|
+
convertStackToComponentStack(data.stack),
|
|
196
|
+
data?.codeFrame,
|
|
197
|
+
callback,
|
|
198
|
+
);
|
|
199
|
+
},
|
|
200
|
+
error => {
|
|
201
|
+
this.updateComponentStackStatus(error, null, null, callback);
|
|
202
|
+
},
|
|
203
|
+
);
|
|
185
204
|
}
|
|
186
205
|
}
|
|
187
206
|
|
|
@@ -235,6 +254,9 @@ class LogBoxLog {
|
|
|
235
254
|
status: 'FAILED',
|
|
236
255
|
};
|
|
237
256
|
} else if (componentStack != null) {
|
|
257
|
+
if (codeFrame) {
|
|
258
|
+
this.componentCodeFrame = codeFrame;
|
|
259
|
+
}
|
|
238
260
|
this.symbolicatedComponentStack = {
|
|
239
261
|
error: null,
|
|
240
262
|
componentStack,
|
|
@@ -107,7 +107,7 @@ export type ExtendedExceptionData = ExceptionData & {
|
|
|
107
107
|
...
|
|
108
108
|
};
|
|
109
109
|
export type Category = string;
|
|
110
|
-
export type CodeFrame = $ReadOnly<{
|
|
110
|
+
export type CodeFrame = $ReadOnly<{
|
|
111
111
|
content: string,
|
|
112
112
|
location: ?{
|
|
113
113
|
row: number,
|
|
@@ -120,26 +120,26 @@ export type CodeFrame = $ReadOnly<{|
|
|
|
120
120
|
// we gained the ability to use the collapse flag, but
|
|
121
121
|
// it is not integrated into the LogBox UI.
|
|
122
122
|
collapse?: boolean,
|
|
123
|
-
|
|
124
|
-
export type Message = $ReadOnly<{
|
|
123
|
+
}>;
|
|
124
|
+
export type Message = $ReadOnly<{
|
|
125
125
|
content: string,
|
|
126
126
|
substitutions: $ReadOnlyArray<
|
|
127
|
-
$ReadOnly<{
|
|
127
|
+
$ReadOnly<{
|
|
128
128
|
length: number,
|
|
129
129
|
offset: number,
|
|
130
|
-
|
|
130
|
+
}>,
|
|
131
131
|
>,
|
|
132
|
-
|
|
132
|
+
}>;
|
|
133
133
|
|
|
134
134
|
export type ComponentStack = $ReadOnlyArray<CodeFrame>;
|
|
135
135
|
export type ComponentStackType = 'legacy' | 'stack';
|
|
136
136
|
|
|
137
137
|
const SUBSTITUTION = UTFSequence.BOM + '%s';
|
|
138
138
|
|
|
139
|
-
export function parseInterpolation(args: $ReadOnlyArray<mixed>): $ReadOnly<{
|
|
139
|
+
export function parseInterpolation(args: $ReadOnlyArray<mixed>): $ReadOnly<{
|
|
140
140
|
category: Category,
|
|
141
141
|
message: Message,
|
|
142
|
-
|
|
142
|
+
}> {
|
|
143
143
|
const categoryParts = [];
|
|
144
144
|
const contentParts = [];
|
|
145
145
|
const substitutionOffsets = [];
|
|
@@ -456,12 +456,12 @@ export function withoutANSIColorStyles(message: mixed): mixed {
|
|
|
456
456
|
);
|
|
457
457
|
}
|
|
458
458
|
|
|
459
|
-
export function parseLogBoxLog(args: $ReadOnlyArray<mixed>): {
|
|
459
|
+
export function parseLogBoxLog(args: $ReadOnlyArray<mixed>): {
|
|
460
460
|
componentStack: ComponentStack,
|
|
461
461
|
componentStackType: ComponentStackType,
|
|
462
462
|
category: Category,
|
|
463
463
|
message: Message,
|
|
464
|
-
|
|
464
|
+
} {
|
|
465
465
|
const message = withoutANSIColorStyles(args[0]);
|
|
466
466
|
let argsWithoutComponentStack: Array<mixed> = [];
|
|
467
467
|
let componentStack: ComponentStack = [];
|
|
@@ -14,6 +14,7 @@ import type {ExtendedExceptionData} from './Data/parseLogBoxLog';
|
|
|
14
14
|
import Platform from '../Utilities/Platform';
|
|
15
15
|
import RCTLog from '../Utilities/RCTLog';
|
|
16
16
|
import {hasComponentStack} from './Data/parseLogBoxLog';
|
|
17
|
+
import * as React from 'react';
|
|
17
18
|
|
|
18
19
|
export type {LogData, ExtendedExceptionData, IgnorePattern};
|
|
19
20
|
|
|
@@ -192,9 +193,20 @@ if (__DEV__) {
|
|
|
192
193
|
}
|
|
193
194
|
|
|
194
195
|
try {
|
|
196
|
+
let stack;
|
|
197
|
+
// $FlowFixMe[prop-missing] Not added to flow types yet.
|
|
198
|
+
if (!hasComponentStack(args) && React.captureOwnerStack != null) {
|
|
199
|
+
stack = React.captureOwnerStack();
|
|
200
|
+
if (!hasComponentStack(args)) {
|
|
201
|
+
if (stack !== '') {
|
|
202
|
+
args[0] = args[0] += '%s';
|
|
203
|
+
args.push(stack);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
195
207
|
if (!isWarningModuleWarning(...args) && !hasComponentStack(args)) {
|
|
196
208
|
// Only show LogBox for the 'warning' module, or React errors with
|
|
197
|
-
// component stacks, otherwise pass the error through.
|
|
209
|
+
// component stacks, otherwise pass the error through.
|
|
198
210
|
//
|
|
199
211
|
// By passing through, this will get picked up by the React console override,
|
|
200
212
|
// potentially adding the component stack. React then passes it back to the
|
|
@@ -16,11 +16,11 @@ import * as LogBoxData from './Data/LogBoxData';
|
|
|
16
16
|
import LogBoxInspector from './UI/LogBoxInspector';
|
|
17
17
|
import * as React from 'react';
|
|
18
18
|
|
|
19
|
-
type Props = $ReadOnly<{
|
|
19
|
+
type Props = $ReadOnly<{
|
|
20
20
|
logs: $ReadOnlyArray<LogBoxLog>,
|
|
21
21
|
selectedLogIndex: number,
|
|
22
22
|
isDisabled?: ?boolean,
|
|
23
|
-
|
|
23
|
+
}>;
|
|
24
24
|
|
|
25
25
|
export class _LogBoxInspectorContainer extends React.Component<Props> {
|
|
26
26
|
render(): React.Node {
|
|
@@ -65,4 +65,4 @@ export class _LogBoxInspectorContainer extends React.Component<Props> {
|
|
|
65
65
|
|
|
66
66
|
export default (LogBoxData.withSubscription(
|
|
67
67
|
_LogBoxInspectorContainer,
|
|
68
|
-
): React.ComponentType<{
|
|
68
|
+
): React.ComponentType<{}>);
|
|
@@ -16,11 +16,11 @@ import LogBoxLog from './Data/LogBoxLog';
|
|
|
16
16
|
import LogBoxLogNotification from './UI/LogBoxNotification';
|
|
17
17
|
import * as React from 'react';
|
|
18
18
|
|
|
19
|
-
type Props = $ReadOnly<{
|
|
19
|
+
type Props = $ReadOnly<{
|
|
20
20
|
logs: $ReadOnlyArray<LogBoxLog>,
|
|
21
21
|
selectedLogIndex: number,
|
|
22
22
|
isDisabled?: ?boolean,
|
|
23
|
-
|
|
23
|
+
}>;
|
|
24
24
|
|
|
25
25
|
export function _LogBoxNotificationContainer(props: Props): React.Node {
|
|
26
26
|
const {logs} = props;
|
|
@@ -102,4 +102,4 @@ const styles = StyleSheet.create({
|
|
|
102
102
|
|
|
103
103
|
export default (LogBoxData.withSubscription(
|
|
104
104
|
_LogBoxNotificationContainer,
|
|
105
|
-
): React.ComponentType<{
|
|
105
|
+
): React.ComponentType<{}>);
|
|
@@ -18,16 +18,16 @@ import StyleSheet from '../../StyleSheet/StyleSheet';
|
|
|
18
18
|
import * as LogBoxStyle from './LogBoxStyle';
|
|
19
19
|
import * as React from 'react';
|
|
20
20
|
|
|
21
|
-
type Props = $ReadOnly<{
|
|
22
|
-
backgroundColor: $ReadOnly<{
|
|
21
|
+
type Props = $ReadOnly<{
|
|
22
|
+
backgroundColor: $ReadOnly<{
|
|
23
23
|
default: string,
|
|
24
24
|
pressed: string,
|
|
25
|
-
|
|
25
|
+
}>,
|
|
26
26
|
children?: React.Node,
|
|
27
27
|
hitSlop?: ?EdgeInsetsProp,
|
|
28
28
|
onPress?: ?(event: PressEvent) => void,
|
|
29
29
|
style?: ViewStyleProp,
|
|
30
|
-
|
|
30
|
+
}>;
|
|
31
31
|
|
|
32
32
|
function LogBoxButton(props: Props): React.Node {
|
|
33
33
|
const [pressed, setPressed] = React.useState(false);
|
|
@@ -52,7 +52,10 @@ export default function LogBoxInspectorBody(props: {
|
|
|
52
52
|
title={headerTitle}
|
|
53
53
|
/>
|
|
54
54
|
<ScrollView style={styles.scrollBody}>
|
|
55
|
-
<LogBoxInspectorCodeFrame
|
|
55
|
+
<LogBoxInspectorCodeFrame
|
|
56
|
+
codeFrame={props.log.codeFrame}
|
|
57
|
+
componentCodeFrame={props.log.componentCodeFrame}
|
|
58
|
+
/>
|
|
56
59
|
<LogBoxInspectorReactFrames log={props.log} />
|
|
57
60
|
<LogBoxInspectorStackFrames log={props.log} onRetry={props.onRetry} />
|
|
58
61
|
</ScrollView>
|
|
@@ -68,7 +71,10 @@ export default function LogBoxInspectorBody(props: {
|
|
|
68
71
|
level={props.log.level}
|
|
69
72
|
title={headerTitle}
|
|
70
73
|
/>
|
|
71
|
-
<LogBoxInspectorCodeFrame
|
|
74
|
+
<LogBoxInspectorCodeFrame
|
|
75
|
+
codeFrame={props.log.codeFrame}
|
|
76
|
+
componentCodeFrame={props.log.componentCodeFrame}
|
|
77
|
+
/>
|
|
72
78
|
<LogBoxInspectorReactFrames log={props.log} />
|
|
73
79
|
<LogBoxInspectorStackFrames log={props.log} onRetry={props.onRetry} />
|
|
74
80
|
</ScrollView>
|
|
@@ -22,16 +22,13 @@ import LogBoxButton from './LogBoxButton';
|
|
|
22
22
|
import LogBoxInspectorSection from './LogBoxInspectorSection';
|
|
23
23
|
import * as LogBoxStyle from './LogBoxStyle';
|
|
24
24
|
import * as React from 'react';
|
|
25
|
-
type Props = $ReadOnly<{|
|
|
26
|
-
codeFrame: ?CodeFrame,
|
|
27
|
-
|}>;
|
|
28
25
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
26
|
+
type Props = $ReadOnly<{
|
|
27
|
+
componentCodeFrame: ?CodeFrame,
|
|
28
|
+
codeFrame: ?CodeFrame,
|
|
29
|
+
}>;
|
|
34
30
|
|
|
31
|
+
function CodeFrameDisplay({codeFrame}: {codeFrame: CodeFrame}): React.Node {
|
|
35
32
|
function getFileName() {
|
|
36
33
|
// $FlowFixMe[incompatible-use]
|
|
37
34
|
const matches = /[^/]*$/.exec(codeFrame.fileName);
|
|
@@ -56,30 +53,52 @@ function LogBoxInspectorCodeFrame(props: Props): React.Node {
|
|
|
56
53
|
}
|
|
57
54
|
|
|
58
55
|
return (
|
|
59
|
-
<
|
|
60
|
-
<View style={styles.
|
|
61
|
-
<
|
|
62
|
-
<
|
|
63
|
-
|
|
64
|
-
contentContainerStyle={styles.contentContainer}>
|
|
65
|
-
<AnsiHighlight style={styles.content} text={codeFrame.content} />
|
|
66
|
-
</ScrollView>
|
|
67
|
-
</View>
|
|
68
|
-
<LogBoxButton
|
|
69
|
-
backgroundColor={{
|
|
70
|
-
default: 'transparent',
|
|
71
|
-
pressed: LogBoxStyle.getBackgroundDarkColor(1),
|
|
72
|
-
}}
|
|
73
|
-
style={styles.button}
|
|
74
|
-
onPress={() => {
|
|
75
|
-
openFileInEditor(codeFrame.fileName, codeFrame.location?.row ?? 0);
|
|
76
|
-
}}>
|
|
77
|
-
<Text style={styles.fileText}>
|
|
78
|
-
{getFileName()}
|
|
79
|
-
{getLocation()}
|
|
80
|
-
</Text>
|
|
81
|
-
</LogBoxButton>
|
|
56
|
+
<View style={styles.box}>
|
|
57
|
+
<View style={styles.frame}>
|
|
58
|
+
<ScrollView horizontal contentContainerStyle={styles.contentContainer}>
|
|
59
|
+
<AnsiHighlight style={styles.content} text={codeFrame.content} />
|
|
60
|
+
</ScrollView>
|
|
82
61
|
</View>
|
|
62
|
+
<LogBoxButton
|
|
63
|
+
backgroundColor={{
|
|
64
|
+
default: 'transparent',
|
|
65
|
+
pressed: LogBoxStyle.getBackgroundDarkColor(1),
|
|
66
|
+
}}
|
|
67
|
+
style={styles.button}
|
|
68
|
+
onPress={() => {
|
|
69
|
+
openFileInEditor(codeFrame.fileName, codeFrame.location?.row ?? 0);
|
|
70
|
+
}}>
|
|
71
|
+
<Text style={styles.fileText}>
|
|
72
|
+
{getFileName()}
|
|
73
|
+
{getLocation()}
|
|
74
|
+
</Text>
|
|
75
|
+
</LogBoxButton>
|
|
76
|
+
</View>
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function LogBoxInspectorCodeFrame(props: Props): React.Node {
|
|
81
|
+
const {codeFrame, componentCodeFrame} = props;
|
|
82
|
+
let sources = [];
|
|
83
|
+
if (codeFrame != null) {
|
|
84
|
+
sources.push(codeFrame);
|
|
85
|
+
}
|
|
86
|
+
if (
|
|
87
|
+
componentCodeFrame != null &&
|
|
88
|
+
componentCodeFrame?.content !== codeFrame?.content
|
|
89
|
+
) {
|
|
90
|
+
sources.push(componentCodeFrame);
|
|
91
|
+
}
|
|
92
|
+
if (sources.length === 0) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
return (
|
|
96
|
+
<LogBoxInspectorSection
|
|
97
|
+
heading={sources.length > 1 ? 'Sources' : 'Source'}
|
|
98
|
+
action={<AppInfo />}>
|
|
99
|
+
{sources.map((frame, index) => (
|
|
100
|
+
<CodeFrameDisplay key={index} codeFrame={frame} />
|
|
101
|
+
))}
|
|
83
102
|
</LogBoxInspectorSection>
|
|
84
103
|
);
|
|
85
104
|
}
|