@univerjs/sheets-filter 0.2.9 → 0.2.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 __defProp=Object.defineProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!="symbol"?key+"":key,value);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const core=require("@univerjs/core"),rxjs=require("rxjs"),sheets=require("@univerjs/sheets");var CustomFilterOperator=(CustomFilterOperator2=>(CustomFilterOperator2.EQUAL="equal",CustomFilterOperator2.GREATER_THAN="greaterThan",CustomFilterOperator2.GREATER_THAN_OR_EQUAL="greaterThanOrEqual",CustomFilterOperator2.LESS_THAN="lessThan",CustomFilterOperator2.LESS_THAN_OR_EQUAL="lessThanOrEqual",CustomFilterOperator2.NOT_EQUALS="notEqual",CustomFilterOperator2))(CustomFilterOperator||{});const greaterThan={operator:CustomFilterOperator.GREATER_THAN,fn:__name((value,compare)=>ensureNumber(value)?value>compare:!1,"fn")},greaterThanOrEqualTo={operator:CustomFilterOperator.GREATER_THAN_OR_EQUAL,fn:__name((value,compare)=>ensureNumber(value)?value>=compare:!1,"fn")},lessThan={operator:CustomFilterOperator.LESS_THAN,fn:__name((value,compare)=>ensureNumber(value)?value<compare:!1,"fn")},lessThanOrEqualTo={operator:CustomFilterOperator.LESS_THAN_OR_EQUAL,fn:__name((value,compare)=>ensureNumber(value)?value<=compare:!1,"fn")},equals={operator:CustomFilterOperator.EQUAL,fn:__name((value,compare)=>ensureNumber(value)?value===compare:!1,"fn")},notEquals={operator:CustomFilterOperator.NOT_EQUALS,fn:__name((value,compare)=>{if(typeof compare=="string"){if(compare===" ")return value!=null;const ensuredString=ensureString(value);return ensuredString&&isWildCardString(compare)?!createREGEXFromWildChar(compare).test(ensuredString):ensuredString!==compare}return ensureNumber(value)?value!==compare:!0},"fn")},CustomFilterFnRegistry=new Map([]),ALL_CUSTOM_FILTER_FUNCTIONS=[greaterThan,greaterThanOrEqualTo,lessThan,lessThanOrEqualTo,equals,notEquals];ALL_CUSTOM_FILTER_FUNCTIONS.forEach(fn=>{CustomFilterFnRegistry.set(fn.operator,fn)});function isNumericFilterFn(operator){return!!operator}__name(isNumericFilterFn,"isNumericFilterFn");const textMatch={fn:__name((value,compare)=>{const ensured=ensureString(value);return ensured===null?compare==="":createREGEXFromWildChar(compare).test(ensured)},"fn")};function getCustomFilterFn(operator){return operator?CustomFilterFnRegistry.get(operator):textMatch}__name(getCustomFilterFn,"getCustomFilterFn");function ensureNumber(value){return typeof value=="number"}__name(ensureNumber,"ensureNumber");function ensureNumeric(value){return!!(typeof value=="number"||typeof value=="string"&&core.isNumeric(value))}__name(ensureNumeric,"ensureNumeric");function ensureString(value){return typeof value=="boolean"||value==null?null:typeof value=="string"?value:value.toString()}__name(ensureString,"ensureString");function isWildCardString(str){return typeof str=="number"?!1:str.indexOf("*")!==-1||str.indexOf("?")!==-1}__name(isWildCardString,"isWildCardString");function createREGEXFromWildChar(wildChar){const regexpStr=wildChar.replace(/[.+^${}()|[\]\\]/g,"\\$&").replaceAll("?",".").replace(/[*]/g,".$&");return new RegExp(`^${regexpStr}$`)}__name(createREGEXFromWildChar,"createREGEXFromWildChar");const EMPTY=__name(()=>new Set,"EMPTY"),_FilterModel=class _FilterModel extends core.Disposable{constructor(unitId,subUnitId,_worksheet){super();__publicField(this,"_filteredOutRows$",new rxjs.BehaviorSubject(EMPTY()));__publicField(this,"filteredOutRows$",this._filteredOutRows$.asObservable());__publicField(this,"_hasCriteria$",new rxjs.BehaviorSubject(!1));__publicField(this,"hasCriteria$",this._hasCriteria$.asObservable());__publicField(this,"_filterColumnByIndex",new Map);__publicField(this,"_alreadyFilteredOutRows",EMPTY());__publicField(this,"_range");this.unitId=unitId,this.subUnitId=subUnitId,this._worksheet=_worksheet}get filteredOutRows(){return this._filteredOutRows$.getValue()}set filteredOutRows(rows){this._alreadyFilteredOutRows=rows,this._filteredOutRows$.next(rows)}dispose(){super.dispose(),this._filteredOutRows$.complete(),this._hasCriteria$.complete()}serialize(){const result={ref:core.Rectangle.clone(this._range),filterColumns:this._getAllFilterColumns(!0).sort(([offset1],[offset2])=>offset1-offset2).map(([_,filterColumn])=>filterColumn.serialize())};return this._alreadyFilteredOutRows&&(result.cachedFilteredOut=Array.from(this._alreadyFilteredOutRows).sort()),result}static deserialize(unitId,subUnitId,worksheet,autoFilter){const filterModel=new _FilterModel(unitId,subUnitId,worksheet);return filterModel._dump(autoFilter),filterModel}_dump(autoFilter){var _a4;this.setRange(autoFilter.ref),(_a4=autoFilter.filterColumns)==null||_a4.forEach(filterColumn=>this._setCriteriaWithoutReCalc(filterColumn.colId,filterColumn)),autoFilter.cachedFilteredOut&&(this._alreadyFilteredOutRows=new Set(autoFilter.cachedFilteredOut),this._emit()),this._emitHasCriteria()}isRowFiltered(row){return this._alreadyFilteredOutRows.has(row)}getRange(){if(!this._range)throw new Error("[FilterModel] could not get range before a range is set!");return this._range}getFilteredOutRowsExceptCol(col){return this._getAllFilterColumns(!0).filter(([colOffset])=>colOffset!==col).reduce((acc,[,filterColumn])=>{const newResult=filterColumn.calc({getAlreadyFilteredOutRows:__name(()=>acc,"getAlreadyFilteredOutRows")});return newResult?core.mergeSets(acc,newResult):acc},new Set)}setRange(range){this._range=range,this._getAllFilterColumns(!0).forEach(([col,filterColumn])=>{filterColumn.setRangeAndColumn({startRow:range.startRow,endRow:range.endRow,startColumn:col,endColumn:col},col)})}setCriteria(col,criteria,reCalc=!1){if(!this._range)throw new Error("[FilterModel] could not set criteria before a range is set!");if(!criteria){this._removeCriteria(col),this._rebuildAlreadyFilteredOutRowsWithCache(),reCalc&&this._reCalcAllColumns(),this._emit(),this._emitHasCriteria();return}this._setCriteriaWithoutReCalc(col,criteria),reCalc&&(this._rebuildAlreadyFilteredOutRowsWithCache(),this._reCalcWithNoCacheColumns(),this._emit(),this._emitHasCriteria())}getAllFilterColumns(){return this._getAllFilterColumns(!0)}getFilterColumn(index){var _a4;return(_a4=this._filterColumnByIndex.get(index))!=null?_a4:null}reCalc(){this._reCalcAllColumns(),this._emit()}_getAllFilterColumns(withCol=!1){const columns=Array.from(this._filterColumnByIndex.entries());return withCol?columns:columns.map(([_,filterColumn])=>filterColumn)}_reCalcAllColumns(){this._alreadyFilteredOutRows=EMPTY(),this._getAllFilterColumns().forEach(filterColumn=>filterColumn.__clearCache()),this._reCalcWithNoCacheColumns()}_setCriteriaWithoutReCalc(col,criteria){const range=this._range;if(!range)throw new Error("[FilterModel] could not set criteria before a range is set!");const{startColumn,endColumn}=range;if(col>endColumn||col<startColumn)throw new Error(`[FilterModel] could not set criteria on column ${col} which is out of range!`);let filterColumn;this._filterColumnByIndex.has(col)?filterColumn=this._filterColumnByIndex.get(col):(filterColumn=new FilterColumn(this.unitId,this.subUnitId,this._worksheet,criteria,{getAlreadyFilteredOutRows:__name(()=>this._alreadyFilteredOutRows,"getAlreadyFilteredOutRows")}),filterColumn.setRangeAndColumn(range,col),this._filterColumnByIndex.set(col,filterColumn)),filterColumn.setCriteria(criteria)}_removeCriteria(col){const filterColumn=this._filterColumnByIndex.get(col);filterColumn&&(filterColumn.dispose(),this._filterColumnByIndex.delete(col))}_emit(){this._filteredOutRows$.next(this._alreadyFilteredOutRows)}_emitHasCriteria(){this._hasCriteria$.next(this._filterColumnByIndex.size>0)}_rebuildAlreadyFilteredOutRowsWithCache(){const newFilteredOutRows=this._getAllFilterColumns().filter(filterColumn=>filterColumn.hasCache()).reduce((acc,filterColumn)=>core.mergeSets(acc,filterColumn.filteredOutRows),new Set);this._alreadyFilteredOutRows=newFilteredOutRows}_reCalcWithNoCacheColumns(){const noCacheFilteredOutRows=this._getAllFilterColumns().filter(filterColumn=>!filterColumn.hasCache());for(const filterColumn of noCacheFilteredOutRows){const filteredRows=filterColumn.reCalc();filteredRows&&(this._alreadyFilteredOutRows=core.mergeSets(this._alreadyFilteredOutRows,filteredRows))}}};__name(_FilterModel,"FilterModel");let FilterModel=_FilterModel;const _FilterColumn=class _FilterColumn extends core.Disposable{constructor(unitId,subUnitId,_worksheet,_criteria,_filterColumnContext){super();__publicField(this,"_filteredOutRows",null);__publicField(this,"_filterFn",null);__publicField(this,"_range",null);__publicField(this,"_column",0);__publicField(this,"_filterByValues",!1);this.unitId=unitId,this.subUnitId=subUnitId,this._worksheet=_worksheet,this._criteria=_criteria,this._filterColumnContext=_filterColumnContext}get filteredOutRows(){return this._filteredOutRows}dispose(){super.dispose(),this._filteredOutRows=null}__clearCache(){this._filteredOutRows=null}serialize(){if(!this._criteria)throw new Error("[FilterColumn]: could not serialize without a filter column!");return core.Tools.deepClone({...this._criteria,colId:this._column})}hasCache(){return this._filteredOutRows!==null}setRangeAndColumn(range,column){this._range=range,this._column=column}setCriteria(criteria){this._criteria=criteria,this._generateFilterFn(),this._filteredOutRows=null}getColumnData(){return core.Tools.deepClone(this._criteria)}reCalc(){return this._filteredOutRows=this.calc(this._filterColumnContext),this._filteredOutRows}calc(context){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 column=this._column,iterateRange={startColumn:column,endColumn:column,startRow:this._range.startRow+1,endRow:this._range.endRow},filteredOutRows=new Set,filteredOutByOthers=context.getAlreadyFilteredOutRows();for(const range of this._worksheet.iterateByColumn(iterateRange,!1,!1)){const{row,rowSpan,col}=range;if(filteredOutByOthers.has(row)&&(!rowSpan||rowSpan===1))continue;const value=this._filterByValues?core.extractPureTextFromCell(this._worksheet.getCell(row,col)):getFilterValueForConditionalFiltering(this._worksheet,row,col);if(!this._filterFn(value)&&(filteredOutRows.add(row),rowSpan))for(let i=1;i<rowSpan;i++)filteredOutRows.add(row+i)}return filteredOutRows}_generateFilterFn(){this._criteria&&(this._filterFn=generateFilterFn(this._criteria),this._filterByValues=!!this._criteria.filters)}};__name(_FilterColumn,"FilterColumn");let FilterColumn=_FilterColumn;function generateFilterFn(column){if(column.filters)return filterByValuesFnFactory(column.filters);if(column.customFilters)return customFilterFnFactory(column.customFilters);throw new Error("[FilterModel]: other types of filters are not supported yet.")}__name(generateFilterFn,"generateFilterFn");function filterByValuesFnFactory(values){const includeBlank=!!values.blank,valuesSet=new Set(values.filters);return value=>value===void 0||value===""?includeBlank:valuesSet.has(typeof value=="string"?value:`${value}`)}__name(filterByValuesFnFactory,"filterByValuesFnFactory");function customFilterFnFactory(customFilters){const customFilterFns=customFilters.customFilters.map(filter=>generateCustomFilterFn(filter));return isCompoundCustomFilter(customFilterFns)?customFilters.and?AND(customFilterFns):OR(customFilterFns):customFilterFns[0]}__name(customFilterFnFactory,"customFilterFnFactory");function AND(filterFns){const[fn1,fn2]=filterFns;return value=>fn1(value)&&fn2(value)}__name(AND,"AND");function OR(filterFns){const[fn1,fn2]=filterFns;return value=>fn1(value)||fn2(value)}__name(OR,"OR");function isCompoundCustomFilter(filter){return filter.length===2}__name(isCompoundCustomFilter,"isCompoundCustomFilter");function generateCustomFilterFn(filter){const compare=filter.val;if(filter.operator===CustomFilterOperator.NOT_EQUALS&&!ensureNumeric(compare))return value=>notEquals.fn(value,compare);if(isNumericFilterFn(filter.operator)){if(!ensureNumeric(compare))return()=>!1;const customFilterFn2=getCustomFilterFn(filter.operator),ensuredNumber=Number(compare);return value=>customFilterFn2.fn(value,ensuredNumber)}const customFilterFn=getCustomFilterFn(filter.operator);return value=>customFilterFn.fn(value,compare)}__name(generateCustomFilterFn,"generateCustomFilterFn");function getFilterValueForConditionalFiltering(worksheet,row,col){const interceptedCell=worksheet.getCell(row,col);if(!interceptedCell)return null;const rawCell=worksheet.getCellRaw(row,col);return interceptedCell&&!rawCell?extractFilterValueFromCell(interceptedCell):rawCell?interceptedCell.t===core.CellValueType.NUMBER&&typeof interceptedCell.v=="string"?rawCell.v:extractFilterValueFromCell(rawCell):null}__name(getFilterValueForConditionalFiltering,"getFilterValueForConditionalFiltering");function extractFilterValueFromCell(cell){var _a4,_b;const richTextValue=(_b=(_a4=cell.p)==null?void 0:_a4.body)==null?void 0:_b.dataStream;if(richTextValue)return richTextValue.trimEnd();const rawValue=cell.v;return typeof rawValue=="string"?cell.t===core.CellValueType.BOOLEAN?rawValue.toUpperCase():rawValue:typeof rawValue=="number"?cell.t===core.CellValueType.BOOLEAN?rawValue?"TRUE":"FALSE":rawValue:typeof rawValue=="boolean"?rawValue?"TRUE":"FALSE":""}__name(extractFilterValueFromCell,"extractFilterValueFromCell");const SetSheetsFilterRangeMutation={id:"sheet.mutation.set-filter-range",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{subUnitId,unitId,range}=params;return accessor.get(exports.SheetsFilterService).ensureFilterModel(unitId,subUnitId).setRange(range),!0},"handler")},SetSheetsFilterCriteriaMutation={id:"sheet.mutation.set-filter-criteria",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{subUnitId,unitId,criteria,col,reCalc=!0}=params,filterModel=accessor.get(exports.SheetsFilterService).getFilterModel(unitId,subUnitId);return filterModel?(filterModel.setCriteria(col,criteria,reCalc),!0):!1},"handler")},RemoveSheetsFilterMutation={id:"sheet.mutation.remove-filter",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{unitId,subUnitId}=params;return accessor.get(exports.SheetsFilterService).removeFilterModel(unitId,subUnitId)},"handler")},ReCalcSheetsFilterMutation={id:"sheet.mutation.re-calc-filter",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{unitId,subUnitId}=params,filterModel=accessor.get(exports.SheetsFilterService).getFilterModel(unitId,subUnitId);return filterModel?(filterModel.reCalc(),!0):!1},"handler")};var __defProp$2=Object.defineProperty,__getOwnPropDesc$2=Object.getOwnPropertyDescriptor,__decorateClass$2=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$2(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$2(target,key,result),result},"__decorateClass$2"),__decorateParam$2=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$2");const FILTER_MUTATIONS=new Set([SetSheetsFilterRangeMutation.id,SetSheetsFilterCriteriaMutation.id,RemoveSheetsFilterMutation.id,ReCalcSheetsFilterMutation.id]),SHEET_FILTER_SNAPSHOT_ID="SHEET_FILTER_PLUGIN";var _a;exports.SheetsFilterService=(_a=class extends core.Disposable{constructor(_resourcesManagerService,_univerInstanceService,_commandService){super();__publicField(this,"_filterModels",new Map);__publicField(this,"_loadedUnitId$",new rxjs.BehaviorSubject(null));__publicField(this,"loadedUnitId$",this._loadedUnitId$.asObservable());__publicField(this,"_errorMsg$",new rxjs.BehaviorSubject(null));__publicField(this,"errorMsg$",this._errorMsg$.asObservable());__publicField(this,"_activeFilterModel$",new rxjs.BehaviorSubject(null));__publicField(this,"activeFilterModel$",this._activeFilterModel$.asObservable());this._resourcesManagerService=_resourcesManagerService,this._univerInstanceService=_univerInstanceService,this._commandService=_commandService,this._initModel(),this._initActiveFilterModel()}get activeFilterModel(){return this._activeFilterModel$.getValue()}ensureFilterModel(unitId,subUnitId){const already=this.getFilterModel(unitId,subUnitId);if(already)return already;const workbook=this._univerInstanceService.getUniverSheetInstance(unitId);if(!workbook)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing workbook ${unitId}!`);const worksheet=workbook.getSheetBySheetId(subUnitId);if(!worksheet)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing worksheet ${subUnitId}!`);const filterModel=new FilterModel(unitId,subUnitId,worksheet);return this._cacheFilterModel(unitId,subUnitId,filterModel),filterModel}getFilterModel(unitId,subUnitId){var _a4,_b;return(_b=(_a4=this._filterModels.get(unitId))==null?void 0:_a4.get(subUnitId))!=null?_b:null}removeFilterModel(unitId,subUnitId){const already=this.getFilterModel(unitId,subUnitId);return already?(already.dispose(),this._filterModels.get(unitId).delete(subUnitId),!0):!1}setFilterErrorMsg(content){this._errorMsg$.next(content)}_updateActiveFilterModel(){let workbook;try{if(workbook=this._univerInstanceService.getCurrentUnitForType(core.UniverInstanceType.UNIVER_SHEET),!workbook){this._activeFilterModel$.next(null);return}}catch{return}const activeSheet=workbook.getActiveSheet(!0);if(!activeSheet){this._activeFilterModel$.next(null);return}const unitId=activeSheet.getUnitId(),subUnitId=activeSheet.getSheetId(),filterModel=this.getFilterModel(unitId,subUnitId);this._activeFilterModel$.next(filterModel)}_initActiveFilterModel(){this.disposeWithMe(rxjs.merge(core.fromCallback(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(rxjs.filter(([command])=>command.type===core.CommandType.MUTATION&&FILTER_MUTATIONS.has(command.id))),this._univerInstanceService.getCurrentTypeOfUnit$(core.UniverInstanceType.UNIVER_SHEET).pipe(rxjs.switchMap(workbook=>{var _a4;return(_a4=workbook==null?void 0:workbook.activeSheet$)!=null?_a4:rxjs.of(null)}))).subscribe(()=>this._updateActiveFilterModel()))}_serializeAutoFiltersForUnit(unitId){const allFilterModels=this._filterModels.get(unitId);if(!allFilterModels)return"{}";const json={};return allFilterModels.forEach((model,worksheetId)=>{json[worksheetId]=model.serialize()}),JSON.stringify(json)}_deserializeAutoFiltersForUnit(unitId,json){const workbook=this._univerInstanceService.getUniverSheetInstance(unitId);Object.keys(json).forEach(worksheetId=>{const autoFilter=json[worksheetId],filterModel=FilterModel.deserialize(unitId,worksheetId,workbook.getSheetBySheetId(worksheetId),autoFilter);this._cacheFilterModel(unitId,worksheetId,filterModel)})}_initModel(){this._resourcesManagerService.registerPluginResource({pluginName:SHEET_FILTER_SNAPSHOT_ID,businesses:[2],toJson:__name(id=>this._serializeAutoFiltersForUnit(id),"toJson"),parseJson:__name(json=>JSON.parse(json),"parseJson"),onLoad:__name((unitId,value)=>{this._deserializeAutoFiltersForUnit(unitId,value),this._loadedUnitId$.next(unitId),this._updateActiveFilterModel()},"onLoad"),onUnLoad:__name(unitId=>{const allFilterModels=this._filterModels.get(unitId);allFilterModels&&(allFilterModels.forEach(model=>model.dispose()),this._filterModels.delete(unitId))},"onUnLoad")})}_cacheFilterModel(unitId,subUnitId,filterModel){this._filterModels.has(unitId)||this._filterModels.set(unitId,new Map),this._filterModels.get(unitId).set(subUnitId,filterModel)}},__name(_a,"SheetsFilterService"),_a);exports.SheetsFilterService=__decorateClass$2([__decorateParam$2(0,core.IResourceManagerService),__decorateParam$2(1,core.IUniverInstanceService),__decorateParam$2(2,core.ICommandService)],exports.SheetsFilterService);function objectsShaker(target,isEqual){for(let i=0;i<target.length;i++){let cur=i;if(target[i])for(let j=i+1;j<target.length;j++)target[cur]&&target[j]&&isEqual(target[cur],target[j])&&(target[cur]=null,cur=j)}return target.filter(o=>o!==null)}__name(objectsShaker,"objectsShaker");function mergeSetFilterCriteria(mutations){return objectsShaker(mutations,(o1,o2)=>o1.id===SetSheetsFilterCriteriaMutation.id&&o2.id===SetSheetsFilterCriteriaMutation.id&&o1.params.unitId===o2.params.unitId&&o1.params.subUnitId===o2.params.subUnitId&&o1.params.col===o2.params.col)}__name(mergeSetFilterCriteria,"mergeSetFilterCriteria");var __defProp$1=Object.defineProperty,__getOwnPropDesc$1=Object.getOwnPropertyDescriptor,__decorateClass$1=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$1(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$1(target,key,result),result},"__decorateClass$1"),__decorateParam$1=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$1"),_a2;let SheetsFilterController=(_a2=class extends core.Disposable{constructor(_commandService,_sheetInterceptorService,_sheetsFilterService,_univerInstanceService,_refRangeService){super(),this._commandService=_commandService,this._sheetInterceptorService=_sheetInterceptorService,this._sheetsFilterService=_sheetsFilterService,this._univerInstanceService=_univerInstanceService,this._refRangeService=_refRangeService,this._initCommands(),this._initRowFilteredInterceptor(),this._initInterceptors(),this._commandExecutedListener(),this._initErrorHandling()}_initCommands(){[SetSheetsFilterCriteriaMutation,SetSheetsFilterRangeMutation,ReCalcSheetsFilterMutation,RemoveSheetsFilterMutation].forEach(command=>this.disposeWithMe(this._commandService.registerCommand(command)))}_initInterceptors(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:__name(command=>this._getUpdateFilter(command),"getMutations")}));const disposableCollection=new core.DisposableCollection,registerRefRange=__name((unitId,subUnitId)=>{var _a4;const workbook=this._univerInstanceService.getUniverSheetInstance(unitId);if(!workbook||!(workbook==null?void 0:workbook.getSheetBySheetId(subUnitId)))return;disposableCollection.dispose();const range=(_a4=this._sheetsFilterService.getFilterModel(unitId,subUnitId))==null?void 0:_a4.getRange(),handler=__name(config=>{switch(config.id){case sheets.InsertRowCommand.id:{const params=config.params,_unitId=params.unitId||unitId,_subUnitId=params.subUnitId||subUnitId;return this._handleInsertRowCommand(params,_unitId,_subUnitId)}case sheets.InsertColCommand.id:{const params=config.params,_unitId=params.unitId||unitId,_subUnitId=params.subUnitId||subUnitId;return this._handleInsertColCommand(params,_unitId,_subUnitId)}case sheets.RemoveColCommand.id:{const params=config.params;return this._handleRemoveColCommand(params,unitId,subUnitId)}case sheets.RemoveRowCommand.id:{const params=config.params;return this._handleRemoveRowCommand(params,unitId,subUnitId)}case sheets.EffectRefRangId.MoveColsCommandId:{const params=config.params;return this._handleMoveColsCommand(params,unitId,subUnitId)}case sheets.EffectRefRangId.MoveRowsCommandId:{const params=config.params;return this._handleMoveRowsCommand(params,unitId,subUnitId)}case sheets.MoveRangeCommand.id:{const params=config.params;return this._handleMoveRangeCommand(params,unitId,subUnitId)}}return{redos:[],undos:[]}},"handler");range&&disposableCollection.add(this._refRangeService.registerRefRange(range,handler,unitId,subUnitId))},"registerRefRange");this.disposeWithMe(this._commandService.onCommandExecuted(commandInfo=>{if(commandInfo.id===sheets.SetWorksheetActivateCommand.id){const params=commandInfo.params,sheetId=params.subUnitId,unitId=params.unitId;if(!sheetId||!unitId)return;registerRefRange(unitId,sheetId)}if(commandInfo.id===SetSheetsFilterRangeMutation.id){const params=commandInfo.params,sheetId=params.subUnitId,unitId=params.unitId;if(!sheetId||!unitId)return;registerRefRange(params.unitId,params.subUnitId)}})),this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe(unitId=>{if(unitId){const workbook=this._univerInstanceService.getUniverSheetInstance(unitId),sheet=workbook==null?void 0:workbook.getActiveSheet();sheet&&registerRefRange(unitId,sheet.getSheetId())}}))}_getUpdateFilter(command){const{id}=command;switch(id){case sheets.RemoveSheetCommand.id:{const params=command.params;return this._handleRemoveSheetCommand(params,params.unitId,params.subUnitId)}}return{redos:[],undos:[]}}_handleInsertColCommand(config,unitId,subUnitId){var _a4;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a4=filterModel==null?void 0:filterModel.getRange())!=null?_a4:null;if(!filterModel||!filterRange)return this._handleNull();const{startColumn,endColumn}=filterRange,{startColumn:insertStartColumn,endColumn:insertEndColumn}=config.range,count=insertEndColumn-insertStartColumn+1;if(insertEndColumn>endColumn)return this._handleNull();const redos=[],undos=[],anchor=insertStartColumn,setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startColumn:insertStartColumn<=startColumn?startColumn+count:startColumn,endColumn:endColumn+count}},undoSetFilterRangeMutationParams={unitId,subUnitId,range:filterRange};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams}),undos.push({id:SetSheetsFilterRangeMutation.id,params:undoSetFilterRangeMutationParams});const effected=filterModel.getAllFilterColumns().filter(column=>column[0]>=anchor);if(effected.length!==0){const{undos:moveUndos,redos:moveRedos}=this.moveCriteria(unitId,subUnitId,effected,count);redos.push(...moveRedos),undos.push(...moveUndos)}return{redos:mergeSetFilterCriteria(redos),undos:mergeSetFilterCriteria(undos)}}_handleInsertRowCommand(config,unitId,subUnitId){var _a4;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a4=filterModel==null?void 0:filterModel.getRange())!=null?_a4:null;if(!filterModel||!filterRange)return this._handleNull();const{startRow,endRow}=filterRange,{startRow:insertStartRow,endRow:insertEndRow}=config.range,rowCount=insertEndRow-insertStartRow+1;if(insertEndRow>endRow)return this._handleNull();const redos=[],undos=[],setFilterRangeParams={unitId,subUnitId,range:{...filterRange,startRow:insertStartRow<=startRow?startRow+rowCount:startRow,endRow:endRow+rowCount}},undoSetFilterRangeMutationParams={unitId,subUnitId,range:filterRange};return redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeParams}),undos.push({id:SetSheetsFilterRangeMutation.id,params:undoSetFilterRangeMutationParams}),{redos:mergeSetFilterCriteria(redos),undos:mergeSetFilterCriteria(undos)}}_handleRemoveColCommand(config,unitId,subUnitId){var _a4;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a4=filterModel==null?void 0:filterModel.getRange())!=null?_a4:null;if(!filterModel||!filterRange)return this._handleNull();const{startColumn,endColumn}=filterRange,{startColumn:removeStartColumn,endColumn:removeEndColumn}=config.range;if(removeStartColumn>endColumn)return this._handleNull();const redos=[],undos=[],rangeRemoveCount=removeEndColumn<startColumn?0:Math.min(removeEndColumn,endColumn)-Math.max(removeStartColumn,startColumn)+1,removeCount=removeEndColumn-removeStartColumn+1,filterColumn=filterModel.getAllFilterColumns();filterColumn.forEach(column=>{const[col,filter]=column;col<=removeEndColumn&&col>=removeStartColumn&&(redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:null}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:{...filter.serialize(),colId:col}}}))});const shifted=filterColumn.filter(column=>{const[col,_]=column;return col>removeEndColumn});if(shifted.length>0){const{undos:moveUndos,redos:moveRedos}=this.moveCriteria(unitId,subUnitId,shifted,-removeCount);redos.push(...moveRedos),undos.push(...moveUndos)}if(rangeRemoveCount===endColumn-startColumn+1){const removeFilterRangeMutationParams={unitId,subUnitId};redos.push({id:RemoveSheetsFilterMutation.id,params:removeFilterRangeMutationParams})}else if(startColumn<=removeStartColumn){const finalEndColumn=endColumn-rangeRemoveCount,setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,endColumn:finalEndColumn}};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams})}else{const setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startColumn:removeStartColumn,endColumn:endColumn-(removeEndColumn-removeStartColumn+1)}};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams})}return undos.push({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}}),{undos:mergeSetFilterCriteria(undos),redos:mergeSetFilterCriteria(redos)}}_handleRemoveRowCommand(config,unitId,subUnitId){var _a4;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return this._handleNull();const filterRange=filterModel.getRange(),{startRow,endRow}=filterRange,{startRow:removeStartRow,endRow:removeEndRow}=config.range;if(removeStartRow>endRow)return this._handleNull();const redos=[],undos=[],filterColumn=filterModel.getAllFilterColumns(),filterHeaderIsRemoved=startRow<=removeEndRow&&startRow>=removeStartRow;undos.push({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}});const count=Math.min(removeEndRow,endRow)-Math.max(removeStartRow,startRow)+1;if(count===endRow-startRow+1||filterHeaderIsRemoved){const removeFilterRangeMutationParams={unitId,subUnitId};redos.push({id:RemoveSheetsFilterMutation.id,params:removeFilterRangeMutationParams}),filterColumn.forEach(column=>{const[offset,filter]=column,setCriteriaMutationParams={unitId,subUnitId,col:offset,criteria:{...filter.serialize(),colId:offset}};undos.push({id:SetSheetsFilterCriteriaMutation.id,params:setCriteriaMutationParams})})}else{const worksheet=(_a4=this._univerInstanceService.getUniverSheetInstance(unitId))==null?void 0:_a4.getSheetBySheetId(subUnitId);if(!worksheet)return this._handleNull();const hiddenRows=[];for(let r=removeStartRow;r<=removeEndRow;r++)worksheet.getRowFiltered(r)&&hiddenRows.push(r);const afterStartRow=Math.min(startRow,removeStartRow),afterEndRow=afterStartRow+(endRow-startRow)-count+hiddenRows.length,setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startRow:afterStartRow,endRow:afterEndRow}};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams})}return{undos:mergeSetFilterCriteria(undos),redos:mergeSetFilterCriteria(redos)}}_handleMoveColsCommand(config,unitId,subUnitId){var _a4;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a4=filterModel==null?void 0:filterModel.getRange())!=null?_a4:null;if(!filterModel||!filterRange)return this._handleNull();const{startColumn,endColumn}=filterRange,{fromRange,toRange}=config;if(fromRange.endColumn<startColumn&&toRange.startColumn<=startColumn||fromRange.startColumn>endColumn&&toRange.endColumn>endColumn)return this._handleNull();const redos=[],undos=[],filterCol={};for(let col=startColumn;col<=endColumn;col++)filterCol[col]={colIndex:col,filter:filterModel.getFilterColumn(col)};core.moveMatrixArray(fromRange.startColumn,fromRange.endColumn-fromRange.startColumn+1,toRange.startColumn,filterCol);let startBorder=filterRange.startColumn,endBorder=filterRange.endColumn;startColumn>=fromRange.startColumn&&startColumn<=fromRange.endColumn&&toRange.startColumn>fromRange.startColumn&&fromRange.endColumn<endColumn&&(startBorder=fromRange.endColumn+1),endColumn>=fromRange.startColumn&&endColumn<=fromRange.endColumn&&toRange.startColumn<fromRange.startColumn&&fromRange.startColumn>startColumn&&(endBorder=fromRange.startColumn-1);const numberCols=Object.keys(filterCol).map(col=>Number(col)),newEnd=numberCols.find(col=>filterCol[col].colIndex===endBorder),newStart=numberCols.find(col=>filterCol[col].colIndex===startBorder);if(numberCols.forEach(col=>{var _a5,_b;const{colIndex:oldColIndex,filter}=filterCol[col],newColIndex=col;if(filter){if(newColIndex>=newStart&&newColIndex<=newEnd){const setCriteriaMutationParams={unitId,subUnitId,col:newColIndex,criteria:{...filter.serialize(),colId:newColIndex}};redos.push({id:SetSheetsFilterCriteriaMutation.id,params:setCriteriaMutationParams}),undos.push({id:RemoveSheetsFilterMutation.id,params:{unitId,subUnitId,col:newColIndex,criteria:{...(_a5=filterModel.getFilterColumn(newColIndex))==null?void 0:_a5.serialize(),colId:newColIndex}}})}if(!((_b=filterCol[oldColIndex])!=null&&_b.filter)){const setCriteriaMutationParams={unitId,subUnitId,col:oldColIndex,criteria:null};redos.push({id:SetSheetsFilterCriteriaMutation.id,params:setCriteriaMutationParams}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col:oldColIndex,criteria:{...filter.serialize(),colId:oldColIndex}}})}}}),startColumn!==newStart||endColumn!==newEnd){const setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startColumn:newStart,endColumn:newEnd}};redos.unshift({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams}),undos.push({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}})}return{undos,redos}}_handleMoveRowsCommand(config,unitId,subUnitId){var _a4;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a4=filterModel==null?void 0:filterModel.getRange())!=null?_a4:null;if(!filterModel||!filterRange)return this._handleNull();const{startRow,endRow}=filterRange,{fromRange,toRange}=config;if(fromRange.endRow<startRow&&toRange.startRow<=startRow||fromRange.startRow>endRow&&toRange.endRow>endRow)return this._handleNull();const redos=[],undos=[],filterRow={};for(let row=startRow;row<=endRow;row++)filterRow[row]={oldIndex:row};const startBorder=startRow;let endBorder=endRow;endRow>=fromRange.startRow&&endRow<=fromRange.endRow&&toRange.startRow<fromRange.startRow&&fromRange.startRow>startRow&&(endBorder=fromRange.startRow-1),core.moveMatrixArray(fromRange.startRow,fromRange.endRow-fromRange.startRow+1,toRange.startRow,filterRow);const numberRows=Object.keys(filterRow).map(row=>Number(row)),newEnd=numberRows.find(row=>filterRow[row].oldIndex===endBorder),newStart=numberRows.find(row=>filterRow[row].oldIndex===startBorder);if(startRow!==newStart||endRow!==newEnd){const setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startRow:newStart,endRow:newEnd}};redos.unshift({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams}),undos.push({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}})}return{redos,undos}}_handleMoveRangeCommand(config,unitId,subUnitId){const{fromRange,toRange}=config,filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return this._handleNull();const filterRange=filterModel.getRange();if(!filterRange)return this._handleNull();const redos=[],undos=[];if(core.Rectangle.contains(fromRange,filterRange)){const rowOffset=filterRange.startRow-fromRange.startRow,colOffset=filterRange.startColumn-fromRange.startColumn,newFilterRange={startRow:toRange.startRow+rowOffset,startColumn:toRange.startColumn+colOffset,endRow:toRange.startRow+rowOffset+(filterRange.endRow-filterRange.startRow),endColumn:toRange.startColumn+colOffset+(filterRange.endColumn-filterRange.startColumn)},removeFilter={id:RemoveSheetsFilterMutation.id,params:{unitId,subUnitId}},setNewFilterRange={id:SetSheetsFilterRangeMutation.id,params:{unitId,subUnitId,range:newFilterRange}},setOldFilterRange={id:SetSheetsFilterRangeMutation.id,params:{unitId,subUnitId,range:filterRange}};redos.push(removeFilter,setNewFilterRange),undos.push(removeFilter,setOldFilterRange);const filterColumn=filterModel.getAllFilterColumns(),moveColDelta=toRange.startColumn-fromRange.startColumn;filterColumn.forEach(column=>{const[col,criteria]=column;criteria&&(redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col:col+moveColDelta,criteria:{...criteria.serialize(),colId:col+moveColDelta}}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:{...criteria.serialize(),colId:col}}}))})}return{redos,undos}}_handleRemoveSheetCommand(config,unitId,subUnitId){const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return this._handleNull();const filterRange=filterModel.getRange();if(!filterRange)return this._handleNull();const redos=[],undos=[];return filterModel.getAllFilterColumns().forEach(col=>{const[_,filter]=col;undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:{...filter.serialize(),colId:col}}})}),redos.push({id:RemoveSheetsFilterMutation.id,params:{unitId,subUnitId,range:filterRange}}),undos.unshift({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}}),{undos,redos}}_handleNull(){return{redos:[],undos:[]}}_initRowFilteredInterceptor(){this.disposeWithMe(this._sheetInterceptorService.intercept(sheets.INTERCEPTOR_POINT.ROW_FILTERED,{handler:__name((filtered,rowLocation)=>{var _a4,_b;return filtered?!0:(_b=(_a4=this._sheetsFilterService.getFilterModel(rowLocation.unitId,rowLocation.subUnitId))==null?void 0:_a4.isRowFiltered(rowLocation.row))!=null?_b:!1},"handler")}))}moveCriteria(unitId,subUnitId,target,step){const defaultSetCriteriaMutationParams={unitId,subUnitId,criteria:null,col:-1},undos=[],redos=[];return target.forEach(column=>{const[offset,filter]=column;redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset,criteria:{...filter.serialize(),colId:offset}}})}),target.forEach(column=>{const[offset,filter]=column;redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset+step,criteria:{...filter.serialize(),colId:offset+step}}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset+step,criteria:null}})}),{redos,undos}}_commandExecutedListener(){this.disposeWithMe(this._commandService.onCommandExecuted((command,options)=>{var _a4,_b;const{unitId,subUnitId}=command.params||{},filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return;const filteredOutRows=Array.from(filterModel.filteredOutRows).sort((a,b)=>a-b),newFilteredOutRows=[];let changed=!1;if(command.id===sheets.RemoveRowMutation.id){const{startRow,endRow}=command.params.range,filterOutInRemove=filteredOutRows.filter(row=>row>=startRow&&row<=endRow);filteredOutRows.forEach(row=>{if(row<startRow)newFilteredOutRows.push(row);else if(changed=!0,row<=endRow){const newIndex=Math.max(startRow,newFilteredOutRows.length?newFilteredOutRows[newFilteredOutRows.length-1]+1:startRow);newFilteredOutRows.push(newIndex)}else newFilteredOutRows.push(row-(endRow-startRow+1-filterOutInRemove.length))})}if(command.id===sheets.InsertRowMutation.id){const{startRow,endRow}=command.params.range;filteredOutRows.forEach(row=>{row>=startRow?(changed=!0,newFilteredOutRows.push(row+(endRow-startRow+1))):newFilteredOutRows.push(row)})}if(changed&&(filterModel.filteredOutRows=new Set(newFilteredOutRows)),command.id===sheets.SetRangeValuesMutation.id&&!(options!=null&&options.fromCollab)&&!(options!=null&&options.onlyLocal)){const extendRegion=this._getExtendRegion(unitId,subUnitId);if(extendRegion){const cellValue=command.params.cellValue;if(cellValue)for(let col=extendRegion.startColumn;col<=extendRegion.endColumn;col++){const cell=(_a4=cellValue==null?void 0:cellValue[extendRegion.startRow])==null?void 0:_a4[col];if(cell&&Object.keys(cell).length!==0){const worksheet=(_b=this._univerInstanceService.getUnit(unitId))==null?void 0:_b.getSheetBySheetId(subUnitId);if(worksheet){const extendedRange=sheets.expandToContinuousRange(extendRegion,{down:!0},worksheet),filterModel2=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=filterModel2.getRange();filterModel2.setRange({...filterRange,endRow:extendedRange.endRow})}}}}}}))}_getExtendRegion(unitId,subUnitId){var _a4;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return null;const worksheet=(_a4=this._univerInstanceService.getUnit(unitId))==null?void 0:_a4.getSheetBySheetId(subUnitId);if(!worksheet)return null;const filterRange=filterModel.getRange();if(!filterRange)return null;const maxRowIndex=worksheet.getRowCount()-1,rowManager=worksheet.getRowManager();for(let row=filterRange.endRow+1;row<=maxRowIndex;row++)if(rowManager.getRowRawVisible(row))return{startRow:row,endRow:row,startColumn:filterRange.startColumn,endColumn:filterRange.endColumn};return null}_initErrorHandling(){this.disposeWithMe(this._commandService.beforeCommandExecuted(command=>{const params=command.params,target=sheets.getSheetCommandTarget(this._univerInstanceService);if(!target)return;const{subUnitId,unitId}=target,filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return;const filterRange=filterModel.getRange();if(command.id===sheets.MoveRowsCommand.id&&params.fromRange.startRow<=filterRange.startRow&&params.fromRange.endRow<filterRange.endRow)throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"),new Error("[SheetsFilterController]: Cannot move header row of filter")}))}},__name(_a2,"SheetsFilterController"),_a2);SheetsFilterController=__decorateClass$1([__decorateParam$1(0,core.ICommandService),__decorateParam$1(1,core.Inject(sheets.SheetInterceptorService)),__decorateParam$1(2,core.Inject(exports.SheetsFilterService)),__decorateParam$1(3,core.IUniverInstanceService),__decorateParam$1(4,core.Inject(sheets.RefRangeService))],SheetsFilterController);var __defProp2=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__decorateClass=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp2(target,key,result),result},"__decorateClass"),__decorateParam=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam"),_a3;exports.UniverSheetsFilterPlugin=(_a3=class extends core.Plugin{constructor(_config,_injector){super(),this._injector=_injector}onStarting(){[[exports.SheetsFilterService],[SheetsFilterController]].forEach(d=>this._injector.add(d))}onReady(){this._injector.get(SheetsFilterController)}},__name(_a3,"UniverSheetsFilterPlugin"),__publicField(_a3,"type",core.UniverInstanceType.UNIVER_SHEET),__publicField(_a3,"pluginName",SHEET_FILTER_SNAPSHOT_ID),_a3);exports.UniverSheetsFilterPlugin=__decorateClass([__decorateParam(1,core.Inject(core.Injector))],exports.UniverSheetsFilterPlugin);exports.CustomFilterOperator=CustomFilterOperator;exports.FILTER_MUTATIONS=FILTER_MUTATIONS;exports.FilterColumn=FilterColumn;exports.FilterModel=FilterModel;exports.ReCalcSheetsFilterMutation=ReCalcSheetsFilterMutation;exports.RemoveSheetsFilterMutation=RemoveSheetsFilterMutation;exports.SHEET_FILTER_SNAPSHOT_ID=SHEET_FILTER_SNAPSHOT_ID;exports.SetSheetsFilterCriteriaMutation=SetSheetsFilterCriteriaMutation;exports.SetSheetsFilterRangeMutation=SetSheetsFilterRangeMutation;exports.equals=equals;exports.getCustomFilterFn=getCustomFilterFn;exports.greaterThan=greaterThan;exports.greaterThanOrEqualTo=greaterThanOrEqualTo;exports.lessThan=lessThan;exports.lessThanOrEqualTo=lessThanOrEqualTo;exports.notEquals=notEquals;
1
+ "use strict";var __defProp=Object.defineProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!="symbol"?key+"":key,value);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const core=require("@univerjs/core"),rxjs=require("rxjs"),sheets=require("@univerjs/sheets");var CustomFilterOperator=(CustomFilterOperator2=>(CustomFilterOperator2.EQUAL="equal",CustomFilterOperator2.GREATER_THAN="greaterThan",CustomFilterOperator2.GREATER_THAN_OR_EQUAL="greaterThanOrEqual",CustomFilterOperator2.LESS_THAN="lessThan",CustomFilterOperator2.LESS_THAN_OR_EQUAL="lessThanOrEqual",CustomFilterOperator2.NOT_EQUALS="notEqual",CustomFilterOperator2))(CustomFilterOperator||{});const greaterThan={operator:CustomFilterOperator.GREATER_THAN,fn:__name((value,compare)=>ensureNumber(value)?value>compare:!1,"fn")},greaterThanOrEqualTo={operator:CustomFilterOperator.GREATER_THAN_OR_EQUAL,fn:__name((value,compare)=>ensureNumber(value)?value>=compare:!1,"fn")},lessThan={operator:CustomFilterOperator.LESS_THAN,fn:__name((value,compare)=>ensureNumber(value)?value<compare:!1,"fn")},lessThanOrEqualTo={operator:CustomFilterOperator.LESS_THAN_OR_EQUAL,fn:__name((value,compare)=>ensureNumber(value)?value<=compare:!1,"fn")},equals={operator:CustomFilterOperator.EQUAL,fn:__name((value,compare)=>ensureNumber(value)?value===compare:!1,"fn")},notEquals={operator:CustomFilterOperator.NOT_EQUALS,fn:__name((value,compare)=>{if(typeof compare=="string"){if(compare===" ")return value!=null;const ensuredString=ensureString(value);return ensuredString&&isWildCardString(compare)?!createREGEXFromWildChar(compare).test(ensuredString):ensuredString!==compare}return ensureNumber(value)?value!==compare:!0},"fn")},CustomFilterFnRegistry=new Map([]),ALL_CUSTOM_FILTER_FUNCTIONS=[greaterThan,greaterThanOrEqualTo,lessThan,lessThanOrEqualTo,equals,notEquals];ALL_CUSTOM_FILTER_FUNCTIONS.forEach(fn=>{CustomFilterFnRegistry.set(fn.operator,fn)});function isNumericFilterFn(operator){return!!operator}__name(isNumericFilterFn,"isNumericFilterFn");const textMatch={fn:__name((value,compare)=>{const ensured=ensureString(value);return ensured===null?compare==="":createREGEXFromWildChar(compare).test(ensured)},"fn")};function getCustomFilterFn(operator){return operator?CustomFilterFnRegistry.get(operator):textMatch}__name(getCustomFilterFn,"getCustomFilterFn");function ensureNumber(value){return typeof value=="number"}__name(ensureNumber,"ensureNumber");function ensureNumeric(value){return!!(typeof value=="number"||typeof value=="string"&&core.isNumeric(value))}__name(ensureNumeric,"ensureNumeric");function ensureString(value){return typeof value=="boolean"||value==null?null:typeof value=="string"?value:value.toString()}__name(ensureString,"ensureString");function isWildCardString(str){return typeof str=="number"?!1:str.indexOf("*")!==-1||str.indexOf("?")!==-1}__name(isWildCardString,"isWildCardString");function createREGEXFromWildChar(wildChar){const regexpStr=wildChar.replace(/[.+^${}()|[\]\\]/g,"\\$&").replaceAll("?",".").replace(/[*]/g,".$&");return new RegExp(`^${regexpStr}$`)}__name(createREGEXFromWildChar,"createREGEXFromWildChar");const EMPTY=__name(()=>new Set,"EMPTY"),_FilterModel=class _FilterModel extends core.Disposable{constructor(unitId,subUnitId,_worksheet){super();__publicField(this,"_filteredOutRows$",new rxjs.BehaviorSubject(EMPTY()));__publicField(this,"filteredOutRows$",this._filteredOutRows$.asObservable());__publicField(this,"_hasCriteria$",new rxjs.BehaviorSubject(!1));__publicField(this,"hasCriteria$",this._hasCriteria$.asObservable());__publicField(this,"_filterColumnByIndex",new Map);__publicField(this,"_alreadyFilteredOutRows",EMPTY());__publicField(this,"_range");this.unitId=unitId,this.subUnitId=subUnitId,this._worksheet=_worksheet}get filteredOutRows(){return this._filteredOutRows$.getValue()}set filteredOutRows(rows){this._alreadyFilteredOutRows=rows,this._filteredOutRows$.next(rows)}dispose(){super.dispose(),this._filteredOutRows$.complete(),this._hasCriteria$.complete()}serialize(){const result={ref:core.Rectangle.clone(this._range),filterColumns:this._getAllFilterColumns(!0).sort(([offset1],[offset2])=>offset1-offset2).map(([_,filterColumn])=>filterColumn.serialize())};return this._alreadyFilteredOutRows&&(result.cachedFilteredOut=Array.from(this._alreadyFilteredOutRows).sort()),result}static deserialize(unitId,subUnitId,worksheet,autoFilter){const filterModel=new _FilterModel(unitId,subUnitId,worksheet);return filterModel._dump(autoFilter),filterModel}_dump(autoFilter){var _a4;this.setRange(autoFilter.ref),(_a4=autoFilter.filterColumns)==null||_a4.forEach(filterColumn=>this._setCriteriaWithoutReCalc(filterColumn.colId,filterColumn)),autoFilter.cachedFilteredOut&&(this._alreadyFilteredOutRows=new Set(autoFilter.cachedFilteredOut),this._emit()),this._emitHasCriteria()}isRowFiltered(row){return this._alreadyFilteredOutRows.has(row)}getRange(){if(!this._range)throw new Error("[FilterModel] could not get range before a range is set!");return this._range}getFilteredOutRowsExceptCol(col){return this._getAllFilterColumns(!0).filter(([colOffset])=>colOffset!==col).reduce((acc,[,filterColumn])=>{const newResult=filterColumn.calc({getAlreadyFilteredOutRows:__name(()=>acc,"getAlreadyFilteredOutRows")});return newResult?core.mergeSets(acc,newResult):acc},new Set)}setRange(range){this._range=range,this._getAllFilterColumns(!0).forEach(([col,filterColumn])=>{filterColumn.setRangeAndColumn({startRow:range.startRow,endRow:range.endRow,startColumn:col,endColumn:col},col)})}setCriteria(col,criteria,reCalc=!1){if(!this._range)throw new Error("[FilterModel] could not set criteria before a range is set!");if(!criteria){this._removeCriteria(col),this._rebuildAlreadyFilteredOutRowsWithCache(),reCalc&&this._reCalcAllColumns(),this._emit(),this._emitHasCriteria();return}this._setCriteriaWithoutReCalc(col,criteria),reCalc&&(this._rebuildAlreadyFilteredOutRowsWithCache(),this._reCalcWithNoCacheColumns(),this._emit(),this._emitHasCriteria())}getAllFilterColumns(){return this._getAllFilterColumns(!0)}getFilterColumn(index){var _a4;return(_a4=this._filterColumnByIndex.get(index))!=null?_a4:null}reCalc(){this._reCalcAllColumns(),this._emit()}_getAllFilterColumns(withCol=!1){const columns=Array.from(this._filterColumnByIndex.entries());return withCol?columns:columns.map(([_,filterColumn])=>filterColumn)}_reCalcAllColumns(){this._alreadyFilteredOutRows=EMPTY(),this._getAllFilterColumns().forEach(filterColumn=>filterColumn.__clearCache()),this._reCalcWithNoCacheColumns()}_setCriteriaWithoutReCalc(col,criteria){const range=this._range;if(!range)throw new Error("[FilterModel] could not set criteria before a range is set!");const{startColumn,endColumn}=range;if(col>endColumn||col<startColumn)throw new Error(`[FilterModel] could not set criteria on column ${col} which is out of range!`);let filterColumn;this._filterColumnByIndex.has(col)?filterColumn=this._filterColumnByIndex.get(col):(filterColumn=new FilterColumn(this.unitId,this.subUnitId,this._worksheet,criteria,{getAlreadyFilteredOutRows:__name(()=>this._alreadyFilteredOutRows,"getAlreadyFilteredOutRows")}),filterColumn.setRangeAndColumn(range,col),this._filterColumnByIndex.set(col,filterColumn)),filterColumn.setCriteria(criteria)}_removeCriteria(col){const filterColumn=this._filterColumnByIndex.get(col);filterColumn&&(filterColumn.dispose(),this._filterColumnByIndex.delete(col))}_emit(){this._filteredOutRows$.next(this._alreadyFilteredOutRows)}_emitHasCriteria(){this._hasCriteria$.next(this._filterColumnByIndex.size>0)}_rebuildAlreadyFilteredOutRowsWithCache(){const newFilteredOutRows=this._getAllFilterColumns().filter(filterColumn=>filterColumn.hasCache()).reduce((acc,filterColumn)=>core.mergeSets(acc,filterColumn.filteredOutRows),new Set);this._alreadyFilteredOutRows=newFilteredOutRows}_reCalcWithNoCacheColumns(){const noCacheFilteredOutRows=this._getAllFilterColumns().filter(filterColumn=>!filterColumn.hasCache());for(const filterColumn of noCacheFilteredOutRows){const filteredRows=filterColumn.reCalc();filteredRows&&(this._alreadyFilteredOutRows=core.mergeSets(this._alreadyFilteredOutRows,filteredRows))}}};__name(_FilterModel,"FilterModel");let FilterModel=_FilterModel;const _FilterColumn=class _FilterColumn extends core.Disposable{constructor(unitId,subUnitId,_worksheet,_criteria,_filterColumnContext){super();__publicField(this,"_filteredOutRows",null);__publicField(this,"_filterFn",null);__publicField(this,"_range",null);__publicField(this,"_column",0);__publicField(this,"_filterByValues",!1);this.unitId=unitId,this.subUnitId=subUnitId,this._worksheet=_worksheet,this._criteria=_criteria,this._filterColumnContext=_filterColumnContext}get filteredOutRows(){return this._filteredOutRows}dispose(){super.dispose(),this._filteredOutRows=null}__clearCache(){this._filteredOutRows=null}serialize(){if(!this._criteria)throw new Error("[FilterColumn]: could not serialize without a filter column!");return core.Tools.deepClone({...this._criteria,colId:this._column})}hasCache(){return this._filteredOutRows!==null}setRangeAndColumn(range,column){this._range=range,this._column=column}setCriteria(criteria){this._criteria=criteria,this._generateFilterFn(),this._filteredOutRows=null}getColumnData(){return core.Tools.deepClone(this._criteria)}reCalc(){return this._filteredOutRows=this.calc(this._filterColumnContext),this._filteredOutRows}calc(context){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 column=this._column,iterateRange={startColumn:column,endColumn:column,startRow:this._range.startRow+1,endRow:this._range.endRow},filteredOutRows=new Set,filteredOutByOthers=context.getAlreadyFilteredOutRows();for(const range of this._worksheet.iterateByColumn(iterateRange,!1,!1)){const{row,rowSpan,col}=range;if(filteredOutByOthers.has(row)&&(!rowSpan||rowSpan===1))continue;const value=this._filterByValues?core.extractPureTextFromCell(this._worksheet.getCell(row,col)):getFilterValueForConditionalFiltering(this._worksheet,row,col);if(!this._filterFn(value)&&(filteredOutRows.add(row),rowSpan))for(let i=1;i<rowSpan;i++)filteredOutRows.add(row+i)}return filteredOutRows}_generateFilterFn(){this._criteria&&(this._filterFn=generateFilterFn(this._criteria),this._filterByValues=!!this._criteria.filters)}};__name(_FilterColumn,"FilterColumn");let FilterColumn=_FilterColumn;function generateFilterFn(column){if(column.filters)return filterByValuesFnFactory(column.filters);if(column.customFilters)return customFilterFnFactory(column.customFilters);throw new Error("[FilterModel]: other types of filters are not supported yet.")}__name(generateFilterFn,"generateFilterFn");function filterByValuesFnFactory(values){const includeBlank=!!values.blank,valuesSet=new Set(values.filters);return value=>value===void 0||value===""?includeBlank:valuesSet.has(typeof value=="string"?value:`${value}`)}__name(filterByValuesFnFactory,"filterByValuesFnFactory");function customFilterFnFactory(customFilters){const customFilterFns=customFilters.customFilters.map(filter=>generateCustomFilterFn(filter));return isCompoundCustomFilter(customFilterFns)?customFilters.and?AND(customFilterFns):OR(customFilterFns):customFilterFns[0]}__name(customFilterFnFactory,"customFilterFnFactory");function AND(filterFns){const[fn1,fn2]=filterFns;return value=>fn1(value)&&fn2(value)}__name(AND,"AND");function OR(filterFns){const[fn1,fn2]=filterFns;return value=>fn1(value)||fn2(value)}__name(OR,"OR");function isCompoundCustomFilter(filter){return filter.length===2}__name(isCompoundCustomFilter,"isCompoundCustomFilter");function generateCustomFilterFn(filter){const compare=filter.val;if(filter.operator===CustomFilterOperator.NOT_EQUALS&&!ensureNumeric(compare))return value=>notEquals.fn(value,compare);if(isNumericFilterFn(filter.operator)){if(!ensureNumeric(compare))return()=>!1;const customFilterFn2=getCustomFilterFn(filter.operator),ensuredNumber=Number(compare);return value=>customFilterFn2.fn(value,ensuredNumber)}const customFilterFn=getCustomFilterFn(filter.operator);return value=>customFilterFn.fn(value,compare)}__name(generateCustomFilterFn,"generateCustomFilterFn");function getFilterValueForConditionalFiltering(worksheet,row,col){const interceptedCell=worksheet.getCell(row,col);if(!interceptedCell)return null;const rawCell=worksheet.getCellRaw(row,col);return interceptedCell&&!rawCell?extractFilterValueFromCell(interceptedCell):rawCell?interceptedCell.t===core.CellValueType.NUMBER&&typeof interceptedCell.v=="string"?rawCell.v:extractFilterValueFromCell(rawCell):null}__name(getFilterValueForConditionalFiltering,"getFilterValueForConditionalFiltering");function extractFilterValueFromCell(cell){var _a4,_b;const richTextValue=(_b=(_a4=cell.p)==null?void 0:_a4.body)==null?void 0:_b.dataStream;if(richTextValue)return richTextValue.trimEnd();const rawValue=cell.v;return typeof rawValue=="string"?cell.t===core.CellValueType.BOOLEAN?rawValue.toUpperCase():rawValue:typeof rawValue=="number"?cell.t===core.CellValueType.BOOLEAN?rawValue?"TRUE":"FALSE":rawValue:typeof rawValue=="boolean"?rawValue?"TRUE":"FALSE":""}__name(extractFilterValueFromCell,"extractFilterValueFromCell");const SetSheetsFilterRangeMutation={id:"sheet.mutation.set-filter-range",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{subUnitId,unitId,range}=params;return accessor.get(exports.SheetsFilterService).ensureFilterModel(unitId,subUnitId).setRange(range),!0},"handler")},SetSheetsFilterCriteriaMutation={id:"sheet.mutation.set-filter-criteria",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{subUnitId,unitId,criteria,col,reCalc=!0}=params,filterModel=accessor.get(exports.SheetsFilterService).getFilterModel(unitId,subUnitId);return filterModel?(filterModel.setCriteria(col,criteria,reCalc),!0):!1},"handler")},RemoveSheetsFilterMutation={id:"sheet.mutation.remove-filter",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{unitId,subUnitId}=params;return accessor.get(exports.SheetsFilterService).removeFilterModel(unitId,subUnitId)},"handler")},ReCalcSheetsFilterMutation={id:"sheet.mutation.re-calc-filter",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{unitId,subUnitId}=params,filterModel=accessor.get(exports.SheetsFilterService).getFilterModel(unitId,subUnitId);return filterModel?(filterModel.reCalc(),!0):!1},"handler")};var __defProp$2=Object.defineProperty,__getOwnPropDesc$2=Object.getOwnPropertyDescriptor,__decorateClass$2=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$2(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$2(target,key,result),result},"__decorateClass$2"),__decorateParam$2=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$2");const FILTER_MUTATIONS=new Set([SetSheetsFilterRangeMutation.id,SetSheetsFilterCriteriaMutation.id,RemoveSheetsFilterMutation.id,ReCalcSheetsFilterMutation.id]),SHEET_FILTER_SNAPSHOT_ID="SHEET_FILTER_PLUGIN";var _a;exports.SheetsFilterService=(_a=class extends core.Disposable{constructor(_resourcesManagerService,_univerInstanceService,_commandService){super();__publicField(this,"_filterModels",new Map);__publicField(this,"_loadedUnitId$",new rxjs.BehaviorSubject(null));__publicField(this,"loadedUnitId$",this._loadedUnitId$.asObservable());__publicField(this,"_errorMsg$",new rxjs.BehaviorSubject(null));__publicField(this,"errorMsg$",this._errorMsg$.asObservable());__publicField(this,"_activeFilterModel$",new rxjs.BehaviorSubject(null));__publicField(this,"activeFilterModel$",this._activeFilterModel$.asObservable());this._resourcesManagerService=_resourcesManagerService,this._univerInstanceService=_univerInstanceService,this._commandService=_commandService,this._initModel(),this._initActiveFilterModel()}get activeFilterModel(){return this._activeFilterModel$.getValue()}ensureFilterModel(unitId,subUnitId){const already=this.getFilterModel(unitId,subUnitId);if(already)return already;const workbook=this._univerInstanceService.getUniverSheetInstance(unitId);if(!workbook)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing workbook ${unitId}!`);const worksheet=workbook.getSheetBySheetId(subUnitId);if(!worksheet)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing worksheet ${subUnitId}!`);const filterModel=new FilterModel(unitId,subUnitId,worksheet);return this._cacheFilterModel(unitId,subUnitId,filterModel),filterModel}getFilterModel(unitId,subUnitId){var _a4,_b;return(_b=(_a4=this._filterModels.get(unitId))==null?void 0:_a4.get(subUnitId))!=null?_b:null}removeFilterModel(unitId,subUnitId){const already=this.getFilterModel(unitId,subUnitId);return already?(already.dispose(),this._filterModels.get(unitId).delete(subUnitId),!0):!1}setFilterErrorMsg(content){this._errorMsg$.next(content)}_updateActiveFilterModel(){let workbook;try{if(workbook=this._univerInstanceService.getCurrentUnitForType(core.UniverInstanceType.UNIVER_SHEET),!workbook){this._activeFilterModel$.next(null);return}}catch{return}const activeSheet=workbook.getActiveSheet(!0);if(!activeSheet){this._activeFilterModel$.next(null);return}const unitId=activeSheet.getUnitId(),subUnitId=activeSheet.getSheetId(),filterModel=this.getFilterModel(unitId,subUnitId);this._activeFilterModel$.next(filterModel)}_initActiveFilterModel(){this.disposeWithMe(rxjs.merge(core.fromCallback(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(rxjs.filter(([command])=>command.type===core.CommandType.MUTATION&&FILTER_MUTATIONS.has(command.id))),this._univerInstanceService.getCurrentTypeOfUnit$(core.UniverInstanceType.UNIVER_SHEET).pipe(rxjs.switchMap(workbook=>{var _a4;return(_a4=workbook==null?void 0:workbook.activeSheet$)!=null?_a4:rxjs.of(null)}))).subscribe(()=>this._updateActiveFilterModel()))}_serializeAutoFiltersForUnit(unitId){const allFilterModels=this._filterModels.get(unitId);if(!allFilterModels)return"{}";const json={};return allFilterModels.forEach((model,worksheetId)=>{json[worksheetId]=model.serialize()}),JSON.stringify(json)}_deserializeAutoFiltersForUnit(unitId,json){const workbook=this._univerInstanceService.getUniverSheetInstance(unitId);Object.keys(json).forEach(worksheetId=>{const autoFilter=json[worksheetId],filterModel=FilterModel.deserialize(unitId,worksheetId,workbook.getSheetBySheetId(worksheetId),autoFilter);this._cacheFilterModel(unitId,worksheetId,filterModel)})}_initModel(){this._resourcesManagerService.registerPluginResource({pluginName:SHEET_FILTER_SNAPSHOT_ID,businesses:[core.UniverInstanceType.UNIVER_SHEET],toJson:__name(id=>this._serializeAutoFiltersForUnit(id),"toJson"),parseJson:__name(json=>JSON.parse(json),"parseJson"),onLoad:__name((unitId,value)=>{this._deserializeAutoFiltersForUnit(unitId,value),this._loadedUnitId$.next(unitId),this._updateActiveFilterModel()},"onLoad"),onUnLoad:__name(unitId=>{const allFilterModels=this._filterModels.get(unitId);allFilterModels&&(allFilterModels.forEach(model=>model.dispose()),this._filterModels.delete(unitId))},"onUnLoad")})}_cacheFilterModel(unitId,subUnitId,filterModel){this._filterModels.has(unitId)||this._filterModels.set(unitId,new Map),this._filterModels.get(unitId).set(subUnitId,filterModel)}},__name(_a,"SheetsFilterService"),_a);exports.SheetsFilterService=__decorateClass$2([__decorateParam$2(0,core.IResourceManagerService),__decorateParam$2(1,core.IUniverInstanceService),__decorateParam$2(2,core.ICommandService)],exports.SheetsFilterService);function objectsShaker(target,isEqual){for(let i=0;i<target.length;i++){let cur=i;if(target[i])for(let j=i+1;j<target.length;j++)target[cur]&&target[j]&&isEqual(target[cur],target[j])&&(target[cur]=null,cur=j)}return target.filter(o=>o!==null)}__name(objectsShaker,"objectsShaker");function mergeSetFilterCriteria(mutations){return objectsShaker(mutations,(o1,o2)=>o1.id===SetSheetsFilterCriteriaMutation.id&&o2.id===SetSheetsFilterCriteriaMutation.id&&o1.params.unitId===o2.params.unitId&&o1.params.subUnitId===o2.params.subUnitId&&o1.params.col===o2.params.col)}__name(mergeSetFilterCriteria,"mergeSetFilterCriteria");var __defProp$1=Object.defineProperty,__getOwnPropDesc$1=Object.getOwnPropertyDescriptor,__decorateClass$1=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$1(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$1(target,key,result),result},"__decorateClass$1"),__decorateParam$1=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$1"),_a2;let SheetsFilterController=(_a2=class extends core.Disposable{constructor(_commandService,_sheetInterceptorService,_sheetsFilterService,_univerInstanceService,_refRangeService){super();__publicField(this,"_disposableCollection",new core.DisposableCollection);this._commandService=_commandService,this._sheetInterceptorService=_sheetInterceptorService,this._sheetsFilterService=_sheetsFilterService,this._univerInstanceService=_univerInstanceService,this._refRangeService=_refRangeService,this._initCommands(),this._initRowFilteredInterceptor(),this._initInterceptors(),this._commandExecutedListener(),this._initErrorHandling()}_initCommands(){[SetSheetsFilterCriteriaMutation,SetSheetsFilterRangeMutation,ReCalcSheetsFilterMutation,RemoveSheetsFilterMutation].forEach(command=>this.disposeWithMe(this._commandService.registerCommand(command)))}_initInterceptors(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:__name(command=>this._getUpdateFilter(command),"getMutations")})),this.disposeWithMe(this._commandService.onCommandExecuted(commandInfo=>{if(commandInfo.id===sheets.SetWorksheetActivateCommand.id){const params=commandInfo.params,sheetId=params.subUnitId,unitId=params.unitId;if(!sheetId||!unitId)return;this._registerRefRange(unitId,sheetId)}if(commandInfo.id===SetSheetsFilterRangeMutation.id){const params=commandInfo.params,sheetId=params.subUnitId,unitId=params.unitId;if(!sheetId||!unitId)return;this._registerRefRange(params.unitId,params.subUnitId)}})),this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe(unitId=>{if(unitId){const workbook=this._univerInstanceService.getUniverSheetInstance(unitId),sheet=workbook==null?void 0:workbook.getActiveSheet();sheet&&this._registerRefRange(unitId,sheet.getSheetId())}}))}_registerRefRange(unitId,subUnitId){var _a4;this._disposableCollection.dispose();const workbook=this._univerInstanceService.getUniverSheetInstance(unitId),workSheet=workbook==null?void 0:workbook.getSheetBySheetId(subUnitId);if(!workbook||!workSheet)return;const range=(_a4=this._sheetsFilterService.getFilterModel(unitId,subUnitId))==null?void 0:_a4.getRange(),handler=__name(config=>{switch(config.id){case sheets.InsertRowCommand.id:{const params=config.params,_unitId=params.unitId||unitId,_subUnitId=params.subUnitId||subUnitId;return this._handleInsertRowCommand(params,_unitId,_subUnitId)}case sheets.InsertColCommand.id:{const params=config.params,_unitId=params.unitId||unitId,_subUnitId=params.subUnitId||subUnitId;return this._handleInsertColCommand(params,_unitId,_subUnitId)}case sheets.RemoveColCommand.id:{const params=config.params;return this._handleRemoveColCommand(params,unitId,subUnitId)}case sheets.RemoveRowCommand.id:{const params=config.params;return this._handleRemoveRowCommand(params,unitId,subUnitId)}case sheets.EffectRefRangId.MoveColsCommandId:{const params=config.params;return this._handleMoveColsCommand(params,unitId,subUnitId)}case sheets.EffectRefRangId.MoveRowsCommandId:{const params=config.params;return this._handleMoveRowsCommand(params,unitId,subUnitId)}case sheets.MoveRangeCommand.id:{const params=config.params;return this._handleMoveRangeCommand(params,unitId,subUnitId)}}return{redos:[],undos:[]}},"handler");range&&this._disposableCollection.add(this._refRangeService.registerRefRange(range,handler,unitId,subUnitId))}_getUpdateFilter(command){const{id}=command;switch(id){case sheets.RemoveSheetCommand.id:{const params=command.params;return this._handleRemoveSheetCommand(params,params.unitId,params.subUnitId)}}return{redos:[],undos:[]}}_handleInsertColCommand(config,unitId,subUnitId){var _a4;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a4=filterModel==null?void 0:filterModel.getRange())!=null?_a4:null;if(!filterModel||!filterRange)return this._handleNull();const{startColumn,endColumn}=filterRange,{startColumn:insertStartColumn,endColumn:insertEndColumn}=config.range,count=insertEndColumn-insertStartColumn+1;if(insertEndColumn>endColumn)return this._handleNull();const redos=[],undos=[],anchor=insertStartColumn,setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startColumn:insertStartColumn<=startColumn?startColumn+count:startColumn,endColumn:endColumn+count}},undoSetFilterRangeMutationParams={unitId,subUnitId,range:filterRange};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams}),undos.push({id:SetSheetsFilterRangeMutation.id,params:undoSetFilterRangeMutationParams});const effected=filterModel.getAllFilterColumns().filter(column=>column[0]>=anchor);if(effected.length!==0){const{undos:moveUndos,redos:moveRedos}=this.moveCriteria(unitId,subUnitId,effected,count);redos.push(...moveRedos),undos.push(...moveUndos)}return{redos:mergeSetFilterCriteria(redos),undos:mergeSetFilterCriteria(undos)}}_handleInsertRowCommand(config,unitId,subUnitId){var _a4;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a4=filterModel==null?void 0:filterModel.getRange())!=null?_a4:null;if(!filterModel||!filterRange)return this._handleNull();const{startRow,endRow}=filterRange,{startRow:insertStartRow,endRow:insertEndRow}=config.range,rowCount=insertEndRow-insertStartRow+1;if(insertEndRow>endRow)return this._handleNull();const redos=[],undos=[],setFilterRangeParams={unitId,subUnitId,range:{...filterRange,startRow:insertStartRow<=startRow?startRow+rowCount:startRow,endRow:endRow+rowCount}},undoSetFilterRangeMutationParams={unitId,subUnitId,range:filterRange};return redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeParams}),undos.push({id:SetSheetsFilterRangeMutation.id,params:undoSetFilterRangeMutationParams}),{redos:mergeSetFilterCriteria(redos),undos:mergeSetFilterCriteria(undos)}}_handleRemoveColCommand(config,unitId,subUnitId){var _a4;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a4=filterModel==null?void 0:filterModel.getRange())!=null?_a4:null;if(!filterModel||!filterRange)return this._handleNull();const{startColumn,endColumn}=filterRange,{startColumn:removeStartColumn,endColumn:removeEndColumn}=config.range;if(removeStartColumn>endColumn)return this._handleNull();const redos=[],undos=[],rangeRemoveCount=removeEndColumn<startColumn?0:Math.min(removeEndColumn,endColumn)-Math.max(removeStartColumn,startColumn)+1,removeCount=removeEndColumn-removeStartColumn+1,filterColumn=filterModel.getAllFilterColumns();filterColumn.forEach(column=>{const[col,filter]=column;col<=removeEndColumn&&col>=removeStartColumn&&(redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:null}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:{...filter.serialize(),colId:col}}}))});const shifted=filterColumn.filter(column=>{const[col,_]=column;return col>removeEndColumn});if(shifted.length>0){const{undos:moveUndos,redos:moveRedos}=this.moveCriteria(unitId,subUnitId,shifted,-removeCount);redos.push(...moveRedos),undos.push(...moveUndos)}if(rangeRemoveCount===endColumn-startColumn+1){const removeFilterRangeMutationParams={unitId,subUnitId};redos.push({id:RemoveSheetsFilterMutation.id,params:removeFilterRangeMutationParams})}else if(startColumn<=removeStartColumn){const finalEndColumn=endColumn-rangeRemoveCount,setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,endColumn:finalEndColumn}};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams})}else{const setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startColumn:removeStartColumn,endColumn:endColumn-(removeEndColumn-removeStartColumn+1)}};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams})}return undos.push({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}}),{undos:mergeSetFilterCriteria(undos),redos:mergeSetFilterCriteria(redos)}}_handleRemoveRowCommand(config,unitId,subUnitId){var _a4;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return this._handleNull();const filterRange=filterModel.getRange(),{startRow,endRow}=filterRange,{startRow:removeStartRow,endRow:removeEndRow}=config.range;if(removeStartRow>endRow)return this._handleNull();const redos=[],undos=[],filterColumn=filterModel.getAllFilterColumns(),filterHeaderIsRemoved=startRow<=removeEndRow&&startRow>=removeStartRow;undos.push({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}});const count=Math.min(removeEndRow,endRow)-Math.max(removeStartRow,startRow)+1;if(count===endRow-startRow+1||filterHeaderIsRemoved){const removeFilterRangeMutationParams={unitId,subUnitId};redos.push({id:RemoveSheetsFilterMutation.id,params:removeFilterRangeMutationParams}),filterColumn.forEach(column=>{const[offset,filter]=column,setCriteriaMutationParams={unitId,subUnitId,col:offset,criteria:{...filter.serialize(),colId:offset}};undos.push({id:SetSheetsFilterCriteriaMutation.id,params:setCriteriaMutationParams})})}else{const worksheet=(_a4=this._univerInstanceService.getUniverSheetInstance(unitId))==null?void 0:_a4.getSheetBySheetId(subUnitId);if(!worksheet)return this._handleNull();const hiddenRows=[];for(let r=removeStartRow;r<=removeEndRow;r++)worksheet.getRowFiltered(r)&&hiddenRows.push(r);const afterStartRow=Math.min(startRow,removeStartRow),afterEndRow=afterStartRow+(endRow-startRow)-count+hiddenRows.length,setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startRow:afterStartRow,endRow:afterEndRow}};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams})}return{undos:mergeSetFilterCriteria(undos),redos:mergeSetFilterCriteria(redos)}}_handleMoveColsCommand(config,unitId,subUnitId){var _a4;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a4=filterModel==null?void 0:filterModel.getRange())!=null?_a4:null;if(!filterModel||!filterRange)return this._handleNull();const{startColumn,endColumn}=filterRange,{fromRange,toRange}=config;if(fromRange.endColumn<startColumn&&toRange.startColumn<=startColumn||fromRange.startColumn>endColumn&&toRange.endColumn>endColumn)return this._handleNull();const redos=[],undos=[],filterCol={};for(let col=startColumn;col<=endColumn;col++)filterCol[col]={colIndex:col,filter:filterModel.getFilterColumn(col)};core.moveMatrixArray(fromRange.startColumn,fromRange.endColumn-fromRange.startColumn+1,toRange.startColumn,filterCol);let startBorder=filterRange.startColumn,endBorder=filterRange.endColumn;startColumn>=fromRange.startColumn&&startColumn<=fromRange.endColumn&&toRange.startColumn>fromRange.startColumn&&fromRange.endColumn<endColumn&&(startBorder=fromRange.endColumn+1),endColumn>=fromRange.startColumn&&endColumn<=fromRange.endColumn&&toRange.startColumn<fromRange.startColumn&&fromRange.startColumn>startColumn&&(endBorder=fromRange.startColumn-1);const numberCols=Object.keys(filterCol).map(col=>Number(col)),newEnd=numberCols.find(col=>filterCol[col].colIndex===endBorder),newStart=numberCols.find(col=>filterCol[col].colIndex===startBorder);if(numberCols.forEach(col=>{var _a5,_b;const{colIndex:oldColIndex,filter}=filterCol[col],newColIndex=col;if(filter){if(newColIndex>=newStart&&newColIndex<=newEnd){const setCriteriaMutationParams={unitId,subUnitId,col:newColIndex,criteria:{...filter.serialize(),colId:newColIndex}},undoSetCriteriaMutationParams={unitId,subUnitId,col:newColIndex,criteria:filterModel.getFilterColumn(newColIndex)?{...(_a5=filterModel.getFilterColumn(newColIndex))==null?void 0:_a5.serialize(),colId:newColIndex}:null};redos.push({id:SetSheetsFilterCriteriaMutation.id,params:setCriteriaMutationParams}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:undoSetCriteriaMutationParams})}if(!((_b=filterCol[oldColIndex])!=null&&_b.filter)){const setCriteriaMutationParams={unitId,subUnitId,col:oldColIndex,criteria:null};redos.push({id:SetSheetsFilterCriteriaMutation.id,params:setCriteriaMutationParams}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col:oldColIndex,criteria:{...filter.serialize(),colId:oldColIndex}}})}}}),startColumn!==newStart||endColumn!==newEnd){const setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startColumn:newStart,endColumn:newEnd}};redos.unshift({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams}),undos.unshift({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}})}return{undos,redos}}_handleMoveRowsCommand(config,unitId,subUnitId){var _a4;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a4=filterModel==null?void 0:filterModel.getRange())!=null?_a4:null;if(!filterModel||!filterRange)return this._handleNull();const{startRow,endRow}=filterRange,{fromRange,toRange}=config;if(fromRange.endRow<startRow&&toRange.startRow<=startRow||fromRange.startRow>endRow&&toRange.endRow>endRow)return this._handleNull();const redos=[],undos=[],filterRow={};for(let row=startRow;row<=endRow;row++)filterRow[row]={oldIndex:row};const startBorder=startRow;let endBorder=endRow;endRow>=fromRange.startRow&&endRow<=fromRange.endRow&&toRange.startRow<fromRange.startRow&&fromRange.startRow>startRow&&(endBorder=fromRange.startRow-1),core.moveMatrixArray(fromRange.startRow,fromRange.endRow-fromRange.startRow+1,toRange.startRow,filterRow);const numberRows=Object.keys(filterRow).map(row=>Number(row)),newEnd=numberRows.find(row=>filterRow[row].oldIndex===endBorder),newStart=numberRows.find(row=>filterRow[row].oldIndex===startBorder);if(startRow!==newStart||endRow!==newEnd){const setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startRow:newStart,endRow:newEnd}};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams},{id:ReCalcSheetsFilterMutation.id,params:{unitId,subUnitId}}),undos.push({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}},{id:ReCalcSheetsFilterMutation.id,params:{unitId,subUnitId}})}return{redos,undos}}_handleMoveRangeCommand(config,unitId,subUnitId){const{fromRange,toRange}=config,filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return this._handleNull();const filterRange=filterModel.getRange();if(!filterRange)return this._handleNull();const redos=[],undos=[];if(core.Rectangle.contains(fromRange,filterRange)){const rowOffset=filterRange.startRow-fromRange.startRow,colOffset=filterRange.startColumn-fromRange.startColumn,newFilterRange={startRow:toRange.startRow+rowOffset,startColumn:toRange.startColumn+colOffset,endRow:toRange.startRow+rowOffset+(filterRange.endRow-filterRange.startRow),endColumn:toRange.startColumn+colOffset+(filterRange.endColumn-filterRange.startColumn)},removeFilter={id:RemoveSheetsFilterMutation.id,params:{unitId,subUnitId}},setNewFilterRange={id:SetSheetsFilterRangeMutation.id,params:{unitId,subUnitId,range:newFilterRange}},setOldFilterRange={id:SetSheetsFilterRangeMutation.id,params:{unitId,subUnitId,range:filterRange}};redos.push(removeFilter,setNewFilterRange),undos.push(removeFilter,setOldFilterRange);const filterColumn=filterModel.getAllFilterColumns(),moveColDelta=toRange.startColumn-fromRange.startColumn;filterColumn.forEach(column=>{const[col,criteria]=column;criteria&&(redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col:col+moveColDelta,criteria:{...criteria.serialize(),colId:col+moveColDelta}}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:{...criteria.serialize(),colId:col}}}))})}return{redos,undos}}_handleRemoveSheetCommand(config,unitId,subUnitId){const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return this._handleNull();const filterRange=filterModel.getRange();if(!filterRange)return this._handleNull();const redos=[],undos=[];return filterModel.getAllFilterColumns().forEach(col=>{const[_,filter]=col;undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:{...filter.serialize(),colId:col}}})}),redos.push({id:RemoveSheetsFilterMutation.id,params:{unitId,subUnitId,range:filterRange}}),undos.unshift({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}}),{undos,redos}}_handleNull(){return{redos:[],undos:[]}}_initRowFilteredInterceptor(){this.disposeWithMe(this._sheetInterceptorService.intercept(sheets.INTERCEPTOR_POINT.ROW_FILTERED,{handler:__name((filtered,rowLocation)=>{var _a4,_b;return filtered?!0:(_b=(_a4=this._sheetsFilterService.getFilterModel(rowLocation.unitId,rowLocation.subUnitId))==null?void 0:_a4.isRowFiltered(rowLocation.row))!=null?_b:!1},"handler")}))}moveCriteria(unitId,subUnitId,target,step){const defaultSetCriteriaMutationParams={unitId,subUnitId,criteria:null,col:-1},undos=[],redos=[];return target.forEach(column=>{const[offset,filter]=column;redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset,criteria:{...filter.serialize(),colId:offset}}})}),target.forEach(column=>{const[offset,filter]=column;redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset+step,criteria:{...filter.serialize(),colId:offset+step}}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset+step,criteria:null}})}),{redos,undos}}_commandExecutedListener(){this.disposeWithMe(this._commandService.onCommandExecuted((command,options)=>{var _a4,_b;const{unitId,subUnitId}=command.params||{},filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return;const filteredOutRows=Array.from(filterModel.filteredOutRows).sort((a,b)=>a-b),newFilteredOutRows=[];let changed=!1;if(command.id===sheets.RemoveRowMutation.id){const{startRow,endRow}=command.params.range,filterOutInRemove=filteredOutRows.filter(row=>row>=startRow&&row<=endRow);filteredOutRows.forEach(row=>{if(row<startRow)newFilteredOutRows.push(row);else if(changed=!0,row<=endRow){const newIndex=Math.max(startRow,newFilteredOutRows.length?newFilteredOutRows[newFilteredOutRows.length-1]+1:startRow);newFilteredOutRows.push(newIndex)}else newFilteredOutRows.push(row-(endRow-startRow+1-filterOutInRemove.length))})}if(command.id===sheets.InsertRowMutation.id){const{startRow,endRow}=command.params.range;filteredOutRows.forEach(row=>{row>=startRow?(changed=!0,newFilteredOutRows.push(row+(endRow-startRow+1))):newFilteredOutRows.push(row)})}if(changed&&(filterModel.filteredOutRows=new Set(newFilteredOutRows)),command.id===sheets.SetRangeValuesMutation.id&&!(options!=null&&options.fromCollab)&&!(options!=null&&options.onlyLocal)){const extendRegion=this._getExtendRegion(unitId,subUnitId);if(extendRegion){const cellValue=command.params.cellValue;if(cellValue)for(let col=extendRegion.startColumn;col<=extendRegion.endColumn;col++){const cell=(_a4=cellValue==null?void 0:cellValue[extendRegion.startRow])==null?void 0:_a4[col];if(cell&&this._cellHasValue(cell)){const worksheet=(_b=this._univerInstanceService.getUnit(unitId))==null?void 0:_b.getSheetBySheetId(subUnitId);if(worksheet){const extendedRange=sheets.expandToContinuousRange(extendRegion,{down:!0},worksheet),filterModel2=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=filterModel2.getRange();filterModel2.setRange({...filterRange,endRow:extendedRange.endRow}),this._registerRefRange(unitId,subUnitId)}}}}}}))}_getExtendRegion(unitId,subUnitId){var _a4;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return null;const worksheet=(_a4=this._univerInstanceService.getUnit(unitId))==null?void 0:_a4.getSheetBySheetId(subUnitId);if(!worksheet)return null;const filterRange=filterModel.getRange();if(!filterRange)return null;const maxRowIndex=worksheet.getRowCount()-1,rowManager=worksheet.getRowManager();for(let row=filterRange.endRow+1;row<=maxRowIndex;row++)if(rowManager.getRowRawVisible(row))return{startRow:row,endRow:row,startColumn:filterRange.startColumn,endColumn:filterRange.endColumn};return null}_initErrorHandling(){this.disposeWithMe(this._commandService.beforeCommandExecuted(command=>{const params=command.params,target=sheets.getSheetCommandTarget(this._univerInstanceService);if(!target)return;const{subUnitId,unitId}=target,filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return;const filterRange=filterModel.getRange();if(command.id===sheets.MoveRowsCommand.id&&params.fromRange.startRow<=filterRange.startRow&&params.fromRange.endRow<filterRange.endRow&&params.fromRange.endRow>=filterRange.startRow)throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"),new Error("[SheetsFilterController]: Cannot move header row of filter")}))}_cellHasValue(cell){const values=Object.values(cell);return!(values.length===0||values.every(v=>v==null))}},__name(_a2,"SheetsFilterController"),_a2);SheetsFilterController=__decorateClass$1([__decorateParam$1(0,core.ICommandService),__decorateParam$1(1,core.Inject(sheets.SheetInterceptorService)),__decorateParam$1(2,core.Inject(exports.SheetsFilterService)),__decorateParam$1(3,core.IUniverInstanceService),__decorateParam$1(4,core.Inject(sheets.RefRangeService))],SheetsFilterController);var __defProp2=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__decorateClass=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp2(target,key,result),result},"__decorateClass"),__decorateParam=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam"),_a3;exports.UniverSheetsFilterPlugin=(_a3=class extends core.Plugin{constructor(_config,_injector){super(),this._injector=_injector}onStarting(){[[exports.SheetsFilterService],[SheetsFilterController]].forEach(d=>this._injector.add(d))}onReady(){this._injector.get(SheetsFilterController)}},__name(_a3,"UniverSheetsFilterPlugin"),__publicField(_a3,"type",core.UniverInstanceType.UNIVER_SHEET),__publicField(_a3,"pluginName",SHEET_FILTER_SNAPSHOT_ID),_a3);exports.UniverSheetsFilterPlugin=__decorateClass([__decorateParam(1,core.Inject(core.Injector))],exports.UniverSheetsFilterPlugin);exports.CustomFilterOperator=CustomFilterOperator;exports.FILTER_MUTATIONS=FILTER_MUTATIONS;exports.FilterColumn=FilterColumn;exports.FilterModel=FilterModel;exports.ReCalcSheetsFilterMutation=ReCalcSheetsFilterMutation;exports.RemoveSheetsFilterMutation=RemoveSheetsFilterMutation;exports.SHEET_FILTER_SNAPSHOT_ID=SHEET_FILTER_SNAPSHOT_ID;exports.SetSheetsFilterCriteriaMutation=SetSheetsFilterCriteriaMutation;exports.SetSheetsFilterRangeMutation=SetSheetsFilterRangeMutation;exports.equals=equals;exports.getCustomFilterFn=getCustomFilterFn;exports.greaterThan=greaterThan;exports.greaterThanOrEqualTo=greaterThanOrEqualTo;exports.lessThan=lessThan;exports.lessThanOrEqualTo=lessThanOrEqualTo;exports.notEquals=notEquals;
package/lib/es/index.js CHANGED
@@ -496,7 +496,7 @@ let SheetsFilterService = (_a = class extends Disposable {
496
496
  _initModel() {
497
497
  this._resourcesManagerService.registerPluginResource({
498
498
  pluginName: SHEET_FILTER_SNAPSHOT_ID,
499
- businesses: [2],
499
+ businesses: [UniverInstanceType.UNIVER_SHEET],
500
500
  toJson: /* @__PURE__ */ __name((id) => this._serializeAutoFiltersForUnit(id), "toJson"),
501
501
  parseJson: /* @__PURE__ */ __name((json) => JSON.parse(json), "parseJson"),
502
502
  onLoad: /* @__PURE__ */ __name((unitId, value) => {
@@ -538,7 +538,9 @@ var __defProp$1 = Object.defineProperty, __getOwnPropDesc$1 = Object.getOwnPrope
538
538
  }, "__decorateClass$1"), __decorateParam$1 = /* @__PURE__ */ __name((index, decorator) => (target, key) => decorator(target, key, index), "__decorateParam$1"), _a2;
539
539
  let SheetsFilterController = (_a2 = class extends Disposable {
540
540
  constructor(_commandService, _sheetInterceptorService, _sheetsFilterService, _univerInstanceService, _refRangeService) {
541
- super(), this._commandService = _commandService, this._sheetInterceptorService = _sheetInterceptorService, this._sheetsFilterService = _sheetsFilterService, this._univerInstanceService = _univerInstanceService, this._refRangeService = _refRangeService, this._initCommands(), this._initRowFilteredInterceptor(), this._initInterceptors(), this._commandExecutedListener(), this._initErrorHandling();
541
+ super();
542
+ __publicField(this, "_disposableCollection", new DisposableCollection());
543
+ this._commandService = _commandService, this._sheetInterceptorService = _sheetInterceptorService, this._sheetsFilterService = _sheetsFilterService, this._univerInstanceService = _univerInstanceService, this._refRangeService = _refRangeService, this._initCommands(), this._initRowFilteredInterceptor(), this._initInterceptors(), this._commandExecutedListener(), this._initErrorHandling();
542
544
  }
543
545
  _initCommands() {
544
546
  [
@@ -548,71 +550,69 @@ let SheetsFilterController = (_a2 = class extends Disposable {
548
550
  RemoveSheetsFilterMutation
549
551
  ].forEach((command) => this.disposeWithMe(this._commandService.registerCommand(command)));
550
552
  }
551
- // eslint-disable-next-line max-lines-per-function
552
553
  _initInterceptors() {
553
554
  this.disposeWithMe(this._sheetInterceptorService.interceptCommand({
554
555
  getMutations: /* @__PURE__ */ __name((command) => this._getUpdateFilter(command), "getMutations")
555
- }));
556
- const disposableCollection = new DisposableCollection(), registerRefRange = /* @__PURE__ */ __name((unitId, subUnitId) => {
557
- var _a4;
558
- const workbook = this._univerInstanceService.getUniverSheetInstance(unitId);
559
- if (!workbook || !(workbook == null ? void 0 : workbook.getSheetBySheetId(subUnitId))) return;
560
- disposableCollection.dispose();
561
- const range = (_a4 = this._sheetsFilterService.getFilterModel(unitId, subUnitId)) == null ? void 0 : _a4.getRange(), handler = /* @__PURE__ */ __name((config) => {
562
- switch (config.id) {
563
- case InsertRowCommand.id: {
564
- const params = config.params, _unitId = params.unitId || unitId, _subUnitId = params.subUnitId || subUnitId;
565
- return this._handleInsertRowCommand(params, _unitId, _subUnitId);
566
- }
567
- case InsertColCommand.id: {
568
- const params = config.params, _unitId = params.unitId || unitId, _subUnitId = params.subUnitId || subUnitId;
569
- return this._handleInsertColCommand(params, _unitId, _subUnitId);
570
- }
571
- case RemoveColCommand.id: {
572
- const params = config.params;
573
- return this._handleRemoveColCommand(params, unitId, subUnitId);
574
- }
575
- case RemoveRowCommand.id: {
576
- const params = config.params;
577
- return this._handleRemoveRowCommand(params, unitId, subUnitId);
578
- }
579
- case EffectRefRangId.MoveColsCommandId: {
580
- const params = config.params;
581
- return this._handleMoveColsCommand(params, unitId, subUnitId);
582
- }
583
- case EffectRefRangId.MoveRowsCommandId: {
584
- const params = config.params;
585
- return this._handleMoveRowsCommand(params, unitId, subUnitId);
586
- }
587
- case MoveRangeCommand.id: {
588
- const params = config.params;
589
- return this._handleMoveRangeCommand(params, unitId, subUnitId);
590
- }
591
- }
592
- return { redos: [], undos: [] };
593
- }, "handler");
594
- range && disposableCollection.add(this._refRangeService.registerRefRange(range, handler, unitId, subUnitId));
595
- }, "registerRefRange");
596
- this.disposeWithMe(this._commandService.onCommandExecuted((commandInfo) => {
556
+ })), this.disposeWithMe(this._commandService.onCommandExecuted((commandInfo) => {
597
557
  if (commandInfo.id === SetWorksheetActivateCommand.id) {
598
558
  const params = commandInfo.params, sheetId = params.subUnitId, unitId = params.unitId;
599
559
  if (!sheetId || !unitId)
600
560
  return;
601
- registerRefRange(unitId, sheetId);
561
+ this._registerRefRange(unitId, sheetId);
602
562
  }
603
563
  if (commandInfo.id === SetSheetsFilterRangeMutation.id) {
604
564
  const params = commandInfo.params, sheetId = params.subUnitId, unitId = params.unitId;
605
565
  if (!sheetId || !unitId)
606
566
  return;
607
- registerRefRange(params.unitId, params.subUnitId);
567
+ this._registerRefRange(params.unitId, params.subUnitId);
608
568
  }
609
569
  })), this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe((unitId) => {
610
570
  if (unitId) {
611
571
  const workbook = this._univerInstanceService.getUniverSheetInstance(unitId), sheet = workbook == null ? void 0 : workbook.getActiveSheet();
612
- sheet && registerRefRange(unitId, sheet.getSheetId());
572
+ sheet && this._registerRefRange(unitId, sheet.getSheetId());
613
573
  }
614
574
  }));
615
575
  }
576
+ _registerRefRange(unitId, subUnitId) {
577
+ var _a4;
578
+ this._disposableCollection.dispose();
579
+ const workbook = this._univerInstanceService.getUniverSheetInstance(unitId), workSheet = workbook == null ? void 0 : workbook.getSheetBySheetId(subUnitId);
580
+ if (!workbook || !workSheet) return;
581
+ const range = (_a4 = this._sheetsFilterService.getFilterModel(unitId, subUnitId)) == null ? void 0 : _a4.getRange(), handler = /* @__PURE__ */ __name((config) => {
582
+ switch (config.id) {
583
+ case InsertRowCommand.id: {
584
+ const params = config.params, _unitId = params.unitId || unitId, _subUnitId = params.subUnitId || subUnitId;
585
+ return this._handleInsertRowCommand(params, _unitId, _subUnitId);
586
+ }
587
+ case InsertColCommand.id: {
588
+ const params = config.params, _unitId = params.unitId || unitId, _subUnitId = params.subUnitId || subUnitId;
589
+ return this._handleInsertColCommand(params, _unitId, _subUnitId);
590
+ }
591
+ case RemoveColCommand.id: {
592
+ const params = config.params;
593
+ return this._handleRemoveColCommand(params, unitId, subUnitId);
594
+ }
595
+ case RemoveRowCommand.id: {
596
+ const params = config.params;
597
+ return this._handleRemoveRowCommand(params, unitId, subUnitId);
598
+ }
599
+ case EffectRefRangId.MoveColsCommandId: {
600
+ const params = config.params;
601
+ return this._handleMoveColsCommand(params, unitId, subUnitId);
602
+ }
603
+ case EffectRefRangId.MoveRowsCommandId: {
604
+ const params = config.params;
605
+ return this._handleMoveRowsCommand(params, unitId, subUnitId);
606
+ }
607
+ case MoveRangeCommand.id: {
608
+ const params = config.params;
609
+ return this._handleMoveRangeCommand(params, unitId, subUnitId);
610
+ }
611
+ }
612
+ return { redos: [], undos: [] };
613
+ }, "handler");
614
+ range && this._disposableCollection.add(this._refRangeService.registerRefRange(range, handler, unitId, subUnitId));
615
+ }
616
616
  _getUpdateFilter(command) {
617
617
  const { id } = command;
618
618
  switch (id) {
@@ -812,8 +812,13 @@ let SheetsFilterController = (_a2 = class extends Disposable {
812
812
  subUnitId,
813
813
  col: newColIndex,
814
814
  criteria: { ...filter2.serialize(), colId: newColIndex }
815
+ }, undoSetCriteriaMutationParams = {
816
+ unitId,
817
+ subUnitId,
818
+ col: newColIndex,
819
+ criteria: filterModel.getFilterColumn(newColIndex) ? { ...(_a5 = filterModel.getFilterColumn(newColIndex)) == null ? void 0 : _a5.serialize(), colId: newColIndex } : null
815
820
  };
816
- redos.push({ id: SetSheetsFilterCriteriaMutation.id, params: setCriteriaMutationParams }), undos.push({ id: RemoveSheetsFilterMutation.id, params: { unitId, subUnitId, col: newColIndex, criteria: { ...(_a5 = filterModel.getFilterColumn(newColIndex)) == null ? void 0 : _a5.serialize(), colId: newColIndex } } });
821
+ redos.push({ id: SetSheetsFilterCriteriaMutation.id, params: setCriteriaMutationParams }), undos.push({ id: SetSheetsFilterCriteriaMutation.id, params: undoSetCriteriaMutationParams });
817
822
  }
818
823
  if (!((_b = filterCol[oldColIndex]) != null && _b.filter)) {
819
824
  const setCriteriaMutationParams = {
@@ -835,7 +840,7 @@ let SheetsFilterController = (_a2 = class extends Disposable {
835
840
  endColumn: newEnd
836
841
  }
837
842
  };
838
- redos.unshift({ id: SetSheetsFilterRangeMutation.id, params: setFilterRangeMutationParams }), undos.push({ id: SetSheetsFilterRangeMutation.id, params: { range: filterRange, unitId, subUnitId } });
843
+ redos.unshift({ id: SetSheetsFilterRangeMutation.id, params: setFilterRangeMutationParams }), undos.unshift({ id: SetSheetsFilterRangeMutation.id, params: { range: filterRange, unitId, subUnitId } });
839
844
  }
840
845
  return {
841
846
  undos,
@@ -869,7 +874,7 @@ let SheetsFilterController = (_a2 = class extends Disposable {
869
874
  endRow: newEnd
870
875
  }
871
876
  };
872
- redos.unshift({ id: SetSheetsFilterRangeMutation.id, params: setFilterRangeMutationParams }), undos.push({ id: SetSheetsFilterRangeMutation.id, params: { range: filterRange, unitId, subUnitId } });
877
+ redos.push({ id: SetSheetsFilterRangeMutation.id, params: setFilterRangeMutationParams }, { id: ReCalcSheetsFilterMutation.id, params: { unitId, subUnitId } }), undos.push({ id: SetSheetsFilterRangeMutation.id, params: { range: filterRange, unitId, subUnitId } }, { id: ReCalcSheetsFilterMutation.id, params: { unitId, subUnitId } });
873
878
  }
874
879
  return {
875
880
  redos,
@@ -1016,14 +1021,14 @@ let SheetsFilterController = (_a2 = class extends Disposable {
1016
1021
  if (cellValue)
1017
1022
  for (let col = extendRegion.startColumn; col <= extendRegion.endColumn; col++) {
1018
1023
  const cell = (_a4 = cellValue == null ? void 0 : cellValue[extendRegion.startRow]) == null ? void 0 : _a4[col];
1019
- if (cell && Object.keys(cell).length !== 0) {
1024
+ if (cell && this._cellHasValue(cell)) {
1020
1025
  const worksheet = (_b = this._univerInstanceService.getUnit(unitId)) == null ? void 0 : _b.getSheetBySheetId(subUnitId);
1021
1026
  if (worksheet) {
1022
1027
  const extendedRange = expandToContinuousRange(extendRegion, { down: !0 }, worksheet), filterModel2 = this._sheetsFilterService.getFilterModel(unitId, subUnitId), filterRange = filterModel2.getRange();
1023
1028
  filterModel2.setRange({
1024
1029
  ...filterRange,
1025
1030
  endRow: extendedRange.endRow
1026
- });
1031
+ }), this._registerRefRange(unitId, subUnitId);
1027
1032
  }
1028
1033
  }
1029
1034
  }
@@ -1060,10 +1065,14 @@ let SheetsFilterController = (_a2 = class extends Disposable {
1060
1065
  const { subUnitId, unitId } = target, filterModel = this._sheetsFilterService.getFilterModel(unitId, subUnitId);
1061
1066
  if (!filterModel) return;
1062
1067
  const filterRange = filterModel.getRange();
1063
- if (command.id === MoveRowsCommand.id && params.fromRange.startRow <= filterRange.startRow && params.fromRange.endRow < filterRange.endRow)
1068
+ if (command.id === MoveRowsCommand.id && params.fromRange.startRow <= filterRange.startRow && params.fromRange.endRow < filterRange.endRow && params.fromRange.endRow >= filterRange.startRow)
1064
1069
  throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"), new Error("[SheetsFilterController]: Cannot move header row of filter");
1065
1070
  }));
1066
1071
  }
1072
+ _cellHasValue(cell) {
1073
+ const values = Object.values(cell);
1074
+ return !(values.length === 0 || values.every((v) => v == null));
1075
+ }
1067
1076
  }, __name(_a2, "SheetsFilterController"), _a2);
1068
1077
  SheetsFilterController = __decorateClass$1([
1069
1078
  __decorateParam$1(0, ICommandService),
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Copyright 2023-present DreamNum Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ export {};
@@ -7,9 +7,11 @@ export declare class SheetsFilterController extends Disposable {
7
7
  private readonly _sheetsFilterService;
8
8
  private readonly _univerInstanceService;
9
9
  private readonly _refRangeService;
10
+ private _disposableCollection;
10
11
  constructor(_commandService: ICommandService, _sheetInterceptorService: SheetInterceptorService, _sheetsFilterService: SheetsFilterService, _univerInstanceService: IUniverInstanceService, _refRangeService: RefRangeService);
11
12
  private _initCommands;
12
13
  private _initInterceptors;
14
+ private _registerRefRange;
13
15
  private _getUpdateFilter;
14
16
  private _handleInsertColCommand;
15
17
  private _handleInsertRowCommand;
@@ -25,4 +27,5 @@ export declare class SheetsFilterController extends Disposable {
25
27
  private _commandExecutedListener;
26
28
  private _getExtendRegion;
27
29
  private _initErrorHandling;
30
+ private _cellHasValue;
28
31
  }
package/lib/umd/index.js CHANGED
@@ -1 +1 @@
1
- (function(global,factory){typeof exports=="object"&&typeof module<"u"?factory(exports,require("@univerjs/core"),require("rxjs"),require("@univerjs/sheets")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","rxjs","@univerjs/sheets"],factory):(global=typeof globalThis<"u"?globalThis:global||self,factory(global.UniverSheetsFilter={},global.UniverCore,global.rxjs,global.UniverSheets))})(this,function(exports2,core,rxjs,sheets){"use strict";var __defProp=Object.defineProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!="symbol"?key+"":key,value);var _a,_b,_c;var CustomFilterOperator=(CustomFilterOperator2=>(CustomFilterOperator2.EQUAL="equal",CustomFilterOperator2.GREATER_THAN="greaterThan",CustomFilterOperator2.GREATER_THAN_OR_EQUAL="greaterThanOrEqual",CustomFilterOperator2.LESS_THAN="lessThan",CustomFilterOperator2.LESS_THAN_OR_EQUAL="lessThanOrEqual",CustomFilterOperator2.NOT_EQUALS="notEqual",CustomFilterOperator2))(CustomFilterOperator||{});const greaterThan={operator:CustomFilterOperator.GREATER_THAN,fn:__name((value,compare)=>ensureNumber(value)?value>compare:!1,"fn")},greaterThanOrEqualTo={operator:CustomFilterOperator.GREATER_THAN_OR_EQUAL,fn:__name((value,compare)=>ensureNumber(value)?value>=compare:!1,"fn")},lessThan={operator:CustomFilterOperator.LESS_THAN,fn:__name((value,compare)=>ensureNumber(value)?value<compare:!1,"fn")},lessThanOrEqualTo={operator:CustomFilterOperator.LESS_THAN_OR_EQUAL,fn:__name((value,compare)=>ensureNumber(value)?value<=compare:!1,"fn")},equals={operator:CustomFilterOperator.EQUAL,fn:__name((value,compare)=>ensureNumber(value)?value===compare:!1,"fn")},notEquals={operator:CustomFilterOperator.NOT_EQUALS,fn:__name((value,compare)=>{if(typeof compare=="string"){if(compare===" ")return value!=null;const ensuredString=ensureString(value);return ensuredString&&isWildCardString(compare)?!createREGEXFromWildChar(compare).test(ensuredString):ensuredString!==compare}return ensureNumber(value)?value!==compare:!0},"fn")},CustomFilterFnRegistry=new Map([]);[greaterThan,greaterThanOrEqualTo,lessThan,lessThanOrEqualTo,equals,notEquals].forEach(fn=>{CustomFilterFnRegistry.set(fn.operator,fn)});function isNumericFilterFn(operator){return!!operator}__name(isNumericFilterFn,"isNumericFilterFn");const textMatch={fn:__name((value,compare)=>{const ensured=ensureString(value);return ensured===null?compare==="":createREGEXFromWildChar(compare).test(ensured)},"fn")};function getCustomFilterFn(operator){return operator?CustomFilterFnRegistry.get(operator):textMatch}__name(getCustomFilterFn,"getCustomFilterFn");function ensureNumber(value){return typeof value=="number"}__name(ensureNumber,"ensureNumber");function ensureNumeric(value){return!!(typeof value=="number"||typeof value=="string"&&core.isNumeric(value))}__name(ensureNumeric,"ensureNumeric");function ensureString(value){return typeof value=="boolean"||value==null?null:typeof value=="string"?value:value.toString()}__name(ensureString,"ensureString");function isWildCardString(str){return typeof str=="number"?!1:str.indexOf("*")!==-1||str.indexOf("?")!==-1}__name(isWildCardString,"isWildCardString");function createREGEXFromWildChar(wildChar){const regexpStr=wildChar.replace(/[.+^${}()|[\]\\]/g,"\\$&").replaceAll("?",".").replace(/[*]/g,".$&");return new RegExp(`^${regexpStr}$`)}__name(createREGEXFromWildChar,"createREGEXFromWildChar");const EMPTY=__name(()=>new Set,"EMPTY"),_FilterModel=class _FilterModel extends core.Disposable{constructor(unitId,subUnitId,_worksheet){super();__publicField(this,"_filteredOutRows$",new rxjs.BehaviorSubject(EMPTY()));__publicField(this,"filteredOutRows$",this._filteredOutRows$.asObservable());__publicField(this,"_hasCriteria$",new rxjs.BehaviorSubject(!1));__publicField(this,"hasCriteria$",this._hasCriteria$.asObservable());__publicField(this,"_filterColumnByIndex",new Map);__publicField(this,"_alreadyFilteredOutRows",EMPTY());__publicField(this,"_range");this.unitId=unitId,this.subUnitId=subUnitId,this._worksheet=_worksheet}get filteredOutRows(){return this._filteredOutRows$.getValue()}set filteredOutRows(rows){this._alreadyFilteredOutRows=rows,this._filteredOutRows$.next(rows)}dispose(){super.dispose(),this._filteredOutRows$.complete(),this._hasCriteria$.complete()}serialize(){const result={ref:core.Rectangle.clone(this._range),filterColumns:this._getAllFilterColumns(!0).sort(([offset1],[offset2])=>offset1-offset2).map(([_,filterColumn])=>filterColumn.serialize())};return this._alreadyFilteredOutRows&&(result.cachedFilteredOut=Array.from(this._alreadyFilteredOutRows).sort()),result}static deserialize(unitId,subUnitId,worksheet,autoFilter){const filterModel=new _FilterModel(unitId,subUnitId,worksheet);return filterModel._dump(autoFilter),filterModel}_dump(autoFilter){var _a2;this.setRange(autoFilter.ref),(_a2=autoFilter.filterColumns)==null||_a2.forEach(filterColumn=>this._setCriteriaWithoutReCalc(filterColumn.colId,filterColumn)),autoFilter.cachedFilteredOut&&(this._alreadyFilteredOutRows=new Set(autoFilter.cachedFilteredOut),this._emit()),this._emitHasCriteria()}isRowFiltered(row){return this._alreadyFilteredOutRows.has(row)}getRange(){if(!this._range)throw new Error("[FilterModel] could not get range before a range is set!");return this._range}getFilteredOutRowsExceptCol(col){return this._getAllFilterColumns(!0).filter(([colOffset])=>colOffset!==col).reduce((acc,[,filterColumn])=>{const newResult=filterColumn.calc({getAlreadyFilteredOutRows:__name(()=>acc,"getAlreadyFilteredOutRows")});return newResult?core.mergeSets(acc,newResult):acc},new Set)}setRange(range){this._range=range,this._getAllFilterColumns(!0).forEach(([col,filterColumn])=>{filterColumn.setRangeAndColumn({startRow:range.startRow,endRow:range.endRow,startColumn:col,endColumn:col},col)})}setCriteria(col,criteria,reCalc=!1){if(!this._range)throw new Error("[FilterModel] could not set criteria before a range is set!");if(!criteria){this._removeCriteria(col),this._rebuildAlreadyFilteredOutRowsWithCache(),reCalc&&this._reCalcAllColumns(),this._emit(),this._emitHasCriteria();return}this._setCriteriaWithoutReCalc(col,criteria),reCalc&&(this._rebuildAlreadyFilteredOutRowsWithCache(),this._reCalcWithNoCacheColumns(),this._emit(),this._emitHasCriteria())}getAllFilterColumns(){return this._getAllFilterColumns(!0)}getFilterColumn(index){var _a2;return(_a2=this._filterColumnByIndex.get(index))!=null?_a2:null}reCalc(){this._reCalcAllColumns(),this._emit()}_getAllFilterColumns(withCol=!1){const columns=Array.from(this._filterColumnByIndex.entries());return withCol?columns:columns.map(([_,filterColumn])=>filterColumn)}_reCalcAllColumns(){this._alreadyFilteredOutRows=EMPTY(),this._getAllFilterColumns().forEach(filterColumn=>filterColumn.__clearCache()),this._reCalcWithNoCacheColumns()}_setCriteriaWithoutReCalc(col,criteria){const range=this._range;if(!range)throw new Error("[FilterModel] could not set criteria before a range is set!");const{startColumn,endColumn}=range;if(col>endColumn||col<startColumn)throw new Error(`[FilterModel] could not set criteria on column ${col} which is out of range!`);let filterColumn;this._filterColumnByIndex.has(col)?filterColumn=this._filterColumnByIndex.get(col):(filterColumn=new FilterColumn(this.unitId,this.subUnitId,this._worksheet,criteria,{getAlreadyFilteredOutRows:__name(()=>this._alreadyFilteredOutRows,"getAlreadyFilteredOutRows")}),filterColumn.setRangeAndColumn(range,col),this._filterColumnByIndex.set(col,filterColumn)),filterColumn.setCriteria(criteria)}_removeCriteria(col){const filterColumn=this._filterColumnByIndex.get(col);filterColumn&&(filterColumn.dispose(),this._filterColumnByIndex.delete(col))}_emit(){this._filteredOutRows$.next(this._alreadyFilteredOutRows)}_emitHasCriteria(){this._hasCriteria$.next(this._filterColumnByIndex.size>0)}_rebuildAlreadyFilteredOutRowsWithCache(){const newFilteredOutRows=this._getAllFilterColumns().filter(filterColumn=>filterColumn.hasCache()).reduce((acc,filterColumn)=>core.mergeSets(acc,filterColumn.filteredOutRows),new Set);this._alreadyFilteredOutRows=newFilteredOutRows}_reCalcWithNoCacheColumns(){const noCacheFilteredOutRows=this._getAllFilterColumns().filter(filterColumn=>!filterColumn.hasCache());for(const filterColumn of noCacheFilteredOutRows){const filteredRows=filterColumn.reCalc();filteredRows&&(this._alreadyFilteredOutRows=core.mergeSets(this._alreadyFilteredOutRows,filteredRows))}}};__name(_FilterModel,"FilterModel");let FilterModel=_FilterModel;const _FilterColumn=class _FilterColumn extends core.Disposable{constructor(unitId,subUnitId,_worksheet,_criteria,_filterColumnContext){super();__publicField(this,"_filteredOutRows",null);__publicField(this,"_filterFn",null);__publicField(this,"_range",null);__publicField(this,"_column",0);__publicField(this,"_filterByValues",!1);this.unitId=unitId,this.subUnitId=subUnitId,this._worksheet=_worksheet,this._criteria=_criteria,this._filterColumnContext=_filterColumnContext}get filteredOutRows(){return this._filteredOutRows}dispose(){super.dispose(),this._filteredOutRows=null}__clearCache(){this._filteredOutRows=null}serialize(){if(!this._criteria)throw new Error("[FilterColumn]: could not serialize without a filter column!");return core.Tools.deepClone({...this._criteria,colId:this._column})}hasCache(){return this._filteredOutRows!==null}setRangeAndColumn(range,column){this._range=range,this._column=column}setCriteria(criteria){this._criteria=criteria,this._generateFilterFn(),this._filteredOutRows=null}getColumnData(){return core.Tools.deepClone(this._criteria)}reCalc(){return this._filteredOutRows=this.calc(this._filterColumnContext),this._filteredOutRows}calc(context){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 column=this._column,iterateRange={startColumn:column,endColumn:column,startRow:this._range.startRow+1,endRow:this._range.endRow},filteredOutRows=new Set,filteredOutByOthers=context.getAlreadyFilteredOutRows();for(const range of this._worksheet.iterateByColumn(iterateRange,!1,!1)){const{row,rowSpan,col}=range;if(filteredOutByOthers.has(row)&&(!rowSpan||rowSpan===1))continue;const value=this._filterByValues?core.extractPureTextFromCell(this._worksheet.getCell(row,col)):getFilterValueForConditionalFiltering(this._worksheet,row,col);if(!this._filterFn(value)&&(filteredOutRows.add(row),rowSpan))for(let i=1;i<rowSpan;i++)filteredOutRows.add(row+i)}return filteredOutRows}_generateFilterFn(){this._criteria&&(this._filterFn=generateFilterFn(this._criteria),this._filterByValues=!!this._criteria.filters)}};__name(_FilterColumn,"FilterColumn");let FilterColumn=_FilterColumn;function generateFilterFn(column){if(column.filters)return filterByValuesFnFactory(column.filters);if(column.customFilters)return customFilterFnFactory(column.customFilters);throw new Error("[FilterModel]: other types of filters are not supported yet.")}__name(generateFilterFn,"generateFilterFn");function filterByValuesFnFactory(values){const includeBlank=!!values.blank,valuesSet=new Set(values.filters);return value=>value===void 0||value===""?includeBlank:valuesSet.has(typeof value=="string"?value:`${value}`)}__name(filterByValuesFnFactory,"filterByValuesFnFactory");function customFilterFnFactory(customFilters){const customFilterFns=customFilters.customFilters.map(filter=>generateCustomFilterFn(filter));return isCompoundCustomFilter(customFilterFns)?customFilters.and?AND(customFilterFns):OR(customFilterFns):customFilterFns[0]}__name(customFilterFnFactory,"customFilterFnFactory");function AND(filterFns){const[fn1,fn2]=filterFns;return value=>fn1(value)&&fn2(value)}__name(AND,"AND");function OR(filterFns){const[fn1,fn2]=filterFns;return value=>fn1(value)||fn2(value)}__name(OR,"OR");function isCompoundCustomFilter(filter){return filter.length===2}__name(isCompoundCustomFilter,"isCompoundCustomFilter");function generateCustomFilterFn(filter){const compare=filter.val;if(filter.operator===CustomFilterOperator.NOT_EQUALS&&!ensureNumeric(compare))return value=>notEquals.fn(value,compare);if(isNumericFilterFn(filter.operator)){if(!ensureNumeric(compare))return()=>!1;const customFilterFn2=getCustomFilterFn(filter.operator),ensuredNumber=Number(compare);return value=>customFilterFn2.fn(value,ensuredNumber)}const customFilterFn=getCustomFilterFn(filter.operator);return value=>customFilterFn.fn(value,compare)}__name(generateCustomFilterFn,"generateCustomFilterFn");function getFilterValueForConditionalFiltering(worksheet,row,col){const interceptedCell=worksheet.getCell(row,col);if(!interceptedCell)return null;const rawCell=worksheet.getCellRaw(row,col);return interceptedCell&&!rawCell?extractFilterValueFromCell(interceptedCell):rawCell?interceptedCell.t===core.CellValueType.NUMBER&&typeof interceptedCell.v=="string"?rawCell.v:extractFilterValueFromCell(rawCell):null}__name(getFilterValueForConditionalFiltering,"getFilterValueForConditionalFiltering");function extractFilterValueFromCell(cell){var _a2,_b2;const richTextValue=(_b2=(_a2=cell.p)==null?void 0:_a2.body)==null?void 0:_b2.dataStream;if(richTextValue)return richTextValue.trimEnd();const rawValue=cell.v;return typeof rawValue=="string"?cell.t===core.CellValueType.BOOLEAN?rawValue.toUpperCase():rawValue:typeof rawValue=="number"?cell.t===core.CellValueType.BOOLEAN?rawValue?"TRUE":"FALSE":rawValue:typeof rawValue=="boolean"?rawValue?"TRUE":"FALSE":""}__name(extractFilterValueFromCell,"extractFilterValueFromCell");const SetSheetsFilterRangeMutation={id:"sheet.mutation.set-filter-range",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{subUnitId,unitId,range}=params;return accessor.get(exports2.SheetsFilterService).ensureFilterModel(unitId,subUnitId).setRange(range),!0},"handler")},SetSheetsFilterCriteriaMutation={id:"sheet.mutation.set-filter-criteria",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{subUnitId,unitId,criteria,col,reCalc=!0}=params,filterModel=accessor.get(exports2.SheetsFilterService).getFilterModel(unitId,subUnitId);return filterModel?(filterModel.setCriteria(col,criteria,reCalc),!0):!1},"handler")},RemoveSheetsFilterMutation={id:"sheet.mutation.remove-filter",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{unitId,subUnitId}=params;return accessor.get(exports2.SheetsFilterService).removeFilterModel(unitId,subUnitId)},"handler")},ReCalcSheetsFilterMutation={id:"sheet.mutation.re-calc-filter",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{unitId,subUnitId}=params,filterModel=accessor.get(exports2.SheetsFilterService).getFilterModel(unitId,subUnitId);return filterModel?(filterModel.reCalc(),!0):!1},"handler")};var __defProp$2=Object.defineProperty,__getOwnPropDesc$2=Object.getOwnPropertyDescriptor,__decorateClass$2=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$2(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$2(target,key,result),result},"__decorateClass$2"),__decorateParam$2=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$2");const FILTER_MUTATIONS=new Set([SetSheetsFilterRangeMutation.id,SetSheetsFilterCriteriaMutation.id,RemoveSheetsFilterMutation.id,ReCalcSheetsFilterMutation.id]),SHEET_FILTER_SNAPSHOT_ID="SHEET_FILTER_PLUGIN";exports2.SheetsFilterService=(_a=class extends core.Disposable{constructor(_resourcesManagerService,_univerInstanceService,_commandService){super();__publicField(this,"_filterModels",new Map);__publicField(this,"_loadedUnitId$",new rxjs.BehaviorSubject(null));__publicField(this,"loadedUnitId$",this._loadedUnitId$.asObservable());__publicField(this,"_errorMsg$",new rxjs.BehaviorSubject(null));__publicField(this,"errorMsg$",this._errorMsg$.asObservable());__publicField(this,"_activeFilterModel$",new rxjs.BehaviorSubject(null));__publicField(this,"activeFilterModel$",this._activeFilterModel$.asObservable());this._resourcesManagerService=_resourcesManagerService,this._univerInstanceService=_univerInstanceService,this._commandService=_commandService,this._initModel(),this._initActiveFilterModel()}get activeFilterModel(){return this._activeFilterModel$.getValue()}ensureFilterModel(unitId,subUnitId){const already=this.getFilterModel(unitId,subUnitId);if(already)return already;const workbook=this._univerInstanceService.getUniverSheetInstance(unitId);if(!workbook)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing workbook ${unitId}!`);const worksheet=workbook.getSheetBySheetId(subUnitId);if(!worksheet)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing worksheet ${subUnitId}!`);const filterModel=new FilterModel(unitId,subUnitId,worksheet);return this._cacheFilterModel(unitId,subUnitId,filterModel),filterModel}getFilterModel(unitId,subUnitId){var _a2,_b2;return(_b2=(_a2=this._filterModels.get(unitId))==null?void 0:_a2.get(subUnitId))!=null?_b2:null}removeFilterModel(unitId,subUnitId){const already=this.getFilterModel(unitId,subUnitId);return already?(already.dispose(),this._filterModels.get(unitId).delete(subUnitId),!0):!1}setFilterErrorMsg(content){this._errorMsg$.next(content)}_updateActiveFilterModel(){let workbook;try{if(workbook=this._univerInstanceService.getCurrentUnitForType(core.UniverInstanceType.UNIVER_SHEET),!workbook){this._activeFilterModel$.next(null);return}}catch{return}const activeSheet=workbook.getActiveSheet(!0);if(!activeSheet){this._activeFilterModel$.next(null);return}const unitId=activeSheet.getUnitId(),subUnitId=activeSheet.getSheetId(),filterModel=this.getFilterModel(unitId,subUnitId);this._activeFilterModel$.next(filterModel)}_initActiveFilterModel(){this.disposeWithMe(rxjs.merge(core.fromCallback(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(rxjs.filter(([command])=>command.type===core.CommandType.MUTATION&&FILTER_MUTATIONS.has(command.id))),this._univerInstanceService.getCurrentTypeOfUnit$(core.UniverInstanceType.UNIVER_SHEET).pipe(rxjs.switchMap(workbook=>{var _a2;return(_a2=workbook==null?void 0:workbook.activeSheet$)!=null?_a2:rxjs.of(null)}))).subscribe(()=>this._updateActiveFilterModel()))}_serializeAutoFiltersForUnit(unitId){const allFilterModels=this._filterModels.get(unitId);if(!allFilterModels)return"{}";const json={};return allFilterModels.forEach((model,worksheetId)=>{json[worksheetId]=model.serialize()}),JSON.stringify(json)}_deserializeAutoFiltersForUnit(unitId,json){const workbook=this._univerInstanceService.getUniverSheetInstance(unitId);Object.keys(json).forEach(worksheetId=>{const autoFilter=json[worksheetId],filterModel=FilterModel.deserialize(unitId,worksheetId,workbook.getSheetBySheetId(worksheetId),autoFilter);this._cacheFilterModel(unitId,worksheetId,filterModel)})}_initModel(){this._resourcesManagerService.registerPluginResource({pluginName:SHEET_FILTER_SNAPSHOT_ID,businesses:[2],toJson:__name(id=>this._serializeAutoFiltersForUnit(id),"toJson"),parseJson:__name(json=>JSON.parse(json),"parseJson"),onLoad:__name((unitId,value)=>{this._deserializeAutoFiltersForUnit(unitId,value),this._loadedUnitId$.next(unitId),this._updateActiveFilterModel()},"onLoad"),onUnLoad:__name(unitId=>{const allFilterModels=this._filterModels.get(unitId);allFilterModels&&(allFilterModels.forEach(model=>model.dispose()),this._filterModels.delete(unitId))},"onUnLoad")})}_cacheFilterModel(unitId,subUnitId,filterModel){this._filterModels.has(unitId)||this._filterModels.set(unitId,new Map),this._filterModels.get(unitId).set(subUnitId,filterModel)}},__name(_a,"SheetsFilterService"),_a),exports2.SheetsFilterService=__decorateClass$2([__decorateParam$2(0,core.IResourceManagerService),__decorateParam$2(1,core.IUniverInstanceService),__decorateParam$2(2,core.ICommandService)],exports2.SheetsFilterService);function objectsShaker(target,isEqual){for(let i=0;i<target.length;i++){let cur=i;if(target[i])for(let j=i+1;j<target.length;j++)target[cur]&&target[j]&&isEqual(target[cur],target[j])&&(target[cur]=null,cur=j)}return target.filter(o=>o!==null)}__name(objectsShaker,"objectsShaker");function mergeSetFilterCriteria(mutations){return objectsShaker(mutations,(o1,o2)=>o1.id===SetSheetsFilterCriteriaMutation.id&&o2.id===SetSheetsFilterCriteriaMutation.id&&o1.params.unitId===o2.params.unitId&&o1.params.subUnitId===o2.params.subUnitId&&o1.params.col===o2.params.col)}__name(mergeSetFilterCriteria,"mergeSetFilterCriteria");var __defProp$1=Object.defineProperty,__getOwnPropDesc$1=Object.getOwnPropertyDescriptor,__decorateClass$1=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$1(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$1(target,key,result),result},"__decorateClass$1"),__decorateParam$1=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$1");let SheetsFilterController=(_b=class extends core.Disposable{constructor(_commandService,_sheetInterceptorService,_sheetsFilterService,_univerInstanceService,_refRangeService){super(),this._commandService=_commandService,this._sheetInterceptorService=_sheetInterceptorService,this._sheetsFilterService=_sheetsFilterService,this._univerInstanceService=_univerInstanceService,this._refRangeService=_refRangeService,this._initCommands(),this._initRowFilteredInterceptor(),this._initInterceptors(),this._commandExecutedListener(),this._initErrorHandling()}_initCommands(){[SetSheetsFilterCriteriaMutation,SetSheetsFilterRangeMutation,ReCalcSheetsFilterMutation,RemoveSheetsFilterMutation].forEach(command=>this.disposeWithMe(this._commandService.registerCommand(command)))}_initInterceptors(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:__name(command=>this._getUpdateFilter(command),"getMutations")}));const disposableCollection=new core.DisposableCollection,registerRefRange=__name((unitId,subUnitId)=>{var _a2;const workbook=this._univerInstanceService.getUniverSheetInstance(unitId);if(!workbook||!(workbook==null?void 0:workbook.getSheetBySheetId(subUnitId)))return;disposableCollection.dispose();const range=(_a2=this._sheetsFilterService.getFilterModel(unitId,subUnitId))==null?void 0:_a2.getRange(),handler=__name(config=>{switch(config.id){case sheets.InsertRowCommand.id:{const params=config.params,_unitId=params.unitId||unitId,_subUnitId=params.subUnitId||subUnitId;return this._handleInsertRowCommand(params,_unitId,_subUnitId)}case sheets.InsertColCommand.id:{const params=config.params,_unitId=params.unitId||unitId,_subUnitId=params.subUnitId||subUnitId;return this._handleInsertColCommand(params,_unitId,_subUnitId)}case sheets.RemoveColCommand.id:{const params=config.params;return this._handleRemoveColCommand(params,unitId,subUnitId)}case sheets.RemoveRowCommand.id:{const params=config.params;return this._handleRemoveRowCommand(params,unitId,subUnitId)}case sheets.EffectRefRangId.MoveColsCommandId:{const params=config.params;return this._handleMoveColsCommand(params,unitId,subUnitId)}case sheets.EffectRefRangId.MoveRowsCommandId:{const params=config.params;return this._handleMoveRowsCommand(params,unitId,subUnitId)}case sheets.MoveRangeCommand.id:{const params=config.params;return this._handleMoveRangeCommand(params,unitId,subUnitId)}}return{redos:[],undos:[]}},"handler");range&&disposableCollection.add(this._refRangeService.registerRefRange(range,handler,unitId,subUnitId))},"registerRefRange");this.disposeWithMe(this._commandService.onCommandExecuted(commandInfo=>{if(commandInfo.id===sheets.SetWorksheetActivateCommand.id){const params=commandInfo.params,sheetId=params.subUnitId,unitId=params.unitId;if(!sheetId||!unitId)return;registerRefRange(unitId,sheetId)}if(commandInfo.id===SetSheetsFilterRangeMutation.id){const params=commandInfo.params,sheetId=params.subUnitId,unitId=params.unitId;if(!sheetId||!unitId)return;registerRefRange(params.unitId,params.subUnitId)}})),this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe(unitId=>{if(unitId){const workbook=this._univerInstanceService.getUniverSheetInstance(unitId),sheet=workbook==null?void 0:workbook.getActiveSheet();sheet&&registerRefRange(unitId,sheet.getSheetId())}}))}_getUpdateFilter(command){const{id}=command;switch(id){case sheets.RemoveSheetCommand.id:{const params=command.params;return this._handleRemoveSheetCommand(params,params.unitId,params.subUnitId)}}return{redos:[],undos:[]}}_handleInsertColCommand(config,unitId,subUnitId){var _a2;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a2=filterModel==null?void 0:filterModel.getRange())!=null?_a2:null;if(!filterModel||!filterRange)return this._handleNull();const{startColumn,endColumn}=filterRange,{startColumn:insertStartColumn,endColumn:insertEndColumn}=config.range,count=insertEndColumn-insertStartColumn+1;if(insertEndColumn>endColumn)return this._handleNull();const redos=[],undos=[],anchor=insertStartColumn,setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startColumn:insertStartColumn<=startColumn?startColumn+count:startColumn,endColumn:endColumn+count}},undoSetFilterRangeMutationParams={unitId,subUnitId,range:filterRange};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams}),undos.push({id:SetSheetsFilterRangeMutation.id,params:undoSetFilterRangeMutationParams});const effected=filterModel.getAllFilterColumns().filter(column=>column[0]>=anchor);if(effected.length!==0){const{undos:moveUndos,redos:moveRedos}=this.moveCriteria(unitId,subUnitId,effected,count);redos.push(...moveRedos),undos.push(...moveUndos)}return{redos:mergeSetFilterCriteria(redos),undos:mergeSetFilterCriteria(undos)}}_handleInsertRowCommand(config,unitId,subUnitId){var _a2;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a2=filterModel==null?void 0:filterModel.getRange())!=null?_a2:null;if(!filterModel||!filterRange)return this._handleNull();const{startRow,endRow}=filterRange,{startRow:insertStartRow,endRow:insertEndRow}=config.range,rowCount=insertEndRow-insertStartRow+1;if(insertEndRow>endRow)return this._handleNull();const redos=[],undos=[],setFilterRangeParams={unitId,subUnitId,range:{...filterRange,startRow:insertStartRow<=startRow?startRow+rowCount:startRow,endRow:endRow+rowCount}},undoSetFilterRangeMutationParams={unitId,subUnitId,range:filterRange};return redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeParams}),undos.push({id:SetSheetsFilterRangeMutation.id,params:undoSetFilterRangeMutationParams}),{redos:mergeSetFilterCriteria(redos),undos:mergeSetFilterCriteria(undos)}}_handleRemoveColCommand(config,unitId,subUnitId){var _a2;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a2=filterModel==null?void 0:filterModel.getRange())!=null?_a2:null;if(!filterModel||!filterRange)return this._handleNull();const{startColumn,endColumn}=filterRange,{startColumn:removeStartColumn,endColumn:removeEndColumn}=config.range;if(removeStartColumn>endColumn)return this._handleNull();const redos=[],undos=[],rangeRemoveCount=removeEndColumn<startColumn?0:Math.min(removeEndColumn,endColumn)-Math.max(removeStartColumn,startColumn)+1,removeCount=removeEndColumn-removeStartColumn+1,filterColumn=filterModel.getAllFilterColumns();filterColumn.forEach(column=>{const[col,filter]=column;col<=removeEndColumn&&col>=removeStartColumn&&(redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:null}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:{...filter.serialize(),colId:col}}}))});const shifted=filterColumn.filter(column=>{const[col,_]=column;return col>removeEndColumn});if(shifted.length>0){const{undos:moveUndos,redos:moveRedos}=this.moveCriteria(unitId,subUnitId,shifted,-removeCount);redos.push(...moveRedos),undos.push(...moveUndos)}if(rangeRemoveCount===endColumn-startColumn+1){const removeFilterRangeMutationParams={unitId,subUnitId};redos.push({id:RemoveSheetsFilterMutation.id,params:removeFilterRangeMutationParams})}else if(startColumn<=removeStartColumn){const finalEndColumn=endColumn-rangeRemoveCount,setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,endColumn:finalEndColumn}};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams})}else{const setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startColumn:removeStartColumn,endColumn:endColumn-(removeEndColumn-removeStartColumn+1)}};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams})}return undos.push({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}}),{undos:mergeSetFilterCriteria(undos),redos:mergeSetFilterCriteria(redos)}}_handleRemoveRowCommand(config,unitId,subUnitId){var _a2;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return this._handleNull();const filterRange=filterModel.getRange(),{startRow,endRow}=filterRange,{startRow:removeStartRow,endRow:removeEndRow}=config.range;if(removeStartRow>endRow)return this._handleNull();const redos=[],undos=[],filterColumn=filterModel.getAllFilterColumns(),filterHeaderIsRemoved=startRow<=removeEndRow&&startRow>=removeStartRow;undos.push({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}});const count=Math.min(removeEndRow,endRow)-Math.max(removeStartRow,startRow)+1;if(count===endRow-startRow+1||filterHeaderIsRemoved){const removeFilterRangeMutationParams={unitId,subUnitId};redos.push({id:RemoveSheetsFilterMutation.id,params:removeFilterRangeMutationParams}),filterColumn.forEach(column=>{const[offset,filter]=column,setCriteriaMutationParams={unitId,subUnitId,col:offset,criteria:{...filter.serialize(),colId:offset}};undos.push({id:SetSheetsFilterCriteriaMutation.id,params:setCriteriaMutationParams})})}else{const worksheet=(_a2=this._univerInstanceService.getUniverSheetInstance(unitId))==null?void 0:_a2.getSheetBySheetId(subUnitId);if(!worksheet)return this._handleNull();const hiddenRows=[];for(let r=removeStartRow;r<=removeEndRow;r++)worksheet.getRowFiltered(r)&&hiddenRows.push(r);const afterStartRow=Math.min(startRow,removeStartRow),afterEndRow=afterStartRow+(endRow-startRow)-count+hiddenRows.length,setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startRow:afterStartRow,endRow:afterEndRow}};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams})}return{undos:mergeSetFilterCriteria(undos),redos:mergeSetFilterCriteria(redos)}}_handleMoveColsCommand(config,unitId,subUnitId){var _a2;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a2=filterModel==null?void 0:filterModel.getRange())!=null?_a2:null;if(!filterModel||!filterRange)return this._handleNull();const{startColumn,endColumn}=filterRange,{fromRange,toRange}=config;if(fromRange.endColumn<startColumn&&toRange.startColumn<=startColumn||fromRange.startColumn>endColumn&&toRange.endColumn>endColumn)return this._handleNull();const redos=[],undos=[],filterCol={};for(let col=startColumn;col<=endColumn;col++)filterCol[col]={colIndex:col,filter:filterModel.getFilterColumn(col)};core.moveMatrixArray(fromRange.startColumn,fromRange.endColumn-fromRange.startColumn+1,toRange.startColumn,filterCol);let startBorder=filterRange.startColumn,endBorder=filterRange.endColumn;startColumn>=fromRange.startColumn&&startColumn<=fromRange.endColumn&&toRange.startColumn>fromRange.startColumn&&fromRange.endColumn<endColumn&&(startBorder=fromRange.endColumn+1),endColumn>=fromRange.startColumn&&endColumn<=fromRange.endColumn&&toRange.startColumn<fromRange.startColumn&&fromRange.startColumn>startColumn&&(endBorder=fromRange.startColumn-1);const numberCols=Object.keys(filterCol).map(col=>Number(col)),newEnd=numberCols.find(col=>filterCol[col].colIndex===endBorder),newStart=numberCols.find(col=>filterCol[col].colIndex===startBorder);if(numberCols.forEach(col=>{var _a3,_b2;const{colIndex:oldColIndex,filter}=filterCol[col],newColIndex=col;if(filter){if(newColIndex>=newStart&&newColIndex<=newEnd){const setCriteriaMutationParams={unitId,subUnitId,col:newColIndex,criteria:{...filter.serialize(),colId:newColIndex}};redos.push({id:SetSheetsFilterCriteriaMutation.id,params:setCriteriaMutationParams}),undos.push({id:RemoveSheetsFilterMutation.id,params:{unitId,subUnitId,col:newColIndex,criteria:{...(_a3=filterModel.getFilterColumn(newColIndex))==null?void 0:_a3.serialize(),colId:newColIndex}}})}if(!((_b2=filterCol[oldColIndex])!=null&&_b2.filter)){const setCriteriaMutationParams={unitId,subUnitId,col:oldColIndex,criteria:null};redos.push({id:SetSheetsFilterCriteriaMutation.id,params:setCriteriaMutationParams}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col:oldColIndex,criteria:{...filter.serialize(),colId:oldColIndex}}})}}}),startColumn!==newStart||endColumn!==newEnd){const setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startColumn:newStart,endColumn:newEnd}};redos.unshift({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams}),undos.push({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}})}return{undos,redos}}_handleMoveRowsCommand(config,unitId,subUnitId){var _a2;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a2=filterModel==null?void 0:filterModel.getRange())!=null?_a2:null;if(!filterModel||!filterRange)return this._handleNull();const{startRow,endRow}=filterRange,{fromRange,toRange}=config;if(fromRange.endRow<startRow&&toRange.startRow<=startRow||fromRange.startRow>endRow&&toRange.endRow>endRow)return this._handleNull();const redos=[],undos=[],filterRow={};for(let row=startRow;row<=endRow;row++)filterRow[row]={oldIndex:row};const startBorder=startRow;let endBorder=endRow;endRow>=fromRange.startRow&&endRow<=fromRange.endRow&&toRange.startRow<fromRange.startRow&&fromRange.startRow>startRow&&(endBorder=fromRange.startRow-1),core.moveMatrixArray(fromRange.startRow,fromRange.endRow-fromRange.startRow+1,toRange.startRow,filterRow);const numberRows=Object.keys(filterRow).map(row=>Number(row)),newEnd=numberRows.find(row=>filterRow[row].oldIndex===endBorder),newStart=numberRows.find(row=>filterRow[row].oldIndex===startBorder);if(startRow!==newStart||endRow!==newEnd){const setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startRow:newStart,endRow:newEnd}};redos.unshift({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams}),undos.push({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}})}return{redos,undos}}_handleMoveRangeCommand(config,unitId,subUnitId){const{fromRange,toRange}=config,filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return this._handleNull();const filterRange=filterModel.getRange();if(!filterRange)return this._handleNull();const redos=[],undos=[];if(core.Rectangle.contains(fromRange,filterRange)){const rowOffset=filterRange.startRow-fromRange.startRow,colOffset=filterRange.startColumn-fromRange.startColumn,newFilterRange={startRow:toRange.startRow+rowOffset,startColumn:toRange.startColumn+colOffset,endRow:toRange.startRow+rowOffset+(filterRange.endRow-filterRange.startRow),endColumn:toRange.startColumn+colOffset+(filterRange.endColumn-filterRange.startColumn)},removeFilter={id:RemoveSheetsFilterMutation.id,params:{unitId,subUnitId}},setNewFilterRange={id:SetSheetsFilterRangeMutation.id,params:{unitId,subUnitId,range:newFilterRange}},setOldFilterRange={id:SetSheetsFilterRangeMutation.id,params:{unitId,subUnitId,range:filterRange}};redos.push(removeFilter,setNewFilterRange),undos.push(removeFilter,setOldFilterRange);const filterColumn=filterModel.getAllFilterColumns(),moveColDelta=toRange.startColumn-fromRange.startColumn;filterColumn.forEach(column=>{const[col,criteria]=column;criteria&&(redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col:col+moveColDelta,criteria:{...criteria.serialize(),colId:col+moveColDelta}}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:{...criteria.serialize(),colId:col}}}))})}return{redos,undos}}_handleRemoveSheetCommand(config,unitId,subUnitId){const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return this._handleNull();const filterRange=filterModel.getRange();if(!filterRange)return this._handleNull();const redos=[],undos=[];return filterModel.getAllFilterColumns().forEach(col=>{const[_,filter]=col;undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:{...filter.serialize(),colId:col}}})}),redos.push({id:RemoveSheetsFilterMutation.id,params:{unitId,subUnitId,range:filterRange}}),undos.unshift({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}}),{undos,redos}}_handleNull(){return{redos:[],undos:[]}}_initRowFilteredInterceptor(){this.disposeWithMe(this._sheetInterceptorService.intercept(sheets.INTERCEPTOR_POINT.ROW_FILTERED,{handler:__name((filtered,rowLocation)=>{var _a2,_b2;return filtered?!0:(_b2=(_a2=this._sheetsFilterService.getFilterModel(rowLocation.unitId,rowLocation.subUnitId))==null?void 0:_a2.isRowFiltered(rowLocation.row))!=null?_b2:!1},"handler")}))}moveCriteria(unitId,subUnitId,target,step){const defaultSetCriteriaMutationParams={unitId,subUnitId,criteria:null,col:-1},undos=[],redos=[];return target.forEach(column=>{const[offset,filter]=column;redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset,criteria:{...filter.serialize(),colId:offset}}})}),target.forEach(column=>{const[offset,filter]=column;redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset+step,criteria:{...filter.serialize(),colId:offset+step}}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset+step,criteria:null}})}),{redos,undos}}_commandExecutedListener(){this.disposeWithMe(this._commandService.onCommandExecuted((command,options)=>{var _a2,_b2;const{unitId,subUnitId}=command.params||{},filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return;const filteredOutRows=Array.from(filterModel.filteredOutRows).sort((a,b)=>a-b),newFilteredOutRows=[];let changed=!1;if(command.id===sheets.RemoveRowMutation.id){const{startRow,endRow}=command.params.range,filterOutInRemove=filteredOutRows.filter(row=>row>=startRow&&row<=endRow);filteredOutRows.forEach(row=>{if(row<startRow)newFilteredOutRows.push(row);else if(changed=!0,row<=endRow){const newIndex=Math.max(startRow,newFilteredOutRows.length?newFilteredOutRows[newFilteredOutRows.length-1]+1:startRow);newFilteredOutRows.push(newIndex)}else newFilteredOutRows.push(row-(endRow-startRow+1-filterOutInRemove.length))})}if(command.id===sheets.InsertRowMutation.id){const{startRow,endRow}=command.params.range;filteredOutRows.forEach(row=>{row>=startRow?(changed=!0,newFilteredOutRows.push(row+(endRow-startRow+1))):newFilteredOutRows.push(row)})}if(changed&&(filterModel.filteredOutRows=new Set(newFilteredOutRows)),command.id===sheets.SetRangeValuesMutation.id&&!(options!=null&&options.fromCollab)&&!(options!=null&&options.onlyLocal)){const extendRegion=this._getExtendRegion(unitId,subUnitId);if(extendRegion){const cellValue=command.params.cellValue;if(cellValue)for(let col=extendRegion.startColumn;col<=extendRegion.endColumn;col++){const cell=(_a2=cellValue==null?void 0:cellValue[extendRegion.startRow])==null?void 0:_a2[col];if(cell&&Object.keys(cell).length!==0){const worksheet=(_b2=this._univerInstanceService.getUnit(unitId))==null?void 0:_b2.getSheetBySheetId(subUnitId);if(worksheet){const extendedRange=sheets.expandToContinuousRange(extendRegion,{down:!0},worksheet),filterModel2=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=filterModel2.getRange();filterModel2.setRange({...filterRange,endRow:extendedRange.endRow})}}}}}}))}_getExtendRegion(unitId,subUnitId){var _a2;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return null;const worksheet=(_a2=this._univerInstanceService.getUnit(unitId))==null?void 0:_a2.getSheetBySheetId(subUnitId);if(!worksheet)return null;const filterRange=filterModel.getRange();if(!filterRange)return null;const maxRowIndex=worksheet.getRowCount()-1,rowManager=worksheet.getRowManager();for(let row=filterRange.endRow+1;row<=maxRowIndex;row++)if(rowManager.getRowRawVisible(row))return{startRow:row,endRow:row,startColumn:filterRange.startColumn,endColumn:filterRange.endColumn};return null}_initErrorHandling(){this.disposeWithMe(this._commandService.beforeCommandExecuted(command=>{const params=command.params,target=sheets.getSheetCommandTarget(this._univerInstanceService);if(!target)return;const{subUnitId,unitId}=target,filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return;const filterRange=filterModel.getRange();if(command.id===sheets.MoveRowsCommand.id&&params.fromRange.startRow<=filterRange.startRow&&params.fromRange.endRow<filterRange.endRow)throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"),new Error("[SheetsFilterController]: Cannot move header row of filter")}))}},__name(_b,"SheetsFilterController"),_b);SheetsFilterController=__decorateClass$1([__decorateParam$1(0,core.ICommandService),__decorateParam$1(1,core.Inject(sheets.SheetInterceptorService)),__decorateParam$1(2,core.Inject(exports2.SheetsFilterService)),__decorateParam$1(3,core.IUniverInstanceService),__decorateParam$1(4,core.Inject(sheets.RefRangeService))],SheetsFilterController);var __defProp2=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__decorateClass=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp2(target,key,result),result},"__decorateClass"),__decorateParam=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam");exports2.UniverSheetsFilterPlugin=(_c=class extends core.Plugin{constructor(_config,_injector){super(),this._injector=_injector}onStarting(){[[exports2.SheetsFilterService],[SheetsFilterController]].forEach(d=>this._injector.add(d))}onReady(){this._injector.get(SheetsFilterController)}},__name(_c,"UniverSheetsFilterPlugin"),__publicField(_c,"type",core.UniverInstanceType.UNIVER_SHEET),__publicField(_c,"pluginName",SHEET_FILTER_SNAPSHOT_ID),_c),exports2.UniverSheetsFilterPlugin=__decorateClass([__decorateParam(1,core.Inject(core.Injector))],exports2.UniverSheetsFilterPlugin),exports2.CustomFilterOperator=CustomFilterOperator,exports2.FILTER_MUTATIONS=FILTER_MUTATIONS,exports2.FilterColumn=FilterColumn,exports2.FilterModel=FilterModel,exports2.ReCalcSheetsFilterMutation=ReCalcSheetsFilterMutation,exports2.RemoveSheetsFilterMutation=RemoveSheetsFilterMutation,exports2.SHEET_FILTER_SNAPSHOT_ID=SHEET_FILTER_SNAPSHOT_ID,exports2.SetSheetsFilterCriteriaMutation=SetSheetsFilterCriteriaMutation,exports2.SetSheetsFilterRangeMutation=SetSheetsFilterRangeMutation,exports2.equals=equals,exports2.getCustomFilterFn=getCustomFilterFn,exports2.greaterThan=greaterThan,exports2.greaterThanOrEqualTo=greaterThanOrEqualTo,exports2.lessThan=lessThan,exports2.lessThanOrEqualTo=lessThanOrEqualTo,exports2.notEquals=notEquals,Object.defineProperty(exports2,Symbol.toStringTag,{value:"Module"})});
1
+ (function(global,factory){typeof exports=="object"&&typeof module<"u"?factory(exports,require("@univerjs/core"),require("rxjs"),require("@univerjs/sheets")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","rxjs","@univerjs/sheets"],factory):(global=typeof globalThis<"u"?globalThis:global||self,factory(global.UniverSheetsFilter={},global.UniverCore,global.rxjs,global.UniverSheets))})(this,function(exports2,core,rxjs,sheets){"use strict";var __defProp=Object.defineProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!="symbol"?key+"":key,value);var _a,_b,_c;var CustomFilterOperator=(CustomFilterOperator2=>(CustomFilterOperator2.EQUAL="equal",CustomFilterOperator2.GREATER_THAN="greaterThan",CustomFilterOperator2.GREATER_THAN_OR_EQUAL="greaterThanOrEqual",CustomFilterOperator2.LESS_THAN="lessThan",CustomFilterOperator2.LESS_THAN_OR_EQUAL="lessThanOrEqual",CustomFilterOperator2.NOT_EQUALS="notEqual",CustomFilterOperator2))(CustomFilterOperator||{});const greaterThan={operator:CustomFilterOperator.GREATER_THAN,fn:__name((value,compare)=>ensureNumber(value)?value>compare:!1,"fn")},greaterThanOrEqualTo={operator:CustomFilterOperator.GREATER_THAN_OR_EQUAL,fn:__name((value,compare)=>ensureNumber(value)?value>=compare:!1,"fn")},lessThan={operator:CustomFilterOperator.LESS_THAN,fn:__name((value,compare)=>ensureNumber(value)?value<compare:!1,"fn")},lessThanOrEqualTo={operator:CustomFilterOperator.LESS_THAN_OR_EQUAL,fn:__name((value,compare)=>ensureNumber(value)?value<=compare:!1,"fn")},equals={operator:CustomFilterOperator.EQUAL,fn:__name((value,compare)=>ensureNumber(value)?value===compare:!1,"fn")},notEquals={operator:CustomFilterOperator.NOT_EQUALS,fn:__name((value,compare)=>{if(typeof compare=="string"){if(compare===" ")return value!=null;const ensuredString=ensureString(value);return ensuredString&&isWildCardString(compare)?!createREGEXFromWildChar(compare).test(ensuredString):ensuredString!==compare}return ensureNumber(value)?value!==compare:!0},"fn")},CustomFilterFnRegistry=new Map([]);[greaterThan,greaterThanOrEqualTo,lessThan,lessThanOrEqualTo,equals,notEquals].forEach(fn=>{CustomFilterFnRegistry.set(fn.operator,fn)});function isNumericFilterFn(operator){return!!operator}__name(isNumericFilterFn,"isNumericFilterFn");const textMatch={fn:__name((value,compare)=>{const ensured=ensureString(value);return ensured===null?compare==="":createREGEXFromWildChar(compare).test(ensured)},"fn")};function getCustomFilterFn(operator){return operator?CustomFilterFnRegistry.get(operator):textMatch}__name(getCustomFilterFn,"getCustomFilterFn");function ensureNumber(value){return typeof value=="number"}__name(ensureNumber,"ensureNumber");function ensureNumeric(value){return!!(typeof value=="number"||typeof value=="string"&&core.isNumeric(value))}__name(ensureNumeric,"ensureNumeric");function ensureString(value){return typeof value=="boolean"||value==null?null:typeof value=="string"?value:value.toString()}__name(ensureString,"ensureString");function isWildCardString(str){return typeof str=="number"?!1:str.indexOf("*")!==-1||str.indexOf("?")!==-1}__name(isWildCardString,"isWildCardString");function createREGEXFromWildChar(wildChar){const regexpStr=wildChar.replace(/[.+^${}()|[\]\\]/g,"\\$&").replaceAll("?",".").replace(/[*]/g,".$&");return new RegExp(`^${regexpStr}$`)}__name(createREGEXFromWildChar,"createREGEXFromWildChar");const EMPTY=__name(()=>new Set,"EMPTY"),_FilterModel=class _FilterModel extends core.Disposable{constructor(unitId,subUnitId,_worksheet){super();__publicField(this,"_filteredOutRows$",new rxjs.BehaviorSubject(EMPTY()));__publicField(this,"filteredOutRows$",this._filteredOutRows$.asObservable());__publicField(this,"_hasCriteria$",new rxjs.BehaviorSubject(!1));__publicField(this,"hasCriteria$",this._hasCriteria$.asObservable());__publicField(this,"_filterColumnByIndex",new Map);__publicField(this,"_alreadyFilteredOutRows",EMPTY());__publicField(this,"_range");this.unitId=unitId,this.subUnitId=subUnitId,this._worksheet=_worksheet}get filteredOutRows(){return this._filteredOutRows$.getValue()}set filteredOutRows(rows){this._alreadyFilteredOutRows=rows,this._filteredOutRows$.next(rows)}dispose(){super.dispose(),this._filteredOutRows$.complete(),this._hasCriteria$.complete()}serialize(){const result={ref:core.Rectangle.clone(this._range),filterColumns:this._getAllFilterColumns(!0).sort(([offset1],[offset2])=>offset1-offset2).map(([_,filterColumn])=>filterColumn.serialize())};return this._alreadyFilteredOutRows&&(result.cachedFilteredOut=Array.from(this._alreadyFilteredOutRows).sort()),result}static deserialize(unitId,subUnitId,worksheet,autoFilter){const filterModel=new _FilterModel(unitId,subUnitId,worksheet);return filterModel._dump(autoFilter),filterModel}_dump(autoFilter){var _a2;this.setRange(autoFilter.ref),(_a2=autoFilter.filterColumns)==null||_a2.forEach(filterColumn=>this._setCriteriaWithoutReCalc(filterColumn.colId,filterColumn)),autoFilter.cachedFilteredOut&&(this._alreadyFilteredOutRows=new Set(autoFilter.cachedFilteredOut),this._emit()),this._emitHasCriteria()}isRowFiltered(row){return this._alreadyFilteredOutRows.has(row)}getRange(){if(!this._range)throw new Error("[FilterModel] could not get range before a range is set!");return this._range}getFilteredOutRowsExceptCol(col){return this._getAllFilterColumns(!0).filter(([colOffset])=>colOffset!==col).reduce((acc,[,filterColumn])=>{const newResult=filterColumn.calc({getAlreadyFilteredOutRows:__name(()=>acc,"getAlreadyFilteredOutRows")});return newResult?core.mergeSets(acc,newResult):acc},new Set)}setRange(range){this._range=range,this._getAllFilterColumns(!0).forEach(([col,filterColumn])=>{filterColumn.setRangeAndColumn({startRow:range.startRow,endRow:range.endRow,startColumn:col,endColumn:col},col)})}setCriteria(col,criteria,reCalc=!1){if(!this._range)throw new Error("[FilterModel] could not set criteria before a range is set!");if(!criteria){this._removeCriteria(col),this._rebuildAlreadyFilteredOutRowsWithCache(),reCalc&&this._reCalcAllColumns(),this._emit(),this._emitHasCriteria();return}this._setCriteriaWithoutReCalc(col,criteria),reCalc&&(this._rebuildAlreadyFilteredOutRowsWithCache(),this._reCalcWithNoCacheColumns(),this._emit(),this._emitHasCriteria())}getAllFilterColumns(){return this._getAllFilterColumns(!0)}getFilterColumn(index){var _a2;return(_a2=this._filterColumnByIndex.get(index))!=null?_a2:null}reCalc(){this._reCalcAllColumns(),this._emit()}_getAllFilterColumns(withCol=!1){const columns=Array.from(this._filterColumnByIndex.entries());return withCol?columns:columns.map(([_,filterColumn])=>filterColumn)}_reCalcAllColumns(){this._alreadyFilteredOutRows=EMPTY(),this._getAllFilterColumns().forEach(filterColumn=>filterColumn.__clearCache()),this._reCalcWithNoCacheColumns()}_setCriteriaWithoutReCalc(col,criteria){const range=this._range;if(!range)throw new Error("[FilterModel] could not set criteria before a range is set!");const{startColumn,endColumn}=range;if(col>endColumn||col<startColumn)throw new Error(`[FilterModel] could not set criteria on column ${col} which is out of range!`);let filterColumn;this._filterColumnByIndex.has(col)?filterColumn=this._filterColumnByIndex.get(col):(filterColumn=new FilterColumn(this.unitId,this.subUnitId,this._worksheet,criteria,{getAlreadyFilteredOutRows:__name(()=>this._alreadyFilteredOutRows,"getAlreadyFilteredOutRows")}),filterColumn.setRangeAndColumn(range,col),this._filterColumnByIndex.set(col,filterColumn)),filterColumn.setCriteria(criteria)}_removeCriteria(col){const filterColumn=this._filterColumnByIndex.get(col);filterColumn&&(filterColumn.dispose(),this._filterColumnByIndex.delete(col))}_emit(){this._filteredOutRows$.next(this._alreadyFilteredOutRows)}_emitHasCriteria(){this._hasCriteria$.next(this._filterColumnByIndex.size>0)}_rebuildAlreadyFilteredOutRowsWithCache(){const newFilteredOutRows=this._getAllFilterColumns().filter(filterColumn=>filterColumn.hasCache()).reduce((acc,filterColumn)=>core.mergeSets(acc,filterColumn.filteredOutRows),new Set);this._alreadyFilteredOutRows=newFilteredOutRows}_reCalcWithNoCacheColumns(){const noCacheFilteredOutRows=this._getAllFilterColumns().filter(filterColumn=>!filterColumn.hasCache());for(const filterColumn of noCacheFilteredOutRows){const filteredRows=filterColumn.reCalc();filteredRows&&(this._alreadyFilteredOutRows=core.mergeSets(this._alreadyFilteredOutRows,filteredRows))}}};__name(_FilterModel,"FilterModel");let FilterModel=_FilterModel;const _FilterColumn=class _FilterColumn extends core.Disposable{constructor(unitId,subUnitId,_worksheet,_criteria,_filterColumnContext){super();__publicField(this,"_filteredOutRows",null);__publicField(this,"_filterFn",null);__publicField(this,"_range",null);__publicField(this,"_column",0);__publicField(this,"_filterByValues",!1);this.unitId=unitId,this.subUnitId=subUnitId,this._worksheet=_worksheet,this._criteria=_criteria,this._filterColumnContext=_filterColumnContext}get filteredOutRows(){return this._filteredOutRows}dispose(){super.dispose(),this._filteredOutRows=null}__clearCache(){this._filteredOutRows=null}serialize(){if(!this._criteria)throw new Error("[FilterColumn]: could not serialize without a filter column!");return core.Tools.deepClone({...this._criteria,colId:this._column})}hasCache(){return this._filteredOutRows!==null}setRangeAndColumn(range,column){this._range=range,this._column=column}setCriteria(criteria){this._criteria=criteria,this._generateFilterFn(),this._filteredOutRows=null}getColumnData(){return core.Tools.deepClone(this._criteria)}reCalc(){return this._filteredOutRows=this.calc(this._filterColumnContext),this._filteredOutRows}calc(context){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 column=this._column,iterateRange={startColumn:column,endColumn:column,startRow:this._range.startRow+1,endRow:this._range.endRow},filteredOutRows=new Set,filteredOutByOthers=context.getAlreadyFilteredOutRows();for(const range of this._worksheet.iterateByColumn(iterateRange,!1,!1)){const{row,rowSpan,col}=range;if(filteredOutByOthers.has(row)&&(!rowSpan||rowSpan===1))continue;const value=this._filterByValues?core.extractPureTextFromCell(this._worksheet.getCell(row,col)):getFilterValueForConditionalFiltering(this._worksheet,row,col);if(!this._filterFn(value)&&(filteredOutRows.add(row),rowSpan))for(let i=1;i<rowSpan;i++)filteredOutRows.add(row+i)}return filteredOutRows}_generateFilterFn(){this._criteria&&(this._filterFn=generateFilterFn(this._criteria),this._filterByValues=!!this._criteria.filters)}};__name(_FilterColumn,"FilterColumn");let FilterColumn=_FilterColumn;function generateFilterFn(column){if(column.filters)return filterByValuesFnFactory(column.filters);if(column.customFilters)return customFilterFnFactory(column.customFilters);throw new Error("[FilterModel]: other types of filters are not supported yet.")}__name(generateFilterFn,"generateFilterFn");function filterByValuesFnFactory(values){const includeBlank=!!values.blank,valuesSet=new Set(values.filters);return value=>value===void 0||value===""?includeBlank:valuesSet.has(typeof value=="string"?value:`${value}`)}__name(filterByValuesFnFactory,"filterByValuesFnFactory");function customFilterFnFactory(customFilters){const customFilterFns=customFilters.customFilters.map(filter=>generateCustomFilterFn(filter));return isCompoundCustomFilter(customFilterFns)?customFilters.and?AND(customFilterFns):OR(customFilterFns):customFilterFns[0]}__name(customFilterFnFactory,"customFilterFnFactory");function AND(filterFns){const[fn1,fn2]=filterFns;return value=>fn1(value)&&fn2(value)}__name(AND,"AND");function OR(filterFns){const[fn1,fn2]=filterFns;return value=>fn1(value)||fn2(value)}__name(OR,"OR");function isCompoundCustomFilter(filter){return filter.length===2}__name(isCompoundCustomFilter,"isCompoundCustomFilter");function generateCustomFilterFn(filter){const compare=filter.val;if(filter.operator===CustomFilterOperator.NOT_EQUALS&&!ensureNumeric(compare))return value=>notEquals.fn(value,compare);if(isNumericFilterFn(filter.operator)){if(!ensureNumeric(compare))return()=>!1;const customFilterFn2=getCustomFilterFn(filter.operator),ensuredNumber=Number(compare);return value=>customFilterFn2.fn(value,ensuredNumber)}const customFilterFn=getCustomFilterFn(filter.operator);return value=>customFilterFn.fn(value,compare)}__name(generateCustomFilterFn,"generateCustomFilterFn");function getFilterValueForConditionalFiltering(worksheet,row,col){const interceptedCell=worksheet.getCell(row,col);if(!interceptedCell)return null;const rawCell=worksheet.getCellRaw(row,col);return interceptedCell&&!rawCell?extractFilterValueFromCell(interceptedCell):rawCell?interceptedCell.t===core.CellValueType.NUMBER&&typeof interceptedCell.v=="string"?rawCell.v:extractFilterValueFromCell(rawCell):null}__name(getFilterValueForConditionalFiltering,"getFilterValueForConditionalFiltering");function extractFilterValueFromCell(cell){var _a2,_b2;const richTextValue=(_b2=(_a2=cell.p)==null?void 0:_a2.body)==null?void 0:_b2.dataStream;if(richTextValue)return richTextValue.trimEnd();const rawValue=cell.v;return typeof rawValue=="string"?cell.t===core.CellValueType.BOOLEAN?rawValue.toUpperCase():rawValue:typeof rawValue=="number"?cell.t===core.CellValueType.BOOLEAN?rawValue?"TRUE":"FALSE":rawValue:typeof rawValue=="boolean"?rawValue?"TRUE":"FALSE":""}__name(extractFilterValueFromCell,"extractFilterValueFromCell");const SetSheetsFilterRangeMutation={id:"sheet.mutation.set-filter-range",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{subUnitId,unitId,range}=params;return accessor.get(exports2.SheetsFilterService).ensureFilterModel(unitId,subUnitId).setRange(range),!0},"handler")},SetSheetsFilterCriteriaMutation={id:"sheet.mutation.set-filter-criteria",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{subUnitId,unitId,criteria,col,reCalc=!0}=params,filterModel=accessor.get(exports2.SheetsFilterService).getFilterModel(unitId,subUnitId);return filterModel?(filterModel.setCriteria(col,criteria,reCalc),!0):!1},"handler")},RemoveSheetsFilterMutation={id:"sheet.mutation.remove-filter",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{unitId,subUnitId}=params;return accessor.get(exports2.SheetsFilterService).removeFilterModel(unitId,subUnitId)},"handler")},ReCalcSheetsFilterMutation={id:"sheet.mutation.re-calc-filter",type:core.CommandType.MUTATION,handler:__name((accessor,params)=>{const{unitId,subUnitId}=params,filterModel=accessor.get(exports2.SheetsFilterService).getFilterModel(unitId,subUnitId);return filterModel?(filterModel.reCalc(),!0):!1},"handler")};var __defProp$2=Object.defineProperty,__getOwnPropDesc$2=Object.getOwnPropertyDescriptor,__decorateClass$2=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$2(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$2(target,key,result),result},"__decorateClass$2"),__decorateParam$2=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$2");const FILTER_MUTATIONS=new Set([SetSheetsFilterRangeMutation.id,SetSheetsFilterCriteriaMutation.id,RemoveSheetsFilterMutation.id,ReCalcSheetsFilterMutation.id]),SHEET_FILTER_SNAPSHOT_ID="SHEET_FILTER_PLUGIN";exports2.SheetsFilterService=(_a=class extends core.Disposable{constructor(_resourcesManagerService,_univerInstanceService,_commandService){super();__publicField(this,"_filterModels",new Map);__publicField(this,"_loadedUnitId$",new rxjs.BehaviorSubject(null));__publicField(this,"loadedUnitId$",this._loadedUnitId$.asObservable());__publicField(this,"_errorMsg$",new rxjs.BehaviorSubject(null));__publicField(this,"errorMsg$",this._errorMsg$.asObservable());__publicField(this,"_activeFilterModel$",new rxjs.BehaviorSubject(null));__publicField(this,"activeFilterModel$",this._activeFilterModel$.asObservable());this._resourcesManagerService=_resourcesManagerService,this._univerInstanceService=_univerInstanceService,this._commandService=_commandService,this._initModel(),this._initActiveFilterModel()}get activeFilterModel(){return this._activeFilterModel$.getValue()}ensureFilterModel(unitId,subUnitId){const already=this.getFilterModel(unitId,subUnitId);if(already)return already;const workbook=this._univerInstanceService.getUniverSheetInstance(unitId);if(!workbook)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing workbook ${unitId}!`);const worksheet=workbook.getSheetBySheetId(subUnitId);if(!worksheet)throw new Error(`[SheetsFilterService]: could not create "FilterModel" on a non-existing worksheet ${subUnitId}!`);const filterModel=new FilterModel(unitId,subUnitId,worksheet);return this._cacheFilterModel(unitId,subUnitId,filterModel),filterModel}getFilterModel(unitId,subUnitId){var _a2,_b2;return(_b2=(_a2=this._filterModels.get(unitId))==null?void 0:_a2.get(subUnitId))!=null?_b2:null}removeFilterModel(unitId,subUnitId){const already=this.getFilterModel(unitId,subUnitId);return already?(already.dispose(),this._filterModels.get(unitId).delete(subUnitId),!0):!1}setFilterErrorMsg(content){this._errorMsg$.next(content)}_updateActiveFilterModel(){let workbook;try{if(workbook=this._univerInstanceService.getCurrentUnitForType(core.UniverInstanceType.UNIVER_SHEET),!workbook){this._activeFilterModel$.next(null);return}}catch{return}const activeSheet=workbook.getActiveSheet(!0);if(!activeSheet){this._activeFilterModel$.next(null);return}const unitId=activeSheet.getUnitId(),subUnitId=activeSheet.getSheetId(),filterModel=this.getFilterModel(unitId,subUnitId);this._activeFilterModel$.next(filterModel)}_initActiveFilterModel(){this.disposeWithMe(rxjs.merge(core.fromCallback(this._commandService.onCommandExecuted.bind(this._commandService)).pipe(rxjs.filter(([command])=>command.type===core.CommandType.MUTATION&&FILTER_MUTATIONS.has(command.id))),this._univerInstanceService.getCurrentTypeOfUnit$(core.UniverInstanceType.UNIVER_SHEET).pipe(rxjs.switchMap(workbook=>{var _a2;return(_a2=workbook==null?void 0:workbook.activeSheet$)!=null?_a2:rxjs.of(null)}))).subscribe(()=>this._updateActiveFilterModel()))}_serializeAutoFiltersForUnit(unitId){const allFilterModels=this._filterModels.get(unitId);if(!allFilterModels)return"{}";const json={};return allFilterModels.forEach((model,worksheetId)=>{json[worksheetId]=model.serialize()}),JSON.stringify(json)}_deserializeAutoFiltersForUnit(unitId,json){const workbook=this._univerInstanceService.getUniverSheetInstance(unitId);Object.keys(json).forEach(worksheetId=>{const autoFilter=json[worksheetId],filterModel=FilterModel.deserialize(unitId,worksheetId,workbook.getSheetBySheetId(worksheetId),autoFilter);this._cacheFilterModel(unitId,worksheetId,filterModel)})}_initModel(){this._resourcesManagerService.registerPluginResource({pluginName:SHEET_FILTER_SNAPSHOT_ID,businesses:[core.UniverInstanceType.UNIVER_SHEET],toJson:__name(id=>this._serializeAutoFiltersForUnit(id),"toJson"),parseJson:__name(json=>JSON.parse(json),"parseJson"),onLoad:__name((unitId,value)=>{this._deserializeAutoFiltersForUnit(unitId,value),this._loadedUnitId$.next(unitId),this._updateActiveFilterModel()},"onLoad"),onUnLoad:__name(unitId=>{const allFilterModels=this._filterModels.get(unitId);allFilterModels&&(allFilterModels.forEach(model=>model.dispose()),this._filterModels.delete(unitId))},"onUnLoad")})}_cacheFilterModel(unitId,subUnitId,filterModel){this._filterModels.has(unitId)||this._filterModels.set(unitId,new Map),this._filterModels.get(unitId).set(subUnitId,filterModel)}},__name(_a,"SheetsFilterService"),_a),exports2.SheetsFilterService=__decorateClass$2([__decorateParam$2(0,core.IResourceManagerService),__decorateParam$2(1,core.IUniverInstanceService),__decorateParam$2(2,core.ICommandService)],exports2.SheetsFilterService);function objectsShaker(target,isEqual){for(let i=0;i<target.length;i++){let cur=i;if(target[i])for(let j=i+1;j<target.length;j++)target[cur]&&target[j]&&isEqual(target[cur],target[j])&&(target[cur]=null,cur=j)}return target.filter(o=>o!==null)}__name(objectsShaker,"objectsShaker");function mergeSetFilterCriteria(mutations){return objectsShaker(mutations,(o1,o2)=>o1.id===SetSheetsFilterCriteriaMutation.id&&o2.id===SetSheetsFilterCriteriaMutation.id&&o1.params.unitId===o2.params.unitId&&o1.params.subUnitId===o2.params.subUnitId&&o1.params.col===o2.params.col)}__name(mergeSetFilterCriteria,"mergeSetFilterCriteria");var __defProp$1=Object.defineProperty,__getOwnPropDesc$1=Object.getOwnPropertyDescriptor,__decorateClass$1=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$1(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$1(target,key,result),result},"__decorateClass$1"),__decorateParam$1=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$1");let SheetsFilterController=(_b=class extends core.Disposable{constructor(_commandService,_sheetInterceptorService,_sheetsFilterService,_univerInstanceService,_refRangeService){super();__publicField(this,"_disposableCollection",new core.DisposableCollection);this._commandService=_commandService,this._sheetInterceptorService=_sheetInterceptorService,this._sheetsFilterService=_sheetsFilterService,this._univerInstanceService=_univerInstanceService,this._refRangeService=_refRangeService,this._initCommands(),this._initRowFilteredInterceptor(),this._initInterceptors(),this._commandExecutedListener(),this._initErrorHandling()}_initCommands(){[SetSheetsFilterCriteriaMutation,SetSheetsFilterRangeMutation,ReCalcSheetsFilterMutation,RemoveSheetsFilterMutation].forEach(command=>this.disposeWithMe(this._commandService.registerCommand(command)))}_initInterceptors(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:__name(command=>this._getUpdateFilter(command),"getMutations")})),this.disposeWithMe(this._commandService.onCommandExecuted(commandInfo=>{if(commandInfo.id===sheets.SetWorksheetActivateCommand.id){const params=commandInfo.params,sheetId=params.subUnitId,unitId=params.unitId;if(!sheetId||!unitId)return;this._registerRefRange(unitId,sheetId)}if(commandInfo.id===SetSheetsFilterRangeMutation.id){const params=commandInfo.params,sheetId=params.subUnitId,unitId=params.unitId;if(!sheetId||!unitId)return;this._registerRefRange(params.unitId,params.subUnitId)}})),this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe(unitId=>{if(unitId){const workbook=this._univerInstanceService.getUniverSheetInstance(unitId),sheet=workbook==null?void 0:workbook.getActiveSheet();sheet&&this._registerRefRange(unitId,sheet.getSheetId())}}))}_registerRefRange(unitId,subUnitId){var _a2;this._disposableCollection.dispose();const workbook=this._univerInstanceService.getUniverSheetInstance(unitId),workSheet=workbook==null?void 0:workbook.getSheetBySheetId(subUnitId);if(!workbook||!workSheet)return;const range=(_a2=this._sheetsFilterService.getFilterModel(unitId,subUnitId))==null?void 0:_a2.getRange(),handler=__name(config=>{switch(config.id){case sheets.InsertRowCommand.id:{const params=config.params,_unitId=params.unitId||unitId,_subUnitId=params.subUnitId||subUnitId;return this._handleInsertRowCommand(params,_unitId,_subUnitId)}case sheets.InsertColCommand.id:{const params=config.params,_unitId=params.unitId||unitId,_subUnitId=params.subUnitId||subUnitId;return this._handleInsertColCommand(params,_unitId,_subUnitId)}case sheets.RemoveColCommand.id:{const params=config.params;return this._handleRemoveColCommand(params,unitId,subUnitId)}case sheets.RemoveRowCommand.id:{const params=config.params;return this._handleRemoveRowCommand(params,unitId,subUnitId)}case sheets.EffectRefRangId.MoveColsCommandId:{const params=config.params;return this._handleMoveColsCommand(params,unitId,subUnitId)}case sheets.EffectRefRangId.MoveRowsCommandId:{const params=config.params;return this._handleMoveRowsCommand(params,unitId,subUnitId)}case sheets.MoveRangeCommand.id:{const params=config.params;return this._handleMoveRangeCommand(params,unitId,subUnitId)}}return{redos:[],undos:[]}},"handler");range&&this._disposableCollection.add(this._refRangeService.registerRefRange(range,handler,unitId,subUnitId))}_getUpdateFilter(command){const{id}=command;switch(id){case sheets.RemoveSheetCommand.id:{const params=command.params;return this._handleRemoveSheetCommand(params,params.unitId,params.subUnitId)}}return{redos:[],undos:[]}}_handleInsertColCommand(config,unitId,subUnitId){var _a2;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a2=filterModel==null?void 0:filterModel.getRange())!=null?_a2:null;if(!filterModel||!filterRange)return this._handleNull();const{startColumn,endColumn}=filterRange,{startColumn:insertStartColumn,endColumn:insertEndColumn}=config.range,count=insertEndColumn-insertStartColumn+1;if(insertEndColumn>endColumn)return this._handleNull();const redos=[],undos=[],anchor=insertStartColumn,setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startColumn:insertStartColumn<=startColumn?startColumn+count:startColumn,endColumn:endColumn+count}},undoSetFilterRangeMutationParams={unitId,subUnitId,range:filterRange};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams}),undos.push({id:SetSheetsFilterRangeMutation.id,params:undoSetFilterRangeMutationParams});const effected=filterModel.getAllFilterColumns().filter(column=>column[0]>=anchor);if(effected.length!==0){const{undos:moveUndos,redos:moveRedos}=this.moveCriteria(unitId,subUnitId,effected,count);redos.push(...moveRedos),undos.push(...moveUndos)}return{redos:mergeSetFilterCriteria(redos),undos:mergeSetFilterCriteria(undos)}}_handleInsertRowCommand(config,unitId,subUnitId){var _a2;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a2=filterModel==null?void 0:filterModel.getRange())!=null?_a2:null;if(!filterModel||!filterRange)return this._handleNull();const{startRow,endRow}=filterRange,{startRow:insertStartRow,endRow:insertEndRow}=config.range,rowCount=insertEndRow-insertStartRow+1;if(insertEndRow>endRow)return this._handleNull();const redos=[],undos=[],setFilterRangeParams={unitId,subUnitId,range:{...filterRange,startRow:insertStartRow<=startRow?startRow+rowCount:startRow,endRow:endRow+rowCount}},undoSetFilterRangeMutationParams={unitId,subUnitId,range:filterRange};return redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeParams}),undos.push({id:SetSheetsFilterRangeMutation.id,params:undoSetFilterRangeMutationParams}),{redos:mergeSetFilterCriteria(redos),undos:mergeSetFilterCriteria(undos)}}_handleRemoveColCommand(config,unitId,subUnitId){var _a2;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a2=filterModel==null?void 0:filterModel.getRange())!=null?_a2:null;if(!filterModel||!filterRange)return this._handleNull();const{startColumn,endColumn}=filterRange,{startColumn:removeStartColumn,endColumn:removeEndColumn}=config.range;if(removeStartColumn>endColumn)return this._handleNull();const redos=[],undos=[],rangeRemoveCount=removeEndColumn<startColumn?0:Math.min(removeEndColumn,endColumn)-Math.max(removeStartColumn,startColumn)+1,removeCount=removeEndColumn-removeStartColumn+1,filterColumn=filterModel.getAllFilterColumns();filterColumn.forEach(column=>{const[col,filter]=column;col<=removeEndColumn&&col>=removeStartColumn&&(redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:null}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:{...filter.serialize(),colId:col}}}))});const shifted=filterColumn.filter(column=>{const[col,_]=column;return col>removeEndColumn});if(shifted.length>0){const{undos:moveUndos,redos:moveRedos}=this.moveCriteria(unitId,subUnitId,shifted,-removeCount);redos.push(...moveRedos),undos.push(...moveUndos)}if(rangeRemoveCount===endColumn-startColumn+1){const removeFilterRangeMutationParams={unitId,subUnitId};redos.push({id:RemoveSheetsFilterMutation.id,params:removeFilterRangeMutationParams})}else if(startColumn<=removeStartColumn){const finalEndColumn=endColumn-rangeRemoveCount,setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,endColumn:finalEndColumn}};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams})}else{const setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startColumn:removeStartColumn,endColumn:endColumn-(removeEndColumn-removeStartColumn+1)}};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams})}return undos.push({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}}),{undos:mergeSetFilterCriteria(undos),redos:mergeSetFilterCriteria(redos)}}_handleRemoveRowCommand(config,unitId,subUnitId){var _a2;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return this._handleNull();const filterRange=filterModel.getRange(),{startRow,endRow}=filterRange,{startRow:removeStartRow,endRow:removeEndRow}=config.range;if(removeStartRow>endRow)return this._handleNull();const redos=[],undos=[],filterColumn=filterModel.getAllFilterColumns(),filterHeaderIsRemoved=startRow<=removeEndRow&&startRow>=removeStartRow;undos.push({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}});const count=Math.min(removeEndRow,endRow)-Math.max(removeStartRow,startRow)+1;if(count===endRow-startRow+1||filterHeaderIsRemoved){const removeFilterRangeMutationParams={unitId,subUnitId};redos.push({id:RemoveSheetsFilterMutation.id,params:removeFilterRangeMutationParams}),filterColumn.forEach(column=>{const[offset,filter]=column,setCriteriaMutationParams={unitId,subUnitId,col:offset,criteria:{...filter.serialize(),colId:offset}};undos.push({id:SetSheetsFilterCriteriaMutation.id,params:setCriteriaMutationParams})})}else{const worksheet=(_a2=this._univerInstanceService.getUniverSheetInstance(unitId))==null?void 0:_a2.getSheetBySheetId(subUnitId);if(!worksheet)return this._handleNull();const hiddenRows=[];for(let r=removeStartRow;r<=removeEndRow;r++)worksheet.getRowFiltered(r)&&hiddenRows.push(r);const afterStartRow=Math.min(startRow,removeStartRow),afterEndRow=afterStartRow+(endRow-startRow)-count+hiddenRows.length,setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startRow:afterStartRow,endRow:afterEndRow}};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams})}return{undos:mergeSetFilterCriteria(undos),redos:mergeSetFilterCriteria(redos)}}_handleMoveColsCommand(config,unitId,subUnitId){var _a2;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a2=filterModel==null?void 0:filterModel.getRange())!=null?_a2:null;if(!filterModel||!filterRange)return this._handleNull();const{startColumn,endColumn}=filterRange,{fromRange,toRange}=config;if(fromRange.endColumn<startColumn&&toRange.startColumn<=startColumn||fromRange.startColumn>endColumn&&toRange.endColumn>endColumn)return this._handleNull();const redos=[],undos=[],filterCol={};for(let col=startColumn;col<=endColumn;col++)filterCol[col]={colIndex:col,filter:filterModel.getFilterColumn(col)};core.moveMatrixArray(fromRange.startColumn,fromRange.endColumn-fromRange.startColumn+1,toRange.startColumn,filterCol);let startBorder=filterRange.startColumn,endBorder=filterRange.endColumn;startColumn>=fromRange.startColumn&&startColumn<=fromRange.endColumn&&toRange.startColumn>fromRange.startColumn&&fromRange.endColumn<endColumn&&(startBorder=fromRange.endColumn+1),endColumn>=fromRange.startColumn&&endColumn<=fromRange.endColumn&&toRange.startColumn<fromRange.startColumn&&fromRange.startColumn>startColumn&&(endBorder=fromRange.startColumn-1);const numberCols=Object.keys(filterCol).map(col=>Number(col)),newEnd=numberCols.find(col=>filterCol[col].colIndex===endBorder),newStart=numberCols.find(col=>filterCol[col].colIndex===startBorder);if(numberCols.forEach(col=>{var _a3,_b2;const{colIndex:oldColIndex,filter}=filterCol[col],newColIndex=col;if(filter){if(newColIndex>=newStart&&newColIndex<=newEnd){const setCriteriaMutationParams={unitId,subUnitId,col:newColIndex,criteria:{...filter.serialize(),colId:newColIndex}},undoSetCriteriaMutationParams={unitId,subUnitId,col:newColIndex,criteria:filterModel.getFilterColumn(newColIndex)?{...(_a3=filterModel.getFilterColumn(newColIndex))==null?void 0:_a3.serialize(),colId:newColIndex}:null};redos.push({id:SetSheetsFilterCriteriaMutation.id,params:setCriteriaMutationParams}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:undoSetCriteriaMutationParams})}if(!((_b2=filterCol[oldColIndex])!=null&&_b2.filter)){const setCriteriaMutationParams={unitId,subUnitId,col:oldColIndex,criteria:null};redos.push({id:SetSheetsFilterCriteriaMutation.id,params:setCriteriaMutationParams}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col:oldColIndex,criteria:{...filter.serialize(),colId:oldColIndex}}})}}}),startColumn!==newStart||endColumn!==newEnd){const setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startColumn:newStart,endColumn:newEnd}};redos.unshift({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams}),undos.unshift({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}})}return{undos,redos}}_handleMoveRowsCommand(config,unitId,subUnitId){var _a2;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=(_a2=filterModel==null?void 0:filterModel.getRange())!=null?_a2:null;if(!filterModel||!filterRange)return this._handleNull();const{startRow,endRow}=filterRange,{fromRange,toRange}=config;if(fromRange.endRow<startRow&&toRange.startRow<=startRow||fromRange.startRow>endRow&&toRange.endRow>endRow)return this._handleNull();const redos=[],undos=[],filterRow={};for(let row=startRow;row<=endRow;row++)filterRow[row]={oldIndex:row};const startBorder=startRow;let endBorder=endRow;endRow>=fromRange.startRow&&endRow<=fromRange.endRow&&toRange.startRow<fromRange.startRow&&fromRange.startRow>startRow&&(endBorder=fromRange.startRow-1),core.moveMatrixArray(fromRange.startRow,fromRange.endRow-fromRange.startRow+1,toRange.startRow,filterRow);const numberRows=Object.keys(filterRow).map(row=>Number(row)),newEnd=numberRows.find(row=>filterRow[row].oldIndex===endBorder),newStart=numberRows.find(row=>filterRow[row].oldIndex===startBorder);if(startRow!==newStart||endRow!==newEnd){const setFilterRangeMutationParams={unitId,subUnitId,range:{...filterRange,startRow:newStart,endRow:newEnd}};redos.push({id:SetSheetsFilterRangeMutation.id,params:setFilterRangeMutationParams},{id:ReCalcSheetsFilterMutation.id,params:{unitId,subUnitId}}),undos.push({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}},{id:ReCalcSheetsFilterMutation.id,params:{unitId,subUnitId}})}return{redos,undos}}_handleMoveRangeCommand(config,unitId,subUnitId){const{fromRange,toRange}=config,filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return this._handleNull();const filterRange=filterModel.getRange();if(!filterRange)return this._handleNull();const redos=[],undos=[];if(core.Rectangle.contains(fromRange,filterRange)){const rowOffset=filterRange.startRow-fromRange.startRow,colOffset=filterRange.startColumn-fromRange.startColumn,newFilterRange={startRow:toRange.startRow+rowOffset,startColumn:toRange.startColumn+colOffset,endRow:toRange.startRow+rowOffset+(filterRange.endRow-filterRange.startRow),endColumn:toRange.startColumn+colOffset+(filterRange.endColumn-filterRange.startColumn)},removeFilter={id:RemoveSheetsFilterMutation.id,params:{unitId,subUnitId}},setNewFilterRange={id:SetSheetsFilterRangeMutation.id,params:{unitId,subUnitId,range:newFilterRange}},setOldFilterRange={id:SetSheetsFilterRangeMutation.id,params:{unitId,subUnitId,range:filterRange}};redos.push(removeFilter,setNewFilterRange),undos.push(removeFilter,setOldFilterRange);const filterColumn=filterModel.getAllFilterColumns(),moveColDelta=toRange.startColumn-fromRange.startColumn;filterColumn.forEach(column=>{const[col,criteria]=column;criteria&&(redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col:col+moveColDelta,criteria:{...criteria.serialize(),colId:col+moveColDelta}}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:{...criteria.serialize(),colId:col}}}))})}return{redos,undos}}_handleRemoveSheetCommand(config,unitId,subUnitId){const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return this._handleNull();const filterRange=filterModel.getRange();if(!filterRange)return this._handleNull();const redos=[],undos=[];return filterModel.getAllFilterColumns().forEach(col=>{const[_,filter]=col;undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{unitId,subUnitId,col,criteria:{...filter.serialize(),colId:col}}})}),redos.push({id:RemoveSheetsFilterMutation.id,params:{unitId,subUnitId,range:filterRange}}),undos.unshift({id:SetSheetsFilterRangeMutation.id,params:{range:filterRange,unitId,subUnitId}}),{undos,redos}}_handleNull(){return{redos:[],undos:[]}}_initRowFilteredInterceptor(){this.disposeWithMe(this._sheetInterceptorService.intercept(sheets.INTERCEPTOR_POINT.ROW_FILTERED,{handler:__name((filtered,rowLocation)=>{var _a2,_b2;return filtered?!0:(_b2=(_a2=this._sheetsFilterService.getFilterModel(rowLocation.unitId,rowLocation.subUnitId))==null?void 0:_a2.isRowFiltered(rowLocation.row))!=null?_b2:!1},"handler")}))}moveCriteria(unitId,subUnitId,target,step){const defaultSetCriteriaMutationParams={unitId,subUnitId,criteria:null,col:-1},undos=[],redos=[];return target.forEach(column=>{const[offset,filter]=column;redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset,criteria:{...filter.serialize(),colId:offset}}})}),target.forEach(column=>{const[offset,filter]=column;redos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset+step,criteria:{...filter.serialize(),colId:offset+step}}}),undos.push({id:SetSheetsFilterCriteriaMutation.id,params:{...defaultSetCriteriaMutationParams,col:offset+step,criteria:null}})}),{redos,undos}}_commandExecutedListener(){this.disposeWithMe(this._commandService.onCommandExecuted((command,options)=>{var _a2,_b2;const{unitId,subUnitId}=command.params||{},filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return;const filteredOutRows=Array.from(filterModel.filteredOutRows).sort((a,b)=>a-b),newFilteredOutRows=[];let changed=!1;if(command.id===sheets.RemoveRowMutation.id){const{startRow,endRow}=command.params.range,filterOutInRemove=filteredOutRows.filter(row=>row>=startRow&&row<=endRow);filteredOutRows.forEach(row=>{if(row<startRow)newFilteredOutRows.push(row);else if(changed=!0,row<=endRow){const newIndex=Math.max(startRow,newFilteredOutRows.length?newFilteredOutRows[newFilteredOutRows.length-1]+1:startRow);newFilteredOutRows.push(newIndex)}else newFilteredOutRows.push(row-(endRow-startRow+1-filterOutInRemove.length))})}if(command.id===sheets.InsertRowMutation.id){const{startRow,endRow}=command.params.range;filteredOutRows.forEach(row=>{row>=startRow?(changed=!0,newFilteredOutRows.push(row+(endRow-startRow+1))):newFilteredOutRows.push(row)})}if(changed&&(filterModel.filteredOutRows=new Set(newFilteredOutRows)),command.id===sheets.SetRangeValuesMutation.id&&!(options!=null&&options.fromCollab)&&!(options!=null&&options.onlyLocal)){const extendRegion=this._getExtendRegion(unitId,subUnitId);if(extendRegion){const cellValue=command.params.cellValue;if(cellValue)for(let col=extendRegion.startColumn;col<=extendRegion.endColumn;col++){const cell=(_a2=cellValue==null?void 0:cellValue[extendRegion.startRow])==null?void 0:_a2[col];if(cell&&this._cellHasValue(cell)){const worksheet=(_b2=this._univerInstanceService.getUnit(unitId))==null?void 0:_b2.getSheetBySheetId(subUnitId);if(worksheet){const extendedRange=sheets.expandToContinuousRange(extendRegion,{down:!0},worksheet),filterModel2=this._sheetsFilterService.getFilterModel(unitId,subUnitId),filterRange=filterModel2.getRange();filterModel2.setRange({...filterRange,endRow:extendedRange.endRow}),this._registerRefRange(unitId,subUnitId)}}}}}}))}_getExtendRegion(unitId,subUnitId){var _a2;const filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return null;const worksheet=(_a2=this._univerInstanceService.getUnit(unitId))==null?void 0:_a2.getSheetBySheetId(subUnitId);if(!worksheet)return null;const filterRange=filterModel.getRange();if(!filterRange)return null;const maxRowIndex=worksheet.getRowCount()-1,rowManager=worksheet.getRowManager();for(let row=filterRange.endRow+1;row<=maxRowIndex;row++)if(rowManager.getRowRawVisible(row))return{startRow:row,endRow:row,startColumn:filterRange.startColumn,endColumn:filterRange.endColumn};return null}_initErrorHandling(){this.disposeWithMe(this._commandService.beforeCommandExecuted(command=>{const params=command.params,target=sheets.getSheetCommandTarget(this._univerInstanceService);if(!target)return;const{subUnitId,unitId}=target,filterModel=this._sheetsFilterService.getFilterModel(unitId,subUnitId);if(!filterModel)return;const filterRange=filterModel.getRange();if(command.id===sheets.MoveRowsCommand.id&&params.fromRange.startRow<=filterRange.startRow&&params.fromRange.endRow<filterRange.endRow&&params.fromRange.endRow>=filterRange.startRow)throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"),new Error("[SheetsFilterController]: Cannot move header row of filter")}))}_cellHasValue(cell){const values=Object.values(cell);return!(values.length===0||values.every(v=>v==null))}},__name(_b,"SheetsFilterController"),_b);SheetsFilterController=__decorateClass$1([__decorateParam$1(0,core.ICommandService),__decorateParam$1(1,core.Inject(sheets.SheetInterceptorService)),__decorateParam$1(2,core.Inject(exports2.SheetsFilterService)),__decorateParam$1(3,core.IUniverInstanceService),__decorateParam$1(4,core.Inject(sheets.RefRangeService))],SheetsFilterController);var __defProp2=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__decorateClass=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp2(target,key,result),result},"__decorateClass"),__decorateParam=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam");exports2.UniverSheetsFilterPlugin=(_c=class extends core.Plugin{constructor(_config,_injector){super(),this._injector=_injector}onStarting(){[[exports2.SheetsFilterService],[SheetsFilterController]].forEach(d=>this._injector.add(d))}onReady(){this._injector.get(SheetsFilterController)}},__name(_c,"UniverSheetsFilterPlugin"),__publicField(_c,"type",core.UniverInstanceType.UNIVER_SHEET),__publicField(_c,"pluginName",SHEET_FILTER_SNAPSHOT_ID),_c),exports2.UniverSheetsFilterPlugin=__decorateClass([__decorateParam(1,core.Inject(core.Injector))],exports2.UniverSheetsFilterPlugin),exports2.CustomFilterOperator=CustomFilterOperator,exports2.FILTER_MUTATIONS=FILTER_MUTATIONS,exports2.FilterColumn=FilterColumn,exports2.FilterModel=FilterModel,exports2.ReCalcSheetsFilterMutation=ReCalcSheetsFilterMutation,exports2.RemoveSheetsFilterMutation=RemoveSheetsFilterMutation,exports2.SHEET_FILTER_SNAPSHOT_ID=SHEET_FILTER_SNAPSHOT_ID,exports2.SetSheetsFilterCriteriaMutation=SetSheetsFilterCriteriaMutation,exports2.SetSheetsFilterRangeMutation=SetSheetsFilterRangeMutation,exports2.equals=equals,exports2.getCustomFilterFn=getCustomFilterFn,exports2.greaterThan=greaterThan,exports2.greaterThanOrEqualTo=greaterThanOrEqualTo,exports2.lessThan=lessThan,exports2.lessThanOrEqualTo=lessThanOrEqualTo,exports2.notEquals=notEquals,Object.defineProperty(exports2,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@univerjs/sheets-filter",
3
- "version": "0.2.9",
3
+ "version": "0.2.11",
4
4
  "private": false,
5
5
  "description": "A library for filtering data in Univer Sheet",
6
6
  "author": "DreamNum <developer@univer.ai>",
@@ -45,17 +45,17 @@
45
45
  ],
46
46
  "peerDependencies": {
47
47
  "rxjs": ">=7.0.0",
48
- "@univerjs/sheets": "0.2.9",
49
- "@univerjs/core": "0.2.9"
48
+ "@univerjs/core": "0.2.11",
49
+ "@univerjs/sheets": "0.2.11"
50
50
  },
51
51
  "devDependencies": {
52
52
  "rxjs": "^7.8.1",
53
53
  "typescript": "^5.5.4",
54
- "vite": "^5.4.0",
54
+ "vite": "^5.4.2",
55
55
  "vitest": "^2.0.5",
56
- "@univerjs/sheets": "0.2.9",
57
- "@univerjs/shared": "0.2.9",
58
- "@univerjs/core": "0.2.9"
56
+ "@univerjs/shared": "0.2.11",
57
+ "@univerjs/sheets": "0.2.11",
58
+ "@univerjs/core": "0.2.11"
59
59
  },
60
60
  "univerSpace": {
61
61
  ".": {