UNPKG

react-editable-json-tree

Version:
225 lines (186 loc) 7.49 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); 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 _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _reactHotkeys = require('react-hotkeys'); var _inputUsageTypes = require('../types/inputUsageTypes'); var _inputUsageTypes2 = _interopRequireDefault(_inputUsageTypes); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* ************************************* */ /* ******** VARIABLES ******** */ /* ************************************* */ // Prop types /* * Author: Alexandre Havrileck (Oxyno-zeta) * Date: 22/10/16 * Licence: See Readme */ /* ************************************* */ /* ******** IMPORTS ******** */ /* ************************************* */ var propTypes = { handleAdd: _propTypes2.default.func.isRequired, handleCancel: _propTypes2.default.func.isRequired, onlyValue: _propTypes2.default.bool, addButtonElement: _propTypes2.default.element, cancelButtonElement: _propTypes2.default.element, inputElementGenerator: _propTypes2.default.func.isRequired, keyPath: _propTypes2.default.array, deep: _propTypes2.default.number, onSubmitValueParser: _propTypes2.default.func.isRequired }; // Default props var defaultProps = { onlyValue: false, addButtonElement: _react2.default.createElement( 'button', null, '+' ), cancelButtonElement: _react2.default.createElement( 'button', null, 'c' ) }; /* ************************************* */ /* ******** COMPONENT ******** */ /* ************************************* */ var JsonAddValue = function (_Component) { (0, _inherits3.default)(JsonAddValue, _Component); function JsonAddValue(props) { (0, _classCallCheck3.default)(this, JsonAddValue); var _this = (0, _possibleConstructorReturn3.default)(this, (JsonAddValue.__proto__ || (0, _getPrototypeOf2.default)(JsonAddValue)).call(this, props)); _this.state = { inputRefKey: null, inputRefValue: null }; // Bind _this.refInputValue = _this.refInputValue.bind(_this); _this.refInputKey = _this.refInputKey.bind(_this); _this.onSubmit = _this.onSubmit.bind(_this); return _this; } (0, _createClass3.default)(JsonAddValue, [{ key: 'componentDidMount', value: function componentDidMount() { var _state = this.state, inputRefKey = _state.inputRefKey, inputRefValue = _state.inputRefValue; var onlyValue = this.props.onlyValue; if (inputRefKey && typeof inputRefKey.focus === 'function') { inputRefKey.focus(); } if (onlyValue && inputRefValue && typeof inputRefValue.focus === 'function') { inputRefValue.focus(); } } }, { key: 'onSubmit', value: function onSubmit() { var _props = this.props, handleAdd = _props.handleAdd, onlyValue = _props.onlyValue, onSubmitValueParser = _props.onSubmitValueParser, keyPath = _props.keyPath, deep = _props.deep; var _state2 = this.state, inputRefKey = _state2.inputRefKey, inputRefValue = _state2.inputRefValue; var result = {}; // Check if we have the key if (!onlyValue) { // Check that there is a key if (!inputRefKey.value) { // Empty key => Not authorized return; } result.key = inputRefKey.value; } result.newValue = onSubmitValueParser(false, keyPath, deep, result.key, inputRefValue.value); handleAdd(result); } }, { key: 'refInputKey', value: function refInputKey(node) { this.state.inputRefKey = node; } }, { key: 'refInputValue', value: function refInputValue(node) { this.state.inputRefValue = node; } }, { key: 'render', value: function render() { var _props2 = this.props, handleCancel = _props2.handleCancel, onlyValue = _props2.onlyValue, addButtonElement = _props2.addButtonElement, cancelButtonElement = _props2.cancelButtonElement, inputElementGenerator = _props2.inputElementGenerator, keyPath = _props2.keyPath, deep = _props2.deep; var addButtonElementLayout = _react2.default.cloneElement(addButtonElement, { onClick: this.onSubmit }); var cancelButtonElementLayout = _react2.default.cloneElement(cancelButtonElement, { onClick: handleCancel }); var inputElementValue = inputElementGenerator(_inputUsageTypes2.default.VALUE, keyPath, deep); var inputElementValueLayout = _react2.default.cloneElement(inputElementValue, { placeholder: 'Value', ref: this.refInputValue }); var inputElementKeyLayout = null; var separatorElement = null; if (!onlyValue) { var inputElementKey = inputElementGenerator(_inputUsageTypes2.default.KEY, keyPath, deep); inputElementKeyLayout = _react2.default.cloneElement(inputElementKey, { placeholder: 'Key', ref: this.refInputKey }); separatorElement = ':'; } var handlers = { esc: handleCancel, enter: this.onSubmit }; return _react2.default.createElement( _reactHotkeys.HotKeys, { className: 'rejt-add-value-node', component: 'span', handlers: handlers }, inputElementKeyLayout, ' ', separatorElement, ' ', inputElementValueLayout, ' ', cancelButtonElementLayout, addButtonElementLayout ); } }]); return JsonAddValue; }(_react.Component); // Add prop types JsonAddValue.propTypes = propTypes; // Add default props JsonAddValue.defaultProps = defaultProps; /* ************************************* */ /* ******** EXPORTS ******** */ /* ************************************* */ exports.default = JsonAddValue;