UNPKG

@arco-design/web-vue

Version:

Arco Design Vue 2.0: A Vue.js 3 UI Library

130 lines (129 loc) 4.81 kB
"use strict"; var vue = require("vue"); var context = require("../config-provider/context.js"); var globalConfig = require("../_utils/global-config.js"); var index$1 = require("../empty/index.js"); var index$2 = require("../spin/index.js"); var index = require("../scrollbar/index.js"); var useComponentRef = require("../_hooks/use-component-ref.js"); var useScrollbar = require("../_hooks/use-scrollbar.js"); var pluginVue_exportHelper = require("../_virtual/plugin-vue_export-helper.js"); const _sfc_main = vue.defineComponent({ name: "SelectDropdown", components: { ScrollbarComponent: index, Empty: index$1, Spin: index$2 }, props: { loading: Boolean, empty: Boolean, virtualList: Boolean, bottomOffset: { type: Number, default: 0 }, scrollbar: { type: [Boolean, Object], default: true }, onScroll: { type: [Function, Array] }, onReachBottom: { type: [Function, Array] }, showHeaderOnEmpty: { type: Boolean, default: false }, showFooterOnEmpty: { type: Boolean, default: false } }, emits: ["scroll", "reachBottom"], setup(props, { emit, slots }) { var _a, _b, _c; const { scrollbar } = vue.toRefs(props); const prefixCls = globalConfig.getPrefixCls("select-dropdown"); const configCtx = vue.inject(context.configProviderInjectionKey, void 0); const SelectEmpty = (_c = (_b = configCtx == null ? void 0 : (_a = configCtx.slots).empty) == null ? void 0 : _b.call(_a, { component: "select" })) == null ? void 0 : _c[0]; const { componentRef: wrapperComRef, elementRef: wrapperRef } = useComponentRef.useComponentRef("containerRef"); const { displayScrollbar, scrollbarProps } = useScrollbar.useScrollbar(scrollbar); const handleScroll = (e) => { const { scrollTop, scrollHeight, offsetHeight } = e.target; const bottom = scrollHeight - (scrollTop + offsetHeight); if (bottom <= props.bottomOffset) { emit("reachBottom", e); } emit("scroll", e); }; const cls = vue.computed(() => [ prefixCls, { [`${prefixCls}-has-header`]: Boolean(slots.header), [`${prefixCls}-has-footer`]: Boolean(slots.footer) } ]); return { prefixCls, SelectEmpty, cls, wrapperRef, wrapperComRef, handleScroll, displayScrollbar, scrollbarProps }; } }); function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_spin = vue.resolveComponent("spin"); return vue.openBlock(), vue.createElementBlock("div", { class: vue.normalizeClass(_ctx.cls) }, [ _ctx.$slots.header && (!_ctx.empty || _ctx.showHeaderOnEmpty) ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: vue.normalizeClass(`${_ctx.prefixCls}-header`) }, [ vue.renderSlot(_ctx.$slots, "header") ], 2)) : vue.createCommentVNode("v-if", true), _ctx.loading ? (vue.openBlock(), vue.createBlock(_component_spin, { key: 1, class: vue.normalizeClass(`${_ctx.prefixCls}-loading`) }, null, 8, ["class"])) : _ctx.empty ? (vue.openBlock(), vue.createElementBlock("div", { key: 2, class: vue.normalizeClass(`${_ctx.prefixCls}-empty`) }, [ vue.renderSlot(_ctx.$slots, "empty", {}, () => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.SelectEmpty ? _ctx.SelectEmpty : "Empty"))) ]) ], 2)) : vue.createCommentVNode("v-if", true), _ctx.virtualList && !_ctx.loading && !_ctx.empty ? vue.renderSlot(_ctx.$slots, "virtual-list", { key: 3 }) : vue.createCommentVNode("v-if", true), !_ctx.virtualList ? vue.withDirectives((vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.displayScrollbar ? "ScrollbarComponent" : "div"), vue.mergeProps({ key: 4, ref: "wrapperComRef", class: `${_ctx.prefixCls}-list-wrapper` }, _ctx.scrollbarProps, { onScroll: _ctx.handleScroll }), { default: vue.withCtx(() => [ vue.createElementVNode("ul", { class: vue.normalizeClass(`${_ctx.prefixCls}-list`) }, [ vue.renderSlot(_ctx.$slots, "default") ], 2) ]), _: 3 }, 16, ["class", "onScroll"])), [ [vue.vShow, !_ctx.loading && !_ctx.empty] ]) : vue.createCommentVNode("v-if", true), _ctx.$slots.footer && (!_ctx.empty || _ctx.showFooterOnEmpty) ? (vue.openBlock(), vue.createElementBlock("div", { key: 5, class: vue.normalizeClass(`${_ctx.prefixCls}-footer`) }, [ vue.renderSlot(_ctx.$slots, "footer") ], 2)) : vue.createCommentVNode("v-if", true) ], 2); } var SelectDropdown = /* @__PURE__ */ pluginVue_exportHelper(_sfc_main, [["render", _sfc_render]]); module.exports = SelectDropdown;