You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
2.7 KiB
114 lines
2.7 KiB
import _mergeJSXProps2 from "@vue/babel-helper-vue-jsx-merge-props";
|
|
import _mergeJSXProps from "@vue/babel-helper-vue-jsx-merge-props";
|
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
// Utils
|
|
import { createNamespace } from '../utils';
|
|
import { inherit, emit } from '../utils/functional';
|
|
import { preventDefault } from '../utils/dom/event'; // Components
|
|
|
|
import Field from '../field'; // Types
|
|
|
|
var _createNamespace = createNamespace('search'),
|
|
createComponent = _createNamespace[0],
|
|
bem = _createNamespace[1],
|
|
t = _createNamespace[2];
|
|
|
|
function Search(h, props, slots, ctx) {
|
|
function Label() {
|
|
if (slots.label || props.label) {
|
|
return h("div", {
|
|
"class": bem('label')
|
|
}, [slots.label ? slots.label() : props.label]);
|
|
}
|
|
}
|
|
|
|
function Action() {
|
|
if (!props.showAction) {
|
|
return;
|
|
}
|
|
|
|
function onCancel() {
|
|
if (slots.action) {
|
|
return;
|
|
}
|
|
|
|
emit(ctx, 'input', '');
|
|
emit(ctx, 'cancel');
|
|
}
|
|
|
|
return h("div", {
|
|
"class": bem('action'),
|
|
"attrs": {
|
|
"role": "button",
|
|
"tabindex": "0"
|
|
},
|
|
"on": {
|
|
"click": onCancel
|
|
}
|
|
}, [slots.action ? slots.action() : props.actionText || t('cancel')]);
|
|
}
|
|
|
|
var fieldData = {
|
|
attrs: ctx.data.attrs,
|
|
on: _extends({}, ctx.listeners, {
|
|
keypress: function keypress(event) {
|
|
// press enter
|
|
if (event.keyCode === 13) {
|
|
preventDefault(event);
|
|
emit(ctx, 'search', props.value);
|
|
}
|
|
|
|
emit(ctx, 'keypress', event);
|
|
}
|
|
})
|
|
};
|
|
var inheritData = inherit(ctx);
|
|
inheritData.attrs = undefined;
|
|
return h("div", _mergeJSXProps2([{
|
|
"class": bem({
|
|
'show-action': props.showAction
|
|
}),
|
|
"style": {
|
|
background: props.background
|
|
}
|
|
}, inheritData]), [slots.left == null ? void 0 : slots.left(), h("div", {
|
|
"class": bem('content', props.shape)
|
|
}, [Label(), h(Field, _mergeJSXProps([{
|
|
"attrs": {
|
|
"type": "search",
|
|
"border": false,
|
|
"value": props.value,
|
|
"leftIcon": props.leftIcon,
|
|
"rightIcon": props.rightIcon,
|
|
"clearable": props.clearable,
|
|
"clearTrigger": props.clearTrigger
|
|
},
|
|
"scopedSlots": {
|
|
'left-icon': slots['left-icon'],
|
|
'right-icon': slots['right-icon']
|
|
}
|
|
}, fieldData]))]), Action()]);
|
|
}
|
|
|
|
Search.props = {
|
|
value: String,
|
|
label: String,
|
|
rightIcon: String,
|
|
actionText: String,
|
|
background: String,
|
|
showAction: Boolean,
|
|
clearTrigger: String,
|
|
shape: {
|
|
type: String,
|
|
default: 'square'
|
|
},
|
|
clearable: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
leftIcon: {
|
|
type: String,
|
|
default: 'search'
|
|
}
|
|
};
|
|
export default createComponent(Search); |