/**
* Copyright 2018-present Facebook.
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
* @format
*/
import {DataValueExtractor, InspectorName} from './DataInspector';
import DataDescription from './DataDescription.js';
import styled from 'react-emotion';
import {getSortedKeys} from './utils.js';
import {PureComponent} from 'react';
import React from 'react';
const PreviewContainer = styled('span')({
fontStyle: 'italic',
});
function intersperse(arr, sep) {
if (arr.length === 0) {
return [];
}
return arr.slice(1).reduce(
(xs, x, i) => {
return xs.concat([sep, x]);
},
[arr[0]],
);
}
export default class DataPreview extends PureComponent<{
type: string;
value: any;
depth: number;
extractValue: DataValueExtractor;
maxProperties: number;
}> {
static defaultProps = {
maxProperties: 5,
};
render() {
const {depth, extractValue, type, value} = this.props;
if (type === 'array') {
return (
{'['}
{intersperse(
value.map((element, index) => {
const res = extractValue(element, depth + 1);
if (!res) {
return null;
}
const {type, value} = res;
return (
);
}),
', ',
)}
{']'}
);
} else if (type === 'date') {
return {value.toString()};
} else if (type === 'object') {
const propertyNodes = [];
const keys = getSortedKeys(value);
let i = 0;
for (const key of keys) {
let ellipsis;
i++;
if (i >= this.props.maxProperties) {
ellipsis = …;
}
propertyNodes.push(
{key}
{ellipsis}
,
);
if (ellipsis) {
break;
}
}
return (
{'{'}
{intersperse(propertyNodes, ', ')}
{'}'}
);
} else {
return null;
}
}
}