UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

539 lines (479 loc) 18 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper")); var _tslib = require("tslib"); var _react = _interopRequireDefault(require("react")); var _mobx = require("mobx"); var _mobxReact = require("mobx-react"); var _flatten = _interopRequireDefault(require("lodash/flatten")); var _KeyCode = _interopRequireDefault(require("../../../lib/_util/KeyCode")); var _TriggerField2 = _interopRequireDefault(require("../trigger-field/TriggerField")); var _icon = _interopRequireDefault(require("../icon")); var _tabs = _interopRequireDefault(require("../tabs")); var _localeContext = require("../locale-context"); var _IconCategory = _interopRequireDefault(require("./IconCategory")); var _autobind = _interopRequireDefault(require("../_util/autobind")); var _EventManager = require("../_util/EventManager"); var COLUMNS = 5; var IconPicker = /*#__PURE__*/function (_TriggerField) { (0, _inherits2["default"])(IconPicker, _TriggerField); var _super = (0, _createSuper2["default"])(IconPicker); function IconPicker(props, context) { var _this; (0, _classCallCheck2["default"])(this, IconPicker); _this = _super.call(this, props, context); (0, _mobx.runInAction)(function () { _this.categoryPages = {}; _this.activeCategory = _this.categoryKeys[0]; }); return _this; } (0, _createClass2["default"])(IconPicker, [{ key: "categories", get: function get() { var propsIcon = this.props.icons; var icons = propsIcon || this.getContextConfig('icons'); return (0, _mobx.isArrayLike)(icons) ? { "default": icons } : icons; } }, { key: "categoryKeys", get: function get() { return Object.keys(this.categories); } }, { key: "selectedIndex", get: function get() { return this.categories[this.activeCategory].indexOf(this.selectedIcon); } }, { key: "filteredIcons", get: function get() { var text = this.text, categories = this.categories; if (text) { return (0, _flatten["default"])(this.categoryKeys.map(function (category) { return categories[category].filter(function (icon) { return icon.startsWith(text); }); })); } return []; } }, { key: "selectedIcon", get: function get() { var categories = this.categories; return this.selected || this.getValue() || categories[this.activeCategory][0]; } }, { key: "getOmitPropsKeys", value: function getOmitPropsKeys() { return (0, _get2["default"])((0, _getPrototypeOf2["default"])(IconPicker.prototype), "getOmitPropsKeys", this).call(this).concat(['pageSize', 'customFontName', 'icons']); } }, { key: "setActiveCategory", value: function setActiveCategory(category) { this.activeCategory = category; var page = this.categoryPages[category]; this.changeSelected(this.categories[category][(page - 1) * this.props.pageSize]); } }, { key: "setCategoryPage", value: function setCategoryPage(page, category) { this.categoryPages[category] = page; this.changeSelected(this.categories[category][(page - 1) * this.props.pageSize]); } }, { key: "handleTabsChange", value: function handleTabsChange(category) { this.setActiveCategory(category); } }, { key: "handleItemSelect", value: function handleItemSelect(icon) { this.choose(icon); } }, { key: "handlePageChange", value: function handlePageChange(page, category) { this.setCategoryPage(page, category); } }, { key: "handleKeyDown", value: function handleKeyDown(e) { if (!this.disabled && !this.readOnly) { if (this.popup) { switch (e.keyCode) { case _KeyCode["default"].RIGHT: (0, _EventManager.stopEvent)(e); this.handleKeyDownRight(); break; case _KeyCode["default"].LEFT: (0, _EventManager.stopEvent)(e); this.handleKeyDownLeft(); break; case _KeyCode["default"].DOWN: (0, _EventManager.stopEvent)(e); this.handleKeyDownDown(); break; case _KeyCode["default"].UP: (0, _EventManager.stopEvent)(e); this.handleKeyDownUp(); break; case _KeyCode["default"].END: (0, _EventManager.stopEvent)(e); this.handleKeyDownEnd(); break; case _KeyCode["default"].HOME: (0, _EventManager.stopEvent)(e); this.handleKeyDownHome(); break; case _KeyCode["default"].PAGE_UP: (0, _EventManager.stopEvent)(e); this.handleKeyDownPageUp(); break; case _KeyCode["default"].PAGE_DOWN: (0, _EventManager.stopEvent)(e); this.handleKeyDownPageDown(); break; case _KeyCode["default"].ENTER: e.preventDefault(); this.handleKeyDownEnter(); break; case _KeyCode["default"].TAB: this.handleKeyDownTab(); break; case _KeyCode["default"].ESC: e.preventDefault(); this.handleKeyDownEsc(); break; default: } } else if (e.keyCode === _KeyCode["default"].SPACE) { e.preventDefault(); this.handleKeyDownSpace(); } } (0, _get2["default"])((0, _getPrototypeOf2["default"])(IconPicker.prototype), "handleKeyDown", this).call(this, e); } }, { key: "handleKeyDownHome", value: function handleKeyDownHome() { var activeCategory = this.activeCategory, categoryPages = this.categoryPages, pageSize = this.props.pageSize; var category = this.categories[activeCategory]; var page = categoryPages[activeCategory] || 1; this.changeSelected(category[(page - 1) * pageSize]); } }, { key: "handleKeyDownEnd", value: function handleKeyDownEnd() { var activeCategory = this.activeCategory, categoryPages = this.categoryPages, pageSize = this.props.pageSize; var category = this.categories[activeCategory]; var page = categoryPages[activeCategory] || 1; this.changeSelected(category[page * pageSize - 1] || category[category.length - 1]); } }, { key: "handleKeyDownLeftOrRight", value: function handleKeyDownLeftOrRight(isLeft) { var activeCategory = this.activeCategory, selectedIndex = this.selectedIndex, categoryPages = this.categoryPages, categories = this.categories, categoryKeys = this.categoryKeys, pageSize = this.props.pageSize; var step = isLeft ? -1 : 1; var category = categories[activeCategory]; var index = selectedIndex; if (index % COLUMNS === (isLeft ? 0 : COLUMNS - 1) || !isLeft && index === category.length - 1) { var activeCategoryIndex = categoryKeys.indexOf(activeCategory); if (activeCategoryIndex !== (isLeft ? 0 : categoryKeys.length - 1)) { var newTabIndex = activeCategoryIndex + step; var newKey = categoryKeys[newTabIndex]; this.setActiveCategory(newKey); var page = categoryPages[activeCategory] || 1; category = categories[newKey]; var newPage = categoryPages[newKey] || 1; index += (newPage - page) * pageSize; if (!category[index]) { index = isLeft ? category.length - 1 : (newPage - 1) * pageSize; } } } else { index += step; } if (category[index]) { this.changeSelected(category[index]); } } }, { key: "handleKeyDownUpOrDown", value: function handleKeyDownUpOrDown(isUP) { var activeCategory = this.activeCategory, selectedIndex = this.selectedIndex, categoryPages = this.categoryPages, pageSize = this.props.pageSize; var step = isUP ? -1 : 1; var category = this.categories[activeCategory]; var index = selectedIndex; var page = categoryPages[activeCategory] || 1; if (isUP ? index < (page - 1) * pageSize + COLUMNS && page > 1 : index > page * pageSize - COLUMNS && page < Math.ceil(category.length / pageSize)) { this.setCategoryPage(page + step, activeCategory); } index += step * COLUMNS; if (category[index]) { this.changeSelected(category[index]); } } }, { key: "handleKeyDownLeft", value: function handleKeyDownLeft() { this.handleKeyDownLeftOrRight(true); } }, { key: "handleKeyDownRight", value: function handleKeyDownRight() { this.handleKeyDownLeftOrRight(false); } }, { key: "handleKeyDownUp", value: function handleKeyDownUp() { this.handleKeyDownUpOrDown(true); } }, { key: "handleKeyDownDown", value: function handleKeyDownDown() { if (this.popup) { this.handleKeyDownUpOrDown(false); } else { this.expand(); } } }, { key: "handleKeyDownPageUp", value: function handleKeyDownPageUp() { var activeCategory = this.activeCategory, selectedIndex = this.selectedIndex, categoryPages = this.categoryPages, pageSize = this.props.pageSize; var page = categoryPages[activeCategory] || 1; var category = this.categories[activeCategory]; if (page > 1) { this.setCategoryPage(page - 1, activeCategory); this.changeSelected(category[selectedIndex - pageSize]); } } }, { key: "handleKeyDownPageDown", value: function handleKeyDownPageDown() { var activeCategory = this.activeCategory, selectedIndex = this.selectedIndex, categoryPages = this.categoryPages, pageSize = this.props.pageSize; var page = categoryPages[activeCategory] || 1; var category = this.categories[activeCategory]; if (page < Math.ceil(category.length / pageSize)) { this.setCategoryPage(page + 1, activeCategory); this.changeSelected(category[selectedIndex + pageSize] || category[category.length - 1]); } } }, { key: "handleKeyDownEnter", value: function handleKeyDownEnter() { this.choose(this.selectedIcon); } }, { key: "handleKeyDownEsc", value: function handleKeyDownEsc() { this.collapse(); } }, { key: "handleKeyDownTab", value: function handleKeyDownTab() { this.collapse(); } }, { key: "handleKeyDownSpace", value: function handleKeyDownSpace() { this.expand(); } }, { key: "changeSelected", value: function changeSelected(selected) { this.selected = selected; } }, { key: "choose", value: function choose(icon) { this.prepareSetValue(icon); this.changeSelected(icon); if (!this.multiple) { this.collapse(); } } }, { key: "syncValueOnBlur", value: function syncValueOnBlur(value) { if (this.filteredIcons.indexOf(value) !== -1) { this.choose(value); } else { this.setText(undefined); } } }, { key: "handlePopupAnimateAppear", value: function handlePopupAnimateAppear() {// noop } }, { key: "handlePopupAnimateEnd", value: function handlePopupAnimateEnd() {// noop } }, { key: "getPopupStyleFromAlign", value: function getPopupStyleFromAlign() { return undefined; } }, { key: "getTriggerIconFont", value: function getTriggerIconFont() { return 'developer_board'; } }, { key: "getPopupContent", value: function getPopupContent() { var text = this.text; if (text) { return this.renderFilteredIcons(); } return this.renderIconCategories(); } }, { key: "getPrefix", value: function getPrefix() { var customFontName = this.props.customFontName; var value = this.getValue(); if (value) { return this.wrapperPrefix( /*#__PURE__*/_react["default"].createElement(_icon["default"], { customFontName: customFontName, type: value })); } } }, { key: "renderFilteredIcons", value: function renderFilteredIcons() { var prefixCls = this.prefixCls; var customFontName = this.props.customFontName; return /*#__PURE__*/_react["default"].createElement("div", { className: "".concat(prefixCls, "-single-tab"), onMouseDown: _EventManager.preventDefault }, /*#__PURE__*/_react["default"].createElement(_IconCategory["default"], { paging: false, customFontName: customFontName, value: this.selectedIcon, icons: this.filteredIcons, prefixCls: prefixCls, onSelect: this.handleItemSelect })); } }, { key: "renderIconCategories", value: function renderIconCategories() { var _this2 = this; var activeCategory = this.activeCategory, prefixCls = this.prefixCls, _this$props = this.props, pageSize = _this$props.pageSize, customFontName = _this$props.customFontName, categories = this.categories, categoryKeys = this.categoryKeys, categoryPages = this.categoryPages; var TabPane = _tabs["default"].TabPane; if (categoryKeys.length > 1) { var tabs = categoryKeys.map(function (category) { return /*#__PURE__*/_react["default"].createElement(TabPane, { key: category, tab: (0, _localeContext.$l)('Icon', category), className: "".concat(prefixCls, "-tab") }, /*#__PURE__*/_react["default"].createElement(_IconCategory["default"], { page: categoryPages[category], pageSize: pageSize, category: category, customFontName: customFontName, value: category === activeCategory ? _this2.selectedIcon : undefined, icons: categories[category], prefixCls: prefixCls, onSelect: _this2.handleItemSelect, onPageChange: _this2.handlePageChange })); }); return /*#__PURE__*/_react["default"].createElement("div", { onMouseDown: _EventManager.preventDefault }, /*#__PURE__*/_react["default"].createElement(_tabs["default"], { onChange: this.handleTabsChange, activeKey: activeCategory }, tabs)); } var category = categoryKeys[0]; return /*#__PURE__*/_react["default"].createElement("div", { className: "".concat(prefixCls, "-single-tab"), onMouseDown: _EventManager.preventDefault }, /*#__PURE__*/_react["default"].createElement(_IconCategory["default"], { page: categoryPages[category], pageSize: pageSize, category: category, customFontName: customFontName, value: category === activeCategory ? this.selectedIcon : undefined, icons: categories[category], prefixCls: prefixCls, onSelect: this.handleItemSelect, onPageChange: this.handlePageChange })); } }, { key: "renderLengthInfo", value: function renderLengthInfo() { return undefined; } }]); return IconPicker; }(_TriggerField2["default"]); IconPicker.displayName = 'IconPicker'; IconPicker.defaultProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _TriggerField2["default"].defaultProps), {}, { suffixCls: 'icon-picker', pageSize: 100 }); (0, _tslib.__decorate)([_mobx.observable], IconPicker.prototype, "activeCategory", void 0); (0, _tslib.__decorate)([_mobx.observable], IconPicker.prototype, "selected", void 0); (0, _tslib.__decorate)([_mobx.observable], IconPicker.prototype, "categoryPages", void 0); (0, _tslib.__decorate)([_mobx.computed], IconPicker.prototype, "categories", null); (0, _tslib.__decorate)([_mobx.computed], IconPicker.prototype, "categoryKeys", null); (0, _tslib.__decorate)([_mobx.computed], IconPicker.prototype, "selectedIndex", null); (0, _tslib.__decorate)([_mobx.computed], IconPicker.prototype, "filteredIcons", null); (0, _tslib.__decorate)([_mobx.computed], IconPicker.prototype, "selectedIcon", null); (0, _tslib.__decorate)([_mobx.action], IconPicker.prototype, "setActiveCategory", null); (0, _tslib.__decorate)([_mobx.action], IconPicker.prototype, "setCategoryPage", null); (0, _tslib.__decorate)([_autobind["default"]], IconPicker.prototype, "handleTabsChange", null); (0, _tslib.__decorate)([_autobind["default"]], IconPicker.prototype, "handleItemSelect", null); (0, _tslib.__decorate)([_autobind["default"]], IconPicker.prototype, "handlePageChange", null); (0, _tslib.__decorate)([_autobind["default"]], IconPicker.prototype, "handleKeyDown", null); (0, _tslib.__decorate)([_mobx.action], IconPicker.prototype, "changeSelected", null); IconPicker = (0, _tslib.__decorate)([_mobxReact.observer], IconPicker); var _default = IconPicker; exports["default"] = _default; //# sourceMappingURL=IconPicker.js.map