UNPKG

@atlas-kitchen/adyen-web

Version:
3 lines (2 loc) 3.21 kB
import{createElement as e}from"../../../../external/preact/dist/preact.js";import{useRef as t,useState as n,useMemo as r,useEffect as l}from"../../../../external/preact/hooks/dist/hooks.js";import s from"../../../../_virtual/index.js";import o from"./components/SelectButton.js";import a from"./components/SelectList.js";import i from"../../../../utils/uuid.js";import{keys as c}from"./constants.js";import{ARIA_ERROR_SUFFIX as u,ARIA_CONTEXT_SUFFIX as d}from"../../../../core/Errors/constants.js";import{simulateFocusScroll as m}from"../utils.js";function f({items:f=[],className:p="",classNameModifiers:g=[],filterable:v=!0,readonly:h=!1,onChange:b=()=>{},onInput:w,selectedValue:y,name:k,isInvalid:I,isValid:L,placeholder:D,uniqueId:j,disabled:x,disableTextFilter:B,clearOnSelect:E,blurOnClose:T,onListToggle:C,allowIdOnButton:N=!1,required:S}){const $=t(null),_=t(null),M=t(null),O=t(null),[R,q]=n(null),[P,V]=n(!1),A=r((()=>`select-${i()}`),[]),F=f.find((e=>e.id===y))||{},[H,K]=n(),[U,z]=n(F),G=F,J=B?f:f.filter((e=>!R||e.name.toLowerCase().includes(R.toLowerCase()))),Q=j?`${j}${I?u:d}`:null,W=e=>{if(!e)return;const t=document.getElementById(`listItem-${e.id}`);m(t)},X=()=>{T&&$.current.blur(),V(!1)},Y=()=>{V(!0)},Z=e=>{const t=e.currentTarget.getAttribute("data-value");return J.find((e=>e.id==t))},ee=e=>{let t;e.preventDefault(),t=e.currentTarget instanceof HTMLElement&&"option"===e.currentTarget.getAttribute("role")?Z(e):U.id&&J.some((e=>e.id===U.id))?U:R?J[0]:{id:y},t&&!t.disabled&&(b({target:{value:t.id,name:k}}),E&&K(null),X())},te=e=>{switch(e.key){case c.space:case c.enter:ee(e);break;case c.arrowDown:e.preventDefault(),(()=>{if(!J||J.length<1)return;const e=J.findIndex((e=>e===U))+1,t=e<J.length?e:0,n=J[t];W(n),z(n)})();break;case c.arrowUp:e.preventDefault(),(()=>{if(!J||J.length<1)return;const e=J.findIndex((e=>e===U))-1,t=e<0?J.length-1:e,n=J[t];W(n),z(n)})()}};return l((()=>{P?K(null):q(null)}),[P]),l((()=>{P&&v&&$.current&&$.current.focus(),C?.(P)}),[P]),l((()=>{function e(e){(e.composedPath?!e.composedPath().includes(_.current):!_.current.contains(e.target))&&X()}return document.addEventListener("click",e,!1),()=>{document.removeEventListener("click",e,!1)}}),[_]),e("div",{className:s(["adyen-checkout__dropdown",p,...g.map((e=>`adyen-checkout__dropdown--${e}`))]),ref:_},e(o,{inputText:H,id:j??null,active:U,selected:G,filterInputRef:$,filterable:v,isInvalid:I,isValid:L,onButtonKeyDown:e=>{e.key===c.enter&&v&&P&&R?ee(e):e.key===c.escape?X():![c.arrowUp,c.arrowDown,c.enter].includes(e.key)&&(e.key!==c.space||v&&P)?(e.shiftKey&&e.key===c.tab||e.key===c.tab)&&X():(e.preventDefault(),P?te(e):Y())},onFocus:Y,onInput:e=>{const t=e.target.value;K(t),q(t),w&&w(t)},placeholder:D,readonly:h,selectListId:A,showList:P,toggleButtonRef:M,toggleList:e=>{e.preventDefault(),P?(K(G.name),X()):(K(null),Y())},disabled:x,ariaDescribedBy:Q,allowIdOnButton:N,required:S}),e(a,{active:U,filteredItems:J,onHover:e=>{e.preventDefault();const t=Z(e);z(t)},onSelect:ee,selected:G,selectListId:A,selectListRef:O,showList:P}))}f.defaultProps={className:"",classNameModifiers:[],filterable:!0,items:[],readonly:!1,onChange:()=>{}};export{f as default}; //# sourceMappingURL=Select.js.map