UNPKG

lole-ui

Version:

React UI Component which like a love letter

73 lines (72 loc) 3.81 kB
var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; import React, { useCallback, useRef, useState } from "react"; import classNames from 'classnames'; import Icon from "../Icon/icon"; var Input = function (props) { var _a; var width = props.width, className = props.className, disabled = props.disabled, clearable = props.clearable, type = props.type, size = props.size, addonBefore = props.addonBefore, addonAfter = props.addonAfter, icon = props.icon, bordered = props.bordered, style = props.style, onPressEnter = props.onPressEnter, onChange = props.onChange, placeholder = props.placeholder, restProps = __rest(props, ["width", "className", "disabled", "clearable", "type", "size", "addonBefore", "addonAfter", "icon", "bordered", "style", "onPressEnter", "onChange", "placeholder"]); var inputRef = useRef(null); var classes = classNames('xiOn-input-wrapper', className, (_a = { "disabled": disabled, "clearable": clearable, 'is_bordered': !bordered }, _a["input-".concat(size)] = size, _a['has-before-addon'] = addonBefore, _a['has-after-addon'] = addonAfter, _a)); var _b = useState(''), value = _b[0], setValue = _b[1]; var handleOnChange = useCallback(function (e) { onChange && onChange(e); }, [onChange]); var clearValue = useCallback(function () { inputRef.current.value = ""; }, [inputRef]); var handleOnKeyPress = useCallback(function (e) { if (e.charCode === 13) { onPressEnter && onPressEnter(e); } }, [onPressEnter]); return (React.createElement(React.Fragment, null, React.createElement("div", { className: classes, style: style }, /** 添加前缀 */ addonBefore && React.createElement("span", { className: 'before-addon' }, addonBefore), React.createElement("span", { className: 'xiOn-input-container', style: { width: width } }, type === 'textarea' ? (React.createElement("textarea", __assign({ placeholder: 'textarea', className: 'xiOn-textarea' }, restProps))) : (React.createElement("input", __assign({ className: 'xiOn-input', type: type, placeholder: placeholder, disabled: disabled, onChange: handleOnChange, ref: inputRef, onKeyPress: handleOnKeyPress }, restProps))), /** 点击关闭Icon closeable */ clearable && type !== 'textarea' && React.createElement("span", { className: 'xiOn-input-close', onClick: clearValue }, React.createElement(Icon, { icon: 'close', title: "title-".concat(icon) }))), addonAfter && React.createElement("span", { className: "after-addon" }, addonAfter)))); }; Input.defaultProps = { disabled: false, clearable: false, bordered: true, type: 'text', size: 'md', width: '20vw' }; export default Input;