UNPKG

4.83 kBJavaScriptView Raw
1import _extends from "@babel/runtime/helpers/extends";
2import _defineProperty from "@babel/runtime/helpers/defineProperty";
3import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4var _excluded = ["getItemString", "keyPath", "labelRenderer", "styling", "value", "valueRenderer", "isCustomNode"];
5
6function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7
8function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9
10import React from 'react';
11import PropTypes from 'prop-types';
12import objType from './objType';
13import JSONObjectNode from './JSONObjectNode';
14import JSONArrayNode from './JSONArrayNode';
15import JSONIterableNode from './JSONIterableNode';
16import JSONValueNode from './JSONValueNode';
17
18var JSONNode = function JSONNode(_ref) {
19 var getItemString = _ref.getItemString,
20 keyPath = _ref.keyPath,
21 labelRenderer = _ref.labelRenderer,
22 styling = _ref.styling,
23 value = _ref.value,
24 valueRenderer = _ref.valueRenderer,
25 isCustomNode = _ref.isCustomNode,
26 rest = _objectWithoutProperties(_ref, _excluded);
27
28 var nodeType = isCustomNode(value) ? 'Custom' : objType(value);
29 var simpleNodeProps = {
30 getItemString: getItemString,
31 key: keyPath[0],
32 keyPath: keyPath,
33 labelRenderer: labelRenderer,
34 nodeType: nodeType,
35 styling: styling,
36 value: value,
37 valueRenderer: valueRenderer
38 };
39
40 var nestedNodeProps = _objectSpread(_objectSpread(_objectSpread({}, rest), simpleNodeProps), {}, {
41 data: value,
42 isCustomNode: isCustomNode
43 });
44
45 switch (nodeType) {
46 case 'Object':
47 case 'Error':
48 case 'WeakMap':
49 case 'WeakSet':
50 return /*#__PURE__*/React.createElement(JSONObjectNode, nestedNodeProps);
51
52 case 'Array':
53 return /*#__PURE__*/React.createElement(JSONArrayNode, nestedNodeProps);
54
55 case 'Iterable':
56 case 'Map':
57 case 'Set':
58 return /*#__PURE__*/React.createElement(JSONIterableNode, nestedNodeProps);
59
60 case 'String':
61 return /*#__PURE__*/React.createElement(JSONValueNode, _extends({}, simpleNodeProps, {
62 valueGetter: function valueGetter(raw) {
63 return "\"".concat(raw, "\"");
64 }
65 }));
66
67 case 'Number':
68 return /*#__PURE__*/React.createElement(JSONValueNode, simpleNodeProps);
69
70 case 'Boolean':
71 return /*#__PURE__*/React.createElement(JSONValueNode, _extends({}, simpleNodeProps, {
72 valueGetter: function valueGetter(raw) {
73 return raw ? 'true' : 'false';
74 }
75 }));
76
77 case 'Date':
78 return /*#__PURE__*/React.createElement(JSONValueNode, _extends({}, simpleNodeProps, {
79 valueGetter: function valueGetter(raw) {
80 return raw.toISOString();
81 }
82 }));
83
84 case 'Null':
85 return /*#__PURE__*/React.createElement(JSONValueNode, _extends({}, simpleNodeProps, {
86 valueGetter: function valueGetter() {
87 return 'null';
88 }
89 }));
90
91 case 'Undefined':
92 return /*#__PURE__*/React.createElement(JSONValueNode, _extends({}, simpleNodeProps, {
93 valueGetter: function valueGetter() {
94 return 'undefined';
95 }
96 }));
97
98 case 'Function':
99 case 'Symbol':
100 return /*#__PURE__*/React.createElement(JSONValueNode, _extends({}, simpleNodeProps, {
101 valueGetter: function valueGetter(raw) {
102 return raw.toString();
103 }
104 }));
105
106 case 'Custom':
107 return /*#__PURE__*/React.createElement(JSONValueNode, simpleNodeProps);
108
109 default:
110 return /*#__PURE__*/React.createElement(JSONValueNode, _extends({}, simpleNodeProps, {
111 valueGetter: function valueGetter() {
112 return "<".concat(nodeType, ">");
113 }
114 }));
115 }
116};
117
118JSONNode.propTypes = {
119 getItemString: PropTypes.func.isRequired,
120 keyPath: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired).isRequired,
121 labelRenderer: PropTypes.func.isRequired,
122 styling: PropTypes.func.isRequired,
123 value: PropTypes.any,
124 valueRenderer: PropTypes.func.isRequired,
125 isCustomNode: PropTypes.func.isRequired
126};
127export default JSONNode;
\No newline at end of file