mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
b2bafa06fa
Summary: This diff adds support for thrown exceptions to redboxes, and hides the native redbox when we show an error in LogBox. Changelog: [Internal] Reviewed By: cpojer Differential Revision: D18212064 fbshipit-source-id: 92031d554968bcb079f81568673ae85697c8f5ad
65 lines
1.6 KiB
JavaScript
65 lines
1.6 KiB
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @flow strict-local
|
|
* @format
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
import * as React from 'react';
|
|
import Text from '../../Text/Text';
|
|
|
|
import type {TextStyleProp} from '../../StyleSheet/StyleSheet';
|
|
import type {Message} from '../Data/parseLogBoxLog';
|
|
|
|
type Props = {
|
|
message: Message,
|
|
style: TextStyleProp,
|
|
};
|
|
|
|
const cleanContent = content => content.replace(/(Warning|Error): /g, '');
|
|
|
|
function LogBoxMessage(props: Props): React.Node {
|
|
const {content, substitutions}: Message = props.message;
|
|
const substitutionStyle: TextStyleProp = props.style;
|
|
const elements = [];
|
|
|
|
const lastOffset = substitutions.reduce((prevOffset, substitution, index) => {
|
|
const key = String(index);
|
|
|
|
if (substitution.offset > prevOffset) {
|
|
const prevPart = content.substr(
|
|
prevOffset,
|
|
substitution.offset - prevOffset,
|
|
);
|
|
|
|
elements.push(<Text key={key}>{cleanContent(prevPart)}</Text>);
|
|
}
|
|
|
|
const substititionPart = content.substr(
|
|
substitution.offset,
|
|
substitution.length,
|
|
);
|
|
elements.push(
|
|
<Text key={key + '.5'} style={substitutionStyle}>
|
|
{cleanContent(substititionPart)}
|
|
</Text>,
|
|
);
|
|
|
|
return substitution.offset + substitution.length;
|
|
}, 0);
|
|
|
|
if (lastOffset < content.length) {
|
|
const lastPart = content.substr(lastOffset);
|
|
elements.push(<Text key="-1">{cleanContent(lastPart)}</Text>);
|
|
}
|
|
|
|
return <>{elements}</>;
|
|
}
|
|
|
|
export default LogBoxMessage;
|