UNPKG

azure-devops-ui

Version:

React components for building web UI in Azure DevOps

1 lines 4.27 kB
import{ObservableArray}from"../Core/Observable";class TreeItemProvider{constructor(e=[]){this.itemMap=new Map;var t=[];this.rootItems=[...e],this.addItems(e,void 0,t),this.tableItems=new ObservableArray(t)}get length(){return this.tableItems.length}get roots(){return this.rootItems}get value(){return this.tableItems.value}subscribe(e,t){return this.tableItems.subscribe(e,t)}unsubscribe(e,t){return this.tableItems.unsubscribe(e,t)}add(e,t,i){return this.splice(t,void 0,[{insertAfter:i,items:[e]}])}clear(){this.tableItems.splice(0,this.tableItems.length),this.rootItems.splice(0,this.rootItems.length)}collapse(e){e.expanded&&this.toggle(e)}expand(e,t){let i=this.itemMap.get(e);if(i){for(var s=[];i.underlyingItem.expanded||s.push(i),i=i.parentItem,t&&i;);for(let e=s.length-1;0<=e;e--)this.toggle(s[e].underlyingItem)}}remove(e,t){if(!t){if(-1===(i=this.indexOf(e)))return;var i=this.tableItems.value[i];t=i.parentItem&&i.parentItem.underlyingItem}return this.splice(t,[e])}splice(s,t,l){let r,n=!1,m=-1,d=this.rootItems;if(s){if(!(r=this.itemMap.get(s)))return;m=this.indexOf(s),d=r.underlyingItem.childItems||[]}if(t=t&&t.slice(0),l)for(let i=0;i<l.length;i++){var h=!s||0<=m&&s.expanded?[]:void 0,a=l[i];let e=m,t=0;if(a.insertAfter){if(-1===(t=d.indexOf(a.insertAfter)))continue;var I=this.indexOf(a.insertAfter,m+1);-1!==I&&(e=I+this.getTableChildCount(a.insertAfter))}else t--;this.addItems(a.items,r,h),d.splice(t+1,0,...a.items),r&&!r.underlyingItem.childItems&&(r.underlyingItem.childItems=d,n=!0),h&&(this.tableItems.splice(e+1,0,...h),n=!0)}if(t)for(let e=0;e<t.length;e++){var i,o=t[e],p=!s||s.expanded?[]:void 0;-1!==(i=d.indexOf(o))&&(this.removeItem(o,p),d.splice(i,1),0===d.length&&s&&(delete s.childItems,n=!0),-1!==(i=this.indexOf(o,m+1))&&p)&&(this.tableItems.splice(i,p.length),n=!0)}n&&r&&-1!==m&&this.tableItems.change(m,r)}spliceBatch(e){var t=[];const m=new ObservableArray(this.tableItems.value);for(const p of e){let s,l=!1,r=-1,n=this.rootItems;if(p.parentItem){if(!(s=this.itemMap.get(p.parentItem)))return;r=this.indexOf(p.parentItem,void 0,m),n=s.underlyingItem.childItems||[]}if(p.itemsToRemove&&(p.itemsToRemove=p.itemsToRemove.slice(0)),p.itemsToAdd)for(let i=0;i<p.itemsToAdd.length;i++){var d=!p.parentItem||0<=r&&p.parentItem.expanded?[]:void 0,h=p.itemsToAdd[i];let e=r,t=0;if(h.insertAfter){if(-1===(t=n.indexOf(h.insertAfter)))continue;var a=this.indexOf(h.insertAfter,r+1,m);-1!==a&&(e=a+this.getTableChildCount(h.insertAfter))}else t--;this.addItems(h.items,s,d),n.splice(t+1,0,...h.items),s&&!s.underlyingItem.childItems&&(s.underlyingItem.childItems=n,l=!0),d&&(a=p.ignoreDuplicatesOnAdding?d.filter(t=>!m.value.some(e=>e.underlyingItem==t.underlyingItem)):d,m.splice(e+1,0,...a),l=!0)}if(p.itemsToRemove)for(let e=0;e<p.itemsToRemove.length;e++){var i,I=p.itemsToRemove[e],o=!p.parentItem||p.parentItem.expanded?[]:void 0;-1!==(i=n.indexOf(I))&&(this.removeItem(I,o),n.splice(i,1),0===n.length&&p.parentItem&&(delete p.parentItem.childItems,l=!0),-1!==(i=this.indexOf(I,r+1,m))&&o)&&(m.splice(i,o.length),l=!0)}l&&s&&-1!==r&&t.push({start:r,items:[s]})}this.tableItems.splice(0,this.tableItems.length,...m.value),t.length&&this.tableItems.changeOrderedBatch(t)}toggle(t){var e=this.indexOf(t);if(t.expanded=!t.expanded,0<=e&&t.childItems){var i=[];for(let e=0;e<t.childItems.length;e++)this.getTableItems(t.childItems[e],i);t.expanded?this.tableItems.splice(e+1,0,...i):this.tableItems.splice(e+1,i.length)}}addItems(t,i,s){for(let e=0;e<t.length;e++){var l=t[e],r={depth:i?i.depth+1:0,parentItem:i,underlyingItem:l};this.itemMap.set(l,r),s&&s.push(r),l.childItems&&this.addItems(l.childItems,r,l.expanded?s:void 0)}}getTableItems(e,t){var i=this.itemMap.get(e);if(i&&(t.push(i),e.childItems)&&e.expanded)for(const s of e.childItems)this.getTableItems(s,t)}getTableChildCount(t){let i=0;if(t.childItems&&t.expanded)for(let e=0;e<t.childItems.length;e++)i+=this.getTableChildCount(t.childItems[e])+1;return i}indexOf(t,i=0,s){void 0===s&&(s=this.tableItems);for(let e=i;e<s.length;e++)if(t===s.value[e].underlyingItem)return e;return-1}removeItem(t,i){if(this.itemMap.delete(t),i&&i.push(t),t.childItems)for(let e=0;e<t.childItems.length;e++)this.removeItem(t.childItems[e],t.expanded?i:void 0)}}export{TreeItemProvider};