@univerjs/sheets-filter 0.10.10 → 0.10.11

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 Re=Object.defineProperty;var Fe=(i,n,e)=>n in i?Re(i,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[n]=e;var R=(i,n,e)=>Fe(i,typeof n!="symbol"?n+"":n,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("@univerjs/core"),S=require("@univerjs/sheets"),O=require("rxjs"),ve=require("@univerjs/engine-render"),pe=require("@univerjs/rpc"),K=require("@univerjs/engine-formula"),te="sheet.mutation.set-filter-range",re="sheet.mutation.set-filter-criteria",ne="sheet.mutation.remove-filter",ie="sheet.mutation.re-calc-filter",q=new Set([te,re,ne,ie]);var A=(i=>(i[i.VALUES=0]="VALUES",i[i.COLORS=1]="COLORS",i[i.CONDITIONS=2]="CONDITIONS",i))(A||{}),T=(i=>(i.EQUAL="equal",i.GREATER_THAN="greaterThan",i.GREATER_THAN_OR_EQUAL="greaterThanOrEqual",i.LESS_THAN="lessThan",i.LESS_THAN_OR_EQUAL="lessThanOrEqual",i.NOT_EQUALS="notEqual",i))(T||{});const se={operator:T.GREATER_THAN,fn:(i,n)=>U(i)?i>n:!1},oe={operator:T.GREATER_THAN_OR_EQUAL,fn:(i,n)=>U(i)?i>=n:!1},le={operator:T.LESS_THAN,fn:(i,n)=>U(i)?i<n:!1},ae={operator:T.LESS_THAN_OR_EQUAL,fn:(i,n)=>U(i)?i<=n:!1},ce={operator:T.EQUAL,fn:(i,n)=>U(i)?i===n:!1},k={operator:T.NOT_EQUALS,fn:(i,n)=>{if(typeof n=="string"){if(n===" ")return i!=null;const e=ue(i);return e&&Ee(n)?!he(n).test(e):e!==n}return U(i)?i!==n:!0}},de=new Map([]),we=[se,oe,le,ae,ce,k];we.forEach(i=>{de.set(i.operator,i)});function Me(i){return!!i}const ye={fn:(i,n)=>{const e=ue(i);return e===null?n==="":he(n).test(e)}};function W(i){return i?de.get(i):ye}function U(i){return typeof i=="number"}function Z(i){return!!(typeof i=="number"||typeof i=="string"&&d.isNumeric(i))}function ue(i){return typeof i=="boolean"||i==null?null:typeof i=="string"?i:i.toString()}function Ee(i){return typeof i=="number"?!1:i.indexOf("*")!==-1||i.indexOf("?")!==-1}function he(i){const n=i.replace(/[.+^${}()|[\]\\]/g,"\\$&").replaceAll("?",".").replace(/[*]/g,".$&");return new RegExp(`^${n}$`)}const H=()=>new Set;class $ extends d.Disposable{constructor(e,t,r){super();R(this,"_filteredOutRows$",new O.BehaviorSubject(H()));R(this,"filteredOutRows$",this._filteredOutRows$.asObservable());R(this,"_hasCriteria$",new O.BehaviorSubject(!1));R(this,"hasCriteria$",this._hasCriteria$.asObservable());R(this,"_filterColumnByIndex",new Map);R(this,"_alreadyFilteredOutRows",H());R(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:d.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 $(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?d.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 me(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)=>d.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=d.mergeSets(this._alreadyFilteredOutRows,r))}}}class me extends d.Disposable{constructor(e,t,r,s,o){super();R(this,"_filteredOutRows",null);R(this,"_filterFn",null);R(this,"_range",null);R(this,"_column",0);R(this,"_filterBy",A.VALUES);this.unitId=e,this.subUnitId=t,this._worksheet=r,this._criteria=s,this._filterColumnContext=o}get filteredOutRows(){return this._filteredOutRows}get filterBy(){return this._filterBy}dispose(){super.dispose(),this._filteredOutRows=null}__clearCache(){this._filteredOutRows=null}serialize(){if(!this._criteria)throw new Error("[FilterColumn]: could not serialize without a filter column!");return d.Tools.deepClone({...this._criteria,colId:this._column})}hasCache(){return this._filteredOutRows!==null}setRangeAndColumn(e,t){this._range=e,this._column=t}setCriteria(e){this._criteria=e,this._generateFilterFn(),this._filteredOutRows=null}getColumnData(){return d.Tools.deepClone(this._criteria)}reCalc(){return this._filteredOutRows=this.calc(this._filterColumnContext),this._filteredOutRows}calc(e){if(!this._filterFn)throw new Error("[FilterColumn] cannot calculate without a filter fn!");if(!this._range)throw new Error("[FilterColumn] cannot calculate without a range!");if(typeof this._column!="number")throw new TypeError("[FilterColumn] cannot calculate without a column offset!");const t=this._column,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:a,rowSpan:c,col:h}=l;if(o.has(a)&&(!c||c===1))continue;if(!(this._filterBy===A.VALUES?this._filterFn(d.extractPureTextFromCell(this._worksheet.getCell(a,h))):this._filterBy===A.COLORS?this._filterFn(this._worksheet.getComposedCellStyle(a,h)):this._filterFn($e(this._worksheet,a,h)))&&(s.add(a),c))for(let m=1;m<c;m++)s.add(a+m)}return s}_generateFilterFn(){this._criteria&&(this._filterFn=Oe(this._criteria),this._filterBy=this._criteria.filters?A.VALUES:this._criteria.colorFilters?A.COLORS:A.CONDITIONS)}}function Oe(i){if(i.filters)return Ie(i.filters);if(i.colorFilters)return Te(i.colorFilters);if(i.customFilters)return Ae(i.customFilters);throw new Error("[FilterModel]: other types of filters are not supported yet.")}function Ie(i){const n=!!i.blank,e=new Set(i.filters);return t=>t===void 0||t===""?n:e.has(typeof t=="string"?t:`${t}`)}function Te(i){if(i.cellFillColors){const n=new Set(i.cellFillColors);return e=>{var r;if(!e||!((r=e.bg)!=null&&r.rgb))return!!n.has(null);const t=new d.ColorKit(e.bg.rgb).toRgbString();return n.has(t)}}if(i.cellTextColors){const n=new Set(i.cellTextColors);return e=>{var r;if(!e||!((r=e.cl)!=null&&r.rgb))return!!n.has(ve.COLOR_BLACK_RGB);const t=new d.ColorKit(e.cl.rgb).toRgbString();return n.has(t)}}throw new Error("[FilterModel]: color filters are not supported yet.")}function Ae(i){const n=i.customFilters.map(e=>Ue(e));return xe(n)?i.and?be(n):Ne(n):n[0]}function be(i){const[n,e]=i;return t=>n(t)&&e(t)}function Ne(i){const[n,e]=i;return t=>n(t)||e(t)}function xe(i){return i.length===2}function Ue(i){const n=i.val;if(i.operator===T.NOT_EQUALS&&!Z(n))return r=>k.fn(r,n);if(Me(i.operator)){if(!Z(n))return()=>!1;const r=W(i.operator),s=Number(n);return o=>r.fn(o,s)}const e=W(i.operator);return t=>e.fn(t,n)}function $e(i,n,e){const t=i.getCell(n,e);if(!t)return null;const r=i.getCellRaw(n,e);return t&&!r?Y(t):r?t.t===d.CellValueType.NUMBER&&typeof t.v=="string"?r.v:t.t===d.CellValueType.NUMBER?Number(r.v):Y(r):null}function Y(i){var t,r;const n=(r=(t=i.p)==null?void 0:t.body)==null?void 0:r.dataStream;if(n)return n.trimEnd();const e=i.v;return typeof e=="string"?i.t===d.CellValueType.BOOLEAN?e.toUpperCase():e:typeof e=="number"?i.t===d.CellValueType.BOOLEAN?e?"TRUE":"FALSE":e:typeof e=="boolean"?e?"TRUE":"FALSE":""}var Le=Object.getOwnPropertyDescriptor,Pe=(i,n,e,t)=>{for(var r=t>1?void 0:t?Le(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},z=(i,n)=>(e,t)=>n(e,t,i);const G="SHEET_FILTER_PLUGIN";exports.SheetsFilterService=class extends d.Disposable{constructor(e,t,r){super();R(this,"_filterModels",new Map);R(this,"_loadedUnitId$",new O.BehaviorSubject(null));R(this,"loadedUnitId$",this._loadedUnitId$.asObservable());R(this,"_errorMsg$",new O.BehaviorSubject(null));R(this,"errorMsg$",this._errorMsg$.asObservable());R(this,"_activeFilterModel$",new O.BehaviorSubject(null));R(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 $(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(d.UniverInstanceType.UNIVER_SHEET),!e){this._activeFilterModel$.next(null);return}}catch(l){console.error("[SheetsFilterService]: could not get active workbook!",l);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(O.merge(d.fromCallback(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(O.filter(([e])=>e.type===d.CommandType.MUTATION&&q.has(e.id))),this._univerInstanceService.getCurrentTypeOfUnit$(d.UniverInstanceType.UNIVER_SHEET).pipe(O.switchMap(e=>{var t;return(t=e==null?void 0:e.activeSheet$)!=null?t:O.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=$.deserialize(e,s,r.getSheetBySheetId(s),o);this._cacheFilterModel(e,s,l)})}_initModel(){this._resourcesManagerService.registerPluginResource({pluginName:G,businesses:[d.UniverInstanceType.UNIVER_SHEET],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)}};exports.SheetsFilterService=Pe([z(0,d.IResourceManagerService),z(1,d.IUniverInstanceService),z(2,d.ICommandService)],exports.SheetsFilterService);const F={id:te,type:d.CommandType.MUTATION,handler:(i,n)=>{const{subUnitId:e,unitId:t,range:r}=n;return i.get(exports.SheetsFilterService).ensureFilterModel(t,e).setRange(r),!0}},v={id:re,type:d.CommandType.MUTATION,handler:(i,n)=>{const{subUnitId:e,unitId:t,criteria:r,col:s,reCalc:o=!0}=n,a=i.get(exports.SheetsFilterService).getFilterModel(t,e);return a?(a.setCriteria(s,r,o),!0):!1}},I={id:ne,type:d.CommandType.MUTATION,handler:(i,n)=>{const{unitId:e,subUnitId:t}=n;return i.get(exports.SheetsFilterService).removeFilterModel(e,t)}},x={id:ie,type:d.CommandType.MUTATION,handler:(i,n)=>{const{unitId:e,subUnitId:t}=n,s=i.get(exports.SheetsFilterService).getFilterModel(e,t);return s?(s.reCalc(),!0):!1}},fe={id:"sheet.command.set-filter-range",type:d.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(exports.SheetsFilterService),t=i.get(d.ICommandService),r=i.get(d.IUndoRedoService),s=i.get(d.IUniverInstanceService),{unitId:o,subUnitId:l,range:a}=n;if(!S.getSheetCommandTarget(s,n)||e.getFilterModel(o,l))return!1;if(a.endRow===a.startRow){const C=i.get(d.ErrorService),_=i.get(d.LocaleService);return C.emit(_.t("sheets-filter.command.not-valid-filter-range")),!1}const u={id:F.id,params:{unitId:o,subUnitId:l,range:a}},m=t.syncExecuteCommand(u.id,u.params);return m&&r.pushUndoRedo({unitID:o,undoMutations:[{id:I.id,params:{unitId:o,subUnitId:l}}],redoMutations:[u]}),m}},ge={id:"sheet.command.remove-sheet-filter",type:d.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(d.IUniverInstanceService),t=i.get(exports.SheetsFilterService),r=i.get(d.ICommandService),s=i.get(d.IUndoRedoService),o=S.getSheetCommandTarget(e,n);if(!o)return!1;const{unitId:l,subUnitId:a}=o,c=t.getFilterModel(l,a);if(!c)return!1;const h=c==null?void 0:c.serialize(),u=ze(l,a,h),m=r.syncExecuteCommand(I.id,{unitId:l,subUnitId:a});return m&&s.pushUndoRedo({unitID:l,undoMutations:u,redoMutations:[{id:I.id,params:{unitId:l,subUnitId:a}}]}),m}},De={id:"sheet.command.smart-toggle-filter",type:d.CommandType.COMMAND,handler:async i=>{const n=i.get(d.IUniverInstanceService),e=i.get(exports.SheetsFilterService),t=i.get(d.ICommandService),r=n.getCurrentUnitForType(d.UniverInstanceType.UNIVER_SHEET),s=r==null?void 0:r.getActiveSheet();if(!s||!r)return!1;const o=r.getUnitId(),l=s.getSheetId();if(e.getFilterModel(o,l))return t.executeCommand(ge.id,{unitId:o,subUnitId:l});const h=i.get(S.SheetsSelectionsService).getCurrentLastSelection();if(!h)return!1;const u=h.range,m=S.isSingleCellSelection(h)?S.expandToContinuousRange(u,{left:!0,right:!0,up:!0,down:!0},s):u;return t.executeCommand(fe.id,{unitId:o,subUnitId:l,range:m})}},Be={id:"sheet.command.set-filter-criteria",type:d.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(exports.SheetsFilterService),t=i.get(d.ICommandService),r=i.get(d.IUndoRedoService),{unitId:s,subUnitId:o,col:l,criteria:a}=n,c=e.getFilterModel(s,o);if(!c)return!1;const h=c.getRange();if(!h||l<h.startColumn||l>h.endColumn)return!1;const u=c.getFilterColumn(l),m=We(s,o,l,u),C={id:v.id,params:{unitId:s,subUnitId:o,col:l,criteria:a}},_=t.syncExecuteCommand(C.id,C.params);return _&&r.pushUndoRedo({unitID:s,undoMutations:[m],redoMutations:[C]}),_}},je={id:"sheet.command.clear-filter-criteria",type:d.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(exports.SheetsFilterService),t=i.get(d.IUndoRedoService),r=i.get(d.ICommandService),s=i.get(d.IUniverInstanceService),o=S.getSheetCommandTarget(s,n);if(!o)return!1;const{unitId:l,subUnitId:a}=o,c=e.getFilterModel(o.unitId,o.subUnitId);if(!c)return!1;const h=c.serialize(),u=Ce(l,a,h),m=Ve(l,a,h);return d.sequenceExecute(m,r).result?(t.pushUndoRedo({unitID:l,undoMutations:u,redoMutations:m}),!0):!1}},He={id:"sheet.command.re-calc-filter",type:d.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(exports.SheetsFilterService),t=i.get(d.ICommandService),r=i.get(d.IUniverInstanceService),s=S.getSheetCommandTarget(r,n);if(!s)return!1;const{unitId:o,subUnitId:l}=s;return e.getFilterModel(s.unitId,s.subUnitId)?t.executeCommand(x.id,{unitId:o,subUnitId:l}):!1}};function ze(i,n,e){const t=[],r={id:F.id,params:{unitId:i,subUnitId:n,range:e.ref}};return t.push(r),Ce(i,n,e).forEach(o=>t.push(o)),t}function Ce(i,n,e){var r;const t=[];return(r=e.filterColumns)==null||r.forEach(s=>{const o={id:v.id,params:{unitId:i,subUnitId:n,col:s.colId,criteria:s}};t.push(o)}),t}function Ve(i,n,e){var r;const t=[];return(r=e.filterColumns)==null||r.forEach(s=>{const o={id:v.id,params:{unitId:i,subUnitId:n,col:s.colId,criteria:null}};t.push(o)}),t}function We(i,n,e,t){if(!t)return{id:v.id,params:{unitId:i,subUnitId:n,col:e,criteria:null}};const r=t.serialize();return{id:v.id,params:{unitId:i,subUnitId:n,col:e,criteria:r}}}const _e="sheets-filter.config",X={};function qe(i,n){for(let e=0;e<i.length;e++){let t=e;if(i[e])for(let r=e+1;r<i.length;r++)i[t]&&i[r]&&n(i[t],i[r])&&(i[t]=null,t=r)}return i.filter(e=>e!==null)}function N(i){return qe(i,(n,e)=>n.id===v.id&&e.id===v.id&&n.params.unitId===e.params.unitId&&n.params.subUnitId===e.params.subUnitId&&n.params.col===e.params.col)}var ke=Object.getOwnPropertyDescriptor,Ge=(i,n,e,t)=>{for(var r=t>1?void 0:t?ke(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},b=(i,n)=>(e,t)=>n(e,t,i);let L=class extends d.Disposable{constructor(n,e,t,r,s,o,l){super();R(this,"_disposableCollection",new d.DisposableCollection);this._commandService=n,this._sheetInterceptorService=e,this._sheetsFilterService=t,this._univerInstanceService=r,this._refRangeService=s,this._dataSyncPrimaryController=o,this._zebraCrossingCacheController=l,this._initCommands(),this._initRowFilteredInterceptor(),this._initInterceptors(),this._commandExecutedListener(),this._initErrorHandling(),this._initZebraCrossingCacheListener()}_initZebraCrossingCacheListener(){this.disposeWithMe(this._sheetsFilterService.activeFilterModel$.subscribe(n=>{n&&this.disposeWithMe(n.filteredOutRows$.subscribe(()=>{this._zebraCrossingCacheController.updateZebraCrossingCache(n.unitId,n.subUnitId)}))}))}_initCommands(){[v,F,x,I].forEach(n=>{var e;this.disposeWithMe(this._commandService.registerCommand(n)),(e=this._dataSyncPrimaryController)==null||e.registerSyncingMutations(n)})}_initInterceptors(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:n=>this._getUpdateFilter(n)})),this.disposeWithMe(this._commandService.onCommandExecuted(n=>{if(n.id===S.SetWorksheetActiveOperation.id){const e=n.params,t=e.subUnitId,r=e.unitId;if(!t||!r)return;this._registerRefRange(r,t)}if(n.id===F.id){const e=n.params,t=e.subUnitId,r=e.unitId;if(!t||!r)return;this._registerRefRange(e.unitId,e.subUnitId)}})),this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe(n=>{if(n){const e=this._univerInstanceService.getUniverSheetInstance(n),t=e==null?void 0:e.getActiveSheet();t&&this._registerRefRange(n,t.getSheetId())}}))}_registerRefRange(n,e){var l;this._disposableCollection.dispose();const t=this._univerInstanceService.getUniverSheetInstance(n),r=t==null?void 0:t.getSheetBySheetId(e);if(!t||!r)return;const s=(l=this._sheetsFilterService.getFilterModel(n,e))==null?void 0:l.getRange(),o=a=>{switch(a.id){case S.InsertRowCommand.id:{const c=a.params,h=c.unitId||n,u=c.subUnitId||e;return this._handleInsertRowCommand(c,h,u)}case S.InsertColCommand.id:{const c=a.params,h=c.unitId||n,u=c.subUnitId||e;return this.handleInsertColCommand(c.range,h,u)}case S.RemoveColCommand.id:{const c=a.params;return this.handleRemoveColCommand(c.range,n,e)}case S.RemoveRowCommand.id:{const c=a.params;return this._handleRemoveRowCommand(c,n,e)}case S.EffectRefRangId.MoveColsCommandId:{const c=a.params;return this.handleMoveColsCommand({fromRange:c.fromRange,toRange:c.toRange},n,e)}case S.EffectRefRangId.MoveRowsCommandId:{const c=a.params;return this._handleMoveRowsCommand(c,n,e)}case S.MoveRangeCommand.id:{const c=a.params;return this._handleMoveRangeCommand(c,n,e)}}return{redos:[],undos:[]}};s&&this._disposableCollection.add(this._refRangeService.registerRefRange(s,o,n,e))}_getUpdateFilter(n){const{id:e}=n;switch(e){case S.RemoveSheetCommand.id:{const t=n.params;return this._handleRemoveSheetCommand(t,t.unitId,t.subUnitId)}case S.CopySheetCommand.id:{const t=n.params,{targetSubUnitId:r,unitId:s,subUnitId:o}=t;return!s||!o||!r?this._handleNull():this._handleCopySheetCommand(s,o,r)}}return{redos:[],undos:[]}}handleInsertColCommand(n,e,t){var f;const r=this._sheetsFilterService.getFilterModel(e,t),s=(f=r==null?void 0:r.getRange())!=null?f:null;if(!r||!s)return this._handleNull();const{startColumn:o,endColumn:l}=s,{startColumn:a,endColumn:c}=n,h=c-a+1;if(c>l)return this._handleNull();const u=[],m=[],C=a,_={unitId:e,subUnitId:t,range:{...s,startColumn:a<=o?o+h:o,endColumn:l+h}},p={unitId:e,subUnitId:t,range:s};u.push({id:F.id,params:_}),m.push({id:F.id,params:p});const w=r.getAllFilterColumns().filter(g=>g[0]>=C);if(w.length!==0){const{newRange:g,oldRange:y}=this._moveCriteria(e,t,w,h);u.push(...y.redos,...g.redos),m.push(...g.undos,...y.undos)}return{redos:N(u),undos:N(m)}}_handleInsertRowCommand(n,e,t){var p;const r=this._sheetsFilterService.getFilterModel(e,t),s=(p=r==null?void 0:r.getRange())!=null?p:null;if(!r||!s)return this._handleNull();const{startRow:o,endRow:l}=s,{startRow:a,endRow:c}=n.range,h=c-a+1;if(c>l)return this._handleNull();const u=[],m=[],C={unitId:e,subUnitId:t,range:{...s,startRow:a<=o?o+h:o,endRow:l+h}},_={unitId:e,subUnitId:t,range:s};return u.push({id:F.id,params:C}),m.push({id:F.id,params:_}),{redos:N(u),undos:N(m)}}handleRemoveColCommand(n,e,t){var w;const r=this._sheetsFilterService.getFilterModel(e,t),s=(w=r==null?void 0:r.getRange())!=null?w:null;if(!r||!s)return this._handleNull();const{startColumn:o,endColumn:l}=s,{startColumn:a,endColumn:c}=n;if(a>l)return this._handleNull();const h=[],u=[],m=c<o?0:Math.min(c,l)-Math.max(a,o)+1,C=c-a+1,_=r.getAllFilterColumns();_.forEach(f=>{const[g,y]=f;g<=c&&g>=a&&(h.push({id:v.id,params:{unitId:e,subUnitId:t,col:g,criteria:null}}),u.push({id:v.id,params:{unitId:e,subUnitId:t,col:g,criteria:{...y.serialize(),colId:g}}}))});const p=_.filter(f=>{const[g,y]=f;return g>c});let M={undos:[],redos:[]};if(p.length>0){const{oldRange:f,newRange:g}=this._moveCriteria(e,t,p,-C);M=g,h.push(...f.redos),u.unshift(...f.undos)}if(m===l-o+1){const f={unitId:e,subUnitId:t};h.push({id:I.id,params:f}),u.unshift({id:F.id,params:{range:s,unitId:e,subUnitId:t}})}else{const f=o<=a?o:m===0?o-C:a,g=o<=a?l-m:l-C,y={unitId:e,subUnitId:t,range:{...s,startColumn:f,endColumn:g}};h.push({id:F.id,params:y}),u.unshift({id:F.id,params:{range:s,unitId:e,subUnitId:t}}),h.push(...M.redos),u.unshift(...M.undos)}return{undos:u,redos:h}}_handleRemoveRowCommand(n,e,t){var p;const r=this._sheetsFilterService.getFilterModel(e,t);if(!r)return this._handleNull();const s=r.getRange(),{startRow:o,endRow:l}=s,{startRow:a,endRow:c}=n.range;if(a>l)return this._handleNull();if(c<o)return{undos:[{id:F.id,params:{range:s,unitId:e,subUnitId:t}}],redos:[{id:F.id,params:{range:{...s,startRow:o-(c-a+1),endRow:l-(c-a+1)},unitId:e,subUnitId:t}}]};const h=[],u=[],m=r.getAllFilterColumns(),C=o<=c&&o>=a;u.push({id:F.id,params:{range:s,unitId:e,subUnitId:t}});const _=Math.min(c,l)-Math.max(a,o)+1;if(_===l-o+1||C){const M={unitId:e,subUnitId:t};h.push({id:I.id,params:M}),m.forEach(w=>{const[f,g]=w,y={unitId:e,subUnitId:t,col:f,criteria:{...g.serialize(),colId:f}};u.push({id:v.id,params:y})})}else{const M=(p=this._univerInstanceService.getUniverSheetInstance(e))==null?void 0:p.getSheetBySheetId(t);if(!M)return this._handleNull();const w=[];for(let E=a;E<=c;E++)M.getRowFiltered(E)&&w.push(E);const f=Math.min(o,a),g=f+(l-o)-_+w.length,y={unitId:e,subUnitId:t,range:{...s,startRow:f,endRow:g}};h.push({id:F.id,params:y})}return{undos:N(u),redos:N(h)}}handleMoveColsCommand({fromRange:n,toRange:e},t,r){var w;const s=this._sheetsFilterService.getFilterModel(t,r),o=(w=s==null?void 0:s.getRange())!=null?w:null;if(!s||!o)return this._handleNull();const{startColumn:l,endColumn:a}=o;if(n.endColumn<l&&e.startColumn<=l||n.startColumn>a&&e.endColumn>a)return this._handleNull();const c=[],h=[],u={};for(let f=l;f<=a;f++)u[f]={colIndex:f,filter:s.getFilterColumn(f)};d.moveMatrixArray(n.startColumn,n.endColumn-n.startColumn+1,e.startColumn,u);let m=o.startColumn,C=o.endColumn;l>=n.startColumn&&l<=n.endColumn&&e.startColumn>n.startColumn&&n.endColumn<a&&(m=n.endColumn+1),a>=n.startColumn&&a<=n.endColumn&&e.startColumn<n.startColumn&&n.startColumn>l&&(C=n.startColumn-1);const _=Object.keys(u).map(f=>Number(f)),p=_.find(f=>u[f].colIndex===C),M=_.find(f=>u[f].colIndex===m);if(_.forEach(f=>{var Q,J;const{colIndex:g,filter:y}=u[f],E=f;if(y){if(E>=M&&E<=p){const j={unitId:t,subUnitId:r,col:E,criteria:{...y.serialize(),colId:E}},Se={unitId:t,subUnitId:r,col:E,criteria:s.getFilterColumn(E)?{...(Q=s.getFilterColumn(E))==null?void 0:Q.serialize(),colId:E}:null};c.push({id:v.id,params:j}),h.push({id:v.id,params:Se})}if(!((J=u[g])!=null&&J.filter)){const j={unitId:t,subUnitId:r,col:g,criteria:null};c.push({id:v.id,params:j}),h.push({id:v.id,params:{unitId:t,subUnitId:r,col:g,criteria:{...y.serialize(),colId:g}}})}}}),l!==M||a!==p){const f={unitId:t,subUnitId:r,range:{...o,startColumn:M,endColumn:p}};c.unshift({id:F.id,params:f}),h.unshift({id:F.id,params:{range:o,unitId:t,subUnitId:r}})}return{undos:h,redos:c}}_handleMoveRowsCommand(n,e,t){var f;const r=this._sheetsFilterService.getFilterModel(e,t),s=(f=r==null?void 0:r.getRange())!=null?f:null;if(!r||!s)return this._handleNull();const{startRow:o,endRow:l}=s,{fromRange:a,toRange:c}=n;if(a.endRow<o&&c.startRow<=o||a.startRow>l&&c.endRow>l)return this._handleNull();const h=[],u=[],m={};for(let g=o;g<=l;g++)m[g]={oldIndex:g};const C=o;let _=l;l>=a.startRow&&l<=a.endRow&&c.startRow<a.startRow&&a.startRow>o&&(_=a.startRow-1),d.moveMatrixArray(a.startRow,a.endRow-a.startRow+1,c.startRow,m);const p=Object.keys(m).map(g=>Number(g)),M=p.find(g=>m[g].oldIndex===_),w=p.find(g=>m[g].oldIndex===C);if(o!==w||l!==M){const g={unitId:e,subUnitId:t,range:{...s,startRow:w,endRow:M}};h.push({id:F.id,params:g},{id:x.id,params:{unitId:e,subUnitId:t}}),u.push({id:F.id,params:{range:s,unitId:e,subUnitId:t}},{id:x.id,params:{unitId:e,subUnitId:t}})}return{redos:h,undos:u}}_handleMoveRangeCommand(n,e,t){const{fromRange:r,toRange:s}=n,o=this._sheetsFilterService.getFilterModel(e,t);if(!o)return this._handleNull();const l=o.getRange();if(!l)return this._handleNull();const a=[],c=[];if(d.Rectangle.contains(r,l)){const h=l.startRow-r.startRow,u=l.startColumn-r.startColumn,m={startRow:s.startRow+h,startColumn:s.startColumn+u,endRow:s.startRow+h+(l.endRow-l.startRow),endColumn:s.startColumn+u+(l.endColumn-l.startColumn)},C={id:I.id,params:{unitId:e,subUnitId:t}},_={id:F.id,params:{unitId:e,subUnitId:t,range:m}},p={id:F.id,params:{unitId:e,subUnitId:t,range:l}};a.push(C,_),c.push(C,p);const M=o.getAllFilterColumns(),w=s.startColumn-r.startColumn;M.forEach(f=>{const[g,y]=f;y&&(a.push({id:v.id,params:{unitId:e,subUnitId:t,col:g+w,criteria:{...y.serialize(),colId:g+w}}}),c.push({id:v.id,params:{unitId:e,subUnitId:t,col:g,criteria:{...y.serialize(),colId:g}}}))})}else if(d.Rectangle.intersects(s,l)){const h={...l,endRow:Math.max(l.endRow,s.endRow)};a.push({id:F.id,params:{unitId:e,subUnitId:t,range:h}}),c.push({id:F.id,params:{unitId:e,subUnitId:t,range:l}})}return{redos:a,undos:c}}_handleRemoveSheetCommand(n,e,t){const r=this._sheetsFilterService.getFilterModel(e,t);if(!r)return this._handleNull();const s=r.getRange();if(!s)return this._handleNull();const o=[],l=[];return r.getAllFilterColumns().forEach(([c,h])=>{l.push({id:v.id,params:{unitId:e,subUnitId:t,col:c,criteria:{...h.serialize(),colId:c}}})}),o.push({id:I.id,params:{unitId:e,subUnitId:t,range:s}}),l.unshift({id:F.id,params:{range:s,unitId:e,subUnitId:t}}),{undos:l,redos:o}}_handleCopySheetCommand(n,e,t){const r=this._sheetsFilterService.getFilterModel(n,e);if(!r)return this._handleNull();const s=r.getRange();if(!s)return this._handleNull();const o=[],l=[],a=[],c=[];return r.getAllFilterColumns().forEach(([u,m])=>{o.push({id:v.id,params:{unitId:n,subUnitId:t,col:u,criteria:{...m.serialize(),colId:u}}}),a.push({id:v.id,params:{unitId:n,subUnitId:t,col:u,criteria:null}})}),a.push({id:I.id,params:{unitId:n,subUnitId:t,range:s}}),o.unshift({id:F.id,params:{range:s,unitId:n,subUnitId:t}}),{undos:l,redos:o,preUndos:a,preRedos:c}}_handleNull(){return{redos:[],undos:[]}}_initRowFilteredInterceptor(){this.disposeWithMe(this._sheetInterceptorService.intercept(S.INTERCEPTOR_POINT.ROW_FILTERED,{handler:(n,e)=>{var t,r;return n?!0:(r=(t=this._sheetsFilterService.getFilterModel(e.unitId,e.subUnitId))==null?void 0:t.isRowFiltered(e.row))!=null?r:!1}}))}_moveCriteria(n,e,t,r){const s={unitId:n,subUnitId:e,criteria:null,col:-1},o=[],l=[],a=[],c=[];return t.forEach(h=>{const[u,m]=h;l.push({id:v.id,params:{...s,col:u}}),o.push({id:v.id,params:{...s,col:u,criteria:{...m.serialize(),colId:u}}})}),t.forEach(h=>{const[u,m]=h;c.push({id:v.id,params:{...s,col:u+r,criteria:{...m.serialize(),colId:u+r}}}),a.push({id:v.id,params:{...s,col:u+r,criteria:null}})}),{newRange:{redos:c,undos:a},oldRange:{redos:l,undos:o}}}_commandExecutedListener(){this.disposeWithMe(this._commandService.onCommandExecuted((n,e)=>{var c,h;const{unitId:t,subUnitId:r}=n.params||{},s=this._sheetsFilterService.getFilterModel(t,r);if(!s)return;const o=Array.from(s.filteredOutRows).sort((u,m)=>u-m),l=[];let a=!1;if(n.id===S.RemoveRowMutation.id){const{startRow:u,endRow:m}=n.params.range,C=o.filter(_=>_>=u&&_<=m);o.forEach(_=>{if(_<u)l.push(_);else if(a=!0,_<=m){const p=Math.max(u,l.length?l[l.length-1]+1:u);l.push(p)}else l.push(_-(m-u+1-C.length))})}if(n.id===S.InsertRowMutation.id){const{startRow:u,endRow:m}=n.params.range;o.forEach(C=>{C>=u?(a=!0,l.push(C+(m-u+1))):l.push(C)})}if(a&&(s.filteredOutRows=new Set(l)),n.id===S.SetRangeValuesMutation.id&&!(e!=null&&e.onlyLocal)){const u=this._getExtendRegion(t,r);if(u){const m=n.params.cellValue;if(m)for(let C=u.startColumn;C<=u.endColumn;C++){const _=(c=m==null?void 0:m[u.startRow])==null?void 0:c[C];if(_&&this._cellHasValue(_)){const p=(h=this._univerInstanceService.getUnit(t))==null?void 0:h.getSheetBySheetId(r);if(p){const M=S.expandToContinuousRange(u,{down:!0},p),w=this._sheetsFilterService.getFilterModel(t,r),f=w.getRange();w.setRange({...f,endRow:M.endRow}),this._registerRefRange(t,r)}}}}}}))}_getExtendRegion(n,e){var a;const t=this._sheetsFilterService.getFilterModel(n,e);if(!t)return null;const r=(a=this._univerInstanceService.getUnit(n))==null?void 0:a.getSheetBySheetId(e);if(!r)return null;const s=t.getRange();if(!s)return null;const o=r.getRowCount()-1,l=r.getRowManager();for(let c=s.endRow+1;c<=o;c++)if(l.getRowRawVisible(c))return{startRow:c,endRow:c,startColumn:s.startColumn,endColumn:s.endColumn};return null}_initErrorHandling(){this.disposeWithMe(this._commandService.beforeCommandExecuted(n=>{const e=n.params,t=S.getSheetCommandTarget(this._univerInstanceService);if(!t)return;const{subUnitId:r,unitId:s}=t,o=this._sheetsFilterService.getFilterModel(s,r);if(!o)return;const l=o.getRange();if(n.id===S.MoveRowsCommand.id&&e.fromRange.startRow<=l.startRow&&e.fromRange.endRow<l.endRow&&e.fromRange.endRow>=l.startRow)throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"),new Error("[SheetsFilterController]: Cannot move header row of filter")}))}_cellHasValue(n){const e=Object.values(n);return!(e.length===0||e.every(t=>t==null))}};L=Ge([b(0,d.ICommandService),b(1,d.Inject(S.SheetInterceptorService)),b(2,d.Inject(exports.SheetsFilterService)),b(3,d.IUniverInstanceService),b(4,d.Inject(S.RefRangeService)),b(5,d.Optional(pe.DataSyncPrimaryController)),b(6,d.Inject(S.ZebraCrossingCacheController))],L);var Qe=Object.getOwnPropertyDescriptor,Je=(i,n,e,t)=>{for(var r=t>1?void 0:t?Qe(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},V=(i,n)=>(e,t)=>n(e,t,i);const Ke=[v.id,x.id],Ze=[S.InsertColMutation.id,S.RemoveColMutation.id,S.MoveColsMutation.id];exports.SheetsFilterSyncController=class extends d.Disposable{constructor(e,t,r){super();R(this,"_d",new d.DisposableCollection);R(this,"_visible$",new O.BehaviorSubject(!1));R(this,"visible$",this._visible$.asObservable());R(this,"_enabled$",new O.BehaviorSubject(!0));R(this,"enabled$",this._enabled$.asObservable());this._sheetsFilterController=e,this._commandService=t,this._configService=r;const s=this._configService.getConfig(_e);s!=null&&s.enableSyncSwitch&&this._visible$.next(!0)}get visible(){return this._visible$.getValue()}get enabled(){return this._enabled$.getValue()}setEnabled(e){this._enabled$.next(e),e?this._d.dispose():this._initOnlyLocalListener()}_initOnlyLocalListener(){this._d.add(this._commandService.beforeCommandExecuted((e,t)=>{Ke.includes(e.id)&&(t||(t={}),t.onlyLocal=!0)})),this._d.add(this._commandService.onCommandExecuted((e,t)=>{if(Ze.includes(e.id)&&(t!=null&&t.fromCollab)){if(e.id===S.InsertColMutation.id){const{range:r,unitId:s,subUnitId:o}=e.params,{redos:l}=this._sheetsFilterController.handleInsertColCommand(r,s,o);d.sequenceExecute(l,this._commandService,t)}else if(e.id===S.RemoveColMutation.id){const{range:r,unitId:s,subUnitId:o}=e.params,{redos:l}=this._sheetsFilterController.handleRemoveColCommand(r,s,o);d.sequenceExecute(l,this._commandService,t)}else if(e.id===S.MoveColsMutation.id){const{sourceRange:r,targetRange:s,unitId:o,subUnitId:l}=e.params,{redos:a}=this._sheetsFilterController.handleMoveColsCommand({fromRange:r,toRange:s},o,l);d.sequenceExecute(a,this._commandService,t)}}}))}};exports.SheetsFilterSyncController=Je([V(0,d.Inject(L)),V(1,d.ICommandService),V(2,d.IConfigService)],exports.SheetsFilterSyncController);var Ye=Object.getOwnPropertyDescriptor,Xe=(i,n,e,t)=>{for(var r=t>1?void 0:t?Ye(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},P=(i,n)=>(e,t)=>n(e,t,i);let B=class extends d.Disposable{constructor(i,n,e,t){super(),this._activeDirtyManagerService=i,this._sheetRowFilteredService=n,this._sheetsFilterService=e,this._univerInstanceService=t,this._initFormulaDirtyRange(),this._registerSheetRowFiltered()}_initFormulaDirtyRange(){q.forEach(i=>{this._activeDirtyManagerService.register(i,{commandId:i,getDirtyData:n=>{const e=n.params,{unitId:t,subUnitId:r}=e;return{dirtyRanges:this._getHideRowMutation(t,r),clearDependencyTreeCache:{[t]:{[r]:"1"}}}}})})}_getHideRowMutation(i,n){var l,a;const e=(l=this._sheetsFilterService.getFilterModel(i,n))==null?void 0:l.getRange(),t=(a=this._univerInstanceService.getUnit(i))==null?void 0:a.getSheetBySheetId(n);if(e==null||t==null)return[];const{startRow:r,endRow:s}=e;return[{unitId:i,sheetId:n,range:{startRow:r,startColumn:0,endRow:s,endColumn:t.getColumnCount()-1}}]}_registerSheetRowFiltered(){this._sheetRowFilteredService.register((i,n,e)=>{var t,r;return(r=(t=this._sheetsFilterService.getFilterModel(i,n))==null?void 0:t.isRowFiltered(e))!=null?r:!1})}};B=Xe([P(0,d.Inject(K.IActiveDirtyManagerService)),P(1,d.Inject(K.ISheetRowFilteredService)),P(2,d.Inject(exports.SheetsFilterService)),P(3,d.IUniverInstanceService)],B);var et=Object.getOwnPropertyDescriptor,tt=(i,n,e,t)=>{for(var r=t>1?void 0:t?et(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},ee=(i,n)=>(e,t)=>n(e,t,i),D;exports.UniverSheetsFilterPlugin=(D=class extends d.Plugin{constructor(n=X,e,t){super(),this._config=n,this._injector=e,this._configService=t;const{...r}=d.merge({},X,this._config);this._configService.setConfig(_e,r)}onStarting(){[[B],[exports.SheetsFilterService],[L],[exports.SheetsFilterSyncController]].forEach(n=>this._injector.add(n))}onReady(){d.touchDependencies(this._injector,[[B],[L],[exports.SheetsFilterSyncController]])}},R(D,"type",d.UniverInstanceType.UNIVER_SHEET),R(D,"pluginName",G),D);exports.UniverSheetsFilterPlugin=tt([ee(1,d.Inject(d.Injector)),ee(2,d.IConfigService)],exports.UniverSheetsFilterPlugin);exports.ClearSheetsFilterCriteriaCommand=je;exports.CustomFilterOperator=T;exports.FILTER_MUTATIONS=q;exports.FilterBy=A;exports.FilterColumn=me;exports.FilterModel=$;exports.ReCalcSheetsFilterCommand=He;exports.ReCalcSheetsFilterMutation=x;exports.RemoveSheetFilterCommand=ge;exports.RemoveSheetsFilterMutation=I;exports.SHEET_FILTER_SNAPSHOT_ID=G;exports.SetSheetFilterRangeCommand=fe;exports.SetSheetsFilterCriteriaCommand=Be;exports.SetSheetsFilterCriteriaMutation=v;exports.SetSheetsFilterRangeMutation=F;exports.SmartToggleSheetsFilterCommand=De;exports.equals=ce;exports.getCustomFilterFn=W;exports.greaterThan=se;exports.greaterThanOrEqualTo=oe;exports.lessThan=le;exports.lessThanOrEqualTo=ae;exports.notEquals=k;
1
+ "use strict";var Se=Object.defineProperty;var Re=(i,n,e)=>n in i?Se(i,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[n]=e;var R=(i,n,e)=>Re(i,typeof n!="symbol"?n+"":n,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("@univerjs/core"),S=require("@univerjs/sheets"),O=require("rxjs"),Fe=require("@univerjs/engine-render"),ve=require("@univerjs/rpc"),K=require("@univerjs/engine-formula"),te="sheet.mutation.set-filter-range",re="sheet.mutation.set-filter-criteria",ne="sheet.mutation.remove-filter",ie="sheet.mutation.re-calc-filter",q=new Set([te,re,ne,ie]);var A=(i=>(i[i.VALUES=0]="VALUES",i[i.COLORS=1]="COLORS",i[i.CONDITIONS=2]="CONDITIONS",i))(A||{}),T=(i=>(i.EQUAL="equal",i.GREATER_THAN="greaterThan",i.GREATER_THAN_OR_EQUAL="greaterThanOrEqual",i.LESS_THAN="lessThan",i.LESS_THAN_OR_EQUAL="lessThanOrEqual",i.NOT_EQUALS="notEqual",i))(T||{});const se={operator:T.GREATER_THAN,fn:(i,n)=>U(i)?i>n:!1},oe={operator:T.GREATER_THAN_OR_EQUAL,fn:(i,n)=>U(i)?i>=n:!1},le={operator:T.LESS_THAN,fn:(i,n)=>U(i)?i<n:!1},ae={operator:T.LESS_THAN_OR_EQUAL,fn:(i,n)=>U(i)?i<=n:!1},ce={operator:T.EQUAL,fn:(i,n)=>U(i)?i===n:!1},k={operator:T.NOT_EQUALS,fn:(i,n)=>{if(typeof n=="string"){if(n===" ")return i!=null;const e=ue(i);return e&&Ee(n)?!c.createREGEXFromWildChar(n).test(e):e!==n}return U(i)?i!==n:!0}},de=new Map([]),pe=[se,oe,le,ae,ce,k];pe.forEach(i=>{de.set(i.operator,i)});function we(i){return!!i}const Me={fn:(i,n)=>{const e=ue(i);return e===null?n==="":c.createREGEXFromWildChar(n).test(e)}};function W(i){return i?de.get(i):Me}function U(i){return typeof i=="number"}function Z(i){return!!(typeof i=="number"||typeof i=="string"&&c.isNumeric(i))}function ue(i){return typeof i=="boolean"||i==null?null:typeof i=="string"?i:i.toString()}function Ee(i){return typeof i=="number"?!1:i.indexOf("*")!==-1||i.indexOf("?")!==-1}const H=()=>new Set;class $ extends c.Disposable{constructor(e,t,r){super();R(this,"_filteredOutRows$",new O.BehaviorSubject(H()));R(this,"filteredOutRows$",this._filteredOutRows$.asObservable());R(this,"_hasCriteria$",new O.BehaviorSubject(!1));R(this,"hasCriteria$",this._hasCriteria$.asObservable());R(this,"_filterColumnByIndex",new Map);R(this,"_alreadyFilteredOutRows",H());R(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(),this._worksheet=null}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 $(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 he(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 he extends c.Disposable{constructor(e,t,r,s,o){super();R(this,"_filteredOutRows",null);R(this,"_filterFn",null);R(this,"_range",null);R(this,"_column",0);R(this,"_filterBy",A.VALUES);this.unitId=e,this.subUnitId=t,this._worksheet=r,this._criteria=s,this._filterColumnContext=o}get filteredOutRows(){return this._filteredOutRows}get filterBy(){return this._filterBy}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:a,rowSpan:d,col:h}=l;if(o.has(a)&&(!d||d===1))continue;if(!(this._filterBy===A.VALUES?this._filterFn(c.extractPureTextFromCell(this._worksheet.getCell(a,h))):this._filterBy===A.COLORS?this._filterFn(this._worksheet.getComposedCellStyle(a,h)):this._filterFn(Ue(this._worksheet,a,h)))&&(s.add(a),d))for(let m=1;m<d;m++)s.add(a+m)}return s}_generateFilterFn(){this._criteria&&(this._filterFn=ye(this._criteria),this._filterBy=this._criteria.filters?A.VALUES:this._criteria.colorFilters?A.COLORS:A.CONDITIONS)}}function ye(i){if(i.filters)return Oe(i.filters);if(i.colorFilters)return Ie(i.colorFilters);if(i.customFilters)return Te(i.customFilters);throw new Error("[FilterModel]: other types of filters are not supported yet.")}function Oe(i){const n=!!i.blank,e=new Set(i.filters);return t=>t===void 0||t===""?n:e.has(typeof t=="string"?t:`${t}`)}function Ie(i){if(i.cellFillColors){const n=new Set(i.cellFillColors);return e=>{var r;if(!e||!((r=e.bg)!=null&&r.rgb))return!!n.has(null);const t=new c.ColorKit(e.bg.rgb).toRgbString();return n.has(t)}}if(i.cellTextColors){const n=new Set(i.cellTextColors);return e=>{var r;if(!e||!((r=e.cl)!=null&&r.rgb))return!!n.has(Fe.COLOR_BLACK_RGB);const t=new c.ColorKit(e.cl.rgb).toRgbString();return n.has(t)}}throw new Error("[FilterModel]: color filters are not supported yet.")}function Te(i){const n=i.customFilters.map(e=>xe(e));return Ne(n)?i.and?Ae(n):be(n):n[0]}function Ae(i){const[n,e]=i;return t=>n(t)&&e(t)}function be(i){const[n,e]=i;return t=>n(t)||e(t)}function Ne(i){return i.length===2}function xe(i){const n=i.val;if(i.operator===T.NOT_EQUALS&&!Z(n))return r=>k.fn(r,n);if(we(i.operator)){if(!Z(n))return()=>!1;const r=W(i.operator),s=Number(n);return o=>r.fn(o,s)}const e=W(i.operator);return t=>e.fn(t,n)}function Ue(i,n,e){const t=i.getCell(n,e);if(!t)return null;const r=i.getCellRaw(n,e);return t&&!r?X(t):r?t.t===c.CellValueType.NUMBER&&typeof t.v=="string"?r.v:t.t===c.CellValueType.NUMBER?Number(r.v):X(r):null}function X(i){var t,r;const n=(r=(t=i.p)==null?void 0:t.body)==null?void 0:r.dataStream;if(n)return n.trimEnd();const e=i.v;return typeof e=="string"?i.t===c.CellValueType.BOOLEAN?e.toUpperCase():e:typeof e=="number"?i.t===c.CellValueType.BOOLEAN?e?"TRUE":"FALSE":e:typeof e=="boolean"?e?"TRUE":"FALSE":""}var $e=Object.getOwnPropertyDescriptor,Le=(i,n,e,t)=>{for(var r=t>1?void 0:t?$e(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},z=(i,n)=>(e,t)=>n(e,t,i);const G="SHEET_FILTER_PLUGIN";exports.SheetsFilterService=class extends c.Disposable{constructor(e,t,r){super();R(this,"_filterModels",new Map);R(this,"_loadedUnitId$",new O.BehaviorSubject(null));R(this,"loadedUnitId$",this._loadedUnitId$.asObservable());R(this,"_errorMsg$",new O.BehaviorSubject(null));R(this,"errorMsg$",this._errorMsg$.asObservable());R(this,"_activeFilterModel$",new O.BehaviorSubject(null));R(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 $(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(l){console.error("[SheetsFilterService]: could not get active workbook!",l);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(O.merge(c.fromCallback(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(O.filter(([e])=>e.type===c.CommandType.MUTATION&&q.has(e.id))),this._univerInstanceService.getCurrentTypeOfUnit$(c.UniverInstanceType.UNIVER_SHEET).pipe(O.switchMap(e=>{var t;return(t=e==null?void 0:e.activeSheet$)!=null?t:O.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=$.deserialize(e,s,r.getSheetBySheetId(s),o);this._cacheFilterModel(e,s,l)})}dispose(){super.dispose(),this._loadedUnitId$.complete(),this._errorMsg$.complete(),this._activeFilterModel$.complete(),this._filterModels.forEach(e=>{e.forEach(t=>t.dispose()),e.clear()}),this._filterModels.clear()}_initModel(){this._resourcesManagerService.registerPluginResource({pluginName:G,businesses:[c.UniverInstanceType.UNIVER_SHEET],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)}};exports.SheetsFilterService=Le([z(0,c.IResourceManagerService),z(1,c.IUniverInstanceService),z(2,c.ICommandService)],exports.SheetsFilterService);const F={id:te,type:c.CommandType.MUTATION,handler:(i,n)=>{const{subUnitId:e,unitId:t,range:r}=n;return i.get(exports.SheetsFilterService).ensureFilterModel(t,e).setRange(r),!0}},v={id:re,type:c.CommandType.MUTATION,handler:(i,n)=>{const{subUnitId:e,unitId:t,criteria:r,col:s,reCalc:o=!0}=n,a=i.get(exports.SheetsFilterService).getFilterModel(t,e);return a?(a.setCriteria(s,r,o),!0):!1}},I={id:ne,type:c.CommandType.MUTATION,handler:(i,n)=>{const{unitId:e,subUnitId:t}=n;return i.get(exports.SheetsFilterService).removeFilterModel(e,t)}},x={id:ie,type:c.CommandType.MUTATION,handler:(i,n)=>{const{unitId:e,subUnitId:t}=n,s=i.get(exports.SheetsFilterService).getFilterModel(e,t);return s?(s.reCalc(),!0):!1}},me={id:"sheet.command.set-filter-range",type:c.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(exports.SheetsFilterService),t=i.get(c.ICommandService),r=i.get(c.IUndoRedoService),s=i.get(c.IUniverInstanceService),{unitId:o,subUnitId:l,range:a}=n;if(!S.getSheetCommandTarget(s,n)||e.getFilterModel(o,l))return!1;if(a.endRow===a.startRow){const C=i.get(c.ErrorService),_=i.get(c.LocaleService);return C.emit(_.t("sheets-filter.command.not-valid-filter-range")),!1}const u={id:F.id,params:{unitId:o,subUnitId:l,range:a}},m=t.syncExecuteCommand(u.id,u.params);return m&&r.pushUndoRedo({unitID:o,undoMutations:[{id:I.id,params:{unitId:o,subUnitId:l}}],redoMutations:[u]}),m}},fe={id:"sheet.command.remove-sheet-filter",type:c.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(c.IUniverInstanceService),t=i.get(exports.SheetsFilterService),r=i.get(c.ICommandService),s=i.get(c.IUndoRedoService),o=S.getSheetCommandTarget(e,n);if(!o)return!1;const{unitId:l,subUnitId:a}=o,d=t.getFilterModel(l,a);if(!d)return!1;const h=d==null?void 0:d.serialize(),u=He(l,a,h),m=r.syncExecuteCommand(I.id,{unitId:l,subUnitId:a});return m&&s.pushUndoRedo({unitID:l,undoMutations:u,redoMutations:[{id:I.id,params:{unitId:l,subUnitId:a}}]}),m}},Pe={id:"sheet.command.smart-toggle-filter",type:c.CommandType.COMMAND,handler:async i=>{const n=i.get(c.IUniverInstanceService),e=i.get(exports.SheetsFilterService),t=i.get(c.ICommandService),r=n.getCurrentUnitForType(c.UniverInstanceType.UNIVER_SHEET),s=r==null?void 0:r.getActiveSheet();if(!s||!r)return!1;const o=r.getUnitId(),l=s.getSheetId();if(e.getFilterModel(o,l))return t.executeCommand(fe.id,{unitId:o,subUnitId:l});const h=i.get(S.SheetsSelectionsService).getCurrentLastSelection();if(!h)return!1;const u=h.range,m=S.isSingleCellSelection(h)?S.expandToContinuousRange(u,{left:!0,right:!0,up:!0,down:!0},s):u;return t.executeCommand(me.id,{unitId:o,subUnitId:l,range:m})}},De={id:"sheet.command.set-filter-criteria",type:c.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(exports.SheetsFilterService),t=i.get(c.ICommandService),r=i.get(c.IUndoRedoService),{unitId:s,subUnitId:o,col:l,criteria:a}=n,d=e.getFilterModel(s,o);if(!d)return!1;const h=d.getRange();if(!h||l<h.startColumn||l>h.endColumn)return!1;const u=d.getFilterColumn(l),m=Ve(s,o,l,u),C={id:v.id,params:{unitId:s,subUnitId:o,col:l,criteria:a}},_=t.syncExecuteCommand(C.id,C.params);return _&&r.pushUndoRedo({unitID:s,undoMutations:[m],redoMutations:[C]}),_}},Be={id:"sheet.command.clear-filter-criteria",type:c.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(exports.SheetsFilterService),t=i.get(c.IUndoRedoService),r=i.get(c.ICommandService),s=i.get(c.IUniverInstanceService),o=S.getSheetCommandTarget(s,n);if(!o)return!1;const{unitId:l,subUnitId:a}=o,d=e.getFilterModel(o.unitId,o.subUnitId);if(!d)return!1;const h=d.serialize(),u=ge(l,a,h),m=ze(l,a,h);return c.sequenceExecute(m,r).result?(t.pushUndoRedo({unitID:l,undoMutations:u,redoMutations:m}),!0):!1}},je={id:"sheet.command.re-calc-filter",type:c.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(exports.SheetsFilterService),t=i.get(c.ICommandService),r=i.get(c.IUniverInstanceService),s=S.getSheetCommandTarget(r,n);if(!s)return!1;const{unitId:o,subUnitId:l}=s;return e.getFilterModel(s.unitId,s.subUnitId)?t.executeCommand(x.id,{unitId:o,subUnitId:l}):!1}};function He(i,n,e){const t=[],r={id:F.id,params:{unitId:i,subUnitId:n,range:e.ref}};return t.push(r),ge(i,n,e).forEach(o=>t.push(o)),t}function ge(i,n,e){var r;const t=[];return(r=e.filterColumns)==null||r.forEach(s=>{const o={id:v.id,params:{unitId:i,subUnitId:n,col:s.colId,criteria:s}};t.push(o)}),t}function ze(i,n,e){var r;const t=[];return(r=e.filterColumns)==null||r.forEach(s=>{const o={id:v.id,params:{unitId:i,subUnitId:n,col:s.colId,criteria:null}};t.push(o)}),t}function Ve(i,n,e,t){if(!t)return{id:v.id,params:{unitId:i,subUnitId:n,col:e,criteria:null}};const r=t.serialize();return{id:v.id,params:{unitId:i,subUnitId:n,col:e,criteria:r}}}const Ce="sheets-filter.config",Y={};function We(i,n){for(let e=0;e<i.length;e++){let t=e;if(i[e])for(let r=e+1;r<i.length;r++)i[t]&&i[r]&&n(i[t],i[r])&&(i[t]=null,t=r)}return i.filter(e=>e!==null)}function N(i){return We(i,(n,e)=>n.id===v.id&&e.id===v.id&&n.params.unitId===e.params.unitId&&n.params.subUnitId===e.params.subUnitId&&n.params.col===e.params.col)}var qe=Object.getOwnPropertyDescriptor,ke=(i,n,e,t)=>{for(var r=t>1?void 0:t?qe(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},b=(i,n)=>(e,t)=>n(e,t,i);let L=class extends c.Disposable{constructor(n,e,t,r,s,o,l){super();R(this,"_disposableCollection",new c.DisposableCollection);this._commandService=n,this._sheetInterceptorService=e,this._sheetsFilterService=t,this._univerInstanceService=r,this._refRangeService=s,this._dataSyncPrimaryController=o,this._zebraCrossingCacheController=l,this._initCommands(),this._initRowFilteredInterceptor(),this._initInterceptors(),this._commandExecutedListener(),this._initErrorHandling(),this._initZebraCrossingCacheListener()}_initZebraCrossingCacheListener(){this.disposeWithMe(this._sheetsFilterService.activeFilterModel$.subscribe(n=>{n&&this.disposeWithMe(n.filteredOutRows$.subscribe(()=>{this._zebraCrossingCacheController.updateZebraCrossingCache(n.unitId,n.subUnitId)}))}))}_initCommands(){[v,F,x,I].forEach(n=>{var e;this.disposeWithMe(this._commandService.registerCommand(n)),(e=this._dataSyncPrimaryController)==null||e.registerSyncingMutations(n)})}_initInterceptors(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:n=>this._getUpdateFilter(n)})),this.disposeWithMe(this._commandService.onCommandExecuted(n=>{if(n.id===S.SetWorksheetActiveOperation.id){const e=n.params,t=e.subUnitId,r=e.unitId;if(!t||!r)return;this._registerRefRange(r,t)}if(n.id===F.id){const e=n.params,t=e.subUnitId,r=e.unitId;if(!t||!r)return;this._registerRefRange(e.unitId,e.subUnitId)}})),this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe(n=>{if(n){const e=this._univerInstanceService.getUniverSheetInstance(n),t=e==null?void 0:e.getActiveSheet();t&&this._registerRefRange(n,t.getSheetId())}}))}_registerRefRange(n,e){var l;this._disposableCollection.dispose();const t=this._univerInstanceService.getUniverSheetInstance(n),r=t==null?void 0:t.getSheetBySheetId(e);if(!t||!r)return;const s=(l=this._sheetsFilterService.getFilterModel(n,e))==null?void 0:l.getRange(),o=a=>{switch(a.id){case S.InsertRowCommand.id:{const d=a.params,h=d.unitId||n,u=d.subUnitId||e;return this._handleInsertRowCommand(d,h,u)}case S.InsertColCommand.id:{const d=a.params,h=d.unitId||n,u=d.subUnitId||e;return this.handleInsertColCommand(d.range,h,u)}case S.RemoveColCommand.id:{const d=a.params;return this.handleRemoveColCommand(d.range,n,e)}case S.RemoveRowCommand.id:{const d=a.params;return this._handleRemoveRowCommand(d,n,e)}case S.EffectRefRangId.MoveColsCommandId:{const d=a.params;return this.handleMoveColsCommand({fromRange:d.fromRange,toRange:d.toRange},n,e)}case S.EffectRefRangId.MoveRowsCommandId:{const d=a.params;return this._handleMoveRowsCommand(d,n,e)}case S.MoveRangeCommand.id:{const d=a.params;return this._handleMoveRangeCommand(d,n,e)}}return{redos:[],undos:[]}};s&&this._disposableCollection.add(this._refRangeService.registerRefRange(s,o,n,e))}_getUpdateFilter(n){const{id:e}=n;switch(e){case S.RemoveSheetCommand.id:{const t=n.params;return this._handleRemoveSheetCommand(t,t.unitId,t.subUnitId)}case S.CopySheetCommand.id:{const t=n.params,{targetSubUnitId:r,unitId:s,subUnitId:o}=t;return!s||!o||!r?this._handleNull():this._handleCopySheetCommand(s,o,r)}}return{redos:[],undos:[]}}handleInsertColCommand(n,e,t){var f;const r=this._sheetsFilterService.getFilterModel(e,t),s=(f=r==null?void 0:r.getRange())!=null?f:null;if(!r||!s)return this._handleNull();const{startColumn:o,endColumn:l}=s,{startColumn:a,endColumn:d}=n,h=d-a+1;if(d>l)return this._handleNull();const u=[],m=[],C=a,_={unitId:e,subUnitId:t,range:{...s,startColumn:a<=o?o+h:o,endColumn:l+h}},p={unitId:e,subUnitId:t,range:s};u.push({id:F.id,params:_}),m.push({id:F.id,params:p});const w=r.getAllFilterColumns().filter(g=>g[0]>=C);if(w.length!==0){const{newRange:g,oldRange:E}=this._moveCriteria(e,t,w,h);u.push(...E.redos,...g.redos),m.push(...g.undos,...E.undos)}return{redos:N(u),undos:N(m)}}_handleInsertRowCommand(n,e,t){var p;const r=this._sheetsFilterService.getFilterModel(e,t),s=(p=r==null?void 0:r.getRange())!=null?p:null;if(!r||!s)return this._handleNull();const{startRow:o,endRow:l}=s,{startRow:a,endRow:d}=n.range,h=d-a+1;if(d>l)return this._handleNull();const u=[],m=[],C={unitId:e,subUnitId:t,range:{...s,startRow:a<=o?o+h:o,endRow:l+h}},_={unitId:e,subUnitId:t,range:s};return u.push({id:F.id,params:C}),m.push({id:F.id,params:_}),{redos:N(u),undos:N(m)}}handleRemoveColCommand(n,e,t){var w;const r=this._sheetsFilterService.getFilterModel(e,t),s=(w=r==null?void 0:r.getRange())!=null?w:null;if(!r||!s)return this._handleNull();const{startColumn:o,endColumn:l}=s,{startColumn:a,endColumn:d}=n;if(a>l)return this._handleNull();const h=[],u=[],m=d<o?0:Math.min(d,l)-Math.max(a,o)+1,C=d-a+1,_=r.getAllFilterColumns();_.forEach(f=>{const[g,E]=f;g<=d&&g>=a&&(h.push({id:v.id,params:{unitId:e,subUnitId:t,col:g,criteria:null}}),u.push({id:v.id,params:{unitId:e,subUnitId:t,col:g,criteria:{...E.serialize(),colId:g}}}))});const p=_.filter(f=>{const[g,E]=f;return g>d});let M={undos:[],redos:[]};if(p.length>0){const{oldRange:f,newRange:g}=this._moveCriteria(e,t,p,-C);M=g,h.push(...f.redos),u.unshift(...f.undos)}if(m===l-o+1){const f={unitId:e,subUnitId:t};h.push({id:I.id,params:f}),u.unshift({id:F.id,params:{range:s,unitId:e,subUnitId:t}})}else{const f=o<=a?o:m===0?o-C:a,g=o<=a?l-m:l-C,E={unitId:e,subUnitId:t,range:{...s,startColumn:f,endColumn:g}};h.push({id:F.id,params:E}),u.unshift({id:F.id,params:{range:s,unitId:e,subUnitId:t}}),h.push(...M.redos),u.unshift(...M.undos)}return{undos:u,redos:h}}_handleRemoveRowCommand(n,e,t){var p;const r=this._sheetsFilterService.getFilterModel(e,t);if(!r)return this._handleNull();const s=r.getRange(),{startRow:o,endRow:l}=s,{startRow:a,endRow:d}=n.range;if(a>l)return this._handleNull();if(d<o)return{undos:[{id:F.id,params:{range:s,unitId:e,subUnitId:t}}],redos:[{id:F.id,params:{range:{...s,startRow:o-(d-a+1),endRow:l-(d-a+1)},unitId:e,subUnitId:t}}]};const h=[],u=[],m=r.getAllFilterColumns(),C=o<=d&&o>=a;u.push({id:F.id,params:{range:s,unitId:e,subUnitId:t}});const _=Math.min(d,l)-Math.max(a,o)+1;if(_===l-o+1||C){const M={unitId:e,subUnitId:t};h.push({id:I.id,params:M}),m.forEach(w=>{const[f,g]=w,E={unitId:e,subUnitId:t,col:f,criteria:{...g.serialize(),colId:f}};u.push({id:v.id,params:E})})}else{const M=(p=this._univerInstanceService.getUniverSheetInstance(e))==null?void 0:p.getSheetBySheetId(t);if(!M)return this._handleNull();const w=[];for(let y=a;y<=d;y++)M.getRowFiltered(y)&&w.push(y);const f=Math.min(o,a),g=f+(l-o)-_+w.length,E={unitId:e,subUnitId:t,range:{...s,startRow:f,endRow:g}};h.push({id:F.id,params:E})}return{undos:N(u),redos:N(h)}}handleMoveColsCommand({fromRange:n,toRange:e},t,r){var w;const s=this._sheetsFilterService.getFilterModel(t,r),o=(w=s==null?void 0:s.getRange())!=null?w:null;if(!s||!o)return this._handleNull();const{startColumn:l,endColumn:a}=o;if(n.endColumn<l&&e.startColumn<=l||n.startColumn>a&&e.endColumn>a)return this._handleNull();const d=[],h=[],u={};for(let f=l;f<=a;f++)u[f]={colIndex:f,filter:s.getFilterColumn(f)};c.moveMatrixArray(n.startColumn,n.endColumn-n.startColumn+1,e.startColumn,u);let m=o.startColumn,C=o.endColumn;l>=n.startColumn&&l<=n.endColumn&&e.startColumn>n.startColumn&&n.endColumn<a&&(m=n.endColumn+1),a>=n.startColumn&&a<=n.endColumn&&e.startColumn<n.startColumn&&n.startColumn>l&&(C=n.startColumn-1);const _=Object.keys(u).map(f=>Number(f)),p=_.find(f=>u[f].colIndex===C),M=_.find(f=>u[f].colIndex===m);if(_.forEach(f=>{var Q,J;const{colIndex:g,filter:E}=u[f],y=f;if(E){if(y>=M&&y<=p){const j={unitId:t,subUnitId:r,col:y,criteria:{...E.serialize(),colId:y}},_e={unitId:t,subUnitId:r,col:y,criteria:s.getFilterColumn(y)?{...(Q=s.getFilterColumn(y))==null?void 0:Q.serialize(),colId:y}:null};d.push({id:v.id,params:j}),h.push({id:v.id,params:_e})}if(!((J=u[g])!=null&&J.filter)){const j={unitId:t,subUnitId:r,col:g,criteria:null};d.push({id:v.id,params:j}),h.push({id:v.id,params:{unitId:t,subUnitId:r,col:g,criteria:{...E.serialize(),colId:g}}})}}}),l!==M||a!==p){const f={unitId:t,subUnitId:r,range:{...o,startColumn:M,endColumn:p}};d.unshift({id:F.id,params:f}),h.unshift({id:F.id,params:{range:o,unitId:t,subUnitId:r}})}return{undos:h,redos:d}}_handleMoveRowsCommand(n,e,t){var f;const r=this._sheetsFilterService.getFilterModel(e,t),s=(f=r==null?void 0:r.getRange())!=null?f:null;if(!r||!s)return this._handleNull();const{startRow:o,endRow:l}=s,{fromRange:a,toRange:d}=n;if(a.endRow<o&&d.startRow<=o||a.startRow>l&&d.endRow>l)return this._handleNull();const h=[],u=[],m={};for(let g=o;g<=l;g++)m[g]={oldIndex:g};const C=o;let _=l;l>=a.startRow&&l<=a.endRow&&d.startRow<a.startRow&&a.startRow>o&&(_=a.startRow-1),c.moveMatrixArray(a.startRow,a.endRow-a.startRow+1,d.startRow,m);const p=Object.keys(m).map(g=>Number(g)),M=p.find(g=>m[g].oldIndex===_),w=p.find(g=>m[g].oldIndex===C);if(o!==w||l!==M){const g={unitId:e,subUnitId:t,range:{...s,startRow:w,endRow:M}};h.push({id:F.id,params:g},{id:x.id,params:{unitId:e,subUnitId:t}}),u.push({id:F.id,params:{range:s,unitId:e,subUnitId:t}},{id:x.id,params:{unitId:e,subUnitId:t}})}return{redos:h,undos:u}}_handleMoveRangeCommand(n,e,t){const{fromRange:r,toRange:s}=n,o=this._sheetsFilterService.getFilterModel(e,t);if(!o)return this._handleNull();const l=o.getRange();if(!l)return this._handleNull();const a=[],d=[];if(c.Rectangle.contains(r,l)){const h=l.startRow-r.startRow,u=l.startColumn-r.startColumn,m={startRow:s.startRow+h,startColumn:s.startColumn+u,endRow:s.startRow+h+(l.endRow-l.startRow),endColumn:s.startColumn+u+(l.endColumn-l.startColumn)},C={id:I.id,params:{unitId:e,subUnitId:t}},_={id:F.id,params:{unitId:e,subUnitId:t,range:m}},p={id:F.id,params:{unitId:e,subUnitId:t,range:l}};a.push(C,_),d.push(C,p);const M=o.getAllFilterColumns(),w=s.startColumn-r.startColumn;M.forEach(f=>{const[g,E]=f;E&&(a.push({id:v.id,params:{unitId:e,subUnitId:t,col:g+w,criteria:{...E.serialize(),colId:g+w}}}),d.push({id:v.id,params:{unitId:e,subUnitId:t,col:g,criteria:{...E.serialize(),colId:g}}}))})}else if(c.Rectangle.intersects(s,l)){const h={...l,endRow:Math.max(l.endRow,s.endRow)};a.push({id:F.id,params:{unitId:e,subUnitId:t,range:h}}),d.push({id:F.id,params:{unitId:e,subUnitId:t,range:l}})}return{redos:a,undos:d}}_handleRemoveSheetCommand(n,e,t){const r=this._sheetsFilterService.getFilterModel(e,t);if(!r)return this._handleNull();const s=r.getRange();if(!s)return this._handleNull();const o=[],l=[];return r.getAllFilterColumns().forEach(([d,h])=>{l.push({id:v.id,params:{unitId:e,subUnitId:t,col:d,criteria:{...h.serialize(),colId:d}}})}),o.push({id:I.id,params:{unitId:e,subUnitId:t,range:s}}),l.unshift({id:F.id,params:{range:s,unitId:e,subUnitId:t}}),{undos:l,redos:o}}_handleCopySheetCommand(n,e,t){const r=this._sheetsFilterService.getFilterModel(n,e);if(!r)return this._handleNull();const s=r.getRange();if(!s)return this._handleNull();const o=[],l=[],a=[],d=[];return r.getAllFilterColumns().forEach(([u,m])=>{o.push({id:v.id,params:{unitId:n,subUnitId:t,col:u,criteria:{...m.serialize(),colId:u}}}),a.push({id:v.id,params:{unitId:n,subUnitId:t,col:u,criteria:null}})}),a.push({id:I.id,params:{unitId:n,subUnitId:t,range:s}}),o.unshift({id:F.id,params:{range:s,unitId:n,subUnitId:t}}),{undos:l,redos:o,preUndos:a,preRedos:d}}_handleNull(){return{redos:[],undos:[]}}_initRowFilteredInterceptor(){this.disposeWithMe(this._sheetInterceptorService.intercept(S.INTERCEPTOR_POINT.ROW_FILTERED,{handler:(n,e)=>{var t,r;return n?!0:(r=(t=this._sheetsFilterService.getFilterModel(e.unitId,e.subUnitId))==null?void 0:t.isRowFiltered(e.row))!=null?r:!1}}))}_moveCriteria(n,e,t,r){const s={unitId:n,subUnitId:e,criteria:null,col:-1},o=[],l=[],a=[],d=[];return t.forEach(h=>{const[u,m]=h;l.push({id:v.id,params:{...s,col:u}}),o.push({id:v.id,params:{...s,col:u,criteria:{...m.serialize(),colId:u}}})}),t.forEach(h=>{const[u,m]=h;d.push({id:v.id,params:{...s,col:u+r,criteria:{...m.serialize(),colId:u+r}}}),a.push({id:v.id,params:{...s,col:u+r,criteria:null}})}),{newRange:{redos:d,undos:a},oldRange:{redos:l,undos:o}}}_commandExecutedListener(){this.disposeWithMe(this._commandService.onCommandExecuted((n,e)=>{var d,h;const{unitId:t,subUnitId:r}=n.params||{},s=this._sheetsFilterService.getFilterModel(t,r);if(!s)return;const o=Array.from(s.filteredOutRows).sort((u,m)=>u-m),l=[];let a=!1;if(n.id===S.RemoveRowMutation.id){const{startRow:u,endRow:m}=n.params.range,C=o.filter(_=>_>=u&&_<=m);o.forEach(_=>{if(_<u)l.push(_);else if(a=!0,_<=m){const p=Math.max(u,l.length?l[l.length-1]+1:u);l.push(p)}else l.push(_-(m-u+1-C.length))})}if(n.id===S.InsertRowMutation.id){const{startRow:u,endRow:m}=n.params.range;o.forEach(C=>{C>=u?(a=!0,l.push(C+(m-u+1))):l.push(C)})}if(a&&(s.filteredOutRows=new Set(l)),n.id===S.SetRangeValuesMutation.id&&!(e!=null&&e.onlyLocal)){const u=this._getExtendRegion(t,r);if(u){const m=n.params.cellValue;if(m)for(let C=u.startColumn;C<=u.endColumn;C++){const _=(d=m==null?void 0:m[u.startRow])==null?void 0:d[C];if(_&&this._cellHasValue(_)){const p=(h=this._univerInstanceService.getUnit(t))==null?void 0:h.getSheetBySheetId(r);if(p){const M=S.expandToContinuousRange(u,{down:!0},p),w=this._sheetsFilterService.getFilterModel(t,r),f=w.getRange();w.setRange({...f,endRow:M.endRow}),this._registerRefRange(t,r)}}}}}}))}_getExtendRegion(n,e){var a;const t=this._sheetsFilterService.getFilterModel(n,e);if(!t)return null;const r=(a=this._univerInstanceService.getUnit(n))==null?void 0:a.getSheetBySheetId(e);if(!r)return null;const s=t.getRange();if(!s)return null;const o=r.getRowCount()-1,l=r.getRowManager();for(let d=s.endRow+1;d<=o;d++)if(l.getRowRawVisible(d))return{startRow:d,endRow:d,startColumn:s.startColumn,endColumn:s.endColumn};return null}_initErrorHandling(){this.disposeWithMe(this._commandService.beforeCommandExecuted(n=>{const e=n.params,t=S.getSheetCommandTarget(this._univerInstanceService);if(!t)return;const{subUnitId:r,unitId:s}=t,o=this._sheetsFilterService.getFilterModel(s,r);if(!o)return;const l=o.getRange();if(n.id===S.MoveRowsCommand.id&&e.fromRange.startRow<=l.startRow&&e.fromRange.endRow<l.endRow&&e.fromRange.endRow>=l.startRow)throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"),new Error("[SheetsFilterController]: Cannot move header row of filter")}))}_cellHasValue(n){const e=Object.values(n);return!(e.length===0||e.every(t=>t==null))}};L=ke([b(0,c.ICommandService),b(1,c.Inject(S.SheetInterceptorService)),b(2,c.Inject(exports.SheetsFilterService)),b(3,c.IUniverInstanceService),b(4,c.Inject(S.RefRangeService)),b(5,c.Optional(ve.DataSyncPrimaryController)),b(6,c.Inject(S.ZebraCrossingCacheController))],L);var Ge=Object.getOwnPropertyDescriptor,Qe=(i,n,e,t)=>{for(var r=t>1?void 0:t?Ge(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},V=(i,n)=>(e,t)=>n(e,t,i);const Je=[v.id,x.id],Ke=[S.InsertColMutation.id,S.RemoveColMutation.id,S.MoveColsMutation.id];exports.SheetsFilterSyncController=class extends c.Disposable{constructor(e,t,r){super();R(this,"_d",new c.DisposableCollection);R(this,"_visible$",new O.BehaviorSubject(!1));R(this,"visible$",this._visible$.asObservable());R(this,"_enabled$",new O.BehaviorSubject(!0));R(this,"enabled$",this._enabled$.asObservable());this._sheetsFilterController=e,this._commandService=t,this._configService=r;const s=this._configService.getConfig(Ce);s!=null&&s.enableSyncSwitch&&this._visible$.next(!0)}get visible(){return this._visible$.getValue()}get enabled(){return this._enabled$.getValue()}setEnabled(e){this._enabled$.next(e),e?this._d.dispose():this._initOnlyLocalListener()}_initOnlyLocalListener(){this._d.add(this._commandService.beforeCommandExecuted((e,t)=>{Je.includes(e.id)&&(t||(t={}),t.onlyLocal=!0)})),this._d.add(this._commandService.onCommandExecuted((e,t)=>{if(Ke.includes(e.id)&&(t!=null&&t.fromCollab)){if(e.id===S.InsertColMutation.id){const{range:r,unitId:s,subUnitId:o}=e.params,{redos:l}=this._sheetsFilterController.handleInsertColCommand(r,s,o);c.sequenceExecute(l,this._commandService,t)}else if(e.id===S.RemoveColMutation.id){const{range:r,unitId:s,subUnitId:o}=e.params,{redos:l}=this._sheetsFilterController.handleRemoveColCommand(r,s,o);c.sequenceExecute(l,this._commandService,t)}else if(e.id===S.MoveColsMutation.id){const{sourceRange:r,targetRange:s,unitId:o,subUnitId:l}=e.params,{redos:a}=this._sheetsFilterController.handleMoveColsCommand({fromRange:r,toRange:s},o,l);c.sequenceExecute(a,this._commandService,t)}}}))}};exports.SheetsFilterSyncController=Qe([V(0,c.Inject(L)),V(1,c.ICommandService),V(2,c.IConfigService)],exports.SheetsFilterSyncController);var Ze=Object.getOwnPropertyDescriptor,Xe=(i,n,e,t)=>{for(var r=t>1?void 0:t?Ze(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},P=(i,n)=>(e,t)=>n(e,t,i);let B=class extends c.Disposable{constructor(i,n,e,t){super(),this._activeDirtyManagerService=i,this._sheetRowFilteredService=n,this._sheetsFilterService=e,this._univerInstanceService=t,this._initFormulaDirtyRange(),this._registerSheetRowFiltered()}_initFormulaDirtyRange(){q.forEach(i=>{this._activeDirtyManagerService.register(i,{commandId:i,getDirtyData:n=>{const e=n.params,{unitId:t,subUnitId:r}=e;return{dirtyRanges:this._getHideRowMutation(t,r),clearDependencyTreeCache:{[t]:{[r]:"1"}}}}})})}_getHideRowMutation(i,n){var l,a;const e=(l=this._sheetsFilterService.getFilterModel(i,n))==null?void 0:l.getRange(),t=(a=this._univerInstanceService.getUnit(i))==null?void 0:a.getSheetBySheetId(n);if(e==null||t==null)return[];const{startRow:r,endRow:s}=e;return[{unitId:i,sheetId:n,range:{startRow:r,startColumn:0,endRow:s,endColumn:t.getColumnCount()-1}}]}_registerSheetRowFiltered(){this._sheetRowFilteredService.register((i,n,e)=>{var t,r;return(r=(t=this._sheetsFilterService.getFilterModel(i,n))==null?void 0:t.isRowFiltered(e))!=null?r:!1})}};B=Xe([P(0,c.Inject(K.IActiveDirtyManagerService)),P(1,c.Inject(K.ISheetRowFilteredService)),P(2,c.Inject(exports.SheetsFilterService)),P(3,c.IUniverInstanceService)],B);var Ye=Object.getOwnPropertyDescriptor,et=(i,n,e,t)=>{for(var r=t>1?void 0:t?Ye(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},ee=(i,n)=>(e,t)=>n(e,t,i),D;exports.UniverSheetsFilterPlugin=(D=class extends c.Plugin{constructor(n=Y,e,t){super(),this._config=n,this._injector=e,this._configService=t;const{...r}=c.merge({},Y,this._config);this._configService.setConfig(Ce,r)}onStarting(){[[B],[exports.SheetsFilterService],[L],[exports.SheetsFilterSyncController]].forEach(n=>this._injector.add(n))}onReady(){c.touchDependencies(this._injector,[[B],[L],[exports.SheetsFilterSyncController]])}},R(D,"type",c.UniverInstanceType.UNIVER_SHEET),R(D,"pluginName",G),D);exports.UniverSheetsFilterPlugin=et([ee(1,c.Inject(c.Injector)),ee(2,c.IConfigService)],exports.UniverSheetsFilterPlugin);exports.ClearSheetsFilterCriteriaCommand=Be;exports.CustomFilterOperator=T;exports.FILTER_MUTATIONS=q;exports.FilterBy=A;exports.FilterColumn=he;exports.FilterModel=$;exports.ReCalcSheetsFilterCommand=je;exports.ReCalcSheetsFilterMutation=x;exports.RemoveSheetFilterCommand=fe;exports.RemoveSheetsFilterMutation=I;exports.SHEET_FILTER_SNAPSHOT_ID=G;exports.SetSheetFilterRangeCommand=me;exports.SetSheetsFilterCriteriaCommand=De;exports.SetSheetsFilterCriteriaMutation=v;exports.SetSheetsFilterRangeMutation=F;exports.SmartToggleSheetsFilterCommand=Pe;exports.equals=ce;exports.getCustomFilterFn=W;exports.greaterThan=se;exports.greaterThanOrEqualTo=oe;exports.lessThan=le;exports.lessThanOrEqualTo=ae;exports.notEquals=k;
package/lib/es/index.js CHANGED
@@ -1,60 +1,60 @@
1
1
  var be = Object.defineProperty;
2
2
  var $e = (i, t, e) => t in i ? be(i, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[t] = e;
3
3
  var C = (i, t, e) => $e(i, typeof t != "symbol" ? t + "" : t, e);
4
- import { isNumeric as Le, Disposable as U, Rectangle as te, mergeSets as K, Tools as ie, extractPureTextFromCell as Ue, CellValueType as k, ColorKit as se, UniverInstanceType as D, fromCallback as Pe, CommandType as O, IResourceManagerService as De, IUniverInstanceService as T, ICommandService as N, IUndoRedoService as J, sequenceExecute as j, ErrorService as Be, LocaleService as ze, Inject as A, Optional as He, DisposableCollection as me, moveMatrixArray as oe, IConfigService as ge, Plugin as Ve, merge as We, touchDependencies as je, Injector as ke } from "@univerjs/core";
5
- import { getSheetCommandTarget as H, SheetsSelectionsService as qe, isSingleCellSelection as Ge, expandToContinuousRange as _e, SheetInterceptorService as Qe, RefRangeService as Je, ZebraCrossingCacheController as Ze, SetWorksheetActiveOperation as Ke, CopySheetCommand as Ye, RemoveSheetCommand as Xe, INTERCEPTOR_POINT as et, RemoveRowMutation as tt, InsertRowMutation as rt, SetRangeValuesMutation as nt, MoveRowsCommand as it, MoveRangeCommand as st, EffectRefRangId as le, RemoveRowCommand as ot, RemoveColCommand as lt, InsertColCommand as at, InsertRowCommand as ct, InsertColMutation as Ce, RemoveColMutation as Re, MoveColsMutation as pe } from "@univerjs/sheets";
4
+ import { createREGEXFromWildChar as me, isNumeric as Le, Disposable as U, Rectangle as te, mergeSets as K, Tools as ie, extractPureTextFromCell as Ue, CellValueType as k, ColorKit as se, UniverInstanceType as D, fromCallback as Pe, CommandType as O, IResourceManagerService as De, IUniverInstanceService as T, ICommandService as N, IUndoRedoService as J, sequenceExecute as j, ErrorService as Be, LocaleService as ze, Inject as A, Optional as He, DisposableCollection as ge, moveMatrixArray as oe, IConfigService as _e, Plugin as Ve, merge as We, touchDependencies as je, Injector as ke } from "@univerjs/core";
5
+ import { getSheetCommandTarget as H, SheetsSelectionsService as qe, isSingleCellSelection as Ge, expandToContinuousRange as Ce, SheetInterceptorService as Qe, RefRangeService as Je, ZebraCrossingCacheController as Ze, SetWorksheetActiveOperation as Ke, CopySheetCommand as Ye, RemoveSheetCommand as Xe, INTERCEPTOR_POINT as et, RemoveRowMutation as tt, InsertRowMutation as rt, SetRangeValuesMutation as nt, MoveRowsCommand as it, MoveRangeCommand as st, EffectRefRangId as le, RemoveRowCommand as ot, RemoveColCommand as lt, InsertColCommand as at, InsertRowCommand as ct, InsertColMutation as Re, RemoveColMutation as pe, MoveColsMutation as Se } from "@univerjs/sheets";
6
6
  import { BehaviorSubject as $, merge as dt, filter as ut, switchMap as ht, of as ft } from "rxjs";
7
7
  import { COLOR_BLACK_RGB as mt } from "@univerjs/engine-render";
8
8
  import { DataSyncPrimaryController as gt } from "@univerjs/rpc";
9
9
  import { IActiveDirtyManagerService as _t, ISheetRowFilteredService as Ct } from "@univerjs/engine-formula";
10
- const Se = "sheet.mutation.set-filter-range", Fe = "sheet.mutation.set-filter-criteria", we = "sheet.mutation.remove-filter", ve = "sheet.mutation.re-calc-filter", Me = /* @__PURE__ */ new Set([
11
- Se,
10
+ const Fe = "sheet.mutation.set-filter-range", we = "sheet.mutation.set-filter-criteria", ve = "sheet.mutation.remove-filter", Me = "sheet.mutation.re-calc-filter", Ee = /* @__PURE__ */ new Set([
12
11
  Fe,
13
12
  we,
14
- ve
13
+ ve,
14
+ Me
15
15
  ]);
16
- var b = /* @__PURE__ */ ((i) => (i[i.VALUES = 0] = "VALUES", i[i.COLORS = 1] = "COLORS", i[i.CONDITIONS = 2] = "CONDITIONS", i))(b || {}), x = /* @__PURE__ */ ((i) => (i.EQUAL = "equal", i.GREATER_THAN = "greaterThan", i.GREATER_THAN_OR_EQUAL = "greaterThanOrEqual", i.LESS_THAN = "lessThan", i.LESS_THAN_OR_EQUAL = "lessThanOrEqual", i.NOT_EQUALS = "notEqual", i))(x || {});
16
+ var b = /* @__PURE__ */ ((i) => (i[i.VALUES = 0] = "VALUES", i[i.COLORS = 1] = "COLORS", i[i.CONDITIONS = 2] = "CONDITIONS", i))(b || {}), I = /* @__PURE__ */ ((i) => (i.EQUAL = "equal", i.GREATER_THAN = "greaterThan", i.GREATER_THAN_OR_EQUAL = "greaterThanOrEqual", i.LESS_THAN = "lessThan", i.LESS_THAN_OR_EQUAL = "lessThanOrEqual", i.NOT_EQUALS = "notEqual", i))(I || {});
17
17
  const Rt = {
18
- operator: x.GREATER_THAN,
18
+ operator: I.GREATER_THAN,
19
19
  fn: (i, t) => P(i) ? i > t : !1
20
20
  }, pt = {
21
- operator: x.GREATER_THAN_OR_EQUAL,
21
+ operator: I.GREATER_THAN_OR_EQUAL,
22
22
  fn: (i, t) => P(i) ? i >= t : !1
23
23
  }, St = {
24
- operator: x.LESS_THAN,
24
+ operator: I.LESS_THAN,
25
25
  fn: (i, t) => P(i) ? i < t : !1
26
26
  }, Ft = {
27
- operator: x.LESS_THAN_OR_EQUAL,
27
+ operator: I.LESS_THAN_OR_EQUAL,
28
28
  fn: (i, t) => P(i) ? i <= t : !1
29
29
  }, wt = {
30
- operator: x.EQUAL,
30
+ operator: I.EQUAL,
31
31
  fn: (i, t) => P(i) ? i === t : !1
32
- }, Ee = {
33
- operator: x.NOT_EQUALS,
32
+ }, Oe = {
33
+ operator: I.NOT_EQUALS,
34
34
  fn: (i, t) => {
35
35
  if (typeof t == "string") {
36
36
  if (t === " ")
37
37
  return i != null;
38
- const e = ye(i);
39
- return e && Ot(t) ? !Ae(t).test(e) : e !== t;
38
+ const e = Ae(i);
39
+ return e && Ot(t) ? !me(t).test(e) : e !== t;
40
40
  }
41
41
  return P(i) ? i !== t : !0;
42
42
  }
43
- }, Oe = /* @__PURE__ */ new Map([]), vt = [Rt, pt, St, Ft, wt, Ee];
43
+ }, ye = /* @__PURE__ */ new Map([]), vt = [Rt, pt, St, Ft, wt, Oe];
44
44
  vt.forEach((i) => {
45
- Oe.set(i.operator, i);
45
+ ye.set(i.operator, i);
46
46
  });
47
47
  function Mt(i) {
48
48
  return !!i;
49
49
  }
50
50
  const Et = {
51
51
  fn: (i, t) => {
52
- const e = ye(i);
53
- return e === null ? t === "" : Ae(t).test(e);
52
+ const e = Ae(i);
53
+ return e === null ? t === "" : me(t).test(e);
54
54
  }
55
55
  };
56
56
  function ae(i) {
57
- return i ? Oe.get(i) : Et;
57
+ return i ? ye.get(i) : Et;
58
58
  }
59
59
  function P(i) {
60
60
  return typeof i == "number";
@@ -62,16 +62,12 @@ function P(i) {
62
62
  function ce(i) {
63
63
  return !!(typeof i == "number" || typeof i == "string" && Le(i));
64
64
  }
65
- function ye(i) {
65
+ function Ae(i) {
66
66
  return typeof i == "boolean" || i == null ? null : typeof i == "string" ? i : i.toString();
67
67
  }
68
68
  function Ot(i) {
69
69
  return typeof i == "number" ? !1 : i.indexOf("*") !== -1 || i.indexOf("?") !== -1;
70
70
  }
71
- function Ae(i) {
72
- const t = i.replace(/[.+^${}()|[\]\\]/g, "\\$&").replaceAll("?", ".").replace(/[*]/g, ".$&");
73
- return new RegExp(`^${t}$`);
74
- }
75
71
  const Y = () => /* @__PURE__ */ new Set();
76
72
  class q extends U {
77
73
  constructor(e, r, n) {
@@ -94,7 +90,7 @@ class q extends U {
94
90
  this._alreadyFilteredOutRows = e, this._filteredOutRows$.next(e);
95
91
  }
96
92
  dispose() {
97
- super.dispose(), this._filteredOutRows$.complete(), this._hasCriteria$.complete();
93
+ super.dispose(), this._filteredOutRows$.complete(), this._hasCriteria$.complete(), this._worksheet = null;
98
94
  }
99
95
  /**
100
96
  * Serialize this filter model to the JSON format representation.
@@ -305,7 +301,7 @@ function At(i) {
305
301
  if (i.colorFilters)
306
302
  return Tt(i.colorFilters);
307
303
  if (i.customFilters)
308
- return xt(i.customFilters);
304
+ return It(i.customFilters);
309
305
  throw new Error("[FilterModel]: other types of filters are not supported yet.");
310
306
  }
311
307
  function Nt(i) {
@@ -335,11 +331,11 @@ function Tt(i) {
335
331
  }
336
332
  throw new Error("[FilterModel]: color filters are not supported yet.");
337
333
  }
338
- function xt(i) {
334
+ function It(i) {
339
335
  const t = i.customFilters.map((e) => Lt(e));
340
- return $t(t) ? i.and ? It(t) : bt(t) : t[0];
336
+ return $t(t) ? i.and ? xt(t) : bt(t) : t[0];
341
337
  }
342
- function It(i) {
338
+ function xt(i) {
343
339
  const [t, e] = i;
344
340
  return (r) => t(r) && e(r);
345
341
  }
@@ -352,8 +348,8 @@ function $t(i) {
352
348
  }
353
349
  function Lt(i) {
354
350
  const t = i.val;
355
- if (i.operator === x.NOT_EQUALS && !ce(t))
356
- return (n) => Ee.fn(n, t);
351
+ if (i.operator === I.NOT_EQUALS && !ce(t))
352
+ return (n) => Oe.fn(n, t);
357
353
  if (Mt(i.operator)) {
358
354
  if (!ce(t)) return () => !1;
359
355
  const n = ae(i.operator), s = Number(t);
@@ -450,7 +446,7 @@ let M = class extends U {
450
446
  this.disposeWithMe(
451
447
  dt(
452
448
  // source1: executing filter related mutations
453
- Pe(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(ut(([t]) => t.type === O.MUTATION && Me.has(t.id))),
449
+ Pe(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(ut(([t]) => t.type === O.MUTATION && Ee.has(t.id))),
454
450
  // source2: activate sheet changes
455
451
  this._univerInstanceService.getCurrentTypeOfUnit$(D.UNIVER_SHEET).pipe(ht((t) => {
456
452
  var e;
@@ -475,6 +471,11 @@ let M = class extends U {
475
471
  this._cacheFilterModel(t, n, o);
476
472
  });
477
473
  }
474
+ dispose() {
475
+ super.dispose(), this._loadedUnitId$.complete(), this._errorMsg$.complete(), this._activeFilterModel$.complete(), this._filterModels.forEach((t) => {
476
+ t.forEach((e) => e.dispose()), t.clear();
477
+ }), this._filterModels.clear();
478
+ }
478
479
  _initModel() {
479
480
  this._resourcesManagerService.registerPluginResource({
480
481
  pluginName: Ne,
@@ -500,28 +501,28 @@ M = Dt([
500
501
  X(2, N)
501
502
  ], M);
502
503
  const R = {
503
- id: Se,
504
+ id: Fe,
504
505
  type: O.MUTATION,
505
506
  handler: (i, t) => {
506
507
  const { subUnitId: e, unitId: r, range: n } = t;
507
508
  return i.get(M).ensureFilterModel(r, e).setRange(n), !0;
508
509
  }
509
510
  }, p = {
510
- id: Fe,
511
+ id: we,
511
512
  type: O.MUTATION,
512
513
  handler: (i, t) => {
513
514
  const { subUnitId: e, unitId: r, criteria: n, col: s, reCalc: o = !0 } = t, a = i.get(M).getFilterModel(r, e);
514
515
  return a ? (a.setCriteria(s, n, o), !0) : !1;
515
516
  }
516
517
  }, y = {
517
- id: we,
518
+ id: ve,
518
519
  type: O.MUTATION,
519
520
  handler: (i, t) => {
520
521
  const { unitId: e, subUnitId: r } = t;
521
522
  return i.get(M).removeFilterModel(e, r);
522
523
  }
523
524
  }, B = {
524
- id: ve,
525
+ id: Me,
525
526
  type: O.MUTATION,
526
527
  handler: (i, t) => {
527
528
  const { unitId: e, subUnitId: r } = t, s = i.get(M).getFilterModel(e, r);
@@ -570,7 +571,7 @@ const R = {
570
571
  return r.executeCommand(zt.id, { unitId: o, subUnitId: l });
571
572
  const u = i.get(qe).getCurrentLastSelection();
572
573
  if (!u) return !1;
573
- const d = u.range, h = Ge(u) ? _e(d, { left: !0, right: !0, up: !0, down: !0 }, s) : d;
574
+ const d = u.range, h = Ge(u) ? Ce(d, { left: !0, right: !0, up: !0, down: !0 }, s) : d;
574
575
  return r.executeCommand(Bt.id, {
575
576
  unitId: o,
576
577
  subUnitId: l,
@@ -690,7 +691,7 @@ function Wt(i, t, e, r) {
690
691
  }
691
692
  };
692
693
  }
693
- const xe = "sheets-filter.config", ue = {};
694
+ const Ie = "sheets-filter.config", ue = {};
694
695
  function jt(i, t) {
695
696
  for (let e = 0; e < i.length; e++) {
696
697
  let r = e;
@@ -707,11 +708,11 @@ var kt = Object.getOwnPropertyDescriptor, qt = (i, t, e, r) => {
707
708
  for (var n = r > 1 ? void 0 : r ? kt(t, e) : t, s = i.length - 1, o; s >= 0; s--)
708
709
  (o = i[s]) && (n = o(n) || n);
709
710
  return n;
710
- }, I = (i, t) => (e, r) => t(e, r, i);
711
+ }, x = (i, t) => (e, r) => t(e, r, i);
711
712
  let z = class extends U {
712
713
  constructor(t, e, r, n, s, o, l) {
713
714
  super();
714
- C(this, "_disposableCollection", new me());
715
+ C(this, "_disposableCollection", new ge());
715
716
  this._commandService = t, this._sheetInterceptorService = e, this._sheetsFilterService = r, this._univerInstanceService = n, this._refRangeService = s, this._dataSyncPrimaryController = o, this._zebraCrossingCacheController = l, this._initCommands(), this._initRowFilteredInterceptor(), this._initInterceptors(), this._commandExecutedListener(), this._initErrorHandling(), this._initZebraCrossingCacheListener();
716
717
  }
717
718
  _initZebraCrossingCacheListener() {
@@ -1008,13 +1009,13 @@ let z = class extends U {
1008
1009
  subUnitId: n,
1009
1010
  col: E,
1010
1011
  criteria: { ...v.serialize(), colId: E }
1011
- }, Ie = {
1012
+ }, xe = {
1012
1013
  unitId: r,
1013
1014
  subUnitId: n,
1014
1015
  col: E,
1015
1016
  criteria: s.getFilterColumn(E) ? { ...(re = s.getFilterColumn(E)) == null ? void 0 : re.serialize(), colId: E } : null
1016
1017
  };
1017
- c.push({ id: p.id, params: Z }), u.push({ id: p.id, params: Ie });
1018
+ c.push({ id: p.id, params: Z }), u.push({ id: p.id, params: xe });
1018
1019
  }
1019
1020
  if (!((ne = d[m]) != null && ne.filter)) {
1020
1021
  const Z = {
@@ -1249,7 +1250,7 @@ let z = class extends U {
1249
1250
  if (_ && this._cellHasValue(_)) {
1250
1251
  const S = (u = this._univerInstanceService.getUnit(r)) == null ? void 0 : u.getSheetBySheetId(n);
1251
1252
  if (S) {
1252
- const w = _e(d, { down: !0 }, S), F = this._sheetsFilterService.getFilterModel(r, n), f = F.getRange();
1253
+ const w = Ce(d, { down: !0 }, S), F = this._sheetsFilterService.getFilterModel(r, n), f = F.getRange();
1253
1254
  F.setRange({
1254
1255
  ...f,
1255
1256
  endRow: w.endRow
@@ -1300,13 +1301,13 @@ let z = class extends U {
1300
1301
  }
1301
1302
  };
1302
1303
  z = qt([
1303
- I(0, N),
1304
- I(1, A(Qe)),
1305
- I(2, A(M)),
1306
- I(3, T),
1307
- I(4, A(Je)),
1308
- I(5, He(gt)),
1309
- I(6, A(Ze))
1304
+ x(0, N),
1305
+ x(1, A(Qe)),
1306
+ x(2, A(M)),
1307
+ x(3, T),
1308
+ x(4, A(Je)),
1309
+ x(5, He(gt)),
1310
+ x(6, A(Ze))
1310
1311
  ], z);
1311
1312
  var Gt = Object.getOwnPropertyDescriptor, Qt = (i, t, e, r) => {
1312
1313
  for (var n = r > 1 ? void 0 : r ? Gt(t, e) : t, s = i.length - 1, o; s >= 0; s--)
@@ -1317,20 +1318,20 @@ const Jt = [
1317
1318
  p.id,
1318
1319
  B.id
1319
1320
  ], Zt = [
1320
- Ce.id,
1321
1321
  Re.id,
1322
- pe.id
1322
+ pe.id,
1323
+ Se.id
1323
1324
  ];
1324
1325
  let G = class extends U {
1325
1326
  constructor(t, e, r) {
1326
1327
  super();
1327
- C(this, "_d", new me());
1328
+ C(this, "_d", new ge());
1328
1329
  C(this, "_visible$", new $(!1));
1329
1330
  C(this, "visible$", this._visible$.asObservable());
1330
1331
  C(this, "_enabled$", new $(!0));
1331
1332
  C(this, "enabled$", this._enabled$.asObservable());
1332
1333
  this._sheetsFilterController = t, this._commandService = e, this._configService = r;
1333
- const n = this._configService.getConfig(xe);
1334
+ const n = this._configService.getConfig(Ie);
1334
1335
  n != null && n.enableSyncSwitch && this._visible$.next(!0);
1335
1336
  }
1336
1337
  get visible() {
@@ -1350,13 +1351,13 @@ let G = class extends U {
1350
1351
  ), this._d.add(
1351
1352
  this._commandService.onCommandExecuted((t, e) => {
1352
1353
  if (Zt.includes(t.id) && (e != null && e.fromCollab)) {
1353
- if (t.id === Ce.id) {
1354
+ if (t.id === Re.id) {
1354
1355
  const { range: r, unitId: n, subUnitId: s } = t.params, { redos: o } = this._sheetsFilterController.handleInsertColCommand(r, n, s);
1355
1356
  j(o, this._commandService, e);
1356
- } else if (t.id === Re.id) {
1357
+ } else if (t.id === pe.id) {
1357
1358
  const { range: r, unitId: n, subUnitId: s } = t.params, { redos: o } = this._sheetsFilterController.handleRemoveColCommand(r, n, s);
1358
1359
  j(o, this._commandService, e);
1359
- } else if (t.id === pe.id) {
1360
+ } else if (t.id === Se.id) {
1360
1361
  const { sourceRange: r, targetRange: n, unitId: s, subUnitId: o } = t.params, { redos: l } = this._sheetsFilterController.handleMoveColsCommand({ fromRange: r, toRange: n }, s, o);
1361
1362
  j(l, this._commandService, e);
1362
1363
  }
@@ -1368,7 +1369,7 @@ let G = class extends U {
1368
1369
  G = Qt([
1369
1370
  ee(0, A(z)),
1370
1371
  ee(1, N),
1371
- ee(2, ge)
1372
+ ee(2, _e)
1372
1373
  ], G);
1373
1374
  var Kt = Object.getOwnPropertyDescriptor, Yt = (i, t, e, r) => {
1374
1375
  for (var n = r > 1 ? void 0 : r ? Kt(t, e) : t, s = i.length - 1, o; s >= 0; s--)
@@ -1380,7 +1381,7 @@ let Q = class extends U {
1380
1381
  super(), this._activeDirtyManagerService = i, this._sheetRowFilteredService = t, this._sheetsFilterService = e, this._univerInstanceService = r, this._initFormulaDirtyRange(), this._registerSheetRowFiltered();
1381
1382
  }
1382
1383
  _initFormulaDirtyRange() {
1383
- Me.forEach((i) => {
1384
+ Ee.forEach((i) => {
1384
1385
  this._activeDirtyManagerService.register(
1385
1386
  i,
1386
1387
  {
@@ -1443,7 +1444,7 @@ let fe = (W = class extends Ve {
1443
1444
  ue,
1444
1445
  this._config
1445
1446
  );
1446
- this._configService.setConfig(xe, r);
1447
+ this._configService.setConfig(Ie, r);
1447
1448
  }
1448
1449
  onStarting() {
1449
1450
  [
@@ -1463,12 +1464,12 @@ let fe = (W = class extends Ve {
1463
1464
  }, C(W, "type", D.UNIVER_SHEET), C(W, "pluginName", Ne), W);
1464
1465
  fe = er([
1465
1466
  he(1, A(ke)),
1466
- he(2, ge)
1467
+ he(2, _e)
1467
1468
  ], fe);
1468
1469
  export {
1469
1470
  dr as ClearSheetsFilterCriteriaCommand,
1470
- x as CustomFilterOperator,
1471
- Me as FILTER_MUTATIONS,
1471
+ I as CustomFilterOperator,
1472
+ Ee as FILTER_MUTATIONS,
1472
1473
  b as FilterBy,
1473
1474
  yt as FilterColumn,
1474
1475
  q as FilterModel,
@@ -1491,5 +1492,5 @@ export {
1491
1492
  pt as greaterThanOrEqualTo,
1492
1493
  St as lessThan,
1493
1494
  Ft as lessThanOrEqualTo,
1494
- Ee as notEquals
1495
+ Oe as notEquals
1495
1496
  };
package/lib/index.js CHANGED
@@ -1,60 +1,60 @@
1
1
  var be = Object.defineProperty;
2
2
  var $e = (i, t, e) => t in i ? be(i, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[t] = e;
3
3
  var C = (i, t, e) => $e(i, typeof t != "symbol" ? t + "" : t, e);
4
- import { isNumeric as Le, Disposable as U, Rectangle as te, mergeSets as K, Tools as ie, extractPureTextFromCell as Ue, CellValueType as k, ColorKit as se, UniverInstanceType as D, fromCallback as Pe, CommandType as O, IResourceManagerService as De, IUniverInstanceService as T, ICommandService as N, IUndoRedoService as J, sequenceExecute as j, ErrorService as Be, LocaleService as ze, Inject as A, Optional as He, DisposableCollection as me, moveMatrixArray as oe, IConfigService as ge, Plugin as Ve, merge as We, touchDependencies as je, Injector as ke } from "@univerjs/core";
5
- import { getSheetCommandTarget as H, SheetsSelectionsService as qe, isSingleCellSelection as Ge, expandToContinuousRange as _e, SheetInterceptorService as Qe, RefRangeService as Je, ZebraCrossingCacheController as Ze, SetWorksheetActiveOperation as Ke, CopySheetCommand as Ye, RemoveSheetCommand as Xe, INTERCEPTOR_POINT as et, RemoveRowMutation as tt, InsertRowMutation as rt, SetRangeValuesMutation as nt, MoveRowsCommand as it, MoveRangeCommand as st, EffectRefRangId as le, RemoveRowCommand as ot, RemoveColCommand as lt, InsertColCommand as at, InsertRowCommand as ct, InsertColMutation as Ce, RemoveColMutation as Re, MoveColsMutation as pe } from "@univerjs/sheets";
4
+ import { createREGEXFromWildChar as me, isNumeric as Le, Disposable as U, Rectangle as te, mergeSets as K, Tools as ie, extractPureTextFromCell as Ue, CellValueType as k, ColorKit as se, UniverInstanceType as D, fromCallback as Pe, CommandType as O, IResourceManagerService as De, IUniverInstanceService as T, ICommandService as N, IUndoRedoService as J, sequenceExecute as j, ErrorService as Be, LocaleService as ze, Inject as A, Optional as He, DisposableCollection as ge, moveMatrixArray as oe, IConfigService as _e, Plugin as Ve, merge as We, touchDependencies as je, Injector as ke } from "@univerjs/core";
5
+ import { getSheetCommandTarget as H, SheetsSelectionsService as qe, isSingleCellSelection as Ge, expandToContinuousRange as Ce, SheetInterceptorService as Qe, RefRangeService as Je, ZebraCrossingCacheController as Ze, SetWorksheetActiveOperation as Ke, CopySheetCommand as Ye, RemoveSheetCommand as Xe, INTERCEPTOR_POINT as et, RemoveRowMutation as tt, InsertRowMutation as rt, SetRangeValuesMutation as nt, MoveRowsCommand as it, MoveRangeCommand as st, EffectRefRangId as le, RemoveRowCommand as ot, RemoveColCommand as lt, InsertColCommand as at, InsertRowCommand as ct, InsertColMutation as Re, RemoveColMutation as pe, MoveColsMutation as Se } from "@univerjs/sheets";
6
6
  import { BehaviorSubject as $, merge as dt, filter as ut, switchMap as ht, of as ft } from "rxjs";
7
7
  import { COLOR_BLACK_RGB as mt } from "@univerjs/engine-render";
8
8
  import { DataSyncPrimaryController as gt } from "@univerjs/rpc";
9
9
  import { IActiveDirtyManagerService as _t, ISheetRowFilteredService as Ct } from "@univerjs/engine-formula";
10
- const Se = "sheet.mutation.set-filter-range", Fe = "sheet.mutation.set-filter-criteria", we = "sheet.mutation.remove-filter", ve = "sheet.mutation.re-calc-filter", Me = /* @__PURE__ */ new Set([
11
- Se,
10
+ const Fe = "sheet.mutation.set-filter-range", we = "sheet.mutation.set-filter-criteria", ve = "sheet.mutation.remove-filter", Me = "sheet.mutation.re-calc-filter", Ee = /* @__PURE__ */ new Set([
12
11
  Fe,
13
12
  we,
14
- ve
13
+ ve,
14
+ Me
15
15
  ]);
16
- var b = /* @__PURE__ */ ((i) => (i[i.VALUES = 0] = "VALUES", i[i.COLORS = 1] = "COLORS", i[i.CONDITIONS = 2] = "CONDITIONS", i))(b || {}), x = /* @__PURE__ */ ((i) => (i.EQUAL = "equal", i.GREATER_THAN = "greaterThan", i.GREATER_THAN_OR_EQUAL = "greaterThanOrEqual", i.LESS_THAN = "lessThan", i.LESS_THAN_OR_EQUAL = "lessThanOrEqual", i.NOT_EQUALS = "notEqual", i))(x || {});
16
+ var b = /* @__PURE__ */ ((i) => (i[i.VALUES = 0] = "VALUES", i[i.COLORS = 1] = "COLORS", i[i.CONDITIONS = 2] = "CONDITIONS", i))(b || {}), I = /* @__PURE__ */ ((i) => (i.EQUAL = "equal", i.GREATER_THAN = "greaterThan", i.GREATER_THAN_OR_EQUAL = "greaterThanOrEqual", i.LESS_THAN = "lessThan", i.LESS_THAN_OR_EQUAL = "lessThanOrEqual", i.NOT_EQUALS = "notEqual", i))(I || {});
17
17
  const Rt = {
18
- operator: x.GREATER_THAN,
18
+ operator: I.GREATER_THAN,
19
19
  fn: (i, t) => P(i) ? i > t : !1
20
20
  }, pt = {
21
- operator: x.GREATER_THAN_OR_EQUAL,
21
+ operator: I.GREATER_THAN_OR_EQUAL,
22
22
  fn: (i, t) => P(i) ? i >= t : !1
23
23
  }, St = {
24
- operator: x.LESS_THAN,
24
+ operator: I.LESS_THAN,
25
25
  fn: (i, t) => P(i) ? i < t : !1
26
26
  }, Ft = {
27
- operator: x.LESS_THAN_OR_EQUAL,
27
+ operator: I.LESS_THAN_OR_EQUAL,
28
28
  fn: (i, t) => P(i) ? i <= t : !1
29
29
  }, wt = {
30
- operator: x.EQUAL,
30
+ operator: I.EQUAL,
31
31
  fn: (i, t) => P(i) ? i === t : !1
32
- }, Ee = {
33
- operator: x.NOT_EQUALS,
32
+ }, Oe = {
33
+ operator: I.NOT_EQUALS,
34
34
  fn: (i, t) => {
35
35
  if (typeof t == "string") {
36
36
  if (t === " ")
37
37
  return i != null;
38
- const e = ye(i);
39
- return e && Ot(t) ? !Ae(t).test(e) : e !== t;
38
+ const e = Ae(i);
39
+ return e && Ot(t) ? !me(t).test(e) : e !== t;
40
40
  }
41
41
  return P(i) ? i !== t : !0;
42
42
  }
43
- }, Oe = /* @__PURE__ */ new Map([]), vt = [Rt, pt, St, Ft, wt, Ee];
43
+ }, ye = /* @__PURE__ */ new Map([]), vt = [Rt, pt, St, Ft, wt, Oe];
44
44
  vt.forEach((i) => {
45
- Oe.set(i.operator, i);
45
+ ye.set(i.operator, i);
46
46
  });
47
47
  function Mt(i) {
48
48
  return !!i;
49
49
  }
50
50
  const Et = {
51
51
  fn: (i, t) => {
52
- const e = ye(i);
53
- return e === null ? t === "" : Ae(t).test(e);
52
+ const e = Ae(i);
53
+ return e === null ? t === "" : me(t).test(e);
54
54
  }
55
55
  };
56
56
  function ae(i) {
57
- return i ? Oe.get(i) : Et;
57
+ return i ? ye.get(i) : Et;
58
58
  }
59
59
  function P(i) {
60
60
  return typeof i == "number";
@@ -62,16 +62,12 @@ function P(i) {
62
62
  function ce(i) {
63
63
  return !!(typeof i == "number" || typeof i == "string" && Le(i));
64
64
  }
65
- function ye(i) {
65
+ function Ae(i) {
66
66
  return typeof i == "boolean" || i == null ? null : typeof i == "string" ? i : i.toString();
67
67
  }
68
68
  function Ot(i) {
69
69
  return typeof i == "number" ? !1 : i.indexOf("*") !== -1 || i.indexOf("?") !== -1;
70
70
  }
71
- function Ae(i) {
72
- const t = i.replace(/[.+^${}()|[\]\\]/g, "\\$&").replaceAll("?", ".").replace(/[*]/g, ".$&");
73
- return new RegExp(`^${t}$`);
74
- }
75
71
  const Y = () => /* @__PURE__ */ new Set();
76
72
  class q extends U {
77
73
  constructor(e, r, n) {
@@ -94,7 +90,7 @@ class q extends U {
94
90
  this._alreadyFilteredOutRows = e, this._filteredOutRows$.next(e);
95
91
  }
96
92
  dispose() {
97
- super.dispose(), this._filteredOutRows$.complete(), this._hasCriteria$.complete();
93
+ super.dispose(), this._filteredOutRows$.complete(), this._hasCriteria$.complete(), this._worksheet = null;
98
94
  }
99
95
  /**
100
96
  * Serialize this filter model to the JSON format representation.
@@ -305,7 +301,7 @@ function At(i) {
305
301
  if (i.colorFilters)
306
302
  return Tt(i.colorFilters);
307
303
  if (i.customFilters)
308
- return xt(i.customFilters);
304
+ return It(i.customFilters);
309
305
  throw new Error("[FilterModel]: other types of filters are not supported yet.");
310
306
  }
311
307
  function Nt(i) {
@@ -335,11 +331,11 @@ function Tt(i) {
335
331
  }
336
332
  throw new Error("[FilterModel]: color filters are not supported yet.");
337
333
  }
338
- function xt(i) {
334
+ function It(i) {
339
335
  const t = i.customFilters.map((e) => Lt(e));
340
- return $t(t) ? i.and ? It(t) : bt(t) : t[0];
336
+ return $t(t) ? i.and ? xt(t) : bt(t) : t[0];
341
337
  }
342
- function It(i) {
338
+ function xt(i) {
343
339
  const [t, e] = i;
344
340
  return (r) => t(r) && e(r);
345
341
  }
@@ -352,8 +348,8 @@ function $t(i) {
352
348
  }
353
349
  function Lt(i) {
354
350
  const t = i.val;
355
- if (i.operator === x.NOT_EQUALS && !ce(t))
356
- return (n) => Ee.fn(n, t);
351
+ if (i.operator === I.NOT_EQUALS && !ce(t))
352
+ return (n) => Oe.fn(n, t);
357
353
  if (Mt(i.operator)) {
358
354
  if (!ce(t)) return () => !1;
359
355
  const n = ae(i.operator), s = Number(t);
@@ -450,7 +446,7 @@ let M = class extends U {
450
446
  this.disposeWithMe(
451
447
  dt(
452
448
  // source1: executing filter related mutations
453
- Pe(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(ut(([t]) => t.type === O.MUTATION && Me.has(t.id))),
449
+ Pe(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(ut(([t]) => t.type === O.MUTATION && Ee.has(t.id))),
454
450
  // source2: activate sheet changes
455
451
  this._univerInstanceService.getCurrentTypeOfUnit$(D.UNIVER_SHEET).pipe(ht((t) => {
456
452
  var e;
@@ -475,6 +471,11 @@ let M = class extends U {
475
471
  this._cacheFilterModel(t, n, o);
476
472
  });
477
473
  }
474
+ dispose() {
475
+ super.dispose(), this._loadedUnitId$.complete(), this._errorMsg$.complete(), this._activeFilterModel$.complete(), this._filterModels.forEach((t) => {
476
+ t.forEach((e) => e.dispose()), t.clear();
477
+ }), this._filterModels.clear();
478
+ }
478
479
  _initModel() {
479
480
  this._resourcesManagerService.registerPluginResource({
480
481
  pluginName: Ne,
@@ -500,28 +501,28 @@ M = Dt([
500
501
  X(2, N)
501
502
  ], M);
502
503
  const R = {
503
- id: Se,
504
+ id: Fe,
504
505
  type: O.MUTATION,
505
506
  handler: (i, t) => {
506
507
  const { subUnitId: e, unitId: r, range: n } = t;
507
508
  return i.get(M).ensureFilterModel(r, e).setRange(n), !0;
508
509
  }
509
510
  }, p = {
510
- id: Fe,
511
+ id: we,
511
512
  type: O.MUTATION,
512
513
  handler: (i, t) => {
513
514
  const { subUnitId: e, unitId: r, criteria: n, col: s, reCalc: o = !0 } = t, a = i.get(M).getFilterModel(r, e);
514
515
  return a ? (a.setCriteria(s, n, o), !0) : !1;
515
516
  }
516
517
  }, y = {
517
- id: we,
518
+ id: ve,
518
519
  type: O.MUTATION,
519
520
  handler: (i, t) => {
520
521
  const { unitId: e, subUnitId: r } = t;
521
522
  return i.get(M).removeFilterModel(e, r);
522
523
  }
523
524
  }, B = {
524
- id: ve,
525
+ id: Me,
525
526
  type: O.MUTATION,
526
527
  handler: (i, t) => {
527
528
  const { unitId: e, subUnitId: r } = t, s = i.get(M).getFilterModel(e, r);
@@ -570,7 +571,7 @@ const R = {
570
571
  return r.executeCommand(zt.id, { unitId: o, subUnitId: l });
571
572
  const u = i.get(qe).getCurrentLastSelection();
572
573
  if (!u) return !1;
573
- const d = u.range, h = Ge(u) ? _e(d, { left: !0, right: !0, up: !0, down: !0 }, s) : d;
574
+ const d = u.range, h = Ge(u) ? Ce(d, { left: !0, right: !0, up: !0, down: !0 }, s) : d;
574
575
  return r.executeCommand(Bt.id, {
575
576
  unitId: o,
576
577
  subUnitId: l,
@@ -690,7 +691,7 @@ function Wt(i, t, e, r) {
690
691
  }
691
692
  };
692
693
  }
693
- const xe = "sheets-filter.config", ue = {};
694
+ const Ie = "sheets-filter.config", ue = {};
694
695
  function jt(i, t) {
695
696
  for (let e = 0; e < i.length; e++) {
696
697
  let r = e;
@@ -707,11 +708,11 @@ var kt = Object.getOwnPropertyDescriptor, qt = (i, t, e, r) => {
707
708
  for (var n = r > 1 ? void 0 : r ? kt(t, e) : t, s = i.length - 1, o; s >= 0; s--)
708
709
  (o = i[s]) && (n = o(n) || n);
709
710
  return n;
710
- }, I = (i, t) => (e, r) => t(e, r, i);
711
+ }, x = (i, t) => (e, r) => t(e, r, i);
711
712
  let z = class extends U {
712
713
  constructor(t, e, r, n, s, o, l) {
713
714
  super();
714
- C(this, "_disposableCollection", new me());
715
+ C(this, "_disposableCollection", new ge());
715
716
  this._commandService = t, this._sheetInterceptorService = e, this._sheetsFilterService = r, this._univerInstanceService = n, this._refRangeService = s, this._dataSyncPrimaryController = o, this._zebraCrossingCacheController = l, this._initCommands(), this._initRowFilteredInterceptor(), this._initInterceptors(), this._commandExecutedListener(), this._initErrorHandling(), this._initZebraCrossingCacheListener();
716
717
  }
717
718
  _initZebraCrossingCacheListener() {
@@ -1008,13 +1009,13 @@ let z = class extends U {
1008
1009
  subUnitId: n,
1009
1010
  col: E,
1010
1011
  criteria: { ...v.serialize(), colId: E }
1011
- }, Ie = {
1012
+ }, xe = {
1012
1013
  unitId: r,
1013
1014
  subUnitId: n,
1014
1015
  col: E,
1015
1016
  criteria: s.getFilterColumn(E) ? { ...(re = s.getFilterColumn(E)) == null ? void 0 : re.serialize(), colId: E } : null
1016
1017
  };
1017
- c.push({ id: p.id, params: Z }), u.push({ id: p.id, params: Ie });
1018
+ c.push({ id: p.id, params: Z }), u.push({ id: p.id, params: xe });
1018
1019
  }
1019
1020
  if (!((ne = d[m]) != null && ne.filter)) {
1020
1021
  const Z = {
@@ -1249,7 +1250,7 @@ let z = class extends U {
1249
1250
  if (_ && this._cellHasValue(_)) {
1250
1251
  const S = (u = this._univerInstanceService.getUnit(r)) == null ? void 0 : u.getSheetBySheetId(n);
1251
1252
  if (S) {
1252
- const w = _e(d, { down: !0 }, S), F = this._sheetsFilterService.getFilterModel(r, n), f = F.getRange();
1253
+ const w = Ce(d, { down: !0 }, S), F = this._sheetsFilterService.getFilterModel(r, n), f = F.getRange();
1253
1254
  F.setRange({
1254
1255
  ...f,
1255
1256
  endRow: w.endRow
@@ -1300,13 +1301,13 @@ let z = class extends U {
1300
1301
  }
1301
1302
  };
1302
1303
  z = qt([
1303
- I(0, N),
1304
- I(1, A(Qe)),
1305
- I(2, A(M)),
1306
- I(3, T),
1307
- I(4, A(Je)),
1308
- I(5, He(gt)),
1309
- I(6, A(Ze))
1304
+ x(0, N),
1305
+ x(1, A(Qe)),
1306
+ x(2, A(M)),
1307
+ x(3, T),
1308
+ x(4, A(Je)),
1309
+ x(5, He(gt)),
1310
+ x(6, A(Ze))
1310
1311
  ], z);
1311
1312
  var Gt = Object.getOwnPropertyDescriptor, Qt = (i, t, e, r) => {
1312
1313
  for (var n = r > 1 ? void 0 : r ? Gt(t, e) : t, s = i.length - 1, o; s >= 0; s--)
@@ -1317,20 +1318,20 @@ const Jt = [
1317
1318
  p.id,
1318
1319
  B.id
1319
1320
  ], Zt = [
1320
- Ce.id,
1321
1321
  Re.id,
1322
- pe.id
1322
+ pe.id,
1323
+ Se.id
1323
1324
  ];
1324
1325
  let G = class extends U {
1325
1326
  constructor(t, e, r) {
1326
1327
  super();
1327
- C(this, "_d", new me());
1328
+ C(this, "_d", new ge());
1328
1329
  C(this, "_visible$", new $(!1));
1329
1330
  C(this, "visible$", this._visible$.asObservable());
1330
1331
  C(this, "_enabled$", new $(!0));
1331
1332
  C(this, "enabled$", this._enabled$.asObservable());
1332
1333
  this._sheetsFilterController = t, this._commandService = e, this._configService = r;
1333
- const n = this._configService.getConfig(xe);
1334
+ const n = this._configService.getConfig(Ie);
1334
1335
  n != null && n.enableSyncSwitch && this._visible$.next(!0);
1335
1336
  }
1336
1337
  get visible() {
@@ -1350,13 +1351,13 @@ let G = class extends U {
1350
1351
  ), this._d.add(
1351
1352
  this._commandService.onCommandExecuted((t, e) => {
1352
1353
  if (Zt.includes(t.id) && (e != null && e.fromCollab)) {
1353
- if (t.id === Ce.id) {
1354
+ if (t.id === Re.id) {
1354
1355
  const { range: r, unitId: n, subUnitId: s } = t.params, { redos: o } = this._sheetsFilterController.handleInsertColCommand(r, n, s);
1355
1356
  j(o, this._commandService, e);
1356
- } else if (t.id === Re.id) {
1357
+ } else if (t.id === pe.id) {
1357
1358
  const { range: r, unitId: n, subUnitId: s } = t.params, { redos: o } = this._sheetsFilterController.handleRemoveColCommand(r, n, s);
1358
1359
  j(o, this._commandService, e);
1359
- } else if (t.id === pe.id) {
1360
+ } else if (t.id === Se.id) {
1360
1361
  const { sourceRange: r, targetRange: n, unitId: s, subUnitId: o } = t.params, { redos: l } = this._sheetsFilterController.handleMoveColsCommand({ fromRange: r, toRange: n }, s, o);
1361
1362
  j(l, this._commandService, e);
1362
1363
  }
@@ -1368,7 +1369,7 @@ let G = class extends U {
1368
1369
  G = Qt([
1369
1370
  ee(0, A(z)),
1370
1371
  ee(1, N),
1371
- ee(2, ge)
1372
+ ee(2, _e)
1372
1373
  ], G);
1373
1374
  var Kt = Object.getOwnPropertyDescriptor, Yt = (i, t, e, r) => {
1374
1375
  for (var n = r > 1 ? void 0 : r ? Kt(t, e) : t, s = i.length - 1, o; s >= 0; s--)
@@ -1380,7 +1381,7 @@ let Q = class extends U {
1380
1381
  super(), this._activeDirtyManagerService = i, this._sheetRowFilteredService = t, this._sheetsFilterService = e, this._univerInstanceService = r, this._initFormulaDirtyRange(), this._registerSheetRowFiltered();
1381
1382
  }
1382
1383
  _initFormulaDirtyRange() {
1383
- Me.forEach((i) => {
1384
+ Ee.forEach((i) => {
1384
1385
  this._activeDirtyManagerService.register(
1385
1386
  i,
1386
1387
  {
@@ -1443,7 +1444,7 @@ let fe = (W = class extends Ve {
1443
1444
  ue,
1444
1445
  this._config
1445
1446
  );
1446
- this._configService.setConfig(xe, r);
1447
+ this._configService.setConfig(Ie, r);
1447
1448
  }
1448
1449
  onStarting() {
1449
1450
  [
@@ -1463,12 +1464,12 @@ let fe = (W = class extends Ve {
1463
1464
  }, C(W, "type", D.UNIVER_SHEET), C(W, "pluginName", Ne), W);
1464
1465
  fe = er([
1465
1466
  he(1, A(ke)),
1466
- he(2, ge)
1467
+ he(2, _e)
1467
1468
  ], fe);
1468
1469
  export {
1469
1470
  dr as ClearSheetsFilterCriteriaCommand,
1470
- x as CustomFilterOperator,
1471
- Me as FILTER_MUTATIONS,
1471
+ I as CustomFilterOperator,
1472
+ Ee as FILTER_MUTATIONS,
1472
1473
  b as FilterBy,
1473
1474
  yt as FilterColumn,
1474
1475
  q as FilterModel,
@@ -1491,5 +1492,5 @@ export {
1491
1492
  pt as greaterThanOrEqualTo,
1492
1493
  St as lessThan,
1493
1494
  Ft as lessThanOrEqualTo,
1494
- Ee as notEquals
1495
+ Oe as notEquals
1495
1496
  };
@@ -37,6 +37,7 @@ export declare class SheetsFilterService extends Disposable {
37
37
  private _initActiveFilterModel;
38
38
  private _serializeAutoFiltersForUnit;
39
39
  private _deserializeAutoFiltersForUnit;
40
+ dispose(): void;
40
41
  private _initModel;
41
42
  private _cacheFilterModel;
42
43
  }
package/lib/umd/index.js CHANGED
@@ -1 +1 @@
1
- (function(h,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("@univerjs/core"),require("@univerjs/sheets"),require("rxjs"),require("@univerjs/engine-render"),require("@univerjs/rpc"),require("@univerjs/engine-formula")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@univerjs/sheets","rxjs","@univerjs/engine-render","@univerjs/rpc","@univerjs/engine-formula"],d):(h=typeof globalThis<"u"?globalThis:h||self,d(h.UniverSheetsFilter={},h.UniverCore,h.UniverSheets,h.rxjs,h.UniverEngineRender,h.UniverRpc,h.UniverEngineFormula))})(this,(function(h,d,_,I,Re,ve,J){"use strict";var et=Object.defineProperty;var tt=(h,d,_)=>d in h?et(h,d,{enumerable:!0,configurable:!0,writable:!0,value:_}):h[d]=_;var v=(h,d,_)=>tt(h,typeof d!="symbol"?d+"":d,_);var x;const K="sheet.mutation.set-filter-range",Z="sheet.mutation.set-filter-criteria",Y="sheet.mutation.remove-filter",X="sheet.mutation.re-calc-filter",H=new Set([K,Z,Y,X]);var N=(i=>(i[i.VALUES=0]="VALUES",i[i.COLORS=1]="COLORS",i[i.CONDITIONS=2]="CONDITIONS",i))(N||{}),A=(i=>(i.EQUAL="equal",i.GREATER_THAN="greaterThan",i.GREATER_THAN_OR_EQUAL="greaterThanOrEqual",i.LESS_THAN="lessThan",i.LESS_THAN_OR_EQUAL="lessThanOrEqual",i.NOT_EQUALS="notEqual",i))(A||{});const ee={operator:A.GREATER_THAN,fn:(i,n)=>U(i)?i>n:!1},te={operator:A.GREATER_THAN_OR_EQUAL,fn:(i,n)=>U(i)?i>=n:!1},re={operator:A.LESS_THAN,fn:(i,n)=>U(i)?i<n:!1},ne={operator:A.LESS_THAN_OR_EQUAL,fn:(i,n)=>U(i)?i<=n:!1},ie={operator:A.EQUAL,fn:(i,n)=>U(i)?i===n:!1},z={operator:A.NOT_EQUALS,fn:(i,n)=>{if(typeof n=="string"){if(n===" ")return i!=null;const e=le(i);return e&&we(n)?!ae(n).test(e):e!==n}return U(i)?i!==n:!0}},se=new Map([]);[ee,te,re,ne,ie,z].forEach(i=>{se.set(i.operator,i)});function Fe(i){return!!i}const pe={fn:(i,n)=>{const e=le(i);return e===null?n==="":ae(n).test(e)}};function V(i){return i?se.get(i):pe}function U(i){return typeof i=="number"}function oe(i){return!!(typeof i=="number"||typeof i=="string"&&d.isNumeric(i))}function le(i){return typeof i=="boolean"||i==null?null:typeof i=="string"?i:i.toString()}function we(i){return typeof i=="number"?!1:i.indexOf("*")!==-1||i.indexOf("?")!==-1}function ae(i){const n=i.replace(/[.+^${}()|[\]\\]/g,"\\$&").replaceAll("?",".").replace(/[*]/g,".$&");return new RegExp(`^${n}$`)}const W=()=>new Set;class P extends d.Disposable{constructor(e,t,r){super();v(this,"_filteredOutRows$",new I.BehaviorSubject(W()));v(this,"filteredOutRows$",this._filteredOutRows$.asObservable());v(this,"_hasCriteria$",new I.BehaviorSubject(!1));v(this,"hasCriteria$",this._hasCriteria$.asObservable());v(this,"_filterColumnByIndex",new Map);v(this,"_alreadyFilteredOutRows",W());v(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:d.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?d.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=W(),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 de(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)=>d.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=d.mergeSets(this._alreadyFilteredOutRows,r))}}}class de extends d.Disposable{constructor(e,t,r,s,o){super();v(this,"_filteredOutRows",null);v(this,"_filterFn",null);v(this,"_range",null);v(this,"_column",0);v(this,"_filterBy",N.VALUES);this.unitId=e,this.subUnitId=t,this._worksheet=r,this._criteria=s,this._filterColumnContext=o}get filteredOutRows(){return this._filteredOutRows}get filterBy(){return this._filterBy}dispose(){super.dispose(),this._filteredOutRows=null}__clearCache(){this._filteredOutRows=null}serialize(){if(!this._criteria)throw new Error("[FilterColumn]: could not serialize without a filter column!");return d.Tools.deepClone({...this._criteria,colId:this._column})}hasCache(){return this._filteredOutRows!==null}setRangeAndColumn(e,t){this._range=e,this._column=t}setCriteria(e){this._criteria=e,this._generateFilterFn(),this._filteredOutRows=null}getColumnData(){return d.Tools.deepClone(this._criteria)}reCalc(){return this._filteredOutRows=this.calc(this._filterColumnContext),this._filteredOutRows}calc(e){if(!this._filterFn)throw new Error("[FilterColumn] cannot calculate without a filter fn!");if(!this._range)throw new Error("[FilterColumn] cannot calculate without a range!");if(typeof this._column!="number")throw new TypeError("[FilterColumn] cannot calculate without a column offset!");const t=this._column,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:a,rowSpan:c,col:m}=l;if(o.has(a)&&(!c||c===1))continue;if(!(this._filterBy===N.VALUES?this._filterFn(d.extractPureTextFromCell(this._worksheet.getCell(a,m))):this._filterBy===N.COLORS?this._filterFn(this._worksheet.getComposedCellStyle(a,m)):this._filterFn(be(this._worksheet,a,m)))&&(s.add(a),c))for(let f=1;f<c;f++)s.add(a+f)}return s}_generateFilterFn(){this._criteria&&(this._filterFn=Me(this._criteria),this._filterBy=this._criteria.filters?N.VALUES:this._criteria.colorFilters?N.COLORS:N.CONDITIONS)}}function Me(i){if(i.filters)return Ee(i.filters);if(i.colorFilters)return ye(i.colorFilters);if(i.customFilters)return Oe(i.customFilters);throw new Error("[FilterModel]: other types of filters are not supported yet.")}function Ee(i){const n=!!i.blank,e=new Set(i.filters);return t=>t===void 0||t===""?n:e.has(typeof t=="string"?t:`${t}`)}function ye(i){if(i.cellFillColors){const n=new Set(i.cellFillColors);return e=>{var r;if(!e||!((r=e.bg)!=null&&r.rgb))return!!n.has(null);const t=new d.ColorKit(e.bg.rgb).toRgbString();return n.has(t)}}if(i.cellTextColors){const n=new Set(i.cellTextColors);return e=>{var r;if(!e||!((r=e.cl)!=null&&r.rgb))return!!n.has(Re.COLOR_BLACK_RGB);const t=new d.ColorKit(e.cl.rgb).toRgbString();return n.has(t)}}throw new Error("[FilterModel]: color filters are not supported yet.")}function Oe(i){const n=i.customFilters.map(e=>Ne(e));return Ae(n)?i.and?Ie(n):Te(n):n[0]}function Ie(i){const[n,e]=i;return t=>n(t)&&e(t)}function Te(i){const[n,e]=i;return t=>n(t)||e(t)}function Ae(i){return i.length===2}function Ne(i){const n=i.val;if(i.operator===A.NOT_EQUALS&&!oe(n))return r=>z.fn(r,n);if(Fe(i.operator)){if(!oe(n))return()=>!1;const r=V(i.operator),s=Number(n);return o=>r.fn(o,s)}const e=V(i.operator);return t=>e.fn(t,n)}function be(i,n,e){const t=i.getCell(n,e);if(!t)return null;const r=i.getCellRaw(n,e);return t&&!r?ce(t):r?t.t===d.CellValueType.NUMBER&&typeof t.v=="string"?r.v:t.t===d.CellValueType.NUMBER?Number(r.v):ce(r):null}function ce(i){var t,r;const n=(r=(t=i.p)==null?void 0:t.body)==null?void 0:r.dataStream;if(n)return n.trimEnd();const e=i.v;return typeof e=="string"?i.t===d.CellValueType.BOOLEAN?e.toUpperCase():e:typeof e=="number"?i.t===d.CellValueType.BOOLEAN?e?"TRUE":"FALSE":e:typeof e=="boolean"?e?"TRUE":"FALSE":""}var Ue=Object.getOwnPropertyDescriptor,$e=(i,n,e,t)=>{for(var r=t>1?void 0:t?Ue(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},q=(i,n)=>(e,t)=>n(e,t,i);const k="SHEET_FILTER_PLUGIN";h.SheetsFilterService=class extends d.Disposable{constructor(e,t,r){super();v(this,"_filterModels",new Map);v(this,"_loadedUnitId$",new I.BehaviorSubject(null));v(this,"loadedUnitId$",this._loadedUnitId$.asObservable());v(this,"_errorMsg$",new I.BehaviorSubject(null));v(this,"errorMsg$",this._errorMsg$.asObservable());v(this,"_activeFilterModel$",new I.BehaviorSubject(null));v(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(d.UniverInstanceType.UNIVER_SHEET),!e){this._activeFilterModel$.next(null);return}}catch(l){console.error("[SheetsFilterService]: could not get active workbook!",l);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(I.merge(d.fromCallback(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(I.filter(([e])=>e.type===d.CommandType.MUTATION&&H.has(e.id))),this._univerInstanceService.getCurrentTypeOfUnit$(d.UniverInstanceType.UNIVER_SHEET).pipe(I.switchMap(e=>{var t;return(t=e==null?void 0:e.activeSheet$)!=null?t:I.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:k,businesses:[d.UniverInstanceType.UNIVER_SHEET],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)}},h.SheetsFilterService=$e([q(0,d.IResourceManagerService),q(1,d.IUniverInstanceService),q(2,d.ICommandService)],h.SheetsFilterService);const F={id:K,type:d.CommandType.MUTATION,handler:(i,n)=>{const{subUnitId:e,unitId:t,range:r}=n;return i.get(h.SheetsFilterService).ensureFilterModel(t,e).setRange(r),!0}},p={id:Z,type:d.CommandType.MUTATION,handler:(i,n)=>{const{subUnitId:e,unitId:t,criteria:r,col:s,reCalc:o=!0}=n,a=i.get(h.SheetsFilterService).getFilterModel(t,e);return a?(a.setCriteria(s,r,o),!0):!1}},T={id:Y,type:d.CommandType.MUTATION,handler:(i,n)=>{const{unitId:e,subUnitId:t}=n;return i.get(h.SheetsFilterService).removeFilterModel(e,t)}},$={id:X,type:d.CommandType.MUTATION,handler:(i,n)=>{const{unitId:e,subUnitId:t}=n,s=i.get(h.SheetsFilterService).getFilterModel(e,t);return s?(s.reCalc(),!0):!1}},ue={id:"sheet.command.set-filter-range",type:d.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(h.SheetsFilterService),t=i.get(d.ICommandService),r=i.get(d.IUndoRedoService),s=i.get(d.IUniverInstanceService),{unitId:o,subUnitId:l,range:a}=n;if(!_.getSheetCommandTarget(s,n)||e.getFilterModel(o,l))return!1;if(a.endRow===a.startRow){const S=i.get(d.ErrorService),R=i.get(d.LocaleService);return S.emit(R.t("sheets-filter.command.not-valid-filter-range")),!1}const u={id:F.id,params:{unitId:o,subUnitId:l,range:a}},f=t.syncExecuteCommand(u.id,u.params);return f&&r.pushUndoRedo({unitID:o,undoMutations:[{id:T.id,params:{unitId:o,subUnitId:l}}],redoMutations:[u]}),f}},he={id:"sheet.command.remove-sheet-filter",type:d.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(d.IUniverInstanceService),t=i.get(h.SheetsFilterService),r=i.get(d.ICommandService),s=i.get(d.IUndoRedoService),o=_.getSheetCommandTarget(e,n);if(!o)return!1;const{unitId:l,subUnitId:a}=o,c=t.getFilterModel(l,a);if(!c)return!1;const m=c==null?void 0:c.serialize(),u=je(l,a,m),f=r.syncExecuteCommand(T.id,{unitId:l,subUnitId:a});return f&&s.pushUndoRedo({unitID:l,undoMutations:u,redoMutations:[{id:T.id,params:{unitId:l,subUnitId:a}}]}),f}},Le={id:"sheet.command.smart-toggle-filter",type:d.CommandType.COMMAND,handler:async i=>{const n=i.get(d.IUniverInstanceService),e=i.get(h.SheetsFilterService),t=i.get(d.ICommandService),r=n.getCurrentUnitForType(d.UniverInstanceType.UNIVER_SHEET),s=r==null?void 0:r.getActiveSheet();if(!s||!r)return!1;const o=r.getUnitId(),l=s.getSheetId();if(e.getFilterModel(o,l))return t.executeCommand(he.id,{unitId:o,subUnitId:l});const m=i.get(_.SheetsSelectionsService).getCurrentLastSelection();if(!m)return!1;const u=m.range,f=_.isSingleCellSelection(m)?_.expandToContinuousRange(u,{left:!0,right:!0,up:!0,down:!0},s):u;return t.executeCommand(ue.id,{unitId:o,subUnitId:l,range:f})}},Pe={id:"sheet.command.set-filter-criteria",type:d.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(h.SheetsFilterService),t=i.get(d.ICommandService),r=i.get(d.IUndoRedoService),{unitId:s,subUnitId:o,col:l,criteria:a}=n,c=e.getFilterModel(s,o);if(!c)return!1;const m=c.getRange();if(!m||l<m.startColumn||l>m.endColumn)return!1;const u=c.getFilterColumn(l),f=He(s,o,l,u),S={id:p.id,params:{unitId:s,subUnitId:o,col:l,criteria:a}},R=t.syncExecuteCommand(S.id,S.params);return R&&r.pushUndoRedo({unitID:s,undoMutations:[f],redoMutations:[S]}),R}},De={id:"sheet.command.clear-filter-criteria",type:d.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(h.SheetsFilterService),t=i.get(d.IUndoRedoService),r=i.get(d.ICommandService),s=i.get(d.IUniverInstanceService),o=_.getSheetCommandTarget(s,n);if(!o)return!1;const{unitId:l,subUnitId:a}=o,c=e.getFilterModel(o.unitId,o.subUnitId);if(!c)return!1;const m=c.serialize(),u=me(l,a,m),f=xe(l,a,m);return d.sequenceExecute(f,r).result?(t.pushUndoRedo({unitID:l,undoMutations:u,redoMutations:f}),!0):!1}},Be={id:"sheet.command.re-calc-filter",type:d.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(h.SheetsFilterService),t=i.get(d.ICommandService),r=i.get(d.IUniverInstanceService),s=_.getSheetCommandTarget(r,n);if(!s)return!1;const{unitId:o,subUnitId:l}=s;return e.getFilterModel(s.unitId,s.subUnitId)?t.executeCommand($.id,{unitId:o,subUnitId:l}):!1}};function je(i,n,e){const t=[],r={id:F.id,params:{unitId:i,subUnitId:n,range:e.ref}};return t.push(r),me(i,n,e).forEach(o=>t.push(o)),t}function me(i,n,e){var r;const t=[];return(r=e.filterColumns)==null||r.forEach(s=>{const o={id:p.id,params:{unitId:i,subUnitId:n,col:s.colId,criteria:s}};t.push(o)}),t}function xe(i,n,e){var r;const t=[];return(r=e.filterColumns)==null||r.forEach(s=>{const o={id:p.id,params:{unitId:i,subUnitId:n,col:s.colId,criteria:null}};t.push(o)}),t}function He(i,n,e,t){if(!t)return{id:p.id,params:{unitId:i,subUnitId:n,col:e,criteria:null}};const r=t.serialize();return{id:p.id,params:{unitId:i,subUnitId:n,col:e,criteria:r}}}const fe="sheets-filter.config",ge={};function ze(i,n){for(let e=0;e<i.length;e++){let t=e;if(i[e])for(let r=e+1;r<i.length;r++)i[t]&&i[r]&&n(i[t],i[r])&&(i[t]=null,t=r)}return i.filter(e=>e!==null)}function L(i){return ze(i,(n,e)=>n.id===p.id&&e.id===p.id&&n.params.unitId===e.params.unitId&&n.params.subUnitId===e.params.subUnitId&&n.params.col===e.params.col)}var Ve=Object.getOwnPropertyDescriptor,We=(i,n,e,t)=>{for(var r=t>1?void 0:t?Ve(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},b=(i,n)=>(e,t)=>n(e,t,i);let D=class extends d.Disposable{constructor(n,e,t,r,s,o,l){super();v(this,"_disposableCollection",new d.DisposableCollection);this._commandService=n,this._sheetInterceptorService=e,this._sheetsFilterService=t,this._univerInstanceService=r,this._refRangeService=s,this._dataSyncPrimaryController=o,this._zebraCrossingCacheController=l,this._initCommands(),this._initRowFilteredInterceptor(),this._initInterceptors(),this._commandExecutedListener(),this._initErrorHandling(),this._initZebraCrossingCacheListener()}_initZebraCrossingCacheListener(){this.disposeWithMe(this._sheetsFilterService.activeFilterModel$.subscribe(n=>{n&&this.disposeWithMe(n.filteredOutRows$.subscribe(()=>{this._zebraCrossingCacheController.updateZebraCrossingCache(n.unitId,n.subUnitId)}))}))}_initCommands(){[p,F,$,T].forEach(n=>{var e;this.disposeWithMe(this._commandService.registerCommand(n)),(e=this._dataSyncPrimaryController)==null||e.registerSyncingMutations(n)})}_initInterceptors(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:n=>this._getUpdateFilter(n)})),this.disposeWithMe(this._commandService.onCommandExecuted(n=>{if(n.id===_.SetWorksheetActiveOperation.id){const e=n.params,t=e.subUnitId,r=e.unitId;if(!t||!r)return;this._registerRefRange(r,t)}if(n.id===F.id){const e=n.params,t=e.subUnitId,r=e.unitId;if(!t||!r)return;this._registerRefRange(e.unitId,e.subUnitId)}})),this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe(n=>{if(n){const e=this._univerInstanceService.getUniverSheetInstance(n),t=e==null?void 0:e.getActiveSheet();t&&this._registerRefRange(n,t.getSheetId())}}))}_registerRefRange(n,e){var l;this._disposableCollection.dispose();const t=this._univerInstanceService.getUniverSheetInstance(n),r=t==null?void 0:t.getSheetBySheetId(e);if(!t||!r)return;const s=(l=this._sheetsFilterService.getFilterModel(n,e))==null?void 0:l.getRange(),o=a=>{switch(a.id){case _.InsertRowCommand.id:{const c=a.params,m=c.unitId||n,u=c.subUnitId||e;return this._handleInsertRowCommand(c,m,u)}case _.InsertColCommand.id:{const c=a.params,m=c.unitId||n,u=c.subUnitId||e;return this.handleInsertColCommand(c.range,m,u)}case _.RemoveColCommand.id:{const c=a.params;return this.handleRemoveColCommand(c.range,n,e)}case _.RemoveRowCommand.id:{const c=a.params;return this._handleRemoveRowCommand(c,n,e)}case _.EffectRefRangId.MoveColsCommandId:{const c=a.params;return this.handleMoveColsCommand({fromRange:c.fromRange,toRange:c.toRange},n,e)}case _.EffectRefRangId.MoveRowsCommandId:{const c=a.params;return this._handleMoveRowsCommand(c,n,e)}case _.MoveRangeCommand.id:{const c=a.params;return this._handleMoveRangeCommand(c,n,e)}}return{redos:[],undos:[]}};s&&this._disposableCollection.add(this._refRangeService.registerRefRange(s,o,n,e))}_getUpdateFilter(n){const{id:e}=n;switch(e){case _.RemoveSheetCommand.id:{const t=n.params;return this._handleRemoveSheetCommand(t,t.unitId,t.subUnitId)}case _.CopySheetCommand.id:{const t=n.params,{targetSubUnitId:r,unitId:s,subUnitId:o}=t;return!s||!o||!r?this._handleNull():this._handleCopySheetCommand(s,o,r)}}return{redos:[],undos:[]}}handleInsertColCommand(n,e,t){var g;const r=this._sheetsFilterService.getFilterModel(e,t),s=(g=r==null?void 0:r.getRange())!=null?g:null;if(!r||!s)return this._handleNull();const{startColumn:o,endColumn:l}=s,{startColumn:a,endColumn:c}=n,m=c-a+1;if(c>l)return this._handleNull();const u=[],f=[],S=a,R={unitId:e,subUnitId:t,range:{...s,startColumn:a<=o?o+m:o,endColumn:l+m}},w={unitId:e,subUnitId:t,range:s};u.push({id:F.id,params:R}),f.push({id:F.id,params:w});const M=r.getAllFilterColumns().filter(C=>C[0]>=S);if(M.length!==0){const{newRange:C,oldRange:y}=this._moveCriteria(e,t,M,m);u.push(...y.redos,...C.redos),f.push(...C.undos,...y.undos)}return{redos:L(u),undos:L(f)}}_handleInsertRowCommand(n,e,t){var w;const r=this._sheetsFilterService.getFilterModel(e,t),s=(w=r==null?void 0:r.getRange())!=null?w:null;if(!r||!s)return this._handleNull();const{startRow:o,endRow:l}=s,{startRow:a,endRow:c}=n.range,m=c-a+1;if(c>l)return this._handleNull();const u=[],f=[],S={unitId:e,subUnitId:t,range:{...s,startRow:a<=o?o+m:o,endRow:l+m}},R={unitId:e,subUnitId:t,range:s};return u.push({id:F.id,params:S}),f.push({id:F.id,params:R}),{redos:L(u),undos:L(f)}}handleRemoveColCommand(n,e,t){var M;const r=this._sheetsFilterService.getFilterModel(e,t),s=(M=r==null?void 0:r.getRange())!=null?M:null;if(!r||!s)return this._handleNull();const{startColumn:o,endColumn:l}=s,{startColumn:a,endColumn:c}=n;if(a>l)return this._handleNull();const m=[],u=[],f=c<o?0:Math.min(c,l)-Math.max(a,o)+1,S=c-a+1,R=r.getAllFilterColumns();R.forEach(g=>{const[C,y]=g;C<=c&&C>=a&&(m.push({id:p.id,params:{unitId:e,subUnitId:t,col:C,criteria:null}}),u.push({id:p.id,params:{unitId:e,subUnitId:t,col:C,criteria:{...y.serialize(),colId:C}}}))});const w=R.filter(g=>{const[C,y]=g;return C>c});let E={undos:[],redos:[]};if(w.length>0){const{oldRange:g,newRange:C}=this._moveCriteria(e,t,w,-S);E=C,m.push(...g.redos),u.unshift(...g.undos)}if(f===l-o+1){const g={unitId:e,subUnitId:t};m.push({id:T.id,params:g}),u.unshift({id:F.id,params:{range:s,unitId:e,subUnitId:t}})}else{const g=o<=a?o:f===0?o-S:a,C=o<=a?l-f:l-S,y={unitId:e,subUnitId:t,range:{...s,startColumn:g,endColumn:C}};m.push({id:F.id,params:y}),u.unshift({id:F.id,params:{range:s,unitId:e,subUnitId:t}}),m.push(...E.redos),u.unshift(...E.undos)}return{undos:u,redos:m}}_handleRemoveRowCommand(n,e,t){var w;const r=this._sheetsFilterService.getFilterModel(e,t);if(!r)return this._handleNull();const s=r.getRange(),{startRow:o,endRow:l}=s,{startRow:a,endRow:c}=n.range;if(a>l)return this._handleNull();if(c<o)return{undos:[{id:F.id,params:{range:s,unitId:e,subUnitId:t}}],redos:[{id:F.id,params:{range:{...s,startRow:o-(c-a+1),endRow:l-(c-a+1)},unitId:e,subUnitId:t}}]};const m=[],u=[],f=r.getAllFilterColumns(),S=o<=c&&o>=a;u.push({id:F.id,params:{range:s,unitId:e,subUnitId:t}});const R=Math.min(c,l)-Math.max(a,o)+1;if(R===l-o+1||S){const E={unitId:e,subUnitId:t};m.push({id:T.id,params:E}),f.forEach(M=>{const[g,C]=M,y={unitId:e,subUnitId:t,col:g,criteria:{...C.serialize(),colId:g}};u.push({id:p.id,params:y})})}else{const E=(w=this._univerInstanceService.getUniverSheetInstance(e))==null?void 0:w.getSheetBySheetId(t);if(!E)return this._handleNull();const M=[];for(let O=a;O<=c;O++)E.getRowFiltered(O)&&M.push(O);const g=Math.min(o,a),C=g+(l-o)-R+M.length,y={unitId:e,subUnitId:t,range:{...s,startRow:g,endRow:C}};m.push({id:F.id,params:y})}return{undos:L(u),redos:L(m)}}handleMoveColsCommand({fromRange:n,toRange:e},t,r){var M;const s=this._sheetsFilterService.getFilterModel(t,r),o=(M=s==null?void 0:s.getRange())!=null?M:null;if(!s||!o)return this._handleNull();const{startColumn:l,endColumn:a}=o;if(n.endColumn<l&&e.startColumn<=l||n.startColumn>a&&e.endColumn>a)return this._handleNull();const c=[],m=[],u={};for(let g=l;g<=a;g++)u[g]={colIndex:g,filter:s.getFilterColumn(g)};d.moveMatrixArray(n.startColumn,n.endColumn-n.startColumn+1,e.startColumn,u);let f=o.startColumn,S=o.endColumn;l>=n.startColumn&&l<=n.endColumn&&e.startColumn>n.startColumn&&n.endColumn<a&&(f=n.endColumn+1),a>=n.startColumn&&a<=n.endColumn&&e.startColumn<n.startColumn&&n.startColumn>l&&(S=n.startColumn-1);const R=Object.keys(u).map(g=>Number(g)),w=R.find(g=>u[g].colIndex===S),E=R.find(g=>u[g].colIndex===f);if(R.forEach(g=>{var _e,Se;const{colIndex:C,filter:y}=u[g],O=g;if(y){if(O>=E&&O<=w){const Q={unitId:t,subUnitId:r,col:O,criteria:{...y.serialize(),colId:O}},Xe={unitId:t,subUnitId:r,col:O,criteria:s.getFilterColumn(O)?{...(_e=s.getFilterColumn(O))==null?void 0:_e.serialize(),colId:O}:null};c.push({id:p.id,params:Q}),m.push({id:p.id,params:Xe})}if(!((Se=u[C])!=null&&Se.filter)){const Q={unitId:t,subUnitId:r,col:C,criteria:null};c.push({id:p.id,params:Q}),m.push({id:p.id,params:{unitId:t,subUnitId:r,col:C,criteria:{...y.serialize(),colId:C}}})}}}),l!==E||a!==w){const g={unitId:t,subUnitId:r,range:{...o,startColumn:E,endColumn:w}};c.unshift({id:F.id,params:g}),m.unshift({id:F.id,params:{range:o,unitId:t,subUnitId:r}})}return{undos:m,redos:c}}_handleMoveRowsCommand(n,e,t){var g;const r=this._sheetsFilterService.getFilterModel(e,t),s=(g=r==null?void 0:r.getRange())!=null?g:null;if(!r||!s)return this._handleNull();const{startRow:o,endRow:l}=s,{fromRange:a,toRange:c}=n;if(a.endRow<o&&c.startRow<=o||a.startRow>l&&c.endRow>l)return this._handleNull();const m=[],u=[],f={};for(let C=o;C<=l;C++)f[C]={oldIndex:C};const S=o;let R=l;l>=a.startRow&&l<=a.endRow&&c.startRow<a.startRow&&a.startRow>o&&(R=a.startRow-1),d.moveMatrixArray(a.startRow,a.endRow-a.startRow+1,c.startRow,f);const w=Object.keys(f).map(C=>Number(C)),E=w.find(C=>f[C].oldIndex===R),M=w.find(C=>f[C].oldIndex===S);if(o!==M||l!==E){const C={unitId:e,subUnitId:t,range:{...s,startRow:M,endRow:E}};m.push({id:F.id,params:C},{id:$.id,params:{unitId:e,subUnitId:t}}),u.push({id:F.id,params:{range:s,unitId:e,subUnitId:t}},{id:$.id,params:{unitId:e,subUnitId:t}})}return{redos:m,undos:u}}_handleMoveRangeCommand(n,e,t){const{fromRange:r,toRange:s}=n,o=this._sheetsFilterService.getFilterModel(e,t);if(!o)return this._handleNull();const l=o.getRange();if(!l)return this._handleNull();const a=[],c=[];if(d.Rectangle.contains(r,l)){const m=l.startRow-r.startRow,u=l.startColumn-r.startColumn,f={startRow:s.startRow+m,startColumn:s.startColumn+u,endRow:s.startRow+m+(l.endRow-l.startRow),endColumn:s.startColumn+u+(l.endColumn-l.startColumn)},S={id:T.id,params:{unitId:e,subUnitId:t}},R={id:F.id,params:{unitId:e,subUnitId:t,range:f}},w={id:F.id,params:{unitId:e,subUnitId:t,range:l}};a.push(S,R),c.push(S,w);const E=o.getAllFilterColumns(),M=s.startColumn-r.startColumn;E.forEach(g=>{const[C,y]=g;y&&(a.push({id:p.id,params:{unitId:e,subUnitId:t,col:C+M,criteria:{...y.serialize(),colId:C+M}}}),c.push({id:p.id,params:{unitId:e,subUnitId:t,col:C,criteria:{...y.serialize(),colId:C}}}))})}else if(d.Rectangle.intersects(s,l)){const m={...l,endRow:Math.max(l.endRow,s.endRow)};a.push({id:F.id,params:{unitId:e,subUnitId:t,range:m}}),c.push({id:F.id,params:{unitId:e,subUnitId:t,range:l}})}return{redos:a,undos:c}}_handleRemoveSheetCommand(n,e,t){const r=this._sheetsFilterService.getFilterModel(e,t);if(!r)return this._handleNull();const s=r.getRange();if(!s)return this._handleNull();const o=[],l=[];return r.getAllFilterColumns().forEach(([c,m])=>{l.push({id:p.id,params:{unitId:e,subUnitId:t,col:c,criteria:{...m.serialize(),colId:c}}})}),o.push({id:T.id,params:{unitId:e,subUnitId:t,range:s}}),l.unshift({id:F.id,params:{range:s,unitId:e,subUnitId:t}}),{undos:l,redos:o}}_handleCopySheetCommand(n,e,t){const r=this._sheetsFilterService.getFilterModel(n,e);if(!r)return this._handleNull();const s=r.getRange();if(!s)return this._handleNull();const o=[],l=[],a=[],c=[];return r.getAllFilterColumns().forEach(([u,f])=>{o.push({id:p.id,params:{unitId:n,subUnitId:t,col:u,criteria:{...f.serialize(),colId:u}}}),a.push({id:p.id,params:{unitId:n,subUnitId:t,col:u,criteria:null}})}),a.push({id:T.id,params:{unitId:n,subUnitId:t,range:s}}),o.unshift({id:F.id,params:{range:s,unitId:n,subUnitId:t}}),{undos:l,redos:o,preUndos:a,preRedos:c}}_handleNull(){return{redos:[],undos:[]}}_initRowFilteredInterceptor(){this.disposeWithMe(this._sheetInterceptorService.intercept(_.INTERCEPTOR_POINT.ROW_FILTERED,{handler:(n,e)=>{var t,r;return n?!0:(r=(t=this._sheetsFilterService.getFilterModel(e.unitId,e.subUnitId))==null?void 0:t.isRowFiltered(e.row))!=null?r:!1}}))}_moveCriteria(n,e,t,r){const s={unitId:n,subUnitId:e,criteria:null,col:-1},o=[],l=[],a=[],c=[];return t.forEach(m=>{const[u,f]=m;l.push({id:p.id,params:{...s,col:u}}),o.push({id:p.id,params:{...s,col:u,criteria:{...f.serialize(),colId:u}}})}),t.forEach(m=>{const[u,f]=m;c.push({id:p.id,params:{...s,col:u+r,criteria:{...f.serialize(),colId:u+r}}}),a.push({id:p.id,params:{...s,col:u+r,criteria:null}})}),{newRange:{redos:c,undos:a},oldRange:{redos:l,undos:o}}}_commandExecutedListener(){this.disposeWithMe(this._commandService.onCommandExecuted((n,e)=>{var c,m;const{unitId:t,subUnitId:r}=n.params||{},s=this._sheetsFilterService.getFilterModel(t,r);if(!s)return;const o=Array.from(s.filteredOutRows).sort((u,f)=>u-f),l=[];let a=!1;if(n.id===_.RemoveRowMutation.id){const{startRow:u,endRow:f}=n.params.range,S=o.filter(R=>R>=u&&R<=f);o.forEach(R=>{if(R<u)l.push(R);else if(a=!0,R<=f){const w=Math.max(u,l.length?l[l.length-1]+1:u);l.push(w)}else l.push(R-(f-u+1-S.length))})}if(n.id===_.InsertRowMutation.id){const{startRow:u,endRow:f}=n.params.range;o.forEach(S=>{S>=u?(a=!0,l.push(S+(f-u+1))):l.push(S)})}if(a&&(s.filteredOutRows=new Set(l)),n.id===_.SetRangeValuesMutation.id&&!(e!=null&&e.onlyLocal)){const u=this._getExtendRegion(t,r);if(u){const f=n.params.cellValue;if(f)for(let S=u.startColumn;S<=u.endColumn;S++){const R=(c=f==null?void 0:f[u.startRow])==null?void 0:c[S];if(R&&this._cellHasValue(R)){const w=(m=this._univerInstanceService.getUnit(t))==null?void 0:m.getSheetBySheetId(r);if(w){const E=_.expandToContinuousRange(u,{down:!0},w),M=this._sheetsFilterService.getFilterModel(t,r),g=M.getRange();M.setRange({...g,endRow:E.endRow}),this._registerRefRange(t,r)}}}}}}))}_getExtendRegion(n,e){var a;const t=this._sheetsFilterService.getFilterModel(n,e);if(!t)return null;const r=(a=this._univerInstanceService.getUnit(n))==null?void 0:a.getSheetBySheetId(e);if(!r)return null;const s=t.getRange();if(!s)return null;const o=r.getRowCount()-1,l=r.getRowManager();for(let c=s.endRow+1;c<=o;c++)if(l.getRowRawVisible(c))return{startRow:c,endRow:c,startColumn:s.startColumn,endColumn:s.endColumn};return null}_initErrorHandling(){this.disposeWithMe(this._commandService.beforeCommandExecuted(n=>{const e=n.params,t=_.getSheetCommandTarget(this._univerInstanceService);if(!t)return;const{subUnitId:r,unitId:s}=t,o=this._sheetsFilterService.getFilterModel(s,r);if(!o)return;const l=o.getRange();if(n.id===_.MoveRowsCommand.id&&e.fromRange.startRow<=l.startRow&&e.fromRange.endRow<l.endRow&&e.fromRange.endRow>=l.startRow)throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"),new Error("[SheetsFilterController]: Cannot move header row of filter")}))}_cellHasValue(n){const e=Object.values(n);return!(e.length===0||e.every(t=>t==null))}};D=We([b(0,d.ICommandService),b(1,d.Inject(_.SheetInterceptorService)),b(2,d.Inject(h.SheetsFilterService)),b(3,d.IUniverInstanceService),b(4,d.Inject(_.RefRangeService)),b(5,d.Optional(ve.DataSyncPrimaryController)),b(6,d.Inject(_.ZebraCrossingCacheController))],D);var qe=Object.getOwnPropertyDescriptor,ke=(i,n,e,t)=>{for(var r=t>1?void 0:t?qe(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},G=(i,n)=>(e,t)=>n(e,t,i);const Ge=[p.id,$.id],Qe=[_.InsertColMutation.id,_.RemoveColMutation.id,_.MoveColsMutation.id];h.SheetsFilterSyncController=class extends d.Disposable{constructor(e,t,r){super();v(this,"_d",new d.DisposableCollection);v(this,"_visible$",new I.BehaviorSubject(!1));v(this,"visible$",this._visible$.asObservable());v(this,"_enabled$",new I.BehaviorSubject(!0));v(this,"enabled$",this._enabled$.asObservable());this._sheetsFilterController=e,this._commandService=t,this._configService=r;const s=this._configService.getConfig(fe);s!=null&&s.enableSyncSwitch&&this._visible$.next(!0)}get visible(){return this._visible$.getValue()}get enabled(){return this._enabled$.getValue()}setEnabled(e){this._enabled$.next(e),e?this._d.dispose():this._initOnlyLocalListener()}_initOnlyLocalListener(){this._d.add(this._commandService.beforeCommandExecuted((e,t)=>{Ge.includes(e.id)&&(t||(t={}),t.onlyLocal=!0)})),this._d.add(this._commandService.onCommandExecuted((e,t)=>{if(Qe.includes(e.id)&&(t!=null&&t.fromCollab)){if(e.id===_.InsertColMutation.id){const{range:r,unitId:s,subUnitId:o}=e.params,{redos:l}=this._sheetsFilterController.handleInsertColCommand(r,s,o);d.sequenceExecute(l,this._commandService,t)}else if(e.id===_.RemoveColMutation.id){const{range:r,unitId:s,subUnitId:o}=e.params,{redos:l}=this._sheetsFilterController.handleRemoveColCommand(r,s,o);d.sequenceExecute(l,this._commandService,t)}else if(e.id===_.MoveColsMutation.id){const{sourceRange:r,targetRange:s,unitId:o,subUnitId:l}=e.params,{redos:a}=this._sheetsFilterController.handleMoveColsCommand({fromRange:r,toRange:s},o,l);d.sequenceExecute(a,this._commandService,t)}}}))}},h.SheetsFilterSyncController=ke([G(0,d.Inject(D)),G(1,d.ICommandService),G(2,d.IConfigService)],h.SheetsFilterSyncController);var Je=Object.getOwnPropertyDescriptor,Ke=(i,n,e,t)=>{for(var r=t>1?void 0:t?Je(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},B=(i,n)=>(e,t)=>n(e,t,i);let j=class extends d.Disposable{constructor(i,n,e,t){super(),this._activeDirtyManagerService=i,this._sheetRowFilteredService=n,this._sheetsFilterService=e,this._univerInstanceService=t,this._initFormulaDirtyRange(),this._registerSheetRowFiltered()}_initFormulaDirtyRange(){H.forEach(i=>{this._activeDirtyManagerService.register(i,{commandId:i,getDirtyData:n=>{const e=n.params,{unitId:t,subUnitId:r}=e;return{dirtyRanges:this._getHideRowMutation(t,r),clearDependencyTreeCache:{[t]:{[r]:"1"}}}}})})}_getHideRowMutation(i,n){var l,a;const e=(l=this._sheetsFilterService.getFilterModel(i,n))==null?void 0:l.getRange(),t=(a=this._univerInstanceService.getUnit(i))==null?void 0:a.getSheetBySheetId(n);if(e==null||t==null)return[];const{startRow:r,endRow:s}=e;return[{unitId:i,sheetId:n,range:{startRow:r,startColumn:0,endRow:s,endColumn:t.getColumnCount()-1}}]}_registerSheetRowFiltered(){this._sheetRowFilteredService.register((i,n,e)=>{var t,r;return(r=(t=this._sheetsFilterService.getFilterModel(i,n))==null?void 0:t.isRowFiltered(e))!=null?r:!1})}};j=Ke([B(0,d.Inject(J.IActiveDirtyManagerService)),B(1,d.Inject(J.ISheetRowFilteredService)),B(2,d.Inject(h.SheetsFilterService)),B(3,d.IUniverInstanceService)],j);var Ze=Object.getOwnPropertyDescriptor,Ye=(i,n,e,t)=>{for(var r=t>1?void 0:t?Ze(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},Ce=(i,n)=>(e,t)=>n(e,t,i);h.UniverSheetsFilterPlugin=(x=class extends d.Plugin{constructor(n=ge,e,t){super(),this._config=n,this._injector=e,this._configService=t;const{...r}=d.merge({},ge,this._config);this._configService.setConfig(fe,r)}onStarting(){[[j],[h.SheetsFilterService],[D],[h.SheetsFilterSyncController]].forEach(n=>this._injector.add(n))}onReady(){d.touchDependencies(this._injector,[[j],[D],[h.SheetsFilterSyncController]])}},v(x,"type",d.UniverInstanceType.UNIVER_SHEET),v(x,"pluginName",k),x),h.UniverSheetsFilterPlugin=Ye([Ce(1,d.Inject(d.Injector)),Ce(2,d.IConfigService)],h.UniverSheetsFilterPlugin),h.ClearSheetsFilterCriteriaCommand=De,h.CustomFilterOperator=A,h.FILTER_MUTATIONS=H,h.FilterBy=N,h.FilterColumn=de,h.FilterModel=P,h.ReCalcSheetsFilterCommand=Be,h.ReCalcSheetsFilterMutation=$,h.RemoveSheetFilterCommand=he,h.RemoveSheetsFilterMutation=T,h.SHEET_FILTER_SNAPSHOT_ID=k,h.SetSheetFilterRangeCommand=ue,h.SetSheetsFilterCriteriaCommand=Pe,h.SetSheetsFilterCriteriaMutation=p,h.SetSheetsFilterRangeMutation=F,h.SmartToggleSheetsFilterCommand=Le,h.equals=ie,h.getCustomFilterFn=V,h.greaterThan=ee,h.greaterThanOrEqualTo=te,h.lessThan=re,h.lessThanOrEqualTo=ne,h.notEquals=z,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(h,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("@univerjs/core"),require("@univerjs/sheets"),require("rxjs"),require("@univerjs/engine-render"),require("@univerjs/rpc"),require("@univerjs/engine-formula")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@univerjs/sheets","rxjs","@univerjs/engine-render","@univerjs/rpc","@univerjs/engine-formula"],a):(h=typeof globalThis<"u"?globalThis:h||self,a(h.UniverSheetsFilter={},h.UniverCore,h.UniverSheets,h.rxjs,h.UniverEngineRender,h.UniverRpc,h.UniverEngineFormula))})(this,(function(h,a,_,I,Se,Re,J){"use strict";var Ye=Object.defineProperty;var et=(h,a,_)=>a in h?Ye(h,a,{enumerable:!0,configurable:!0,writable:!0,value:_}):h[a]=_;var v=(h,a,_)=>et(h,typeof a!="symbol"?a+"":a,_);var x;const K="sheet.mutation.set-filter-range",Z="sheet.mutation.set-filter-criteria",X="sheet.mutation.remove-filter",Y="sheet.mutation.re-calc-filter",H=new Set([K,Z,X,Y]);var N=(i=>(i[i.VALUES=0]="VALUES",i[i.COLORS=1]="COLORS",i[i.CONDITIONS=2]="CONDITIONS",i))(N||{}),A=(i=>(i.EQUAL="equal",i.GREATER_THAN="greaterThan",i.GREATER_THAN_OR_EQUAL="greaterThanOrEqual",i.LESS_THAN="lessThan",i.LESS_THAN_OR_EQUAL="lessThanOrEqual",i.NOT_EQUALS="notEqual",i))(A||{});const ee={operator:A.GREATER_THAN,fn:(i,n)=>U(i)?i>n:!1},te={operator:A.GREATER_THAN_OR_EQUAL,fn:(i,n)=>U(i)?i>=n:!1},re={operator:A.LESS_THAN,fn:(i,n)=>U(i)?i<n:!1},ne={operator:A.LESS_THAN_OR_EQUAL,fn:(i,n)=>U(i)?i<=n:!1},ie={operator:A.EQUAL,fn:(i,n)=>U(i)?i===n:!1},z={operator:A.NOT_EQUALS,fn:(i,n)=>{if(typeof n=="string"){if(n===" ")return i!=null;const e=le(i);return e&&pe(n)?!a.createREGEXFromWildChar(n).test(e):e!==n}return U(i)?i!==n:!0}},se=new Map([]);[ee,te,re,ne,ie,z].forEach(i=>{se.set(i.operator,i)});function ve(i){return!!i}const Fe={fn:(i,n)=>{const e=le(i);return e===null?n==="":a.createREGEXFromWildChar(n).test(e)}};function V(i){return i?se.get(i):Fe}function U(i){return typeof i=="number"}function oe(i){return!!(typeof i=="number"||typeof i=="string"&&a.isNumeric(i))}function le(i){return typeof i=="boolean"||i==null?null:typeof i=="string"?i:i.toString()}function pe(i){return typeof i=="number"?!1:i.indexOf("*")!==-1||i.indexOf("?")!==-1}const W=()=>new Set;class P extends a.Disposable{constructor(e,t,r){super();v(this,"_filteredOutRows$",new I.BehaviorSubject(W()));v(this,"filteredOutRows$",this._filteredOutRows$.asObservable());v(this,"_hasCriteria$",new I.BehaviorSubject(!1));v(this,"hasCriteria$",this._hasCriteria$.asObservable());v(this,"_filterColumnByIndex",new Map);v(this,"_alreadyFilteredOutRows",W());v(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(),this._worksheet=null}serialize(){const e={ref:a.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?a.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=W(),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 ae(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)=>a.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=a.mergeSets(this._alreadyFilteredOutRows,r))}}}class ae extends a.Disposable{constructor(e,t,r,s,o){super();v(this,"_filteredOutRows",null);v(this,"_filterFn",null);v(this,"_range",null);v(this,"_column",0);v(this,"_filterBy",N.VALUES);this.unitId=e,this.subUnitId=t,this._worksheet=r,this._criteria=s,this._filterColumnContext=o}get filteredOutRows(){return this._filteredOutRows}get filterBy(){return this._filterBy}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 a.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 a.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:d,rowSpan:c,col:m}=l;if(o.has(d)&&(!c||c===1))continue;if(!(this._filterBy===N.VALUES?this._filterFn(a.extractPureTextFromCell(this._worksheet.getCell(d,m))):this._filterBy===N.COLORS?this._filterFn(this._worksheet.getComposedCellStyle(d,m)):this._filterFn(Ne(this._worksheet,d,m)))&&(s.add(d),c))for(let f=1;f<c;f++)s.add(d+f)}return s}_generateFilterFn(){this._criteria&&(this._filterFn=we(this._criteria),this._filterBy=this._criteria.filters?N.VALUES:this._criteria.colorFilters?N.COLORS:N.CONDITIONS)}}function we(i){if(i.filters)return Me(i.filters);if(i.colorFilters)return Ee(i.colorFilters);if(i.customFilters)return ye(i.customFilters);throw new Error("[FilterModel]: other types of filters are not supported yet.")}function Me(i){const n=!!i.blank,e=new Set(i.filters);return t=>t===void 0||t===""?n:e.has(typeof t=="string"?t:`${t}`)}function Ee(i){if(i.cellFillColors){const n=new Set(i.cellFillColors);return e=>{var r;if(!e||!((r=e.bg)!=null&&r.rgb))return!!n.has(null);const t=new a.ColorKit(e.bg.rgb).toRgbString();return n.has(t)}}if(i.cellTextColors){const n=new Set(i.cellTextColors);return e=>{var r;if(!e||!((r=e.cl)!=null&&r.rgb))return!!n.has(Se.COLOR_BLACK_RGB);const t=new a.ColorKit(e.cl.rgb).toRgbString();return n.has(t)}}throw new Error("[FilterModel]: color filters are not supported yet.")}function ye(i){const n=i.customFilters.map(e=>Ae(e));return Te(n)?i.and?Oe(n):Ie(n):n[0]}function Oe(i){const[n,e]=i;return t=>n(t)&&e(t)}function Ie(i){const[n,e]=i;return t=>n(t)||e(t)}function Te(i){return i.length===2}function Ae(i){const n=i.val;if(i.operator===A.NOT_EQUALS&&!oe(n))return r=>z.fn(r,n);if(ve(i.operator)){if(!oe(n))return()=>!1;const r=V(i.operator),s=Number(n);return o=>r.fn(o,s)}const e=V(i.operator);return t=>e.fn(t,n)}function Ne(i,n,e){const t=i.getCell(n,e);if(!t)return null;const r=i.getCellRaw(n,e);return t&&!r?de(t):r?t.t===a.CellValueType.NUMBER&&typeof t.v=="string"?r.v:t.t===a.CellValueType.NUMBER?Number(r.v):de(r):null}function de(i){var t,r;const n=(r=(t=i.p)==null?void 0:t.body)==null?void 0:r.dataStream;if(n)return n.trimEnd();const e=i.v;return typeof e=="string"?i.t===a.CellValueType.BOOLEAN?e.toUpperCase():e:typeof e=="number"?i.t===a.CellValueType.BOOLEAN?e?"TRUE":"FALSE":e:typeof e=="boolean"?e?"TRUE":"FALSE":""}var be=Object.getOwnPropertyDescriptor,Ue=(i,n,e,t)=>{for(var r=t>1?void 0:t?be(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},q=(i,n)=>(e,t)=>n(e,t,i);const k="SHEET_FILTER_PLUGIN";h.SheetsFilterService=class extends a.Disposable{constructor(e,t,r){super();v(this,"_filterModels",new Map);v(this,"_loadedUnitId$",new I.BehaviorSubject(null));v(this,"loadedUnitId$",this._loadedUnitId$.asObservable());v(this,"_errorMsg$",new I.BehaviorSubject(null));v(this,"errorMsg$",this._errorMsg$.asObservable());v(this,"_activeFilterModel$",new I.BehaviorSubject(null));v(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(a.UniverInstanceType.UNIVER_SHEET),!e){this._activeFilterModel$.next(null);return}}catch(l){console.error("[SheetsFilterService]: could not get active workbook!",l);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(I.merge(a.fromCallback(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(I.filter(([e])=>e.type===a.CommandType.MUTATION&&H.has(e.id))),this._univerInstanceService.getCurrentTypeOfUnit$(a.UniverInstanceType.UNIVER_SHEET).pipe(I.switchMap(e=>{var t;return(t=e==null?void 0:e.activeSheet$)!=null?t:I.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)})}dispose(){super.dispose(),this._loadedUnitId$.complete(),this._errorMsg$.complete(),this._activeFilterModel$.complete(),this._filterModels.forEach(e=>{e.forEach(t=>t.dispose()),e.clear()}),this._filterModels.clear()}_initModel(){this._resourcesManagerService.registerPluginResource({pluginName:k,businesses:[a.UniverInstanceType.UNIVER_SHEET],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)}},h.SheetsFilterService=Ue([q(0,a.IResourceManagerService),q(1,a.IUniverInstanceService),q(2,a.ICommandService)],h.SheetsFilterService);const F={id:K,type:a.CommandType.MUTATION,handler:(i,n)=>{const{subUnitId:e,unitId:t,range:r}=n;return i.get(h.SheetsFilterService).ensureFilterModel(t,e).setRange(r),!0}},p={id:Z,type:a.CommandType.MUTATION,handler:(i,n)=>{const{subUnitId:e,unitId:t,criteria:r,col:s,reCalc:o=!0}=n,d=i.get(h.SheetsFilterService).getFilterModel(t,e);return d?(d.setCriteria(s,r,o),!0):!1}},T={id:X,type:a.CommandType.MUTATION,handler:(i,n)=>{const{unitId:e,subUnitId:t}=n;return i.get(h.SheetsFilterService).removeFilterModel(e,t)}},$={id:Y,type:a.CommandType.MUTATION,handler:(i,n)=>{const{unitId:e,subUnitId:t}=n,s=i.get(h.SheetsFilterService).getFilterModel(e,t);return s?(s.reCalc(),!0):!1}},ce={id:"sheet.command.set-filter-range",type:a.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(h.SheetsFilterService),t=i.get(a.ICommandService),r=i.get(a.IUndoRedoService),s=i.get(a.IUniverInstanceService),{unitId:o,subUnitId:l,range:d}=n;if(!_.getSheetCommandTarget(s,n)||e.getFilterModel(o,l))return!1;if(d.endRow===d.startRow){const S=i.get(a.ErrorService),R=i.get(a.LocaleService);return S.emit(R.t("sheets-filter.command.not-valid-filter-range")),!1}const u={id:F.id,params:{unitId:o,subUnitId:l,range:d}},f=t.syncExecuteCommand(u.id,u.params);return f&&r.pushUndoRedo({unitID:o,undoMutations:[{id:T.id,params:{unitId:o,subUnitId:l}}],redoMutations:[u]}),f}},ue={id:"sheet.command.remove-sheet-filter",type:a.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(a.IUniverInstanceService),t=i.get(h.SheetsFilterService),r=i.get(a.ICommandService),s=i.get(a.IUndoRedoService),o=_.getSheetCommandTarget(e,n);if(!o)return!1;const{unitId:l,subUnitId:d}=o,c=t.getFilterModel(l,d);if(!c)return!1;const m=c==null?void 0:c.serialize(),u=Be(l,d,m),f=r.syncExecuteCommand(T.id,{unitId:l,subUnitId:d});return f&&s.pushUndoRedo({unitID:l,undoMutations:u,redoMutations:[{id:T.id,params:{unitId:l,subUnitId:d}}]}),f}},$e={id:"sheet.command.smart-toggle-filter",type:a.CommandType.COMMAND,handler:async i=>{const n=i.get(a.IUniverInstanceService),e=i.get(h.SheetsFilterService),t=i.get(a.ICommandService),r=n.getCurrentUnitForType(a.UniverInstanceType.UNIVER_SHEET),s=r==null?void 0:r.getActiveSheet();if(!s||!r)return!1;const o=r.getUnitId(),l=s.getSheetId();if(e.getFilterModel(o,l))return t.executeCommand(ue.id,{unitId:o,subUnitId:l});const m=i.get(_.SheetsSelectionsService).getCurrentLastSelection();if(!m)return!1;const u=m.range,f=_.isSingleCellSelection(m)?_.expandToContinuousRange(u,{left:!0,right:!0,up:!0,down:!0},s):u;return t.executeCommand(ce.id,{unitId:o,subUnitId:l,range:f})}},Le={id:"sheet.command.set-filter-criteria",type:a.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(h.SheetsFilterService),t=i.get(a.ICommandService),r=i.get(a.IUndoRedoService),{unitId:s,subUnitId:o,col:l,criteria:d}=n,c=e.getFilterModel(s,o);if(!c)return!1;const m=c.getRange();if(!m||l<m.startColumn||l>m.endColumn)return!1;const u=c.getFilterColumn(l),f=xe(s,o,l,u),S={id:p.id,params:{unitId:s,subUnitId:o,col:l,criteria:d}},R=t.syncExecuteCommand(S.id,S.params);return R&&r.pushUndoRedo({unitID:s,undoMutations:[f],redoMutations:[S]}),R}},Pe={id:"sheet.command.clear-filter-criteria",type:a.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(h.SheetsFilterService),t=i.get(a.IUndoRedoService),r=i.get(a.ICommandService),s=i.get(a.IUniverInstanceService),o=_.getSheetCommandTarget(s,n);if(!o)return!1;const{unitId:l,subUnitId:d}=o,c=e.getFilterModel(o.unitId,o.subUnitId);if(!c)return!1;const m=c.serialize(),u=he(l,d,m),f=je(l,d,m);return a.sequenceExecute(f,r).result?(t.pushUndoRedo({unitID:l,undoMutations:u,redoMutations:f}),!0):!1}},De={id:"sheet.command.re-calc-filter",type:a.CommandType.COMMAND,handler:(i,n)=>{const e=i.get(h.SheetsFilterService),t=i.get(a.ICommandService),r=i.get(a.IUniverInstanceService),s=_.getSheetCommandTarget(r,n);if(!s)return!1;const{unitId:o,subUnitId:l}=s;return e.getFilterModel(s.unitId,s.subUnitId)?t.executeCommand($.id,{unitId:o,subUnitId:l}):!1}};function Be(i,n,e){const t=[],r={id:F.id,params:{unitId:i,subUnitId:n,range:e.ref}};return t.push(r),he(i,n,e).forEach(o=>t.push(o)),t}function he(i,n,e){var r;const t=[];return(r=e.filterColumns)==null||r.forEach(s=>{const o={id:p.id,params:{unitId:i,subUnitId:n,col:s.colId,criteria:s}};t.push(o)}),t}function je(i,n,e){var r;const t=[];return(r=e.filterColumns)==null||r.forEach(s=>{const o={id:p.id,params:{unitId:i,subUnitId:n,col:s.colId,criteria:null}};t.push(o)}),t}function xe(i,n,e,t){if(!t)return{id:p.id,params:{unitId:i,subUnitId:n,col:e,criteria:null}};const r=t.serialize();return{id:p.id,params:{unitId:i,subUnitId:n,col:e,criteria:r}}}const me="sheets-filter.config",fe={};function He(i,n){for(let e=0;e<i.length;e++){let t=e;if(i[e])for(let r=e+1;r<i.length;r++)i[t]&&i[r]&&n(i[t],i[r])&&(i[t]=null,t=r)}return i.filter(e=>e!==null)}function L(i){return He(i,(n,e)=>n.id===p.id&&e.id===p.id&&n.params.unitId===e.params.unitId&&n.params.subUnitId===e.params.subUnitId&&n.params.col===e.params.col)}var ze=Object.getOwnPropertyDescriptor,Ve=(i,n,e,t)=>{for(var r=t>1?void 0:t?ze(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},b=(i,n)=>(e,t)=>n(e,t,i);let D=class extends a.Disposable{constructor(n,e,t,r,s,o,l){super();v(this,"_disposableCollection",new a.DisposableCollection);this._commandService=n,this._sheetInterceptorService=e,this._sheetsFilterService=t,this._univerInstanceService=r,this._refRangeService=s,this._dataSyncPrimaryController=o,this._zebraCrossingCacheController=l,this._initCommands(),this._initRowFilteredInterceptor(),this._initInterceptors(),this._commandExecutedListener(),this._initErrorHandling(),this._initZebraCrossingCacheListener()}_initZebraCrossingCacheListener(){this.disposeWithMe(this._sheetsFilterService.activeFilterModel$.subscribe(n=>{n&&this.disposeWithMe(n.filteredOutRows$.subscribe(()=>{this._zebraCrossingCacheController.updateZebraCrossingCache(n.unitId,n.subUnitId)}))}))}_initCommands(){[p,F,$,T].forEach(n=>{var e;this.disposeWithMe(this._commandService.registerCommand(n)),(e=this._dataSyncPrimaryController)==null||e.registerSyncingMutations(n)})}_initInterceptors(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:n=>this._getUpdateFilter(n)})),this.disposeWithMe(this._commandService.onCommandExecuted(n=>{if(n.id===_.SetWorksheetActiveOperation.id){const e=n.params,t=e.subUnitId,r=e.unitId;if(!t||!r)return;this._registerRefRange(r,t)}if(n.id===F.id){const e=n.params,t=e.subUnitId,r=e.unitId;if(!t||!r)return;this._registerRefRange(e.unitId,e.subUnitId)}})),this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe(n=>{if(n){const e=this._univerInstanceService.getUniverSheetInstance(n),t=e==null?void 0:e.getActiveSheet();t&&this._registerRefRange(n,t.getSheetId())}}))}_registerRefRange(n,e){var l;this._disposableCollection.dispose();const t=this._univerInstanceService.getUniverSheetInstance(n),r=t==null?void 0:t.getSheetBySheetId(e);if(!t||!r)return;const s=(l=this._sheetsFilterService.getFilterModel(n,e))==null?void 0:l.getRange(),o=d=>{switch(d.id){case _.InsertRowCommand.id:{const c=d.params,m=c.unitId||n,u=c.subUnitId||e;return this._handleInsertRowCommand(c,m,u)}case _.InsertColCommand.id:{const c=d.params,m=c.unitId||n,u=c.subUnitId||e;return this.handleInsertColCommand(c.range,m,u)}case _.RemoveColCommand.id:{const c=d.params;return this.handleRemoveColCommand(c.range,n,e)}case _.RemoveRowCommand.id:{const c=d.params;return this._handleRemoveRowCommand(c,n,e)}case _.EffectRefRangId.MoveColsCommandId:{const c=d.params;return this.handleMoveColsCommand({fromRange:c.fromRange,toRange:c.toRange},n,e)}case _.EffectRefRangId.MoveRowsCommandId:{const c=d.params;return this._handleMoveRowsCommand(c,n,e)}case _.MoveRangeCommand.id:{const c=d.params;return this._handleMoveRangeCommand(c,n,e)}}return{redos:[],undos:[]}};s&&this._disposableCollection.add(this._refRangeService.registerRefRange(s,o,n,e))}_getUpdateFilter(n){const{id:e}=n;switch(e){case _.RemoveSheetCommand.id:{const t=n.params;return this._handleRemoveSheetCommand(t,t.unitId,t.subUnitId)}case _.CopySheetCommand.id:{const t=n.params,{targetSubUnitId:r,unitId:s,subUnitId:o}=t;return!s||!o||!r?this._handleNull():this._handleCopySheetCommand(s,o,r)}}return{redos:[],undos:[]}}handleInsertColCommand(n,e,t){var g;const r=this._sheetsFilterService.getFilterModel(e,t),s=(g=r==null?void 0:r.getRange())!=null?g:null;if(!r||!s)return this._handleNull();const{startColumn:o,endColumn:l}=s,{startColumn:d,endColumn:c}=n,m=c-d+1;if(c>l)return this._handleNull();const u=[],f=[],S=d,R={unitId:e,subUnitId:t,range:{...s,startColumn:d<=o?o+m:o,endColumn:l+m}},w={unitId:e,subUnitId:t,range:s};u.push({id:F.id,params:R}),f.push({id:F.id,params:w});const M=r.getAllFilterColumns().filter(C=>C[0]>=S);if(M.length!==0){const{newRange:C,oldRange:y}=this._moveCriteria(e,t,M,m);u.push(...y.redos,...C.redos),f.push(...C.undos,...y.undos)}return{redos:L(u),undos:L(f)}}_handleInsertRowCommand(n,e,t){var w;const r=this._sheetsFilterService.getFilterModel(e,t),s=(w=r==null?void 0:r.getRange())!=null?w:null;if(!r||!s)return this._handleNull();const{startRow:o,endRow:l}=s,{startRow:d,endRow:c}=n.range,m=c-d+1;if(c>l)return this._handleNull();const u=[],f=[],S={unitId:e,subUnitId:t,range:{...s,startRow:d<=o?o+m:o,endRow:l+m}},R={unitId:e,subUnitId:t,range:s};return u.push({id:F.id,params:S}),f.push({id:F.id,params:R}),{redos:L(u),undos:L(f)}}handleRemoveColCommand(n,e,t){var M;const r=this._sheetsFilterService.getFilterModel(e,t),s=(M=r==null?void 0:r.getRange())!=null?M:null;if(!r||!s)return this._handleNull();const{startColumn:o,endColumn:l}=s,{startColumn:d,endColumn:c}=n;if(d>l)return this._handleNull();const m=[],u=[],f=c<o?0:Math.min(c,l)-Math.max(d,o)+1,S=c-d+1,R=r.getAllFilterColumns();R.forEach(g=>{const[C,y]=g;C<=c&&C>=d&&(m.push({id:p.id,params:{unitId:e,subUnitId:t,col:C,criteria:null}}),u.push({id:p.id,params:{unitId:e,subUnitId:t,col:C,criteria:{...y.serialize(),colId:C}}}))});const w=R.filter(g=>{const[C,y]=g;return C>c});let E={undos:[],redos:[]};if(w.length>0){const{oldRange:g,newRange:C}=this._moveCriteria(e,t,w,-S);E=C,m.push(...g.redos),u.unshift(...g.undos)}if(f===l-o+1){const g={unitId:e,subUnitId:t};m.push({id:T.id,params:g}),u.unshift({id:F.id,params:{range:s,unitId:e,subUnitId:t}})}else{const g=o<=d?o:f===0?o-S:d,C=o<=d?l-f:l-S,y={unitId:e,subUnitId:t,range:{...s,startColumn:g,endColumn:C}};m.push({id:F.id,params:y}),u.unshift({id:F.id,params:{range:s,unitId:e,subUnitId:t}}),m.push(...E.redos),u.unshift(...E.undos)}return{undos:u,redos:m}}_handleRemoveRowCommand(n,e,t){var w;const r=this._sheetsFilterService.getFilterModel(e,t);if(!r)return this._handleNull();const s=r.getRange(),{startRow:o,endRow:l}=s,{startRow:d,endRow:c}=n.range;if(d>l)return this._handleNull();if(c<o)return{undos:[{id:F.id,params:{range:s,unitId:e,subUnitId:t}}],redos:[{id:F.id,params:{range:{...s,startRow:o-(c-d+1),endRow:l-(c-d+1)},unitId:e,subUnitId:t}}]};const m=[],u=[],f=r.getAllFilterColumns(),S=o<=c&&o>=d;u.push({id:F.id,params:{range:s,unitId:e,subUnitId:t}});const R=Math.min(c,l)-Math.max(d,o)+1;if(R===l-o+1||S){const E={unitId:e,subUnitId:t};m.push({id:T.id,params:E}),f.forEach(M=>{const[g,C]=M,y={unitId:e,subUnitId:t,col:g,criteria:{...C.serialize(),colId:g}};u.push({id:p.id,params:y})})}else{const E=(w=this._univerInstanceService.getUniverSheetInstance(e))==null?void 0:w.getSheetBySheetId(t);if(!E)return this._handleNull();const M=[];for(let O=d;O<=c;O++)E.getRowFiltered(O)&&M.push(O);const g=Math.min(o,d),C=g+(l-o)-R+M.length,y={unitId:e,subUnitId:t,range:{...s,startRow:g,endRow:C}};m.push({id:F.id,params:y})}return{undos:L(u),redos:L(m)}}handleMoveColsCommand({fromRange:n,toRange:e},t,r){var M;const s=this._sheetsFilterService.getFilterModel(t,r),o=(M=s==null?void 0:s.getRange())!=null?M:null;if(!s||!o)return this._handleNull();const{startColumn:l,endColumn:d}=o;if(n.endColumn<l&&e.startColumn<=l||n.startColumn>d&&e.endColumn>d)return this._handleNull();const c=[],m=[],u={};for(let g=l;g<=d;g++)u[g]={colIndex:g,filter:s.getFilterColumn(g)};a.moveMatrixArray(n.startColumn,n.endColumn-n.startColumn+1,e.startColumn,u);let f=o.startColumn,S=o.endColumn;l>=n.startColumn&&l<=n.endColumn&&e.startColumn>n.startColumn&&n.endColumn<d&&(f=n.endColumn+1),d>=n.startColumn&&d<=n.endColumn&&e.startColumn<n.startColumn&&n.startColumn>l&&(S=n.startColumn-1);const R=Object.keys(u).map(g=>Number(g)),w=R.find(g=>u[g].colIndex===S),E=R.find(g=>u[g].colIndex===f);if(R.forEach(g=>{var Ce,_e;const{colIndex:C,filter:y}=u[g],O=g;if(y){if(O>=E&&O<=w){const Q={unitId:t,subUnitId:r,col:O,criteria:{...y.serialize(),colId:O}},Xe={unitId:t,subUnitId:r,col:O,criteria:s.getFilterColumn(O)?{...(Ce=s.getFilterColumn(O))==null?void 0:Ce.serialize(),colId:O}:null};c.push({id:p.id,params:Q}),m.push({id:p.id,params:Xe})}if(!((_e=u[C])!=null&&_e.filter)){const Q={unitId:t,subUnitId:r,col:C,criteria:null};c.push({id:p.id,params:Q}),m.push({id:p.id,params:{unitId:t,subUnitId:r,col:C,criteria:{...y.serialize(),colId:C}}})}}}),l!==E||d!==w){const g={unitId:t,subUnitId:r,range:{...o,startColumn:E,endColumn:w}};c.unshift({id:F.id,params:g}),m.unshift({id:F.id,params:{range:o,unitId:t,subUnitId:r}})}return{undos:m,redos:c}}_handleMoveRowsCommand(n,e,t){var g;const r=this._sheetsFilterService.getFilterModel(e,t),s=(g=r==null?void 0:r.getRange())!=null?g:null;if(!r||!s)return this._handleNull();const{startRow:o,endRow:l}=s,{fromRange:d,toRange:c}=n;if(d.endRow<o&&c.startRow<=o||d.startRow>l&&c.endRow>l)return this._handleNull();const m=[],u=[],f={};for(let C=o;C<=l;C++)f[C]={oldIndex:C};const S=o;let R=l;l>=d.startRow&&l<=d.endRow&&c.startRow<d.startRow&&d.startRow>o&&(R=d.startRow-1),a.moveMatrixArray(d.startRow,d.endRow-d.startRow+1,c.startRow,f);const w=Object.keys(f).map(C=>Number(C)),E=w.find(C=>f[C].oldIndex===R),M=w.find(C=>f[C].oldIndex===S);if(o!==M||l!==E){const C={unitId:e,subUnitId:t,range:{...s,startRow:M,endRow:E}};m.push({id:F.id,params:C},{id:$.id,params:{unitId:e,subUnitId:t}}),u.push({id:F.id,params:{range:s,unitId:e,subUnitId:t}},{id:$.id,params:{unitId:e,subUnitId:t}})}return{redos:m,undos:u}}_handleMoveRangeCommand(n,e,t){const{fromRange:r,toRange:s}=n,o=this._sheetsFilterService.getFilterModel(e,t);if(!o)return this._handleNull();const l=o.getRange();if(!l)return this._handleNull();const d=[],c=[];if(a.Rectangle.contains(r,l)){const m=l.startRow-r.startRow,u=l.startColumn-r.startColumn,f={startRow:s.startRow+m,startColumn:s.startColumn+u,endRow:s.startRow+m+(l.endRow-l.startRow),endColumn:s.startColumn+u+(l.endColumn-l.startColumn)},S={id:T.id,params:{unitId:e,subUnitId:t}},R={id:F.id,params:{unitId:e,subUnitId:t,range:f}},w={id:F.id,params:{unitId:e,subUnitId:t,range:l}};d.push(S,R),c.push(S,w);const E=o.getAllFilterColumns(),M=s.startColumn-r.startColumn;E.forEach(g=>{const[C,y]=g;y&&(d.push({id:p.id,params:{unitId:e,subUnitId:t,col:C+M,criteria:{...y.serialize(),colId:C+M}}}),c.push({id:p.id,params:{unitId:e,subUnitId:t,col:C,criteria:{...y.serialize(),colId:C}}}))})}else if(a.Rectangle.intersects(s,l)){const m={...l,endRow:Math.max(l.endRow,s.endRow)};d.push({id:F.id,params:{unitId:e,subUnitId:t,range:m}}),c.push({id:F.id,params:{unitId:e,subUnitId:t,range:l}})}return{redos:d,undos:c}}_handleRemoveSheetCommand(n,e,t){const r=this._sheetsFilterService.getFilterModel(e,t);if(!r)return this._handleNull();const s=r.getRange();if(!s)return this._handleNull();const o=[],l=[];return r.getAllFilterColumns().forEach(([c,m])=>{l.push({id:p.id,params:{unitId:e,subUnitId:t,col:c,criteria:{...m.serialize(),colId:c}}})}),o.push({id:T.id,params:{unitId:e,subUnitId:t,range:s}}),l.unshift({id:F.id,params:{range:s,unitId:e,subUnitId:t}}),{undos:l,redos:o}}_handleCopySheetCommand(n,e,t){const r=this._sheetsFilterService.getFilterModel(n,e);if(!r)return this._handleNull();const s=r.getRange();if(!s)return this._handleNull();const o=[],l=[],d=[],c=[];return r.getAllFilterColumns().forEach(([u,f])=>{o.push({id:p.id,params:{unitId:n,subUnitId:t,col:u,criteria:{...f.serialize(),colId:u}}}),d.push({id:p.id,params:{unitId:n,subUnitId:t,col:u,criteria:null}})}),d.push({id:T.id,params:{unitId:n,subUnitId:t,range:s}}),o.unshift({id:F.id,params:{range:s,unitId:n,subUnitId:t}}),{undos:l,redos:o,preUndos:d,preRedos:c}}_handleNull(){return{redos:[],undos:[]}}_initRowFilteredInterceptor(){this.disposeWithMe(this._sheetInterceptorService.intercept(_.INTERCEPTOR_POINT.ROW_FILTERED,{handler:(n,e)=>{var t,r;return n?!0:(r=(t=this._sheetsFilterService.getFilterModel(e.unitId,e.subUnitId))==null?void 0:t.isRowFiltered(e.row))!=null?r:!1}}))}_moveCriteria(n,e,t,r){const s={unitId:n,subUnitId:e,criteria:null,col:-1},o=[],l=[],d=[],c=[];return t.forEach(m=>{const[u,f]=m;l.push({id:p.id,params:{...s,col:u}}),o.push({id:p.id,params:{...s,col:u,criteria:{...f.serialize(),colId:u}}})}),t.forEach(m=>{const[u,f]=m;c.push({id:p.id,params:{...s,col:u+r,criteria:{...f.serialize(),colId:u+r}}}),d.push({id:p.id,params:{...s,col:u+r,criteria:null}})}),{newRange:{redos:c,undos:d},oldRange:{redos:l,undos:o}}}_commandExecutedListener(){this.disposeWithMe(this._commandService.onCommandExecuted((n,e)=>{var c,m;const{unitId:t,subUnitId:r}=n.params||{},s=this._sheetsFilterService.getFilterModel(t,r);if(!s)return;const o=Array.from(s.filteredOutRows).sort((u,f)=>u-f),l=[];let d=!1;if(n.id===_.RemoveRowMutation.id){const{startRow:u,endRow:f}=n.params.range,S=o.filter(R=>R>=u&&R<=f);o.forEach(R=>{if(R<u)l.push(R);else if(d=!0,R<=f){const w=Math.max(u,l.length?l[l.length-1]+1:u);l.push(w)}else l.push(R-(f-u+1-S.length))})}if(n.id===_.InsertRowMutation.id){const{startRow:u,endRow:f}=n.params.range;o.forEach(S=>{S>=u?(d=!0,l.push(S+(f-u+1))):l.push(S)})}if(d&&(s.filteredOutRows=new Set(l)),n.id===_.SetRangeValuesMutation.id&&!(e!=null&&e.onlyLocal)){const u=this._getExtendRegion(t,r);if(u){const f=n.params.cellValue;if(f)for(let S=u.startColumn;S<=u.endColumn;S++){const R=(c=f==null?void 0:f[u.startRow])==null?void 0:c[S];if(R&&this._cellHasValue(R)){const w=(m=this._univerInstanceService.getUnit(t))==null?void 0:m.getSheetBySheetId(r);if(w){const E=_.expandToContinuousRange(u,{down:!0},w),M=this._sheetsFilterService.getFilterModel(t,r),g=M.getRange();M.setRange({...g,endRow:E.endRow}),this._registerRefRange(t,r)}}}}}}))}_getExtendRegion(n,e){var d;const t=this._sheetsFilterService.getFilterModel(n,e);if(!t)return null;const r=(d=this._univerInstanceService.getUnit(n))==null?void 0:d.getSheetBySheetId(e);if(!r)return null;const s=t.getRange();if(!s)return null;const o=r.getRowCount()-1,l=r.getRowManager();for(let c=s.endRow+1;c<=o;c++)if(l.getRowRawVisible(c))return{startRow:c,endRow:c,startColumn:s.startColumn,endColumn:s.endColumn};return null}_initErrorHandling(){this.disposeWithMe(this._commandService.beforeCommandExecuted(n=>{const e=n.params,t=_.getSheetCommandTarget(this._univerInstanceService);if(!t)return;const{subUnitId:r,unitId:s}=t,o=this._sheetsFilterService.getFilterModel(s,r);if(!o)return;const l=o.getRange();if(n.id===_.MoveRowsCommand.id&&e.fromRange.startRow<=l.startRow&&e.fromRange.endRow<l.endRow&&e.fromRange.endRow>=l.startRow)throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"),new Error("[SheetsFilterController]: Cannot move header row of filter")}))}_cellHasValue(n){const e=Object.values(n);return!(e.length===0||e.every(t=>t==null))}};D=Ve([b(0,a.ICommandService),b(1,a.Inject(_.SheetInterceptorService)),b(2,a.Inject(h.SheetsFilterService)),b(3,a.IUniverInstanceService),b(4,a.Inject(_.RefRangeService)),b(5,a.Optional(Re.DataSyncPrimaryController)),b(6,a.Inject(_.ZebraCrossingCacheController))],D);var We=Object.getOwnPropertyDescriptor,qe=(i,n,e,t)=>{for(var r=t>1?void 0:t?We(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},G=(i,n)=>(e,t)=>n(e,t,i);const ke=[p.id,$.id],Ge=[_.InsertColMutation.id,_.RemoveColMutation.id,_.MoveColsMutation.id];h.SheetsFilterSyncController=class extends a.Disposable{constructor(e,t,r){super();v(this,"_d",new a.DisposableCollection);v(this,"_visible$",new I.BehaviorSubject(!1));v(this,"visible$",this._visible$.asObservable());v(this,"_enabled$",new I.BehaviorSubject(!0));v(this,"enabled$",this._enabled$.asObservable());this._sheetsFilterController=e,this._commandService=t,this._configService=r;const s=this._configService.getConfig(me);s!=null&&s.enableSyncSwitch&&this._visible$.next(!0)}get visible(){return this._visible$.getValue()}get enabled(){return this._enabled$.getValue()}setEnabled(e){this._enabled$.next(e),e?this._d.dispose():this._initOnlyLocalListener()}_initOnlyLocalListener(){this._d.add(this._commandService.beforeCommandExecuted((e,t)=>{ke.includes(e.id)&&(t||(t={}),t.onlyLocal=!0)})),this._d.add(this._commandService.onCommandExecuted((e,t)=>{if(Ge.includes(e.id)&&(t!=null&&t.fromCollab)){if(e.id===_.InsertColMutation.id){const{range:r,unitId:s,subUnitId:o}=e.params,{redos:l}=this._sheetsFilterController.handleInsertColCommand(r,s,o);a.sequenceExecute(l,this._commandService,t)}else if(e.id===_.RemoveColMutation.id){const{range:r,unitId:s,subUnitId:o}=e.params,{redos:l}=this._sheetsFilterController.handleRemoveColCommand(r,s,o);a.sequenceExecute(l,this._commandService,t)}else if(e.id===_.MoveColsMutation.id){const{sourceRange:r,targetRange:s,unitId:o,subUnitId:l}=e.params,{redos:d}=this._sheetsFilterController.handleMoveColsCommand({fromRange:r,toRange:s},o,l);a.sequenceExecute(d,this._commandService,t)}}}))}},h.SheetsFilterSyncController=qe([G(0,a.Inject(D)),G(1,a.ICommandService),G(2,a.IConfigService)],h.SheetsFilterSyncController);var Qe=Object.getOwnPropertyDescriptor,Je=(i,n,e,t)=>{for(var r=t>1?void 0:t?Qe(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},B=(i,n)=>(e,t)=>n(e,t,i);let j=class extends a.Disposable{constructor(i,n,e,t){super(),this._activeDirtyManagerService=i,this._sheetRowFilteredService=n,this._sheetsFilterService=e,this._univerInstanceService=t,this._initFormulaDirtyRange(),this._registerSheetRowFiltered()}_initFormulaDirtyRange(){H.forEach(i=>{this._activeDirtyManagerService.register(i,{commandId:i,getDirtyData:n=>{const e=n.params,{unitId:t,subUnitId:r}=e;return{dirtyRanges:this._getHideRowMutation(t,r),clearDependencyTreeCache:{[t]:{[r]:"1"}}}}})})}_getHideRowMutation(i,n){var l,d;const e=(l=this._sheetsFilterService.getFilterModel(i,n))==null?void 0:l.getRange(),t=(d=this._univerInstanceService.getUnit(i))==null?void 0:d.getSheetBySheetId(n);if(e==null||t==null)return[];const{startRow:r,endRow:s}=e;return[{unitId:i,sheetId:n,range:{startRow:r,startColumn:0,endRow:s,endColumn:t.getColumnCount()-1}}]}_registerSheetRowFiltered(){this._sheetRowFilteredService.register((i,n,e)=>{var t,r;return(r=(t=this._sheetsFilterService.getFilterModel(i,n))==null?void 0:t.isRowFiltered(e))!=null?r:!1})}};j=Je([B(0,a.Inject(J.IActiveDirtyManagerService)),B(1,a.Inject(J.ISheetRowFilteredService)),B(2,a.Inject(h.SheetsFilterService)),B(3,a.IUniverInstanceService)],j);var Ke=Object.getOwnPropertyDescriptor,Ze=(i,n,e,t)=>{for(var r=t>1?void 0:t?Ke(n,e):n,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=o(r)||r);return r},ge=(i,n)=>(e,t)=>n(e,t,i);h.UniverSheetsFilterPlugin=(x=class extends a.Plugin{constructor(n=fe,e,t){super(),this._config=n,this._injector=e,this._configService=t;const{...r}=a.merge({},fe,this._config);this._configService.setConfig(me,r)}onStarting(){[[j],[h.SheetsFilterService],[D],[h.SheetsFilterSyncController]].forEach(n=>this._injector.add(n))}onReady(){a.touchDependencies(this._injector,[[j],[D],[h.SheetsFilterSyncController]])}},v(x,"type",a.UniverInstanceType.UNIVER_SHEET),v(x,"pluginName",k),x),h.UniverSheetsFilterPlugin=Ze([ge(1,a.Inject(a.Injector)),ge(2,a.IConfigService)],h.UniverSheetsFilterPlugin),h.ClearSheetsFilterCriteriaCommand=Pe,h.CustomFilterOperator=A,h.FILTER_MUTATIONS=H,h.FilterBy=N,h.FilterColumn=ae,h.FilterModel=P,h.ReCalcSheetsFilterCommand=De,h.ReCalcSheetsFilterMutation=$,h.RemoveSheetFilterCommand=ue,h.RemoveSheetsFilterMutation=T,h.SHEET_FILTER_SNAPSHOT_ID=k,h.SetSheetFilterRangeCommand=ce,h.SetSheetsFilterCriteriaCommand=Le,h.SetSheetsFilterCriteriaMutation=p,h.SetSheetsFilterRangeMutation=F,h.SmartToggleSheetsFilterCommand=$e,h.equals=ie,h.getCustomFilterFn=V,h.greaterThan=ee,h.greaterThanOrEqualTo=te,h.lessThan=re,h.lessThanOrEqualTo=ne,h.notEquals=z,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@univerjs/sheets-filter",
3
- "version": "0.10.10",
3
+ "version": "0.10.11",
4
4
  "private": false,
5
5
  "description": "A library for filtering data in Univer Sheet",
6
6
  "author": "DreamNum <developer@univer.ai>",
@@ -56,18 +56,18 @@
56
56
  "rxjs": ">=7.0.0"
57
57
  },
58
58
  "dependencies": {
59
- "@univerjs/core": "0.10.10",
60
- "@univerjs/engine-formula": "0.10.10",
61
- "@univerjs/engine-render": "0.10.10",
62
- "@univerjs/rpc": "0.10.10",
63
- "@univerjs/sheets": "0.10.10"
59
+ "@univerjs/engine-formula": "0.10.11",
60
+ "@univerjs/engine-render": "0.10.11",
61
+ "@univerjs/rpc": "0.10.11",
62
+ "@univerjs/sheets": "0.10.11",
63
+ "@univerjs/core": "0.10.11"
64
64
  },
65
65
  "devDependencies": {
66
66
  "rxjs": "^7.8.2",
67
- "typescript": "^5.9.2",
68
- "vite": "^7.1.4",
67
+ "typescript": "^5.9.3",
68
+ "vite": "^7.1.10",
69
69
  "vitest": "^3.2.4",
70
- "@univerjs-infra/shared": "0.10.10"
70
+ "@univerjs-infra/shared": "0.10.11"
71
71
  },
72
72
  "scripts": {
73
73
  "test": "vitest run",