UNPKG

azure-devops-ui

Version:

React components for building web UI in Azure DevOps

1 lines 6.38 kB
import{__extends,__spreadArray}from"tslib";import{ObservableValue}from"../Core/Observable";var Selection=function(n){function e(e){var l=n.call(this,[])||this;return l.selectedRanges=[],l.lockCount=0,l.unselectableRangesValue=[],l.selectedCount=0,l.unselectableCount=0,l.onItemsChanged=function(e,n){var t,s,i=e.index;"change"!==n&&(e.removedItems&&e.removedItems.length&&(t=l.removeUnselectableInternal(i,e.removedItems.length),s=l.unselectInternal(i,e.removedItems.length)),(e.addedItems||e.removedItems)&&(e=adjustRanges(i,n=(e.addedItems?e.addedItems.length:0)-(e.removedItems?e.removedItems.length:0),l.selectedRanges),i=adjustRanges(i,n,l.unselectableRanges),e.length&&l.notify(e,"set"),i.length)&&l.notify(i,"setUnselectable"),t&&l.notify([t],"removeUnselectable"),s)&&l.notify([s],"unselect")},"boolean"==typeof e||void 0===e?l.multiSelect=!!e||!1:(l.alwaysMerge=!!e.alwaysMerge,l.multiSelect=!!e.multiSelect,l.unselectableRanges=e.unselectableRanges||[],l.value=e.selectedRanges||[]),l}return __extends(e,n),Object.defineProperty(e.prototype,"value",{get:function(){return this.selectedRanges},set:function(e){var n=this;this.selectedCount=0,this.selectedRanges=e.map(function(e){return n.selectedCount+=e.endIndex-e.beginIndex+1,{beginIndex:e.beginIndex,endIndex:e.endIndex}}),this.notify(e,"set")},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"unselectableRanges",{get:function(){return this.unselectableRangesValue},set:function(e){var n=this;this.unselectableCount=0,this.unselectableRangesValue=e.map(function(e){return n.unselectableCount+=e.endIndex-e.beginIndex+1,{beginIndex:e.beginIndex,endIndex:e.endIndex}}),this.notify(e,"setUnselectable")},enumerable:!1,configurable:!0}),e.prototype.clear=function(){var e=this.clearSelectedRanges();e&&this.notify(e,"unselect")},e.prototype.clearUnselectable=function(){var e=__spreadArray([],this.unselectableRangesValue,!0);this.unselectableRanges=[],this.unselectableCount=0,this.notify(e,"removeUnselectable")},e.prototype.selectable=function(e){return!indexWithinRanges(e,this.unselectableRanges)},e.prototype.selected=function(e){return indexWithinRanges(e,this.selectedRanges)},e.prototype.addUnselectable=function(e,n){var t=!1,s=e,i=e+(n||1)-1;for(n=n||1;0<n;n--){if(this.selectable(e)){for(var l=0,d=void 0;l<this.unselectableRanges.length;l++){var a=this.unselectableRanges[l];if(e<a.beginIndex){e===a.beginIndex-1&&(d=a).beginIndex--;break}if(e===a.endIndex+1){l<this.unselectableRanges.length-1&&e===this.unselectableRanges[l+1].beginIndex-1?((d=a).endIndex=this.unselectableRanges[l+1].endIndex,this.unselectableRanges.splice(l+1,1)):(d=a).endIndex++;break}}d||this.unselectableRanges.splice(l,0,d={beginIndex:e,endIndex:e}),t=!0,this.unselectableCount++}e++}t&&this.notify([{beginIndex:s,endIndex:i}],"addUnselectable")},e.prototype.removeUnselectable=function(e,n){e=this.removeUnselectableInternal(e,n);e&&this.notify([e],"removeUnselectable")},e.prototype.select=function(e,n,t,s){if(void 0===t&&(t=this.alwaysMerge),void 0===s&&(s=this.multiSelect),!this.lockCount){var i=e,l=i+(n||1)-1,d=!1,a=void 0;if(s)for(t||(a=this.clearSelectedRanges()),n=n||1;0<n;n--)if(this.selected(e)||!this.selectable(e))e++;else{for(var c=0,o=void 0;c<this.selectedRanges.length;c++){var r=this.selectedRanges[c];if(e<r.beginIndex){e===r.beginIndex-1&&(o=r).beginIndex--;break}if(e===r.endIndex+1){c<this.selectedRanges.length-1&&e===this.selectedRanges[c+1].beginIndex-1?((o=r).endIndex=this.selectedRanges[c+1].endIndex,this.selectedRanges.splice(c+1,1)):(o=r).endIndex++;break}}o||this.selectedRanges.splice(c,0,o={beginIndex:e,endIndex:e}),this.selectedCount++,e++,d=!0}else!this.selected(e)&&this.selectable(e)&&(a=this.clearSelectedRanges(),this.selectedRanges.push(o={beginIndex:e,endIndex:e}),this.selectedCount++,d=!0);a&&this.notify(a,"unselect"),d&&this.notify([{beginIndex:i,endIndex:l}],"select")}},e.prototype.toggle=function(e,n,t){void 0===n&&(n=this.alwaysMerge),void 0===t&&(t=this.multiSelect),this.selected(e)?this.unselect(e):this.select(e,1,n,t)},e.prototype.unselect=function(e,n){e=this.unselectInternal(e,n);e&&this.notify([e],"unselect")},e.prototype.lock=function(){this.lockCount++},e.prototype.unlock=function(){this.lockCount--},e.prototype.removeUnselectableInternal=function(e,n){var t=e,s=t+(n||1)-1,i=!1;for(n=n||1;0<n;n--){if(this.selectable(e));else for(var l=0;l<this.unselectableRanges.length;l++){var d=this.unselectableRanges[l];if(!(e<d.beginIndex)&&(e>=d.beginIndex&&e<=d.endIndex)){e===d.beginIndex?d.beginIndex++:e===d.endIndex?d.endIndex--:(this.unselectableRanges.splice(l+1,0,{beginIndex:e+1,endIndex:d.endIndex}),d.endIndex=e-1),d.beginIndex>d.endIndex&&this.unselectableRanges.splice(l,1),this.unselectableCount--,i=!0;break}}e++}if(i)return{beginIndex:t,endIndex:s}},e.prototype.unselectInternal=function(e,n){var t=!1,s=e,i=s+(n||1)-1;if(!this.lockCount)for(n=n||1;0<n;n--){if(this.selected(e))for(var l=0;l<this.selectedRanges.length;l++){var d=this.selectedRanges[l];if(!(e<d.beginIndex)&&(e>=d.beginIndex&&e<=d.endIndex)){e===d.beginIndex?d.beginIndex++:e===d.endIndex?d.endIndex--:(this.selectedRanges.splice(l+1,0,{beginIndex:e+1,endIndex:d.endIndex}),d.endIndex=e-1),d.beginIndex>d.endIndex&&this.selectedRanges.splice(l,1),this.selectedCount--,t=!0;break}}e++}if(t)return{beginIndex:s,endIndex:i}},e.prototype.clearSelectedRanges=function(){var e;if(!this.lockCount&&0<this.selectedRanges.length)return e=__spreadArray([],this.selectedRanges,!0),this.selectedRanges=[],this.selectedCount=0,e},e}(ObservableValue);function indexWithinRanges(e,n){if(n)for(var t=0,s=n;t<s.length;t++){var i=s[t];if(e>=i.beginIndex&&e<=i.endIndex)return!0}return!1}function adjustRanges(e,n,t){for(var s=[],i=0;i<t.length;i++){var l,d=t[i];e<=d.beginIndex?0<i&&d.beginIndex+n===t[i-1].endIndex+1?(t[i-1].endIndex=d.endIndex+n,t.splice(i--,1),s.push(t[i])):(d.beginIndex+=n,d.endIndex+=n,s.push(d)):e>d.beginIndex&&e<=d.endIndex&&(l={beginIndex:e+n,endIndex:d.endIndex+n},t.splice(++i,0,l),s.push(l),d.endIndex=e-1,s.push(d))}return s}function compareSelectionRanges(e,n){for(var t=[],s=0;s<e.length;s++)for(var i=(l=e[s]).beginIndex;i<=l.endIndex;i++)indexWithinRanges(i,n)||t.push(-1*i);for(s=0;s<n.length;s++)for(var l,i=(l=n[s]).beginIndex;i<=l.endIndex;i++)indexWithinRanges(i,e)||t.push(i);return t}export{Selection,indexWithinRanges,compareSelectionRanges};