zmp-vue
Version:
Build full featured iOS & Android apps using ZMP & Vue
313 lines (290 loc) • 9.52 kB
JavaScript
;
exports.__esModule = true;
exports.default = void 0;
var _vue = require("vue");
var _utils = require("../shared/utils");
var _mixins = require("../shared/mixins");
var _zmp = require("../shared/zmp");
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
var _hoisted_1 = {
class: "searchbar-inner"
};
var _hoisted_2 = {
class: "searchbar-input-wrap"
};
var _hoisted_3 = /*#__PURE__*/(0, _vue.createVNode)("i", {
class: "searchbar-icon"
}, null, -1);
function render(_ctx, _cache) {
return (0, _vue.openBlock)(), (0, _vue.createBlock)((0, _vue.resolveDynamicComponent)(_ctx.tag), {
ref: "elRef",
class: _ctx.classes,
onSubmit: _ctx.onSubmit
}, {
default: (0, _vue.withCtx)(function () {
return [(0, _vue.renderSlot)(_ctx.$slots, "before-inner"), (0, _vue.createVNode)("div", _hoisted_1, [(0, _vue.renderSlot)(_ctx.$slots, "inner-start"), (0, _vue.createVNode)("div", _hoisted_2, [(0, _vue.renderSlot)(_ctx.$slots, "input-wrap-start"), (0, _vue.createVNode)("input", {
value: _ctx.value,
placeholder: _ctx.placeholder,
spellcheck: _ctx.spellcheck,
type: "search",
onInput: _cache[1] || (_cache[1] = function () {
return _ctx.onInput && _ctx.onInput.apply(_ctx, arguments);
}),
onChange: _cache[2] || (_cache[2] = function () {
return _ctx.onChange && _ctx.onChange.apply(_ctx, arguments);
}),
onFocus: _cache[3] || (_cache[3] = function () {
return _ctx.onFocus && _ctx.onFocus.apply(_ctx, arguments);
}),
onBlur: _cache[4] || (_cache[4] = function () {
return _ctx.onBlur && _ctx.onBlur.apply(_ctx, arguments);
})
}, null, 40, ["value", "placeholder", "spellcheck"]), _hoisted_3, _ctx.clearButton ? ((0, _vue.openBlock)(), (0, _vue.createBlock)("span", {
key: 0,
class: "input-clear-button",
onClick: _cache[5] || (_cache[5] = function () {
return _ctx.onClearButtonClick && _ctx.onClearButtonClick.apply(_ctx, arguments);
})
})) : (0, _vue.createCommentVNode)("", true), (0, _vue.renderSlot)(_ctx.$slots, "input-wrap-end")]), _ctx.disableButton ? ((0, _vue.openBlock)(), (0, _vue.createBlock)("span", {
key: 0,
class: "searchbar-disable-button",
onClick: _cache[6] || (_cache[6] = function () {
return _ctx.onDisableButtonClick && _ctx.onDisableButtonClick.apply(_ctx, arguments);
})
}, (0, _vue.toDisplayString)(_ctx.disableButtonText), 1)) : (0, _vue.createCommentVNode)("", true), (0, _vue.renderSlot)(_ctx.$slots, "inner-end"), (0, _vue.renderSlot)(_ctx.$slots, "default")]), (0, _vue.renderSlot)(_ctx.$slots, "after-inner")];
}),
_: 3
}, 8, ["class", "onSubmit"]);
}
var _default = {
name: 'zmp-searchbar',
render: render,
props: _extends({
noShadow: Boolean,
noHairline: Boolean,
form: {
type: Boolean,
default: true
},
placeholder: {
type: String,
default: 'Search'
},
spellcheck: {
type: Boolean,
default: undefined
},
disableButton: {
type: Boolean,
default: true
},
disableButtonText: {
type: String,
default: 'Cancel'
},
clearButton: {
type: Boolean,
default: true
},
// Input Value
value: [String, Number, Array],
// SB Params
inputEvents: {
type: String,
default: 'change input compositionend'
},
expandable: Boolean,
inline: Boolean,
searchContainer: [String, Object],
searchIn: {
type: String,
default: '.item-title'
},
searchItem: {
type: String,
default: 'li'
},
searchGroup: {
type: String,
default: '.list-group'
},
searchGroupTitle: {
type: String,
default: '.item-divider, .list-group-title'
},
foundEl: {
type: [String, Object],
default: '.searchbar-found'
},
notFoundEl: {
type: [String, Object],
default: '.searchbar-not-found'
},
backdrop: {
type: Boolean,
default: undefined
},
backdropEl: [String, Object],
hideOnEnableEl: {
type: [String, Object],
default: '.searchbar-hide-on-enable'
},
hideOnSearchEl: {
type: [String, Object],
default: '.searchbar-hide-on-search'
},
ignore: {
type: String,
default: '.searchbar-ignore'
},
customSearch: {
type: Boolean,
default: false
},
removeDiacritics: {
type: Boolean,
default: false
},
hideDividers: {
type: Boolean,
default: true
},
hideGroups: {
type: Boolean,
default: true
},
init: {
type: Boolean,
default: true
}
}, _mixins.colorProps),
emits: ['change', 'input', 'focus', 'blur', 'submit', 'click:clear', 'click:disable', 'searchbar:search', 'searchbar:clear', 'searchbar:enable', 'searchbar:disable', 'update:value'],
setup: function setup(props, _ref) {
var emit = _ref.emit;
var zmpSearchbar = null;
var elRef = (0, _vue.ref)(null);
var search = function search(query) {
if (!zmpSearchbar) return undefined;
return zmpSearchbar.search(query);
};
var enable = function enable() {
if (!zmpSearchbar) return undefined;
return zmpSearchbar.enable();
};
var disable = function disable() {
if (!zmpSearchbar) return undefined;
return zmpSearchbar.disable();
};
var toggle = function toggle() {
if (!zmpSearchbar) return undefined;
return zmpSearchbar.toggle();
};
var clear = function clear() {
if (!zmpSearchbar) return undefined;
return zmpSearchbar.clear();
};
var onChange = function onChange(event) {
emit('change', event);
};
var onInput = function onInput(event) {
emit('input', event);
emit('update:value', event.target.value);
};
var onFocus = function onFocus(event) {
emit('focus', event);
};
var onBlur = function onBlur(event) {
emit('blur', event);
};
var onSubmit = function onSubmit(event) {
emit('submit', event);
};
var onClearButtonClick = function onClearButtonClick(event) {
emit('click:clear', event);
};
var onDisableButtonClick = function onDisableButtonClick(event) {
emit('click:disable', event);
};
(0, _vue.onMounted)(function () {
if (!props.init) return;
(0, _zmp.zmpready)(function () {
var params = (0, _utils.noUndefinedProps)({
el: elRef.value,
inputEvents: props.inputEvents,
searchContainer: props.searchContainer,
searchIn: props.searchIn,
searchItem: props.searchItem,
searchGroup: props.searchGroup,
searchGroupTitle: props.searchGroupTitle,
hideOnEnableEl: props.hideOnEnableEl,
hideOnSearchEl: props.hideOnSearchEl,
foundEl: props.foundEl,
notFoundEl: props.notFoundEl,
backdrop: props.backdrop,
backdropEl: props.backdropEl,
disableButton: props.disableButton,
ignore: props.ignore,
customSearch: props.customSearch,
removeDiacritics: props.removeDiacritics,
hideDividers: props.hideDividers,
hideGroups: props.hideGroups,
expandable: props.expandable,
inline: props.inline,
on: {
search: function search(searchbar, query, previousQuery) {
emit('searchbar:search', searchbar, query, previousQuery);
},
clear: function clear(searchbar, previousQuery) {
emit('searchbar:clear', searchbar, previousQuery);
},
enable: function enable(searchbar) {
emit('searchbar:enable', searchbar);
},
disable: function disable(searchbar) {
emit('searchbar:disable', searchbar);
}
}
});
Object.keys(params).forEach(function (key) {
if (params[key] === '') {
delete params[key];
}
});
zmpSearchbar = _zmp.zmp.searchbar.create(params);
});
});
(0, _vue.onBeforeUnmount)(function () {
if (zmpSearchbar && zmpSearchbar.destroy) zmpSearchbar.destroy();
zmpSearchbar = null;
});
var classes = (0, _vue.computed)(function () {
return (0, _utils.classNames)('searchbar', {
'searchbar-inline': props.inline,
'no-shadow': props.noShadow,
'no-hairline': props.noHairline,
'searchbar-expandable': props.expandable
}, (0, _mixins.colorClasses)(props));
});
var tag = (0, _vue.computed)(function () {
return props.form ? 'form' : 'div';
});
return {
elRef: elRef,
tag: tag,
classes: classes,
search: search,
enable: enable,
disable: disable,
toggle: toggle,
clear: clear,
onChange: onChange,
onInput: onInput,
onFocus: onFocus,
onBlur: onBlur,
onSubmit: onSubmit,
onClearButtonClick: onClearButtonClick,
onDisableButtonClick: onDisableButtonClick
};
}
};
exports.default = _default;