UNPKG

@progress/kendo-react-dropdowns

Version:

React DropDowns offer an interface for users to select different items from a list and more. KendoReact Dropdowns package

9 lines (8 loc) 11.8 kB
/** * @license *------------------------------------------------------------------------------------------- * Copyright © 2025 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the package root for more information *------------------------------------------------------------------------------------------- */ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const et=require("react"),n=require("prop-types"),o=require("@progress/kendo-react-common"),tt=require("@progress/kendo-react-popup"),nt=require("@progress/kendo-react-intl"),Ie=require("@progress/kendo-react-treeview"),Se=require("../package-metadata.js"),G=require("../common/utils.js"),at=require("./useDropdownWidth.js"),ot=require("./ListNoData.js"),h=require("../messages/index.js"),rt=require("@progress/kendo-react-labels"),Re=require("../common/ListFilter.js"),st=require("@progress/kendo-react-buttons"),Te=require("@progress/kendo-svg-icons"),it=require("../common/AdaptiveMode.js"),lt=require("@progress/kendo-react-layout");function ct(u){const m=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(u){for(const E in u)if(E!=="default"){const x=Object.getOwnPropertyDescriptor(u,E);Object.defineProperty(m,E,x.get?x:{enumerable:!0,get:()=>u[E]})}}return m.default=u,Object.freeze(m)}const t=ct(et),{sizeMap:ut,roundedMap:dt}=o.kendoThemeMaps,pt=12e3,ft=2e3,mt="Please select a value from the list!",vt=u=>t.createElement("span",{className:"k-input-value-text"},u.children),Me=u=>u.split("_").map(m=>parseInt(m,10)),gt=(u,m)=>{const{validationMessage:E,valid:x,required:s}=u;return{customError:E!==void 0,valid:!!(x!==void 0?x:!s||m),valueMissing:!m}},re={selectField:"selected",subItemsField:"items",popupSettings:{animate:!0,width:"200px",height:"200px"},data:[],required:!1,style:{},validityStyles:!0,size:"medium",rounded:"medium",fillMode:"solid"},Pe=o.createPropsContext(),se=t.forwardRef((u,m)=>{const E=!o.validatePackage(Se.packageMetadata,{component:"DropDownTree"}),x=o.getLicenseMessage(Se.packageMetadata),s=o.usePropsContext(Pe,u),r={...re,...s},qe=o.useId(),ie=r.id||qe,{data:O,dataItemKey:L,popupSettings:C={},style:V,opened:d,disabled:R,onOpen:W=o.noop,onClose:v=o.noop,placeholder:j,label:T,name:Ke,selectField:Z,subItemsField:z,validationMessage:$,valid:Ne,required:J,validityStyles:Oe}=r,Q=o.getTabIndex(r.tabIndex,R),i=t.useRef(null),g=t.useRef(null),M=t.useRef(null),Y=t.useRef(null),U=t.useRef(null),D=t.useRef(null),X=t.useRef(!1),[le,Le]=t.useState(void 0),w=r.value!==void 0,b=w?r.value:le!==void 0?le:r.defaultValue,A=G.isPresent(b),ee=A?G.getItemValue(b,r.textField):"",te=gt({validationMessage:$,valid:Ne,required:J},A),ce=t.useContext(o.ZIndexContext),Ve=ce?ce+ft:pt,We=t.useCallback(()=>g.current&&g.current.focus(),[]);t.useImperativeHandle(i,()=>({props:r,element:g.current,focus:We})),t.useImperativeHandle(m,()=>i.current);const F=o.useRtl(g,r.dir),ze={width:at.useDropdownWidth(g,re,{...re.popupSettings,...C},V),...F!==void 0?{direction:F}:{}},[Ae,ue]=t.useState(!1),l=d!==void 0?d:Ae,[f,ne]=t.useState(!1),[ae,Be]=t.useState(),[de,_e]=t.useState(""),pe=o.useAdaptiveModeContext(),k=!!(ae&&pe&&ae<=pe.medium&&r.adaptive),He=t.useCallback(()=>{U.current&&U.current.setCustomValidity&&U.current.setCustomValidity(te.valid?"":$===void 0?mt:$)},[$,te]);t.useEffect(He),t.useEffect(()=>{const e=o.canUseDOM&&window.ResizeObserver&&new window.ResizeObserver(Qe.bind(void 0));return document!=null&&document.body&&e&&e.observe(document.body),()=>{document!=null&&document.body&&e&&e.disconnect()}},[]);const fe=t.useCallback(e=>{if(!l){if(W){const a={...e};W.call(void 0,a)}d===void 0&&ue(!0)}},[l,d,W]),I=t.useCallback(e=>{if(l){if(v){const a={...e};v.call(void 0,a)}d===void 0&&(ue(!1),k&&setTimeout(()=>{var a;y((a=Y.current)==null?void 0:a.element)},300))}},[l,d,v,k]),me=t.useCallback(e=>{if(!e.isDefaultPrevented()&&i.current){ne(!0);const a={syntheticEvent:e,nativeEvent:e.nativeEvent,target:i.current};(l?I:fe)(a)}},[l,d,W,v]),P=t.useCallback(e=>{X.current=!0,e(),window.setTimeout(()=>X.current=!1,0)},[]),je=t.useCallback(e=>{var S,we;const{keyCode:a,altKey:c}=e,p=D.current&&D.current.element;if(!i.current||e.isDefaultPrevented()&&((S=M.current)==null?void 0:S.element)===e.target)return;const K={syntheticEvent:e,nativeEvent:e.nativeEvent,target:i.current};if(l)if(a===o.Keys.esc||c&&a===o.Keys.up)e.preventDefault(),I(K);else if(p&&p.querySelector(".k-focus")&&(a===o.Keys.up||a===o.Keys.down||a===o.Keys.left||a===o.Keys.right||a===o.Keys.home||a===o.Keys.end)){if(a===o.Keys.up&&((we=M.current)!=null&&we.element)){const H=Array.from(p.querySelectorAll(".k-treeview-item")),Fe=[...H].reverse().find(N=>N==null?void 0:N.querySelector(".k-focus"));if(Fe&&H.indexOf(Fe)===0)return P(()=>{var N;y((N=M.current)==null?void 0:N.element)})}P(o.noop)}else a===o.Keys.down&&P(()=>{var H;y(((H=M.current)==null?void 0:H.element)||p)});else c&&a===o.Keys.down?(e.preventDefault(),fe(K)):l||a===o.Keys.esc&&ye(e)},[l,d,W,v]),ve=t.useCallback(e=>{const{keyCode:a,altKey:c}=e;c||a!==o.Keys.up&&a!==o.Keys.down||(e.preventDefault(),P(a===o.Keys.up?()=>{y(g.current)}:()=>{var p;y((p=D.current)==null?void 0:p.element)}))},[]),y=t.useCallback(e=>{e&&P(()=>e.focus())},[]),Ze=t.useCallback(()=>{var e;!f&&l&&!d?I({target:i.current}):s.filterable?y((e=M.current)==null?void 0:e.element):y(D.current&&D.current.element)},[v,s.filterable,f,d,l]),$e=t.useCallback(()=>{f&&y(g.current)},[f]),Ue=t.useCallback(e=>{if(!f&&!X.current&&(ne(!0),s.onFocus&&i.current)){const a={syntheticEvent:e,nativeEvent:e.nativeEvent,target:i.current};s.onFocus.call(void 0,a)}},[f,s.onFocus]),Xe=t.useCallback(e=>{if(f&&!X.current&&i.current){ne(!1);const a={syntheticEvent:e,nativeEvent:e.nativeEvent,target:i.current};if(s.onBlur){const c={...a};s.onBlur.call(void 0,c)}k||I(a)}},[f,s.onBlur,l,d,v]),Ge=t.useCallback(()=>{f&&P(o.noop),k&&setTimeout(()=>{var e;y((e=Y.current)==null?void 0:e.element)},300)},[f,k]),ge=t.useCallback((e,a,c)=>{if(s.onChange){const p={value:a,level:c?Me(c):[],...e};s.onChange.call(void 0,p)}w||Le(a)},[s.onChange,w]),be=t.useCallback(e=>{if(G.areSame(e.item,b,L)||!i.current)return;const{item:a,itemHierarchicalIndex:c,nativeEvent:p,syntheticEvent:K}=e,S={syntheticEvent:K,nativeEvent:p,target:i.current};ge(S,a,c),I(S)},[w,b,s.onChange,L,l,d,v]),ye=t.useCallback(e=>{if(!i.current)return;const a={syntheticEvent:e,nativeEvent:e.nativeEvent,target:i.current};ge(a,null),I(a),e.preventDefault()},[w,s.onChange,l,d,v]),he=t.useCallback(e=>{if(e.syntheticEvent.stopPropagation(),s.onExpandChange&&i.current){const{item:a,itemHierarchicalIndex:c,nativeEvent:p,syntheticEvent:K}=e,S={level:Me(c),item:a,nativeEvent:p,syntheticEvent:K,target:i.current};s.onExpandChange.call(void 0,S)}},[s.onExpandChange]),Ee=t.useCallback(e=>{if(s.onFilterChange&&i.current){const c={filter:{field:s.textField,operator:"contains",value:e.target.value},syntheticEvent:e.syntheticEvent,nativeEvent:e.nativeEvent,target:i.current};s.onFilterChange.call(void 0,c),s.filter===void 0&&_e(e.target.value)}},[s.onFilterChange,s.filter,s.textField]),Je=()=>{const e=r.filterable?t.createElement(Re,{value:r.filter===void 0?de:r.filter,ref:Y,onChange:Ee,onKeyDown:ve,size:"large",rounded:B,fillMode:_,placeholder:j}):null,a={title:r.adaptiveTitle||T,subTitle:r.adaptiveSubtitle,expand:l,onClose:c=>I(c),windowWidth:ae,mobileFilter:e};return t.createElement(it.AdaptiveMode,{...a},t.createElement(lt.ActionSheetContent,null,O.length>0?t.createElement(Ie.TreeView,{ref:D,tabIndex:Q,data:Ce,focusIdField:L,textField:r.textField,selectField:Z,expandField:r.expandField,childrenField:z,expandIcons:!0,onItemClick:be,onExpandChange:he,size:"large",item:r.item,dir:F,animate:C.animate}):t.createElement(ke,null,oe.toLanguageString(h.nodata,h.messages[h.nodata]))))},Qe=t.useCallback(e=>{for(const a of e)Be(a.target.clientWidth)},[]),Ce=t.useMemo(()=>w||!A?O:o.mapTree(O,z,e=>o.extendDataItem(e,z,{[Z]:G.areSame(e,b,L)})),[O,b,w,A,Z,z]),ke=r.listNoData||ot.ListNoData,Ye=r.valueHolder||vt,oe=nt.useLocalization(),xe=!Oe||te.valid,{size:q,rounded:B,fillMode:_}=r,De=t.createElement(t.Fragment,null,t.createElement("span",{className:o.classNames("k-dropdowntree k-picker",r.className,{[`k-picker-${ut[q]||q}`]:q,[`k-rounded-${dt[B]||B}`]:B,[`k-picker-${_}`]:_,"k-focus":f,"k-invalid":!xe,"k-loading":r.loading,"k-required":J,"k-disabled":r.disabled}),tabIndex:Q,accessKey:r.accessKey,id:ie,style:T?{...V,width:void 0}:V,dir:F,ref:g,onKeyDown:R?void 0:je,onMouseDown:Ge,onClick:R?void 0:me,onFocus:k?e=>me(e):Ue,onBlur:Xe,role:"combobox","aria-haspopup":"tree","aria-expanded":l,"aria-disabled":R,"aria-label":T,"aria-labelledby":r.ariaLabelledBy,"aria-describedby":r.ariaDescribedBy,"aria-required":J},t.createElement("span",{className:"k-input-inner"},(ee||j)&&t.createElement(Ye,{item:b},ee||j)),r.loading&&t.createElement(o.IconWrap,{className:"k-input-loading-icon",name:"loading"}),A&&!R&&t.createElement("span",{onClick:ye,className:"k-clear-value",title:oe.toLanguageString(h.clear,h.messages[h.clear]),role:"button",tabIndex:-1,onMouseDown:e=>e.preventDefault()},t.createElement(o.IconWrap,{name:"x",icon:Te.xIcon})),t.createElement(st.Button,{tabIndex:-1,type:"button","aria-label":"select",className:"k-input-button",size:q,fillMode:_,themeColor:"base",rounded:null,icon:"caret-alt-down",svgIcon:Te.caretAltDownIcon}),t.createElement("select",{name:Ke,ref:U,tabIndex:-1,"aria-hidden":!0,title:T,style:{opacity:0,width:1,border:0,zIndex:-1,position:"absolute",left:"50%"}},t.createElement("option",{value:r.valueMap?r.valueMap.call(void 0,b):b})),!k&&t.createElement(o.ZIndexContext.Provider,{value:Ve},t.createElement(tt.Popup,{...C,className:o.classNames(C.className,{"k-rtl":F==="rtl"}),popupClass:o.classNames(C.popupClass,"k-dropdowntree-popup k-list-container"),style:ze,anchor:C.anchor||g.current,show:l,onOpen:Ze,onClose:$e},r.filterable&&t.createElement(Re,{value:r.filter===void 0?de:r.filter,ref:M,onChange:Ee,onKeyDown:ve,size:q,rounded:B,fillMode:_,renderListFilterWrapper:!0,renderPrefixSeparator:!0}),O.length>0?t.createElement(Ie.TreeView,{style:{height:C.height},ref:D,tabIndex:Q,data:Ce,focusIdField:L,textField:r.textField,selectField:Z,expandField:r.expandField,childrenField:z,expandIcons:!0,onItemClick:be,onExpandChange:he,size:q,item:r.item,dir:F,animate:C.animate}):t.createElement(ke,null,oe.toLanguageString(h.nodata,h.messages[h.nodata])),E&&t.createElement(o.WatermarkOverlay,{message:x})))),k&&Je());return T?t.createElement(rt.FloatingLabel,{label:T,editorValue:ee,editorPlaceholder:j,editorValid:xe,editorDisabled:R,editorId:ie,style:{width:V?V.width:void 0},children:De,dir:F}):De}),bt={opened:n.bool,disabled:n.bool,dir:n.string,tabIndex:n.number,accessKey:n.string,data:n.array,value:n.any,valueMap:n.func,placeholder:n.string,dataItemKey:n.string.isRequired,textField:n.string.isRequired,selectField:n.string,expandField:n.string,subItemsField:n.string,className:n.string,style:n.object,label:n.string,validationMessage:n.string,validityStyles:n.bool,valid:n.bool,required:n.bool,name:n.string,id:n.string,ariaLabelledBy:n.string,ariaDescribedBy:n.string,filterable:n.bool,filter:n.string,loading:n.bool,popupSettings:n.shape({animate:n.oneOfType([n.bool,n.shape({openDuration:n.number,closeDuration:n.number})]),popupClass:n.string,className:n.string,appendTo:n.any,width:n.oneOfType([n.string,n.number]),height:n.oneOfType([n.string,n.number])}),onOpen:n.func,onClose:n.func,onFocus:n.func,onBlur:n.func,onChange:n.func,onFilterChange:n.func,onExpandChange:n.func,item:n.func,valueHolder:n.func,listNoData:n.func,adaptiveTitle:n.string,adaptiveSubtitle:n.string,adaptive:n.bool};se.displayName="KendoReactDropDownTree";se.propTypes=bt;exports.DropDownTree=se;exports.DropDownTreePropsContext=Pe;