UNPKG

@alexkuz/react-json-tree

Version:

React JSON Viewer Component, Extracted from redux-devtools

162 lines (125 loc) 4.72 kB
'use strict'; exports.__esModule = true; exports.default = undefined; var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _dec, _class; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reactMixin = require('react-mixin'); var _reactMixin2 = _interopRequireDefault(_reactMixin); var _mixins = require('./mixins'); var _JSONArrow = require('./JSONArrow'); var _JSONArrow2 = _interopRequireDefault(_JSONArrow); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Renders nested values (eg. objects, arrays, lists, etc.) */ var styles = { base: { position: 'relative', paddingTop: 3, paddingBottom: 3, marginLeft: 14 }, label: { margin: 0, padding: 0, display: 'inline-block' }, span: { cursor: 'default' }, spanType: { marginLeft: 5, marginRight: 5 } }; var JSONNestedNode = (_dec = _reactMixin2.default.decorate(_mixins.ExpandedStateHandlerMixin), _dec(_class = function (_React$Component) { (0, _inherits3.default)(JSONNestedNode, _React$Component); // flag to see if we still need to render our child nodes function JSONNestedNode(props) { (0, _classCallCheck3.default)(this, JSONNestedNode); var _this = (0, _possibleConstructorReturn3.default)(this, _React$Component.call(this, props)); _this.defaultProps = { data: [], initialExpanded: false, allExpanded: false }; _this.itemString = false; _this.needsChildNodes = true; _this.renderedChildren = []; _this.state = { expanded: _this.props.initialExpanded || _this.props.allExpanded, createdChildNodes: false }; return _this; } // cache store for our child nodes // cache store for the number of items string we display JSONNestedNode.prototype.render = function render() { var _props; var childListStyle = { padding: 0, margin: 0, listStyle: 'none', display: this.state.expanded ? 'block' : 'none' }; var containerStyle = undefined; var spanStyle = (0, _extends3.default)({}, styles.span, { color: this.props.theme.base0B }); containerStyle = (0, _extends3.default)({}, styles.base); if (this.state.expanded) { spanStyle = (0, _extends3.default)({}, spanStyle, { color: this.props.theme.base03 }); } if (this.state.expanded && this.needsChildNodes) { this.needsChildNodes = false; this.renderedChildren = this.props.getChildNodes((0, _extends3.default)({}, this.props)); } var itemType = _react2.default.createElement( 'span', { style: styles.spanType }, this.props.nodeTypeIndicator ); var renderedItemString = this.props.renderItemString({ data: this.props.data, getItemString: this.props.getItemString, itemString: this.itemString, itemType: itemType }); return _react2.default.createElement( 'li', { style: containerStyle }, _react2.default.createElement(_JSONArrow2.default, { theme: this.props.theme, open: this.state.expanded, onClick: this.handleClick.bind(this), style: this.props.styles.getArrowStyle(this.state.expanded) }), _react2.default.createElement( 'label', { style: (0, _extends3.default)({}, styles.label, { color: this.props.theme.base0D }, this.props.styles.getLabelStyle(this.props.nodeType, this.state.expanded)), onClick: this.handleClick.bind(this) }, (_props = this.props).labelRenderer.apply(_props, this.props.keyPath), ':' ), _react2.default.createElement( 'span', { style: (0, _extends3.default)({}, spanStyle, this.props.styles.getItemStringStyle(this.props.nodeType, this.state.expanded)), onClick: this.handleClick.bind(this) }, renderedItemString ), _react2.default.createElement( 'ul', { style: (0, _extends3.default)({}, childListStyle, this.props.styles.getListStyle(this.props.nodeType, this.state.expanded)) }, this.renderedChildren ) ); }; return JSONNestedNode; }(_react2.default.Component)) || _class); exports.default = JSONNestedNode;