@univerjs/sheets-filter 0.1.14 → 0.1.16

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