react-native-web-headroom
Version:
React Native Web Headroom
376 lines (279 loc) • 11.4 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _TreeView = require('../tree-view/TreeView');
var _TreeView2 = _interopRequireDefault(_TreeView);
var _ObjectRootLabel = require('./ObjectRootLabel');
var _ObjectRootLabel2 = _interopRequireDefault(_ObjectRootLabel);
var _ObjectLabel = require('./ObjectLabel');
var _ObjectLabel2 = _interopRequireDefault(_ObjectLabel);
var _ThemeProvider = require('../styles/ThemeProvider');
var _ThemeProvider2 = _interopRequireDefault(_ThemeProvider);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var createIterator = function createIterator(showNonenumerable, sortObjectKeys) {
var objectIterator = /*#__PURE__*/_regenerator2.default.mark(function objectIterator(data) {
var shouldIterate, i, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, entry, _entry, k, v, keys, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, propertyName, propertyValue, _propertyValue;
return _regenerator2.default.wrap(function objectIterator$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
shouldIterate = (typeof data === 'undefined' ? 'undefined' : (0, _typeof3.default)(data)) === 'object' && data !== null || typeof data === 'function';
if (shouldIterate) {
_context.next = 3;
break;
}
return _context.abrupt('return');
case 3:
if (!(!Array.isArray(data) && data[Symbol.iterator])) {
_context.next = 40;
break;
}
i = 0;
_iteratorNormalCompletion = true;
_didIteratorError = false;
_iteratorError = undefined;
_context.prev = 8;
_iterator = data[Symbol.iterator]();
case 10:
if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
_context.next = 24;
break;
}
entry = _step.value;
if (!(Array.isArray(entry) && entry.length === 2)) {
_context.next = 18;
break;
}
_entry = (0, _slicedToArray3.default)(entry, 2), k = _entry[0], v = _entry[1];
_context.next = 16;
return {
name: k,
data: v
};
case 16:
_context.next = 20;
break;
case 18:
_context.next = 20;
return {
name: i.toString(),
data: entry
};
case 20:
i++;
case 21:
_iteratorNormalCompletion = true;
_context.next = 10;
break;
case 24:
_context.next = 30;
break;
case 26:
_context.prev = 26;
_context.t0 = _context['catch'](8);
_didIteratorError = true;
_iteratorError = _context.t0;
case 30:
_context.prev = 30;
_context.prev = 31;
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
case 33:
_context.prev = 33;
if (!_didIteratorError) {
_context.next = 36;
break;
}
throw _iteratorError;
case 36:
return _context.finish(33);
case 37:
return _context.finish(30);
case 38:
_context.next = 81;
break;
case 40:
keys = Object.getOwnPropertyNames(data);
if (sortObjectKeys === true) {
keys.sort();
} else if (typeof sortObjectKeys === 'function') {
keys.sort(sortObjectKeys);
}
_iteratorNormalCompletion2 = true;
_didIteratorError2 = false;
_iteratorError2 = undefined;
_context.prev = 45;
_iterator2 = keys[Symbol.iterator]();
case 47:
if (_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done) {
_context.next = 64;
break;
}
propertyName = _step2.value;
if (!data.propertyIsEnumerable(propertyName)) {
_context.next = 55;
break;
}
propertyValue = data[propertyName];
_context.next = 53;
return {
name: propertyName || '""',
data: propertyValue
};
case 53:
_context.next = 61;
break;
case 55:
if (!showNonenumerable) {
_context.next = 61;
break;
}
// To work around the error (happens some time when propertyName === 'caller' || propertyName === 'arguments')
// 'caller' and 'arguments' are restricted function properties and cannot be accessed in this context
// http://stackoverflow.com/questions/31921189/caller-and-arguments-are-restricted-function-properties-and-cannot-be-access
_propertyValue = void 0;
try {
_propertyValue = data[propertyName];
} catch (e) {
// console.warn(e)
}
if (!(_propertyValue !== undefined)) {
_context.next = 61;
break;
}
_context.next = 61;
return {
name: propertyName,
data: _propertyValue,
isNonenumerable: true
};
case 61:
_iteratorNormalCompletion2 = true;
_context.next = 47;
break;
case 64:
_context.next = 70;
break;
case 66:
_context.prev = 66;
_context.t1 = _context['catch'](45);
_didIteratorError2 = true;
_iteratorError2 = _context.t1;
case 70:
_context.prev = 70;
_context.prev = 71;
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
case 73:
_context.prev = 73;
if (!_didIteratorError2) {
_context.next = 76;
break;
}
throw _iteratorError2;
case 76:
return _context.finish(73);
case 77:
return _context.finish(70);
case 78:
if (!(showNonenumerable && data !== Object.prototype /* already added */)) {
_context.next = 81;
break;
}
_context.next = 81;
return {
name: '__proto__',
data: Object.getPrototypeOf(data),
isNonenumerable: true
};
case 81:
case 'end':
return _context.stop();
}
}
}, objectIterator, this, [[8, 26, 30, 38], [31,, 33, 37], [45, 66, 70, 78], [71,, 73, 77]]);
});
return objectIterator;
};
var defaultNodeRenderer = function defaultNodeRenderer(_ref) {
var depth = _ref.depth,
name = _ref.name,
data = _ref.data,
isNonenumerable = _ref.isNonenumerable;
return depth === 0 ? _react2.default.createElement(_ObjectRootLabel2.default, { name: name, data: data }) : _react2.default.createElement(_ObjectLabel2.default, { name: name, data: data, isNonenumerable: isNonenumerable });
};
/**
* Tree-view for objects
*/
var ObjectInspector = function (_Component) {
(0, _inherits3.default)(ObjectInspector, _Component);
function ObjectInspector() {
(0, _classCallCheck3.default)(this, ObjectInspector);
return (0, _possibleConstructorReturn3.default)(this, (ObjectInspector.__proto__ || Object.getPrototypeOf(ObjectInspector)).apply(this, arguments));
}
(0, _createClass3.default)(ObjectInspector, [{
key: 'render',
value: function render() {
var _props = this.props,
showNonenumerable = _props.showNonenumerable,
sortObjectKeys = _props.sortObjectKeys,
nodeRenderer = _props.nodeRenderer,
rest = (0, _objectWithoutProperties3.default)(_props, ['showNonenumerable', 'sortObjectKeys', 'nodeRenderer']);
var dataIterator = createIterator(showNonenumerable, sortObjectKeys);
var renderer = nodeRenderer ? nodeRenderer : defaultNodeRenderer;
return _react2.default.createElement(
_ThemeProvider2.default,
{ theme: this.props.theme },
_react2.default.createElement(_TreeView2.default, (0, _extends3.default)({ nodeRenderer: renderer, dataIterator: dataIterator }, rest))
);
}
}]);
return ObjectInspector;
}(_react.Component);
ObjectInspector.defaultProps = {
showNonenumerable: false,
theme: 'chromeLight'
};
ObjectInspector.propTypes = {
/** An integer specifying to which level the tree should be initially expanded. */
expandLevel: _propTypes2.default.number,
/** An array containing all the paths that should be expanded when the component is initialized, or a string of just one path */
expandPaths: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.array]),
name: _propTypes2.default.string,
/** Not required prop because we also allow undefined value */
data: _propTypes2.default.any,
/** A known theme or theme object */
theme: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.object]),
/** Show non-enumerable properties */
showNonenumerable: _propTypes2.default.bool,
/** Sort object keys with optional compare function. */
sortObjectKeys: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.func]),
/** Provide a custom nodeRenderer */
nodeRenderer: _propTypes2.default.func
};
exports.default = ObjectInspector;