@univerjs/sheets-filter 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var se=Object.defineProperty;var ie=(r,i,e)=>i in r?se(r,i,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[i]=e;var g=(r,i,e)=>(ie(r,typeof i!="symbol"?i+"":i,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("@univerjs/core"),I=require("@wendellhu/redi"),y=require("rxjs"),M=require("@univerjs/sheets");var E=(r=>(r.EQUAL="equal",r.GREATER_THAN="greaterThan",r.GREATER_THAN_OR_EQUAL="greaterThanOrEqual",r.LESS_THAN="lessThan",r.LESS_THAN_OR_EQUAL="lessThanOrEqual",r.NOT_EQUALS="notEqual",r))(E||{});const V={operator:E.GREATER_THAN,fn:(r,i)=>N(r)?r>i:!1},Q={operator:E.GREATER_THAN_OR_EQUAL,fn:(r,i)=>N(r)?r>=i:!1},G={operator:E.LESS_THAN,fn:(r,i)=>N(r)?r<i:!1},J={operator:E.LESS_THAN_OR_EQUAL,fn:(r,i)=>N(r)?r<=i:!1},X={operator:E.EQUAL,fn:(r,i)=>N(r)?r===i:!1},j={operator:E.NOT_EQUALS,fn:(r,i)=>{if(typeof i=="string"){if(i===" ")return r!=null;const e=K(r);return e&&ae(i)?!Z(i).test(e):e!==i}return N(r)?r!==i:!0}},Y=new Map([]),ne=[V,Q,G,J,X,j];ne.forEach(r=>{Y.set(r.operator,r)});function oe(r){return!!r}const le={fn:(r,i)=>{const e=K(r);return e===null?i==="":Z(i).test(e)}};function B(r){return r?Y.get(r):le}function N(r){return typeof r=="number"}function D(r){return!!(typeof r=="number"||typeof r=="string"&&d.isNumeric(r))}function K(r){return typeof r=="boolean"||r==null?null:typeof r=="string"?r:r.toString()}function ae(r){return typeof r=="number"?!1:r.indexOf("*")!==-1||r.indexOf("?")!==-1}function Z(r){const i=r.replace(/[.+^${}()|[\]\\]/g,"\\$&").replaceAll("?",".").replace(/[*]/g,".$&");return new RegExp(`^${i}$`)}const U=()=>new Set;class P extends d.Disposable{constructor(e,t,s){super();g(this,"_filteredOutRows$",new y.BehaviorSubject(U()));g(this,"filteredOutRows$",this._filteredOutRows$.asObservable());g(this,"_hasCriteria$",new y.BehaviorSubject(!1));g(this,"hasCriteria$",this._hasCriteria$.asObservable());g(this,"_filterColumnByIndex",new Map);g(this,"_alreadyFilteredOutRows",U());g(this,"_range");this.unitId=e,this.subUnitId=t,this._worksheet=s}get filteredOutRows(){return this._filteredOutRows$.getValue()}set filteredOutRows(e){this._alreadyFilteredOutRows=e,this._filteredOutRows$.next(e)}dispose(){super.dispose(),this._filteredOutRows$.complete(),this._hasCriteria$.complete()}serialize(){const e={ref:d.Rectangle.clone(this._range),filterColumns:this._getAllFilterColumns(!0).sort(([t],[s])=>t-s).map(([t,s])=>s.serialize())};return this._alreadyFilteredOutRows&&(e.cachedFilteredOut=Array.from(this._alreadyFilteredOutRows).sort()),e}static deserialize(e,t,s,n){const o=new P(e,t,s);return o._dump(n),o}_dump(e){var t;this.setRange(e.ref),(t=e.filterColumns)==null||t.forEach(s=>this._setCriteriaWithoutReCalc(s.colId,s)),e.cachedFilteredOut&&(this._alreadyFilteredOutRows=new Set(e.cachedFilteredOut),this._emit()),this._emitHasCriteria()}isRowFiltered(e){return this._alreadyFilteredOutRows.has(e)}getRange(){if(!this._range)throw new Error("[FilterModel] could not get range before a range is set!");return this._range}getFilteredOutRowsExceptCol(e){return this._getAllFilterColumns(!0).filter(([t])=>t!==e).reduce((t,[,s])=>{const n=s.calc({getAlreadyFilteredOutRows:()=>t});return n?d.mergeSets(t,n):t},new Set)}setRange(e){this._range=e,this._getAllFilterColumns(!0).forEach(([t,s])=>{s.setRangeAndColumn({startRow:e.startRow,endRow:e.endRow,startColumn:t,endColumn:t},t)})}setCriteria(e,t,s=!1){if(!this._range)throw new Error("[FilterModel] could not set criteria before a range is set!");if(!t){this._removeCriteria(e),this._rebuildAlreadyFilteredOutRowsWithCache(),s&&this._reCalcAllColumns(),this._emit(),this._emitHasCriteria();return}this._setCriteriaWithoutReCalc(e,t),s&&(this._rebuildAlreadyFilteredOutRowsWithCache(),this._reCalcWithNoCacheColumns(),this._emit(),this._emitHasCriteria())}getAllFilterColumns(){return this._getAllFilterColumns(!0)}getFilterColumn(e){var t;return(t=this._filterColumnByIndex.get(e))!=null?t:null}reCalc(){this._reCalcAllColumns(),this._emit()}_getAllFilterColumns(e=!1){const t=Array.from(this._filterColumnByIndex.entries());return e?t:t.map(([s,n])=>n)}_reCalcAllColumns(){this._alreadyFilteredOutRows=U(),this._getAllFilterColumns().forEach(e=>e.__clearCache()),this._reCalcWithNoCacheColumns()}_setCriteriaWithoutReCalc(e,t){const s=this._range;if(!s)throw new Error("[FilterModel] could not set criteria before a range is set!");const{startColumn:n,endColumn:o}=s;if(e>o||e<n)throw new Error(`[FilterModel] could not set criteria on column ${e} which is out of range!`);let l;this._filterColumnByIndex.has(e)?l=this._filterColumnByIndex.get(e):(l=new k(this.unitId,this.subUnitId,this._worksheet,t,{getAlreadyFilteredOutRows:()=>this._alreadyFilteredOutRows}),l.setRangeAndColumn(s,e),this._filterColumnByIndex.set(e,l)),l.setCriteria(t)}_removeCriteria(e){const t=this._filterColumnByIndex.get(e);t&&(t.dispose(),this._filterColumnByIndex.delete(e))}_emit(){this._filteredOutRows$.next(this._alreadyFilteredOutRows)}_emitHasCriteria(){this._hasCriteria$.next(this._filterColumnByIndex.size>0)}_rebuildAlreadyFilteredOutRowsWithCache(){const e=this._getAllFilterColumns().filter(t=>t.hasCache()).reduce((t,s)=>d.mergeSets(t,s.filteredOutRows),new Set);this._alreadyFilteredOutRows=e}_reCalcWithNoCacheColumns(){const e=this._getAllFilterColumns().filter(t=>!t.hasCache());for(const t of e){const s=t.reCalc();s&&(this._alreadyFilteredOutRows=d.mergeSets(this._alreadyFilteredOutRows,s))}}}class k extends d.Disposable{constructor(e,t,s,n,o){super();g(this,"_filteredOutRows",null);g(this,"_filterFn",null);g(this,"_range",null);g(this,"_column",0);g(this,"_filterByValues",!1);this.unitId=e,this.subUnitId=t,this._worksheet=s,this._criteria=n,this._filterColumnContext=o}get filteredOutRows(){return this._filteredOutRows}dispose(){super.dispose(),this._filteredOutRows=null}__clearCache(){this._filteredOutRows=null}serialize(){if(!this._criteria)throw new Error("[FilterColumn]: could not serialize without a filter column!");return d.Tools.deepClone({...this._criteria,colId:this._column})}hasCache(){return this._filteredOutRows!==null}setRangeAndColumn(e,t){this._range=e,this._column=t}setCriteria(e){this._criteria=e,this._generateFilterFn(),this._filteredOutRows=null}getColumnData(){return d.Tools.deepClone(this._criteria)}reCalc(){return this._filteredOutRows=this.calc(this._filterColumnContext),this._filteredOutRows}calc(e){if(!this._filterFn)throw new Error("[FilterColumn] cannot calculate without a filter fn!");if(!this._range)throw new Error("[FilterColumn] cannot calculate without a range!");if(typeof this._column!="number")throw new TypeError("[FilterColumn] cannot calculate without a column offset!");const t=this._column,s={startColumn:t,endColumn:t,startRow:this._range.startRow+1,endRow:this._range.endRow},n=new Set,o=e.getAlreadyFilteredOutRows();for(const l of this._worksheet.iterateByColumn(s,!1,!1)){const{row:a,rowSpan:u,col:c}=l;if(o.has(a)&&(!u||u===1))continue;const f=this._filterByValues?d.extractPureTextFromCell(this._worksheet.getCell(a,c)):ge(this._worksheet,a,c);if(!this._filterFn(f)&&(n.add(a),u))for(let _=1;_<u;_++)n.add(a+_)}return n}_generateFilterFn(){this._criteria&&(this._filterFn=ce(this._criteria),this._filterByValues=!!this._criteria.filters)}}function ce(r){if(r.filters)return ue(r.filters);if(r.customFilters)return he(r.customFilters);throw new Error("[FilterModel]: other types of filters are not supported yet.")}function ue(r){const i=!!r.blank,e=new Set(r.filters);return t=>t===void 0||t===""?i:e.has(typeof t=="string"?t:`${t}`)}function he(r){const i=r.customFilters.map(e=>_e(e));return me(i)?r.and?de(i):fe(i):i[0]}function de(r){const[i,e]=r;return t=>i(t)&&e(t)}function fe(r){const[i,e]=r;return t=>i(t)||e(t)}function me(r){return r.length===2}function _e(r){const i=r.val;if(r.operator===E.NOT_EQUALS&&!D(i))return s=>j.fn(s,i);if(oe(r.operator)){if(!D(i))return()=>!1;const s=B(r.operator),n=Number(i);return o=>s.fn(o,n)}const e=B(r.operator);return t=>e.fn(t,i)}function ge(r,i,e){const t=r.getCell(i,e);if(!t)return null;const s=r.getCellRaw(i,e);return t&&!s?q(t):s?t.t===d.CellValueType.NUMBER&&typeof t.v=="string"?s.v:q(s):null}function q(r){var t,s;const i=(s=(t=r.p)==null?void 0:t.body)==null?void 0:s.dataStream;if(i)return i.trimEnd();const e=r.v;return typeof e=="string"?r.t===d.CellValueType.BOOLEAN?e.toUpperCase():e:typeof e=="number"?r.t===d.CellValueType.BOOLEAN?e?"TRUE":"FALSE":e:typeof e=="boolean"?e?"TRUE":"FALSE":""}const C={id:"sheet.mutation.set-filter-range",type:d.CommandType.MUTATION,handler:(r,i)=>{const{subUnitId:e,unitId:t,range:s}=i;return r.get(exports.SheetsFilterService).ensureFilterModel(t,e).setRange(s),!0}},F={id:"sheet.mutation.set-filter-criteria",type:d.CommandType.MUTATION,handler:(r,i)=>{const{subUnitId:e,unitId:t,criteria:s,col:n,reCalc:o=!0}=i,a=r.get(exports.SheetsFilterService).getFilterModel(t,e);return a?(a.setCriteria(n,s,o),!0):!1}},T={id:"sheet.mutation.remove-filter",type:d.CommandType.MUTATION,handler:(r,i)=>{const{unitId:e,subUnitId:t}=i;return r.get(exports.SheetsFilterService).removeFilterModel(e,t)}},z={id:"sheet.mutation.re-calc-filter",type:d.CommandType.MUTATION,handler:(r,i)=>{const{unitId:e,subUnitId:t}=i,n=r.get(exports.SheetsFilterService).getFilterModel(e,t);return n?(n.reCalc(),!0):!1}};var Ce=Object.defineProperty,Re=Object.getOwnPropertyDescriptor,pe=(r,i,e,t)=>{for(var s=t>1?void 0:t?Re(i,e):i,n=r.length-1,o;n>=0;n--)(o=r[n])&&(s=(t?o(i,e,s):o(s))||s);return t&&s&&Ce(i,e,s),s},b=(r,i)=>(e,t)=>i(e,t,r);const ee=new Set([C.id,F.id,T.id,z.id]),H="SHEET_FILTER_PLUGIN";exports.SheetsFilterService=class extends d.Disposable{constructor(e,t,s){super();g(this,"_filterModels",new Map);g(this,"_loadedUnitId$",new y.BehaviorSubject(null));g(this,"loadedUnitId$",this._loadedUnitId$.asObservable());g(this,"_activeFilterModel$",new y.BehaviorSubject(null));g(this,"activeFilterModel$",this._activeFilterModel$.asObservable());this._resourcesManagerService=e,this._univerInstanceService=t,this._commandService=s,this._initModel(),this._initActiveFilterModel()}get activeFilterModel(){return this._activeFilterModel$.getValue()}ensureFilterModel(e,t){const s=this.getFilterModel(e,t);if(s)return s;const n=this._univerInstanceService.getUniverSheetInstance(e);if(!n)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing workbook ${e}!`);const o=n.getSheetBySheetId(t);if(!o)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing worksheet ${t}!`);const l=new P(e,t,o);return this._cacheFilterModel(e,t,l),l}getFilterModel(e,t){var s,n;return(n=(s=this._filterModels.get(e))==null?void 0:s.get(t))!=null?n:null}removeFilterModel(e,t){const s=this.getFilterModel(e,t);return s?(s.dispose(),this._filterModels.get(e).delete(t),!0):!1}_updateActiveFilterModel(){let e;try{if(e=this._univerInstanceService.getCurrentUnitForType(d.UniverInstanceType.UNIVER_SHEET),!e){this._activeFilterModel$.next(null);return}}catch{return}const t=e.getActiveSheet();if(!t){this._activeFilterModel$.next(null);return}const s=t.getUnitId(),n=t.getSheetId(),o=this.getFilterModel(s,n);this._activeFilterModel$.next(o)}_initActiveFilterModel(){this.disposeWithMe(y.merge(d.fromCallback(this._commandService.onCommandExecuted).pipe(y.filter(([e])=>e.type===d.CommandType.MUTATION&&ee.has(e.id))),this._univerInstanceService.getCurrentTypeOfUnit$(d.UniverInstanceType.UNIVER_SHEET).pipe(y.switchMap(e=>{var t;return(t=e==null?void 0:e.activeSheet$)!=null?t:y.of(null)}))).subscribe(()=>this._updateActiveFilterModel()))}_serializeAutoFiltersForUnit(e){const t=this._filterModels.get(e);if(!t)return"{}";const s={};return t.forEach((n,o)=>{s[o]=n.serialize()}),JSON.stringify(s)}_deserializeAutoFiltersForUnit(e,t){const s=this._univerInstanceService.getUniverSheetInstance(e);Object.keys(t).forEach(n=>{const o=t[n],l=P.deserialize(e,n,s.getSheetBySheetId(n),o);this._cacheFilterModel(e,n,l)})}_initModel(){this._resourcesManagerService.registerPluginResource({pluginName:H,businesses:[2],toJson:e=>this._serializeAutoFiltersForUnit(e),parseJson:e=>JSON.parse(e),onLoad:(e,t)=>{this._deserializeAutoFiltersForUnit(e,t),this._loadedUnitId$.next(e),this._updateActiveFilterModel()},onUnLoad:e=>{const t=this._filterModels.get(e);t&&(t.forEach(s=>s.dispose()),this._filterModels.delete(e))}})}_cacheFilterModel(e,t,s){this._filterModels.has(e)||this._filterModels.set(e,new Map),this._filterModels.get(e).set(t,s)}};exports.SheetsFilterService=pe([d.OnLifecycle(d.LifecycleStages.Ready,exports.SheetsFilterService),b(0,d.IResourceManagerService),b(1,d.IUniverInstanceService),b(2,d.ICommandService)],exports.SheetsFilterService);function Fe(r,i){for(let e=0;e<r.length;e++){let t=e;if(r[e])for(let s=e+1;s<r.length;s++)r[t]&&r[s]&&i(r[t],r[s])&&(r[t]=null,t=s)}return r.filter(e=>e!==null)}function O(r){return Fe(r,(i,e)=>i.id===F.id&&e.id===F.id&&i.params.unitId===e.params.unitId&&i.params.subUnitId===e.params.subUnitId&&i.params.col===e.params.col)}var Se=Object.defineProperty,we=Object.getOwnPropertyDescriptor,ve=(r,i,e,t)=>{for(var s=t>1?void 0:t?we(i,e):i,n=r.length-1,o;n>=0;n--)(o=r[n])&&(s=(t?o(i,e,s):o(s))||s);return t&&s&&Se(i,e,s),s},x=(r,i)=>(e,t)=>i(e,t,r);let L=class extends d.Disposable{constructor(r,i,e,t,s){super(),this._commandService=r,this._sheetInterceptorService=i,this._sheetsFilterService=e,this._univerInstanceService=t,this._refRangeService=s,this._initCommands(),this._initRowFilteredInterceptor(),this._initInterceptors(),this._commandExecutedListener()}_initCommands(){[F,C,z,T].forEach(r=>this.disposeWithMe(this._commandService.registerCommand(r)))}_initInterceptors(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:e=>this._getUpdateFilter(e)}));const r=new d.DisposableCollection,i=(e,t)=>{var a;const s=this._univerInstanceService.getUniverSheetInstance(e);if(!s||!(s==null?void 0:s.getSheetBySheetId(t)))return;r.dispose();const o=(a=this._sheetsFilterService.getFilterModel(e,t))==null?void 0:a.getRange(),l=u=>{switch(u.id){case M.InsertRowCommand.id:{const c=u.params,f=c.unitId||e,_=c.subUnitId||t;return this._handleInsertRowCommand(c,f,_)}case M.InsertColCommand.id:{const c=u.params,f=c.unitId||e,_=c.subUnitId||t;return this._handleInsertColCommand(c,f,_)}case M.RemoveColCommand.id:{const c=u.params;return this._handleRemoveColCommand(c,e,t)}case M.RemoveRowCommand.id:{const c=u.params;return this._handleRemoveRowCommand(c,e,t)}case M.EffectRefRangId.MoveColsCommandId:{const c=u.params;return this._handleMoveColsCommand(c,e,t)}case M.EffectRefRangId.MoveRowsCommandId:{const c=u.params;return this._handleMoveRowsCommand(c,e,t)}case M.MoveRangeCommand.id:{const c=u.params;return this._handleMoveRangeCommand(c,e,t)}}return{redos:[],undos:[]}};o&&r.add(this._refRangeService.registerRefRange(o,l,e,t))};this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===M.SetWorksheetActivateCommand.id){const t=e.params,s=t.subUnitId,n=t.unitId;if(!s||!n)return;i(n,s)}if(e.id===C.id){const t=e.params,s=t.subUnitId,n=t.unitId;if(!s||!n)return;i(t.unitId,t.subUnitId)}})),this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe(e=>{if(e){const t=this._univerInstanceService.getUniverSheetInstance(e),s=t==null?void 0:t.getActiveSheet();s&&i(e,s.getSheetId())}}))}_getUpdateFilter(r){const{id:i}=r;switch(i){case M.RemoveSheetCommand.id:{const e=r.params;return this._handleRemoveSheetCommand(e,e.unitId,e.subUnitId)}}return{redos:[],undos:[]}}_handleInsertColCommand(r,i,e){var m;const t=this._sheetsFilterService.getFilterModel(i,e),s=(m=t==null?void 0:t.getRange())!=null?m:null;if(!t||!s)return this._handleNull();const{startColumn:n,endColumn:o}=s,{startColumn:l,endColumn:a}=r.range,u=a-l+1;if(a>o)return this._handleNull();const c=[],f=[],_=l,S={unitId:i,subUnitId:e,range:{...s,startColumn:l<=n?n+u:n,endColumn:o+u}},p={unitId:i,subUnitId:e,range:s};c.push({id:C.id,params:S}),f.push({id:C.id,params:p});const h=t.getAllFilterColumns().filter(R=>R[0]>=_);if(h.length!==0){const{undos:R,redos:v}=this.moveCriteria(i,e,h,u);c.push(...v),f.push(...R)}return{redos:O(c),undos:O(f)}}_handleInsertRowCommand(r,i,e){var p;const t=this._sheetsFilterService.getFilterModel(i,e),s=(p=t==null?void 0:t.getRange())!=null?p:null;if(!t||!s)return this._handleNull();const{startRow:n,endRow:o}=s,{startRow:l,endRow:a}=r.range,u=a-l+1;if(a>o)return this._handleNull();const c=[],f=[],_={unitId:i,subUnitId:e,range:{...s,startRow:l<=n?n+u:n,endRow:o+u}},S={unitId:i,subUnitId:e,range:s};return c.push({id:C.id,params:_}),f.push({id:C.id,params:S}),{redos:O(c),undos:O(f)}}_handleRemoveColCommand(r,i,e){var w;const t=this._sheetsFilterService.getFilterModel(i,e),s=(w=t==null?void 0:t.getRange())!=null?w:null;if(!t||!s)return this._handleNull();const{startColumn:n,endColumn:o}=s,{startColumn:l,endColumn:a}=r.range;if(l>o)return this._handleNull();const u=[],c=[],f=a<n?0:Math.min(a,o)-Math.max(l,n)+1,_=a-l+1,S=t.getAllFilterColumns();S.forEach(h=>{const[m,R]=h;m<=a&&m>=l&&(u.push({id:F.id,params:{unitId:i,subUnitId:e,col:m,criteria:null}}),c.push({id:F.id,params:{unitId:i,subUnitId:e,col:m,criteria:{...R.serialize(),colId:m}}}))});const p=S.filter(h=>{const[m,R]=h;return m>a});if(p.length>0){const{undos:h,redos:m}=this.moveCriteria(i,e,p,-_);u.push(...m),c.push(...h)}if(f===o-n+1){const h={unitId:i,subUnitId:e};u.push({id:T.id,params:h})}else if(n<=l){const h=o-f,m={unitId:i,subUnitId:e,range:{...s,endColumn:h}};u.push({id:C.id,params:m})}else{const h={unitId:i,subUnitId:e,range:{...s,startColumn:l,endColumn:o-(a-l+1)}};u.push({id:C.id,params:h})}return c.push({id:C.id,params:{range:s,unitId:i,subUnitId:e}}),{undos:O(c),redos:O(u)}}_handleRemoveRowCommand(r,i,e){var p;const t=this._sheetsFilterService.getFilterModel(i,e);if(!t)return this._handleNull();const s=t.getRange(),{startRow:n,endRow:o}=s,{startRow:l,endRow:a}=r.range;if(l>o)return this._handleNull();const u=[],c=[],f=t.getAllFilterColumns(),_=n<=a&&n>=l;c.push({id:C.id,params:{range:s,unitId:i,subUnitId:e}});const S=Math.min(a,o)-Math.max(l,n)+1;if(S===o-n+1||_){const w={unitId:i,subUnitId:e};u.push({id:T.id,params:w}),f.forEach(h=>{const[m,R]=h,v={unitId:i,subUnitId:e,col:m,criteria:{...R.serialize(),colId:m}};c.push({id:F.id,params:v})})}else{const w=(p=this._univerInstanceService.getUniverSheetInstance(i))==null?void 0:p.getSheetBySheetId(e);if(!w)return this._handleNull();const h=[];for(let A=l;A<=a;A++)w.getRowFiltered(A)&&h.push(A);const m=Math.min(n,l),R=m+(o-n)-S+h.length,v={unitId:i,subUnitId:e,range:{...s,startRow:m,endRow:R}};u.push({id:C.id,params:v})}return{undos:O(c),redos:O(u)}}_handleMoveColsCommand(r,i,e){var w;const t=this._sheetsFilterService.getFilterModel(i,e),s=(w=t==null?void 0:t.getRange())!=null?w:null;if(!t||!s)return this._handleNull();const{startColumn:n,endColumn:o}=s,{fromRange:l,toRange:a}=r;if(l.endColumn<n&&a.startColumn<=n||l.startColumn>o&&a.endColumn>o)return this._handleNull();const u=[],c=[],f={};for(let h=n;h<=o;h++)f[h]={colIndex:h,filter:t.getFilterColumn(h)};d.moveMatrixArray(l.startColumn,l.endColumn-l.startColumn+1,a.startColumn,f);const _=Object.keys(f).map(h=>Number(h)),S=Math.max(..._),p=Math.min(..._);if(_.forEach(h=>{var A,W;const{colIndex:m,filter:R}=f[h],v=h;if(R){const te={unitId:i,subUnitId:e,col:v,criteria:{...R.serialize(),colId:v}};if(u.push({id:F.id,params:te}),c.push({id:T.id,params:{unitId:i,subUnitId:e,col:v,criteria:{...(A=t.getFilterColumn(v))==null?void 0:A.serialize(),colId:v}}}),!((W=f[m])!=null&&W.filter)){const re={unitId:i,subUnitId:e,col:m,criteria:null};u.push({id:F.id,params:re}),c.push({id:F.id,params:{unitId:i,subUnitId:e,col:m,criteria:{...R.serialize(),colId:m}}})}}}),n!==p||o!==S){const h={unitId:i,subUnitId:e,range:{...s,startColumn:p,endColumn:S}};u.unshift({id:C.id,params:h}),c.push({id:C.id,params:{range:s,unitId:i,subUnitId:e}})}return{undos:c,redos:u}}_handleMoveRowsCommand(r,i,e){var w;const t=this._sheetsFilterService.getFilterModel(i,e),s=(w=t==null?void 0:t.getRange())!=null?w:null;if(!t||!s)return this._handleNull();const{startRow:n,endRow:o}=s,{fromRange:l,toRange:a}=r;if(l.endRow<n&&a.startRow<=n||l.startRow>o&&a.endRow>o)return this._handleNull();const u=[],c=[],f={};for(let h=n;h<=o;h++)f[h]={offset:h-n};d.moveMatrixArray(l.startRow,l.endRow-l.startRow+1,a.startRow,f);const _=Object.keys(f).map(h=>Number(h)),S=Math.max(..._),p=Math.min(..._);if(n!==p||o!==S){const h={unitId:i,subUnitId:e,range:{...s,startRow:p,endRow:S}};u.unshift({id:C.id,params:h}),c.push({id:C.id,params:{range:s,unitId:i,subUnitId:e}})}return{redos:u,undos:c}}_handleMoveRangeCommand(r,i,e){const{fromRange:t,toRange:s}=r,n=this._sheetsFilterService.getFilterModel(i,e);if(!n)return this._handleNull();const o=n.getRange();if(!o)return this._handleNull();const l=[],a=[];if(d.Rectangle.contains(t,o)){const u=o.startRow-t.startRow,c=o.startColumn-t.startColumn,f={startRow:s.startRow+u,startColumn:s.startColumn+c,endRow:s.startRow+u+(o.endRow-o.startRow),endColumn:s.startColumn+c+(o.endColumn-o.startColumn)},_={id:T.id,params:{unitId:i,subUnitId:e}},S={id:C.id,params:{unitId:i,subUnitId:e,range:f}},p={id:C.id,params:{unitId:i,subUnitId:e,range:o}};l.push(_,S),a.push(_,p);const w=n.getAllFilterColumns(),h=s.startColumn-t.startColumn;w.forEach(m=>{const[R,v]=m;v&&(l.push({id:F.id,params:{unitId:i,subUnitId:e,col:R+h,criteria:{...v.serialize(),colId:R+h}}}),a.push({id:F.id,params:{unitId:i,subUnitId:e,col:R,criteria:{...v.serialize(),colId:R}}}))})}return{redos:l,undos:a}}_handleRemoveSheetCommand(r,i,e){const t=this._sheetsFilterService.getFilterModel(i,e);if(!t)return this._handleNull();const s=t.getRange();if(!s)return this._handleNull();const n=[],o=[];return t.getAllFilterColumns().forEach(a=>{const[u,c]=a;o.push({id:F.id,params:{unitId:i,subUnitId:e,col:a,criteria:{...c.serialize(),colId:a}}})}),n.push({id:T.id,params:{unitId:i,subUnitId:e,range:s}}),o.unshift({id:C.id,params:{range:s,unitId:i,subUnitId:e}}),{undos:o,redos:n}}_handleNull(){return{redos:[],undos:[]}}_initRowFilteredInterceptor(){this.disposeWithMe(this._sheetInterceptorService.intercept(M.INTERCEPTOR_POINT.ROW_FILTERED,{handler:(r,i)=>{var e,t;return r?!0:(t=(e=this._sheetsFilterService.getFilterModel(i.unitId,i.subUnitId))==null?void 0:e.isRowFiltered(i.row))!=null?t:!1}}))}moveCriteria(r,i,e,t){const s={unitId:r,subUnitId:i,criteria:null,col:-1},n=[],o=[];return e.forEach(l=>{const[a,u]=l;o.push({id:F.id,params:{...s,col:a}}),n.push({id:F.id,params:{...s,col:a,criteria:{...u.serialize(),colId:a}}})}),e.forEach(l=>{const[a,u]=l;o.push({id:F.id,params:{...s,col:a+t,criteria:{...u.serialize(),colId:a+t}}}),n.push({id:F.id,params:{...s,col:a+t,criteria:null}})}),{redos:o,undos:n}}_commandExecutedListener(){this.disposeWithMe(this._commandService.onCommandExecuted(r=>{const{unitId:i,subUnitId:e}=r.params||{},t=this._sheetsFilterService.getFilterModel(i,e);if(!t)return;const s=Array.from(t.filteredOutRows).sort((l,a)=>l-a),n=[];let o=!1;if(r.id===M.RemoveRowMutation.id){const{startRow:l,endRow:a}=r.params.range,u=s.filter(c=>c>=l&&c<=a);s.forEach(c=>{if(c<l)n.push(c);else if(o=!0,c<=a){const f=Math.max(l,n.length?n[n.length-1]+1:l);n.push(f)}else n.push(c-(a-l+1-u.length))})}if(r.id===M.InsertRowMutation.id){const{startRow:l,endRow:a}=r.params.range;s.forEach(u=>{u>=l?(o=!0,n.push(u+(a-l+1))):n.push(u)})}o&&(t.filteredOutRows=new Set(n))}))}};L=ve([d.OnLifecycle(d.LifecycleStages.Ready,L),x(0,d.ICommandService),x(1,I.Inject(M.SheetInterceptorService)),x(2,I.Inject(exports.SheetsFilterService)),x(3,d.IUniverInstanceService),x(4,I.Inject(M.RefRangeService))],L);var Me=Object.defineProperty,Ee=Object.getOwnPropertyDescriptor,Oe=(r,i,e,t)=>{for(var s=t>1?void 0:t?Ee(i,e):i,n=r.length-1,o;n>=0;n--)(o=r[n])&&(s=(t?o(i,e,s):o(s))||s);return t&&s&&Me(i,e,s),s},ye=(r,i)=>(e,t)=>i(e,t,r),$;exports.UniverSheetsFilterPlugin=($=class extends d.Plugin{constructor(i,e){super(),this._injector=e}onStarting(i){[[exports.SheetsFilterService],[L]].forEach(e=>i.add(e))}},g($,"type",d.UniverInstanceType.UNIVER_SHEET),g($,"pluginName",H),$);exports.UniverSheetsFilterPlugin=Oe([ye(1,I.Inject(I.Injector))],exports.UniverSheetsFilterPlugin);exports.CustomFilterOperator=E;exports.FILTER_MUTATIONS=ee;exports.FilterColumn=k;exports.FilterModel=P;exports.ReCalcSheetsFilterMutation=z;exports.RemoveSheetsFilterMutation=T;exports.SHEET_FILTER_SNAPSHOT_ID=H;exports.SetSheetsFilterCriteriaMutation=F;exports.SetSheetsFilterRangeMutation=C;exports.equals=X;exports.getCustomFilterFn=B;exports.greaterThan=V;exports.greaterThanOrEqualTo=Q;exports.lessThan=G;exports.lessThanOrEqualTo=J;exports.notEquals=j;
|
|
1
|
+
"use strict";var ne=Object.defineProperty;var ie=(r,n,e)=>n in r?ne(r,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[n]=e;var C=(r,n,e)=>(ie(r,typeof n!="symbol"?n+"":n,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("@univerjs/core"),$=require("@wendellhu/redi"),E=require("rxjs"),v=require("@univerjs/sheets");var O=(r=>(r.EQUAL="equal",r.GREATER_THAN="greaterThan",r.GREATER_THAN_OR_EQUAL="greaterThanOrEqual",r.LESS_THAN="lessThan",r.LESS_THAN_OR_EQUAL="lessThanOrEqual",r.NOT_EQUALS="notEqual",r))(O||{});const J={operator:O.GREATER_THAN,fn:(r,n)=>x(r)?r>n:!1},X={operator:O.GREATER_THAN_OR_EQUAL,fn:(r,n)=>x(r)?r>=n:!1},Y={operator:O.LESS_THAN,fn:(r,n)=>x(r)?r<n:!1},K={operator:O.LESS_THAN_OR_EQUAL,fn:(r,n)=>x(r)?r<=n:!1},Z={operator:O.EQUAL,fn:(r,n)=>x(r)?r===n:!1},z={operator:O.NOT_EQUALS,fn:(r,n)=>{if(typeof n=="string"){if(n===" ")return r!=null;const e=ee(r);return e&&ce(n)?!te(n).test(e):e!==n}return x(r)?r!==n:!0}},k=new Map([]),oe=[J,X,Y,K,Z,z];oe.forEach(r=>{k.set(r.operator,r)});function le(r){return!!r}const ae={fn:(r,n)=>{const e=ee(r);return e===null?n==="":te(n).test(e)}};function H(r){return r?k.get(r):ae}function x(r){return typeof r=="number"}function Q(r){return!!(typeof r=="number"||typeof r=="string"&&h.isNumeric(r))}function ee(r){return typeof r=="boolean"||r==null?null:typeof r=="string"?r:r.toString()}function ce(r){return typeof r=="number"?!1:r.indexOf("*")!==-1||r.indexOf("?")!==-1}function te(r){const n=r.replace(/[.+^${}()|[\]\\]/g,"\\$&").replaceAll("?",".").replace(/[*]/g,".$&");return new RegExp(`^${n}$`)}const U=()=>new Set;class P extends h.Disposable{constructor(e,t,s){super();C(this,"_filteredOutRows$",new E.BehaviorSubject(U()));C(this,"filteredOutRows$",this._filteredOutRows$.asObservable());C(this,"_hasCriteria$",new E.BehaviorSubject(!1));C(this,"hasCriteria$",this._hasCriteria$.asObservable());C(this,"_filterColumnByIndex",new Map);C(this,"_alreadyFilteredOutRows",U());C(this,"_range");this.unitId=e,this.subUnitId=t,this._worksheet=s}get filteredOutRows(){return this._filteredOutRows$.getValue()}set filteredOutRows(e){this._alreadyFilteredOutRows=e,this._filteredOutRows$.next(e)}dispose(){super.dispose(),this._filteredOutRows$.complete(),this._hasCriteria$.complete()}serialize(){const e={ref:h.Rectangle.clone(this._range),filterColumns:this._getAllFilterColumns(!0).sort(([t],[s])=>t-s).map(([t,s])=>s.serialize())};return this._alreadyFilteredOutRows&&(e.cachedFilteredOut=Array.from(this._alreadyFilteredOutRows).sort()),e}static deserialize(e,t,s,i){const o=new P(e,t,s);return o._dump(i),o}_dump(e){var t;this.setRange(e.ref),(t=e.filterColumns)==null||t.forEach(s=>this._setCriteriaWithoutReCalc(s.colId,s)),e.cachedFilteredOut&&(this._alreadyFilteredOutRows=new Set(e.cachedFilteredOut),this._emit()),this._emitHasCriteria()}isRowFiltered(e){return this._alreadyFilteredOutRows.has(e)}getRange(){if(!this._range)throw new Error("[FilterModel] could not get range before a range is set!");return this._range}getFilteredOutRowsExceptCol(e){return this._getAllFilterColumns(!0).filter(([t])=>t!==e).reduce((t,[,s])=>{const i=s.calc({getAlreadyFilteredOutRows:()=>t});return i?h.mergeSets(t,i):t},new Set)}setRange(e){this._range=e,this._getAllFilterColumns(!0).forEach(([t,s])=>{s.setRangeAndColumn({startRow:e.startRow,endRow:e.endRow,startColumn:t,endColumn:t},t)})}setCriteria(e,t,s=!1){if(!this._range)throw new Error("[FilterModel] could not set criteria before a range is set!");if(!t){this._removeCriteria(e),this._rebuildAlreadyFilteredOutRowsWithCache(),s&&this._reCalcAllColumns(),this._emit(),this._emitHasCriteria();return}this._setCriteriaWithoutReCalc(e,t),s&&(this._rebuildAlreadyFilteredOutRowsWithCache(),this._reCalcWithNoCacheColumns(),this._emit(),this._emitHasCriteria())}getAllFilterColumns(){return this._getAllFilterColumns(!0)}getFilterColumn(e){var t;return(t=this._filterColumnByIndex.get(e))!=null?t:null}reCalc(){this._reCalcAllColumns(),this._emit()}_getAllFilterColumns(e=!1){const t=Array.from(this._filterColumnByIndex.entries());return e?t:t.map(([s,i])=>i)}_reCalcAllColumns(){this._alreadyFilteredOutRows=U(),this._getAllFilterColumns().forEach(e=>e.__clearCache()),this._reCalcWithNoCacheColumns()}_setCriteriaWithoutReCalc(e,t){const s=this._range;if(!s)throw new Error("[FilterModel] could not set criteria before a range is set!");const{startColumn:i,endColumn:o}=s;if(e>o||e<i)throw new Error(`[FilterModel] could not set criteria on column ${e} which is out of range!`);let l;this._filterColumnByIndex.has(e)?l=this._filterColumnByIndex.get(e):(l=new re(this.unitId,this.subUnitId,this._worksheet,t,{getAlreadyFilteredOutRows:()=>this._alreadyFilteredOutRows}),l.setRangeAndColumn(s,e),this._filterColumnByIndex.set(e,l)),l.setCriteria(t)}_removeCriteria(e){const t=this._filterColumnByIndex.get(e);t&&(t.dispose(),this._filterColumnByIndex.delete(e))}_emit(){this._filteredOutRows$.next(this._alreadyFilteredOutRows)}_emitHasCriteria(){this._hasCriteria$.next(this._filterColumnByIndex.size>0)}_rebuildAlreadyFilteredOutRowsWithCache(){const e=this._getAllFilterColumns().filter(t=>t.hasCache()).reduce((t,s)=>h.mergeSets(t,s.filteredOutRows),new Set);this._alreadyFilteredOutRows=e}_reCalcWithNoCacheColumns(){const e=this._getAllFilterColumns().filter(t=>!t.hasCache());for(const t of e){const s=t.reCalc();s&&(this._alreadyFilteredOutRows=h.mergeSets(this._alreadyFilteredOutRows,s))}}}class re extends h.Disposable{constructor(e,t,s,i,o){super();C(this,"_filteredOutRows",null);C(this,"_filterFn",null);C(this,"_range",null);C(this,"_column",0);C(this,"_filterByValues",!1);this.unitId=e,this.subUnitId=t,this._worksheet=s,this._criteria=i,this._filterColumnContext=o}get filteredOutRows(){return this._filteredOutRows}dispose(){super.dispose(),this._filteredOutRows=null}__clearCache(){this._filteredOutRows=null}serialize(){if(!this._criteria)throw new Error("[FilterColumn]: could not serialize without a filter column!");return h.Tools.deepClone({...this._criteria,colId:this._column})}hasCache(){return this._filteredOutRows!==null}setRangeAndColumn(e,t){this._range=e,this._column=t}setCriteria(e){this._criteria=e,this._generateFilterFn(),this._filteredOutRows=null}getColumnData(){return h.Tools.deepClone(this._criteria)}reCalc(){return this._filteredOutRows=this.calc(this._filterColumnContext),this._filteredOutRows}calc(e){if(!this._filterFn)throw new Error("[FilterColumn] cannot calculate without a filter fn!");if(!this._range)throw new Error("[FilterColumn] cannot calculate without a range!");if(typeof this._column!="number")throw new TypeError("[FilterColumn] cannot calculate without a column offset!");const t=this._column,s={startColumn:t,endColumn:t,startRow:this._range.startRow+1,endRow:this._range.endRow},i=new Set,o=e.getAlreadyFilteredOutRows();for(const l of this._worksheet.iterateByColumn(s,!1,!1)){const{row:a,rowSpan:u,col:c}=l;if(o.has(a)&&(!u||u===1))continue;const f=this._filterByValues?h.extractPureTextFromCell(this._worksheet.getCell(a,c)):Ce(this._worksheet,a,c);if(!this._filterFn(f)&&(i.add(a),u))for(let g=1;g<u;g++)i.add(a+g)}return i}_generateFilterFn(){this._criteria&&(this._filterFn=ue(this._criteria),this._filterByValues=!!this._criteria.filters)}}function ue(r){if(r.filters)return de(r.filters);if(r.customFilters)return he(r.customFilters);throw new Error("[FilterModel]: other types of filters are not supported yet.")}function de(r){const n=!!r.blank,e=new Set(r.filters);return t=>t===void 0||t===""?n:e.has(typeof t=="string"?t:`${t}`)}function he(r){const n=r.customFilters.map(e=>ge(e));return _e(n)?r.and?fe(n):me(n):n[0]}function fe(r){const[n,e]=r;return t=>n(t)&&e(t)}function me(r){const[n,e]=r;return t=>n(t)||e(t)}function _e(r){return r.length===2}function ge(r){const n=r.val;if(r.operator===O.NOT_EQUALS&&!Q(n))return s=>z.fn(s,n);if(le(r.operator)){if(!Q(n))return()=>!1;const s=H(r.operator),i=Number(n);return o=>s.fn(o,i)}const e=H(r.operator);return t=>e.fn(t,n)}function Ce(r,n,e){const t=r.getCell(n,e);if(!t)return null;const s=r.getCellRaw(n,e);return t&&!s?G(t):s?t.t===h.CellValueType.NUMBER&&typeof t.v=="string"?s.v:G(s):null}function G(r){var t,s;const n=(s=(t=r.p)==null?void 0:t.body)==null?void 0:s.dataStream;if(n)return n.trimEnd();const e=r.v;return typeof e=="string"?r.t===h.CellValueType.BOOLEAN?e.toUpperCase():e:typeof e=="number"?r.t===h.CellValueType.BOOLEAN?e?"TRUE":"FALSE":e:typeof e=="boolean"?e?"TRUE":"FALSE":""}const R={id:"sheet.mutation.set-filter-range",type:h.CommandType.MUTATION,handler:(r,n)=>{const{subUnitId:e,unitId:t,range:s}=n;return r.get(exports.SheetsFilterService).ensureFilterModel(t,e).setRange(s),!0}},F={id:"sheet.mutation.set-filter-criteria",type:h.CommandType.MUTATION,handler:(r,n)=>{const{subUnitId:e,unitId:t,criteria:s,col:i,reCalc:o=!0}=n,a=r.get(exports.SheetsFilterService).getFilterModel(t,e);return a?(a.setCriteria(i,s,o),!0):!1}},A={id:"sheet.mutation.remove-filter",type:h.CommandType.MUTATION,handler:(r,n)=>{const{unitId:e,subUnitId:t}=n;return r.get(exports.SheetsFilterService).removeFilterModel(e,t)}},W={id:"sheet.mutation.re-calc-filter",type:h.CommandType.MUTATION,handler:(r,n)=>{const{unitId:e,subUnitId:t}=n,i=r.get(exports.SheetsFilterService).getFilterModel(e,t);return i?(i.reCalc(),!0):!1}};var Re=Object.defineProperty,pe=Object.getOwnPropertyDescriptor,Fe=(r,n,e,t)=>{for(var s=t>1?void 0:t?pe(n,e):n,i=r.length-1,o;i>=0;i--)(o=r[i])&&(s=(t?o(n,e,s):o(s))||s);return t&&s&&Re(n,e,s),s},j=(r,n)=>(e,t)=>n(e,t,r);const se=new Set([R.id,F.id,A.id,W.id]),D="SHEET_FILTER_PLUGIN";exports.SheetsFilterService=class extends h.Disposable{constructor(e,t,s){super();C(this,"_filterModels",new Map);C(this,"_loadedUnitId$",new E.BehaviorSubject(null));C(this,"loadedUnitId$",this._loadedUnitId$.asObservable());C(this,"_errorMsg$",new E.BehaviorSubject(null));C(this,"errorMsg$",this._errorMsg$.asObservable());C(this,"_activeFilterModel$",new E.BehaviorSubject(null));C(this,"activeFilterModel$",this._activeFilterModel$.asObservable());this._resourcesManagerService=e,this._univerInstanceService=t,this._commandService=s,this._initModel(),this._initActiveFilterModel()}get activeFilterModel(){return this._activeFilterModel$.getValue()}ensureFilterModel(e,t){const s=this.getFilterModel(e,t);if(s)return s;const i=this._univerInstanceService.getUniverSheetInstance(e);if(!i)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing workbook ${e}!`);const o=i.getSheetBySheetId(t);if(!o)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing worksheet ${t}!`);const l=new P(e,t,o);return this._cacheFilterModel(e,t,l),l}getFilterModel(e,t){var s,i;return(i=(s=this._filterModels.get(e))==null?void 0:s.get(t))!=null?i:null}removeFilterModel(e,t){const s=this.getFilterModel(e,t);return s?(s.dispose(),this._filterModels.get(e).delete(t),!0):!1}setFilterErrorMsg(e){this._errorMsg$.next(e)}_updateActiveFilterModel(){let e;try{if(e=this._univerInstanceService.getCurrentUnitForType(h.UniverInstanceType.UNIVER_SHEET),!e){this._activeFilterModel$.next(null);return}}catch{return}const t=e.getRawActiveSheet();if(!t){this._activeFilterModel$.next(null);return}const s=t.getUnitId(),i=t.getSheetId(),o=this.getFilterModel(s,i);this._activeFilterModel$.next(o)}_initActiveFilterModel(){this.disposeWithMe(E.merge(h.fromCallback(this._commandService.onCommandExecuted).pipe(E.filter(([e])=>e.type===h.CommandType.MUTATION&&se.has(e.id))),this._univerInstanceService.getCurrentTypeOfUnit$(h.UniverInstanceType.UNIVER_SHEET).pipe(E.switchMap(e=>{var t;return(t=e==null?void 0:e.activeSheet$)!=null?t:E.of(null)}))).subscribe(()=>this._updateActiveFilterModel()))}_serializeAutoFiltersForUnit(e){const t=this._filterModels.get(e);if(!t)return"{}";const s={};return t.forEach((i,o)=>{s[o]=i.serialize()}),JSON.stringify(s)}_deserializeAutoFiltersForUnit(e,t){const s=this._univerInstanceService.getUniverSheetInstance(e);Object.keys(t).forEach(i=>{const o=t[i],l=P.deserialize(e,i,s.getSheetBySheetId(i),o);this._cacheFilterModel(e,i,l)})}_initModel(){this._resourcesManagerService.registerPluginResource({pluginName:D,businesses:[2],toJson:e=>this._serializeAutoFiltersForUnit(e),parseJson:e=>JSON.parse(e),onLoad:(e,t)=>{this._deserializeAutoFiltersForUnit(e,t),this._loadedUnitId$.next(e),this._updateActiveFilterModel()},onUnLoad:e=>{const t=this._filterModels.get(e);t&&(t.forEach(s=>s.dispose()),this._filterModels.delete(e))}})}_cacheFilterModel(e,t,s){this._filterModels.has(e)||this._filterModels.set(e,new Map),this._filterModels.get(e).set(t,s)}};exports.SheetsFilterService=Fe([h.OnLifecycle(h.LifecycleStages.Ready,exports.SheetsFilterService),j(0,h.IResourceManagerService),j(1,h.IUniverInstanceService),j(2,h.ICommandService)],exports.SheetsFilterService);function we(r,n){for(let e=0;e<r.length;e++){let t=e;if(r[e])for(let s=e+1;s<r.length;s++)r[t]&&r[s]&&n(r[t],r[s])&&(r[t]=null,t=s)}return r.filter(e=>e!==null)}function T(r){return we(r,(n,e)=>n.id===F.id&&e.id===F.id&&n.params.unitId===e.params.unitId&&n.params.subUnitId===e.params.subUnitId&&n.params.col===e.params.col)}var Se=Object.defineProperty,ve=Object.getOwnPropertyDescriptor,Me=(r,n,e,t)=>{for(var s=t>1?void 0:t?ve(n,e):n,i=r.length-1,o;i>=0;i--)(o=r[i])&&(s=(t?o(n,e,s):o(s))||s);return t&&s&&Se(n,e,s),s},I=(r,n)=>(e,t)=>n(e,t,r);let L=class extends h.Disposable{constructor(r,n,e,t,s){super(),this._commandService=r,this._sheetInterceptorService=n,this._sheetsFilterService=e,this._univerInstanceService=t,this._refRangeService=s,this._initCommands(),this._initRowFilteredInterceptor(),this._initInterceptors(),this._commandExecutedListener(),this._initErrorHandling()}_initCommands(){[F,R,W,A].forEach(r=>this.disposeWithMe(this._commandService.registerCommand(r)))}_initInterceptors(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:e=>this._getUpdateFilter(e)}));const r=new h.DisposableCollection,n=(e,t)=>{var a;const s=this._univerInstanceService.getUniverSheetInstance(e);if(!s||!(s==null?void 0:s.getSheetBySheetId(t)))return;r.dispose();const o=(a=this._sheetsFilterService.getFilterModel(e,t))==null?void 0:a.getRange(),l=u=>{switch(u.id){case v.InsertRowCommand.id:{const c=u.params,f=c.unitId||e,g=c.subUnitId||t;return this._handleInsertRowCommand(c,f,g)}case v.InsertColCommand.id:{const c=u.params,f=c.unitId||e,g=c.subUnitId||t;return this._handleInsertColCommand(c,f,g)}case v.RemoveColCommand.id:{const c=u.params;return this._handleRemoveColCommand(c,e,t)}case v.RemoveRowCommand.id:{const c=u.params;return this._handleRemoveRowCommand(c,e,t)}case v.EffectRefRangId.MoveColsCommandId:{const c=u.params;return this._handleMoveColsCommand(c,e,t)}case v.EffectRefRangId.MoveRowsCommandId:{const c=u.params;return this._handleMoveRowsCommand(c,e,t)}case v.MoveRangeCommand.id:{const c=u.params;return this._handleMoveRangeCommand(c,e,t)}}return{redos:[],undos:[]}};o&&r.add(this._refRangeService.registerRefRange(o,l,e,t))};this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===v.SetWorksheetActivateCommand.id){const t=e.params,s=t.subUnitId,i=t.unitId;if(!s||!i)return;n(i,s)}if(e.id===R.id){const t=e.params,s=t.subUnitId,i=t.unitId;if(!s||!i)return;n(t.unitId,t.subUnitId)}})),this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe(e=>{if(e){const t=this._univerInstanceService.getUniverSheetInstance(e),s=t==null?void 0:t.getActiveSheet();s&&n(e,s.getSheetId())}}))}_getUpdateFilter(r){const{id:n}=r;switch(n){case v.RemoveSheetCommand.id:{const e=r.params;return this._handleRemoveSheetCommand(e,e.unitId,e.subUnitId)}}return{redos:[],undos:[]}}_handleInsertColCommand(r,n,e){var _;const t=this._sheetsFilterService.getFilterModel(n,e),s=(_=t==null?void 0:t.getRange())!=null?_:null;if(!t||!s)return this._handleNull();const{startColumn:i,endColumn:o}=s,{startColumn:l,endColumn:a}=r.range,u=a-l+1;if(a>o)return this._handleNull();const c=[],f=[],g=l,w={unitId:n,subUnitId:e,range:{...s,startColumn:l<=i?i+u:i,endColumn:o+u}},p={unitId:n,subUnitId:e,range:s};c.push({id:R.id,params:w}),f.push({id:R.id,params:p});const m=t.getAllFilterColumns().filter(d=>d[0]>=g);if(m.length!==0){const{undos:d,redos:M}=this.moveCriteria(n,e,m,u);c.push(...M),f.push(...d)}return{redos:T(c),undos:T(f)}}_handleInsertRowCommand(r,n,e){var p;const t=this._sheetsFilterService.getFilterModel(n,e),s=(p=t==null?void 0:t.getRange())!=null?p:null;if(!t||!s)return this._handleNull();const{startRow:i,endRow:o}=s,{startRow:l,endRow:a}=r.range,u=a-l+1;if(a>o)return this._handleNull();const c=[],f=[],g={unitId:n,subUnitId:e,range:{...s,startRow:l<=i?i+u:i,endRow:o+u}},w={unitId:n,subUnitId:e,range:s};return c.push({id:R.id,params:g}),f.push({id:R.id,params:w}),{redos:T(c),undos:T(f)}}_handleRemoveColCommand(r,n,e){var S;const t=this._sheetsFilterService.getFilterModel(n,e),s=(S=t==null?void 0:t.getRange())!=null?S:null;if(!t||!s)return this._handleNull();const{startColumn:i,endColumn:o}=s,{startColumn:l,endColumn:a}=r.range;if(l>o)return this._handleNull();const u=[],c=[],f=a<i?0:Math.min(a,o)-Math.max(l,i)+1,g=a-l+1,w=t.getAllFilterColumns();w.forEach(m=>{const[_,d]=m;_<=a&&_>=l&&(u.push({id:F.id,params:{unitId:n,subUnitId:e,col:_,criteria:null}}),c.push({id:F.id,params:{unitId:n,subUnitId:e,col:_,criteria:{...d.serialize(),colId:_}}}))});const p=w.filter(m=>{const[_,d]=m;return _>a});if(p.length>0){const{undos:m,redos:_}=this.moveCriteria(n,e,p,-g);u.push(..._),c.push(...m)}if(f===o-i+1){const m={unitId:n,subUnitId:e};u.push({id:A.id,params:m})}else if(i<=l){const m=o-f,_={unitId:n,subUnitId:e,range:{...s,endColumn:m}};u.push({id:R.id,params:_})}else{const m={unitId:n,subUnitId:e,range:{...s,startColumn:l,endColumn:o-(a-l+1)}};u.push({id:R.id,params:m})}return c.push({id:R.id,params:{range:s,unitId:n,subUnitId:e}}),{undos:T(c),redos:T(u)}}_handleRemoveRowCommand(r,n,e){var p;const t=this._sheetsFilterService.getFilterModel(n,e);if(!t)return this._handleNull();const s=t.getRange(),{startRow:i,endRow:o}=s,{startRow:l,endRow:a}=r.range;if(l>o)return this._handleNull();const u=[],c=[],f=t.getAllFilterColumns(),g=i<=a&&i>=l;c.push({id:R.id,params:{range:s,unitId:n,subUnitId:e}});const w=Math.min(a,o)-Math.max(l,i)+1;if(w===o-i+1||g){const S={unitId:n,subUnitId:e};u.push({id:A.id,params:S}),f.forEach(m=>{const[_,d]=m,M={unitId:n,subUnitId:e,col:_,criteria:{...d.serialize(),colId:_}};c.push({id:F.id,params:M})})}else{const S=(p=this._univerInstanceService.getUniverSheetInstance(n))==null?void 0:p.getSheetBySheetId(e);if(!S)return this._handleNull();const m=[];for(let y=l;y<=a;y++)S.getRowFiltered(y)&&m.push(y);const _=Math.min(i,l),d=_+(o-i)-w+m.length,M={unitId:n,subUnitId:e,range:{...s,startRow:_,endRow:d}};u.push({id:R.id,params:M})}return{undos:T(c),redos:T(u)}}_handleMoveColsCommand(r,n,e){var _;const t=this._sheetsFilterService.getFilterModel(n,e),s=(_=t==null?void 0:t.getRange())!=null?_:null;if(!t||!s)return this._handleNull();const{startColumn:i,endColumn:o}=s,{fromRange:l,toRange:a}=r;if(l.endColumn<i&&a.startColumn<=i||l.startColumn>o&&a.endColumn>o)return this._handleNull();const u=[],c=[],f={};for(let d=i;d<=o;d++)f[d]={colIndex:d,filter:t.getFilterColumn(d)};h.moveMatrixArray(l.startColumn,l.endColumn-l.startColumn+1,a.startColumn,f);let g=s.startColumn,w=s.endColumn;i>=l.startColumn&&i<=l.endColumn&&a.startColumn>l.startColumn&&l.endColumn<o&&(g=l.endColumn+1),o>=l.startColumn&&o<=l.endColumn&&a.startColumn<l.startColumn&&l.startColumn>i&&(w=l.startColumn-1);const p=Object.keys(f).map(d=>Number(d)),S=p.find(d=>f[d].colIndex===w),m=p.find(d=>f[d].colIndex===g);if(p.forEach(d=>{var q,V;const{colIndex:M,filter:y}=f[d],N=d;if(y){if(N>=m&&N<=S){const B={unitId:n,subUnitId:e,col:N,criteria:{...y.serialize(),colId:N}};u.push({id:F.id,params:B}),c.push({id:A.id,params:{unitId:n,subUnitId:e,col:N,criteria:{...(q=t.getFilterColumn(N))==null?void 0:q.serialize(),colId:N}}})}if(!((V=f[M])!=null&&V.filter)){const B={unitId:n,subUnitId:e,col:M,criteria:null};u.push({id:F.id,params:B}),c.push({id:F.id,params:{unitId:n,subUnitId:e,col:M,criteria:{...y.serialize(),colId:M}}})}}}),i!==m||o!==S){const d={unitId:n,subUnitId:e,range:{...s,startColumn:m,endColumn:S}};u.unshift({id:R.id,params:d}),c.push({id:R.id,params:{range:s,unitId:n,subUnitId:e}})}return{undos:c,redos:u}}_handleMoveRowsCommand(r,n,e){var _;const t=this._sheetsFilterService.getFilterModel(n,e),s=(_=t==null?void 0:t.getRange())!=null?_:null;if(!t||!s)return this._handleNull();const{startRow:i,endRow:o}=s,{fromRange:l,toRange:a}=r;if(l.endRow<i&&a.startRow<=i||l.startRow>o&&a.endRow>o)return this._handleNull();const u=[],c=[],f={};for(let d=i;d<=o;d++)f[d]={oldIndex:d};const g=i;let w=o;o>=l.startRow&&o<=l.endRow&&a.startRow<l.startRow&&l.startRow>i&&(w=l.startRow-1),h.moveMatrixArray(l.startRow,l.endRow-l.startRow+1,a.startRow,f);const p=Object.keys(f).map(d=>Number(d)),S=p.find(d=>f[d].oldIndex===w),m=p.find(d=>f[d].oldIndex===g);if(i!==m||o!==S){const d={unitId:n,subUnitId:e,range:{...s,startRow:m,endRow:S}};u.unshift({id:R.id,params:d}),c.push({id:R.id,params:{range:s,unitId:n,subUnitId:e}})}return{redos:u,undos:c}}_handleMoveRangeCommand(r,n,e){const{fromRange:t,toRange:s}=r,i=this._sheetsFilterService.getFilterModel(n,e);if(!i)return this._handleNull();const o=i.getRange();if(!o)return this._handleNull();const l=[],a=[];if(h.Rectangle.contains(t,o)){const u=o.startRow-t.startRow,c=o.startColumn-t.startColumn,f={startRow:s.startRow+u,startColumn:s.startColumn+c,endRow:s.startRow+u+(o.endRow-o.startRow),endColumn:s.startColumn+c+(o.endColumn-o.startColumn)},g={id:A.id,params:{unitId:n,subUnitId:e}},w={id:R.id,params:{unitId:n,subUnitId:e,range:f}},p={id:R.id,params:{unitId:n,subUnitId:e,range:o}};l.push(g,w),a.push(g,p);const S=i.getAllFilterColumns(),m=s.startColumn-t.startColumn;S.forEach(_=>{const[d,M]=_;M&&(l.push({id:F.id,params:{unitId:n,subUnitId:e,col:d+m,criteria:{...M.serialize(),colId:d+m}}}),a.push({id:F.id,params:{unitId:n,subUnitId:e,col:d,criteria:{...M.serialize(),colId:d}}}))})}return{redos:l,undos:a}}_handleRemoveSheetCommand(r,n,e){const t=this._sheetsFilterService.getFilterModel(n,e);if(!t)return this._handleNull();const s=t.getRange();if(!s)return this._handleNull();const i=[],o=[];return t.getAllFilterColumns().forEach(a=>{const[u,c]=a;o.push({id:F.id,params:{unitId:n,subUnitId:e,col:a,criteria:{...c.serialize(),colId:a}}})}),i.push({id:A.id,params:{unitId:n,subUnitId:e,range:s}}),o.unshift({id:R.id,params:{range:s,unitId:n,subUnitId:e}}),{undos:o,redos:i}}_handleNull(){return{redos:[],undos:[]}}_initRowFilteredInterceptor(){this.disposeWithMe(this._sheetInterceptorService.intercept(v.INTERCEPTOR_POINT.ROW_FILTERED,{handler:(r,n)=>{var e,t;return r?!0:(t=(e=this._sheetsFilterService.getFilterModel(n.unitId,n.subUnitId))==null?void 0:e.isRowFiltered(n.row))!=null?t:!1}}))}moveCriteria(r,n,e,t){const s={unitId:r,subUnitId:n,criteria:null,col:-1},i=[],o=[];return e.forEach(l=>{const[a,u]=l;o.push({id:F.id,params:{...s,col:a}}),i.push({id:F.id,params:{...s,col:a,criteria:{...u.serialize(),colId:a}}})}),e.forEach(l=>{const[a,u]=l;o.push({id:F.id,params:{...s,col:a+t,criteria:{...u.serialize(),colId:a+t}}}),i.push({id:F.id,params:{...s,col:a+t,criteria:null}})}),{redos:o,undos:i}}_commandExecutedListener(){this.disposeWithMe(this._commandService.onCommandExecuted(r=>{const{unitId:n,subUnitId:e}=r.params||{},t=this._sheetsFilterService.getFilterModel(n,e);if(!t)return;const s=Array.from(t.filteredOutRows).sort((l,a)=>l-a),i=[];let o=!1;if(r.id===v.RemoveRowMutation.id){const{startRow:l,endRow:a}=r.params.range,u=s.filter(c=>c>=l&&c<=a);s.forEach(c=>{if(c<l)i.push(c);else if(o=!0,c<=a){const f=Math.max(l,i.length?i[i.length-1]+1:l);i.push(f)}else i.push(c-(a-l+1-u.length))})}if(r.id===v.InsertRowMutation.id){const{startRow:l,endRow:a}=r.params.range;s.forEach(u=>{u>=l?(o=!0,i.push(u+(a-l+1))):i.push(u)})}o&&(t.filteredOutRows=new Set(i))}))}_initErrorHandling(){this.disposeWithMe(this._commandService.beforeCommandExecuted(r=>{const n=r.params,e=v.getSheetCommandTarget(this._univerInstanceService);if(!e)return;const{subUnitId:t,unitId:s}=e,i=this._sheetsFilterService.getFilterModel(s,t);if(!i)return;const o=i.getRange();if(r.id===v.MoveRowsCommand.id&&n.fromRange.startRow<=o.startRow&&n.fromRange.endRow>=o.startRow)throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"),new Error("[SheetsFilterController]: Cannot move header row of filter")}))}};L=Me([h.OnLifecycle(h.LifecycleStages.Ready,L),I(0,h.ICommandService),I(1,$.Inject(v.SheetInterceptorService)),I(2,$.Inject(exports.SheetsFilterService)),I(3,h.IUniverInstanceService),I(4,$.Inject(v.RefRangeService))],L);var Ee=Object.defineProperty,Oe=Object.getOwnPropertyDescriptor,ye=(r,n,e,t)=>{for(var s=t>1?void 0:t?Oe(n,e):n,i=r.length-1,o;i>=0;i--)(o=r[i])&&(s=(t?o(n,e,s):o(s))||s);return t&&s&&Ee(n,e,s),s},Te=(r,n)=>(e,t)=>n(e,t,r),b;exports.UniverSheetsFilterPlugin=(b=class extends h.Plugin{constructor(n,e){super(),this._injector=e}onStarting(n){[[exports.SheetsFilterService],[L]].forEach(e=>n.add(e))}},C(b,"type",h.UniverInstanceType.UNIVER_SHEET),C(b,"pluginName",D),b);exports.UniverSheetsFilterPlugin=ye([Te(1,$.Inject($.Injector))],exports.UniverSheetsFilterPlugin);exports.CustomFilterOperator=O;exports.FILTER_MUTATIONS=se;exports.FilterColumn=re;exports.FilterModel=P;exports.ReCalcSheetsFilterMutation=W;exports.RemoveSheetsFilterMutation=A;exports.SHEET_FILTER_SNAPSHOT_ID=D;exports.SetSheetsFilterCriteriaMutation=F;exports.SetSheetsFilterRangeMutation=R;exports.equals=Z;exports.getCustomFilterFn=H;exports.greaterThan=J;exports.greaterThanOrEqualTo=X;exports.lessThan=Y;exports.lessThanOrEqualTo=K;exports.notEquals=z;
|