UNPKG

ant-design-vue

Version:

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

176 lines (175 loc) 6.24 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _vue = require("vue"); var _pickAttrs = _interopRequireDefault(require("../../_util/pickAttrs")); var _Input = _interopRequireDefault(require("./Input")); var _vueTypes = _interopRequireDefault(require("../../_util/vue-types")); var _LegacyContext = _interopRequireDefault(require("../../vc-tree-select/LegacyContext")); const props = { inputElement: _vueTypes.default.any, id: String, prefixCls: String, values: _vueTypes.default.array, open: { type: Boolean, default: undefined }, searchValue: String, inputRef: _vueTypes.default.any, placeholder: _vueTypes.default.any, compositionStatus: { type: Boolean, default: undefined }, disabled: { type: Boolean, default: undefined }, mode: String, showSearch: { type: Boolean, default: undefined }, autofocus: { type: Boolean, default: undefined }, autocomplete: String, activeDescendantId: String, tabindex: _vueTypes.default.oneOfType([_vueTypes.default.number, _vueTypes.default.string]), activeValue: String, backfill: { type: Boolean, default: undefined }, optionLabelRender: Function, onInputChange: Function, onInputPaste: Function, onInputKeyDown: Function, onInputMouseDown: Function, onInputCompositionStart: Function, onInputCompositionEnd: Function }; const SingleSelector = (0, _vue.defineComponent)({ name: 'SingleSelector', setup(props) { const inputChanged = (0, _vue.shallowRef)(false); const combobox = (0, _vue.computed)(() => props.mode === 'combobox'); const inputEditable = (0, _vue.computed)(() => combobox.value || props.showSearch); const inputValue = (0, _vue.computed)(() => { let inputValue = props.searchValue || ''; if (combobox.value && props.activeValue && !inputChanged.value) { inputValue = props.activeValue; } return inputValue; }); const legacyTreeSelectContext = (0, _LegacyContext.default)(); (0, _vue.watch)([combobox, () => props.activeValue], () => { if (combobox.value) { inputChanged.value = false; } }, { immediate: true }); // Not show text when closed expect combobox mode const hasTextInput = (0, _vue.computed)(() => props.mode !== 'combobox' && !props.open && !props.showSearch ? false : !!inputValue.value || props.compositionStatus); const title = (0, _vue.computed)(() => { const item = props.values[0]; return item && (typeof item.label === 'string' || typeof item.label === 'number') ? item.label.toString() : undefined; }); const renderPlaceholder = () => { if (props.values[0]) { return null; } const hiddenStyle = hasTextInput.value ? { visibility: 'hidden' } : undefined; return (0, _vue.createVNode)("span", { "class": `${props.prefixCls}-selection-placeholder`, "style": hiddenStyle }, [props.placeholder]); }; const handleInput = e => { const composing = e.target.composing; if (!composing) { inputChanged.value = true; props.onInputChange(e); } }; return () => { var _a, _b, _c, _d; const { inputElement, prefixCls, id, values, inputRef, disabled, autofocus, autocomplete, activeDescendantId, open, tabindex, optionLabelRender, onInputKeyDown, onInputMouseDown, onInputPaste, onInputCompositionStart, onInputCompositionEnd } = props; const item = values[0]; let titleNode = null; // custom tree-select title by slot // For TreeSelect if (item && legacyTreeSelectContext.customSlots) { const key = (_a = item.key) !== null && _a !== void 0 ? _a : item.value; const originData = ((_b = legacyTreeSelectContext.keyEntities[key]) === null || _b === void 0 ? void 0 : _b.node) || {}; titleNode = legacyTreeSelectContext.customSlots[(_c = originData.slots) === null || _c === void 0 ? void 0 : _c.title] || legacyTreeSelectContext.customSlots.title || item.label; if (typeof titleNode === 'function') { titleNode = titleNode(originData); } // else if (treeSelectContext.value.slots.titleRender) { // // 因历史 title 是覆盖逻辑,新增 titleRender,所有的 title 都走一遍 titleRender // titleNode = treeSelectContext.value.slots.titleRender(item.option?.data || {}); // } } else { titleNode = optionLabelRender && item ? optionLabelRender(item.option) : item === null || item === void 0 ? void 0 : item.label; } return (0, _vue.createVNode)(_vue.Fragment, null, [(0, _vue.createVNode)("span", { "class": `${prefixCls}-selection-search` }, [(0, _vue.createVNode)(_Input.default, { "inputRef": inputRef, "prefixCls": prefixCls, "id": id, "open": open, "inputElement": inputElement, "disabled": disabled, "autofocus": autofocus, "autocomplete": autocomplete, "editable": inputEditable.value, "activeDescendantId": activeDescendantId, "value": inputValue.value, "onKeydown": onInputKeyDown, "onMousedown": onInputMouseDown, "onChange": handleInput, "onPaste": onInputPaste, "onCompositionstart": onInputCompositionStart, "onCompositionend": onInputCompositionEnd, "tabindex": tabindex, "attrs": (0, _pickAttrs.default)(props, true) }, null)]), !combobox.value && item && !hasTextInput.value && (0, _vue.createVNode)("span", { "class": `${prefixCls}-selection-item`, "title": title.value }, [(0, _vue.createVNode)(_vue.Fragment, { "key": (_d = item.key) !== null && _d !== void 0 ? _d : item.value }, [titleNode])]), renderPlaceholder()]); }; } }); SingleSelector.props = props; SingleSelector.inheritAttrs = false; var _default = exports.default = SingleSelector;