@aplus-frontend/ui
Version:
2 lines (1 loc) • 6.26 kB
JavaScript
;Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),g=require("@aplus-frontend/antdv"),u=require("lodash-unified");require("../../config-provider/index.js");require("../../hooks/index.js");const z=require("../hooks/use-default-placeholder.js"),K=require("../style/index.js"),c=require("./use-select-options.js"),R=require("../../config-provider/hooks/use-namespace.js"),Y=require("../../config-provider/hooks/use-locale.js"),$=require("../../hooks/useControllableValue.js"),j={key:0},H=["onClick"],W=e.defineComponent({name:"ApFieldSelect",__name:"index",props:{mode:{default:"edit"},class:{},style:{},defaultValue:{},notFoundContent:{},suffixIcon:{},itemIcon:{},size:{},bordered:{type:Boolean,default:void 0},showArrow:{type:Boolean,default:void 0},variant:{},maxCount:{},transitionName:{},choiceTransitionName:{},popupClassName:{},dropdownClassName:{},placement:{},status:{},children:{},listHeight:{},onMouseenter:{},onMouseleave:{},tabindex:{},onClick:{},onFocus:{},onBlur:{},onChange:{},onKeydown:{},onKeyup:{},onMousedown:{},onSelect:{},open:{type:Boolean,default:void 0},animation:{},direction:{},disabled:{type:Boolean,default:void 0},prefixCls:{},id:{},autofocus:{type:Boolean,default:void 0},getPopupContainer:{},virtual:{type:Boolean,default:void 0},dropdownMatchSelectWidth:{},placeholder:{},loading:{type:Boolean,default:void 0},prefix:{},clearIcon:{},allowClear:{type:Boolean,default:!0},fieldNames:{},inputValue:{},searchValue:{},autoClearSearchValue:{type:Boolean,default:void 0},onDeselect:{},onActive:{},filterOption:{},filterSort:{},optionFilterProp:{},optionLabelProp:{},options:{},defaultActiveFirstOption:{type:Boolean,default:void 0},listItemHeight:{},onClickOption:{},menuItemSelectedIcon:{},labelInValue:{type:Boolean,default:void 0},showSearch:{type:Boolean,default:void 0},tagRender:{},optionLabelRender:{},onClear:{},defaultOpen:{type:Boolean,default:void 0},onDropdownVisibleChange:{},maxTagTextLength:{},maxTagCount:{},maxTagPlaceholder:{},tokenSeparators:{},removeIcon:{},dropdownStyle:{},dropdownRender:{},dropdownAlign:{},showAction:{},onPopupScroll:{},onInputKeyDown:{},emptyText:{default:"--"},request:{},multiple:{type:Boolean,default:void 0},value:{},"onUpdate:value":{},searchMode:{default:"filter"},refetchOnFocus:{type:Boolean,default:!1},lazy:{type:Boolean,default:!1},addAll:{type:[Boolean,Number]},params:{},searchDelay:{default:300}},emits:["update:value"],setup(b,{expose:B,emit:L}){let r=0;const o=b,{b:d}=R.useNamespace("field-select"),_=K.default("field"),C=e.ref(!1),{t:F}=Y.useLocale(),N=u.debounce(t=>{if(!u.isFunction(o.request))return;r+=1;const n=r;p([]),a.value=!0,o.request(t).then(l=>{r===n&&(p(l),a.value=!1)})},o.searchDelay),V=(t,n)=>{const l=o.fieldNames?.label||"label";return typeof n?.[l]=="string"&&n[l].toLowerCase().indexOf(t.toLowerCase())>-1},{options:s,updateOptions:p}=c.useSelectOptions(o),h=e.shallowRef(),a=e.ref(o?.loading||!1),O=L,q=e.computed(()=>{if(o.multiple)return o.tokenSeparators?"tags":"multiple"});async function f(t=!0){if(!u.isFunction(o.request))return;a.value=!0,r+=1;const n=r;try{t&&p([]);const l=await o.request(void 0,o.params);if(n!==r)return;p(l)}finally{a.value=!1}}function x(t){o.onFocus?.(t),o.refetchOnFocus&&r>0&&!a.value&&f(!0)}e.onMounted(()=>{o.lazy||f()}),e.watch(()=>o.params,()=>{f()},{deep:!0});const{value:m,updateValue:v}=$.useControllableValue(o,O),A=z.useDefaultPlaceholder("Select",o),E=e.computed(()=>{const t=e.unref(m);if(!t)return o.emptyText;const n=o.fieldNames?.label||"label",l=o.fieldNames?.value||"value";return u.isArray(t)?t.map(i=>e.unref(s).find(U=>U[l]===i)?.[n]).filter(Boolean).join("、")||o.emptyText:e.unref(s).find(i=>i[l]===t)?.[n]||o.emptyText}),k=e.computed(()=>{const t=!!o?.showSearch,n=o.searchMode;let l={};return t&&(l=n==="request"?{defaultActiveFirstOption:!1,onSearch:N,notFoundContent:a.value?void 0:null,filterOption:!1,suffixIcon:null}:{filterOption:u.isNil(o?.filterOption)?V:o?.filterOption}),{...u.omit(o,["mode","value","onUpdate:value","onSearch","request","searchMode","onFocus","onBeforeSelect"]),placeholder:e.unref(A),...l}}),S=e.computed(()=>s.value.map(t=>t[o.fieldNames?.value||"value"]).filter(t=>t!==c.SELECT_ALL_VALUE_KEY)),I=e.computed(()=>{if(!o.multiple||!o.addAll)return e.unref(m);if(s.value.some(t=>t[o.fieldNames?.value||"value"]===c.SELECT_ALL_VALUE_KEY)){const t=e.unref(S),n=e.unref(m)||[];if(t.length&&t.every(l=>n?.includes(l)))return[c.SELECT_ALL_VALUE_KEY]}return e.unref(m)});function T(t){return o.multiple&&t.includes(c.SELECT_ALL_VALUE_KEY)?v(e.unref(S)):v(t)}function M(){h.value?.focus()}function P(){h.value?.blur()}function w(t,n){const l=o.fieldNames?.[n]??n;return t[l]}function D(t){const n=w(t,"value");v(o.multiple?[n]:n)}return B({focus:M,blur:P,request:f}),(t,n)=>t.mode==="read"?(e.openBlock(),e.createElementBlock("span",j,e.toDisplayString(E.value),1)):(e.openBlock(),e.createBlock(e.unref(g.Select),e.mergeProps({key:1,ref_key:"selectRef",ref:h,"allow-clear":""},k.value,{mode:q.value,value:I.value,options:e.unref(s),loading:a.value,"menu-item-selected-icon":e.h("span"),"popup-class-name":`${e.unref(d)("popup")} ${e.unref(_)}`,open:C.value,"onUpdate:value":T,onFocus:x,onDropdownVisibleChange:n[0]||(n[0]=l=>C.value=l)}),e.createSlots({option:e.withCtx(l=>[e.createVNode(e.unref(g.Flex),{justify:"space-between",align:"center",class:e.normalizeClass(e.unref(d)("popup-option-wrapper")),gap:8},{default:e.withCtx(()=>[e.createElementVNode("span",{class:e.normalizeClass(e.unref(d)("popup-option-label"))},e.toDisplayString(w(l,"label")),3),t.multiple?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(e.unref(d)("popup-option-action")),onClick:e.withModifiers(()=>D(l),["stop"])},e.toDisplayString(e.unref(F)("ap.field.chooseOnly")),11,H)):e.createCommentVNode("",!0)]),_:2},1032,["class"])]),_:2},[e.renderList(t.$slots,(l,y)=>({name:y,fn:e.withCtx(i=>[e.renderSlot(t.$slots,y,e.normalizeProps(e.guardReactiveProps(i||{})))])})),a.value?{name:"notFoundContent",fn:e.withCtx(()=>[e.createVNode(e.unref(g.Spin),{size:"small"})]),key:"0"}:void 0]),1040,["mode","value","options","loading","menu-item-selected-icon","popup-class-name","open"]))}});exports.default=W;