azure-devops-ui
Version:
React components for building web UI in Azure DevOps
1 lines • 9.13 kB
JavaScript
import{__extends,__spreadArray}from"tslib";import*as React from"react";var ObservableLike,Observable=function(){function e(){this.observers={},this.subscriberCount=0}return e.prototype.notify=function(e,t,r){function s(e,t,r){try{e(t,r)}catch(e){console.warn(e),e&&"function"==typeof ErrorEvent&&window.dispatchEvent(new ErrorEvent("error",{error:e,filename:"Observable.ts",message:e.message}))}}if(this.observers[t])for(var n=this.observers[t].slice(),i=0;i<n.length;i++)s(n[i],e,t);if(this.observers[""])for(n=this.observers[""].slice(),i=0;i<n.length;i++)s(n[i],e,t);r&&(this.events||(this.events=[]),this.events.push({action:t,value:e}))},e.prototype.subscribe=function(e,t){if(this.observers[t=t||""]||(this.observers[t]=[]),this.observers[t].push(e),this.subscriberCount++,this.events)for(var r=0,s=this.events;r<s.length;r++){var n=s[r];t&&n.action!==t||e(n.value,n.action)}return e},e.prototype.unsubscribe=function(e,t){this.observers[t=t||""]&&0<=(e=this.observers[t].indexOf(e))&&(this.observers[t].splice(e,1),this.subscriberCount--)},e}(),ObservableValue=(!function(e){function s(e){return e&&"function"==typeof e.subscribe}e.isObservable=s,e.getValue=function(e){return s(e)?e.value:e},e.subscribe=function(e,t,r){return s(e)?e.subscribe(t,r):function(){}},e.unsubscribe=function(e,t,r){s(e)&&e.unsubscribe(t,r)}}(ObservableLike=ObservableLike||{}),function(r){function e(e){var t=r.call(this)||this;return t.v=e,t}return __extends(e,r),Object.defineProperty(e.prototype,"value",{get:function(){return this.v},set:function(e){this.v=e,this.notify(this.v,"set")},enumerable:!1,configurable:!0}),e}(Observable)),ObservableObject=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.objects={},e}return __extends(e,t),e.prototype.add=function(e,t){this.objects.hasOwnProperty(e)||(this.objects[e]=t,this.notify({key:e,value:t},"add"))},e.prototype.get=function(e){return this.objects[e]},e.prototype.set=function(e,t){this.objects.hasOwnProperty(e)?(this.objects[e]=t,this.notify({key:e,value:t},"replace")):this.add(e,t)},e.prototype.keys=function(){return Object.keys(this.objects)},e}(Observable),ObservableArray=function(r){function e(e){void 0===e&&(e=[]);var t=r.call(this)||this;return t.internalItems=e||[],t}return __extends(e,r),e.prototype.change=function(e){for(var t,r=[],s=1;s<arguments.length;s++)r[s-1]=arguments[s];return(t=this.internalItems).splice.apply(t,__spreadArray([e,r.length],r,!1)),this.notify({index:e,changedItems:r},"change"),r.length},e.prototype.changeOrderedBatch=function(e){for(var t,r=[],s=0,n=e;s<n.length;s++){var i=n[s];void 0!==i.items&&i.items.length&&((t=this.internalItems).splice.apply(t,__spreadArray([i.start,i.items.length],i.items,!1)),r.push.apply(r,i.items))}return this.notify({index:this.getMinItemIndexByBatch(e),changedItems:r},"change"),e.reduce(function(e,t){return e+(t.items?t.items.length:0)},0)},Object.defineProperty(e.prototype,"length",{get:function(){return this.internalItems.length},enumerable:!1,configurable:!0}),e.prototype.push=function(){for(var e,t,r=[],s=0;s<arguments.length;s++)r[s]=arguments[s];return r.length&&(t=this.internalItems.length,(e=this.internalItems).push.apply(e,r),this.notify({addedItems:r,index:t},"push")),r.length},e.prototype.pop=function(){var e=this.internalItems.pop();return void 0!==e&&this.notify({index:this.internalItems.length,removedItems:[e]},"pop"),e},e.prototype.removeAll=function(e){for(var t=[],r=[],s=0,n=this.internalItems;s<n.length;s++){var i=n[s];(!e||e(i)?t:r).push(i)}if(0<t.length){this.internalItems.splice(0,this.internalItems.length);for(var o=0,a=r;o<a.length;o++){i=a[o];this.internalItems.push(i)}this.notify({index:0,removedItems:t},"removeAll")}return t},e.prototype.splice=function(e,t){for(var r=[],s=2;s<arguments.length;s++)r[s-2]=arguments[s];var n=(n=this.internalItems).splice.apply(n,__spreadArray([e,t],r,!1));return this.notify({addedItems:r,index:e,removedItems:n},"splice"),n},e.prototype.spliceWithCustomAction=function(e,t,r){for(var s=[],n=3;n<arguments.length;n++)s[n-3]=arguments[n];var i=(i=this.internalItems).splice.apply(i,__spreadArray([e,t],s,!1));return this.notify({addedItems:s,index:e,removedItems:i},r),i},e.prototype.spliceOrderedBatch=function(e){for(var t,r=[],s=[],n=0,i=e;n<i.length;n++){var o=i[n],a=void 0;void 0!==o.itemsToAdd&&o.itemsToAdd.length?(a=(t=this.internalItems).splice.apply(t,__spreadArray([o.start,o.deleteCount],o.itemsToAdd,!1)),r.push.apply(r,o.itemsToAdd)):a=this.internalItems.splice(o.start,o.deleteCount),s.push.apply(s,a)}return this.notify({addedItems:r,index:this.getMinItemIndexByBatch(e),removedItems:s},"splice"),s},Object.defineProperty(e.prototype,"value",{get:function(){return this.internalItems},set:function(e){var t;if(e===this.internalItems)t=this.internalItems;else if(t=this.internalItems.slice(),this.internalItems.length=0,e.length)for(var r=0,s=e;r<s.length;r++){var n=s[r];this.internalItems.push(n)}this.notify({addedItems:e,index:0,removedItems:t},"splice")},enumerable:!1,configurable:!0}),e.prototype.getMinItemIndexByBatch=function(e){return e.reduce(function(e,t){return t.start<e.start?t:e}).start},e}(Observable),ObservableCollection=function(i){function e(){var e=null!==i&&i.apply(this,arguments)||this;return e.collections=[],e.items=[],e}return __extends(e,i),Object.defineProperty(e.prototype,"length",{get:function(){return this.subscriberCount||this.recalculateItems(),this.items.length},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.subscriberCount||this.recalculateItems(),this.items},enumerable:!1,configurable:!0}),e.prototype.push=function(e,t){var r,s;if(ObservableLike.isObservable(e)?(r={observable:s=e,subscriber:n=this.getSubscriber(this.collections.length,t),transformItems:t,items:[]},s=s.value,this.subscriberCount&&ObservableLike.subscribe(r.observable,n)):e.length&&(r={items:this.transformItems(s=e,t)}),r&&(this.collections.push(r),this.subscriberCount)&&s.length){for(var n=this.transformItems(s,t),i=0,o=n;i<o.length;i++){var a=o[i];this.items.push(a)}this.notify({addedItems:n,index:this.items.length-n.length},"push")}},e.prototype.subscribe=function(e,t){e=i.prototype.subscribe.call(this,e,t);if(1===this.subscriberCount){this.recalculateItems();for(var r=0,s=this.collections;r<s.length;r++){var n=s[r];n.subscriber&&n.observable.subscribe(n.subscriber)}}return e},e.prototype.unsubscribe=function(e,t){if(i.prototype.unsubscribe.call(this,e,t),0===this.subscriberCount)for(var r=0,s=this.collections;r<s.length;r++){var n=s[r];n.subscriber&&n.observable.unsubscribe(n.subscriber)}},e.prototype.recalculateItems=function(){for(var e=this.items.length=0,t=this.collections;e<t.length;e++){var r=t[e];r.observable&&(r.items=this.transformItems(r.observable.value,r.transformItems));for(var s=0,n=r.items;s<n.length;s++){var i=n[s];this.items.push(i)}}},e.prototype.transformItems=function(e,t){if(e)if(t)for(var r=[],s=0,n=e;s<n.length;s++){var i=t(n[s]);void 0!==i&&r.push(i)}else r=e;else r=[];return r},e.prototype.getSubscriber=function(c,b){var h=this;return function(e){for(var t=e.index,r=0;r<c;r++)t+=h.collections[r].items.length;if(e.changedItems){var s=h.transformItems(e.changedItems,b);(n=h.items).splice.apply(n,__spreadArray([t,e.changedItems.length],s,!1)),h.notify({changedItems:s,index:t},"change")}else{for(var n=h.transformItems(e.removedItems,b),s=h.transformItems(e.addedItems,b),e=(h.items.splice(t,n.length),h.items.splice(t)),i=0,o=s;i<o.length;i++){var a=o[i];h.items.push(a)}for(var u=0,l=e;u<l.length;u++){a=l[u];h.items.push(a)}h.notify({removedItems:n,addedItems:s,index:t},"splice")}}},e}(Observable),ReadyableObservableArray=function(r){function e(e,t){void 0===t&&(t=!1);e=r.call(this,e=void 0===e?[]:e)||this;return e.ready=new ObservableValue(t),e}return __extends(e,r),e}(ObservableArray);function useObservable(e){var t=React.useState(e)[0],r=React.useState(function(){return new ObservableValue(t)})[0];return[r,function(e){r.value="function"==typeof e?e(r.value):e}]}function useObservableArray(e){var e=React.useState(e)[0],t=React.useState(new ObservableArray(e));return[t[0],function(e){t[0].value="function"==typeof e?e(t[0].value):e}]}function useDerivedObservable(e,t,r){var s=useObservable(t(e.value)),n=s[0],i=s[1],o=React.useCallback(t,r);return useSubscription(e,function(e){e=o(e);i(e)},r),n}function useSubscription(t,e,r){void 0===r&&(r=[]);var s=React.useRef(!1),n=React.useCallback(e,r);React.useEffect(function(){s.current?n(t.value):s.current=!0},[t]),React.useEffect(function(){function e(){return n(t.value)}return t.subscribe(e),function(){return t.unsubscribe(e)}},[t,n])}function useDebouncedSubscription(e,t,r,s){void 0===s&&(s=[]);var n=React.useRef(null);useSubscription(e,function(e){n.current&&clearTimeout(n.current),n.current=setTimeout(function(){r(e),n.current=null},t)},__spreadArray([t],s,!0))}export{Observable,ObservableLike,ObservableValue,ObservableObject,ObservableArray,ObservableCollection,ReadyableObservableArray,useObservable,useObservableArray,useDerivedObservable,useSubscription,useDebouncedSubscription};