UNPKG

azure-devops-ui

Version:

React components for building web UI in Azure DevOps

1 lines 4.72 kB
import{ObservableArray}from"../Core/Observable";import{ListBoxItemType}from"../ListBox";class GroupedItemProvider{constructor(e,t,s,i){this.listItems=new ObservableArray,this.internalGroups=[...t],this.groupedItems=[[]];for(let e=0;e<this.internalGroups.length;e++)this.groupedItems.push([]);this.addItems(e);for(let e=0;e<this.internalGroups.length;e++)this.internalGroups[e].loading&&this.setGroupLoading(this.internalGroups[e].id,!0,this.internalGroups[e].loadingItem);this.omitDividers=!!i,s&&this.addHeaders(1,this.groups.length),this.manageHeaders=!!s}get groups(){return this.internalGroups}get length(){return this.listItems.length}get value(){return this.listItems.value}subscribe(e,t){return this.listItems.subscribe(e,t)}unsubscribe(e,t){return this.listItems.unsubscribe(e,t)}push(...e){return this.addItems(e),e.length}pushGroups(...e){return this.addGroups(this.internalGroups.length,...e),this.internalGroups.length}pop(){var e=this.listItems.pop();return e&&this.removeItems([e]),e}removeAll(e){e=this.listItems.removeAll(e);return this.removeItems(e,!1),e}splice(e,t,...s){t=this.listItems.splice(e,t);return this.removeItems(t,!1),this.addItems(s,!0,e),t}change(e,...t){var s=this.listItems.value.slice(e,t.length);return this.removeItems(s,!1),this.addItems(t,!1),this.listItems.change(e,...t),t.length}spliceGroups(t,s,...e){for(let e=0;e<s;e++){var i,r=t+e+1;this.groupedItems.length>r&&(this.removeItems([...this.groupedItems[r]]),this.manageHeaders&&0<(i=this.groupedItems.findIndex(e=>0<e.length))&&this.groupedItems[i][0].type===ListBoxItemType.Divider&&this.removeItems([this.groupedItems[i][0]]),this.groupedItems.splice(r,1))}var d=this.internalGroups.splice(t,s);return this.addGroups(t,...e),d}setGroupLoading(t,e,s){var i,r,d=this.groups.findIndex(e=>e.id===t);d<0||(i=(r=this.groupedItems[++d]).findIndex(e=>e.type===ListBoxItemType.Loading),!e&&r.length&&-1<i?this.removeItems([r[i]]):e&&-1===i&&(r=s||{id:t+"-loading",type:ListBoxItemType.Loading,groupId:t},this.addItems([r])),this.groups[d-1].loading=e)}addHeaders(e,t=1){for(let s=e;s<e+t;s++){var i,r=this.groups[s-1];0<this.groupedItems[s].length&&(this.groupedItems[s].find(e=>e.type===ListBoxItemType.Header)||this.addItems([{id:r.id+"-header",text:r.name||r.id,type:ListBoxItemType.Header,groupId:r.id}]),!this.groupedItems.some((e,t)=>t<s&&0<e.length)||this.groupedItems[s].find(e=>e.type===ListBoxItemType.Divider)||this.omitDividers||this.addItems([{id:r.id+"-divider",type:ListBoxItemType.Divider,groupId:r.id}]),0<(i=this.groupedItems.findIndex((e,t)=>t>s&&0<e.length)))&&!this.groupedItems[i].find(e=>e.type===ListBoxItemType.Divider)&&!this.omitDividers&&(r=this.groups[i-1],this.addItems([{id:r.id+"-divider",type:ListBoxItemType.Divider,groupId:r.id}]))}}addGroups(e,...s){this.internalGroups.splice(e,0,...s);var i,r=[];for(let t=0;t<s.length;t++){this.groupedItems.splice(e+t+1,0,[]);for(let e=this.groupedItems[0].length-1;0<=e;e--)this.groupedItems[0][e].groupId===s[t].id&&(i=this.groupedItems[0].splice(e,1)[0],this.listItems.splice(e,1),r.unshift(i))}this.addItems(r),this.manageHeaders&&this.addHeaders(e+1,s.length);for(let e=0;e<s.length;e++)s[e].loading&&this.setGroupLoading(s[e].id,!0,s[e].loadingItem)}addItems(t,e=!0,s){if(void 0!==s)for(let e=t.length-1;0<=e;e--)this.addItem(t[e],s);else for(let e=0;e<t.length;e++)this.addItem(t[e],s);e&&this.addToListItems()}addToListItems(){var t=[];for(let e=0;e<this.groupedItems.length;e++)t.push(...this.groupedItems[e]);let s=0,i;var r={};for(let e=0;e<t.length;e++)this.listItems.value[s]===t[e]?(s++,i=void 0):void 0!==i?r[i].push(t[e]):r[i=s]=[t[e]];var d=Object.keys(r);for(let e=d.length-1;0<=e;e--)this.listItems.splice(parseInt(d[e]),0,...r[parseInt(d[e])])}addItem(t,s){let i=0,r=0;const d=t.groupId;void 0!==d&&(i=this.internalGroups.findIndex(e=>e.id===d)+1);for(let e=0;e<i;e++)r+=this.groupedItems[e].length;if(t.type===ListBoxItemType.Divider)this.groupedItems[i].unshift(t);else if(t.type===ListBoxItemType.Header)this.groupedItems[i].length&&this.groupedItems[i][0].type===ListBoxItemType.Divider?(this.groupedItems[i].splice(1,0,t),r++):this.groupedItems[i].unshift(t);else{let e=this.groupedItems[i].length;void 0!==s&&s>=r&&s<=r+this.groupedItems[i].length?(e=s-r,r=s):void 0!==s&&s<r?e=0:r+=this.groupedItems[i].length,this.groupedItems[i].splice(e,0,t),0<i&&1===this.groupedItems[i].length&&this.manageHeaders&&this.addHeaders(i)}}removeItems(i,r=!0){for(let e=0;e<i.length;e++){let t=0,s=0;const h=i[e].groupId;void 0!==h&&(t=this.internalGroups.findIndex(e=>e.id===h)+1);for(let e=0;e<t;e++)s+=this.groupedItems[e].length;var d=this.groupedItems[t],o=d.indexOf(i[e]);d.splice(o,1),r&&this.listItems.splice(s+o,1)}}}export{GroupedItemProvider};