UNPKG

@alifd/next

Version:

A configurable component library for web built on React.

129 lines (128 loc) 5.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = tslib_1.__importStar(require("react")); var prop_types_1 = tslib_1.__importDefault(require("prop-types")); var classnames_1 = tslib_1.__importDefault(require("classnames")); var menu_1 = tslib_1.__importDefault(require("../menu")); var icon_1 = tslib_1.__importDefault(require("../icon")); var util_1 = require("../util"); var bindCtx = util_1.func.bindCtx; var pickOthers = util_1.obj.pickOthers; var CascaderMenuItem = /** @class */ (function (_super) { tslib_1.__extends(CascaderMenuItem, _super); function CascaderMenuItem(props) { var _this = _super.call(this, props) || this; _this.state = { loading: false, }; bindCtx(_this, [ 'handleExpand', 'handleClick', 'handleMouseEnter', 'handleKeyDown', 'removeLoading', ]); return _this; } CascaderMenuItem.prototype.addLoading = function () { this.setState({ loading: true, }); }; CascaderMenuItem.prototype.removeLoading = function () { this.setState({ loading: false, }); }; CascaderMenuItem.prototype.setLoadingIfNeed = function (p) { if (p && typeof p.then === 'function') { this.addLoading(); p.then(this.removeLoading).catch(this.removeLoading); } }; CascaderMenuItem.prototype.handleExpand = function (focusedFirstChild) { this.setLoadingIfNeed(this.props.onExpand(focusedFirstChild)); }; CascaderMenuItem.prototype.handleClick = function () { this.handleExpand(false); }; CascaderMenuItem.prototype.handleMouseEnter = function () { this.handleExpand(false); }; CascaderMenuItem.prototype.handleKeyDown = function (e) { if (!this.props.disabled) { if (e.keyCode === util_1.KEYCODE.RIGHT || e.keyCode === util_1.KEYCODE.ENTER) { if (this.props.canExpand) { this.handleExpand(true); } } else if (e.keyCode === util_1.KEYCODE.LEFT || e.keyCode === util_1.KEYCODE.ESC) { this.props.onFold(); } else if (e.keyCode === util_1.KEYCODE.SPACE) { this.handleExpand(false); } } }; CascaderMenuItem.prototype.render = function () { var _a; var _b = this.props, prefix = _b.prefix, className = _b.className, menu = _b.menu, disabled = _b.disabled, selected = _b.selected, onSelect = _b.onSelect, expanded = _b.expanded, canExpand = _b.canExpand, expandTriggerType = _b.expandTriggerType, checkable = _b.checkable, checked = _b.checked, indeterminate = _b.indeterminate, checkboxDisabled = _b.checkboxDisabled, onCheck = _b.onCheck, children = _b.children; var others = pickOthers(CascaderMenuItem.propTypes, this.props); var loading = this.state.loading; var itemProps = tslib_1.__assign({ className: (0, classnames_1.default)((_a = {}, _a["".concat(prefix, "cascader-menu-item")] = true, _a["".concat(prefix, "expanded")] = expanded, _a[className] = !!className, _a)), disabled: disabled, menu: menu, onKeyDown: this.handleKeyDown, role: 'option' }, others); if (!disabled) { if (expandTriggerType === 'hover') { itemProps.onMouseEnter = this.handleMouseEnter; } else { itemProps.onClick = this.handleClick; } } var Item, title; if (checkable) { Item = menu_1.default.CheckboxItem; itemProps.checked = checked; itemProps.indeterminate = indeterminate; itemProps.checkboxDisabled = checkboxDisabled; itemProps.onChange = onCheck; } else { Item = menu_1.default.Item; itemProps.selected = selected; itemProps.onSelect = onSelect; } if (typeof children === 'string') { title = children; } return (react_1.default.createElement(Item, tslib_1.__assign({ title: title }, itemProps), children, canExpand ? (loading ? (react_1.default.createElement(icon_1.default, { className: "".concat(prefix, "cascader-menu-icon-right ").concat(prefix, "cascader-menu-icon-loading"), type: "loading" })) : (react_1.default.createElement(icon_1.default, { className: "".concat(prefix, "cascader-menu-icon-right ").concat(prefix, "cascader-menu-icon-expand"), type: "arrow-right" }))) : null)); }; CascaderMenuItem.menuChildType = 'item'; CascaderMenuItem.propTypes = { prefix: prop_types_1.default.string, className: prop_types_1.default.string, disabled: prop_types_1.default.bool, selected: prop_types_1.default.bool, onSelect: prop_types_1.default.func, expanded: prop_types_1.default.bool, canExpand: prop_types_1.default.bool, menu: prop_types_1.default.any, expandTriggerType: prop_types_1.default.oneOf(['click', 'hover']), onExpand: prop_types_1.default.func, onFold: prop_types_1.default.func, checkable: prop_types_1.default.bool, checked: prop_types_1.default.bool, indeterminate: prop_types_1.default.bool, checkboxDisabled: prop_types_1.default.bool, onCheck: prop_types_1.default.func, children: prop_types_1.default.node, }; return CascaderMenuItem; }(react_1.Component)); exports.default = CascaderMenuItem;