UNPKG

carbon-react

Version:

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

2 lines (1 loc) • 8.69 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react");require("../../../style/utils/filter-styled-system-padding-props.js");var l=require("../../../style/utils/filter-styled-system-margin-props.js"),r=require("../../../style/utils/filter-out-styled-system-spacing-props.js"),n=require("../__internal__/select-textbox/select-textbox.component.js"),i=require("../../../__internal__/utils/helpers/guid/index.js"),u=require("../__internal__/utils/with-filter.hoc.js"),o=require("../__internal__/select-list/select-list.component.js"),a=require("./multi-select.style.js"),s=require("../../pill/pill.component.js"),c=require("../__internal__/utils/is-expected-option.js"),d=require("../__internal__/utils/is-expected-value.js"),f=require("../__internal__/utils/is-navigation-key.js"),p=require("../../../hooks/__internal__/useStableCallback/useStableCallback.js"),b=require("../../../hooks/__internal__/useInputAccessibility/useInputAccessibility.js"),v=require("../../../hooks/__internal__/useAdaptiveSidebarModalFocus/useAdaptiveSidebarModalFocus.js");function m(e){return e&&e.__esModule?e:{default:e}}var y=m(t);function h(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function O(e){for(var t=1;t<arguments.length;t++){var l=null!=arguments[t]?arguments[t]:{},r=Object.keys(l);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(l).filter((function(e){return Object.getOwnPropertyDescriptor(l,e).enumerable})))),r.forEach((function(t){h(e,t,l[t])}))}return e}function g(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 l=Object.getOwnPropertySymbols(e);t.push.apply(t,l)}return t}(Object(t)).forEach((function(l){Object.defineProperty(e,l,Object.getOwnPropertyDescriptor(t,l))})),e}const _=u.default(o.default),j=y.default.forwardRef(((u,o)=>{var{"aria-label":m,"aria-labelledby":h,value:j,id:C,label:S,name:x,disabled:k,readOnly:w,children:P,onOpen:q,onFilterChange:E,onChange:M,onClick:R,onFocus:L,onBlur:D,onKeyDown:V,openOnFocus:F=!1,noResultsMessage:I,placeholder:T,isLoading:A,onListScrollBottom:B,tableHeader:H,multiColumn:z,tooltipPosition:K,size:W="medium","data-element":$,"data-role":G,listPlacement:J="bottom",listMaxHeight:N,flipEnabled:Q=!0,wrapPillText:U=!0,enableVirtualScroll:X,virtualScrollOverscan:Y,required:Z,listWidth:ee}=u,te=function(e,t){if(null==e)return{};var l,r,n=function(e,t){if(null==e)return{};var l,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)l=i[r],t.indexOf(l)>=0||(n[l]=e[l]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)l=i[r],t.indexOf(l)>=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(n[l]=e[l])}return n}(u,["aria-label","aria-labelledby","value","id","label","name","disabled","readOnly","children","onOpen","onFilterChange","onChange","onClick","onFocus","onBlur","onKeyDown","openOnFocus","noResultsMessage","placeholder","isLoading","onListScrollBottom","tableHeader","multiColumn","tooltipPosition","size","data-element","data-role","listPlacement","listMaxHeight","flipEnabled","wrapPillText","enableVirtualScroll","virtualScrollOverscan","required","listWidth"]);const[le,re]=t.useState(""),ne=t.useRef(i.default()),ie=t.useRef(i.default()),ue=t.useRef(null),oe=t.useRef(null),ae=t.useRef(!1),se=t.useRef(!1),ce=t.useRef(!1),de=t.useRef(!1),fe=t.useRef(!1),[pe,be]=t.useState(),[ve,me]=t.useState(!1),[ye,he]=t.useState(""),[Oe,ge]=t.useState(""),[_e,je]=t.useState(""),[Ce,Se]=t.useState(),xe=t.useRef(C||i.default()),{labelId:ke}=b.default({id:xe.current,label:S}),we=t.useRef(null),Pe=t.useCallback((()=>{me((e=>(!e&&q&&q(),!0)))}),[q]),qe=t.useCallback(((e,t)=>({target:g(O({},x&&{name:x},C&&{id:C}),{value:e}),selectionConfirmed:t})),[x,C]),Ee=t.useCallback(((e,t)=>{const l=e(j);l.length!==(null==j?void 0:j.length)&&M(qe(l,t))}),[qe,M,j]),Me=t.useCallback((e=>{const t=e.target.value,l=(r=t,n=P,y.default.Children.toArray(n).find((e=>{const{text:t}=e.props;return-1!==(null==t?void 0:t.toLowerCase().indexOf(null==r?void 0:r.toLowerCase()))})));var r,n;l&&ge(l.props.value),je(t),he(t),Pe()}),[P,Pe]),Re=t.useCallback((e=>{se.current=!0,Ee((t=>{if(!t.length)return t;const l=t.slice();return l.splice(e,1),l}),!0)}),[Ee]),Le=t.useCallback((e=>{const{key:t}=e,l="Backspace"===t||"Delete"===t;V&&V(e),w||(!e.defaultPrevented&&f.default(t)&&(e.preventDefault(),Pe()),!l||""!==_e&&""!==ye||Re(-1))}),[V,w,_e,ye,Pe,Re]),De=t.useMemo((()=>{var e;return j&&j.length?null===(e=y.default.Children.map(P,(e=>!(!y.default.isValidElement(e)||!j.includes(e.props.value))&&e.props.text)))||void 0===e?void 0:e.filter((e=>e)).reduce(((e,t)=>e?`${e}, ${t}`:t),""):null}),[P,j]),Ve=t.useCallback((e=>{if(ce.current=!1,!ve)return;const t=ue.current&&!ue.current.contains(e.target),l=oe.current&&!oe.current.contains(e.target);t&&l&&!se.current&&(he(""),je(""),ge(""),me(!1)),se.current=!1}),[ve]),Fe=t.useMemo((()=>{const t=!k&&!w;let l;return(null==j?void 0:j.length)?j.map(((r,n)=>{const i=y.default.Children.toArray(P).find((e=>y.default.isValidElement(e)&&c.default(e,r)));let u={};if(!i)return null;var o,d;y.default.isValidElement(i)&&(l=void 0!==(null==i||null===(o=i.props.value)||void 0===o?void 0:o.value)?null==i||null===(d=i.props.value)||void 0===d?void 0:d.value:null==i?void 0:i.props.value,u={title:i.props.text,fill:i.props.fill,borderColor:i.props.borderColor});const f=u.title||"",p=f+l||n;return e.jsx(a.StyledSelectPillContainer,{children:e.jsx(s.Pill,g(O({onDelete:t?()=>Re(n):void 0,wrapText:U},u),{children:f}))},p)})):""}),[P,k,w,j]);t.useEffect((()=>{const e=null==j?void 0:j.length;Se(e?" ":T)}),[j,T]),t.useEffect((()=>{const e="click";return window.addEventListener(e,Ve),function(){window.removeEventListener(e,Ve)}}),[Ve]);const Ie=p.useStableCallback(E),Te=t.useRef(!0);function Ae(e){if(ce.current=!1,R&&R(e),!F||F&&!fe.current){if(ve)return je(""),void me(!1);null==q||q(),me(!0)}else fe.current=!1}function Be(e){ce.current=!1,R&&R(e),me((e=>e?(je(""),!1):(q&&q(),!0)))}function He(e){de.current=!1,ce.current||(ae.current=!1,D&&D(e))}function ze(e){ce.current=!0,"input"===e.target.dataset.element&&(de.current=!0)}function Ke(e){const t=()=>null==L?void 0:L(e);F?(we.current&&clearTimeout(we.current),we.current=setTimeout((()=>{me((e=>!!e||(q&&q(),L&&!ae.current&&(t(),ae.current=!0),ce.current&&!de.current?(fe.current=!1,!1):(de.current&&(fe.current=!0),!0))))}))):L&&!ae.current&&(t(),ae.current=!0)}t.useEffect((()=>{Ie&&!Te.current&&Ie(_e)}),[Ie,_e]),t.useEffect((()=>{Te.current=!1}),[]),v.default((()=>me(!1)));const We=t.useCallback((e=>{const{value:t,selectionType:l,id:r,selectionConfirmed:n}=e;if("navigationKey"===l)return ge(t),void re(r);"click"===l&&(se.current=!0),he("");const i=-1!==(null==j?void 0:j.findIndex((e=>d.default(e,t))));null==pe||pe.focus(),ce.current=!1,Ee((e=>i?e:[...e,t]),n)}),[pe,j,Ee]),$e=t.useCallback((()=>{me(!1),je("")}),[]),Ge=t.useCallback((e=>{e&&(be(e),o&&("function"==typeof o?o(e):o.current=e))}),[o]);function Je(){return g(O({id:xe.current,name:x,disabled:k,label:S,readOnly:w,placeholder:Ce,leftChildren:Fe,formattedValue:ye,selectedValue:j,onClick:Ae,onMouseDown:ze,onFocus:Ke,onBlur:He,iconOnClick:Be,iconOnMouseDown:ze,onKeyDown:Le,onChange:Me,tooltipPosition:K,size:W,required:Z},r.default(te)),{"data-component":void 0})}let Ne;switch(J){case"top":Ne="top-end";break;case"bottom":Ne="bottom-end";break;default:Ne=J}const Qe=e.jsx(_,{ref:oe,id:ne.current,labelId:ke,anchorElement:(null==pe?void 0:pe.parentElement)||void 0,onSelect:We,onSelectListClose:$e,onMouseDown:function(){ce.current=!0},filterText:_e.trim(),highlightedValue:Oe,noResultsMessage:I,isLoading:A,onListScrollBottom:B,tableHeader:H,multiColumn:z,listPlacement:void 0!==ee?Ne:J,listMaxHeight:N,flipEnabled:Q,multiselectValues:j,isOpen:ve,enableVirtualScroll:X,virtualScrollOverscan:Y,listWidth:ee,children:P}),Ue=l.default(te);return e.jsxs(a.StyledSelectMultiSelect,g(O({disabled:k,readOnly:w,hasTextCursor:!0,size:W,"data-component":"multiselect","data-role":G,"data-element":$,isOpen:ve},Ue),{children:[e.jsxs("div",{ref:ue,children:[e.jsx(a.StyledAccessibilityLabelContainer,{"data-element":"accessibility-label",id:ie.current,children:De}),e.jsx(n.default,O({ref:Ge,accessibilityLabelId:ie.current,activeDescendantId:le,"aria-controls":ne.current,ariaLabel:m,ariaLabelledby:h,hasTextCursor:!0,isOpen:ve,labelId:ke,value:Je().formattedValue},Je()))]}),Qe]}))}));exports.MultiSelect=j,exports.default=j;