@univerjs/sheets-filter 0.2.4 → 0.2.5

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,s,e)=>s in r?se(r,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[s]=e;var p=(r,s,e)=>ie(r,typeof s!="symbol"?s+"":s,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("@univerjs/core"),$=require("@wendellhu/redi"),E=require("rxjs"),S=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,s)=>x(r)?r>s:!1},X={operator:O.GREATER_THAN_OR_EQUAL,fn:(r,s)=>x(r)?r>=s:!1},Y={operator:O.LESS_THAN,fn:(r,s)=>x(r)?r<s:!1},K={operator:O.LESS_THAN_OR_EQUAL,fn:(r,s)=>x(r)?r<=s:!1},Z={operator:O.EQUAL,fn:(r,s)=>x(r)?r===s:!1},z={operator:O.NOT_EQUALS,fn:(r,s)=>{if(typeof s=="string"){if(s===" ")return r!=null;const e=ee(r);return e&&ce(s)?!te(s).test(e):e!==s}return x(r)?r!==s:!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,s)=>{const e=ee(r);return e===null?s==="":te(s).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"&&f.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 s=r.replace(/[.+^${}()|[\]\\]/g,"\\$&").replaceAll("?",".").replace(/[*]/g,".$&");return new RegExp(`^${s}$`)}const U=()=>new Set;class P extends f.Disposable{constructor(e,t,n){super();p(this,"_filteredOutRows$",new E.BehaviorSubject(U()));p(this,"filteredOutRows$",this._filteredOutRows$.asObservable());p(this,"_hasCriteria$",new E.BehaviorSubject(!1));p(this,"hasCriteria$",this._hasCriteria$.asObservable());p(this,"_filterColumnByIndex",new Map);p(this,"_alreadyFilteredOutRows",U());p(this,"_range");this.unitId=e,this.subUnitId=t,this._worksheet=n}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:f.Rectangle.clone(this._range),filterColumns:this._getAllFilterColumns(!0).sort(([t],[n])=>t-n).map(([t,n])=>n.serialize())};return this._alreadyFilteredOutRows&&(e.cachedFilteredOut=Array.from(this._alreadyFilteredOutRows).sort()),e}static deserialize(e,t,n,i){const o=new P(e,t,n);return o._dump(i),o}_dump(e){var t;this.setRange(e.ref),(t=e.filterColumns)==null||t.forEach(n=>this._setCriteriaWithoutReCalc(n.colId,n)),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,[,n])=>{const i=n.calc({getAlreadyFilteredOutRows:()=>t});return i?f.mergeSets(t,i):t},new Set)}setRange(e){this._range=e,this._getAllFilterColumns(!0).forEach(([t,n])=>{n.setRangeAndColumn({startRow:e.startRow,endRow:e.endRow,startColumn:t,endColumn:t},t)})}setCriteria(e,t,n=!1){if(!this._range)throw new Error("[FilterModel] could not set criteria before a range is set!");if(!t){this._removeCriteria(e),this._rebuildAlreadyFilteredOutRowsWithCache(),n&&this._reCalcAllColumns(),this._emit(),this._emitHasCriteria();return}this._setCriteriaWithoutReCalc(e,t),n&&(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(([n,i])=>i)}_reCalcAllColumns(){this._alreadyFilteredOutRows=U(),this._getAllFilterColumns().forEach(e=>e.__clearCache()),this._reCalcWithNoCacheColumns()}_setCriteriaWithoutReCalc(e,t){const n=this._range;if(!n)throw new Error("[FilterModel] could not set criteria before a range is set!");const{startColumn:i,endColumn:o}=n;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(n,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,n)=>f.mergeSets(t,n.filteredOutRows),new Set);this._alreadyFilteredOutRows=e}_reCalcWithNoCacheColumns(){const e=this._getAllFilterColumns().filter(t=>!t.hasCache());for(const t of e){const n=t.reCalc();n&&(this._alreadyFilteredOutRows=f.mergeSets(this._alreadyFilteredOutRows,n))}}}class re extends f.Disposable{constructor(e,t,n,i,o){super();p(this,"_filteredOutRows",null);p(this,"_filterFn",null);p(this,"_range",null);p(this,"_column",0);p(this,"_filterByValues",!1);this.unitId=e,this.subUnitId=t,this._worksheet=n,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 f.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 f.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,n={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(n,!1,!1)){const{row:c,rowSpan:u,col:a}=l;if(o.has(c)&&(!u||u===1))continue;const d=this._filterByValues?f.extractPureTextFromCell(this._worksheet.getCell(c,a)):Re(this._worksheet,c,a);if(!this._filterFn(d)&&(i.add(c),u))for(let m=1;m<u;m++)i.add(c+m)}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 s=!!r.blank,e=new Set(r.filters);return t=>t===void 0||t===""?s:e.has(typeof t=="string"?t:`${t}`)}function he(r){const s=r.customFilters.map(e=>ge(e));return _e(s)?r.and?fe(s):me(s):s[0]}function fe(r){const[s,e]=r;return t=>s(t)&&e(t)}function me(r){const[s,e]=r;return t=>s(t)||e(t)}function _e(r){return r.length===2}function ge(r){const s=r.val;if(r.operator===O.NOT_EQUALS&&!Q(s))return n=>z.fn(n,s);if(le(r.operator)){if(!Q(s))return()=>!1;const n=H(r.operator),i=Number(s);return o=>n.fn(o,i)}const e=H(r.operator);return t=>e.fn(t,s)}function Re(r,s,e){const t=r.getCell(s,e);if(!t)return null;const n=r.getCellRaw(s,e);return t&&!n?G(t):n?t.t===f.CellValueType.NUMBER&&typeof t.v=="string"?n.v:G(n):null}function G(r){var t,n;const s=(n=(t=r.p)==null?void 0:t.body)==null?void 0:n.dataStream;if(s)return s.trimEnd();const e=r.v;return typeof e=="string"?r.t===f.CellValueType.BOOLEAN?e.toUpperCase():e:typeof e=="number"?r.t===f.CellValueType.BOOLEAN?e?"TRUE":"FALSE":e:typeof e=="boolean"?e?"TRUE":"FALSE":""}const F={id:"sheet.mutation.set-filter-range",type:f.CommandType.MUTATION,handler:(r,s)=>{const{subUnitId:e,unitId:t,range:n}=s;return r.get(exports.SheetsFilterService).ensureFilterModel(t,e).setRange(n),!0}},v={id:"sheet.mutation.set-filter-criteria",type:f.CommandType.MUTATION,handler:(r,s)=>{const{subUnitId:e,unitId:t,criteria:n,col:i,reCalc:o=!0}=s,c=r.get(exports.SheetsFilterService).getFilterModel(t,e);return c?(c.setCriteria(i,n,o),!0):!1}},A={id:"sheet.mutation.remove-filter",type:f.CommandType.MUTATION,handler:(r,s)=>{const{unitId:e,subUnitId:t}=s;return r.get(exports.SheetsFilterService).removeFilterModel(e,t)}},W={id:"sheet.mutation.re-calc-filter",type:f.CommandType.MUTATION,handler:(r,s)=>{const{unitId:e,subUnitId:t}=s,i=r.get(exports.SheetsFilterService).getFilterModel(e,t);return i?(i.reCalc(),!0):!1}};var Ce=Object.defineProperty,pe=Object.getOwnPropertyDescriptor,Fe=(r,s,e,t)=>{for(var n=t>1?void 0:t?pe(s,e):s,i=r.length-1,o;i>=0;i--)(o=r[i])&&(n=(t?o(s,e,n):o(n))||n);return t&&n&&Ce(s,e,n),n},j=(r,s)=>(e,t)=>s(e,t,r);const ne=new Set([F.id,v.id,A.id,W.id]),V="SHEET_FILTER_PLUGIN";exports.SheetsFilterService=class extends f.Disposable{constructor(e,t,n){super();p(this,"_filterModels",new Map);p(this,"_loadedUnitId$",new E.BehaviorSubject(null));p(this,"loadedUnitId$",this._loadedUnitId$.asObservable());p(this,"_errorMsg$",new E.BehaviorSubject(null));p(this,"errorMsg$",this._errorMsg$.asObservable());p(this,"_activeFilterModel$",new E.BehaviorSubject(null));p(this,"activeFilterModel$",this._activeFilterModel$.asObservable());this._resourcesManagerService=e,this._univerInstanceService=t,this._commandService=n,this._initModel(),this._initActiveFilterModel()}get activeFilterModel(){return this._activeFilterModel$.getValue()}ensureFilterModel(e,t){const n=this.getFilterModel(e,t);if(n)return n;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 n,i;return(i=(n=this._filterModels.get(e))==null?void 0:n.get(t))!=null?i:null}removeFilterModel(e,t){const n=this.getFilterModel(e,t);return n?(n.dispose(),this._filterModels.get(e).delete(t),!0):!1}setFilterErrorMsg(e){this._errorMsg$.next(e)}_updateActiveFilterModel(){let e;try{if(e=this._univerInstanceService.getCurrentUnitForType(f.UniverInstanceType.UNIVER_SHEET),!e){this._activeFilterModel$.next(null);return}}catch{return}const t=e.getActiveSheet(!0);if(!t){this._activeFilterModel$.next(null);return}const n=t.getUnitId(),i=t.getSheetId(),o=this.getFilterModel(n,i);this._activeFilterModel$.next(o)}_initActiveFilterModel(){this.disposeWithMe(E.merge(f.fromCallback(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(E.filter(([e])=>e.type===f.CommandType.MUTATION&&ne.has(e.id))),this._univerInstanceService.getCurrentTypeOfUnit$(f.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 n={};return t.forEach((i,o)=>{n[o]=i.serialize()}),JSON.stringify(n)}_deserializeAutoFiltersForUnit(e,t){const n=this._univerInstanceService.getUniverSheetInstance(e);Object.keys(t).forEach(i=>{const o=t[i],l=P.deserialize(e,i,n.getSheetBySheetId(i),o);this._cacheFilterModel(e,i,l)})}_initModel(){this._resourcesManagerService.registerPluginResource({pluginName:V,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(n=>n.dispose()),this._filterModels.delete(e))}})}_cacheFilterModel(e,t,n){this._filterModels.has(e)||this._filterModels.set(e,new Map),this._filterModels.get(e).set(t,n)}};exports.SheetsFilterService=Fe([f.OnLifecycle(f.LifecycleStages.Ready,exports.SheetsFilterService),j(0,f.IResourceManagerService),j(1,f.IUniverInstanceService),j(2,f.ICommandService)],exports.SheetsFilterService);function we(r,s){for(let e=0;e<r.length;e++){let t=e;if(r[e])for(let n=e+1;n<r.length;n++)r[t]&&r[n]&&s(r[t],r[n])&&(r[t]=null,t=n)}return r.filter(e=>e!==null)}function T(r){return we(r,(s,e)=>s.id===v.id&&e.id===v.id&&s.params.unitId===e.params.unitId&&s.params.subUnitId===e.params.subUnitId&&s.params.col===e.params.col)}var Se=Object.defineProperty,ve=Object.getOwnPropertyDescriptor,Me=(r,s,e,t)=>{for(var n=t>1?void 0:t?ve(s,e):s,i=r.length-1,o;i>=0;i--)(o=r[i])&&(n=(t?o(s,e,n):o(n))||n);return t&&n&&Se(s,e,n),n},I=(r,s)=>(e,t)=>s(e,t,r);let B=class extends f.Disposable{constructor(r,s,e,t,n){super(),this._commandService=r,this._sheetInterceptorService=s,this._sheetsFilterService=e,this._univerInstanceService=t,this._refRangeService=n,this._initCommands(),this._initRowFilteredInterceptor(),this._initInterceptors(),this._commandExecutedListener(),this._initErrorHandling()}_initCommands(){[v,F,W,A].forEach(r=>this.disposeWithMe(this._commandService.registerCommand(r)))}_initInterceptors(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:e=>this._getUpdateFilter(e)}));const r=new f.DisposableCollection,s=(e,t)=>{var c;const n=this._univerInstanceService.getUniverSheetInstance(e);if(!n||!(n==null?void 0:n.getSheetBySheetId(t)))return;r.dispose();const o=(c=this._sheetsFilterService.getFilterModel(e,t))==null?void 0:c.getRange(),l=u=>{switch(u.id){case S.InsertRowCommand.id:{const a=u.params,d=a.unitId||e,m=a.subUnitId||t;return this._handleInsertRowCommand(a,d,m)}case S.InsertColCommand.id:{const a=u.params,d=a.unitId||e,m=a.subUnitId||t;return this._handleInsertColCommand(a,d,m)}case S.RemoveColCommand.id:{const a=u.params;return this._handleRemoveColCommand(a,e,t)}case S.RemoveRowCommand.id:{const a=u.params;return this._handleRemoveRowCommand(a,e,t)}case S.EffectRefRangId.MoveColsCommandId:{const a=u.params;return this._handleMoveColsCommand(a,e,t)}case S.EffectRefRangId.MoveRowsCommandId:{const a=u.params;return this._handleMoveRowsCommand(a,e,t)}case S.MoveRangeCommand.id:{const a=u.params;return this._handleMoveRangeCommand(a,e,t)}}return{redos:[],undos:[]}};o&&r.add(this._refRangeService.registerRefRange(o,l,e,t))};this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===S.SetWorksheetActivateCommand.id){const t=e.params,n=t.subUnitId,i=t.unitId;if(!n||!i)return;s(i,n)}if(e.id===F.id){const t=e.params,n=t.subUnitId,i=t.unitId;if(!n||!i)return;s(t.unitId,t.subUnitId)}})),this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe(e=>{if(e){const t=this._univerInstanceService.getUniverSheetInstance(e),n=t==null?void 0:t.getActiveSheet();n&&s(e,n.getSheetId())}}))}_getUpdateFilter(r){const{id:s}=r;switch(s){case S.RemoveSheetCommand.id:{const e=r.params;return this._handleRemoveSheetCommand(e,e.unitId,e.subUnitId)}}return{redos:[],undos:[]}}_handleInsertColCommand(r,s,e){var g;const t=this._sheetsFilterService.getFilterModel(s,e),n=(g=t==null?void 0:t.getRange())!=null?g:null;if(!t||!n)return this._handleNull();const{startColumn:i,endColumn:o}=n,{startColumn:l,endColumn:c}=r.range,u=c-l+1;if(c>o)return this._handleNull();const a=[],d=[],m=l,R={unitId:s,subUnitId:e,range:{...n,startColumn:l<=i?i+u:i,endColumn:o+u}},C={unitId:s,subUnitId:e,range:n};a.push({id:F.id,params:R}),d.push({id:F.id,params:C});const _=t.getAllFilterColumns().filter(h=>h[0]>=m);if(_.length!==0){const{undos:h,redos:M}=this.moveCriteria(s,e,_,u);a.push(...M),d.push(...h)}return{redos:T(a),undos:T(d)}}_handleInsertRowCommand(r,s,e){var C;const t=this._sheetsFilterService.getFilterModel(s,e),n=(C=t==null?void 0:t.getRange())!=null?C:null;if(!t||!n)return this._handleNull();const{startRow:i,endRow:o}=n,{startRow:l,endRow:c}=r.range,u=c-l+1;if(c>o)return this._handleNull();const a=[],d=[],m={unitId:s,subUnitId:e,range:{...n,startRow:l<=i?i+u:i,endRow:o+u}},R={unitId:s,subUnitId:e,range:n};return a.push({id:F.id,params:m}),d.push({id:F.id,params:R}),{redos:T(a),undos:T(d)}}_handleRemoveColCommand(r,s,e){var w;const t=this._sheetsFilterService.getFilterModel(s,e),n=(w=t==null?void 0:t.getRange())!=null?w:null;if(!t||!n)return this._handleNull();const{startColumn:i,endColumn:o}=n,{startColumn:l,endColumn:c}=r.range;if(l>o)return this._handleNull();const u=[],a=[],d=c<i?0:Math.min(c,o)-Math.max(l,i)+1,m=c-l+1,R=t.getAllFilterColumns();R.forEach(_=>{const[g,h]=_;g<=c&&g>=l&&(u.push({id:v.id,params:{unitId:s,subUnitId:e,col:g,criteria:null}}),a.push({id:v.id,params:{unitId:s,subUnitId:e,col:g,criteria:{...h.serialize(),colId:g}}}))});const C=R.filter(_=>{const[g,h]=_;return g>c});if(C.length>0){const{undos:_,redos:g}=this.moveCriteria(s,e,C,-m);u.push(...g),a.push(..._)}if(d===o-i+1){const _={unitId:s,subUnitId:e};u.push({id:A.id,params:_})}else if(i<=l){const _=o-d,g={unitId:s,subUnitId:e,range:{...n,endColumn:_}};u.push({id:F.id,params:g})}else{const _={unitId:s,subUnitId:e,range:{...n,startColumn:l,endColumn:o-(c-l+1)}};u.push({id:F.id,params:_})}return a.push({id:F.id,params:{range:n,unitId:s,subUnitId:e}}),{undos:T(a),redos:T(u)}}_handleRemoveRowCommand(r,s,e){var C;const t=this._sheetsFilterService.getFilterModel(s,e);if(!t)return this._handleNull();const n=t.getRange(),{startRow:i,endRow:o}=n,{startRow:l,endRow:c}=r.range;if(l>o)return this._handleNull();const u=[],a=[],d=t.getAllFilterColumns(),m=i<=c&&i>=l;a.push({id:F.id,params:{range:n,unitId:s,subUnitId:e}});const R=Math.min(c,o)-Math.max(l,i)+1;if(R===o-i+1||m){const w={unitId:s,subUnitId:e};u.push({id:A.id,params:w}),d.forEach(_=>{const[g,h]=_,M={unitId:s,subUnitId:e,col:g,criteria:{...h.serialize(),colId:g}};a.push({id:v.id,params:M})})}else{const w=(C=this._univerInstanceService.getUniverSheetInstance(s))==null?void 0:C.getSheetBySheetId(e);if(!w)return this._handleNull();const _=[];for(let y=l;y<=c;y++)w.getRowFiltered(y)&&_.push(y);const g=Math.min(i,l),h=g+(o-i)-R+_.length,M={unitId:s,subUnitId:e,range:{...n,startRow:g,endRow:h}};u.push({id:F.id,params:M})}return{undos:T(a),redos:T(u)}}_handleMoveColsCommand(r,s,e){var g;const t=this._sheetsFilterService.getFilterModel(s,e),n=(g=t==null?void 0:t.getRange())!=null?g:null;if(!t||!n)return this._handleNull();const{startColumn:i,endColumn:o}=n,{fromRange:l,toRange:c}=r;if(l.endColumn<i&&c.startColumn<=i||l.startColumn>o&&c.endColumn>o)return this._handleNull();const u=[],a=[],d={};for(let h=i;h<=o;h++)d[h]={colIndex:h,filter:t.getFilterColumn(h)};f.moveMatrixArray(l.startColumn,l.endColumn-l.startColumn+1,c.startColumn,d);let m=n.startColumn,R=n.endColumn;i>=l.startColumn&&i<=l.endColumn&&c.startColumn>l.startColumn&&l.endColumn<o&&(m=l.endColumn+1),o>=l.startColumn&&o<=l.endColumn&&c.startColumn<l.startColumn&&l.startColumn>i&&(R=l.startColumn-1);const C=Object.keys(d).map(h=>Number(h)),w=C.find(h=>d[h].colIndex===R),_=C.find(h=>d[h].colIndex===m);if(C.forEach(h=>{var D,q;const{colIndex:M,filter:y}=d[h],N=h;if(y){if(N>=_&&N<=w){const L={unitId:s,subUnitId:e,col:N,criteria:{...y.serialize(),colId:N}};u.push({id:v.id,params:L}),a.push({id:A.id,params:{unitId:s,subUnitId:e,col:N,criteria:{...(D=t.getFilterColumn(N))==null?void 0:D.serialize(),colId:N}}})}if(!((q=d[M])!=null&&q.filter)){const L={unitId:s,subUnitId:e,col:M,criteria:null};u.push({id:v.id,params:L}),a.push({id:v.id,params:{unitId:s,subUnitId:e,col:M,criteria:{...y.serialize(),colId:M}}})}}}),i!==_||o!==w){const h={unitId:s,subUnitId:e,range:{...n,startColumn:_,endColumn:w}};u.unshift({id:F.id,params:h}),a.push({id:F.id,params:{range:n,unitId:s,subUnitId:e}})}return{undos:a,redos:u}}_handleMoveRowsCommand(r,s,e){var g;const t=this._sheetsFilterService.getFilterModel(s,e),n=(g=t==null?void 0:t.getRange())!=null?g:null;if(!t||!n)return this._handleNull();const{startRow:i,endRow:o}=n,{fromRange:l,toRange:c}=r;if(l.endRow<i&&c.startRow<=i||l.startRow>o&&c.endRow>o)return this._handleNull();const u=[],a=[],d={};for(let h=i;h<=o;h++)d[h]={oldIndex:h};const m=i;let R=o;o>=l.startRow&&o<=l.endRow&&c.startRow<l.startRow&&l.startRow>i&&(R=l.startRow-1),f.moveMatrixArray(l.startRow,l.endRow-l.startRow+1,c.startRow,d);const C=Object.keys(d).map(h=>Number(h)),w=C.find(h=>d[h].oldIndex===R),_=C.find(h=>d[h].oldIndex===m);if(i!==_||o!==w){const h={unitId:s,subUnitId:e,range:{...n,startRow:_,endRow:w}};u.unshift({id:F.id,params:h}),a.push({id:F.id,params:{range:n,unitId:s,subUnitId:e}})}return{redos:u,undos:a}}_handleMoveRangeCommand(r,s,e){const{fromRange:t,toRange:n}=r,i=this._sheetsFilterService.getFilterModel(s,e);if(!i)return this._handleNull();const o=i.getRange();if(!o)return this._handleNull();const l=[],c=[];if(f.Rectangle.contains(t,o)){const u=o.startRow-t.startRow,a=o.startColumn-t.startColumn,d={startRow:n.startRow+u,startColumn:n.startColumn+a,endRow:n.startRow+u+(o.endRow-o.startRow),endColumn:n.startColumn+a+(o.endColumn-o.startColumn)},m={id:A.id,params:{unitId:s,subUnitId:e}},R={id:F.id,params:{unitId:s,subUnitId:e,range:d}},C={id:F.id,params:{unitId:s,subUnitId:e,range:o}};l.push(m,R),c.push(m,C);const w=i.getAllFilterColumns(),_=n.startColumn-t.startColumn;w.forEach(g=>{const[h,M]=g;M&&(l.push({id:v.id,params:{unitId:s,subUnitId:e,col:h+_,criteria:{...M.serialize(),colId:h+_}}}),c.push({id:v.id,params:{unitId:s,subUnitId:e,col:h,criteria:{...M.serialize(),colId:h}}}))})}return{redos:l,undos:c}}_handleRemoveSheetCommand(r,s,e){const t=this._sheetsFilterService.getFilterModel(s,e);if(!t)return this._handleNull();const n=t.getRange();if(!n)return this._handleNull();const i=[],o=[];return t.getAllFilterColumns().forEach(c=>{const[u,a]=c;o.push({id:v.id,params:{unitId:s,subUnitId:e,col:c,criteria:{...a.serialize(),colId:c}}})}),i.push({id:A.id,params:{unitId:s,subUnitId:e,range:n}}),o.unshift({id:F.id,params:{range:n,unitId:s,subUnitId:e}}),{undos:o,redos:i}}_handleNull(){return{redos:[],undos:[]}}_initRowFilteredInterceptor(){this.disposeWithMe(this._sheetInterceptorService.intercept(S.INTERCEPTOR_POINT.ROW_FILTERED,{handler:(r,s)=>{var e,t;return r?!0:(t=(e=this._sheetsFilterService.getFilterModel(s.unitId,s.subUnitId))==null?void 0:e.isRowFiltered(s.row))!=null?t:!1}}))}moveCriteria(r,s,e,t){const n={unitId:r,subUnitId:s,criteria:null,col:-1},i=[],o=[];return e.forEach(l=>{const[c,u]=l;o.push({id:v.id,params:{...n,col:c}}),i.push({id:v.id,params:{...n,col:c,criteria:{...u.serialize(),colId:c}}})}),e.forEach(l=>{const[c,u]=l;o.push({id:v.id,params:{...n,col:c+t,criteria:{...u.serialize(),colId:c+t}}}),i.push({id:v.id,params:{...n,col:c+t,criteria:null}})}),{redos:o,undos:i}}_commandExecutedListener(){this.disposeWithMe(this._commandService.onCommandExecuted((r,s)=>{var c,u;const{unitId:e,subUnitId:t}=r.params||{},n=this._sheetsFilterService.getFilterModel(e,t);if(!n)return;const i=Array.from(n.filteredOutRows).sort((a,d)=>a-d),o=[];let l=!1;if(r.id===S.RemoveRowMutation.id){const{startRow:a,endRow:d}=r.params.range,m=i.filter(R=>R>=a&&R<=d);i.forEach(R=>{if(R<a)o.push(R);else if(l=!0,R<=d){const C=Math.max(a,o.length?o[o.length-1]+1:a);o.push(C)}else o.push(R-(d-a+1-m.length))})}if(r.id===S.InsertRowMutation.id){const{startRow:a,endRow:d}=r.params.range;i.forEach(m=>{m>=a?(l=!0,o.push(m+(d-a+1))):o.push(m)})}if(l&&(n.filteredOutRows=new Set(o)),r.id===S.SetRangeValuesMutation.id&&!(s!=null&&s.fromCollab)&&!(s!=null&&s.onlyLocal)){const a=this._getExtendRegion(e,t);if(a){const d=r.params.cellValue;if(d)for(let m=a.startColumn;m<=a.endColumn;m++){const R=(c=d==null?void 0:d[a.startRow])==null?void 0:c[m];if(R&&Object.keys(R).length!==0){const C=(u=this._univerInstanceService.getUnit(e))==null?void 0:u.getSheetBySheetId(t);if(C){const w=S.expandToContinuousRange(a,{down:!0},C),_=this._sheetsFilterService.getFilterModel(e,t),g=_.getRange();_.setRange({...g,endRow:w.endRow})}}}}}}))}_getExtendRegion(r,s){var l;const e=this._sheetsFilterService.getFilterModel(r,s);if(!e)return null;const t=(l=this._univerInstanceService.getUnit(r))==null?void 0:l.getSheetBySheetId(s);if(!t)return null;const n=e.getRange();if(!n)return null;const i=t.getRowCount()-1,o=t.getRowManager();for(let c=n.endRow+1;c<=i;c++)if(o.getRowRawVisible(c))return{startRow:c,endRow:c,startColumn:n.startColumn,endColumn:n.endColumn};return null}_initErrorHandling(){this.disposeWithMe(this._commandService.beforeCommandExecuted(r=>{const s=r.params,e=S.getSheetCommandTarget(this._univerInstanceService);if(!e)return;const{subUnitId:t,unitId:n}=e,i=this._sheetsFilterService.getFilterModel(n,t);if(!i)return;const o=i.getRange();if(r.id===S.MoveRowsCommand.id&&s.fromRange.startRow<=o.startRow&&s.fromRange.endRow<o.endRow)throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"),new Error("[SheetsFilterController]: Cannot move header row of filter")}))}};B=Me([f.OnLifecycle(f.LifecycleStages.Ready,B),I(0,f.ICommandService),I(1,$.Inject(S.SheetInterceptorService)),I(2,$.Inject(exports.SheetsFilterService)),I(3,f.IUniverInstanceService),I(4,$.Inject(S.RefRangeService))],B);var Ee=Object.defineProperty,Oe=Object.getOwnPropertyDescriptor,ye=(r,s,e,t)=>{for(var n=t>1?void 0:t?Oe(s,e):s,i=r.length-1,o;i>=0;i--)(o=r[i])&&(n=(t?o(s,e,n):o(n))||n);return t&&n&&Ee(s,e,n),n},Te=(r,s)=>(e,t)=>s(e,t,r),b;exports.UniverSheetsFilterPlugin=(b=class extends f.Plugin{constructor(s,e){super(),this._injector=e}onStarting(s){[[exports.SheetsFilterService],[B]].forEach(e=>s.add(e))}},p(b,"type",f.UniverInstanceType.UNIVER_SHEET),p(b,"pluginName",V),b);exports.UniverSheetsFilterPlugin=ye([Te(1,$.Inject($.Injector))],exports.UniverSheetsFilterPlugin);exports.CustomFilterOperator=O;exports.FILTER_MUTATIONS=ne;exports.FilterColumn=re;exports.FilterModel=P;exports.ReCalcSheetsFilterMutation=W;exports.RemoveSheetsFilterMutation=A;exports.SHEET_FILTER_SNAPSHOT_ID=V;exports.SetSheetsFilterCriteriaMutation=v;exports.SetSheetsFilterRangeMutation=F;exports.equals=Z;exports.getCustomFilterFn=H;exports.greaterThan=J;exports.greaterThanOrEqualTo=X;exports.lessThan=Y;exports.lessThanOrEqualTo=K;exports.notEquals=z;
1
+ "use strict";var ne=Object.defineProperty;var se=(r,s,e)=>s in r?ne(r,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[s]=e;var p=(r,s,e)=>se(r,typeof s!="symbol"?s+"":s,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("@univerjs/core"),E=require("rxjs"),S=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 G={operator:O.GREATER_THAN,fn:(r,s)=>x(r)?r>s:!1},J={operator:O.GREATER_THAN_OR_EQUAL,fn:(r,s)=>x(r)?r>=s:!1},X={operator:O.LESS_THAN,fn:(r,s)=>x(r)?r<s:!1},Y={operator:O.LESS_THAN_OR_EQUAL,fn:(r,s)=>x(r)?r<=s:!1},K={operator:O.EQUAL,fn:(r,s)=>x(r)?r===s:!1},H={operator:O.NOT_EQUALS,fn:(r,s)=>{if(typeof s=="string"){if(s===" ")return r!=null;const e=k(r);return e&&ae(s)?!ee(s).test(e):e!==s}return x(r)?r!==s:!0}},Z=new Map([]),ie=[G,J,X,Y,K,H];ie.forEach(r=>{Z.set(r.operator,r)});function oe(r){return!!r}const le={fn:(r,s)=>{const e=k(r);return e===null?s==="":ee(s).test(e)}};function j(r){return r?Z.get(r):le}function x(r){return typeof r=="number"}function q(r){return!!(typeof r=="number"||typeof r=="string"&&f.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 ee(r){const s=r.replace(/[.+^${}()|[\]\\]/g,"\\$&").replaceAll("?",".").replace(/[*]/g,".$&");return new RegExp(`^${s}$`)}const L=()=>new Set;class $ extends f.Disposable{constructor(e,t,n){super();p(this,"_filteredOutRows$",new E.BehaviorSubject(L()));p(this,"filteredOutRows$",this._filteredOutRows$.asObservable());p(this,"_hasCriteria$",new E.BehaviorSubject(!1));p(this,"hasCriteria$",this._hasCriteria$.asObservable());p(this,"_filterColumnByIndex",new Map);p(this,"_alreadyFilteredOutRows",L());p(this,"_range");this.unitId=e,this.subUnitId=t,this._worksheet=n}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:f.Rectangle.clone(this._range),filterColumns:this._getAllFilterColumns(!0).sort(([t],[n])=>t-n).map(([t,n])=>n.serialize())};return this._alreadyFilteredOutRows&&(e.cachedFilteredOut=Array.from(this._alreadyFilteredOutRows).sort()),e}static deserialize(e,t,n,i){const o=new $(e,t,n);return o._dump(i),o}_dump(e){var t;this.setRange(e.ref),(t=e.filterColumns)==null||t.forEach(n=>this._setCriteriaWithoutReCalc(n.colId,n)),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,[,n])=>{const i=n.calc({getAlreadyFilteredOutRows:()=>t});return i?f.mergeSets(t,i):t},new Set)}setRange(e){this._range=e,this._getAllFilterColumns(!0).forEach(([t,n])=>{n.setRangeAndColumn({startRow:e.startRow,endRow:e.endRow,startColumn:t,endColumn:t},t)})}setCriteria(e,t,n=!1){if(!this._range)throw new Error("[FilterModel] could not set criteria before a range is set!");if(!t){this._removeCriteria(e),this._rebuildAlreadyFilteredOutRowsWithCache(),n&&this._reCalcAllColumns(),this._emit(),this._emitHasCriteria();return}this._setCriteriaWithoutReCalc(e,t),n&&(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(([n,i])=>i)}_reCalcAllColumns(){this._alreadyFilteredOutRows=L(),this._getAllFilterColumns().forEach(e=>e.__clearCache()),this._reCalcWithNoCacheColumns()}_setCriteriaWithoutReCalc(e,t){const n=this._range;if(!n)throw new Error("[FilterModel] could not set criteria before a range is set!");const{startColumn:i,endColumn:o}=n;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 te(this.unitId,this.subUnitId,this._worksheet,t,{getAlreadyFilteredOutRows:()=>this._alreadyFilteredOutRows}),l.setRangeAndColumn(n,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,n)=>f.mergeSets(t,n.filteredOutRows),new Set);this._alreadyFilteredOutRows=e}_reCalcWithNoCacheColumns(){const e=this._getAllFilterColumns().filter(t=>!t.hasCache());for(const t of e){const n=t.reCalc();n&&(this._alreadyFilteredOutRows=f.mergeSets(this._alreadyFilteredOutRows,n))}}}class te extends f.Disposable{constructor(e,t,n,i,o){super();p(this,"_filteredOutRows",null);p(this,"_filterFn",null);p(this,"_range",null);p(this,"_column",0);p(this,"_filterByValues",!1);this.unitId=e,this.subUnitId=t,this._worksheet=n,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 f.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 f.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,n={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(n,!1,!1)){const{row:c,rowSpan:u,col:a}=l;if(o.has(c)&&(!u||u===1))continue;const d=this._filterByValues?f.extractPureTextFromCell(this._worksheet.getCell(c,a)):ge(this._worksheet,c,a);if(!this._filterFn(d)&&(i.add(c),u))for(let m=1;m<u;m++)i.add(c+m)}return i}_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 de(r.customFilters);throw new Error("[FilterModel]: other types of filters are not supported yet.")}function ue(r){const s=!!r.blank,e=new Set(r.filters);return t=>t===void 0||t===""?s:e.has(typeof t=="string"?t:`${t}`)}function de(r){const s=r.customFilters.map(e=>_e(e));return me(s)?r.and?he(s):fe(s):s[0]}function he(r){const[s,e]=r;return t=>s(t)&&e(t)}function fe(r){const[s,e]=r;return t=>s(t)||e(t)}function me(r){return r.length===2}function _e(r){const s=r.val;if(r.operator===O.NOT_EQUALS&&!q(s))return n=>H.fn(n,s);if(oe(r.operator)){if(!q(s))return()=>!1;const n=j(r.operator),i=Number(s);return o=>n.fn(o,i)}const e=j(r.operator);return t=>e.fn(t,s)}function ge(r,s,e){const t=r.getCell(s,e);if(!t)return null;const n=r.getCellRaw(s,e);return t&&!n?Q(t):n?t.t===f.CellValueType.NUMBER&&typeof t.v=="string"?n.v:Q(n):null}function Q(r){var t,n;const s=(n=(t=r.p)==null?void 0:t.body)==null?void 0:n.dataStream;if(s)return s.trimEnd();const e=r.v;return typeof e=="string"?r.t===f.CellValueType.BOOLEAN?e.toUpperCase():e:typeof e=="number"?r.t===f.CellValueType.BOOLEAN?e?"TRUE":"FALSE":e:typeof e=="boolean"?e?"TRUE":"FALSE":""}const F={id:"sheet.mutation.set-filter-range",type:f.CommandType.MUTATION,handler:(r,s)=>{const{subUnitId:e,unitId:t,range:n}=s;return r.get(exports.SheetsFilterService).ensureFilterModel(t,e).setRange(n),!0}},v={id:"sheet.mutation.set-filter-criteria",type:f.CommandType.MUTATION,handler:(r,s)=>{const{subUnitId:e,unitId:t,criteria:n,col:i,reCalc:o=!0}=s,c=r.get(exports.SheetsFilterService).getFilterModel(t,e);return c?(c.setCriteria(i,n,o),!0):!1}},A={id:"sheet.mutation.remove-filter",type:f.CommandType.MUTATION,handler:(r,s)=>{const{unitId:e,subUnitId:t}=s;return r.get(exports.SheetsFilterService).removeFilterModel(e,t)}},z={id:"sheet.mutation.re-calc-filter",type:f.CommandType.MUTATION,handler:(r,s)=>{const{unitId:e,subUnitId:t}=s,i=r.get(exports.SheetsFilterService).getFilterModel(e,t);return i?(i.reCalc(),!0):!1}};var Re=Object.defineProperty,Ce=Object.getOwnPropertyDescriptor,pe=(r,s,e,t)=>{for(var n=t>1?void 0:t?Ce(s,e):s,i=r.length-1,o;i>=0;i--)(o=r[i])&&(n=(t?o(s,e,n):o(n))||n);return t&&n&&Re(s,e,n),n},U=(r,s)=>(e,t)=>s(e,t,r);const re=new Set([F.id,v.id,A.id,z.id]),W="SHEET_FILTER_PLUGIN";exports.SheetsFilterService=class extends f.Disposable{constructor(e,t,n){super();p(this,"_filterModels",new Map);p(this,"_loadedUnitId$",new E.BehaviorSubject(null));p(this,"loadedUnitId$",this._loadedUnitId$.asObservable());p(this,"_errorMsg$",new E.BehaviorSubject(null));p(this,"errorMsg$",this._errorMsg$.asObservable());p(this,"_activeFilterModel$",new E.BehaviorSubject(null));p(this,"activeFilterModel$",this._activeFilterModel$.asObservable());this._resourcesManagerService=e,this._univerInstanceService=t,this._commandService=n,this._initModel(),this._initActiveFilterModel()}get activeFilterModel(){return this._activeFilterModel$.getValue()}ensureFilterModel(e,t){const n=this.getFilterModel(e,t);if(n)return n;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 $(e,t,o);return this._cacheFilterModel(e,t,l),l}getFilterModel(e,t){var n,i;return(i=(n=this._filterModels.get(e))==null?void 0:n.get(t))!=null?i:null}removeFilterModel(e,t){const n=this.getFilterModel(e,t);return n?(n.dispose(),this._filterModels.get(e).delete(t),!0):!1}setFilterErrorMsg(e){this._errorMsg$.next(e)}_updateActiveFilterModel(){let e;try{if(e=this._univerInstanceService.getCurrentUnitForType(f.UniverInstanceType.UNIVER_SHEET),!e){this._activeFilterModel$.next(null);return}}catch{return}const t=e.getActiveSheet(!0);if(!t){this._activeFilterModel$.next(null);return}const n=t.getUnitId(),i=t.getSheetId(),o=this.getFilterModel(n,i);this._activeFilterModel$.next(o)}_initActiveFilterModel(){this.disposeWithMe(E.merge(f.fromCallback(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(E.filter(([e])=>e.type===f.CommandType.MUTATION&&re.has(e.id))),this._univerInstanceService.getCurrentTypeOfUnit$(f.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 n={};return t.forEach((i,o)=>{n[o]=i.serialize()}),JSON.stringify(n)}_deserializeAutoFiltersForUnit(e,t){const n=this._univerInstanceService.getUniverSheetInstance(e);Object.keys(t).forEach(i=>{const o=t[i],l=$.deserialize(e,i,n.getSheetBySheetId(i),o);this._cacheFilterModel(e,i,l)})}_initModel(){this._resourcesManagerService.registerPluginResource({pluginName:W,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(n=>n.dispose()),this._filterModels.delete(e))}})}_cacheFilterModel(e,t,n){this._filterModels.has(e)||this._filterModels.set(e,new Map),this._filterModels.get(e).set(t,n)}};exports.SheetsFilterService=pe([f.OnLifecycle(f.LifecycleStages.Ready,exports.SheetsFilterService),U(0,f.IResourceManagerService),U(1,f.IUniverInstanceService),U(2,f.ICommandService)],exports.SheetsFilterService);function Fe(r,s){for(let e=0;e<r.length;e++){let t=e;if(r[e])for(let n=e+1;n<r.length;n++)r[t]&&r[n]&&s(r[t],r[n])&&(r[t]=null,t=n)}return r.filter(e=>e!==null)}function T(r){return Fe(r,(s,e)=>s.id===v.id&&e.id===v.id&&s.params.unitId===e.params.unitId&&s.params.subUnitId===e.params.subUnitId&&s.params.col===e.params.col)}var we=Object.defineProperty,Se=Object.getOwnPropertyDescriptor,ve=(r,s,e,t)=>{for(var n=t>1?void 0:t?Se(s,e):s,i=r.length-1,o;i>=0;i--)(o=r[i])&&(n=(t?o(s,e,n):o(n))||n);return t&&n&&we(s,e,n),n},I=(r,s)=>(e,t)=>s(e,t,r);let b=class extends f.Disposable{constructor(r,s,e,t,n){super(),this._commandService=r,this._sheetInterceptorService=s,this._sheetsFilterService=e,this._univerInstanceService=t,this._refRangeService=n,this._initCommands(),this._initRowFilteredInterceptor(),this._initInterceptors(),this._commandExecutedListener(),this._initErrorHandling()}_initCommands(){[v,F,z,A].forEach(r=>this.disposeWithMe(this._commandService.registerCommand(r)))}_initInterceptors(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:e=>this._getUpdateFilter(e)}));const r=new f.DisposableCollection,s=(e,t)=>{var c;const n=this._univerInstanceService.getUniverSheetInstance(e);if(!n||!(n==null?void 0:n.getSheetBySheetId(t)))return;r.dispose();const o=(c=this._sheetsFilterService.getFilterModel(e,t))==null?void 0:c.getRange(),l=u=>{switch(u.id){case S.InsertRowCommand.id:{const a=u.params,d=a.unitId||e,m=a.subUnitId||t;return this._handleInsertRowCommand(a,d,m)}case S.InsertColCommand.id:{const a=u.params,d=a.unitId||e,m=a.subUnitId||t;return this._handleInsertColCommand(a,d,m)}case S.RemoveColCommand.id:{const a=u.params;return this._handleRemoveColCommand(a,e,t)}case S.RemoveRowCommand.id:{const a=u.params;return this._handleRemoveRowCommand(a,e,t)}case S.EffectRefRangId.MoveColsCommandId:{const a=u.params;return this._handleMoveColsCommand(a,e,t)}case S.EffectRefRangId.MoveRowsCommandId:{const a=u.params;return this._handleMoveRowsCommand(a,e,t)}case S.MoveRangeCommand.id:{const a=u.params;return this._handleMoveRangeCommand(a,e,t)}}return{redos:[],undos:[]}};o&&r.add(this._refRangeService.registerRefRange(o,l,e,t))};this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===S.SetWorksheetActivateCommand.id){const t=e.params,n=t.subUnitId,i=t.unitId;if(!n||!i)return;s(i,n)}if(e.id===F.id){const t=e.params,n=t.subUnitId,i=t.unitId;if(!n||!i)return;s(t.unitId,t.subUnitId)}})),this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe(e=>{if(e){const t=this._univerInstanceService.getUniverSheetInstance(e),n=t==null?void 0:t.getActiveSheet();n&&s(e,n.getSheetId())}}))}_getUpdateFilter(r){const{id:s}=r;switch(s){case S.RemoveSheetCommand.id:{const e=r.params;return this._handleRemoveSheetCommand(e,e.unitId,e.subUnitId)}}return{redos:[],undos:[]}}_handleInsertColCommand(r,s,e){var g;const t=this._sheetsFilterService.getFilterModel(s,e),n=(g=t==null?void 0:t.getRange())!=null?g:null;if(!t||!n)return this._handleNull();const{startColumn:i,endColumn:o}=n,{startColumn:l,endColumn:c}=r.range,u=c-l+1;if(c>o)return this._handleNull();const a=[],d=[],m=l,R={unitId:s,subUnitId:e,range:{...n,startColumn:l<=i?i+u:i,endColumn:o+u}},C={unitId:s,subUnitId:e,range:n};a.push({id:F.id,params:R}),d.push({id:F.id,params:C});const _=t.getAllFilterColumns().filter(h=>h[0]>=m);if(_.length!==0){const{undos:h,redos:M}=this.moveCriteria(s,e,_,u);a.push(...M),d.push(...h)}return{redos:T(a),undos:T(d)}}_handleInsertRowCommand(r,s,e){var C;const t=this._sheetsFilterService.getFilterModel(s,e),n=(C=t==null?void 0:t.getRange())!=null?C:null;if(!t||!n)return this._handleNull();const{startRow:i,endRow:o}=n,{startRow:l,endRow:c}=r.range,u=c-l+1;if(c>o)return this._handleNull();const a=[],d=[],m={unitId:s,subUnitId:e,range:{...n,startRow:l<=i?i+u:i,endRow:o+u}},R={unitId:s,subUnitId:e,range:n};return a.push({id:F.id,params:m}),d.push({id:F.id,params:R}),{redos:T(a),undos:T(d)}}_handleRemoveColCommand(r,s,e){var w;const t=this._sheetsFilterService.getFilterModel(s,e),n=(w=t==null?void 0:t.getRange())!=null?w:null;if(!t||!n)return this._handleNull();const{startColumn:i,endColumn:o}=n,{startColumn:l,endColumn:c}=r.range;if(l>o)return this._handleNull();const u=[],a=[],d=c<i?0:Math.min(c,o)-Math.max(l,i)+1,m=c-l+1,R=t.getAllFilterColumns();R.forEach(_=>{const[g,h]=_;g<=c&&g>=l&&(u.push({id:v.id,params:{unitId:s,subUnitId:e,col:g,criteria:null}}),a.push({id:v.id,params:{unitId:s,subUnitId:e,col:g,criteria:{...h.serialize(),colId:g}}}))});const C=R.filter(_=>{const[g,h]=_;return g>c});if(C.length>0){const{undos:_,redos:g}=this.moveCriteria(s,e,C,-m);u.push(...g),a.push(..._)}if(d===o-i+1){const _={unitId:s,subUnitId:e};u.push({id:A.id,params:_})}else if(i<=l){const _=o-d,g={unitId:s,subUnitId:e,range:{...n,endColumn:_}};u.push({id:F.id,params:g})}else{const _={unitId:s,subUnitId:e,range:{...n,startColumn:l,endColumn:o-(c-l+1)}};u.push({id:F.id,params:_})}return a.push({id:F.id,params:{range:n,unitId:s,subUnitId:e}}),{undos:T(a),redos:T(u)}}_handleRemoveRowCommand(r,s,e){var C;const t=this._sheetsFilterService.getFilterModel(s,e);if(!t)return this._handleNull();const n=t.getRange(),{startRow:i,endRow:o}=n,{startRow:l,endRow:c}=r.range;if(l>o)return this._handleNull();const u=[],a=[],d=t.getAllFilterColumns(),m=i<=c&&i>=l;a.push({id:F.id,params:{range:n,unitId:s,subUnitId:e}});const R=Math.min(c,o)-Math.max(l,i)+1;if(R===o-i+1||m){const w={unitId:s,subUnitId:e};u.push({id:A.id,params:w}),d.forEach(_=>{const[g,h]=_,M={unitId:s,subUnitId:e,col:g,criteria:{...h.serialize(),colId:g}};a.push({id:v.id,params:M})})}else{const w=(C=this._univerInstanceService.getUniverSheetInstance(s))==null?void 0:C.getSheetBySheetId(e);if(!w)return this._handleNull();const _=[];for(let y=l;y<=c;y++)w.getRowFiltered(y)&&_.push(y);const g=Math.min(i,l),h=g+(o-i)-R+_.length,M={unitId:s,subUnitId:e,range:{...n,startRow:g,endRow:h}};u.push({id:F.id,params:M})}return{undos:T(a),redos:T(u)}}_handleMoveColsCommand(r,s,e){var g;const t=this._sheetsFilterService.getFilterModel(s,e),n=(g=t==null?void 0:t.getRange())!=null?g:null;if(!t||!n)return this._handleNull();const{startColumn:i,endColumn:o}=n,{fromRange:l,toRange:c}=r;if(l.endColumn<i&&c.startColumn<=i||l.startColumn>o&&c.endColumn>o)return this._handleNull();const u=[],a=[],d={};for(let h=i;h<=o;h++)d[h]={colIndex:h,filter:t.getFilterColumn(h)};f.moveMatrixArray(l.startColumn,l.endColumn-l.startColumn+1,c.startColumn,d);let m=n.startColumn,R=n.endColumn;i>=l.startColumn&&i<=l.endColumn&&c.startColumn>l.startColumn&&l.endColumn<o&&(m=l.endColumn+1),o>=l.startColumn&&o<=l.endColumn&&c.startColumn<l.startColumn&&l.startColumn>i&&(R=l.startColumn-1);const C=Object.keys(d).map(h=>Number(h)),w=C.find(h=>d[h].colIndex===R),_=C.find(h=>d[h].colIndex===m);if(C.forEach(h=>{var V,D;const{colIndex:M,filter:y}=d[h],N=h;if(y){if(N>=_&&N<=w){const B={unitId:s,subUnitId:e,col:N,criteria:{...y.serialize(),colId:N}};u.push({id:v.id,params:B}),a.push({id:A.id,params:{unitId:s,subUnitId:e,col:N,criteria:{...(V=t.getFilterColumn(N))==null?void 0:V.serialize(),colId:N}}})}if(!((D=d[M])!=null&&D.filter)){const B={unitId:s,subUnitId:e,col:M,criteria:null};u.push({id:v.id,params:B}),a.push({id:v.id,params:{unitId:s,subUnitId:e,col:M,criteria:{...y.serialize(),colId:M}}})}}}),i!==_||o!==w){const h={unitId:s,subUnitId:e,range:{...n,startColumn:_,endColumn:w}};u.unshift({id:F.id,params:h}),a.push({id:F.id,params:{range:n,unitId:s,subUnitId:e}})}return{undos:a,redos:u}}_handleMoveRowsCommand(r,s,e){var g;const t=this._sheetsFilterService.getFilterModel(s,e),n=(g=t==null?void 0:t.getRange())!=null?g:null;if(!t||!n)return this._handleNull();const{startRow:i,endRow:o}=n,{fromRange:l,toRange:c}=r;if(l.endRow<i&&c.startRow<=i||l.startRow>o&&c.endRow>o)return this._handleNull();const u=[],a=[],d={};for(let h=i;h<=o;h++)d[h]={oldIndex:h};const m=i;let R=o;o>=l.startRow&&o<=l.endRow&&c.startRow<l.startRow&&l.startRow>i&&(R=l.startRow-1),f.moveMatrixArray(l.startRow,l.endRow-l.startRow+1,c.startRow,d);const C=Object.keys(d).map(h=>Number(h)),w=C.find(h=>d[h].oldIndex===R),_=C.find(h=>d[h].oldIndex===m);if(i!==_||o!==w){const h={unitId:s,subUnitId:e,range:{...n,startRow:_,endRow:w}};u.unshift({id:F.id,params:h}),a.push({id:F.id,params:{range:n,unitId:s,subUnitId:e}})}return{redos:u,undos:a}}_handleMoveRangeCommand(r,s,e){const{fromRange:t,toRange:n}=r,i=this._sheetsFilterService.getFilterModel(s,e);if(!i)return this._handleNull();const o=i.getRange();if(!o)return this._handleNull();const l=[],c=[];if(f.Rectangle.contains(t,o)){const u=o.startRow-t.startRow,a=o.startColumn-t.startColumn,d={startRow:n.startRow+u,startColumn:n.startColumn+a,endRow:n.startRow+u+(o.endRow-o.startRow),endColumn:n.startColumn+a+(o.endColumn-o.startColumn)},m={id:A.id,params:{unitId:s,subUnitId:e}},R={id:F.id,params:{unitId:s,subUnitId:e,range:d}},C={id:F.id,params:{unitId:s,subUnitId:e,range:o}};l.push(m,R),c.push(m,C);const w=i.getAllFilterColumns(),_=n.startColumn-t.startColumn;w.forEach(g=>{const[h,M]=g;M&&(l.push({id:v.id,params:{unitId:s,subUnitId:e,col:h+_,criteria:{...M.serialize(),colId:h+_}}}),c.push({id:v.id,params:{unitId:s,subUnitId:e,col:h,criteria:{...M.serialize(),colId:h}}}))})}return{redos:l,undos:c}}_handleRemoveSheetCommand(r,s,e){const t=this._sheetsFilterService.getFilterModel(s,e);if(!t)return this._handleNull();const n=t.getRange();if(!n)return this._handleNull();const i=[],o=[];return t.getAllFilterColumns().forEach(c=>{const[u,a]=c;o.push({id:v.id,params:{unitId:s,subUnitId:e,col:c,criteria:{...a.serialize(),colId:c}}})}),i.push({id:A.id,params:{unitId:s,subUnitId:e,range:n}}),o.unshift({id:F.id,params:{range:n,unitId:s,subUnitId:e}}),{undos:o,redos:i}}_handleNull(){return{redos:[],undos:[]}}_initRowFilteredInterceptor(){this.disposeWithMe(this._sheetInterceptorService.intercept(S.INTERCEPTOR_POINT.ROW_FILTERED,{handler:(r,s)=>{var e,t;return r?!0:(t=(e=this._sheetsFilterService.getFilterModel(s.unitId,s.subUnitId))==null?void 0:e.isRowFiltered(s.row))!=null?t:!1}}))}moveCriteria(r,s,e,t){const n={unitId:r,subUnitId:s,criteria:null,col:-1},i=[],o=[];return e.forEach(l=>{const[c,u]=l;o.push({id:v.id,params:{...n,col:c}}),i.push({id:v.id,params:{...n,col:c,criteria:{...u.serialize(),colId:c}}})}),e.forEach(l=>{const[c,u]=l;o.push({id:v.id,params:{...n,col:c+t,criteria:{...u.serialize(),colId:c+t}}}),i.push({id:v.id,params:{...n,col:c+t,criteria:null}})}),{redos:o,undos:i}}_commandExecutedListener(){this.disposeWithMe(this._commandService.onCommandExecuted((r,s)=>{var c,u;const{unitId:e,subUnitId:t}=r.params||{},n=this._sheetsFilterService.getFilterModel(e,t);if(!n)return;const i=Array.from(n.filteredOutRows).sort((a,d)=>a-d),o=[];let l=!1;if(r.id===S.RemoveRowMutation.id){const{startRow:a,endRow:d}=r.params.range,m=i.filter(R=>R>=a&&R<=d);i.forEach(R=>{if(R<a)o.push(R);else if(l=!0,R<=d){const C=Math.max(a,o.length?o[o.length-1]+1:a);o.push(C)}else o.push(R-(d-a+1-m.length))})}if(r.id===S.InsertRowMutation.id){const{startRow:a,endRow:d}=r.params.range;i.forEach(m=>{m>=a?(l=!0,o.push(m+(d-a+1))):o.push(m)})}if(l&&(n.filteredOutRows=new Set(o)),r.id===S.SetRangeValuesMutation.id&&!(s!=null&&s.fromCollab)&&!(s!=null&&s.onlyLocal)){const a=this._getExtendRegion(e,t);if(a){const d=r.params.cellValue;if(d)for(let m=a.startColumn;m<=a.endColumn;m++){const R=(c=d==null?void 0:d[a.startRow])==null?void 0:c[m];if(R&&Object.keys(R).length!==0){const C=(u=this._univerInstanceService.getUnit(e))==null?void 0:u.getSheetBySheetId(t);if(C){const w=S.expandToContinuousRange(a,{down:!0},C),_=this._sheetsFilterService.getFilterModel(e,t),g=_.getRange();_.setRange({...g,endRow:w.endRow})}}}}}}))}_getExtendRegion(r,s){var l;const e=this._sheetsFilterService.getFilterModel(r,s);if(!e)return null;const t=(l=this._univerInstanceService.getUnit(r))==null?void 0:l.getSheetBySheetId(s);if(!t)return null;const n=e.getRange();if(!n)return null;const i=t.getRowCount()-1,o=t.getRowManager();for(let c=n.endRow+1;c<=i;c++)if(o.getRowRawVisible(c))return{startRow:c,endRow:c,startColumn:n.startColumn,endColumn:n.endColumn};return null}_initErrorHandling(){this.disposeWithMe(this._commandService.beforeCommandExecuted(r=>{const s=r.params,e=S.getSheetCommandTarget(this._univerInstanceService);if(!e)return;const{subUnitId:t,unitId:n}=e,i=this._sheetsFilterService.getFilterModel(n,t);if(!i)return;const o=i.getRange();if(r.id===S.MoveRowsCommand.id&&s.fromRange.startRow<=o.startRow&&s.fromRange.endRow<o.endRow)throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"),new Error("[SheetsFilterController]: Cannot move header row of filter")}))}};b=ve([f.OnLifecycle(f.LifecycleStages.Ready,b),I(0,f.ICommandService),I(1,f.Inject(S.SheetInterceptorService)),I(2,f.Inject(exports.SheetsFilterService)),I(3,f.IUniverInstanceService),I(4,f.Inject(S.RefRangeService))],b);var Me=Object.defineProperty,Ee=Object.getOwnPropertyDescriptor,Oe=(r,s,e,t)=>{for(var n=t>1?void 0:t?Ee(s,e):s,i=r.length-1,o;i>=0;i--)(o=r[i])&&(n=(t?o(s,e,n):o(n))||n);return t&&n&&Me(s,e,n),n},ye=(r,s)=>(e,t)=>s(e,t,r),P;exports.UniverSheetsFilterPlugin=(P=class extends f.Plugin{constructor(s,e){super(),this._injector=e}onStarting(s){[[exports.SheetsFilterService],[b]].forEach(e=>s.add(e))}},p(P,"type",f.UniverInstanceType.UNIVER_SHEET),p(P,"pluginName",W),P);exports.UniverSheetsFilterPlugin=Oe([ye(1,f.Inject(f.Injector))],exports.UniverSheetsFilterPlugin);exports.CustomFilterOperator=O;exports.FILTER_MUTATIONS=re;exports.FilterColumn=te;exports.FilterModel=$;exports.ReCalcSheetsFilterMutation=z;exports.RemoveSheetsFilterMutation=A;exports.SHEET_FILTER_SNAPSHOT_ID=W;exports.SetSheetsFilterCriteriaMutation=v;exports.SetSheetsFilterRangeMutation=F;exports.equals=K;exports.getCustomFilterFn=j;exports.greaterThan=G;exports.greaterThanOrEqualTo=J;exports.lessThan=X;exports.lessThanOrEqualTo=Y;exports.notEquals=H;
package/lib/es/index.js CHANGED
@@ -1,8 +1,7 @@
1
1
  var ue = Object.defineProperty;
2
2
  var de = (n, t, e) => t in n ? ue(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
3
  var C = (n, t, e) => de(n, typeof t != "symbol" ? t + "" : t, e);
4
- import { isNumeric as he, Disposable as b, Rectangle as k, mergeSets as z, Tools as q, extractPureTextFromCell as fe, CellValueType as j, CommandType as $, UniverInstanceType as V, fromCallback as me, OnLifecycle as ee, LifecycleStages as te, IResourceManagerService as _e, IUniverInstanceService as re, ICommandService as ne, DisposableCollection as ge, moveMatrixArray as G, Plugin as Re } from "@univerjs/core";
5
- import { Inject as P, Injector as Ce } from "@wendellhu/redi";
4
+ import { isNumeric as he, Disposable as b, Rectangle as k, mergeSets as z, Tools as q, extractPureTextFromCell as fe, CellValueType as j, CommandType as $, UniverInstanceType as V, fromCallback as me, OnLifecycle as ee, LifecycleStages as te, IResourceManagerService as _e, IUniverInstanceService as re, ICommandService as ne, Inject as P, DisposableCollection as ge, moveMatrixArray as G, Plugin as Re, Injector as Ce } from "@univerjs/core";
6
5
  import { BehaviorSubject as N, merge as pe, filter as we, switchMap as Fe, of as Se } from "rxjs";
7
6
  import { SheetInterceptorService as ve, RefRangeService as Me, SetWorksheetActivateCommand as Ee, RemoveSheetCommand as Oe, INTERCEPTOR_POINT as ye, RemoveRowMutation as Ae, InsertRowMutation as Te, SetRangeValuesMutation as xe, expandToContinuousRange as Ne, getSheetCommandTarget as $e, MoveRowsCommand as Ie, MoveRangeCommand as Pe, EffectRefRangId as J, RemoveRowCommand as Be, RemoveColCommand as Le, InsertColCommand as be, InsertRowCommand as Ue } from "@univerjs/sheets";
8
7
  var O = /* @__PURE__ */ ((n) => (n.EQUAL = "equal", n.GREATER_THAN = "greaterThan", n.GREATER_THAN_OR_EQUAL = "greaterThanOrEqual", n.LESS_THAN = "lessThan", n.LESS_THAN_OR_EQUAL = "lessThanOrEqual", n.NOT_EQUALS = "notEqual", n))(O || {});
@@ -1,5 +1,4 @@
1
- import { Plugin, UniverInstanceType } from '@univerjs/core';
2
- import { Injector } from '@wendellhu/redi';
1
+ import { Injector, Plugin, UniverInstanceType } from '@univerjs/core';
3
2
 
4
3
  export declare class UniverSheetsFilterPlugin extends Plugin {
5
4
  protected readonly _injector: Injector;
package/lib/umd/index.js CHANGED
@@ -1 +1 @@
1
- (function(m,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("@univerjs/core"),require("@wendellhu/redi"),require("rxjs"),require("@univerjs/sheets")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@wendellhu/redi","rxjs","@univerjs/sheets"],c):(m=typeof globalThis<"u"?globalThis:m||self,c(m.UniverSheetsFilter={},m.UniverCore,m["@wendellhu/redi"],m.rxjs,m.UniverSheets))})(this,function(m,c,O,y,v){"use strict";var ye=Object.defineProperty;var Te=(m,c,O)=>c in m?ye(m,c,{enumerable:!0,configurable:!0,writable:!0,value:O}):m[c]=O;var w=(m,c,O)=>Te(m,typeof c!="symbol"?c+"":c,O);var B;var T=(n=>(n.EQUAL="equal",n.GREATER_THAN="greaterThan",n.GREATER_THAN_OR_EQUAL="greaterThanOrEqual",n.LESS_THAN="lessThan",n.LESS_THAN_OR_EQUAL="lessThanOrEqual",n.NOT_EQUALS="notEqual",n))(T||{});const q={operator:T.GREATER_THAN,fn:(n,i)=>P(n)?n>i:!1},Q={operator:T.GREATER_THAN_OR_EQUAL,fn:(n,i)=>P(n)?n>=i:!1},G={operator:T.LESS_THAN,fn:(n,i)=>P(n)?n<i:!1},J={operator:T.LESS_THAN_OR_EQUAL,fn:(n,i)=>P(n)?n<=i:!1},X={operator:T.EQUAL,fn:(n,i)=>P(n)?n===i:!1},x={operator:T.NOT_EQUALS,fn:(n,i)=>{if(typeof i=="string"){if(i===" ")return n!=null;const e=Z(n);return e&&le(i)?!k(i).test(e):e!==i}return P(n)?n!==i:!0}},Y=new Map([]);[q,Q,G,J,X,x].forEach(n=>{Y.set(n.operator,n)});function se(n){return!!n}const oe={fn:(n,i)=>{const e=Z(n);return e===null?i==="":k(i).test(e)}};function j(n){return n?Y.get(n):oe}function P(n){return typeof n=="number"}function K(n){return!!(typeof n=="number"||typeof n=="string"&&c.isNumeric(n))}function Z(n){return typeof n=="boolean"||n==null?null:typeof n=="string"?n:n.toString()}function le(n){return typeof n=="number"?!1:n.indexOf("*")!==-1||n.indexOf("?")!==-1}function k(n){const i=n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replaceAll("?",".").replace(/[*]/g,".$&");return new RegExp(`^${i}$`)}const H=()=>new Set;class L extends c.Disposable{constructor(e,t,r){super();w(this,"_filteredOutRows$",new y.BehaviorSubject(H()));w(this,"filteredOutRows$",this._filteredOutRows$.asObservable());w(this,"_hasCriteria$",new y.BehaviorSubject(!1));w(this,"hasCriteria$",this._hasCriteria$.asObservable());w(this,"_filterColumnByIndex",new Map);w(this,"_alreadyFilteredOutRows",H());w(this,"_range");this.unitId=e,this.subUnitId=t,this._worksheet=r}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:c.Rectangle.clone(this._range),filterColumns:this._getAllFilterColumns(!0).sort(([t],[r])=>t-r).map(([t,r])=>r.serialize())};return this._alreadyFilteredOutRows&&(e.cachedFilteredOut=Array.from(this._alreadyFilteredOutRows).sort()),e}static deserialize(e,t,r,s){const o=new L(e,t,r);return o._dump(s),o}_dump(e){var t;this.setRange(e.ref),(t=e.filterColumns)==null||t.forEach(r=>this._setCriteriaWithoutReCalc(r.colId,r)),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,[,r])=>{const s=r.calc({getAlreadyFilteredOutRows:()=>t});return s?c.mergeSets(t,s):t},new Set)}setRange(e){this._range=e,this._getAllFilterColumns(!0).forEach(([t,r])=>{r.setRangeAndColumn({startRow:e.startRow,endRow:e.endRow,startColumn:t,endColumn:t},t)})}setCriteria(e,t,r=!1){if(!this._range)throw new Error("[FilterModel] could not set criteria before a range is set!");if(!t){this._removeCriteria(e),this._rebuildAlreadyFilteredOutRowsWithCache(),r&&this._reCalcAllColumns(),this._emit(),this._emitHasCriteria();return}this._setCriteriaWithoutReCalc(e,t),r&&(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(([r,s])=>s)}_reCalcAllColumns(){this._alreadyFilteredOutRows=H(),this._getAllFilterColumns().forEach(e=>e.__clearCache()),this._reCalcWithNoCacheColumns()}_setCriteriaWithoutReCalc(e,t){const r=this._range;if(!r)throw new Error("[FilterModel] could not set criteria before a range is set!");const{startColumn:s,endColumn:o}=r;if(e>o||e<s)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 ee(this.unitId,this.subUnitId,this._worksheet,t,{getAlreadyFilteredOutRows:()=>this._alreadyFilteredOutRows}),l.setRangeAndColumn(r,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,r)=>c.mergeSets(t,r.filteredOutRows),new Set);this._alreadyFilteredOutRows=e}_reCalcWithNoCacheColumns(){const e=this._getAllFilterColumns().filter(t=>!t.hasCache());for(const t of e){const r=t.reCalc();r&&(this._alreadyFilteredOutRows=c.mergeSets(this._alreadyFilteredOutRows,r))}}}class ee extends c.Disposable{constructor(e,t,r,s,o){super();w(this,"_filteredOutRows",null);w(this,"_filterFn",null);w(this,"_range",null);w(this,"_column",0);w(this,"_filterByValues",!1);this.unitId=e,this.subUnitId=t,this._worksheet=r,this._criteria=s,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 c.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 c.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,r={startColumn:t,endColumn:t,startRow:this._range.startRow+1,endRow:this._range.endRow},s=new Set,o=e.getAlreadyFilteredOutRows();for(const l of this._worksheet.iterateByColumn(r,!1,!1)){const{row:u,rowSpan:d,col:a}=l;if(o.has(u)&&(!d||d===1))continue;const h=this._filterByValues?c.extractPureTextFromCell(this._worksheet.getCell(u,a)):_e(this._worksheet,u,a);if(!this._filterFn(h)&&(s.add(u),d))for(let _=1;_<d;_++)s.add(u+_)}return s}_generateFilterFn(){this._criteria&&(this._filterFn=ae(this._criteria),this._filterByValues=!!this._criteria.filters)}}function ae(n){if(n.filters)return ue(n.filters);if(n.customFilters)return ce(n.customFilters);throw new Error("[FilterModel]: other types of filters are not supported yet.")}function ue(n){const i=!!n.blank,e=new Set(n.filters);return t=>t===void 0||t===""?i:e.has(typeof t=="string"?t:`${t}`)}function ce(n){const i=n.customFilters.map(e=>me(e));return fe(i)?n.and?de(i):he(i):i[0]}function de(n){const[i,e]=n;return t=>i(t)&&e(t)}function he(n){const[i,e]=n;return t=>i(t)||e(t)}function fe(n){return n.length===2}function me(n){const i=n.val;if(n.operator===T.NOT_EQUALS&&!K(i))return r=>x.fn(r,i);if(se(n.operator)){if(!K(i))return()=>!1;const r=j(n.operator),s=Number(i);return o=>r.fn(o,s)}const e=j(n.operator);return t=>e.fn(t,i)}function _e(n,i,e){const t=n.getCell(i,e);if(!t)return null;const r=n.getCellRaw(i,e);return t&&!r?te(t):r?t.t===c.CellValueType.NUMBER&&typeof t.v=="string"?r.v:te(r):null}function te(n){var t,r;const i=(r=(t=n.p)==null?void 0:t.body)==null?void 0:r.dataStream;if(i)return i.trimEnd();const e=n.v;return typeof e=="string"?n.t===c.CellValueType.BOOLEAN?e.toUpperCase():e:typeof e=="number"?n.t===c.CellValueType.BOOLEAN?e?"TRUE":"FALSE":e:typeof e=="boolean"?e?"TRUE":"FALSE":""}const S={id:"sheet.mutation.set-filter-range",type:c.CommandType.MUTATION,handler:(n,i)=>{const{subUnitId:e,unitId:t,range:r}=i;return n.get(m.SheetsFilterService).ensureFilterModel(t,e).setRange(r),!0}},M={id:"sheet.mutation.set-filter-criteria",type:c.CommandType.MUTATION,handler:(n,i)=>{const{subUnitId:e,unitId:t,criteria:r,col:s,reCalc:o=!0}=i,u=n.get(m.SheetsFilterService).getFilterModel(t,e);return u?(u.setCriteria(s,r,o),!0):!1}},A={id:"sheet.mutation.remove-filter",type:c.CommandType.MUTATION,handler:(n,i)=>{const{unitId:e,subUnitId:t}=i;return n.get(m.SheetsFilterService).removeFilterModel(e,t)}},z={id:"sheet.mutation.re-calc-filter",type:c.CommandType.MUTATION,handler:(n,i)=>{const{unitId:e,subUnitId:t}=i,s=n.get(m.SheetsFilterService).getFilterModel(e,t);return s?(s.reCalc(),!0):!1}};var ge=Object.defineProperty,Ce=Object.getOwnPropertyDescriptor,Re=(n,i,e,t)=>{for(var r=t>1?void 0:t?Ce(i,e):i,s=n.length-1,o;s>=0;s--)(o=n[s])&&(r=(t?o(i,e,r):o(r))||r);return t&&r&&ge(i,e,r),r},W=(n,i)=>(e,t)=>i(e,t,n);const re=new Set([S.id,M.id,A.id,z.id]),V="SHEET_FILTER_PLUGIN";m.SheetsFilterService=class extends c.Disposable{constructor(e,t,r){super();w(this,"_filterModels",new Map);w(this,"_loadedUnitId$",new y.BehaviorSubject(null));w(this,"loadedUnitId$",this._loadedUnitId$.asObservable());w(this,"_errorMsg$",new y.BehaviorSubject(null));w(this,"errorMsg$",this._errorMsg$.asObservable());w(this,"_activeFilterModel$",new y.BehaviorSubject(null));w(this,"activeFilterModel$",this._activeFilterModel$.asObservable());this._resourcesManagerService=e,this._univerInstanceService=t,this._commandService=r,this._initModel(),this._initActiveFilterModel()}get activeFilterModel(){return this._activeFilterModel$.getValue()}ensureFilterModel(e,t){const r=this.getFilterModel(e,t);if(r)return r;const s=this._univerInstanceService.getUniverSheetInstance(e);if(!s)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing workbook ${e}!`);const o=s.getSheetBySheetId(t);if(!o)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing worksheet ${t}!`);const l=new L(e,t,o);return this._cacheFilterModel(e,t,l),l}getFilterModel(e,t){var r,s;return(s=(r=this._filterModels.get(e))==null?void 0:r.get(t))!=null?s:null}removeFilterModel(e,t){const r=this.getFilterModel(e,t);return r?(r.dispose(),this._filterModels.get(e).delete(t),!0):!1}setFilterErrorMsg(e){this._errorMsg$.next(e)}_updateActiveFilterModel(){let e;try{if(e=this._univerInstanceService.getCurrentUnitForType(c.UniverInstanceType.UNIVER_SHEET),!e){this._activeFilterModel$.next(null);return}}catch{return}const t=e.getActiveSheet(!0);if(!t){this._activeFilterModel$.next(null);return}const r=t.getUnitId(),s=t.getSheetId(),o=this.getFilterModel(r,s);this._activeFilterModel$.next(o)}_initActiveFilterModel(){this.disposeWithMe(y.merge(c.fromCallback(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(y.filter(([e])=>e.type===c.CommandType.MUTATION&&re.has(e.id))),this._univerInstanceService.getCurrentTypeOfUnit$(c.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 r={};return t.forEach((s,o)=>{r[o]=s.serialize()}),JSON.stringify(r)}_deserializeAutoFiltersForUnit(e,t){const r=this._univerInstanceService.getUniverSheetInstance(e);Object.keys(t).forEach(s=>{const o=t[s],l=L.deserialize(e,s,r.getSheetBySheetId(s),o);this._cacheFilterModel(e,s,l)})}_initModel(){this._resourcesManagerService.registerPluginResource({pluginName:V,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(r=>r.dispose()),this._filterModels.delete(e))}})}_cacheFilterModel(e,t,r){this._filterModels.has(e)||this._filterModels.set(e,new Map),this._filterModels.get(e).set(t,r)}},m.SheetsFilterService=Re([c.OnLifecycle(c.LifecycleStages.Ready,m.SheetsFilterService),W(0,c.IResourceManagerService),W(1,c.IUniverInstanceService),W(2,c.ICommandService)],m.SheetsFilterService);function Fe(n,i){for(let e=0;e<n.length;e++){let t=e;if(n[e])for(let r=e+1;r<n.length;r++)n[t]&&n[r]&&i(n[t],n[r])&&(n[t]=null,t=r)}return n.filter(e=>e!==null)}function N(n){return Fe(n,(i,e)=>i.id===M.id&&e.id===M.id&&i.params.unitId===e.params.unitId&&i.params.subUnitId===e.params.subUnitId&&i.params.col===e.params.col)}var we=Object.defineProperty,Se=Object.getOwnPropertyDescriptor,pe=(n,i,e,t)=>{for(var r=t>1?void 0:t?Se(i,e):i,s=n.length-1,o;s>=0;s--)(o=n[s])&&(r=(t?o(i,e,r):o(r))||r);return t&&r&&we(i,e,r),r},U=(n,i)=>(e,t)=>i(e,t,n);let b=class extends c.Disposable{constructor(n,i,e,t,r){super(),this._commandService=n,this._sheetInterceptorService=i,this._sheetsFilterService=e,this._univerInstanceService=t,this._refRangeService=r,this._initCommands(),this._initRowFilteredInterceptor(),this._initInterceptors(),this._commandExecutedListener(),this._initErrorHandling()}_initCommands(){[M,S,z,A].forEach(n=>this.disposeWithMe(this._commandService.registerCommand(n)))}_initInterceptors(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:e=>this._getUpdateFilter(e)}));const n=new c.DisposableCollection,i=(e,t)=>{var u;const r=this._univerInstanceService.getUniverSheetInstance(e);if(!r||!(r==null?void 0:r.getSheetBySheetId(t)))return;n.dispose();const o=(u=this._sheetsFilterService.getFilterModel(e,t))==null?void 0:u.getRange(),l=d=>{switch(d.id){case v.InsertRowCommand.id:{const a=d.params,h=a.unitId||e,_=a.subUnitId||t;return this._handleInsertRowCommand(a,h,_)}case v.InsertColCommand.id:{const a=d.params,h=a.unitId||e,_=a.subUnitId||t;return this._handleInsertColCommand(a,h,_)}case v.RemoveColCommand.id:{const a=d.params;return this._handleRemoveColCommand(a,e,t)}case v.RemoveRowCommand.id:{const a=d.params;return this._handleRemoveRowCommand(a,e,t)}case v.EffectRefRangId.MoveColsCommandId:{const a=d.params;return this._handleMoveColsCommand(a,e,t)}case v.EffectRefRangId.MoveRowsCommandId:{const a=d.params;return this._handleMoveRowsCommand(a,e,t)}case v.MoveRangeCommand.id:{const a=d.params;return this._handleMoveRangeCommand(a,e,t)}}return{redos:[],undos:[]}};o&&n.add(this._refRangeService.registerRefRange(o,l,e,t))};this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===v.SetWorksheetActivateCommand.id){const t=e.params,r=t.subUnitId,s=t.unitId;if(!r||!s)return;i(s,r)}if(e.id===S.id){const t=e.params,r=t.subUnitId,s=t.unitId;if(!r||!s)return;i(t.unitId,t.subUnitId)}})),this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe(e=>{if(e){const t=this._univerInstanceService.getUniverSheetInstance(e),r=t==null?void 0:t.getActiveSheet();r&&i(e,r.getSheetId())}}))}_getUpdateFilter(n){const{id:i}=n;switch(i){case v.RemoveSheetCommand.id:{const e=n.params;return this._handleRemoveSheetCommand(e,e.unitId,e.subUnitId)}}return{redos:[],undos:[]}}_handleInsertColCommand(n,i,e){var C;const t=this._sheetsFilterService.getFilterModel(i,e),r=(C=t==null?void 0:t.getRange())!=null?C:null;if(!t||!r)return this._handleNull();const{startColumn:s,endColumn:o}=r,{startColumn:l,endColumn:u}=n.range,d=u-l+1;if(u>o)return this._handleNull();const a=[],h=[],_=l,R={unitId:i,subUnitId:e,range:{...r,startColumn:l<=s?s+d:s,endColumn:o+d}},F={unitId:i,subUnitId:e,range:r};a.push({id:S.id,params:R}),h.push({id:S.id,params:F});const g=t.getAllFilterColumns().filter(f=>f[0]>=_);if(g.length!==0){const{undos:f,redos:E}=this.moveCriteria(i,e,g,d);a.push(...E),h.push(...f)}return{redos:N(a),undos:N(h)}}_handleInsertRowCommand(n,i,e){var F;const t=this._sheetsFilterService.getFilterModel(i,e),r=(F=t==null?void 0:t.getRange())!=null?F:null;if(!t||!r)return this._handleNull();const{startRow:s,endRow:o}=r,{startRow:l,endRow:u}=n.range,d=u-l+1;if(u>o)return this._handleNull();const a=[],h=[],_={unitId:i,subUnitId:e,range:{...r,startRow:l<=s?s+d:s,endRow:o+d}},R={unitId:i,subUnitId:e,range:r};return a.push({id:S.id,params:_}),h.push({id:S.id,params:R}),{redos:N(a),undos:N(h)}}_handleRemoveColCommand(n,i,e){var p;const t=this._sheetsFilterService.getFilterModel(i,e),r=(p=t==null?void 0:t.getRange())!=null?p:null;if(!t||!r)return this._handleNull();const{startColumn:s,endColumn:o}=r,{startColumn:l,endColumn:u}=n.range;if(l>o)return this._handleNull();const d=[],a=[],h=u<s?0:Math.min(u,o)-Math.max(l,s)+1,_=u-l+1,R=t.getAllFilterColumns();R.forEach(g=>{const[C,f]=g;C<=u&&C>=l&&(d.push({id:M.id,params:{unitId:i,subUnitId:e,col:C,criteria:null}}),a.push({id:M.id,params:{unitId:i,subUnitId:e,col:C,criteria:{...f.serialize(),colId:C}}}))});const F=R.filter(g=>{const[C,f]=g;return C>u});if(F.length>0){const{undos:g,redos:C}=this.moveCriteria(i,e,F,-_);d.push(...C),a.push(...g)}if(h===o-s+1){const g={unitId:i,subUnitId:e};d.push({id:A.id,params:g})}else if(s<=l){const g=o-h,C={unitId:i,subUnitId:e,range:{...r,endColumn:g}};d.push({id:S.id,params:C})}else{const g={unitId:i,subUnitId:e,range:{...r,startColumn:l,endColumn:o-(u-l+1)}};d.push({id:S.id,params:g})}return a.push({id:S.id,params:{range:r,unitId:i,subUnitId:e}}),{undos:N(a),redos:N(d)}}_handleRemoveRowCommand(n,i,e){var F;const t=this._sheetsFilterService.getFilterModel(i,e);if(!t)return this._handleNull();const r=t.getRange(),{startRow:s,endRow:o}=r,{startRow:l,endRow:u}=n.range;if(l>o)return this._handleNull();const d=[],a=[],h=t.getAllFilterColumns(),_=s<=u&&s>=l;a.push({id:S.id,params:{range:r,unitId:i,subUnitId:e}});const R=Math.min(u,o)-Math.max(l,s)+1;if(R===o-s+1||_){const p={unitId:i,subUnitId:e};d.push({id:A.id,params:p}),h.forEach(g=>{const[C,f]=g,E={unitId:i,subUnitId:e,col:C,criteria:{...f.serialize(),colId:C}};a.push({id:M.id,params:E})})}else{const p=(F=this._univerInstanceService.getUniverSheetInstance(i))==null?void 0:F.getSheetBySheetId(e);if(!p)return this._handleNull();const g=[];for(let I=l;I<=u;I++)p.getRowFiltered(I)&&g.push(I);const C=Math.min(s,l),f=C+(o-s)-R+g.length,E={unitId:i,subUnitId:e,range:{...r,startRow:C,endRow:f}};d.push({id:S.id,params:E})}return{undos:N(a),redos:N(d)}}_handleMoveColsCommand(n,i,e){var C;const t=this._sheetsFilterService.getFilterModel(i,e),r=(C=t==null?void 0:t.getRange())!=null?C:null;if(!t||!r)return this._handleNull();const{startColumn:s,endColumn:o}=r,{fromRange:l,toRange:u}=n;if(l.endColumn<s&&u.startColumn<=s||l.startColumn>o&&u.endColumn>o)return this._handleNull();const d=[],a=[],h={};for(let f=s;f<=o;f++)h[f]={colIndex:f,filter:t.getFilterColumn(f)};c.moveMatrixArray(l.startColumn,l.endColumn-l.startColumn+1,u.startColumn,h);let _=r.startColumn,R=r.endColumn;s>=l.startColumn&&s<=l.endColumn&&u.startColumn>l.startColumn&&l.endColumn<o&&(_=l.endColumn+1),o>=l.startColumn&&o<=l.endColumn&&u.startColumn<l.startColumn&&l.startColumn>s&&(R=l.startColumn-1);const F=Object.keys(h).map(f=>Number(f)),p=F.find(f=>h[f].colIndex===R),g=F.find(f=>h[f].colIndex===_);if(F.forEach(f=>{var ne,ie;const{colIndex:E,filter:I}=h[f],$=f;if(I){if($>=g&&$<=p){const D={unitId:i,subUnitId:e,col:$,criteria:{...I.serialize(),colId:$}};d.push({id:M.id,params:D}),a.push({id:A.id,params:{unitId:i,subUnitId:e,col:$,criteria:{...(ne=t.getFilterColumn($))==null?void 0:ne.serialize(),colId:$}}})}if(!((ie=h[E])!=null&&ie.filter)){const D={unitId:i,subUnitId:e,col:E,criteria:null};d.push({id:M.id,params:D}),a.push({id:M.id,params:{unitId:i,subUnitId:e,col:E,criteria:{...I.serialize(),colId:E}}})}}}),s!==g||o!==p){const f={unitId:i,subUnitId:e,range:{...r,startColumn:g,endColumn:p}};d.unshift({id:S.id,params:f}),a.push({id:S.id,params:{range:r,unitId:i,subUnitId:e}})}return{undos:a,redos:d}}_handleMoveRowsCommand(n,i,e){var C;const t=this._sheetsFilterService.getFilterModel(i,e),r=(C=t==null?void 0:t.getRange())!=null?C:null;if(!t||!r)return this._handleNull();const{startRow:s,endRow:o}=r,{fromRange:l,toRange:u}=n;if(l.endRow<s&&u.startRow<=s||l.startRow>o&&u.endRow>o)return this._handleNull();const d=[],a=[],h={};for(let f=s;f<=o;f++)h[f]={oldIndex:f};const _=s;let R=o;o>=l.startRow&&o<=l.endRow&&u.startRow<l.startRow&&l.startRow>s&&(R=l.startRow-1),c.moveMatrixArray(l.startRow,l.endRow-l.startRow+1,u.startRow,h);const F=Object.keys(h).map(f=>Number(f)),p=F.find(f=>h[f].oldIndex===R),g=F.find(f=>h[f].oldIndex===_);if(s!==g||o!==p){const f={unitId:i,subUnitId:e,range:{...r,startRow:g,endRow:p}};d.unshift({id:S.id,params:f}),a.push({id:S.id,params:{range:r,unitId:i,subUnitId:e}})}return{redos:d,undos:a}}_handleMoveRangeCommand(n,i,e){const{fromRange:t,toRange:r}=n,s=this._sheetsFilterService.getFilterModel(i,e);if(!s)return this._handleNull();const o=s.getRange();if(!o)return this._handleNull();const l=[],u=[];if(c.Rectangle.contains(t,o)){const d=o.startRow-t.startRow,a=o.startColumn-t.startColumn,h={startRow:r.startRow+d,startColumn:r.startColumn+a,endRow:r.startRow+d+(o.endRow-o.startRow),endColumn:r.startColumn+a+(o.endColumn-o.startColumn)},_={id:A.id,params:{unitId:i,subUnitId:e}},R={id:S.id,params:{unitId:i,subUnitId:e,range:h}},F={id:S.id,params:{unitId:i,subUnitId:e,range:o}};l.push(_,R),u.push(_,F);const p=s.getAllFilterColumns(),g=r.startColumn-t.startColumn;p.forEach(C=>{const[f,E]=C;E&&(l.push({id:M.id,params:{unitId:i,subUnitId:e,col:f+g,criteria:{...E.serialize(),colId:f+g}}}),u.push({id:M.id,params:{unitId:i,subUnitId:e,col:f,criteria:{...E.serialize(),colId:f}}}))})}return{redos:l,undos:u}}_handleRemoveSheetCommand(n,i,e){const t=this._sheetsFilterService.getFilterModel(i,e);if(!t)return this._handleNull();const r=t.getRange();if(!r)return this._handleNull();const s=[],o=[];return t.getAllFilterColumns().forEach(u=>{const[d,a]=u;o.push({id:M.id,params:{unitId:i,subUnitId:e,col:u,criteria:{...a.serialize(),colId:u}}})}),s.push({id:A.id,params:{unitId:i,subUnitId:e,range:r}}),o.unshift({id:S.id,params:{range:r,unitId:i,subUnitId:e}}),{undos:o,redos:s}}_handleNull(){return{redos:[],undos:[]}}_initRowFilteredInterceptor(){this.disposeWithMe(this._sheetInterceptorService.intercept(v.INTERCEPTOR_POINT.ROW_FILTERED,{handler:(n,i)=>{var e,t;return n?!0:(t=(e=this._sheetsFilterService.getFilterModel(i.unitId,i.subUnitId))==null?void 0:e.isRowFiltered(i.row))!=null?t:!1}}))}moveCriteria(n,i,e,t){const r={unitId:n,subUnitId:i,criteria:null,col:-1},s=[],o=[];return e.forEach(l=>{const[u,d]=l;o.push({id:M.id,params:{...r,col:u}}),s.push({id:M.id,params:{...r,col:u,criteria:{...d.serialize(),colId:u}}})}),e.forEach(l=>{const[u,d]=l;o.push({id:M.id,params:{...r,col:u+t,criteria:{...d.serialize(),colId:u+t}}}),s.push({id:M.id,params:{...r,col:u+t,criteria:null}})}),{redos:o,undos:s}}_commandExecutedListener(){this.disposeWithMe(this._commandService.onCommandExecuted((n,i)=>{var u,d;const{unitId:e,subUnitId:t}=n.params||{},r=this._sheetsFilterService.getFilterModel(e,t);if(!r)return;const s=Array.from(r.filteredOutRows).sort((a,h)=>a-h),o=[];let l=!1;if(n.id===v.RemoveRowMutation.id){const{startRow:a,endRow:h}=n.params.range,_=s.filter(R=>R>=a&&R<=h);s.forEach(R=>{if(R<a)o.push(R);else if(l=!0,R<=h){const F=Math.max(a,o.length?o[o.length-1]+1:a);o.push(F)}else o.push(R-(h-a+1-_.length))})}if(n.id===v.InsertRowMutation.id){const{startRow:a,endRow:h}=n.params.range;s.forEach(_=>{_>=a?(l=!0,o.push(_+(h-a+1))):o.push(_)})}if(l&&(r.filteredOutRows=new Set(o)),n.id===v.SetRangeValuesMutation.id&&!(i!=null&&i.fromCollab)&&!(i!=null&&i.onlyLocal)){const a=this._getExtendRegion(e,t);if(a){const h=n.params.cellValue;if(h)for(let _=a.startColumn;_<=a.endColumn;_++){const R=(u=h==null?void 0:h[a.startRow])==null?void 0:u[_];if(R&&Object.keys(R).length!==0){const F=(d=this._univerInstanceService.getUnit(e))==null?void 0:d.getSheetBySheetId(t);if(F){const p=v.expandToContinuousRange(a,{down:!0},F),g=this._sheetsFilterService.getFilterModel(e,t),C=g.getRange();g.setRange({...C,endRow:p.endRow})}}}}}}))}_getExtendRegion(n,i){var l;const e=this._sheetsFilterService.getFilterModel(n,i);if(!e)return null;const t=(l=this._univerInstanceService.getUnit(n))==null?void 0:l.getSheetBySheetId(i);if(!t)return null;const r=e.getRange();if(!r)return null;const s=t.getRowCount()-1,o=t.getRowManager();for(let u=r.endRow+1;u<=s;u++)if(o.getRowRawVisible(u))return{startRow:u,endRow:u,startColumn:r.startColumn,endColumn:r.endColumn};return null}_initErrorHandling(){this.disposeWithMe(this._commandService.beforeCommandExecuted(n=>{const i=n.params,e=v.getSheetCommandTarget(this._univerInstanceService);if(!e)return;const{subUnitId:t,unitId:r}=e,s=this._sheetsFilterService.getFilterModel(r,t);if(!s)return;const o=s.getRange();if(n.id===v.MoveRowsCommand.id&&i.fromRange.startRow<=o.startRow&&i.fromRange.endRow<o.endRow)throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"),new Error("[SheetsFilterController]: Cannot move header row of filter")}))}};b=pe([c.OnLifecycle(c.LifecycleStages.Ready,b),U(0,c.ICommandService),U(1,O.Inject(v.SheetInterceptorService)),U(2,O.Inject(m.SheetsFilterService)),U(3,c.IUniverInstanceService),U(4,O.Inject(v.RefRangeService))],b);var ve=Object.defineProperty,Me=Object.getOwnPropertyDescriptor,Ee=(n,i,e,t)=>{for(var r=t>1?void 0:t?Me(i,e):i,s=n.length-1,o;s>=0;s--)(o=n[s])&&(r=(t?o(i,e,r):o(r))||r);return t&&r&&ve(i,e,r),r},Oe=(n,i)=>(e,t)=>i(e,t,n);m.UniverSheetsFilterPlugin=(B=class extends c.Plugin{constructor(i,e){super(),this._injector=e}onStarting(i){[[m.SheetsFilterService],[b]].forEach(e=>i.add(e))}},w(B,"type",c.UniverInstanceType.UNIVER_SHEET),w(B,"pluginName",V),B),m.UniverSheetsFilterPlugin=Ee([Oe(1,O.Inject(O.Injector))],m.UniverSheetsFilterPlugin),m.CustomFilterOperator=T,m.FILTER_MUTATIONS=re,m.FilterColumn=ee,m.FilterModel=L,m.ReCalcSheetsFilterMutation=z,m.RemoveSheetsFilterMutation=A,m.SHEET_FILTER_SNAPSHOT_ID=V,m.SetSheetsFilterCriteriaMutation=M,m.SetSheetsFilterRangeMutation=S,m.equals=X,m.getCustomFilterFn=j,m.greaterThan=q,m.greaterThanOrEqualTo=Q,m.lessThan=G,m.lessThanOrEqualTo=J,m.notEquals=x,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})});
1
+ (function(m,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("@univerjs/core"),require("rxjs"),require("@univerjs/sheets")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","rxjs","@univerjs/sheets"],c):(m=typeof globalThis<"u"?globalThis:m||self,c(m.UniverSheetsFilter={},m.UniverCore,m.rxjs,m.UniverSheets))})(this,function(m,c,E,v){"use strict";var Oe=Object.defineProperty;var ye=(m,c,E)=>c in m?Oe(m,c,{enumerable:!0,configurable:!0,writable:!0,value:E}):m[c]=E;var w=(m,c,E)=>ye(m,typeof c!="symbol"?c+"":c,E);var b;var y=(n=>(n.EQUAL="equal",n.GREATER_THAN="greaterThan",n.GREATER_THAN_OR_EQUAL="greaterThanOrEqual",n.LESS_THAN="lessThan",n.LESS_THAN_OR_EQUAL="lessThanOrEqual",n.NOT_EQUALS="notEqual",n))(y||{});const D={operator:y.GREATER_THAN,fn:(n,i)=>$(n)?n>i:!1},q={operator:y.GREATER_THAN_OR_EQUAL,fn:(n,i)=>$(n)?n>=i:!1},Q={operator:y.LESS_THAN,fn:(n,i)=>$(n)?n<i:!1},G={operator:y.LESS_THAN_OR_EQUAL,fn:(n,i)=>$(n)?n<=i:!1},J={operator:y.EQUAL,fn:(n,i)=>$(n)?n===i:!1},B={operator:y.NOT_EQUALS,fn:(n,i)=>{if(typeof i=="string"){if(i===" ")return n!=null;const e=K(n);return e&&oe(i)?!Z(i).test(e):e!==i}return $(n)?n!==i:!0}},X=new Map([]);[D,q,Q,G,J,B].forEach(n=>{X.set(n.operator,n)});function ie(n){return!!n}const se={fn:(n,i)=>{const e=K(n);return e===null?i==="":Z(i).test(e)}};function x(n){return n?X.get(n):se}function $(n){return typeof n=="number"}function Y(n){return!!(typeof n=="number"||typeof n=="string"&&c.isNumeric(n))}function K(n){return typeof n=="boolean"||n==null?null:typeof n=="string"?n:n.toString()}function oe(n){return typeof n=="number"?!1:n.indexOf("*")!==-1||n.indexOf("?")!==-1}function Z(n){const i=n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replaceAll("?",".").replace(/[*]/g,".$&");return new RegExp(`^${i}$`)}const j=()=>new Set;class P extends c.Disposable{constructor(e,t,r){super();w(this,"_filteredOutRows$",new E.BehaviorSubject(j()));w(this,"filteredOutRows$",this._filteredOutRows$.asObservable());w(this,"_hasCriteria$",new E.BehaviorSubject(!1));w(this,"hasCriteria$",this._hasCriteria$.asObservable());w(this,"_filterColumnByIndex",new Map);w(this,"_alreadyFilteredOutRows",j());w(this,"_range");this.unitId=e,this.subUnitId=t,this._worksheet=r}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:c.Rectangle.clone(this._range),filterColumns:this._getAllFilterColumns(!0).sort(([t],[r])=>t-r).map(([t,r])=>r.serialize())};return this._alreadyFilteredOutRows&&(e.cachedFilteredOut=Array.from(this._alreadyFilteredOutRows).sort()),e}static deserialize(e,t,r,s){const o=new P(e,t,r);return o._dump(s),o}_dump(e){var t;this.setRange(e.ref),(t=e.filterColumns)==null||t.forEach(r=>this._setCriteriaWithoutReCalc(r.colId,r)),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,[,r])=>{const s=r.calc({getAlreadyFilteredOutRows:()=>t});return s?c.mergeSets(t,s):t},new Set)}setRange(e){this._range=e,this._getAllFilterColumns(!0).forEach(([t,r])=>{r.setRangeAndColumn({startRow:e.startRow,endRow:e.endRow,startColumn:t,endColumn:t},t)})}setCriteria(e,t,r=!1){if(!this._range)throw new Error("[FilterModel] could not set criteria before a range is set!");if(!t){this._removeCriteria(e),this._rebuildAlreadyFilteredOutRowsWithCache(),r&&this._reCalcAllColumns(),this._emit(),this._emitHasCriteria();return}this._setCriteriaWithoutReCalc(e,t),r&&(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(([r,s])=>s)}_reCalcAllColumns(){this._alreadyFilteredOutRows=j(),this._getAllFilterColumns().forEach(e=>e.__clearCache()),this._reCalcWithNoCacheColumns()}_setCriteriaWithoutReCalc(e,t){const r=this._range;if(!r)throw new Error("[FilterModel] could not set criteria before a range is set!");const{startColumn:s,endColumn:o}=r;if(e>o||e<s)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(r,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,r)=>c.mergeSets(t,r.filteredOutRows),new Set);this._alreadyFilteredOutRows=e}_reCalcWithNoCacheColumns(){const e=this._getAllFilterColumns().filter(t=>!t.hasCache());for(const t of e){const r=t.reCalc();r&&(this._alreadyFilteredOutRows=c.mergeSets(this._alreadyFilteredOutRows,r))}}}class k extends c.Disposable{constructor(e,t,r,s,o){super();w(this,"_filteredOutRows",null);w(this,"_filterFn",null);w(this,"_range",null);w(this,"_column",0);w(this,"_filterByValues",!1);this.unitId=e,this.subUnitId=t,this._worksheet=r,this._criteria=s,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 c.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 c.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,r={startColumn:t,endColumn:t,startRow:this._range.startRow+1,endRow:this._range.endRow},s=new Set,o=e.getAlreadyFilteredOutRows();for(const l of this._worksheet.iterateByColumn(r,!1,!1)){const{row:u,rowSpan:d,col:a}=l;if(o.has(u)&&(!d||d===1))continue;const h=this._filterByValues?c.extractPureTextFromCell(this._worksheet.getCell(u,a)):me(this._worksheet,u,a);if(!this._filterFn(h)&&(s.add(u),d))for(let _=1;_<d;_++)s.add(u+_)}return s}_generateFilterFn(){this._criteria&&(this._filterFn=le(this._criteria),this._filterByValues=!!this._criteria.filters)}}function le(n){if(n.filters)return ae(n.filters);if(n.customFilters)return ue(n.customFilters);throw new Error("[FilterModel]: other types of filters are not supported yet.")}function ae(n){const i=!!n.blank,e=new Set(n.filters);return t=>t===void 0||t===""?i:e.has(typeof t=="string"?t:`${t}`)}function ue(n){const i=n.customFilters.map(e=>fe(e));return he(i)?n.and?ce(i):de(i):i[0]}function ce(n){const[i,e]=n;return t=>i(t)&&e(t)}function de(n){const[i,e]=n;return t=>i(t)||e(t)}function he(n){return n.length===2}function fe(n){const i=n.val;if(n.operator===y.NOT_EQUALS&&!Y(i))return r=>B.fn(r,i);if(ie(n.operator)){if(!Y(i))return()=>!1;const r=x(n.operator),s=Number(i);return o=>r.fn(o,s)}const e=x(n.operator);return t=>e.fn(t,i)}function me(n,i,e){const t=n.getCell(i,e);if(!t)return null;const r=n.getCellRaw(i,e);return t&&!r?ee(t):r?t.t===c.CellValueType.NUMBER&&typeof t.v=="string"?r.v:ee(r):null}function ee(n){var t,r;const i=(r=(t=n.p)==null?void 0:t.body)==null?void 0:r.dataStream;if(i)return i.trimEnd();const e=n.v;return typeof e=="string"?n.t===c.CellValueType.BOOLEAN?e.toUpperCase():e:typeof e=="number"?n.t===c.CellValueType.BOOLEAN?e?"TRUE":"FALSE":e:typeof e=="boolean"?e?"TRUE":"FALSE":""}const S={id:"sheet.mutation.set-filter-range",type:c.CommandType.MUTATION,handler:(n,i)=>{const{subUnitId:e,unitId:t,range:r}=i;return n.get(m.SheetsFilterService).ensureFilterModel(t,e).setRange(r),!0}},M={id:"sheet.mutation.set-filter-criteria",type:c.CommandType.MUTATION,handler:(n,i)=>{const{subUnitId:e,unitId:t,criteria:r,col:s,reCalc:o=!0}=i,u=n.get(m.SheetsFilterService).getFilterModel(t,e);return u?(u.setCriteria(s,r,o),!0):!1}},T={id:"sheet.mutation.remove-filter",type:c.CommandType.MUTATION,handler:(n,i)=>{const{unitId:e,subUnitId:t}=i;return n.get(m.SheetsFilterService).removeFilterModel(e,t)}},H={id:"sheet.mutation.re-calc-filter",type:c.CommandType.MUTATION,handler:(n,i)=>{const{unitId:e,subUnitId:t}=i,s=n.get(m.SheetsFilterService).getFilterModel(e,t);return s?(s.reCalc(),!0):!1}};var _e=Object.defineProperty,ge=Object.getOwnPropertyDescriptor,Ce=(n,i,e,t)=>{for(var r=t>1?void 0:t?ge(i,e):i,s=n.length-1,o;s>=0;s--)(o=n[s])&&(r=(t?o(i,e,r):o(r))||r);return t&&r&&_e(i,e,r),r},z=(n,i)=>(e,t)=>i(e,t,n);const te=new Set([S.id,M.id,T.id,H.id]),W="SHEET_FILTER_PLUGIN";m.SheetsFilterService=class extends c.Disposable{constructor(e,t,r){super();w(this,"_filterModels",new Map);w(this,"_loadedUnitId$",new E.BehaviorSubject(null));w(this,"loadedUnitId$",this._loadedUnitId$.asObservable());w(this,"_errorMsg$",new E.BehaviorSubject(null));w(this,"errorMsg$",this._errorMsg$.asObservable());w(this,"_activeFilterModel$",new E.BehaviorSubject(null));w(this,"activeFilterModel$",this._activeFilterModel$.asObservable());this._resourcesManagerService=e,this._univerInstanceService=t,this._commandService=r,this._initModel(),this._initActiveFilterModel()}get activeFilterModel(){return this._activeFilterModel$.getValue()}ensureFilterModel(e,t){const r=this.getFilterModel(e,t);if(r)return r;const s=this._univerInstanceService.getUniverSheetInstance(e);if(!s)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing workbook ${e}!`);const o=s.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 r,s;return(s=(r=this._filterModels.get(e))==null?void 0:r.get(t))!=null?s:null}removeFilterModel(e,t){const r=this.getFilterModel(e,t);return r?(r.dispose(),this._filterModels.get(e).delete(t),!0):!1}setFilterErrorMsg(e){this._errorMsg$.next(e)}_updateActiveFilterModel(){let e;try{if(e=this._univerInstanceService.getCurrentUnitForType(c.UniverInstanceType.UNIVER_SHEET),!e){this._activeFilterModel$.next(null);return}}catch{return}const t=e.getActiveSheet(!0);if(!t){this._activeFilterModel$.next(null);return}const r=t.getUnitId(),s=t.getSheetId(),o=this.getFilterModel(r,s);this._activeFilterModel$.next(o)}_initActiveFilterModel(){this.disposeWithMe(E.merge(c.fromCallback(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(E.filter(([e])=>e.type===c.CommandType.MUTATION&&te.has(e.id))),this._univerInstanceService.getCurrentTypeOfUnit$(c.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 r={};return t.forEach((s,o)=>{r[o]=s.serialize()}),JSON.stringify(r)}_deserializeAutoFiltersForUnit(e,t){const r=this._univerInstanceService.getUniverSheetInstance(e);Object.keys(t).forEach(s=>{const o=t[s],l=P.deserialize(e,s,r.getSheetBySheetId(s),o);this._cacheFilterModel(e,s,l)})}_initModel(){this._resourcesManagerService.registerPluginResource({pluginName:W,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(r=>r.dispose()),this._filterModels.delete(e))}})}_cacheFilterModel(e,t,r){this._filterModels.has(e)||this._filterModels.set(e,new Map),this._filterModels.get(e).set(t,r)}},m.SheetsFilterService=Ce([c.OnLifecycle(c.LifecycleStages.Ready,m.SheetsFilterService),z(0,c.IResourceManagerService),z(1,c.IUniverInstanceService),z(2,c.ICommandService)],m.SheetsFilterService);function Re(n,i){for(let e=0;e<n.length;e++){let t=e;if(n[e])for(let r=e+1;r<n.length;r++)n[t]&&n[r]&&i(n[t],n[r])&&(n[t]=null,t=r)}return n.filter(e=>e!==null)}function A(n){return Re(n,(i,e)=>i.id===M.id&&e.id===M.id&&i.params.unitId===e.params.unitId&&i.params.subUnitId===e.params.subUnitId&&i.params.col===e.params.col)}var Fe=Object.defineProperty,we=Object.getOwnPropertyDescriptor,Se=(n,i,e,t)=>{for(var r=t>1?void 0:t?we(i,e):i,s=n.length-1,o;s>=0;s--)(o=n[s])&&(r=(t?o(i,e,r):o(r))||r);return t&&r&&Fe(i,e,r),r},L=(n,i)=>(e,t)=>i(e,t,n);let U=class extends c.Disposable{constructor(n,i,e,t,r){super(),this._commandService=n,this._sheetInterceptorService=i,this._sheetsFilterService=e,this._univerInstanceService=t,this._refRangeService=r,this._initCommands(),this._initRowFilteredInterceptor(),this._initInterceptors(),this._commandExecutedListener(),this._initErrorHandling()}_initCommands(){[M,S,H,T].forEach(n=>this.disposeWithMe(this._commandService.registerCommand(n)))}_initInterceptors(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:e=>this._getUpdateFilter(e)}));const n=new c.DisposableCollection,i=(e,t)=>{var u;const r=this._univerInstanceService.getUniverSheetInstance(e);if(!r||!(r==null?void 0:r.getSheetBySheetId(t)))return;n.dispose();const o=(u=this._sheetsFilterService.getFilterModel(e,t))==null?void 0:u.getRange(),l=d=>{switch(d.id){case v.InsertRowCommand.id:{const a=d.params,h=a.unitId||e,_=a.subUnitId||t;return this._handleInsertRowCommand(a,h,_)}case v.InsertColCommand.id:{const a=d.params,h=a.unitId||e,_=a.subUnitId||t;return this._handleInsertColCommand(a,h,_)}case v.RemoveColCommand.id:{const a=d.params;return this._handleRemoveColCommand(a,e,t)}case v.RemoveRowCommand.id:{const a=d.params;return this._handleRemoveRowCommand(a,e,t)}case v.EffectRefRangId.MoveColsCommandId:{const a=d.params;return this._handleMoveColsCommand(a,e,t)}case v.EffectRefRangId.MoveRowsCommandId:{const a=d.params;return this._handleMoveRowsCommand(a,e,t)}case v.MoveRangeCommand.id:{const a=d.params;return this._handleMoveRangeCommand(a,e,t)}}return{redos:[],undos:[]}};o&&n.add(this._refRangeService.registerRefRange(o,l,e,t))};this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===v.SetWorksheetActivateCommand.id){const t=e.params,r=t.subUnitId,s=t.unitId;if(!r||!s)return;i(s,r)}if(e.id===S.id){const t=e.params,r=t.subUnitId,s=t.unitId;if(!r||!s)return;i(t.unitId,t.subUnitId)}})),this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe(e=>{if(e){const t=this._univerInstanceService.getUniverSheetInstance(e),r=t==null?void 0:t.getActiveSheet();r&&i(e,r.getSheetId())}}))}_getUpdateFilter(n){const{id:i}=n;switch(i){case v.RemoveSheetCommand.id:{const e=n.params;return this._handleRemoveSheetCommand(e,e.unitId,e.subUnitId)}}return{redos:[],undos:[]}}_handleInsertColCommand(n,i,e){var C;const t=this._sheetsFilterService.getFilterModel(i,e),r=(C=t==null?void 0:t.getRange())!=null?C:null;if(!t||!r)return this._handleNull();const{startColumn:s,endColumn:o}=r,{startColumn:l,endColumn:u}=n.range,d=u-l+1;if(u>o)return this._handleNull();const a=[],h=[],_=l,R={unitId:i,subUnitId:e,range:{...r,startColumn:l<=s?s+d:s,endColumn:o+d}},F={unitId:i,subUnitId:e,range:r};a.push({id:S.id,params:R}),h.push({id:S.id,params:F});const g=t.getAllFilterColumns().filter(f=>f[0]>=_);if(g.length!==0){const{undos:f,redos:O}=this.moveCriteria(i,e,g,d);a.push(...O),h.push(...f)}return{redos:A(a),undos:A(h)}}_handleInsertRowCommand(n,i,e){var F;const t=this._sheetsFilterService.getFilterModel(i,e),r=(F=t==null?void 0:t.getRange())!=null?F:null;if(!t||!r)return this._handleNull();const{startRow:s,endRow:o}=r,{startRow:l,endRow:u}=n.range,d=u-l+1;if(u>o)return this._handleNull();const a=[],h=[],_={unitId:i,subUnitId:e,range:{...r,startRow:l<=s?s+d:s,endRow:o+d}},R={unitId:i,subUnitId:e,range:r};return a.push({id:S.id,params:_}),h.push({id:S.id,params:R}),{redos:A(a),undos:A(h)}}_handleRemoveColCommand(n,i,e){var p;const t=this._sheetsFilterService.getFilterModel(i,e),r=(p=t==null?void 0:t.getRange())!=null?p:null;if(!t||!r)return this._handleNull();const{startColumn:s,endColumn:o}=r,{startColumn:l,endColumn:u}=n.range;if(l>o)return this._handleNull();const d=[],a=[],h=u<s?0:Math.min(u,o)-Math.max(l,s)+1,_=u-l+1,R=t.getAllFilterColumns();R.forEach(g=>{const[C,f]=g;C<=u&&C>=l&&(d.push({id:M.id,params:{unitId:i,subUnitId:e,col:C,criteria:null}}),a.push({id:M.id,params:{unitId:i,subUnitId:e,col:C,criteria:{...f.serialize(),colId:C}}}))});const F=R.filter(g=>{const[C,f]=g;return C>u});if(F.length>0){const{undos:g,redos:C}=this.moveCriteria(i,e,F,-_);d.push(...C),a.push(...g)}if(h===o-s+1){const g={unitId:i,subUnitId:e};d.push({id:T.id,params:g})}else if(s<=l){const g=o-h,C={unitId:i,subUnitId:e,range:{...r,endColumn:g}};d.push({id:S.id,params:C})}else{const g={unitId:i,subUnitId:e,range:{...r,startColumn:l,endColumn:o-(u-l+1)}};d.push({id:S.id,params:g})}return a.push({id:S.id,params:{range:r,unitId:i,subUnitId:e}}),{undos:A(a),redos:A(d)}}_handleRemoveRowCommand(n,i,e){var F;const t=this._sheetsFilterService.getFilterModel(i,e);if(!t)return this._handleNull();const r=t.getRange(),{startRow:s,endRow:o}=r,{startRow:l,endRow:u}=n.range;if(l>o)return this._handleNull();const d=[],a=[],h=t.getAllFilterColumns(),_=s<=u&&s>=l;a.push({id:S.id,params:{range:r,unitId:i,subUnitId:e}});const R=Math.min(u,o)-Math.max(l,s)+1;if(R===o-s+1||_){const p={unitId:i,subUnitId:e};d.push({id:T.id,params:p}),h.forEach(g=>{const[C,f]=g,O={unitId:i,subUnitId:e,col:C,criteria:{...f.serialize(),colId:C}};a.push({id:M.id,params:O})})}else{const p=(F=this._univerInstanceService.getUniverSheetInstance(i))==null?void 0:F.getSheetBySheetId(e);if(!p)return this._handleNull();const g=[];for(let N=l;N<=u;N++)p.getRowFiltered(N)&&g.push(N);const C=Math.min(s,l),f=C+(o-s)-R+g.length,O={unitId:i,subUnitId:e,range:{...r,startRow:C,endRow:f}};d.push({id:S.id,params:O})}return{undos:A(a),redos:A(d)}}_handleMoveColsCommand(n,i,e){var C;const t=this._sheetsFilterService.getFilterModel(i,e),r=(C=t==null?void 0:t.getRange())!=null?C:null;if(!t||!r)return this._handleNull();const{startColumn:s,endColumn:o}=r,{fromRange:l,toRange:u}=n;if(l.endColumn<s&&u.startColumn<=s||l.startColumn>o&&u.endColumn>o)return this._handleNull();const d=[],a=[],h={};for(let f=s;f<=o;f++)h[f]={colIndex:f,filter:t.getFilterColumn(f)};c.moveMatrixArray(l.startColumn,l.endColumn-l.startColumn+1,u.startColumn,h);let _=r.startColumn,R=r.endColumn;s>=l.startColumn&&s<=l.endColumn&&u.startColumn>l.startColumn&&l.endColumn<o&&(_=l.endColumn+1),o>=l.startColumn&&o<=l.endColumn&&u.startColumn<l.startColumn&&l.startColumn>s&&(R=l.startColumn-1);const F=Object.keys(h).map(f=>Number(f)),p=F.find(f=>h[f].colIndex===R),g=F.find(f=>h[f].colIndex===_);if(F.forEach(f=>{var re,ne;const{colIndex:O,filter:N}=h[f],I=f;if(N){if(I>=g&&I<=p){const V={unitId:i,subUnitId:e,col:I,criteria:{...N.serialize(),colId:I}};d.push({id:M.id,params:V}),a.push({id:T.id,params:{unitId:i,subUnitId:e,col:I,criteria:{...(re=t.getFilterColumn(I))==null?void 0:re.serialize(),colId:I}}})}if(!((ne=h[O])!=null&&ne.filter)){const V={unitId:i,subUnitId:e,col:O,criteria:null};d.push({id:M.id,params:V}),a.push({id:M.id,params:{unitId:i,subUnitId:e,col:O,criteria:{...N.serialize(),colId:O}}})}}}),s!==g||o!==p){const f={unitId:i,subUnitId:e,range:{...r,startColumn:g,endColumn:p}};d.unshift({id:S.id,params:f}),a.push({id:S.id,params:{range:r,unitId:i,subUnitId:e}})}return{undos:a,redos:d}}_handleMoveRowsCommand(n,i,e){var C;const t=this._sheetsFilterService.getFilterModel(i,e),r=(C=t==null?void 0:t.getRange())!=null?C:null;if(!t||!r)return this._handleNull();const{startRow:s,endRow:o}=r,{fromRange:l,toRange:u}=n;if(l.endRow<s&&u.startRow<=s||l.startRow>o&&u.endRow>o)return this._handleNull();const d=[],a=[],h={};for(let f=s;f<=o;f++)h[f]={oldIndex:f};const _=s;let R=o;o>=l.startRow&&o<=l.endRow&&u.startRow<l.startRow&&l.startRow>s&&(R=l.startRow-1),c.moveMatrixArray(l.startRow,l.endRow-l.startRow+1,u.startRow,h);const F=Object.keys(h).map(f=>Number(f)),p=F.find(f=>h[f].oldIndex===R),g=F.find(f=>h[f].oldIndex===_);if(s!==g||o!==p){const f={unitId:i,subUnitId:e,range:{...r,startRow:g,endRow:p}};d.unshift({id:S.id,params:f}),a.push({id:S.id,params:{range:r,unitId:i,subUnitId:e}})}return{redos:d,undos:a}}_handleMoveRangeCommand(n,i,e){const{fromRange:t,toRange:r}=n,s=this._sheetsFilterService.getFilterModel(i,e);if(!s)return this._handleNull();const o=s.getRange();if(!o)return this._handleNull();const l=[],u=[];if(c.Rectangle.contains(t,o)){const d=o.startRow-t.startRow,a=o.startColumn-t.startColumn,h={startRow:r.startRow+d,startColumn:r.startColumn+a,endRow:r.startRow+d+(o.endRow-o.startRow),endColumn:r.startColumn+a+(o.endColumn-o.startColumn)},_={id:T.id,params:{unitId:i,subUnitId:e}},R={id:S.id,params:{unitId:i,subUnitId:e,range:h}},F={id:S.id,params:{unitId:i,subUnitId:e,range:o}};l.push(_,R),u.push(_,F);const p=s.getAllFilterColumns(),g=r.startColumn-t.startColumn;p.forEach(C=>{const[f,O]=C;O&&(l.push({id:M.id,params:{unitId:i,subUnitId:e,col:f+g,criteria:{...O.serialize(),colId:f+g}}}),u.push({id:M.id,params:{unitId:i,subUnitId:e,col:f,criteria:{...O.serialize(),colId:f}}}))})}return{redos:l,undos:u}}_handleRemoveSheetCommand(n,i,e){const t=this._sheetsFilterService.getFilterModel(i,e);if(!t)return this._handleNull();const r=t.getRange();if(!r)return this._handleNull();const s=[],o=[];return t.getAllFilterColumns().forEach(u=>{const[d,a]=u;o.push({id:M.id,params:{unitId:i,subUnitId:e,col:u,criteria:{...a.serialize(),colId:u}}})}),s.push({id:T.id,params:{unitId:i,subUnitId:e,range:r}}),o.unshift({id:S.id,params:{range:r,unitId:i,subUnitId:e}}),{undos:o,redos:s}}_handleNull(){return{redos:[],undos:[]}}_initRowFilteredInterceptor(){this.disposeWithMe(this._sheetInterceptorService.intercept(v.INTERCEPTOR_POINT.ROW_FILTERED,{handler:(n,i)=>{var e,t;return n?!0:(t=(e=this._sheetsFilterService.getFilterModel(i.unitId,i.subUnitId))==null?void 0:e.isRowFiltered(i.row))!=null?t:!1}}))}moveCriteria(n,i,e,t){const r={unitId:n,subUnitId:i,criteria:null,col:-1},s=[],o=[];return e.forEach(l=>{const[u,d]=l;o.push({id:M.id,params:{...r,col:u}}),s.push({id:M.id,params:{...r,col:u,criteria:{...d.serialize(),colId:u}}})}),e.forEach(l=>{const[u,d]=l;o.push({id:M.id,params:{...r,col:u+t,criteria:{...d.serialize(),colId:u+t}}}),s.push({id:M.id,params:{...r,col:u+t,criteria:null}})}),{redos:o,undos:s}}_commandExecutedListener(){this.disposeWithMe(this._commandService.onCommandExecuted((n,i)=>{var u,d;const{unitId:e,subUnitId:t}=n.params||{},r=this._sheetsFilterService.getFilterModel(e,t);if(!r)return;const s=Array.from(r.filteredOutRows).sort((a,h)=>a-h),o=[];let l=!1;if(n.id===v.RemoveRowMutation.id){const{startRow:a,endRow:h}=n.params.range,_=s.filter(R=>R>=a&&R<=h);s.forEach(R=>{if(R<a)o.push(R);else if(l=!0,R<=h){const F=Math.max(a,o.length?o[o.length-1]+1:a);o.push(F)}else o.push(R-(h-a+1-_.length))})}if(n.id===v.InsertRowMutation.id){const{startRow:a,endRow:h}=n.params.range;s.forEach(_=>{_>=a?(l=!0,o.push(_+(h-a+1))):o.push(_)})}if(l&&(r.filteredOutRows=new Set(o)),n.id===v.SetRangeValuesMutation.id&&!(i!=null&&i.fromCollab)&&!(i!=null&&i.onlyLocal)){const a=this._getExtendRegion(e,t);if(a){const h=n.params.cellValue;if(h)for(let _=a.startColumn;_<=a.endColumn;_++){const R=(u=h==null?void 0:h[a.startRow])==null?void 0:u[_];if(R&&Object.keys(R).length!==0){const F=(d=this._univerInstanceService.getUnit(e))==null?void 0:d.getSheetBySheetId(t);if(F){const p=v.expandToContinuousRange(a,{down:!0},F),g=this._sheetsFilterService.getFilterModel(e,t),C=g.getRange();g.setRange({...C,endRow:p.endRow})}}}}}}))}_getExtendRegion(n,i){var l;const e=this._sheetsFilterService.getFilterModel(n,i);if(!e)return null;const t=(l=this._univerInstanceService.getUnit(n))==null?void 0:l.getSheetBySheetId(i);if(!t)return null;const r=e.getRange();if(!r)return null;const s=t.getRowCount()-1,o=t.getRowManager();for(let u=r.endRow+1;u<=s;u++)if(o.getRowRawVisible(u))return{startRow:u,endRow:u,startColumn:r.startColumn,endColumn:r.endColumn};return null}_initErrorHandling(){this.disposeWithMe(this._commandService.beforeCommandExecuted(n=>{const i=n.params,e=v.getSheetCommandTarget(this._univerInstanceService);if(!e)return;const{subUnitId:t,unitId:r}=e,s=this._sheetsFilterService.getFilterModel(r,t);if(!s)return;const o=s.getRange();if(n.id===v.MoveRowsCommand.id&&i.fromRange.startRow<=o.startRow&&i.fromRange.endRow<o.endRow)throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"),new Error("[SheetsFilterController]: Cannot move header row of filter")}))}};U=Se([c.OnLifecycle(c.LifecycleStages.Ready,U),L(0,c.ICommandService),L(1,c.Inject(v.SheetInterceptorService)),L(2,c.Inject(m.SheetsFilterService)),L(3,c.IUniverInstanceService),L(4,c.Inject(v.RefRangeService))],U);var pe=Object.defineProperty,ve=Object.getOwnPropertyDescriptor,Me=(n,i,e,t)=>{for(var r=t>1?void 0:t?ve(i,e):i,s=n.length-1,o;s>=0;s--)(o=n[s])&&(r=(t?o(i,e,r):o(r))||r);return t&&r&&pe(i,e,r),r},Ee=(n,i)=>(e,t)=>i(e,t,n);m.UniverSheetsFilterPlugin=(b=class extends c.Plugin{constructor(i,e){super(),this._injector=e}onStarting(i){[[m.SheetsFilterService],[U]].forEach(e=>i.add(e))}},w(b,"type",c.UniverInstanceType.UNIVER_SHEET),w(b,"pluginName",W),b),m.UniverSheetsFilterPlugin=Me([Ee(1,c.Inject(c.Injector))],m.UniverSheetsFilterPlugin),m.CustomFilterOperator=y,m.FILTER_MUTATIONS=te,m.FilterColumn=k,m.FilterModel=P,m.ReCalcSheetsFilterMutation=H,m.RemoveSheetsFilterMutation=T,m.SHEET_FILTER_SNAPSHOT_ID=W,m.SetSheetsFilterCriteriaMutation=M,m.SetSheetsFilterRangeMutation=S,m.equals=J,m.getCustomFilterFn=x,m.greaterThan=D,m.greaterThanOrEqualTo=q,m.lessThan=Q,m.lessThanOrEqualTo=G,m.notEquals=B,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@univerjs/sheets-filter",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "private": false,
5
5
  "description": "A library for filtering data in Univer Sheet",
6
6
  "author": "DreamNum <developer@univer.ai>",
@@ -44,20 +44,18 @@
44
44
  "lib"
45
45
  ],
46
46
  "peerDependencies": {
47
- "@wendellhu/redi": "0.16.0",
48
47
  "rxjs": ">=7.0.0",
49
- "@univerjs/core": "0.2.4",
50
- "@univerjs/sheets": "0.2.4"
48
+ "@univerjs/core": "0.2.5",
49
+ "@univerjs/sheets": "0.2.5"
51
50
  },
52
51
  "devDependencies": {
53
- "@wendellhu/redi": "0.16.0",
54
52
  "rxjs": "^7.8.1",
55
53
  "typescript": "^5.5.3",
56
54
  "vite": "^5.3.4",
57
55
  "vitest": "^2.0.3",
58
- "@univerjs/core": "0.2.4",
59
- "@univerjs/shared": "0.2.4",
60
- "@univerjs/sheets": "0.2.4"
56
+ "@univerjs/shared": "0.2.5",
57
+ "@univerjs/core": "0.2.5",
58
+ "@univerjs/sheets": "0.2.5"
61
59
  },
62
60
  "univerSpace": {
63
61
  ".": {