UNPKG

2.45 kBJavaScriptView Raw
1import React from 'react';
2import objType from './objType.js';
3import JSONObjectNode from './JSONObjectNode.js';
4import JSONArrayNode from './JSONArrayNode.js';
5import JSONIterableNode from './JSONIterableNode.js';
6import JSONValueNode from './JSONValueNode.js';
7export default function JSONNode({ getItemString, keyPath, labelRenderer, styling, value, valueRenderer, isCustomNode, ...rest }) {
8 const nodeType = isCustomNode(value) ? 'Custom' : objType(value);
9 const simpleNodeProps = {
10 getItemString,
11 key: keyPath[0],
12 keyPath,
13 labelRenderer,
14 nodeType,
15 styling,
16 value,
17 valueRenderer,
18 };
19 const nestedNodeProps = {
20 ...rest,
21 ...simpleNodeProps,
22 data: value,
23 isCustomNode,
24 };
25 switch (nodeType) {
26 case 'Object':
27 case 'Error':
28 case 'WeakMap':
29 case 'WeakSet':
30 return React.createElement(JSONObjectNode, { ...nestedNodeProps });
31 case 'Array':
32 return React.createElement(JSONArrayNode, { ...nestedNodeProps });
33 case 'Iterable':
34 case 'Map':
35 case 'Set':
36 return React.createElement(JSONIterableNode, { ...nestedNodeProps });
37 case 'String':
38 return (React.createElement(JSONValueNode, { ...simpleNodeProps, valueGetter: (raw) => `"${raw}"` }));
39 case 'Number':
40 return React.createElement(JSONValueNode, { ...simpleNodeProps });
41 case 'Boolean':
42 return (React.createElement(JSONValueNode, { ...simpleNodeProps, valueGetter: (raw) => (raw ? 'true' : 'false') }));
43 case 'Date':
44 return (React.createElement(JSONValueNode, { ...simpleNodeProps, valueGetter: (raw) => raw.toISOString() }));
45 case 'Null':
46 return React.createElement(JSONValueNode, { ...simpleNodeProps, valueGetter: () => 'null' });
47 case 'Undefined':
48 return (React.createElement(JSONValueNode, { ...simpleNodeProps, valueGetter: () => 'undefined' }));
49 case 'Function':
50 case 'Symbol':
51 return (React.createElement(JSONValueNode, { ...simpleNodeProps, valueGetter: (raw) => raw.toString() }));
52 case 'Custom':
53 return React.createElement(JSONValueNode, { ...simpleNodeProps });
54 default:
55 return (React.createElement(JSONValueNode, { ...simpleNodeProps, valueGetter: () => `<${nodeType}>` }));
56 }
57}