12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /**
- * 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,
- plaintext?: ?boolean,
- maxLength?: ?number,
- ...
- };
- const cleanContent = content =>
- content.replace(/^(TransformError |Warning: (Warning: )?|Error: )/g, '');
- function LogBoxMessage(props: Props): React.Node {
- const {content, substitutions}: Message = props.message;
- if (props.plaintext === true) {
- return <Text>{cleanContent(content)}</Text>;
- }
- const maxLength = props.maxLength != null ? props.maxLength : Infinity;
- const substitutionStyle: TextStyleProp = props.style;
- const elements = [];
- let length = 0;
- const createUnderLength = (key, message, style) => {
- let cleanMessage = cleanContent(message);
- if (props.maxLength != null) {
- cleanMessage = cleanMessage.slice(0, props.maxLength - length);
- }
- if (length < maxLength) {
- elements.push(
- <Text key={key} style={style}>
- {cleanMessage}
- </Text>,
- );
- }
- length += cleanMessage.length;
- };
- const lastOffset = substitutions.reduce((prevOffset, substitution, index) => {
- const key = String(index);
- if (substitution.offset > prevOffset) {
- const prevPart = content.substr(
- prevOffset,
- substitution.offset - prevOffset,
- );
- createUnderLength(key, prevPart);
- }
- const substititionPart = content.substr(
- substitution.offset,
- substitution.length,
- );
- createUnderLength(key + '.5', substititionPart, substitutionStyle);
- return substitution.offset + substitution.length;
- }, 0);
- if (lastOffset < content.length) {
- const lastPart = content.substr(lastOffset);
- createUnderLength('-1', lastPart);
- }
- return <>{elements}</>;
- }
- export default LogBoxMessage;
|