UNPKG

azure-devops-ui

Version:

React components for building web UI in Azure DevOps

1 lines 3.16 kB
import*as React from"react";import{Observable}from"../Core/Observable";var FilterOperatorType;!function(t){t.and="and",t.or="or"}(FilterOperatorType=FilterOperatorType||{});const FILTER_CHANGE_EVENT="filter-changed",FILTER_APPLIED_EVENT="filter-applied",FILTER_RESET_EVENT="reset-filters";class Filter{constructor(t={},e){this.observable=e||new Observable,this.applyMode=!!t.useApplyMode,this.defaultState=Object.assign({},t.defaultState),this.currentState=Object.assign({},this.defaultState),this.customValueComparers=Object.assign({},t.customValueComparers),this.applyMode?this.appliedState=Object.assign({},this.currentState):this.appliedState=this.currentState}subscribe(t,e){return this.observable.subscribe(t,e)}unsubscribe(t,e){this.observable.unsubscribe(t,e)}getState(){return Object.assign({},this.currentState)}getAppliedState(){return Object.assign({},this.appliedState)}getDefaultState(){return this.defaultState}setDefaultState(t){this.defaultState=t}setState(t,e=!1){var r=this.currentState;if(this.currentState=Object.assign({},t),this.applyMode||(this.appliedState=this.currentState),!e){var a=Object.assign({},t);for(const s in r)t.hasOwnProperty(s)||(a[s]=null);this._triggerStateChange(a)}}getFilterItemState(t){return this.currentState[t]}getAppliedFilterItemState(t){return this.appliedState[t]}getFilterItemValue(t){t=this.currentState[t];if(t)return t.value}setFilterItemState(t,e){this.currentState[t]=e;var r={};r[t]=e,this._triggerStateChange(r)}reset(t=!1){this.setState(this.defaultState,t),t||this._raiseEventAndCallListeners(FILTER_RESET_EVENT,{})}resetFilterItemState(t){var e=this.defaultState[t];this.setFilterItemState(t,e)}applyChanges(){this.appliedState=Object.assign({},this.currentState),this._raiseEventAndCallListeners(FILTER_APPLIED_EVENT,this.appliedState)}usesApplyMode(){return this.applyMode}hasChangesToApply(){return!this.statesAreEqual(this.appliedState,this.currentState)}hasChangesToReset(){return!this.statesAreEqual(this.defaultState,this.currentState)}statesAreEqual(t,e){return this._checkStateEquality(t,e)&&this._checkStateEquality(e,t)}filterItemStatesAreEqual(t,e,r){return this._checkFilterItemStateEquality(t,e,r)}_triggerStateChange(t){this._raiseEventAndCallListeners(FILTER_CHANGE_EVENT,t),this.applyMode||this._raiseEventAndCallListeners(FILTER_APPLIED_EVENT,t)}_raiseEventAndCallListeners(t,e){this.observable.notify(e,t)}_checkStateEquality(t,e){for(const r in t)if(!this._checkFilterItemStateEquality(r,t[r],e[r]))return!1;return!0}_checkFilterItemStateEquality(e,t,r){var a=t&&t.value,s=r&&r.value;if(Array.isArray(a)){if(Array.isArray(s)){if(a.length!==s.length)return!1;for(let t=0;t<a.length;t++)if(!this._checkValueEquality(e,a[t],s[t]))return!1}else if(0!==a.length||s)return!1}else{if(!this._checkValueEquality(e,a,s))return!1;if(Array.isArray(s)&&0!==s.length)return!1}return!0}_checkValueEquality(t,e,r){return this.customValueComparers[t]?this.customValueComparers[t](e,r):(!e||e===r)&&!!e==!!r}}const FilterContext=React.createContext({filter:null,filterToggled:null});export{FilterOperatorType,FILTER_CHANGE_EVENT,FILTER_APPLIED_EVENT,FILTER_RESET_EVENT,Filter,FilterContext};