UNPKG

ukelli-ui

Version:

Base on React's UI lib. Make frontend's dev simpler and faster.

156 lines (155 loc) 6.67 kB
var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); 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); }; import React from 'react'; import { HasValue, Call } from 'basic-helper'; import classnames from 'classnames'; import { tuple } from 'basic-helper/utils/type'; import SelectorBasic from './selector'; import DropdownWrapper from './dropdown-wrapper'; import { MenuItem } from '../menu'; import { $T, $T_UKE } from '../config'; // import Radio from './radio'; var positionList = tuple('button', 'top', 'left', 'right', 'button,left', 'button,right', 'top,left', 'top,right'); var itemActiveFilter = function (val, targetVal) { var has = HasValue(val); if (!has) return false; var isInclueVal = false; switch (true) { case Array.isArray(val): isInclueVal = val.indexOf(targetVal) !== -1; break; case typeof val === 'string': isInclueVal = val === targetVal; break; case typeof val === 'number': isInclueVal = val === targetVal; break; } return isInclueVal; }; /** * 下拉菜单组件,带有输入搜索功能 * * @export * @class DropdownMenu * @extends {SelectorBasic} */ var DropdownMenu = /** @class */ (function (_super) { __extends(DropdownMenu, _super); function DropdownMenu() { var _this = _super !== null && _super.apply(this, arguments) || this; _this._error = false; return _this; } DropdownMenu.prototype.handleClick = function (dataItem, idx, callback) { var onClickItem = this.props.onClickItem; Call(onClickItem, dataItem); this.changeValue(dataItem.value, idx); Call(callback); }; DropdownMenu.prototype.getActiveTitle = function () { var _a = this.props, isMultiple = _a.isMultiple, defaultTitle = _a.defaultTitle, invalidTip = _a.invalidTip; var value = this.getValue(); var hasVal = Array.isArray(value) ? value.length > 0 : value; var resTitle = ''; this._error = false; switch (true) { case !hasVal: resTitle = $T_UKE(defaultTitle); break; case !!isMultiple: resTitle = value.length + $T_UKE('项已选'); break; case typeof this.valuesObj[value] == 'undefined': resTitle = $T_UKE(invalidTip); this._error = true; break; default: var title = this.valuesObj[value]; if (HasValue(title)) { resTitle = title; } else if (typeof title == 'undefined') { resTitle = $T_UKE(defaultTitle); } else { resTitle = $T_UKE(invalidTip); this._error = true; } break; } return resTitle; }; DropdownMenu.prototype.getValuesLength = function () { var values = this.values; return Array.isArray(values) ? values.length : Object.keys(values).length; }; DropdownMenu.prototype.render = function () { var _this = this; var _a = this.props, isMultiple = _a.isMultiple, needAction = _a.needAction, cancelTitle = _a.cancelTitle, withInput = _a.withInput; var _selectedValue = this.getValue(); var hasVal = Array.isArray(_selectedValue) ? _selectedValue.length > 0 : !!_selectedValue; var isSelectedAll = this.checkIsSelectedAll(); var canSelectAll = isMultiple && !isSelectedAll; var menuTitle = this.getActiveTitle(); return (React.createElement(DropdownWrapper, __assign({}, this.props, { menuTitle: $T(menuTitle), overlay: function (_a) { var hide = _a.hide, searchValue = _a.searchValue; return (React.createElement("div", { className: "action-group" }, needAction && (React.createElement("div", { className: "action-btn", onClick: function (e) { canSelectAll ? _this.selectAll() : _this.clearAll(); hide(); } }, $T_UKE(canSelectAll ? '全选' : cancelTitle))), React.createElement("div", { className: "items-group" }, _this.values.map(function (dataItem, idx) { var text = dataItem.text, value = dataItem.value, icon = dataItem.icon, img = dataItem.img; var isActive = itemActiveFilter(_selectedValue, value); var renderable = !searchValue ? true : (text.toString().indexOf(searchValue) !== -1 || value.toString().toLowerCase().indexOf(searchValue) !== -1); return renderable ? (React.createElement(MenuItem, __assign({ key: value, isActive: isActive, onClick: function (e) { if (e && isMultiple) e.preventDefault(); _this.handleClick(dataItem, idx, isMultiple ? null : hide); } }, dataItem))) : null; })))); }, withInput: !withInput ? withInput : !isMultiple, error: this._error, className: classnames({ multiple: isMultiple, single: !isMultiple, "has-val": hasVal }) }))); }; DropdownMenu.defaultProps = { withInput: true, needAction: true, outside: true, defaultTitle: '请选择', invalidTip: '无效值', cancelTitle: '取消', position: 'bottom,left', }; return DropdownMenu; }(SelectorBasic)); export default DropdownMenu;