UNPKG

carbon-react

Version:

A library of reusable React components for easily building user interfaces.

2 lines (1 loc) • 6.19 kB
import{jsx as e,jsxs as t}from"react/jsx-runtime";import n,{useRef as r,useState as o,useMemo as l,useCallback as i,useEffect as a}from"react";import"../../../style/utils/filter-styled-system-padding-props.js";import c from"../../../style/utils/filter-styled-system-margin-props.js";import s from"../../../style/utils/filter-out-styled-system-spacing-props.js";import u from"../select.style.js";import d from"../__internal__/select-textbox/select-textbox.component.js";import p from"../__internal__/select-list/select-list.component.js";import m from"../../../__internal__/utils/helpers/guid/index.js";import b from"../__internal__/utils/get-next-child-by-text.js";import f from"../__internal__/utils/is-expected-option.js";import y from"../__internal__/utils/is-navigation-key.js";import O from"../../../hooks/__internal__/useInputAccessibility/useInputAccessibility.js";import v from"../../../hooks/__internal__/useAdaptiveSidebarModalFocus/useAdaptiveSidebarModalFocus.js";function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){g(e,t,n[t])}))}return e}function _(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const h=n.forwardRef(((g,h)=>{var{"aria-describedby":j,"aria-label":P,"aria-labelledby":S,value:x,id:k,label:C,name:D,disabled:E,readOnly:L,children:I,transparent:T,openOnFocus:F=!1,onOpen:M,onChange:V,onClick:B,onFocus:H,onKeyDown:K,onBlur:A,isLoading:q,listMaxHeight:W,onListScrollBottom:R,tableHeader:z,multiColumn:G,tooltipPosition:J,"data-element":N,"data-role":Q,listPlacement:U="bottom",flipEnabled:X=!0,enableVirtualScroll:Y,virtualScrollOverscan:Z,required:$,listWidth:ee}=g,te=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},l=Object.keys(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(g,["aria-describedby","aria-label","aria-labelledby","value","id","label","name","disabled","readOnly","children","transparent","openOnFocus","onOpen","onChange","onClick","onFocus","onKeyDown","onBlur","isLoading","listMaxHeight","onListScrollBottom","tableHeader","multiColumn","tooltipPosition","data-element","data-role","listPlacement","flipEnabled","enableVirtualScroll","virtualScrollOverscan","required","listWidth"]);const ne=r(m()),re=r(null),oe=r(null),le=r(void 0),ie=r(),ae=r(),ce=r(),se=r(),[ue,de]=o(),[pe,me]=o(!1),[be,fe]=o(""),[ye,Oe]=o(""),[ve,ge]=o(x),we=r(k||m()),{labelId:_e}=O({id:we.current,label:C}),he=r(void 0),je=l((()=>n.Children.toArray(I)),[I]),Pe=i(((e,t=!1)=>({target:_(w({},D&&{name:D},k&&{id:k}),{value:e}),selectionConfirmed:t})),[D,k]),Se=i((e=>{const t=je.findIndex((e=>n.isValidElement(e)&&f(e,ve))),r=b(e,je,t);r&&V(Pe(r.props.value))}),[je,Pe,V,ve]),xe=i((e=>{if(ae.current){const t=se.current+e;se.current=t,Se(t),window.clearTimeout(le.current)}else se.current=e,Se(e);ae.current=!0,window.clearTimeout(le.current),le.current=window.setTimeout((()=>{ae.current=!1,se.current=""}),500)}),[Se]),ke=i((e=>{const{key:t}=e;null==K||K(e),L||(" "===t||y(t)?(e.preventDefault(),me((e=>(e||null==M||M(),!0)))):1!==t.length||e.metaKey||e.ctrlKey||xe(t))}),[xe,K,M,L]),Ce=i((e=>{const t=re.current&&!re.current.contains(e.target),n=oe.current&&!oe.current.contains(e.target);ie.current=!1,t&&n&&!ce.current&&me(!1),ce.current=!1}),[]);function De(e){ie.current=!1,null==B||B(e),me((e=>!e&&(null==M||M(),!0)))}a((()=>{ge(x)}),[x]),a((()=>{const e=je.find((e=>f(e,ve)));let t="";e&&(t=e.props.text),Oe(t)}),[ve,je]),a((()=>{const e="click";return window.addEventListener(e,Ce),function(){window.removeEventListener(e,Ce)}}),[Ce]),a((()=>function(){window.clearTimeout(le.current),window.clearTimeout(he.current)}),[]),v((()=>me(!1)));const Ee=i((()=>{me(!1)}),[]),Le=i((e=>{e&&(de(e),h&&("function"==typeof h?h(e):h.current=e))}),[h]);let Ie;switch(U){case"top":Ie="top-end";break;case"bottom":Ie="bottom-end";break;default:Ie=U}const Te=e(p,{ref:oe,id:ne.current,labelId:_e,anchorElement:(null==ue?void 0:ue.parentElement)||void 0,onSelect:e=>{const{text:t,value:n,selectionType:r,id:o,selectionConfirmed:l}=e,i="click"===r;!function(e,t,n){null==V||V(Pe(e,n))}(n,0,l),fe(o),"navigationKey"!==r&&me(!1),i&&(ce.current=!0,null==ue||ue.focus())},onMouseDown:function(){ie.current=!0},onSelectListClose:Ee,highlightedValue:ve,listMaxHeight:W,isLoading:q,onListScrollBottom:R,tableHeader:z,multiColumn:G,listPlacement:void 0!==ee?Ie:U,flipEnabled:X,isOpen:pe,enableVirtualScroll:Y,virtualScrollOverscan:Z,listWidth:ee,children:I}),Fe=c(te);return t(u,_(w({transparent:T,disabled:E,readOnly:L,"data-component":"simple-select","data-role":Q,"data-element":N,isOpen:pe},Fe),{children:[e("div",{ref:re,children:e(d,_(w({ref:Le,ariaLabel:P,"aria-controls":ne.current,activeDescendantId:be,ariaLabelledby:S,"aria-describedby":j,isOpen:pe,value:ye},_(w({id:we.current,name:D,disabled:E,readOnly:L,selectedValue:ve,formattedValue:ye,onClick:De,iconOnClick:function(e){De(e)},label:C,labelId:_e,onMouseDown:function(){ie.current=!0},onFocus:function(e){ce.current||(null==H||H(e),ie.current?ie.current=!1:F&&(window.clearTimeout(he.current),he.current=window.setTimeout((()=>{me((e=>(e||null==M||M(),!0)))}))))},onKeyDown:ke,onBlur:function(e){ie.current||null==A||A(e)},tooltipPosition:J,required:$,transparent:T},s(te)),{"data-component":void 0})),{onChange:()=>{}}))}),Te]}))}));export{h as SimpleSelect,h as default};