UNPKG

9.8 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.default = void 0;
9
10var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
12var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
14var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
16var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
18var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
20var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
22var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
24var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
25
26var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
27
28var _react = _interopRequireDefault(require("react"));
29
30var _propTypes = _interopRequireDefault(require("prop-types"));
31
32var _JSONArrow = _interopRequireDefault(require("./JSONArrow"));
33
34var _getCollectionEntries = _interopRequireDefault(require("./getCollectionEntries"));
35
36var _JSONNode = _interopRequireDefault(require("./JSONNode"));
37
38var _ItemRange = _interopRequireDefault(require("./ItemRange"));
39
40function 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; }
41
42function _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) { (0, _defineProperty2.default)(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; }
43
44function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
45
46function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
47
48function isRange(rangeOrEntry) {
49 return rangeOrEntry.to !== undefined;
50}
51
52function renderChildNodes(props, from, to) {
53 var nodeType = props.nodeType,
54 data = props.data,
55 collectionLimit = props.collectionLimit,
56 circularCache = props.circularCache,
57 keyPath = props.keyPath,
58 postprocessValue = props.postprocessValue,
59 sortObjectKeys = props.sortObjectKeys;
60 var childNodes = [];
61 (0, _getCollectionEntries.default)(nodeType, data, sortObjectKeys, collectionLimit, from, to).forEach(function (entry) {
62 if (isRange(entry)) {
63 childNodes.push( /*#__PURE__*/_react.default.createElement(_ItemRange.default, (0, _extends2.default)({}, props, {
64 key: "ItemRange--".concat(entry.from, "-").concat(entry.to),
65 from: entry.from,
66 to: entry.to,
67 renderChildNodes: renderChildNodes
68 })));
69 } else {
70 var key = entry.key,
71 value = entry.value;
72 var isCircular = circularCache.indexOf(value) !== -1;
73 childNodes.push( /*#__PURE__*/_react.default.createElement(_JSONNode.default, (0, _extends2.default)({}, props, {
74 postprocessValue: postprocessValue,
75 collectionLimit: collectionLimit,
76 key: "Node--".concat(key),
77 keyPath: [key].concat((0, _toConsumableArray2.default)(keyPath)),
78 value: postprocessValue(value),
79 circularCache: [].concat((0, _toConsumableArray2.default)(circularCache), [value]),
80 isCircular: isCircular,
81 hideRoot: false
82 })));
83 }
84 });
85 return childNodes;
86}
87
88function getStateFromProps(props) {
89 // calculate individual node expansion if necessary
90 var expanded = !props.isCircular ? props.shouldExpandNode(props.keyPath, props.data, props.level) : false;
91 return {
92 expanded: expanded
93 };
94}
95
96var JSONNestedNode = /*#__PURE__*/function (_React$Component) {
97 (0, _inherits2.default)(JSONNestedNode, _React$Component);
98
99 var _super = _createSuper(JSONNestedNode);
100
101 function JSONNestedNode(props) {
102 var _this;
103
104 (0, _classCallCheck2.default)(this, JSONNestedNode);
105 _this = _super.call(this, props);
106 (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleClick", function () {
107 if (_this.props.expandable) {
108 _this.setState({
109 expanded: !_this.state.expanded
110 });
111 }
112 });
113 _this.state = getStateFromProps(props);
114 return _this;
115 }
116
117 (0, _createClass2.default)(JSONNestedNode, [{
118 key: "UNSAFE_componentWillReceiveProps",
119 value: function UNSAFE_componentWillReceiveProps(nextProps) {
120 var nextState = getStateFromProps(nextProps);
121
122 if (getStateFromProps(this.props).expanded !== nextState.expanded) {
123 this.setState(nextState);
124 }
125 }
126 }, {
127 key: "shouldComponentUpdate",
128 value: function shouldComponentUpdate(nextProps, nextState) {
129 var _this2 = this;
130
131 return !!Object.keys(nextProps).find(function (key) {
132 return key !== 'circularCache' && (key === 'keyPath' ? nextProps[key].join('/') !== _this2.props[key].join('/') : nextProps[key] !== _this2.props[key]);
133 }) || nextState.expanded !== this.state.expanded;
134 }
135 }, {
136 key: "render",
137 value: function render() {
138 var _this$props = this.props,
139 getItemString = _this$props.getItemString,
140 nodeTypeIndicator = _this$props.nodeTypeIndicator,
141 nodeType = _this$props.nodeType,
142 data = _this$props.data,
143 hideRoot = _this$props.hideRoot,
144 createItemString = _this$props.createItemString,
145 styling = _this$props.styling,
146 collectionLimit = _this$props.collectionLimit,
147 keyPath = _this$props.keyPath,
148 labelRenderer = _this$props.labelRenderer,
149 expandable = _this$props.expandable;
150 var expanded = this.state.expanded;
151 var renderedChildren = expanded || hideRoot && this.props.level === 0 ? renderChildNodes(_objectSpread(_objectSpread({}, this.props), {}, {
152 level: this.props.level + 1
153 })) : null;
154
155 var itemType = /*#__PURE__*/_react.default.createElement("span", styling('nestedNodeItemType', expanded), nodeTypeIndicator);
156
157 var renderedItemString = getItemString(nodeType, data, itemType, createItemString(data, collectionLimit), keyPath);
158 var stylingArgs = [keyPath, nodeType, expanded, expandable];
159 return hideRoot ? /*#__PURE__*/_react.default.createElement("li", styling.apply(void 0, ['rootNode'].concat(stylingArgs)), /*#__PURE__*/_react.default.createElement("ul", styling.apply(void 0, ['rootNodeChildren'].concat(stylingArgs)), renderedChildren)) : /*#__PURE__*/_react.default.createElement("li", styling.apply(void 0, ['nestedNode'].concat(stylingArgs)), expandable && /*#__PURE__*/_react.default.createElement(_JSONArrow.default, {
160 styling: styling,
161 nodeType: nodeType,
162 expanded: expanded,
163 onClick: this.handleClick
164 }), /*#__PURE__*/_react.default.createElement("label", (0, _extends2.default)({}, styling.apply(void 0, [['label', 'nestedNodeLabel']].concat(stylingArgs)), {
165 onClick: this.handleClick
166 }), labelRenderer.apply(void 0, stylingArgs)), /*#__PURE__*/_react.default.createElement("span", (0, _extends2.default)({}, styling.apply(void 0, ['nestedNodeItemString'].concat(stylingArgs)), {
167 onClick: this.handleClick
168 }), renderedItemString), /*#__PURE__*/_react.default.createElement("ul", styling.apply(void 0, ['nestedNodeChildren'].concat(stylingArgs)), renderedChildren));
169 }
170 }]);
171 return JSONNestedNode;
172}(_react.default.Component);
173
174exports.default = JSONNestedNode;
175(0, _defineProperty2.default)(JSONNestedNode, "propTypes", {
176 getItemString: _propTypes.default.func.isRequired,
177 nodeTypeIndicator: _propTypes.default.any,
178 nodeType: _propTypes.default.string.isRequired,
179 data: _propTypes.default.any,
180 hideRoot: _propTypes.default.bool.isRequired,
181 createItemString: _propTypes.default.func.isRequired,
182 styling: _propTypes.default.func.isRequired,
183 collectionLimit: _propTypes.default.number,
184 keyPath: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])).isRequired,
185 labelRenderer: _propTypes.default.func.isRequired,
186 shouldExpandNode: _propTypes.default.func,
187 level: _propTypes.default.number.isRequired,
188 sortObjectKeys: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.bool]),
189 isCircular: _propTypes.default.bool,
190 expandable: _propTypes.default.bool
191});
192(0, _defineProperty2.default)(JSONNestedNode, "defaultProps", {
193 data: [],
194 circularCache: [],
195 level: 0,
196 expandable: true
197});
\No newline at end of file