aboutsummaryrefslogtreecommitdiffstats
path: root/resources/lib/codex/modules/CdxLookup.js
blob: 3a6edbb348b921748c2070aa50f80043408cf7dd (plain) (blame)
1
"use strict";const t=require("vue"),A=require("./CdxMenu.js"),F=require("./CdxTextInput.js"),M=require("./useGeneratedId.js"),K=require("./useModelWrapper.js"),N=require("./useSplitAttributes.js"),w=require("./useFieldData.js"),L=require("./useFloatingMenu.js"),b=require("./constants.js"),W=require("./_plugin-vue_export-helper.js");require("./CdxMenuItem.js");require("./Icon.js");require("./useComputedDirection.js");require("./useComputedLanguage.js");require("./CdxThumbnail.js");require("./CdxSearchResultTitle.js");require("./CdxProgressBar.js");require("./useWarnOnce.js");require("./useIntersectionObserver.js");require("./useComputedDisabled.js");const D=b.makeStringTypeValidator(b.ValidationStatusTypes),E=t.defineComponent({name:"CdxLookup",components:{CdxMenu:A,CdxTextInput:F},inheritAttrs:!1,props:{selected:{type:[String,Number,null],required:!0},menuItems:{type:Array,required:!0},initialInputValue:{type:[String,Number],default:""},disabled:{type:Boolean,default:!1},menuConfig:{type:Object,default:()=>({})},status:{type:String,default:"default",validator:D}},emits:["update:selected","load-more","input","change","focus","blur"],setup:(e,{emit:u,attrs:v,slots:d})=>{const g=t.ref(),p=t.ref(),l=t.ref(),m=M("lookup-menu"),o=t.ref(!1),a=t.ref(!1),c=t.ref(!1),{computedDisabled:f}=w(t.toRef(e,"disabled")),I=t.toRef(e,"selected"),q=K(I,u,"update:selected"),r=t.computed(()=>e.menuItems.find(n=>n.value===e.selected)),C=t.computed(()=>{var n,i;return(i=(n=l.value)==null?void 0:n.getHighlightedMenuItem())==null?void 0:i.id}),s=t.ref(e.initialInputValue),h=t.computed(()=>({"cdx-lookup--disabled":f.value,"cdx-lookup--pending":o.value})),{rootClasses:V,rootStyle:k,otherAttrs:S}=N(v,h);function $(n){r.value&&r.value.label!==n&&r.value.value!==n&&(q.value=null),n===""?(a.value=!1,o.value=!1):o.value=!0,u("input",n)}function x(n){c.value=!0,s.value!==null&&s.value!==""&&(e.menuItems.length>0||d["no-results"])&&(a.value=!0),u("focus",n)}function B(n){c.value=!1,a.value=!1,u("blur",n)}function U(n){!l.value||f.value||e.menuItems.length===0&&!d["no-results"]||n.key===" "||l.value.delegateKeyNavigation(n)}return L(p,l),t.watch(I,n=>{var i;if(n!==null){const y=r.value?(i=r.value.label)!=null?i:r.value.value:"";s.value!==y&&(s.value=y,u("input",s.value))}}),t.watch(t.toRef(e,"menuItems"),n=>{c.value&&o.value&&(n.length>0||d["no-results"])&&(a.value=!0),n.length===0&&!d["no-results"]&&(a.value=!1),o.value=!1}),{rootElement:g,textInput:p,menu:l,menuId:m,highlightedId:C,inputValue:s,modelWrapper:q,expanded:a,computedDisabled:f,onInputBlur:B,rootClasses:V,rootStyle:k,otherAttrs:S,onUpdateInput:$,onInputFocus:x,onKeydown:U}}});function P(e,u,v,d,g,p){const l=t.resolveComponent("cdx-text-input"),m=t.resolveComponent("cdx-menu");return t.openBlock(),t.createElementBlock("div",{ref:"rootElement",class:t.normalizeClass(["cdx-lookup",e.rootClasses]),style:t.normalizeStyle(e.rootStyle)},[t.createVNode(l,t.mergeProps({ref:"textInput",modelValue:e.inputValue,"onUpdate:modelValue":u[0]||(u[0]=o=>e.inputValue=o)},e.otherAttrs,{class:"cdx-lookup__input",role:"combobox",autocomplete:"off","aria-autocomplete":"list","aria-controls":e.menuId,"aria-expanded":e.expanded,"aria-activedescendant":e.highlightedId,disabled:e.computedDisabled,status:e.status,"onUpdate:modelValue":e.onUpdateInput,onChange:u[1]||(u[1]=o=>e.$emit("change",o)),onFocus:e.onInputFocus,onBlur:e.onInputBlur,onKeydown:e.onKeydown}),null,16,["modelValue","aria-controls","aria-expanded","aria-activedescendant","disabled","status","onUpdate:modelValue","onFocus","onBlur","onKeydown"]),t.createVNode(m,t.mergeProps({id:e.menuId,ref:"menu",selected:e.modelWrapper,"onUpdate:selected":u[2]||(u[2]=o=>e.modelWrapper=o),expanded:e.expanded,"onUpdate:expanded":u[3]||(u[3]=o=>e.expanded=o),"menu-items":e.menuItems},e.menuConfig,{onLoadMore:u[4]||(u[4]=o=>e.$emit("load-more"))}),{default:t.withCtx(({menuItem:o})=>[t.renderSlot(e.$slots,"menu-item",{menuItem:o})]),"no-results":t.withCtx(()=>[t.renderSlot(e.$slots,"no-results")]),_:3},16,["id","selected","expanded","menu-items"])],6)}const R=W._export_sfc(E,[["render",P]]);module.exports=R;