dk-plus
Version:
2 lines (1 loc) • 6.28 kB
JavaScript
;Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("vue"),A=require("./index3.js"),p=o.defineComponent({name:"DkSelect",props:A.dkSelectProps,emits:{"update:modelValue":t=>!0,change:t=>!0,clear:()=>!0,"visible-change":t=>!0,focus:t=>!0,blur:t=>!0,"remove-tag":t=>!0,"popup-scroll":t=>!0},setup(t,{emit:d,slots:D}){const h=o.ref(null),V=o.ref(null),P=o.ref(null),u=o.reactive({query:"",open:!1,hoverIndex:-1,hovering:!1,dropdownStyle:{},debounceTimer:0,selectedLabelMap:{}}),L=e=>{if(e==null)return"";if(typeof e=="object"){const n=t.valueKey||"value",l=e[n];return l==null?"":String(l)}return String(e)},O=o.computed(()=>{const e=t.props||{};return{value:e.value||"value",label:e.label||"label",disabled:e.disabled||"disabled"}}),f=(e,n)=>{if(e===n)return!0;if(e==null||n==null)return!1;if(typeof e=="object"&&typeof n=="object"){const l=t.valueKey||"value";return e[l]===n[l]}return!1},x=o.computed(()=>{const e=t.options||[],n=O.value;return e.map(l=>{var I;const r=l[n.value],i=r!=null?r:l,c=l[n.label],m=String((I=c!=null?c:i)!=null?I:""),S=!!l[n.disabled];return{label:m,value:i,disabled:S}})}),a=o.computed(()=>{const e=x.value,n=t.modelValue;return(t.multiple?Array.isArray(n)?n:[]:[n]).map(r=>{const i=e.find(S=>f(S.value,r));if(i)return{value:i.value,label:i.label};const c=L(r),m=c?u.selectedLabelMap[c]:void 0;return m!=null&&m!==""?{value:r,label:m}:typeof r=="string"||typeof r=="number"||typeof r=="boolean"?{value:r,label:String(r)}:null}).filter(Boolean)}),M=o.computed(()=>{var e,n;return t.multiple?"":(n=(e=a.value[0])==null?void 0:e.label)!=null?n:""}),k=o.computed(()=>{var e;return t.multiple?a.value.length>0:a.value.length>0&&((e=a.value[0])==null?void 0:e.label)!==""}),K=o.computed(()=>!!t.clearable&&!t.disabled&&k.value&&(u.hovering||u.open)),_=o.computed({get:()=>t.multiple?t.filterable&&u.open?u.query:"":t.filterable&&u.open?u.query:M.value,set:e=>{!t.filterable||(u.query=e,t.disabled||b(!0),t.remote&&typeof t.remoteMethod=="function"&&(u.debounceTimer&&window.clearTimeout(u.debounceTimer),u.debounceTimer=window.setTimeout(()=>{var n;(n=t.remoteMethod)==null||n.call(t,u.query)},t.debounce||300)))}}),v=o.computed(()=>{const e=x.value;if(!t.filterable)return e;const n=u.query.trim();if(!n||t.remote)return e;if(typeof t.filterMethod=="function")try{return t.filterMethod(n)?e:[]}catch{return e}const l=n.toLowerCase();return e.filter(r=>String(r.label).toLowerCase().includes(l))}),j=o.computed(()=>t.loading?t.loadingText||"Loading":t.filterable&&u.query.trim()&&v.value.length===0?t.noMatchText||t.emptyText:x.value.length===0?t.noDataText||t.emptyText:v.value.length===0?t.emptyText:""),z=o.computed(()=>{if(!t.multiple)return[];if(!t.collapseTags)return a.value;const e=Math.max(0,t.maxCollapseTags||1);return a.value.slice(0,e)}),B=o.computed(()=>{if(!t.multiple||!t.collapseTags)return 0;const e=Math.max(0,t.maxCollapseTags||1);return Math.max(0,a.value.length-e)}),R=o.computed(()=>t.multiple&&a.value.length?"":t.placeholder),H=o.computed(()=>!!D.default),U=e=>{if(t.multiple){const n=t.modelValue;return Array.isArray(n)?n.some(l=>f(l,e)):!1}return f(t.modelValue,e)};o.provide(A.SELECT_PROPS_TOKEN,{setValue:(e,n,l,r)=>{var i;(i=l==null?void 0:l.stopPropagation)==null||i.call(l),T({value:e,label:String(n!=null?n:""),disabled:!!r})},isSelected:e=>U(e)});const q=()=>{var r;const e=v.value;if(!e.length){u.hoverIndex=-1;return}const n=(r=a.value[0])==null?void 0:r.value,l=e.findIndex(i=>i.value===n&&!i.disabled);u.hoverIndex=l>=0?l:e.findIndex(i=>!i.disabled)},b=e=>{u.open=e,d("visible-change",e),e?o.nextTick(()=>{s(),q(),window.addEventListener("resize",s),window.addEventListener("scroll",s,!0)}):(window.removeEventListener("resize",s),window.removeEventListener("scroll",s,!0),t.multiple||(u.query=""),u.hoverIndex=-1)},s=()=>{const e=V.value;if(!e)return;const n=e.getBoundingClientRect(),l=n.bottom+(t.offset||0),r=n.left;u.dropdownStyle={position:"fixed",top:`${l}px`,left:`${r}px`,minWidth:t.width||`${n.width}px`,zIndex:"3000"}},y=()=>{t.disabled||b(!0)},C=()=>{b(!1)},w=()=>{var e,n,l,r;(n=(e=h.value)==null?void 0:e.handelClose)==null||n.call(e),(r=(l=h.value)==null?void 0:l.close)==null||r.call(l),b(!1)},F=e=>{b(e)},g=e=>{d("update:modelValue",e),d("change",e)},T=e=>{var l;if(t.disabled||e.disabled)return;const n=L(e.value);if(n&&(u.selectedLabelMap[n]=String((l=e.label)!=null?l:"")),t.multiple){const r=Array.isArray(t.modelValue)?[...t.modelValue]:[],i=r.findIndex(m=>f(m,e.value));if(i>=0){r.splice(i,1),g(r);return}const c=t.multipleLimit||0;if(c>0&&r.length>=c)return;r.push(e.value),g(r);return}g(e.value),u.query="",w()},N=()=>{t.disabled||(t.multiple?g([]):g(""),u.query="",u.selectedLabelMap={},d("clear"),w())},W=e=>{if(t.disabled||!t.multiple)return;const n=Array.isArray(t.modelValue)?[...t.modelValue]:[],l=n.findIndex(r=>f(r,e));l>=0&&n.splice(l,1),g(n),d("remove-tag",e)};o.watch(()=>t.disabled,e=>{e&&w()}),o.watch(()=>t.modelValue,()=>{u.open&&q()});const G=e=>{if(t.multiple){const n=t.modelValue;return Array.isArray(n)?n.some(l=>f(l,e.value)):!1}return f(t.modelValue,e.value)},E=e=>{const n=v.value;if(!n.length)return;let l=u.hoverIndex;l<0&&(l=0);for(let r=0;r<n.length;r+=1)if(l=(l+e+n.length)%n.length,!n[l].disabled){u.hoverIndex=l;return}},J=()=>{const e=v.value,n=u.hoverIndex;n<0||n>=e.length||T(e[n])},Q=e=>{if(!t.disabled){if(e.key==="Escape"){C();return}if(e.key==="ArrowDown"){e.preventDefault(),u.open||y(),E(1);return}if(e.key==="ArrowUp"){e.preventDefault(),u.open||y(),E(-1);return}if(e.key==="Enter"){if(!u.open){y();return}e.preventDefault(),J()}}},X=e=>d("focus",e),Y=e=>d("blur",e),Z=e=>{d("popup-scroll",e)};return o.onBeforeUnmount(()=>{window.removeEventListener("resize",s),window.removeEventListener("scroll",s,!0),u.debounceTimer&&window.clearTimeout(u.debounceTimer)}),{...o.toRefs(u),triggerCompRef:h,triggerElRef:V,dropdownRef:P,selectedList:a,collapsedTags:z,collapsedMoreCount:B,multiplePlaceholder:R,displayText:M,hasValue:k,showClear:K,inputText:_,filteredOptions:v,emptyDisplayText:j,hasDefaultSlot:H,isSelected:G,onOpen:y,onClose:C,onTriggerChange:F,onPick:T,onClear:N,onRemoveTag:W,onKeydown:Q,onFocus:X,onBlur:Y,refreshDropdownPosition:s,onPopupScroll:Z}}});exports.default=p;