@progress/kendo-react-treeview 12.0.0-develop.1 → 12.0.0-develop.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn/js/kendo-react-treeview.js +1 -1
- package/index.d.mts +189 -208
- package/index.d.ts +189 -208
- package/package-metadata.js +1 -1
- package/package-metadata.mjs +2 -2
- package/package.json +4 -4
|
@@ -12,4 +12,4 @@
|
|
|
12
12
|
* Licensed under commercial license. See LICENSE.md in the package root for more information
|
|
13
13
|
*-------------------------------------------------------------------------------------------
|
|
14
14
|
*/
|
|
15
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("prop-types"),require("@progress/kendo-react-common"),require("@progress/kendo-svg-icons"),require("@progress/kendo-react-animation")):"function"==typeof define&&define.amd?define(["exports","react","prop-types","@progress/kendo-react-common","@progress/kendo-svg-icons","@progress/kendo-react-animation"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).KendoReactTreeview={},e.React,e.PropTypes,e.KendoReactCommon,e.KendoSvgIcons,e.KendoReactAnimation)}(this,(function(e,t,i,s,n,r){"use strict";function d(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(i){if("default"!==i){var s=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,s.get?s:{enumerable:!0,get:function(){return e[i]}})}})),t.default=e,Object.freeze(t)}var a=d(t);function o(e,t,i,n,r){switch(n){case s.Keys.left:return s.treeIdUtils.isIdZeroLevel(t)||r.expanded(e)&&s.isEnabledAndAllParentsEnabled(t,i,r)?t:s.treeIdUtils.getDirectParentId(t);case s.Keys.right:return s.isItemExpandedAndWithChildren(e,r)?s.treeIdUtils.getFirstChildId(t):t;case s.Keys.up:return function(){const e=Number(s.treeIdUtils.getShortId(t)),n=s.treeIdUtils.getDirectParentId(t);return e?c(s.treeIdUtils.createId(e-1,n),i,r):s.treeIdUtils.isIdZeroLevel(t)?t:n}();case s.Keys.down:return s.isItemExpandedAndWithChildren(e,r)?s.treeIdUtils.getFirstChildId(t):l(t,i,r)||t;case s.Keys.home:return s.treeIdUtils.ZERO_LEVEL_ZERO_NODE_ID;case s.Keys.end:return function(){let e,t=(i.length-1).toString(),n=i[i.length-1];for(;s.isItemExpandedAndWithChildren(n,r);)e=n[r.getChildrenField()],t=s.treeIdUtils.createId(e.length-1,t),n=e[e.length-1];return t}();default:return t}}function l(e,t,i){const n=s.treeIdUtils.getDirectParentId(e),r=n?s.treeIdUtils.getItemById(n,t,i.getChildrenField()):void 0,d=r?r[i.getChildrenField()]:t,a=Number(s.treeIdUtils.getShortId(e));return a<d.length-1?s.treeIdUtils.createId(a+1,n):r?l(n,t,i):void 0}function c(e,t,i){const n=s.treeIdUtils.getItemById(e,t,i.getChildrenField());return s.isItemExpandedAndWithChildren(n,i)?c(s.treeIdUtils.createId(n[i.getChildrenField()].length-1,e),t,i):e}const h=(e,t)=>{const i=((e,t)=>e===t.length-1)(e,t);return 0!==e||i?i?"bot":"mid":"top"},p="expanded",m="items",u="selected",I="checked",g="checkIndeterminate",f="_kendoItemId",b="_kendoTreeViewGuid",{sizeMap:v}=s.kendoThemeMaps,C=a.createContext((e=>e)),x=class extends a.Component{constructor(){super(...arguments),this.onCheckChange=e=>{this.props.onCheckChange(e,this.item,this.itemId)},this.onExpandChange=e=>{this.props.onExpandChange(e,this.item,this.itemId)},this.onItemClick=e=>{this.props.onItemClick(e,this.item,this.itemId)},this.onPress=e=>{this.props.onPress(e.event,this.item,this.itemId)},this.onDrag=e=>{this.props.onDrag(e.event,this.item,this.itemId)},this.onRelease=e=>{this.props.onRelease(e.event,this.item,this.itemId)},this.onContextMenu=e=>{this.props.onContextMenu(e,this.item,this.itemId)},this.assignDraggableMeta=e=>{e&&(e[f]=this.props.itemId,e[b]=this.props.treeGuid)}}render(){const e=this.renderSubitemsIfApplicable(),t=this.renderItemInPart();return a.createElement("li",{className:s.classNames("k-treeview-item"),tabIndex:this.tabIndex,role:"treeitem","aria-expanded":this.ariaExpanded,"aria-selected":this.ariaSelected,"aria-checked":this.ariaChecked,"aria-disabled":!!this.disabled||void 0,ref:e=>{this.itemElement=e}},a.createElement("span",{className:`k-treeview-${this.props.position}`,ref:this.assignDraggableMeta},this.renderExpandIcon(),this.renderCheckbox(),this.props.draggable?a.createElement(s.Draggable,{onPress:this.onPress,onDrag:this.onDrag,onRelease:this.onRelease},t):t),e&&(this.props.animate?a.createElement(r.Reveal,{transitionEnterDuration:200,transitionExitDuration:200,style:{display:"block"},children:e}):e))}componentDidMount(){const e=this.props.focusedItemId,t=this.itemId;e&&e===t&&this.props.onFocusDomElNeeded(this.itemElement),this.checkboxElement&&(this.checkboxElement.indeterminate=this.fieldsSvc.checkIndeterminate(this.item))}componentDidUpdate(e){const t=this.props.focusedItemId;if(t&&t!==e.focusedItemId&&t===this.itemId&&this.props.onFocusDomElNeeded(this.itemElement),this.checkboxElement){const e=this.fieldsSvc.checkIndeterminate(this.item);this.checkboxElement.indeterminate!==e&&(this.checkboxElement.indeterminate=e)}}renderCheckbox(){if(this.props.checkboxes){const e=this.props.size;return a.createElement("span",{className:s.classNames("k-checkbox-wrap")},a.createElement("input",{type:"checkbox",className:s.classNames("k-checkbox k-rounded-md",{[`k-checkbox-${v[e]||e}`]:e,"k-disabled":this.disabled}),"aria-label":this.item.text,checked:!!this.fieldsSvc.checked(this.item),id:this.props.id,tabIndex:-1,onChange:this.onCheckChange,ref:e=>{this.checkboxElement=e}}))}}renderExpandIcon(){return this.props.expandIcons&&(this.fieldsSvc.hasChildren(this.item)||s.hasChildren(this.item,this.fieldsSvc.getChildrenField()))&&a.createElement("span",{className:s.classNames("k-treeview-toggle",{"k-disabled":this.disabled}),onClick:this.onExpandChange},a.createElement(s.IconWrap,{...this.getIconProps()}))}renderSubitemsIfApplicable(){const e=this.fieldsSvc.children(this.item);return s.isItemExpandedAndWithChildren(this.item,this.fieldsSvc)?a.createElement("ul",{className:"k-treeview-group",role:"group"},e.map(((t,i)=>a.createElement(E,{item:t,position:h(i,e),itemId:s.treeIdUtils.createId(i,this.itemId),treeGuid:this.props.treeGuid,animate:this.props.animate,focusedItemId:this.props.focusedItemId,tabbableItemId:this.props.tabbableItemId,fieldsService:this.props.fieldsService,itemUI:this.props.itemUI,checkboxes:this.props.checkboxes,ariaMultiSelectable:this.props.ariaMultiSelectable,onItemClick:this.props.onItemClick,onFocusDomElNeeded:this.props.onFocusDomElNeeded,draggable:this.props.draggable,onPress:this.props.onPress,onDrag:this.props.onDrag,onRelease:this.props.onRelease,expandIcons:this.props.expandIcons,iconField:this.props.iconField,onExpandChange:this.props.onExpandChange,onCheckChange:this.props.onCheckChange,onContextMenu:this.props.onContextMenu,key:i,size:this.props.size,disabled:this.disabled,isRtl:this.props.isRtl})))):void 0}renderItemInPart(){const e=this.props.iconField,t=e&&this.item[e];return a.createElement("span",{className:s.classNames("k-treeview-leaf",{"k-focus":this.props.focusedItemId===this.itemId,"k-selected":this.fieldsSvc.selected(this.item),"k-disabled":this.disabled,"k-touch-action-none":this.props.draggable}),onClick:this.onItemClick,onContextMenu:this.onContextMenu},t&&a.createElement(s.IconWrap,{name:t.name,icon:t}),a.createElement("span",{className:"k-treeview-leaf-text"},this.props.itemUI?a.createElement(this.props.itemUI,{item:this.item,itemHierarchicalIndex:this.itemId}):this.fieldsSvc.text(this.item)))}get fieldsSvc(){return this.props.fieldsService}get itemId(){return this.props.itemId}get item(){return this.props.item}get tabIndex(){return(this.props.focusedItemId||this.props.tabbableItemId)===this.itemId?0:-1}get ariaExpanded(){return this.fieldsSvc.hasChildren(this.item)||s.hasChildren(this.item,this.fieldsSvc.getChildrenField())?!!this.fieldsSvc.expanded(this.item):void 0}get disabled(){return this.props.disabled||this.fieldsSvc.disabled(this.item)}get ariaChecked(){if(this.props.checkboxes)return this.fieldsSvc.checked(this.item)?"true":this.fieldsSvc.checkIndeterminate(this.item)?"mixed":"false"}get ariaSelected(){return!!this.fieldsSvc.selected(this.item)||(this.props.ariaMultiSelectable?!!this.disabled&&void 0:void 0)}getIconProps(){const e=this.fieldsSvc.expanded(this.item);return e&&!s.hasChildren(this.item,this.fieldsSvc.getChildrenField())?{name:"loading"}:e?{name:"caret-alt-down",icon:n.caretAltDownIcon}:{name:this.props.isRtl?"caret-alt-left":"caret-alt-right",icon:this.props.isRtl?n.caretAltLeftIcon:n.caretAltRightIcon}}};x.defaultProps={position:"top",iconField:"svgIcon"};let k=x;const E=s.withIdHOC(a.forwardRef(((e,t)=>{const i=a.useContext(C).call(void 0,e);return a.createElement(k,{ref:t,...i})})));E.displayName="TreeViewItem";const F=Object.freeze({name:"@progress/kendo-react-treeview",productName:"KendoReact",productCode:"KENDOUIREACT",productCodes:["KENDOUIREACT"],publishDate:0,version:"12.0.0-develop.1",licensingDocsUrl:"https://www.telerik.com/kendo-react-ui/components/my-license/"}),{sizeMap:y}=s.kendoThemeMaps,D=class extends a.Component{constructor(e){super(e),this.state={focusedItemId:void 0,focusedItemPublicId:void 0,tabbableItemId:s.treeIdUtils.ZERO_LEVEL_ZERO_NODE_ID},this.fieldsSvc=null,this.allowExplicitFocus=!1,this.showLicenseWatermark=!1,this._element=null,this.onFocusDomElNeeded=e=>{this.allowExplicitFocus&&this.focusDomItem(e)},this.onCheckChange=(e,t,i)=>{this.setFocus(i),this.dispatchCheckChange(e,t,i)},this.onExpandChange=(e,t,i)=>{this.setFocus(i),this.dispatchExpandChange(e,t,i)},this.onPress=(e,t,i)=>{this.props.onItemDragStart&&this.props.onItemDragStart.call(void 0,{target:this,item:t,itemHierarchicalIndex:i})},this.onDrag=(e,t,i)=>{const{pageX:s,pageY:n,clientX:r,clientY:d}=e;this.props.onItemDragOver&&this.props.onItemDragOver.call(void 0,{target:this,item:t,itemHierarchicalIndex:i,pageX:s,pageY:n,clientX:r,clientY:d})},this.onRelease=(e,t,i)=>{const{pageX:s,pageY:n,clientX:r,clientY:d}=e;this.props.onItemDragEnd&&this.props.onItemDragEnd.call(void 0,{target:this,item:t,itemHierarchicalIndex:i,pageX:s,pageY:n,clientX:r,clientY:d})},this.onItemClick=(e,t,i)=>{this.setFocus(i),this.dispatchItemClick(e,t,i)},this.onFocus=()=>{clearTimeout(this.blurRequest),void 0===this.state.focusedItemId&&this.data.length&&this.setFocus(this.state.tabbableItemId)},this.onBlur=()=>{clearTimeout(this.blurRequest),this.blurRequest=window.setTimeout((()=>this.setFocus(void 0)),0)},this.onKeyDown=e=>{const t=this.getFocusedItem();if(t&&this.fieldsSvc){const i=o(t,this.state.focusedItemId,this.data,e.keyCode,this.fieldsSvc);i!==this.state.focusedItemId&&(e.preventDefault(),this.allowExplicitFocus=!0,this.setFocus(i)),this.dispatchEventsOnKeyDown(e,t)}},this.onContextMenu=(e,t,i)=>{if(this.props.onContextMenu){const s={target:this,syntheticEvent:e,nativeEvent:e.nativeEvent,item:t,itemID:i};this.props.onContextMenu.call(void 0,s)}},this.showLicenseWatermark=!s.validatePackage(F,{component:"TreeView"}),this.licenseMessage=s.getLicenseMessage(F)}get treeGuid(){return this.props.id+"-accessibility-id"}get element(){return this._element}render(){this.fieldsSvc=new s.TreeFieldsService(this.props);const{size:e,className:t}=this.props;return a.createElement("div",{id:this.props.id,style:{position:"relative",...this.props.style},className:s.classNames("k-treeview",{[`k-treeview-${y[e]||e}`]:e,"k-user-select-none":this.props.draggable,"k-rtl":"rtl"===this.props.dir},t),onKeyDown:this.onKeyDown,onFocus:this.onFocus,onBlur:this.onBlur,role:"tree","aria-multiselectable":!!this.ariaMultiSelectable||void 0,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],ref:e=>{this._element=e},tabIndex:this.props.tabIndex},a.createElement("ul",{className:"k-treeview-lines k-treeview-group",role:"group"},this.data.map(((t,i)=>a.createElement(E,{id:this.props.id+"-item-"+i,item:t,position:h(i,this.data),itemId:i.toString(),treeGuid:this.treeGuid,animate:this.props.animate,focusedItemId:this.state.focusedItemId,tabbableItemId:this.state.tabbableItemId,fieldsService:this.fieldsSvc,itemUI:this.props.item,checkboxes:this.props.checkboxes,ariaMultiSelectable:this.ariaMultiSelectable,onItemClick:this.onItemClick,onFocusDomElNeeded:this.onFocusDomElNeeded,draggable:this.props.draggable,onPress:this.onPress,onDrag:this.onDrag,onRelease:this.onRelease,expandIcons:this.props.expandIcons,iconField:this.props.iconField,onExpandChange:this.onExpandChange,onCheckChange:this.onCheckChange,onContextMenu:this.onContextMenu,key:i,size:e,isRtl:"rtl"===this.props.dir})))),this.showLicenseWatermark&&a.createElement(s.WatermarkOverlay,{message:this.licenseMessage}))}componentDidUpdate(){this.allowExplicitFocus=!1,this.refocusDueToFocusIdField()}dispatchEventsOnKeyDown(e,t){if(null===this.fieldsSvc)return;const i=()=>this.fieldsSvc&&s.isEnabledAndAllParentsEnabled(this.state.focusedItemId,this.data,this.fieldsSvc);e.keyCode===s.Keys.left&&this.fieldsSvc.expanded(t)&&i()||e.keyCode===s.Keys.right&&!this.fieldsSvc.expanded(t)&&(this.fieldsSvc.hasChildren(t)||s.hasChildren(t,this.props.childrenField))&&i()?this.dispatchExpandChange(e,t,this.state.focusedItemId):e.keyCode===s.Keys.enter&&i()?this.dispatchItemClick(e,t,this.state.focusedItemId):e.keyCode===s.Keys.space&&i()&&(e.preventDefault(),this.dispatchCheckChange(e,t,this.state.focusedItemId))}setFocus(e){if(e&&this.fieldsSvc)if(this.fieldsSvc.focusIdField){const t=this.getItemById(e);this.setState({focusedItemId:e,focusedItemPublicId:this.fieldsSvc.focusId(t)})}else this.setState({focusedItemId:e});else this.setState((e=>({focusedItemId:void 0,focusedItemPublicId:void 0,tabbableItemId:e.focusedItemId})))}getFocusedItem(){return this.state.focusedItemId?this.getItemById(this.state.focusedItemId):void 0}getItemById(e){return s.treeIdUtils.getItemById(e,this.data,this.props.childrenField||m)}dispatchCheckChange(e,t,i){s.dispatchEvent(this.props.onCheckChange,e,this,{item:t,itemHierarchicalIndex:i})}dispatchExpandChange(e,t,i){s.dispatchEvent(this.props.onExpandChange,e,this,{item:t,itemHierarchicalIndex:i})}dispatchItemClick(e,t,i){s.dispatchEvent(this.props.onItemClick,e,this,{item:t,itemHierarchicalIndex:i})}refocusDueToFocusIdField(){if(this.fieldsSvc&&this.fieldsSvc.focusIdField){const e=this.state.focusedItemPublicId;if(e){const t=this.props.getFocusHierarchicalIndex?this.props.getFocusHierarchicalIndex(e):s.resolveItemId(e,this.fieldsSvc.focusIdField,this.data,this.props.childrenField);t!==this.state.focusedItemId&&(this.allowExplicitFocus=!0,this.setState({focusedItemId:t}))}}}get ariaMultiSelectable(){return!0===this.props["aria-multiselectable"]||"true"===this.props["aria-multiselectable"]}get data(){return this.props.data||[]}focusDomItem(e){e.focus()}get guid(){return this.treeGuid}};D.propTypes={data:i.arrayOf(i.any),animate:i.bool,tabIndex:i.number,focusIdField:i.string,getHierarchicalIndexById:i.func,onExpandChange:i.func,onItemClick:i.func,expandField:i.string,selectField:i.string,iconField:i.string,childrenField:i.string,hasChildrenField:i.string,textField:i.string,disableField:i.string,item:i.any,"aria-multiselectable":(e,t,i)=>void 0!==e[t]&&!0!==e[t]&&!1!==e[t]&&"true"!==e[t]&&"false"!==e[t]?new Error("Invalid prop `"+t+"` supplied to `"+i+"`. Validation failed."):null,"aria-label":i.string,"aria-labelledby":i.string,size:i.oneOf([null,"small","medium","large"]),dir:i.string},D.defaultProps={animate:!0,expandField:p,selectField:u,iconField:"svgIcon",hasChildrenField:"hasChildren",childrenField:m,textField:"text",disableField:"disabled",checkField:I,checkIndeterminateField:g,size:"medium"};let S=D;function w(e,t,i,n,r){if(i){const{ids:d,field:a}=N(i,t);return function(e,t,i,n,r){let d=e;return t.forEach((e=>{d=s.updateItem(d,e,(e=>P(i,e)),n,r)})),d}(e,!s.isArray(i)&&i.idField?s.resolveItemsIds(d,i.idField,e,r):d,a,n,r)}return e}function N(e,t){let i,n;return s.isArray(e)?(i=e,n=t):(i=e.ids||[],n=e.operationField||t),{ids:i,field:n}}function P(e,t){const i=(e||"").split(".");let s=t;for(let e=0;e<i.length;e++){const t=i[e];if(e===i.length-1)s[t]=!0;else{if(void 0===s[t])return;s[t]={...s[t]},s=s[t]}}}function U(e,t,i,n,r){let d=!1;for(let a=0;a<e.length;a++){const o=e[a];if(s.getNestedValue(n,o)){if(!d)for(let e=0;e<t.length;e++)P(r,t[e]);d=!0,o[i]&&U(o[i],[],i,n,r)}else o[i]&&U(o[i],d?[o]:t.concat([o]),i,n,r)}}const M=class extends a.PureComponent{constructor(){super(...arguments),this.state={visible:!1,top:0,left:0,text:"",operationClassName:"cancel"}}render(){const e={top:this.state.top+"px",left:this.state.left+"px"};return this.state.visible&&a.createElement("div",{className:"k-header k-drag-clue",style:{...this.props.style,...e}},a.createElement(s.IconWrap,{className:s.classNames("k-drag-status"),name:this.state.operationClassName&&s.toIconName(this.state.operationClassName),icon:"k-i-plus"===this.state.operationClassName?n.plusIcon:"k-i-insert-up"===this.state.operationClassName?n.insertTopIcon:"k-i-insert-down"===this.state.operationClassName?n.insertBottomIcon:"k-i-insert-middle"===this.state.operationClassName?n.insertMiddleIcon:n.cancelIcon}),this.state.text)}show(e,t,i,s){this.setState({visible:!0,top:e,left:t,text:i,operationClassName:s})}hide(){this.setState({visible:!1})}};M.defaultProps={style:{display:"block",position:"absolute",zIndex:2e4,padding:"4px 6px"}};let R=M;const O=s.withIdHOC(S);O.displayName="KendoReactTreeView",Object.defineProperty(e,"FieldsService",{enumerable:!0,get:function(){return s.TreeFieldsService}}),e.TreeView=O,e.TreeViewClassComponent=S,e.TreeViewDragAnalyzer=class{constructor(e){this.event=e,this.initialized=!1,this.destItemId="",this.destTreeViewGuid="",this.itemId=e.itemHierarchicalIndex,this.treeViewGuid=e.target.guid}init(){return this.initialized||(this.setDestimationMeta(document.elementFromPoint(this.event.clientX,this.event.clientY)),this.initialized=!0),this}get isDropAllowed(){return!!(this.initialized&&this.destItemId&&this.destTreeViewGuid)&&!`${this.destTreeViewGuid}_${this.destItemId}_`.startsWith(`${this.treeViewGuid}_${this.itemId}_`)}get destinationMeta(){return{itemHierarchicalIndex:this.destItemId,treeViewGuid:this.destTreeViewGuid}}getDropOperation(){if(this.initialized&&this.isDropAllowed){const{top:e,height:t}=this.destDomNodeWithMeta.getBoundingClientRect();return e+t-this.event.clientY<6?"after":this.event.clientY-e<6?"before":"child"}}setDestimationMeta(e){let t=e;for(;t&&!t[f];)t=t.parentNode;t&&t[f]&&(this.destDomNodeWithMeta=t,this.destItemId=t[f],this.destTreeViewGuid=t[b])}},e.TreeViewDragClue=R,e.TreeViewItemPropsContext=C,e.getItemIdUponKeyboardNavigation=o,e.handleTreeViewCheckChange=function(e,t,i,n={},r){if(!i||!i.length)return[];const{ids:d,idField:a}=function(e){let t,i;return s.isArray(e)?t=e:(t=e.ids||[],i=e.idField),{ids:t,idField:i}}(t),o=a?s.getNestedValue(a,e.item):e.itemHierarchicalIndex,l=d.indexOf(o),c=-1===l,h=r||m;let p;return n.singleMode?p=c?[o]:[]:(p=d.slice(),c?p.push(o):p.splice(l,1),n.checkChildren&&function(e,t,i,n,r,d){s.getAllDirectIndirectChildrenIds(e,t,r,n).forEach((e=>{i&&-1===d.indexOf(e)?d.push(e):!i&&d.indexOf(e)>-1&&d.splice(d.indexOf(e),1)}))}(e.item,e.itemHierarchicalIndex,c,a,h,p),n.checkParents&&function(e,t,i,n,r,d){const a=h();let o=a.next();function l(){for(;!o.done;){const{id:e,item:t}=o.value;if(-1!==r.indexOf(e)||!s.areAllDirectChildrenChecked(t,e,i,n,r))break;r.push(e),o=a.next()}}function c(){for(;!o.done;){const{id:e}=o.value,t=r.indexOf(e);if(!(t>-1))break;r.splice(t,1),o=a.next()}}function*h(){if(i){const r=s.getAllParents(e,n,d);for(let e=r.length-1;e>-1;e--)yield{id:s.getNestedValue(i,r[e]),item:t?r[e]:void 0}}else{let i=s.treeIdUtils.getDirectParentId(e);for(;i;)yield{id:i,item:t?s.treeIdUtils.getItemById(i,d,n):void 0},i=s.treeIdUtils.getDirectParentId(i)}}t?l():c()}(e.itemHierarchicalIndex,c,a,h,p,i)),s.isArray(t)?p:Object.assign({},t,{ids:p})},e.moveTreeViewItem=function(e,t,i,n,r,d){const a=d||m;if(!function(){if(!t||!t.length||!e||!n||r&&!r.length)return!1;const i=r&&r!==t?r:t;return!!s.treeIdUtils.getItemById(n,i,a)}())return l();const o=s.treeIdUtils.getItemById(e,t,a);if(!o)return l();if(!r||r===t){if(`${n}_`.startsWith(`${e}_`))return l();const d=s.removeItem(e,a,t),c=s.addItem(o,i,a,s.treeIdUtils.getDecrementedItemIdAfterRemoval(e,n),d);return r?{sourceData:c,targetData:c}:c}return{sourceData:s.removeItem(e,a,t),targetData:s.addItem(o,i,a,n,r)};function l(){return r?{sourceData:t,targetData:r}:t}},e.processTreeViewItems=function(e,t){if(!e||!e.length)return[];let i=e;const n=t.cloneField||"cloned",r=t.expandField||p,d=t.selectField||u,a=t.checkField||I,o=t.childrenField||m;return i=w(i,r,t.expand,n,o),i=w(i,d,t.select,n,o),i=w(i,a,t.check,n,o),function(e,t,i){if(i&&!s.isArray(i)&&i.applyCheckIndeterminate){const{field:n}=N(i,I),r=i.checkIndeterminateField||g;for(let i=0;i<e.length;i++){const d=e[i],a=d[t];a&&U(a,s.getNestedValue(n,d)?[]:[d],t,n,r)}}}(i,o,t.check),i}}));
|
|
15
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("prop-types"),require("@progress/kendo-react-common"),require("@progress/kendo-svg-icons"),require("@progress/kendo-react-animation")):"function"==typeof define&&define.amd?define(["exports","react","prop-types","@progress/kendo-react-common","@progress/kendo-svg-icons","@progress/kendo-react-animation"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).KendoReactTreeview={},e.React,e.PropTypes,e.KendoReactCommon,e.KendoSvgIcons,e.KendoReactAnimation)}(this,(function(e,t,i,s,n,r){"use strict";function d(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(i){if("default"!==i){var s=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,s.get?s:{enumerable:!0,get:function(){return e[i]}})}})),t.default=e,Object.freeze(t)}var a=d(t);function o(e,t,i,n,r){switch(n){case s.Keys.left:return s.treeIdUtils.isIdZeroLevel(t)||r.expanded(e)&&s.isEnabledAndAllParentsEnabled(t,i,r)?t:s.treeIdUtils.getDirectParentId(t);case s.Keys.right:return s.isItemExpandedAndWithChildren(e,r)?s.treeIdUtils.getFirstChildId(t):t;case s.Keys.up:return function(){const e=Number(s.treeIdUtils.getShortId(t)),n=s.treeIdUtils.getDirectParentId(t);return e?c(s.treeIdUtils.createId(e-1,n),i,r):s.treeIdUtils.isIdZeroLevel(t)?t:n}();case s.Keys.down:return s.isItemExpandedAndWithChildren(e,r)?s.treeIdUtils.getFirstChildId(t):l(t,i,r)||t;case s.Keys.home:return s.treeIdUtils.ZERO_LEVEL_ZERO_NODE_ID;case s.Keys.end:return function(){let e,t=(i.length-1).toString(),n=i[i.length-1];for(;s.isItemExpandedAndWithChildren(n,r);)e=n[r.getChildrenField()],t=s.treeIdUtils.createId(e.length-1,t),n=e[e.length-1];return t}();default:return t}}function l(e,t,i){const n=s.treeIdUtils.getDirectParentId(e),r=n?s.treeIdUtils.getItemById(n,t,i.getChildrenField()):void 0,d=r?r[i.getChildrenField()]:t,a=Number(s.treeIdUtils.getShortId(e));return a<d.length-1?s.treeIdUtils.createId(a+1,n):r?l(n,t,i):void 0}function c(e,t,i){const n=s.treeIdUtils.getItemById(e,t,i.getChildrenField());return s.isItemExpandedAndWithChildren(n,i)?c(s.treeIdUtils.createId(n[i.getChildrenField()].length-1,e),t,i):e}const h=(e,t)=>{const i=((e,t)=>e===t.length-1)(e,t);return 0!==e||i?i?"bot":"mid":"top"},p="expanded",m="items",u="selected",I="checked",g="checkIndeterminate",f="_kendoItemId",b="_kendoTreeViewGuid",{sizeMap:v}=s.kendoThemeMaps,C=a.createContext((e=>e)),x=class extends a.Component{constructor(){super(...arguments),this.onCheckChange=e=>{this.props.onCheckChange(e,this.item,this.itemId)},this.onExpandChange=e=>{this.props.onExpandChange(e,this.item,this.itemId)},this.onItemClick=e=>{this.props.onItemClick(e,this.item,this.itemId)},this.onPress=e=>{this.props.onPress(e.event,this.item,this.itemId)},this.onDrag=e=>{this.props.onDrag(e.event,this.item,this.itemId)},this.onRelease=e=>{this.props.onRelease(e.event,this.item,this.itemId)},this.onContextMenu=e=>{this.props.onContextMenu(e,this.item,this.itemId)},this.assignDraggableMeta=e=>{e&&(e[f]=this.props.itemId,e[b]=this.props.treeGuid)}}render(){const e=this.renderSubitemsIfApplicable(),t=this.renderItemInPart();return a.createElement("li",{className:s.classNames("k-treeview-item"),tabIndex:this.tabIndex,role:"treeitem","aria-expanded":this.ariaExpanded,"aria-selected":this.ariaSelected,"aria-checked":this.ariaChecked,"aria-disabled":!!this.disabled||void 0,ref:e=>{this.itemElement=e}},a.createElement("span",{className:`k-treeview-${this.props.position}`,ref:this.assignDraggableMeta},this.renderExpandIcon(),this.renderCheckbox(),this.props.draggable?a.createElement(s.Draggable,{onPress:this.onPress,onDrag:this.onDrag,onRelease:this.onRelease},t):t),e&&(this.props.animate?a.createElement(r.Reveal,{transitionEnterDuration:200,transitionExitDuration:200,style:{display:"block"},children:e}):e))}componentDidMount(){const e=this.props.focusedItemId,t=this.itemId;e&&e===t&&this.props.onFocusDomElNeeded(this.itemElement),this.checkboxElement&&(this.checkboxElement.indeterminate=this.fieldsSvc.checkIndeterminate(this.item))}componentDidUpdate(e){const t=this.props.focusedItemId;if(t&&t!==e.focusedItemId&&t===this.itemId&&this.props.onFocusDomElNeeded(this.itemElement),this.checkboxElement){const e=this.fieldsSvc.checkIndeterminate(this.item);this.checkboxElement.indeterminate!==e&&(this.checkboxElement.indeterminate=e)}}renderCheckbox(){if(this.props.checkboxes){const e=this.props.size;return a.createElement("span",{className:s.classNames("k-checkbox-wrap")},a.createElement("input",{type:"checkbox",className:s.classNames("k-checkbox k-rounded-md",{[`k-checkbox-${v[e]||e}`]:e,"k-disabled":this.disabled}),"aria-label":this.item.text,checked:!!this.fieldsSvc.checked(this.item),id:this.props.id,tabIndex:-1,onChange:this.onCheckChange,ref:e=>{this.checkboxElement=e}}))}}renderExpandIcon(){return this.props.expandIcons&&(this.fieldsSvc.hasChildren(this.item)||s.hasChildren(this.item,this.fieldsSvc.getChildrenField()))&&a.createElement("span",{className:s.classNames("k-treeview-toggle",{"k-disabled":this.disabled}),onClick:this.onExpandChange},a.createElement(s.IconWrap,{...this.getIconProps()}))}renderSubitemsIfApplicable(){const e=this.fieldsSvc.children(this.item);return s.isItemExpandedAndWithChildren(this.item,this.fieldsSvc)?a.createElement("ul",{className:"k-treeview-group",role:"group"},e.map(((t,i)=>a.createElement(E,{item:t,position:h(i,e),itemId:s.treeIdUtils.createId(i,this.itemId),treeGuid:this.props.treeGuid,animate:this.props.animate,focusedItemId:this.props.focusedItemId,tabbableItemId:this.props.tabbableItemId,fieldsService:this.props.fieldsService,itemUI:this.props.itemUI,checkboxes:this.props.checkboxes,ariaMultiSelectable:this.props.ariaMultiSelectable,onItemClick:this.props.onItemClick,onFocusDomElNeeded:this.props.onFocusDomElNeeded,draggable:this.props.draggable,onPress:this.props.onPress,onDrag:this.props.onDrag,onRelease:this.props.onRelease,expandIcons:this.props.expandIcons,iconField:this.props.iconField,onExpandChange:this.props.onExpandChange,onCheckChange:this.props.onCheckChange,onContextMenu:this.props.onContextMenu,key:i,size:this.props.size,disabled:this.disabled,isRtl:this.props.isRtl})))):void 0}renderItemInPart(){const e=this.props.iconField,t=e&&this.item[e];return a.createElement("span",{className:s.classNames("k-treeview-leaf",{"k-focus":this.props.focusedItemId===this.itemId,"k-selected":this.fieldsSvc.selected(this.item),"k-disabled":this.disabled,"k-touch-action-none":this.props.draggable}),onClick:this.onItemClick,onContextMenu:this.onContextMenu},t&&a.createElement(s.IconWrap,{name:t.name,icon:t}),a.createElement("span",{className:"k-treeview-leaf-text"},this.props.itemUI?a.createElement(this.props.itemUI,{item:this.item,itemHierarchicalIndex:this.itemId}):this.fieldsSvc.text(this.item)))}get fieldsSvc(){return this.props.fieldsService}get itemId(){return this.props.itemId}get item(){return this.props.item}get tabIndex(){return(this.props.focusedItemId||this.props.tabbableItemId)===this.itemId?0:-1}get ariaExpanded(){return this.fieldsSvc.hasChildren(this.item)||s.hasChildren(this.item,this.fieldsSvc.getChildrenField())?!!this.fieldsSvc.expanded(this.item):void 0}get disabled(){return this.props.disabled||this.fieldsSvc.disabled(this.item)}get ariaChecked(){if(this.props.checkboxes)return this.fieldsSvc.checked(this.item)?"true":this.fieldsSvc.checkIndeterminate(this.item)?"mixed":"false"}get ariaSelected(){return!!this.fieldsSvc.selected(this.item)||(this.props.ariaMultiSelectable?!!this.disabled&&void 0:void 0)}getIconProps(){const e=this.fieldsSvc.expanded(this.item);return e&&!s.hasChildren(this.item,this.fieldsSvc.getChildrenField())?{name:"loading"}:e?{name:"caret-alt-down",icon:n.caretAltDownIcon}:{name:this.props.isRtl?"caret-alt-left":"caret-alt-right",icon:this.props.isRtl?n.caretAltLeftIcon:n.caretAltRightIcon}}};x.defaultProps={position:"top",iconField:"svgIcon"};let k=x;const E=s.withIdHOC(a.forwardRef(((e,t)=>{const i=a.useContext(C).call(void 0,e);return a.createElement(k,{ref:t,...i})})));E.displayName="TreeViewItem";const F=Object.freeze({name:"@progress/kendo-react-treeview",productName:"KendoReact",productCode:"KENDOUIREACT",productCodes:["KENDOUIREACT"],publishDate:0,version:"12.0.0-develop.11",licensingDocsUrl:"https://www.telerik.com/kendo-react-ui/components/my-license/"}),{sizeMap:y}=s.kendoThemeMaps,D=class extends a.Component{constructor(e){super(e),this.state={focusedItemId:void 0,focusedItemPublicId:void 0,tabbableItemId:s.treeIdUtils.ZERO_LEVEL_ZERO_NODE_ID},this.fieldsSvc=null,this.allowExplicitFocus=!1,this.showLicenseWatermark=!1,this._element=null,this.onFocusDomElNeeded=e=>{this.allowExplicitFocus&&this.focusDomItem(e)},this.onCheckChange=(e,t,i)=>{this.setFocus(i),this.dispatchCheckChange(e,t,i)},this.onExpandChange=(e,t,i)=>{this.setFocus(i),this.dispatchExpandChange(e,t,i)},this.onPress=(e,t,i)=>{this.props.onItemDragStart&&this.props.onItemDragStart.call(void 0,{target:this,item:t,itemHierarchicalIndex:i})},this.onDrag=(e,t,i)=>{const{pageX:s,pageY:n,clientX:r,clientY:d}=e;this.props.onItemDragOver&&this.props.onItemDragOver.call(void 0,{target:this,item:t,itemHierarchicalIndex:i,pageX:s,pageY:n,clientX:r,clientY:d})},this.onRelease=(e,t,i)=>{const{pageX:s,pageY:n,clientX:r,clientY:d}=e;this.props.onItemDragEnd&&this.props.onItemDragEnd.call(void 0,{target:this,item:t,itemHierarchicalIndex:i,pageX:s,pageY:n,clientX:r,clientY:d})},this.onItemClick=(e,t,i)=>{this.setFocus(i),this.dispatchItemClick(e,t,i)},this.onFocus=()=>{clearTimeout(this.blurRequest),void 0===this.state.focusedItemId&&this.data.length&&this.setFocus(this.state.tabbableItemId)},this.onBlur=()=>{clearTimeout(this.blurRequest),this.blurRequest=window.setTimeout((()=>this.setFocus(void 0)),0)},this.onKeyDown=e=>{const t=this.getFocusedItem();if(t&&this.fieldsSvc){const i=o(t,this.state.focusedItemId,this.data,e.keyCode,this.fieldsSvc);i!==this.state.focusedItemId&&(e.preventDefault(),this.allowExplicitFocus=!0,this.setFocus(i)),this.dispatchEventsOnKeyDown(e,t)}},this.onContextMenu=(e,t,i)=>{if(this.props.onContextMenu){const s={target:this,syntheticEvent:e,nativeEvent:e.nativeEvent,item:t,itemID:i};this.props.onContextMenu.call(void 0,s)}},this.showLicenseWatermark=!s.validatePackage(F,{component:"TreeView"}),this.licenseMessage=s.getLicenseMessage(F)}get treeGuid(){return this.props.id+"-accessibility-id"}get element(){return this._element}render(){this.fieldsSvc=new s.TreeFieldsService(this.props);const{size:e,className:t}=this.props;return a.createElement("div",{id:this.props.id,style:{position:"relative",...this.props.style},className:s.classNames("k-treeview",{[`k-treeview-${y[e]||e}`]:e,"k-user-select-none":this.props.draggable,"k-rtl":"rtl"===this.props.dir},t),onKeyDown:this.onKeyDown,onFocus:this.onFocus,onBlur:this.onBlur,role:"tree","aria-multiselectable":!!this.ariaMultiSelectable||void 0,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],ref:e=>{this._element=e},tabIndex:this.props.tabIndex},a.createElement("ul",{className:"k-treeview-lines k-treeview-group",role:"group"},this.data.map(((t,i)=>a.createElement(E,{id:this.props.id+"-item-"+i,item:t,position:h(i,this.data),itemId:i.toString(),treeGuid:this.treeGuid,animate:this.props.animate,focusedItemId:this.state.focusedItemId,tabbableItemId:this.state.tabbableItemId,fieldsService:this.fieldsSvc,itemUI:this.props.item,checkboxes:this.props.checkboxes,ariaMultiSelectable:this.ariaMultiSelectable,onItemClick:this.onItemClick,onFocusDomElNeeded:this.onFocusDomElNeeded,draggable:this.props.draggable,onPress:this.onPress,onDrag:this.onDrag,onRelease:this.onRelease,expandIcons:this.props.expandIcons,iconField:this.props.iconField,onExpandChange:this.onExpandChange,onCheckChange:this.onCheckChange,onContextMenu:this.onContextMenu,key:i,size:e,isRtl:"rtl"===this.props.dir})))),this.showLicenseWatermark&&a.createElement(s.WatermarkOverlay,{message:this.licenseMessage}))}componentDidUpdate(){this.allowExplicitFocus=!1,this.refocusDueToFocusIdField()}dispatchEventsOnKeyDown(e,t){if(null===this.fieldsSvc)return;const i=()=>this.fieldsSvc&&s.isEnabledAndAllParentsEnabled(this.state.focusedItemId,this.data,this.fieldsSvc);e.keyCode===s.Keys.left&&this.fieldsSvc.expanded(t)&&i()||e.keyCode===s.Keys.right&&!this.fieldsSvc.expanded(t)&&(this.fieldsSvc.hasChildren(t)||s.hasChildren(t,this.props.childrenField))&&i()?this.dispatchExpandChange(e,t,this.state.focusedItemId):e.keyCode===s.Keys.enter&&i()?this.dispatchItemClick(e,t,this.state.focusedItemId):e.keyCode===s.Keys.space&&i()&&(e.preventDefault(),this.dispatchCheckChange(e,t,this.state.focusedItemId))}setFocus(e){if(e&&this.fieldsSvc)if(this.fieldsSvc.focusIdField){const t=this.getItemById(e);this.setState({focusedItemId:e,focusedItemPublicId:this.fieldsSvc.focusId(t)})}else this.setState({focusedItemId:e});else this.setState((e=>({focusedItemId:void 0,focusedItemPublicId:void 0,tabbableItemId:e.focusedItemId})))}getFocusedItem(){return this.state.focusedItemId?this.getItemById(this.state.focusedItemId):void 0}getItemById(e){return s.treeIdUtils.getItemById(e,this.data,this.props.childrenField||m)}dispatchCheckChange(e,t,i){s.dispatchEvent(this.props.onCheckChange,e,this,{item:t,itemHierarchicalIndex:i})}dispatchExpandChange(e,t,i){s.dispatchEvent(this.props.onExpandChange,e,this,{item:t,itemHierarchicalIndex:i})}dispatchItemClick(e,t,i){s.dispatchEvent(this.props.onItemClick,e,this,{item:t,itemHierarchicalIndex:i})}refocusDueToFocusIdField(){if(this.fieldsSvc&&this.fieldsSvc.focusIdField){const e=this.state.focusedItemPublicId;if(e){const t=this.props.getFocusHierarchicalIndex?this.props.getFocusHierarchicalIndex(e):s.resolveItemId(e,this.fieldsSvc.focusIdField,this.data,this.props.childrenField);t!==this.state.focusedItemId&&(this.allowExplicitFocus=!0,this.setState({focusedItemId:t}))}}}get ariaMultiSelectable(){return!0===this.props["aria-multiselectable"]||"true"===this.props["aria-multiselectable"]}get data(){return this.props.data||[]}focusDomItem(e){e.focus()}get guid(){return this.treeGuid}};D.propTypes={data:i.arrayOf(i.any),animate:i.bool,tabIndex:i.number,focusIdField:i.string,getHierarchicalIndexById:i.func,onExpandChange:i.func,onItemClick:i.func,expandField:i.string,selectField:i.string,iconField:i.string,childrenField:i.string,hasChildrenField:i.string,textField:i.string,disableField:i.string,item:i.any,"aria-multiselectable":(e,t,i)=>void 0!==e[t]&&!0!==e[t]&&!1!==e[t]&&"true"!==e[t]&&"false"!==e[t]?new Error("Invalid prop `"+t+"` supplied to `"+i+"`. Validation failed."):null,"aria-label":i.string,"aria-labelledby":i.string,size:i.oneOf([null,"small","medium","large"]),dir:i.string},D.defaultProps={animate:!0,expandField:p,selectField:u,iconField:"svgIcon",hasChildrenField:"hasChildren",childrenField:m,textField:"text",disableField:"disabled",checkField:I,checkIndeterminateField:g,size:"medium"};let S=D;function w(e,t,i,n,r){if(i){const{ids:d,field:a}=N(i,t);return function(e,t,i,n,r){let d=e;return t.forEach((e=>{d=s.updateItem(d,e,(e=>P(i,e)),n,r)})),d}(e,!s.isArray(i)&&i.idField?s.resolveItemsIds(d,i.idField,e,r):d,a,n,r)}return e}function N(e,t){let i,n;return s.isArray(e)?(i=e,n=t):(i=e.ids||[],n=e.operationField||t),{ids:i,field:n}}function P(e,t){const i=(e||"").split(".");let s=t;for(let e=0;e<i.length;e++){const t=i[e];if(e===i.length-1)s[t]=!0;else{if(void 0===s[t])return;s[t]={...s[t]},s=s[t]}}}function U(e,t,i,n,r){let d=!1;for(let a=0;a<e.length;a++){const o=e[a];if(s.getNestedValue(n,o)){if(!d)for(let e=0;e<t.length;e++)P(r,t[e]);d=!0,o[i]&&U(o[i],[],i,n,r)}else o[i]&&U(o[i],d?[o]:t.concat([o]),i,n,r)}}const M=class extends a.PureComponent{constructor(){super(...arguments),this.state={visible:!1,top:0,left:0,text:"",operationClassName:"cancel"}}render(){const e={top:this.state.top+"px",left:this.state.left+"px"};return this.state.visible&&a.createElement("div",{className:"k-header k-drag-clue",style:{...this.props.style,...e}},a.createElement(s.IconWrap,{className:s.classNames("k-drag-status"),name:this.state.operationClassName&&s.toIconName(this.state.operationClassName),icon:"k-i-plus"===this.state.operationClassName?n.plusIcon:"k-i-insert-up"===this.state.operationClassName?n.insertTopIcon:"k-i-insert-down"===this.state.operationClassName?n.insertBottomIcon:"k-i-insert-middle"===this.state.operationClassName?n.insertMiddleIcon:n.cancelIcon}),this.state.text)}show(e,t,i,s){this.setState({visible:!0,top:e,left:t,text:i,operationClassName:s})}hide(){this.setState({visible:!1})}};M.defaultProps={style:{display:"block",position:"absolute",zIndex:2e4,padding:"4px 6px"}};let R=M;const O=s.withIdHOC(S);O.displayName="KendoReactTreeView",Object.defineProperty(e,"FieldsService",{enumerable:!0,get:function(){return s.TreeFieldsService}}),e.TreeView=O,e.TreeViewClassComponent=S,e.TreeViewDragAnalyzer=class{constructor(e){this.event=e,this.initialized=!1,this.destItemId="",this.destTreeViewGuid="",this.itemId=e.itemHierarchicalIndex,this.treeViewGuid=e.target.guid}init(){return this.initialized||(this.setDestimationMeta(document.elementFromPoint(this.event.clientX,this.event.clientY)),this.initialized=!0),this}get isDropAllowed(){return!!(this.initialized&&this.destItemId&&this.destTreeViewGuid)&&!`${this.destTreeViewGuid}_${this.destItemId}_`.startsWith(`${this.treeViewGuid}_${this.itemId}_`)}get destinationMeta(){return{itemHierarchicalIndex:this.destItemId,treeViewGuid:this.destTreeViewGuid}}getDropOperation(){if(this.initialized&&this.isDropAllowed){const{top:e,height:t}=this.destDomNodeWithMeta.getBoundingClientRect();return e+t-this.event.clientY<6?"after":this.event.clientY-e<6?"before":"child"}}setDestimationMeta(e){let t=e;for(;t&&!t[f];)t=t.parentNode;t&&t[f]&&(this.destDomNodeWithMeta=t,this.destItemId=t[f],this.destTreeViewGuid=t[b])}},e.TreeViewDragClue=R,e.TreeViewItemPropsContext=C,e.getItemIdUponKeyboardNavigation=o,e.handleTreeViewCheckChange=function(e,t,i,n={},r){if(!i||!i.length)return[];const{ids:d,idField:a}=function(e){let t,i;return s.isArray(e)?t=e:(t=e.ids||[],i=e.idField),{ids:t,idField:i}}(t),o=a?s.getNestedValue(a,e.item):e.itemHierarchicalIndex,l=d.indexOf(o),c=-1===l,h=r||m;let p;return n.singleMode?p=c?[o]:[]:(p=d.slice(),c?p.push(o):p.splice(l,1),n.checkChildren&&function(e,t,i,n,r,d){s.getAllDirectIndirectChildrenIds(e,t,r,n).forEach((e=>{i&&-1===d.indexOf(e)?d.push(e):!i&&d.indexOf(e)>-1&&d.splice(d.indexOf(e),1)}))}(e.item,e.itemHierarchicalIndex,c,a,h,p),n.checkParents&&function(e,t,i,n,r,d){const a=h();let o=a.next();function l(){for(;!o.done;){const{id:e,item:t}=o.value;if(-1!==r.indexOf(e)||!s.areAllDirectChildrenChecked(t,e,i,n,r))break;r.push(e),o=a.next()}}function c(){for(;!o.done;){const{id:e}=o.value,t=r.indexOf(e);if(!(t>-1))break;r.splice(t,1),o=a.next()}}function*h(){if(i){const r=s.getAllParents(e,n,d);for(let e=r.length-1;e>-1;e--)yield{id:s.getNestedValue(i,r[e]),item:t?r[e]:void 0}}else{let i=s.treeIdUtils.getDirectParentId(e);for(;i;)yield{id:i,item:t?s.treeIdUtils.getItemById(i,d,n):void 0},i=s.treeIdUtils.getDirectParentId(i)}}t?l():c()}(e.itemHierarchicalIndex,c,a,h,p,i)),s.isArray(t)?p:Object.assign({},t,{ids:p})},e.moveTreeViewItem=function(e,t,i,n,r,d){const a=d||m;if(!function(){if(!t||!t.length||!e||!n||r&&!r.length)return!1;const i=r&&r!==t?r:t;return!!s.treeIdUtils.getItemById(n,i,a)}())return l();const o=s.treeIdUtils.getItemById(e,t,a);if(!o)return l();if(!r||r===t){if(`${n}_`.startsWith(`${e}_`))return l();const d=s.removeItem(e,a,t),c=s.addItem(o,i,a,s.treeIdUtils.getDecrementedItemIdAfterRemoval(e,n),d);return r?{sourceData:c,targetData:c}:c}return{sourceData:s.removeItem(e,a,t),targetData:s.addItem(o,i,a,n,r)};function l(){return r?{sourceData:t,targetData:r}:t}},e.processTreeViewItems=function(e,t){if(!e||!e.length)return[];let i=e;const n=t.cloneField||"cloned",r=t.expandField||p,d=t.selectField||u,a=t.checkField||I,o=t.childrenField||m;return i=w(i,r,t.expand,n,o),i=w(i,d,t.select,n,o),i=w(i,a,t.check,n,o),function(e,t,i){if(i&&!s.isArray(i)&&i.applyCheckIndeterminate){const{field:n}=N(i,I),r=i.checkIndeterminateField||g;for(let i=0;i<e.length;i++){const d=e[i],a=d[t];a&&U(a,s.getNestedValue(n,d)?[]:[d],t,n,r)}}}(i,o,t.check),i}}));
|
package/index.d.mts
CHANGED
|
@@ -47,27 +47,28 @@ export declare function getItemIdUponKeyboardNavigation(item: any, itemId: strin
|
|
|
47
47
|
*
|
|
48
48
|
* @example
|
|
49
49
|
* ```jsx
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
50
|
+
* const App = () => {
|
|
51
|
+
* const [check, setCheck] = React.useState([]);
|
|
52
|
+
* const [items] = React.useState(tree);
|
|
53
|
+
*
|
|
54
|
+
* const onCheckChange = (event) => {
|
|
55
|
+
* setCheck(handleTreeViewCheckChange(event, check, items));
|
|
56
|
+
* }
|
|
57
|
+
*
|
|
58
|
+
* return (
|
|
59
|
+
* <div>
|
|
60
|
+
* <TreeView
|
|
61
|
+
* checkboxes={true} onCheckChange={onCheckChange}
|
|
62
|
+
* data={processTreeViewItems(items, { check })}
|
|
63
|
+
* />
|
|
64
|
+
* <div style={{ marginTop: 5 }}>
|
|
65
|
+
* <i>Press SPACE to check/uncheck the active item</i>
|
|
66
|
+
* <div className="example-config">
|
|
67
|
+
* Checked Indices: {check.join(",")}
|
|
64
68
|
* </div>
|
|
65
69
|
* </div>
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* onCheckChange = (event) => {
|
|
69
|
-
* this.setState({ check: handleTreeViewCheckChange(event, this.state.check, this.state.items) });
|
|
70
|
-
* }
|
|
70
|
+
* </div>
|
|
71
|
+
* );
|
|
71
72
|
* }
|
|
72
73
|
*
|
|
73
74
|
* const tree = [ {
|
|
@@ -77,8 +78,6 @@ export declare function getItemIdUponKeyboardNavigation(item: any, itemId: strin
|
|
|
77
78
|
* text: 'Decor', expanded: true, items: [
|
|
78
79
|
* { text: 'Bed Linen' }, { text: 'Curtains & Blinds' }, { text: 'Carpets' } ]
|
|
79
80
|
* } ];
|
|
80
|
-
*
|
|
81
|
-
* ReactDOM.render(<App />, document.querySelector('my-app'));
|
|
82
81
|
* ```
|
|
83
82
|
*/
|
|
84
83
|
export declare function handleTreeViewCheckChange(event: TreeViewExpandChangeEvent, check: string[] | TreeViewCheckDescriptor, data?: any[] | null, settings?: TreeViewCheckChangeSettings, childrenField?: string): any[] | (TreeViewCheckDescriptor & {
|
|
@@ -120,39 +119,32 @@ export declare interface ItemRenderProps {
|
|
|
120
119
|
*
|
|
121
120
|
* @example
|
|
122
121
|
* ```jsx
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
122
|
+
* const App = () => {
|
|
123
|
+
* const dragClueRef = React.useRef(null);
|
|
124
|
+
* const [tree, setTree] = React.useState([{
|
|
125
|
+
* text: 'Furniture', expanded: true, items: [
|
|
126
|
+
* { text: 'Tables & Chairs', expanded: true },
|
|
127
|
+
* { text: 'Sofas', expanded: true },
|
|
128
|
+
* { text: 'Occasional Furniture', expanded: true }]
|
|
129
|
+
* }, {
|
|
130
|
+
* text: 'Decor', expanded: true, items: [
|
|
131
|
+
* { text: 'Bed Linen', expanded: true },
|
|
132
|
+
* { text: 'Curtains & Blinds', expanded: true },
|
|
133
|
+
* { text: 'Carpets', expanded: true }]
|
|
134
|
+
* }]);
|
|
126
135
|
*
|
|
127
|
-
*
|
|
128
|
-
* return (
|
|
129
|
-
* <div>
|
|
130
|
-
* <TreeView data={this.state.tree} draggable={true}
|
|
131
|
-
* onItemDragOver={this.onItemDragOver} onItemDragEnd={this.onItemDragEnd} />
|
|
132
|
-
* <TreeViewDragClue ref={dragClue => this.dragClue = dragClue} />
|
|
133
|
-
* </div>
|
|
134
|
-
* );
|
|
135
|
-
* }
|
|
136
|
-
*
|
|
137
|
-
* onItemDragOver = (event) => {
|
|
138
|
-
* this.dragClue.show(event.pageY + 10, event.pageX, event.item.text, this.getClueClassName(event));
|
|
139
|
-
* }
|
|
140
|
-
* onItemDragEnd = (event) => {
|
|
141
|
-
* this.dragClue.hide();
|
|
142
|
-
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
143
|
-
*
|
|
144
|
-
* if (eventAnalyzer.isDropAllowed) {
|
|
145
|
-
* const updatedTree = moveTreeViewItem(
|
|
146
|
-
* event.itemHierarchicalIndex,
|
|
147
|
-
* this.state.tree,
|
|
148
|
-
* eventAnalyzer.getDropOperation(),
|
|
149
|
-
* eventAnalyzer.destinationMeta.itemHierarchicalIndex,
|
|
150
|
-
* );
|
|
136
|
+
* const SEPARATOR = '_';
|
|
151
137
|
*
|
|
152
|
-
*
|
|
138
|
+
* const getSiblings = (itemIndex, data) => {
|
|
139
|
+
* let result = data;
|
|
140
|
+
* const indices = itemIndex.split(SEPARATOR).map(index => Number(index));
|
|
141
|
+
* for (let i = 0; i < indices.length - 1; i++) {
|
|
142
|
+
* result = result[indices[i]].items;
|
|
153
143
|
* }
|
|
154
|
-
*
|
|
155
|
-
*
|
|
144
|
+
* return result;
|
|
145
|
+
* };
|
|
146
|
+
*
|
|
147
|
+
* const getClueClassName = (event) => {
|
|
156
148
|
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
157
149
|
* const itemIndex = eventAnalyzer.destinationMeta.itemHierarchicalIndex;
|
|
158
150
|
*
|
|
@@ -164,7 +156,7 @@ export declare interface ItemRenderProps {
|
|
|
164
156
|
* return itemIndex === '0' || itemIndex.endsWith(`${SEPARATOR}0`) ?
|
|
165
157
|
* 'k-i-insert-up' : 'k-i-insert-middle';
|
|
166
158
|
* case 'after':
|
|
167
|
-
* const siblings = getSiblings(itemIndex,
|
|
159
|
+
* const siblings = getSiblings(itemIndex, tree);
|
|
168
160
|
* const lastIndex = Number(itemIndex.split(SEPARATOR).pop());
|
|
169
161
|
*
|
|
170
162
|
* return lastIndex < siblings.length - 1 ? 'k-i-insert-middle' : 'k-i-insert-down';
|
|
@@ -174,34 +166,36 @@ export declare interface ItemRenderProps {
|
|
|
174
166
|
* }
|
|
175
167
|
*
|
|
176
168
|
* return 'k-i-cancel';
|
|
177
|
-
* }
|
|
178
|
-
* }
|
|
169
|
+
* };
|
|
179
170
|
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
171
|
+
* const onItemDragOver = (event) => {
|
|
172
|
+
* dragClueRef.current.show(event.pageY + 10, event.pageX, event.item.text, getClueClassName(event));
|
|
173
|
+
* };
|
|
182
174
|
*
|
|
183
|
-
* const
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
* }
|
|
175
|
+
* const onItemDragEnd = (event) => {
|
|
176
|
+
* dragClueRef.current.hide();
|
|
177
|
+
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
187
178
|
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
179
|
+
* if (eventAnalyzer.isDropAllowed) {
|
|
180
|
+
* const updatedTree = moveTreeViewItem(
|
|
181
|
+
* event.itemHierarchicalIndex,
|
|
182
|
+
* tree,
|
|
183
|
+
* eventAnalyzer.getDropOperation(),
|
|
184
|
+
* eventAnalyzer.destinationMeta.itemHierarchicalIndex,
|
|
185
|
+
* );
|
|
190
186
|
*
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
* { text: 'Tables & Chairs', expanded: true },
|
|
195
|
-
* { text: 'Sofas', expanded: true },
|
|
196
|
-
* { text: 'Occasional Furniture', expanded: true }]
|
|
197
|
-
* }, {
|
|
198
|
-
* text: 'Decor', expanded: true, items: [
|
|
199
|
-
* { text: 'Bed Linen', expanded: true },
|
|
200
|
-
* { text: 'Curtains & Blinds', expanded: true },
|
|
201
|
-
* { text: 'Carpets', expanded: true }]
|
|
202
|
-
* }];
|
|
187
|
+
* setTree(updatedTree);
|
|
188
|
+
* }
|
|
189
|
+
* };
|
|
203
190
|
*
|
|
204
|
-
*
|
|
191
|
+
* return (
|
|
192
|
+
* <div>
|
|
193
|
+
* <TreeView data={tree} draggable={true}
|
|
194
|
+
* onItemDragOver={onItemDragOver} onItemDragEnd={onItemDragEnd} />
|
|
195
|
+
* <TreeViewDragClue ref={dragClueRef} />
|
|
196
|
+
* </div>
|
|
197
|
+
* );
|
|
198
|
+
* }
|
|
205
199
|
* ```
|
|
206
200
|
*/
|
|
207
201
|
export declare function moveTreeViewItem(sourceItemHierarchicalIndex: string, sourceData: any[] | null | undefined, operation: 'before' | 'after' | 'child', targetItemHierarchicalIndex: string, targetData?: any[] | null, childrenField?: string): any[] | {
|
|
@@ -221,25 +215,27 @@ export declare function moveTreeViewItem(sourceItemHierarchicalIndex: string, so
|
|
|
221
215
|
*
|
|
222
216
|
* @example
|
|
223
217
|
* ```jsx
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
* );
|
|
236
|
-
* }
|
|
237
|
-
* onExpandChange = (event) => {
|
|
238
|
-
* let expand = this.state.expand.slice();
|
|
239
|
-
* const index = expand.indexOf(event.itemHierarchicalIndex);
|
|
240
|
-
* index === -1 ? expand.push(event.itemHierarchicalIndex) : expand.splice(index, 1);
|
|
241
|
-
* this.setState({ expand });
|
|
218
|
+
* const App = () => {
|
|
219
|
+
* const [items] = React.useState(tree);
|
|
220
|
+
* const [expand, setExpand] = React.useState([]);
|
|
221
|
+
* const [select, setSelect] = React.useState([]);
|
|
222
|
+
* const [check, setCheck] = React.useState([]);
|
|
223
|
+
*
|
|
224
|
+
* const onExpandChange = (event) => {
|
|
225
|
+
* let newExpand = expand.slice();
|
|
226
|
+
* const index = newExpand.indexOf(event.itemHierarchicalIndex);
|
|
227
|
+
* index === -1 ? newExpand.push(event.itemHierarchicalIndex) : newExpand.splice(index, 1);
|
|
228
|
+
* setExpand(newExpand);
|
|
242
229
|
* }
|
|
230
|
+
*
|
|
231
|
+
* return (
|
|
232
|
+
* <TreeView
|
|
233
|
+
* data={processTreeViewItems(items, { expand, select, check })}
|
|
234
|
+
* expandIcons={true} onExpandChange={onExpandChange} checkboxes={true}
|
|
235
|
+
* onCheckChange={event => setCheck([ event.itemHierarchicalIndex ])}
|
|
236
|
+
* onItemClick={event => setSelect([ event.itemHierarchicalIndex ])}
|
|
237
|
+
* />
|
|
238
|
+
* );
|
|
243
239
|
* }
|
|
244
240
|
*
|
|
245
241
|
* const tree = [{
|
|
@@ -254,8 +250,6 @@ export declare function moveTreeViewItem(sourceItemHierarchicalIndex: string, so
|
|
|
254
250
|
* }, {
|
|
255
251
|
* text: 'Item3'
|
|
256
252
|
* }];
|
|
257
|
-
*
|
|
258
|
-
* ReactDOM.render(<App />, document.querySelector('my-app'));
|
|
259
253
|
* ```
|
|
260
254
|
*/
|
|
261
255
|
export declare function processTreeViewItems(data: any[] | null | undefined, operations: TreeViewOperationDescriptors): any[];
|
|
@@ -323,12 +317,9 @@ export declare interface TreeViewCheckDescriptor extends TreeViewOperationDescri
|
|
|
323
317
|
* text: 'Decor', expanded: true, items: [
|
|
324
318
|
* { text: 'Bed Linen' }, { text: 'Curtains & Blinds' }, { text: 'Carpets' }]
|
|
325
319
|
* }];
|
|
326
|
-
*
|
|
327
|
-
*
|
|
328
|
-
* return <TreeView data={data} />;
|
|
329
|
-
* }
|
|
320
|
+
* const App = () => {
|
|
321
|
+
* return <TreeView data={data} />;
|
|
330
322
|
* }
|
|
331
|
-
* ReactDOM.render(<App />, document.querySelector('my-app'));
|
|
332
323
|
* ```
|
|
333
324
|
*/
|
|
334
325
|
export declare class TreeViewClassComponent extends React_2.Component<TreeViewProps, TreeViewState> {
|
|
@@ -457,39 +448,32 @@ export declare interface TreeViewContextMenuEvent extends BaseEvent<TreeViewClas
|
|
|
457
448
|
*
|
|
458
449
|
* @example
|
|
459
450
|
* ```jsx
|
|
460
|
-
*
|
|
461
|
-
*
|
|
462
|
-
*
|
|
451
|
+
* const App = () => {
|
|
452
|
+
* const dragClueRef = React.useRef(null);
|
|
453
|
+
* const [tree, setTree] = React.useState([{
|
|
454
|
+
* text: 'Furniture', expanded: true, items: [
|
|
455
|
+
* { text: 'Tables & Chairs', expanded: true },
|
|
456
|
+
* { text: 'Sofas', expanded: true },
|
|
457
|
+
* { text: 'Occasional Furniture', expanded: true }]
|
|
458
|
+
* }, {
|
|
459
|
+
* text: 'Decor', expanded: true, items: [
|
|
460
|
+
* { text: 'Bed Linen', expanded: true },
|
|
461
|
+
* { text: 'Curtains & Blinds', expanded: true },
|
|
462
|
+
* { text: 'Carpets', expanded: true }]
|
|
463
|
+
* }]);
|
|
463
464
|
*
|
|
464
|
-
*
|
|
465
|
-
* return (
|
|
466
|
-
* <div>
|
|
467
|
-
* <TreeView data={this.state.tree} draggable={true}
|
|
468
|
-
* onItemDragOver={this.onItemDragOver} onItemDragEnd={this.onItemDragEnd} />
|
|
469
|
-
* <TreeViewDragClue ref={dragClue => this.dragClue = dragClue} />
|
|
470
|
-
* </div>
|
|
471
|
-
* );
|
|
472
|
-
* }
|
|
473
|
-
*
|
|
474
|
-
* onItemDragOver = (event) => {
|
|
475
|
-
* this.dragClue.show(event.pageY + 10, event.pageX, event.item.text, this.getClueClassName(event));
|
|
476
|
-
* }
|
|
477
|
-
* onItemDragEnd = (event) => {
|
|
478
|
-
* this.dragClue.hide();
|
|
479
|
-
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
480
|
-
*
|
|
481
|
-
* if (eventAnalyzer.isDropAllowed) {
|
|
482
|
-
* const updatedTree = moveTreeViewItem(
|
|
483
|
-
* event.itemHierarchicalIndex,
|
|
484
|
-
* this.state.tree,
|
|
485
|
-
* eventAnalyzer.getDropOperation(),
|
|
486
|
-
* eventAnalyzer.destinationMeta.itemHierarchicalIndex,
|
|
487
|
-
* );
|
|
465
|
+
* const SEPARATOR = '_';
|
|
488
466
|
*
|
|
489
|
-
*
|
|
467
|
+
* const getSiblings = (itemIndex, data) => {
|
|
468
|
+
* let result = data;
|
|
469
|
+
* const indices = itemIndex.split(SEPARATOR).map(index => Number(index));
|
|
470
|
+
* for (let i = 0; i < indices.length - 1; i++) {
|
|
471
|
+
* result = result[indices[i]].items;
|
|
490
472
|
* }
|
|
491
|
-
*
|
|
492
|
-
*
|
|
473
|
+
* return result;
|
|
474
|
+
* };
|
|
475
|
+
*
|
|
476
|
+
* const getClueClassName = (event) => {
|
|
493
477
|
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
494
478
|
* const itemIndex = eventAnalyzer.destinationMeta.itemHierarchicalIndex;
|
|
495
479
|
*
|
|
@@ -501,7 +485,7 @@ export declare interface TreeViewContextMenuEvent extends BaseEvent<TreeViewClas
|
|
|
501
485
|
* return itemIndex === '0' || itemIndex.endsWith(`${SEPARATOR}0`) ?
|
|
502
486
|
* 'k-i-insert-up' : 'k-i-insert-middle';
|
|
503
487
|
* case 'after':
|
|
504
|
-
* const siblings = getSiblings(itemIndex,
|
|
488
|
+
* const siblings = getSiblings(itemIndex, tree);
|
|
505
489
|
* const lastIndex = Number(itemIndex.split(SEPARATOR).pop());
|
|
506
490
|
*
|
|
507
491
|
* return lastIndex < siblings.length - 1 ? 'k-i-insert-middle' : 'k-i-insert-down';
|
|
@@ -511,34 +495,36 @@ export declare interface TreeViewContextMenuEvent extends BaseEvent<TreeViewClas
|
|
|
511
495
|
* }
|
|
512
496
|
*
|
|
513
497
|
* return 'k-i-cancel';
|
|
514
|
-
* }
|
|
515
|
-
* }
|
|
498
|
+
* };
|
|
516
499
|
*
|
|
517
|
-
*
|
|
518
|
-
*
|
|
500
|
+
* const onItemDragOver = (event) => {
|
|
501
|
+
* dragClueRef.current.show(event.pageY + 10, event.pageX, event.item.text, getClueClassName(event));
|
|
502
|
+
* };
|
|
519
503
|
*
|
|
520
|
-
* const
|
|
521
|
-
*
|
|
522
|
-
*
|
|
523
|
-
* }
|
|
504
|
+
* const onItemDragEnd = (event) => {
|
|
505
|
+
* dragClueRef.current.hide();
|
|
506
|
+
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
524
507
|
*
|
|
525
|
-
*
|
|
526
|
-
*
|
|
508
|
+
* if (eventAnalyzer.isDropAllowed) {
|
|
509
|
+
* const updatedTree = moveTreeViewItem(
|
|
510
|
+
* event.itemHierarchicalIndex,
|
|
511
|
+
* tree,
|
|
512
|
+
* eventAnalyzer.getDropOperation(),
|
|
513
|
+
* eventAnalyzer.destinationMeta.itemHierarchicalIndex,
|
|
514
|
+
* );
|
|
527
515
|
*
|
|
528
|
-
*
|
|
529
|
-
*
|
|
530
|
-
*
|
|
531
|
-
* { text: 'Tables & Chairs', expanded: true },
|
|
532
|
-
* { text: 'Sofas', expanded: true },
|
|
533
|
-
* { text: 'Occasional Furniture', expanded: true }]
|
|
534
|
-
* }, {
|
|
535
|
-
* text: 'Decor', expanded: true, items: [
|
|
536
|
-
* { text: 'Bed Linen', expanded: true },
|
|
537
|
-
* { text: 'Curtains & Blinds', expanded: true },
|
|
538
|
-
* { text: 'Carpets', expanded: true }]
|
|
539
|
-
* }];
|
|
516
|
+
* setTree(updatedTree);
|
|
517
|
+
* }
|
|
518
|
+
* };
|
|
540
519
|
*
|
|
541
|
-
*
|
|
520
|
+
* return (
|
|
521
|
+
* <div>
|
|
522
|
+
* <TreeView data={tree} draggable={true}
|
|
523
|
+
* onItemDragOver={onItemDragOver} onItemDragEnd={onItemDragEnd} />
|
|
524
|
+
* <TreeViewDragClue ref={dragClueRef} />
|
|
525
|
+
* </div>
|
|
526
|
+
* );
|
|
527
|
+
* }
|
|
542
528
|
* ```
|
|
543
529
|
*/
|
|
544
530
|
export declare class TreeViewDragAnalyzer {
|
|
@@ -591,39 +577,32 @@ export declare class TreeViewDragAnalyzer {
|
|
|
591
577
|
*
|
|
592
578
|
* @example
|
|
593
579
|
* ```jsx
|
|
594
|
-
*
|
|
595
|
-
*
|
|
596
|
-
*
|
|
597
|
-
*
|
|
598
|
-
*
|
|
599
|
-
*
|
|
600
|
-
*
|
|
601
|
-
*
|
|
602
|
-
*
|
|
603
|
-
*
|
|
604
|
-
*
|
|
605
|
-
*
|
|
606
|
-
* }
|
|
607
|
-
*
|
|
608
|
-
* onItemDragOver = (event) => {
|
|
609
|
-
* this.dragClue.show(event.pageY + 10, event.pageX, event.item.text, this.getClueClassName(event));
|
|
610
|
-
* }
|
|
611
|
-
* onItemDragEnd = (event) => {
|
|
612
|
-
* this.dragClue.hide();
|
|
613
|
-
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
580
|
+
* const App = () => {
|
|
581
|
+
* const dragClueRef = React.useRef(null);
|
|
582
|
+
* const [tree, setTree] = React.useState([{
|
|
583
|
+
* text: 'Furniture', expanded: true, items: [
|
|
584
|
+
* { text: 'Tables & Chairs', expanded: true },
|
|
585
|
+
* { text: 'Sofas', expanded: true },
|
|
586
|
+
* { text: 'Occasional Furniture', expanded: true }]
|
|
587
|
+
* }, {
|
|
588
|
+
* text: 'Decor', expanded: true, items: [
|
|
589
|
+
* { text: 'Bed Linen', expanded: true },
|
|
590
|
+
* { text: 'Curtains & Blinds', expanded: true },
|
|
591
|
+
* { text: 'Carpets', expanded: true }]
|
|
592
|
+
* }]);
|
|
614
593
|
*
|
|
615
|
-
*
|
|
616
|
-
* const updatedTree = moveTreeViewItem(
|
|
617
|
-
* event.itemHierarchicalIndex,
|
|
618
|
-
* this.state.tree,
|
|
619
|
-
* eventAnalyzer.getDropOperation(),
|
|
620
|
-
* eventAnalyzer.destinationMeta.itemHierarchicalIndex,
|
|
621
|
-
* );
|
|
594
|
+
* const SEPARATOR = '_';
|
|
622
595
|
*
|
|
623
|
-
*
|
|
596
|
+
* const getSiblings = (itemIndex, data) => {
|
|
597
|
+
* let result = data;
|
|
598
|
+
* const indices = itemIndex.split(SEPARATOR).map(index => Number(index));
|
|
599
|
+
* for (let i = 0; i < indices.length - 1; i++) {
|
|
600
|
+
* result = result[indices[i]].items;
|
|
624
601
|
* }
|
|
625
|
-
*
|
|
626
|
-
*
|
|
602
|
+
* return result;
|
|
603
|
+
* };
|
|
604
|
+
*
|
|
605
|
+
* const getClueClassName = (event) => {
|
|
627
606
|
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
628
607
|
* const itemIndex = eventAnalyzer.destinationMeta.itemHierarchicalIndex;
|
|
629
608
|
*
|
|
@@ -635,7 +614,7 @@ export declare class TreeViewDragAnalyzer {
|
|
|
635
614
|
* return itemIndex === '0' || itemIndex.endsWith(`${SEPARATOR}0`) ?
|
|
636
615
|
* 'k-i-insert-up' : 'k-i-insert-middle';
|
|
637
616
|
* case 'after':
|
|
638
|
-
* const siblings = getSiblings(itemIndex,
|
|
617
|
+
* const siblings = getSiblings(itemIndex, tree);
|
|
639
618
|
* const lastIndex = Number(itemIndex.split(SEPARATOR).pop());
|
|
640
619
|
*
|
|
641
620
|
* return lastIndex < siblings.length - 1 ? 'k-i-insert-middle' : 'k-i-insert-down';
|
|
@@ -645,34 +624,36 @@ export declare class TreeViewDragAnalyzer {
|
|
|
645
624
|
* }
|
|
646
625
|
*
|
|
647
626
|
* return 'k-i-cancel';
|
|
648
|
-
* }
|
|
649
|
-
* }
|
|
627
|
+
* };
|
|
650
628
|
*
|
|
651
|
-
*
|
|
652
|
-
*
|
|
629
|
+
* const onItemDragOver = (event) => {
|
|
630
|
+
* dragClueRef.current.show(event.pageY + 10, event.pageX, event.item.text, getClueClassName(event));
|
|
631
|
+
* };
|
|
653
632
|
*
|
|
654
|
-
* const
|
|
655
|
-
*
|
|
656
|
-
*
|
|
657
|
-
* }
|
|
633
|
+
* const onItemDragEnd = (event) => {
|
|
634
|
+
* dragClueRef.current.hide();
|
|
635
|
+
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
658
636
|
*
|
|
659
|
-
*
|
|
660
|
-
*
|
|
637
|
+
* if (eventAnalyzer.isDropAllowed) {
|
|
638
|
+
* const updatedTree = moveTreeViewItem(
|
|
639
|
+
* event.itemHierarchicalIndex,
|
|
640
|
+
* tree,
|
|
641
|
+
* eventAnalyzer.getDropOperation(),
|
|
642
|
+
* eventAnalyzer.destinationMeta.itemHierarchicalIndex,
|
|
643
|
+
* );
|
|
661
644
|
*
|
|
662
|
-
*
|
|
663
|
-
*
|
|
664
|
-
*
|
|
665
|
-
* { text: 'Tables & Chairs', expanded: true },
|
|
666
|
-
* { text: 'Sofas', expanded: true },
|
|
667
|
-
* { text: 'Occasional Furniture', expanded: true }]
|
|
668
|
-
* }, {
|
|
669
|
-
* text: 'Decor', expanded: true, items: [
|
|
670
|
-
* { text: 'Bed Linen', expanded: true },
|
|
671
|
-
* { text: 'Curtains & Blinds', expanded: true },
|
|
672
|
-
* { text: 'Carpets', expanded: true }]
|
|
673
|
-
* }];
|
|
645
|
+
* setTree(updatedTree);
|
|
646
|
+
* }
|
|
647
|
+
* };
|
|
674
648
|
*
|
|
675
|
-
*
|
|
649
|
+
* return (
|
|
650
|
+
* <div>
|
|
651
|
+
* <TreeView data={tree} draggable={true}
|
|
652
|
+
* onItemDragOver={onItemDragOver} onItemDragEnd={onItemDragEnd} />
|
|
653
|
+
* <TreeViewDragClue ref={dragClueRef} />
|
|
654
|
+
* </div>
|
|
655
|
+
* );
|
|
656
|
+
* }
|
|
676
657
|
* ```
|
|
677
658
|
*/
|
|
678
659
|
export declare class TreeViewDragClue extends React_2.PureComponent<TreeViewDragClueProps, TreeViewDragClueState> {
|
package/index.d.ts
CHANGED
|
@@ -47,27 +47,28 @@ export declare function getItemIdUponKeyboardNavigation(item: any, itemId: strin
|
|
|
47
47
|
*
|
|
48
48
|
* @example
|
|
49
49
|
* ```jsx
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
50
|
+
* const App = () => {
|
|
51
|
+
* const [check, setCheck] = React.useState([]);
|
|
52
|
+
* const [items] = React.useState(tree);
|
|
53
|
+
*
|
|
54
|
+
* const onCheckChange = (event) => {
|
|
55
|
+
* setCheck(handleTreeViewCheckChange(event, check, items));
|
|
56
|
+
* }
|
|
57
|
+
*
|
|
58
|
+
* return (
|
|
59
|
+
* <div>
|
|
60
|
+
* <TreeView
|
|
61
|
+
* checkboxes={true} onCheckChange={onCheckChange}
|
|
62
|
+
* data={processTreeViewItems(items, { check })}
|
|
63
|
+
* />
|
|
64
|
+
* <div style={{ marginTop: 5 }}>
|
|
65
|
+
* <i>Press SPACE to check/uncheck the active item</i>
|
|
66
|
+
* <div className="example-config">
|
|
67
|
+
* Checked Indices: {check.join(",")}
|
|
64
68
|
* </div>
|
|
65
69
|
* </div>
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* onCheckChange = (event) => {
|
|
69
|
-
* this.setState({ check: handleTreeViewCheckChange(event, this.state.check, this.state.items) });
|
|
70
|
-
* }
|
|
70
|
+
* </div>
|
|
71
|
+
* );
|
|
71
72
|
* }
|
|
72
73
|
*
|
|
73
74
|
* const tree = [ {
|
|
@@ -77,8 +78,6 @@ export declare function getItemIdUponKeyboardNavigation(item: any, itemId: strin
|
|
|
77
78
|
* text: 'Decor', expanded: true, items: [
|
|
78
79
|
* { text: 'Bed Linen' }, { text: 'Curtains & Blinds' }, { text: 'Carpets' } ]
|
|
79
80
|
* } ];
|
|
80
|
-
*
|
|
81
|
-
* ReactDOM.render(<App />, document.querySelector('my-app'));
|
|
82
81
|
* ```
|
|
83
82
|
*/
|
|
84
83
|
export declare function handleTreeViewCheckChange(event: TreeViewExpandChangeEvent, check: string[] | TreeViewCheckDescriptor, data?: any[] | null, settings?: TreeViewCheckChangeSettings, childrenField?: string): any[] | (TreeViewCheckDescriptor & {
|
|
@@ -120,39 +119,32 @@ export declare interface ItemRenderProps {
|
|
|
120
119
|
*
|
|
121
120
|
* @example
|
|
122
121
|
* ```jsx
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
122
|
+
* const App = () => {
|
|
123
|
+
* const dragClueRef = React.useRef(null);
|
|
124
|
+
* const [tree, setTree] = React.useState([{
|
|
125
|
+
* text: 'Furniture', expanded: true, items: [
|
|
126
|
+
* { text: 'Tables & Chairs', expanded: true },
|
|
127
|
+
* { text: 'Sofas', expanded: true },
|
|
128
|
+
* { text: 'Occasional Furniture', expanded: true }]
|
|
129
|
+
* }, {
|
|
130
|
+
* text: 'Decor', expanded: true, items: [
|
|
131
|
+
* { text: 'Bed Linen', expanded: true },
|
|
132
|
+
* { text: 'Curtains & Blinds', expanded: true },
|
|
133
|
+
* { text: 'Carpets', expanded: true }]
|
|
134
|
+
* }]);
|
|
126
135
|
*
|
|
127
|
-
*
|
|
128
|
-
* return (
|
|
129
|
-
* <div>
|
|
130
|
-
* <TreeView data={this.state.tree} draggable={true}
|
|
131
|
-
* onItemDragOver={this.onItemDragOver} onItemDragEnd={this.onItemDragEnd} />
|
|
132
|
-
* <TreeViewDragClue ref={dragClue => this.dragClue = dragClue} />
|
|
133
|
-
* </div>
|
|
134
|
-
* );
|
|
135
|
-
* }
|
|
136
|
-
*
|
|
137
|
-
* onItemDragOver = (event) => {
|
|
138
|
-
* this.dragClue.show(event.pageY + 10, event.pageX, event.item.text, this.getClueClassName(event));
|
|
139
|
-
* }
|
|
140
|
-
* onItemDragEnd = (event) => {
|
|
141
|
-
* this.dragClue.hide();
|
|
142
|
-
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
143
|
-
*
|
|
144
|
-
* if (eventAnalyzer.isDropAllowed) {
|
|
145
|
-
* const updatedTree = moveTreeViewItem(
|
|
146
|
-
* event.itemHierarchicalIndex,
|
|
147
|
-
* this.state.tree,
|
|
148
|
-
* eventAnalyzer.getDropOperation(),
|
|
149
|
-
* eventAnalyzer.destinationMeta.itemHierarchicalIndex,
|
|
150
|
-
* );
|
|
136
|
+
* const SEPARATOR = '_';
|
|
151
137
|
*
|
|
152
|
-
*
|
|
138
|
+
* const getSiblings = (itemIndex, data) => {
|
|
139
|
+
* let result = data;
|
|
140
|
+
* const indices = itemIndex.split(SEPARATOR).map(index => Number(index));
|
|
141
|
+
* for (let i = 0; i < indices.length - 1; i++) {
|
|
142
|
+
* result = result[indices[i]].items;
|
|
153
143
|
* }
|
|
154
|
-
*
|
|
155
|
-
*
|
|
144
|
+
* return result;
|
|
145
|
+
* };
|
|
146
|
+
*
|
|
147
|
+
* const getClueClassName = (event) => {
|
|
156
148
|
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
157
149
|
* const itemIndex = eventAnalyzer.destinationMeta.itemHierarchicalIndex;
|
|
158
150
|
*
|
|
@@ -164,7 +156,7 @@ export declare interface ItemRenderProps {
|
|
|
164
156
|
* return itemIndex === '0' || itemIndex.endsWith(`${SEPARATOR}0`) ?
|
|
165
157
|
* 'k-i-insert-up' : 'k-i-insert-middle';
|
|
166
158
|
* case 'after':
|
|
167
|
-
* const siblings = getSiblings(itemIndex,
|
|
159
|
+
* const siblings = getSiblings(itemIndex, tree);
|
|
168
160
|
* const lastIndex = Number(itemIndex.split(SEPARATOR).pop());
|
|
169
161
|
*
|
|
170
162
|
* return lastIndex < siblings.length - 1 ? 'k-i-insert-middle' : 'k-i-insert-down';
|
|
@@ -174,34 +166,36 @@ export declare interface ItemRenderProps {
|
|
|
174
166
|
* }
|
|
175
167
|
*
|
|
176
168
|
* return 'k-i-cancel';
|
|
177
|
-
* }
|
|
178
|
-
* }
|
|
169
|
+
* };
|
|
179
170
|
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
171
|
+
* const onItemDragOver = (event) => {
|
|
172
|
+
* dragClueRef.current.show(event.pageY + 10, event.pageX, event.item.text, getClueClassName(event));
|
|
173
|
+
* };
|
|
182
174
|
*
|
|
183
|
-
* const
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
* }
|
|
175
|
+
* const onItemDragEnd = (event) => {
|
|
176
|
+
* dragClueRef.current.hide();
|
|
177
|
+
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
187
178
|
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
179
|
+
* if (eventAnalyzer.isDropAllowed) {
|
|
180
|
+
* const updatedTree = moveTreeViewItem(
|
|
181
|
+
* event.itemHierarchicalIndex,
|
|
182
|
+
* tree,
|
|
183
|
+
* eventAnalyzer.getDropOperation(),
|
|
184
|
+
* eventAnalyzer.destinationMeta.itemHierarchicalIndex,
|
|
185
|
+
* );
|
|
190
186
|
*
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
* { text: 'Tables & Chairs', expanded: true },
|
|
195
|
-
* { text: 'Sofas', expanded: true },
|
|
196
|
-
* { text: 'Occasional Furniture', expanded: true }]
|
|
197
|
-
* }, {
|
|
198
|
-
* text: 'Decor', expanded: true, items: [
|
|
199
|
-
* { text: 'Bed Linen', expanded: true },
|
|
200
|
-
* { text: 'Curtains & Blinds', expanded: true },
|
|
201
|
-
* { text: 'Carpets', expanded: true }]
|
|
202
|
-
* }];
|
|
187
|
+
* setTree(updatedTree);
|
|
188
|
+
* }
|
|
189
|
+
* };
|
|
203
190
|
*
|
|
204
|
-
*
|
|
191
|
+
* return (
|
|
192
|
+
* <div>
|
|
193
|
+
* <TreeView data={tree} draggable={true}
|
|
194
|
+
* onItemDragOver={onItemDragOver} onItemDragEnd={onItemDragEnd} />
|
|
195
|
+
* <TreeViewDragClue ref={dragClueRef} />
|
|
196
|
+
* </div>
|
|
197
|
+
* );
|
|
198
|
+
* }
|
|
205
199
|
* ```
|
|
206
200
|
*/
|
|
207
201
|
export declare function moveTreeViewItem(sourceItemHierarchicalIndex: string, sourceData: any[] | null | undefined, operation: 'before' | 'after' | 'child', targetItemHierarchicalIndex: string, targetData?: any[] | null, childrenField?: string): any[] | {
|
|
@@ -221,25 +215,27 @@ export declare function moveTreeViewItem(sourceItemHierarchicalIndex: string, so
|
|
|
221
215
|
*
|
|
222
216
|
* @example
|
|
223
217
|
* ```jsx
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
* );
|
|
236
|
-
* }
|
|
237
|
-
* onExpandChange = (event) => {
|
|
238
|
-
* let expand = this.state.expand.slice();
|
|
239
|
-
* const index = expand.indexOf(event.itemHierarchicalIndex);
|
|
240
|
-
* index === -1 ? expand.push(event.itemHierarchicalIndex) : expand.splice(index, 1);
|
|
241
|
-
* this.setState({ expand });
|
|
218
|
+
* const App = () => {
|
|
219
|
+
* const [items] = React.useState(tree);
|
|
220
|
+
* const [expand, setExpand] = React.useState([]);
|
|
221
|
+
* const [select, setSelect] = React.useState([]);
|
|
222
|
+
* const [check, setCheck] = React.useState([]);
|
|
223
|
+
*
|
|
224
|
+
* const onExpandChange = (event) => {
|
|
225
|
+
* let newExpand = expand.slice();
|
|
226
|
+
* const index = newExpand.indexOf(event.itemHierarchicalIndex);
|
|
227
|
+
* index === -1 ? newExpand.push(event.itemHierarchicalIndex) : newExpand.splice(index, 1);
|
|
228
|
+
* setExpand(newExpand);
|
|
242
229
|
* }
|
|
230
|
+
*
|
|
231
|
+
* return (
|
|
232
|
+
* <TreeView
|
|
233
|
+
* data={processTreeViewItems(items, { expand, select, check })}
|
|
234
|
+
* expandIcons={true} onExpandChange={onExpandChange} checkboxes={true}
|
|
235
|
+
* onCheckChange={event => setCheck([ event.itemHierarchicalIndex ])}
|
|
236
|
+
* onItemClick={event => setSelect([ event.itemHierarchicalIndex ])}
|
|
237
|
+
* />
|
|
238
|
+
* );
|
|
243
239
|
* }
|
|
244
240
|
*
|
|
245
241
|
* const tree = [{
|
|
@@ -254,8 +250,6 @@ export declare function moveTreeViewItem(sourceItemHierarchicalIndex: string, so
|
|
|
254
250
|
* }, {
|
|
255
251
|
* text: 'Item3'
|
|
256
252
|
* }];
|
|
257
|
-
*
|
|
258
|
-
* ReactDOM.render(<App />, document.querySelector('my-app'));
|
|
259
253
|
* ```
|
|
260
254
|
*/
|
|
261
255
|
export declare function processTreeViewItems(data: any[] | null | undefined, operations: TreeViewOperationDescriptors): any[];
|
|
@@ -323,12 +317,9 @@ export declare interface TreeViewCheckDescriptor extends TreeViewOperationDescri
|
|
|
323
317
|
* text: 'Decor', expanded: true, items: [
|
|
324
318
|
* { text: 'Bed Linen' }, { text: 'Curtains & Blinds' }, { text: 'Carpets' }]
|
|
325
319
|
* }];
|
|
326
|
-
*
|
|
327
|
-
*
|
|
328
|
-
* return <TreeView data={data} />;
|
|
329
|
-
* }
|
|
320
|
+
* const App = () => {
|
|
321
|
+
* return <TreeView data={data} />;
|
|
330
322
|
* }
|
|
331
|
-
* ReactDOM.render(<App />, document.querySelector('my-app'));
|
|
332
323
|
* ```
|
|
333
324
|
*/
|
|
334
325
|
export declare class TreeViewClassComponent extends React_2.Component<TreeViewProps, TreeViewState> {
|
|
@@ -457,39 +448,32 @@ export declare interface TreeViewContextMenuEvent extends BaseEvent<TreeViewClas
|
|
|
457
448
|
*
|
|
458
449
|
* @example
|
|
459
450
|
* ```jsx
|
|
460
|
-
*
|
|
461
|
-
*
|
|
462
|
-
*
|
|
451
|
+
* const App = () => {
|
|
452
|
+
* const dragClueRef = React.useRef(null);
|
|
453
|
+
* const [tree, setTree] = React.useState([{
|
|
454
|
+
* text: 'Furniture', expanded: true, items: [
|
|
455
|
+
* { text: 'Tables & Chairs', expanded: true },
|
|
456
|
+
* { text: 'Sofas', expanded: true },
|
|
457
|
+
* { text: 'Occasional Furniture', expanded: true }]
|
|
458
|
+
* }, {
|
|
459
|
+
* text: 'Decor', expanded: true, items: [
|
|
460
|
+
* { text: 'Bed Linen', expanded: true },
|
|
461
|
+
* { text: 'Curtains & Blinds', expanded: true },
|
|
462
|
+
* { text: 'Carpets', expanded: true }]
|
|
463
|
+
* }]);
|
|
463
464
|
*
|
|
464
|
-
*
|
|
465
|
-
* return (
|
|
466
|
-
* <div>
|
|
467
|
-
* <TreeView data={this.state.tree} draggable={true}
|
|
468
|
-
* onItemDragOver={this.onItemDragOver} onItemDragEnd={this.onItemDragEnd} />
|
|
469
|
-
* <TreeViewDragClue ref={dragClue => this.dragClue = dragClue} />
|
|
470
|
-
* </div>
|
|
471
|
-
* );
|
|
472
|
-
* }
|
|
473
|
-
*
|
|
474
|
-
* onItemDragOver = (event) => {
|
|
475
|
-
* this.dragClue.show(event.pageY + 10, event.pageX, event.item.text, this.getClueClassName(event));
|
|
476
|
-
* }
|
|
477
|
-
* onItemDragEnd = (event) => {
|
|
478
|
-
* this.dragClue.hide();
|
|
479
|
-
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
480
|
-
*
|
|
481
|
-
* if (eventAnalyzer.isDropAllowed) {
|
|
482
|
-
* const updatedTree = moveTreeViewItem(
|
|
483
|
-
* event.itemHierarchicalIndex,
|
|
484
|
-
* this.state.tree,
|
|
485
|
-
* eventAnalyzer.getDropOperation(),
|
|
486
|
-
* eventAnalyzer.destinationMeta.itemHierarchicalIndex,
|
|
487
|
-
* );
|
|
465
|
+
* const SEPARATOR = '_';
|
|
488
466
|
*
|
|
489
|
-
*
|
|
467
|
+
* const getSiblings = (itemIndex, data) => {
|
|
468
|
+
* let result = data;
|
|
469
|
+
* const indices = itemIndex.split(SEPARATOR).map(index => Number(index));
|
|
470
|
+
* for (let i = 0; i < indices.length - 1; i++) {
|
|
471
|
+
* result = result[indices[i]].items;
|
|
490
472
|
* }
|
|
491
|
-
*
|
|
492
|
-
*
|
|
473
|
+
* return result;
|
|
474
|
+
* };
|
|
475
|
+
*
|
|
476
|
+
* const getClueClassName = (event) => {
|
|
493
477
|
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
494
478
|
* const itemIndex = eventAnalyzer.destinationMeta.itemHierarchicalIndex;
|
|
495
479
|
*
|
|
@@ -501,7 +485,7 @@ export declare interface TreeViewContextMenuEvent extends BaseEvent<TreeViewClas
|
|
|
501
485
|
* return itemIndex === '0' || itemIndex.endsWith(`${SEPARATOR}0`) ?
|
|
502
486
|
* 'k-i-insert-up' : 'k-i-insert-middle';
|
|
503
487
|
* case 'after':
|
|
504
|
-
* const siblings = getSiblings(itemIndex,
|
|
488
|
+
* const siblings = getSiblings(itemIndex, tree);
|
|
505
489
|
* const lastIndex = Number(itemIndex.split(SEPARATOR).pop());
|
|
506
490
|
*
|
|
507
491
|
* return lastIndex < siblings.length - 1 ? 'k-i-insert-middle' : 'k-i-insert-down';
|
|
@@ -511,34 +495,36 @@ export declare interface TreeViewContextMenuEvent extends BaseEvent<TreeViewClas
|
|
|
511
495
|
* }
|
|
512
496
|
*
|
|
513
497
|
* return 'k-i-cancel';
|
|
514
|
-
* }
|
|
515
|
-
* }
|
|
498
|
+
* };
|
|
516
499
|
*
|
|
517
|
-
*
|
|
518
|
-
*
|
|
500
|
+
* const onItemDragOver = (event) => {
|
|
501
|
+
* dragClueRef.current.show(event.pageY + 10, event.pageX, event.item.text, getClueClassName(event));
|
|
502
|
+
* };
|
|
519
503
|
*
|
|
520
|
-
* const
|
|
521
|
-
*
|
|
522
|
-
*
|
|
523
|
-
* }
|
|
504
|
+
* const onItemDragEnd = (event) => {
|
|
505
|
+
* dragClueRef.current.hide();
|
|
506
|
+
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
524
507
|
*
|
|
525
|
-
*
|
|
526
|
-
*
|
|
508
|
+
* if (eventAnalyzer.isDropAllowed) {
|
|
509
|
+
* const updatedTree = moveTreeViewItem(
|
|
510
|
+
* event.itemHierarchicalIndex,
|
|
511
|
+
* tree,
|
|
512
|
+
* eventAnalyzer.getDropOperation(),
|
|
513
|
+
* eventAnalyzer.destinationMeta.itemHierarchicalIndex,
|
|
514
|
+
* );
|
|
527
515
|
*
|
|
528
|
-
*
|
|
529
|
-
*
|
|
530
|
-
*
|
|
531
|
-
* { text: 'Tables & Chairs', expanded: true },
|
|
532
|
-
* { text: 'Sofas', expanded: true },
|
|
533
|
-
* { text: 'Occasional Furniture', expanded: true }]
|
|
534
|
-
* }, {
|
|
535
|
-
* text: 'Decor', expanded: true, items: [
|
|
536
|
-
* { text: 'Bed Linen', expanded: true },
|
|
537
|
-
* { text: 'Curtains & Blinds', expanded: true },
|
|
538
|
-
* { text: 'Carpets', expanded: true }]
|
|
539
|
-
* }];
|
|
516
|
+
* setTree(updatedTree);
|
|
517
|
+
* }
|
|
518
|
+
* };
|
|
540
519
|
*
|
|
541
|
-
*
|
|
520
|
+
* return (
|
|
521
|
+
* <div>
|
|
522
|
+
* <TreeView data={tree} draggable={true}
|
|
523
|
+
* onItemDragOver={onItemDragOver} onItemDragEnd={onItemDragEnd} />
|
|
524
|
+
* <TreeViewDragClue ref={dragClueRef} />
|
|
525
|
+
* </div>
|
|
526
|
+
* );
|
|
527
|
+
* }
|
|
542
528
|
* ```
|
|
543
529
|
*/
|
|
544
530
|
export declare class TreeViewDragAnalyzer {
|
|
@@ -591,39 +577,32 @@ export declare class TreeViewDragAnalyzer {
|
|
|
591
577
|
*
|
|
592
578
|
* @example
|
|
593
579
|
* ```jsx
|
|
594
|
-
*
|
|
595
|
-
*
|
|
596
|
-
*
|
|
597
|
-
*
|
|
598
|
-
*
|
|
599
|
-
*
|
|
600
|
-
*
|
|
601
|
-
*
|
|
602
|
-
*
|
|
603
|
-
*
|
|
604
|
-
*
|
|
605
|
-
*
|
|
606
|
-
* }
|
|
607
|
-
*
|
|
608
|
-
* onItemDragOver = (event) => {
|
|
609
|
-
* this.dragClue.show(event.pageY + 10, event.pageX, event.item.text, this.getClueClassName(event));
|
|
610
|
-
* }
|
|
611
|
-
* onItemDragEnd = (event) => {
|
|
612
|
-
* this.dragClue.hide();
|
|
613
|
-
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
580
|
+
* const App = () => {
|
|
581
|
+
* const dragClueRef = React.useRef(null);
|
|
582
|
+
* const [tree, setTree] = React.useState([{
|
|
583
|
+
* text: 'Furniture', expanded: true, items: [
|
|
584
|
+
* { text: 'Tables & Chairs', expanded: true },
|
|
585
|
+
* { text: 'Sofas', expanded: true },
|
|
586
|
+
* { text: 'Occasional Furniture', expanded: true }]
|
|
587
|
+
* }, {
|
|
588
|
+
* text: 'Decor', expanded: true, items: [
|
|
589
|
+
* { text: 'Bed Linen', expanded: true },
|
|
590
|
+
* { text: 'Curtains & Blinds', expanded: true },
|
|
591
|
+
* { text: 'Carpets', expanded: true }]
|
|
592
|
+
* }]);
|
|
614
593
|
*
|
|
615
|
-
*
|
|
616
|
-
* const updatedTree = moveTreeViewItem(
|
|
617
|
-
* event.itemHierarchicalIndex,
|
|
618
|
-
* this.state.tree,
|
|
619
|
-
* eventAnalyzer.getDropOperation(),
|
|
620
|
-
* eventAnalyzer.destinationMeta.itemHierarchicalIndex,
|
|
621
|
-
* );
|
|
594
|
+
* const SEPARATOR = '_';
|
|
622
595
|
*
|
|
623
|
-
*
|
|
596
|
+
* const getSiblings = (itemIndex, data) => {
|
|
597
|
+
* let result = data;
|
|
598
|
+
* const indices = itemIndex.split(SEPARATOR).map(index => Number(index));
|
|
599
|
+
* for (let i = 0; i < indices.length - 1; i++) {
|
|
600
|
+
* result = result[indices[i]].items;
|
|
624
601
|
* }
|
|
625
|
-
*
|
|
626
|
-
*
|
|
602
|
+
* return result;
|
|
603
|
+
* };
|
|
604
|
+
*
|
|
605
|
+
* const getClueClassName = (event) => {
|
|
627
606
|
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
628
607
|
* const itemIndex = eventAnalyzer.destinationMeta.itemHierarchicalIndex;
|
|
629
608
|
*
|
|
@@ -635,7 +614,7 @@ export declare class TreeViewDragAnalyzer {
|
|
|
635
614
|
* return itemIndex === '0' || itemIndex.endsWith(`${SEPARATOR}0`) ?
|
|
636
615
|
* 'k-i-insert-up' : 'k-i-insert-middle';
|
|
637
616
|
* case 'after':
|
|
638
|
-
* const siblings = getSiblings(itemIndex,
|
|
617
|
+
* const siblings = getSiblings(itemIndex, tree);
|
|
639
618
|
* const lastIndex = Number(itemIndex.split(SEPARATOR).pop());
|
|
640
619
|
*
|
|
641
620
|
* return lastIndex < siblings.length - 1 ? 'k-i-insert-middle' : 'k-i-insert-down';
|
|
@@ -645,34 +624,36 @@ export declare class TreeViewDragAnalyzer {
|
|
|
645
624
|
* }
|
|
646
625
|
*
|
|
647
626
|
* return 'k-i-cancel';
|
|
648
|
-
* }
|
|
649
|
-
* }
|
|
627
|
+
* };
|
|
650
628
|
*
|
|
651
|
-
*
|
|
652
|
-
*
|
|
629
|
+
* const onItemDragOver = (event) => {
|
|
630
|
+
* dragClueRef.current.show(event.pageY + 10, event.pageX, event.item.text, getClueClassName(event));
|
|
631
|
+
* };
|
|
653
632
|
*
|
|
654
|
-
* const
|
|
655
|
-
*
|
|
656
|
-
*
|
|
657
|
-
* }
|
|
633
|
+
* const onItemDragEnd = (event) => {
|
|
634
|
+
* dragClueRef.current.hide();
|
|
635
|
+
* const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
|
|
658
636
|
*
|
|
659
|
-
*
|
|
660
|
-
*
|
|
637
|
+
* if (eventAnalyzer.isDropAllowed) {
|
|
638
|
+
* const updatedTree = moveTreeViewItem(
|
|
639
|
+
* event.itemHierarchicalIndex,
|
|
640
|
+
* tree,
|
|
641
|
+
* eventAnalyzer.getDropOperation(),
|
|
642
|
+
* eventAnalyzer.destinationMeta.itemHierarchicalIndex,
|
|
643
|
+
* );
|
|
661
644
|
*
|
|
662
|
-
*
|
|
663
|
-
*
|
|
664
|
-
*
|
|
665
|
-
* { text: 'Tables & Chairs', expanded: true },
|
|
666
|
-
* { text: 'Sofas', expanded: true },
|
|
667
|
-
* { text: 'Occasional Furniture', expanded: true }]
|
|
668
|
-
* }, {
|
|
669
|
-
* text: 'Decor', expanded: true, items: [
|
|
670
|
-
* { text: 'Bed Linen', expanded: true },
|
|
671
|
-
* { text: 'Curtains & Blinds', expanded: true },
|
|
672
|
-
* { text: 'Carpets', expanded: true }]
|
|
673
|
-
* }];
|
|
645
|
+
* setTree(updatedTree);
|
|
646
|
+
* }
|
|
647
|
+
* };
|
|
674
648
|
*
|
|
675
|
-
*
|
|
649
|
+
* return (
|
|
650
|
+
* <div>
|
|
651
|
+
* <TreeView data={tree} draggable={true}
|
|
652
|
+
* onItemDragOver={onItemDragOver} onItemDragEnd={onItemDragEnd} />
|
|
653
|
+
* <TreeViewDragClue ref={dragClueRef} />
|
|
654
|
+
* </div>
|
|
655
|
+
* );
|
|
656
|
+
* }
|
|
676
657
|
* ```
|
|
677
658
|
*/
|
|
678
659
|
export declare class TreeViewDragClue extends React_2.PureComponent<TreeViewDragClueProps, TreeViewDragClueState> {
|
package/package-metadata.js
CHANGED
|
@@ -5,4 +5,4 @@
|
|
|
5
5
|
* Licensed under commercial license. See LICENSE.md in the package root for more information
|
|
6
6
|
*-------------------------------------------------------------------------------------------
|
|
7
7
|
*/
|
|
8
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=Object.freeze({name:"@progress/kendo-react-treeview",productName:"KendoReact",productCode:"KENDOUIREACT",productCodes:["KENDOUIREACT"],publishDate:
|
|
8
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=Object.freeze({name:"@progress/kendo-react-treeview",productName:"KendoReact",productCode:"KENDOUIREACT",productCodes:["KENDOUIREACT"],publishDate: 1756139262,version:"12.0.0-develop.11",licensingDocsUrl:"https://www.telerik.com/kendo-react-ui/components/my-license/"});exports.packageMetadata=e;
|
package/package-metadata.mjs
CHANGED
|
@@ -10,8 +10,8 @@ const e = Object.freeze({
|
|
|
10
10
|
productName: "KendoReact",
|
|
11
11
|
productCode: "KENDOUIREACT",
|
|
12
12
|
productCodes: ["KENDOUIREACT"],
|
|
13
|
-
publishDate:
|
|
14
|
-
version: "12.0.0-develop.
|
|
13
|
+
publishDate: 1756139262,
|
|
14
|
+
version: "12.0.0-develop.11",
|
|
15
15
|
licensingDocsUrl: "https://www.telerik.com/kendo-react-ui/components/my-license/"
|
|
16
16
|
});
|
|
17
17
|
export {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@progress/kendo-react-treeview",
|
|
3
|
-
"version": "12.0.0-develop.
|
|
3
|
+
"version": "12.0.0-develop.11",
|
|
4
4
|
"description": "React TreeView displays hierarchical data in a traditional tree structure, supports user interaction. KendoReact TreeView package",
|
|
5
5
|
"author": "Progress",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"sideEffects": false,
|
|
27
27
|
"peerDependencies": {
|
|
28
28
|
"@progress/kendo-licensing": "^1.7.0",
|
|
29
|
-
"@progress/kendo-react-animation": "12.0.0-develop.
|
|
30
|
-
"@progress/kendo-react-common": "12.0.0-develop.
|
|
29
|
+
"@progress/kendo-react-animation": "12.0.0-develop.11",
|
|
30
|
+
"@progress/kendo-react-common": "12.0.0-develop.11",
|
|
31
31
|
"@progress/kendo-svg-icons": "^4.0.0",
|
|
32
32
|
"react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc",
|
|
33
33
|
"react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"package": {
|
|
54
54
|
"productName": "KendoReact",
|
|
55
55
|
"productCode": "KENDOUIREACT",
|
|
56
|
-
"publishDate":
|
|
56
|
+
"publishDate": 1756139262,
|
|
57
57
|
"licensingDocsUrl": "https://www.telerik.com/kendo-react-ui/components/my-license/"
|
|
58
58
|
}
|
|
59
59
|
},
|