UNPKG

shengnian-editor

Version:

Shengnian React Rich Text Editor

207 lines (157 loc) 5.85 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); 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 _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _Selection = require('./Selection'); var _Selection2 = _interopRequireDefault(_Selection); var _InputDropdown = require('./InputDropdown.css'); var _InputDropdown2 = _interopRequireDefault(_InputDropdown); var _IconButton = require('../IconButton.css'); var _IconButton2 = _interopRequireDefault(_IconButton); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var InputDropdown = function (_React$Component) { (0, _inherits3.default)(InputDropdown, _React$Component); function InputDropdown(props) { (0, _classCallCheck3.default)(this, InputDropdown); var _this = (0, _possibleConstructorReturn3.default)(this, (InputDropdown.__proto__ || (0, _getPrototypeOf2.default)(InputDropdown)).call(this, props)); _this.onItemClick = function (key) { var clickedItem = _this.props.items.find(function (item) { return item.value === key; }); _this.selectItem(clickedItem); }; _this.onFocus = function () { _this.setState({ isActive: true, activeIndex: -1 }); }; _this.onBlur = function () { if (_this.itemWasPressed) { // Blur event is triggered before click event, which means a click on a dropdown item wont be triggered if we hide the dropdown list here. _this.itemWasPressed = false; return; } _this.setState({ isActive: false }); }; _this.onKeyDown = function (event) { var nextIndex = _this.state.activeIndex; switch (event.keyCode) { case 13: // enter _this.selectCurrentActive(); break; case 38: // up nextIndex = Math.max(_this.state.activeIndex - 1, 0); break; case 40: // down nextIndex = Math.min(_this.state.activeIndex + 1, _this.props.items.length - 1); break; default: break; } if (nextIndex !== _this.state.activeIndex) { _this.setState({ activeIndex: nextIndex }); } }; _this.onInputChange = function (event) { var value = event.currentTarget.value; _this.setState({ inputValue: value }); if (_this.props.onInputChange) { _this.props.onInputChange(value); } }; _this.onItemMouseDown = function () { _this.itemWasPressed = true; }; _this.onItemMouseEnter = function (value) { var index = _this.props.items.findIndex(function (item) { return item.value === value; }); _this.setState({ activeIndex: index }); }; _this.selectCurrentActive = function () { if (_this.state.activeIndex > -1) { _this.selectItem(_this.props.items[_this.state.activeIndex]); } }; _this.selectItem = function (item) { _this.setState({ inputValue: item.label, isActive: false }); _this._inputDropdown.blur(); if (_this.props.onItemSelected) { _this.props.onItemSelected(item); } }; _this.state = { isOpen: false, isActive: false, inputValue: '', activeIndex: -1 }; _this.itemWasPressed = false; return _this; } (0, _createClass3.default)(InputDropdown, [{ key: 'render', // componentWillReceiveProps(newProps) { // if(newProps.displayValue) { // this.setState({ // inputValue: newProps.displayValue // }) // } // } value: function render() { var _cx, _this2 = this; var iconClassName = (0, _classnames2.default)((_cx = {}, (0, _defineProperty3.default)(_cx, _IconButton2.default.icon, true), (0, _defineProperty3.default)(_cx, _IconButton2.default.root, true), _cx)); return _react2.default.createElement( 'div', { className: _InputDropdown2.default.root }, _react2.default.createElement('input', { type: 'text', name: this.props.name, value: this.state.inputValue, onChange: this.onInputChange, onFocus: this.onFocus, onBlur: this.onBlur, onKeyDown: this.onKeyDown, ref: function ref(dropdownInput) { return _this2._inputDropdown = dropdownInput; }, placeholder: this.props.placeholder }), _react2.default.createElement(_Selection2.default, { visible: this.state.isActive, items: this.props.items, activeIndex: this.state.activeIndex, onItemClick: this.onItemClick, onItemMouseDown: this.onItemMouseDown, onItemMouseEnter: this.onItemMouseEnter }) ); } }]); return InputDropdown; }(_react2.default.Component); exports.default = InputDropdown;