@univerjs/sheets-filter 0.2.8 → 0.2.10

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([core.OnLifecycle(core.LifecycleStages.Ready,exports.SheetsFilterService),__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([core.OnLifecycle(core.LifecycleStages.Ready,SheetsFilterController),__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))}},__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
@@ -2,7 +2,7 @@ var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value;
3
3
  var __name = (target, value) => __defProp(target, "name", { value, configurable: !0 });
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key != "symbol" ? key + "" : key, value);
5
- import { isNumeric, Disposable, Rectangle, mergeSets, Tools, extractPureTextFromCell, CellValueType, CommandType, UniverInstanceType, fromCallback, OnLifecycle, LifecycleStages, IResourceManagerService, IUniverInstanceService, ICommandService, Inject, DisposableCollection, moveMatrixArray, Plugin, Injector } from "@univerjs/core";
5
+ import { isNumeric, Disposable, Rectangle, mergeSets, Tools, extractPureTextFromCell, CellValueType, CommandType, UniverInstanceType, fromCallback, IResourceManagerService, IUniverInstanceService, ICommandService, Inject, DisposableCollection, moveMatrixArray, Plugin, Injector } from "@univerjs/core";
6
6
  import { BehaviorSubject, merge, filter, switchMap, of } from "rxjs";
7
7
  import { SheetInterceptorService, RefRangeService, SetWorksheetActivateCommand, RemoveSheetCommand, INTERCEPTOR_POINT, RemoveRowMutation, InsertRowMutation, SetRangeValuesMutation, expandToContinuousRange, getSheetCommandTarget, MoveRowsCommand, MoveRangeCommand, EffectRefRangId, RemoveRowCommand, RemoveColCommand, InsertColCommand, InsertRowCommand } from "@univerjs/sheets";
8
8
  var CustomFilterOperator = /* @__PURE__ */ ((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 || {});
@@ -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) => {
@@ -513,7 +513,6 @@ let SheetsFilterService = (_a = class extends Disposable {
513
513
  }
514
514
  }, __name(_a, "SheetsFilterService"), _a);
515
515
  SheetsFilterService = __decorateClass$2([
516
- OnLifecycle(LifecycleStages.Ready, SheetsFilterService),
517
516
  __decorateParam$2(0, IResourceManagerService),
518
517
  __decorateParam$2(1, IUniverInstanceService),
519
518
  __decorateParam$2(2, ICommandService)
@@ -539,7 +538,9 @@ var __defProp$1 = Object.defineProperty, __getOwnPropDesc$1 = Object.getOwnPrope
539
538
  }, "__decorateClass$1"), __decorateParam$1 = /* @__PURE__ */ __name((index, decorator) => (target, key) => decorator(target, key, index), "__decorateParam$1"), _a2;
540
539
  let SheetsFilterController = (_a2 = class extends Disposable {
541
540
  constructor(_commandService, _sheetInterceptorService, _sheetsFilterService, _univerInstanceService, _refRangeService) {
542
- 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();
543
544
  }
544
545
  _initCommands() {
545
546
  [
@@ -549,71 +550,69 @@ let SheetsFilterController = (_a2 = class extends Disposable {
549
550
  RemoveSheetsFilterMutation
550
551
  ].forEach((command) => this.disposeWithMe(this._commandService.registerCommand(command)));
551
552
  }
552
- // eslint-disable-next-line max-lines-per-function
553
553
  _initInterceptors() {
554
554
  this.disposeWithMe(this._sheetInterceptorService.interceptCommand({
555
555
  getMutations: /* @__PURE__ */ __name((command) => this._getUpdateFilter(command), "getMutations")
556
- }));
557
- const disposableCollection = new DisposableCollection(), registerRefRange = /* @__PURE__ */ __name((unitId, subUnitId) => {
558
- var _a4;
559
- const workbook = this._univerInstanceService.getUniverSheetInstance(unitId);
560
- if (!workbook || !(workbook == null ? void 0 : workbook.getSheetBySheetId(subUnitId))) return;
561
- disposableCollection.dispose();
562
- const range = (_a4 = this._sheetsFilterService.getFilterModel(unitId, subUnitId)) == null ? void 0 : _a4.getRange(), handler = /* @__PURE__ */ __name((config) => {
563
- switch (config.id) {
564
- case InsertRowCommand.id: {
565
- const params = config.params, _unitId = params.unitId || unitId, _subUnitId = params.subUnitId || subUnitId;
566
- return this._handleInsertRowCommand(params, _unitId, _subUnitId);
567
- }
568
- case InsertColCommand.id: {
569
- const params = config.params, _unitId = params.unitId || unitId, _subUnitId = params.subUnitId || subUnitId;
570
- return this._handleInsertColCommand(params, _unitId, _subUnitId);
571
- }
572
- case RemoveColCommand.id: {
573
- const params = config.params;
574
- return this._handleRemoveColCommand(params, unitId, subUnitId);
575
- }
576
- case RemoveRowCommand.id: {
577
- const params = config.params;
578
- return this._handleRemoveRowCommand(params, unitId, subUnitId);
579
- }
580
- case EffectRefRangId.MoveColsCommandId: {
581
- const params = config.params;
582
- return this._handleMoveColsCommand(params, unitId, subUnitId);
583
- }
584
- case EffectRefRangId.MoveRowsCommandId: {
585
- const params = config.params;
586
- return this._handleMoveRowsCommand(params, unitId, subUnitId);
587
- }
588
- case MoveRangeCommand.id: {
589
- const params = config.params;
590
- return this._handleMoveRangeCommand(params, unitId, subUnitId);
591
- }
592
- }
593
- return { redos: [], undos: [] };
594
- }, "handler");
595
- range && disposableCollection.add(this._refRangeService.registerRefRange(range, handler, unitId, subUnitId));
596
- }, "registerRefRange");
597
- this.disposeWithMe(this._commandService.onCommandExecuted((commandInfo) => {
556
+ })), this.disposeWithMe(this._commandService.onCommandExecuted((commandInfo) => {
598
557
  if (commandInfo.id === SetWorksheetActivateCommand.id) {
599
558
  const params = commandInfo.params, sheetId = params.subUnitId, unitId = params.unitId;
600
559
  if (!sheetId || !unitId)
601
560
  return;
602
- registerRefRange(unitId, sheetId);
561
+ this._registerRefRange(unitId, sheetId);
603
562
  }
604
563
  if (commandInfo.id === SetSheetsFilterRangeMutation.id) {
605
564
  const params = commandInfo.params, sheetId = params.subUnitId, unitId = params.unitId;
606
565
  if (!sheetId || !unitId)
607
566
  return;
608
- registerRefRange(params.unitId, params.subUnitId);
567
+ this._registerRefRange(params.unitId, params.subUnitId);
609
568
  }
610
569
  })), this.disposeWithMe(this._sheetsFilterService.loadedUnitId$.subscribe((unitId) => {
611
570
  if (unitId) {
612
571
  const workbook = this._univerInstanceService.getUniverSheetInstance(unitId), sheet = workbook == null ? void 0 : workbook.getActiveSheet();
613
- sheet && registerRefRange(unitId, sheet.getSheetId());
572
+ sheet && this._registerRefRange(unitId, sheet.getSheetId());
614
573
  }
615
574
  }));
616
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
+ }
617
616
  _getUpdateFilter(command) {
618
617
  const { id } = command;
619
618
  switch (id) {
@@ -813,8 +812,13 @@ let SheetsFilterController = (_a2 = class extends Disposable {
813
812
  subUnitId,
814
813
  col: newColIndex,
815
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
816
820
  };
817
- 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 });
818
822
  }
819
823
  if (!((_b = filterCol[oldColIndex]) != null && _b.filter)) {
820
824
  const setCriteriaMutationParams = {
@@ -836,7 +840,7 @@ let SheetsFilterController = (_a2 = class extends Disposable {
836
840
  endColumn: newEnd
837
841
  }
838
842
  };
839
- 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 } });
840
844
  }
841
845
  return {
842
846
  undos,
@@ -870,7 +874,7 @@ let SheetsFilterController = (_a2 = class extends Disposable {
870
874
  endRow: newEnd
871
875
  }
872
876
  };
873
- 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 } });
874
878
  }
875
879
  return {
876
880
  redos,
@@ -1017,14 +1021,14 @@ let SheetsFilterController = (_a2 = class extends Disposable {
1017
1021
  if (cellValue)
1018
1022
  for (let col = extendRegion.startColumn; col <= extendRegion.endColumn; col++) {
1019
1023
  const cell = (_a4 = cellValue == null ? void 0 : cellValue[extendRegion.startRow]) == null ? void 0 : _a4[col];
1020
- if (cell && Object.keys(cell).length !== 0) {
1024
+ if (cell && this._cellHasValue(cell)) {
1021
1025
  const worksheet = (_b = this._univerInstanceService.getUnit(unitId)) == null ? void 0 : _b.getSheetBySheetId(subUnitId);
1022
1026
  if (worksheet) {
1023
1027
  const extendedRange = expandToContinuousRange(extendRegion, { down: !0 }, worksheet), filterModel2 = this._sheetsFilterService.getFilterModel(unitId, subUnitId), filterRange = filterModel2.getRange();
1024
1028
  filterModel2.setRange({
1025
1029
  ...filterRange,
1026
1030
  endRow: extendedRange.endRow
1027
- });
1031
+ }), this._registerRefRange(unitId, subUnitId);
1028
1032
  }
1029
1033
  }
1030
1034
  }
@@ -1061,13 +1065,16 @@ let SheetsFilterController = (_a2 = class extends Disposable {
1061
1065
  const { subUnitId, unitId } = target, filterModel = this._sheetsFilterService.getFilterModel(unitId, subUnitId);
1062
1066
  if (!filterModel) return;
1063
1067
  const filterRange = filterModel.getRange();
1064
- 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)
1065
1069
  throw this._sheetsFilterService.setFilterErrorMsg("sheets-filter.msg.filter-header-forbidden"), new Error("[SheetsFilterController]: Cannot move header row of filter");
1066
1070
  }));
1067
1071
  }
1072
+ _cellHasValue(cell) {
1073
+ const values = Object.values(cell);
1074
+ return !(values.length === 0 || values.every((v) => v == null));
1075
+ }
1068
1076
  }, __name(_a2, "SheetsFilterController"), _a2);
1069
1077
  SheetsFilterController = __decorateClass$1([
1070
- OnLifecycle(LifecycleStages.Ready, SheetsFilterController),
1071
1078
  __decorateParam$1(0, ICommandService),
1072
1079
  __decorateParam$1(1, Inject(SheetInterceptorService)),
1073
1080
  __decorateParam$1(2, Inject(SheetsFilterService)),
@@ -1089,6 +1096,9 @@ let UniverSheetsFilterPlugin = (_a3 = class extends Plugin {
1089
1096
  [SheetsFilterController]
1090
1097
  ].forEach((d) => this._injector.add(d));
1091
1098
  }
1099
+ onReady() {
1100
+ this._injector.get(SheetsFilterController);
1101
+ }
1092
1102
  }, __name(_a3, "UniverSheetsFilterPlugin"), __publicField(_a3, "type", UniverInstanceType.UNIVER_SHEET), __publicField(_a3, "pluginName", SHEET_FILTER_SNAPSHOT_ID), _a3);
1093
1103
  UniverSheetsFilterPlugin = __decorateClass([
1094
1104
  __decorateParam(1, Inject(Injector))
@@ -1,36 +1,41 @@
1
1
  import { IMutation, IRange, Nullable } from '@univerjs/core';
2
2
  import { ISheetCommandSharedParams } from '@univerjs/sheets';
3
3
  import { IFilterColumn } from '../../models/types';
4
+ /**
5
+ * Parameters of mutation {@link SetSheetsFilterRangeMutation}.
6
+ * @property range - the range to be set as filter range.
7
+ */
4
8
  export interface ISetSheetsFilterRangeMutationParams extends ISheetCommandSharedParams {
5
9
  range: IRange;
6
10
  }
7
11
  /**
8
- * Set filter range in a Worksheet. If the `FilterModel` does not exist, it will be created.
12
+ * A {@link CommandType.MUTATION} to set filter range in a {@link Worksheet}. If no {@link FilterModel} exists,
13
+ * a new `FilterModel` will be created.
9
14
  *
10
15
  * Since there could only be a filter on a worksheet, when you want to update the range, you
11
16
  * don't necessarily need to remove the filter first, you can just execute this mutation.
12
17
  */
13
18
  export declare const SetSheetsFilterRangeMutation: IMutation<ISetSheetsFilterRangeMutationParams>;
19
+ /**
20
+ * Parameters of mutation {@link SetSheetsFilterCriteriaMutation}.
21
+ * @property {number} col - the column index to set filter criteria.
22
+ * @property {IFilterColumn | null} criteria - the filter criteria to set. If it is `null`, the criteria will be removed.
23
+ * @property {boolean} [reCalc=true] - if it should trigger calculation on this `FilterColumn`.
24
+ */
14
25
  export interface ISetSheetsFilterCriteriaMutationParams extends ISheetCommandSharedParams {
15
26
  col: number;
16
- /**
17
- * Filter criteria to set. If it is `null`, the criteria will be removed.
18
- */
19
27
  criteria: Nullable<IFilterColumn>;
20
- /**
21
- * If it should trigger calculation on this `FilterColumn`.
22
- *
23
- * @default true
24
- */
25
28
  reCalc?: boolean;
26
29
  }
27
30
  /**
28
- * Set filter criteria of a Worksheet.
31
+ * A {@link CommandType.MUTATION} to set filter criteria of a given column of a {@link FilterModel}.
29
32
  */
30
33
  export declare const SetSheetsFilterCriteriaMutation: IMutation<ISetSheetsFilterCriteriaMutationParams>;
31
- export interface IRemoveSheetsFilterMutationParams extends ISheetCommandSharedParams {
32
- }
33
- export declare const RemoveSheetsFilterMutation: IMutation<IRemoveSheetsFilterMutationParams>;
34
- export interface IReCalcSheetsFilterMutationParams extends ISheetCommandSharedParams {
35
- }
36
- export declare const ReCalcSheetsFilterMutation: IMutation<IReCalcSheetsFilterMutationParams>;
34
+ /**
35
+ * A {@link CommandType.MUTATION} to remove a {@link FilterModel} in a {@link Worksheet}.
36
+ */
37
+ export declare const RemoveSheetsFilterMutation: IMutation<ISheetCommandSharedParams>;
38
+ /**
39
+ * A {@link CommandType.MUTATION} to re-calculate a {@link FilterModel}.
40
+ */
41
+ export declare const ReCalcSheetsFilterMutation: IMutation<ISheetCommandSharedParams>;
@@ -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
  }
@@ -19,4 +19,4 @@ export { equals, notEquals, getCustomFilterFn, greaterThan, greaterThanOrEqualTo
19
19
  export { SheetsFilterService, FILTER_MUTATIONS, SHEET_FILTER_SNAPSHOT_ID } from './services/sheet-filter.service';
20
20
  export type { IAutoFilter, IFilterColumn, IFilters, ICustomFilters, ICustomFilter } from './models/types';
21
21
  export { CustomFilterOperator } from './models/types';
22
- export { type ISetSheetsFilterRangeMutationParams, type ISetSheetsFilterCriteriaMutationParams, type IRemoveSheetsFilterMutationParams, type IReCalcSheetsFilterMutationParams, SetSheetsFilterRangeMutation, SetSheetsFilterCriteriaMutation, RemoveSheetsFilterMutation, ReCalcSheetsFilterMutation, } from './commands/mutations/sheets-filter.mutation';
22
+ export { type ISetSheetsFilterRangeMutationParams, type ISetSheetsFilterCriteriaMutationParams, SetSheetsFilterRangeMutation, SetSheetsFilterCriteriaMutation, RemoveSheetsFilterMutation, ReCalcSheetsFilterMutation, } from './commands/mutations/sheets-filter.mutation';
@@ -1,33 +1,60 @@
1
1
  import { BooleanNumber, IRange } from '@univerjs/core';
2
+ /**
3
+ * Data of a filter in a {@link Worksheet}.
4
+ *
5
+ * Please refer to 18.3.2 AutoFilter Settings. Properties of this interface would be added in the future.
6
+ * Please make sure that it is backward compatible.
7
+ *
8
+ * @property {IRange} ref The range of the filter.
9
+ * @property {IFilterColumn[]} [filterColumns] The filter criteria of each column.
10
+ * @property {number[]} [cachedFilteredOut] The cached filtered out row numbers.
11
+ */
2
12
  export interface IAutoFilter {
3
13
  ref: IRange;
4
14
  filterColumns?: IFilterColumn[];
5
15
  cachedFilteredOut?: number[];
6
16
  }
17
+ /**
18
+ * The filter criteria of a column.
19
+ *
20
+ * @property {number} colId The column number.
21
+ * @property {IFilters} [filters] The basic filters (filter by value).
22
+ * @property {ICustomFilters} [customFilters] The custom filters.
23
+ */
7
24
  export interface IFilterColumn {
8
25
  colId: number;
9
- /**
10
- * The filter value could be an empty string, which means <filters blank="1">.
11
- */
12
26
  filters?: IFilters;
13
27
  customFilters?: ICustomFilters;
14
28
  }
29
+ /**
30
+ * Basic filters (filter by value).
31
+ *
32
+ * @property {true} [blank] Filter by blank. If this field is present, blank cells would be visible.
33
+ * @property {Array<string>} [filters] Filter by values. Cells with values in this array would be visible.
34
+ */
15
35
  export interface IFilters {
16
36
  blank?: true;
17
37
  filters?: Array<string>;
18
38
  }
39
+ /**
40
+ * Custom filters.
41
+ *
42
+ * @property {BooleanNumber.TRUE} and The logical operator of the custom filters. If this field is present,
43
+ * the custom filters would be connected by 'and'. Otherwise, they would be connected by 'or'.
44
+ * @property {ICustomFilter[]} customFilters The custom filters.
45
+ */
19
46
  export interface ICustomFilters {
20
47
  and?: BooleanNumber.TRUE;
21
- /** Max 2 capacity. */
22
48
  customFilters: [ICustomFilter] | [ICustomFilter, ICustomFilter];
23
49
  }
24
- export interface IDynamicFilter {
25
- val: string | number;
26
- type: DynamicFilterOperator;
27
- }
50
+ /**
51
+ * A custom filter.
52
+ *
53
+ * @property {string | number} val The value to be compared.
54
+ * @property {CustomFilterOperator} [operator] The operator of the comparison. If this field is empty, the operator would be 'equal'.
55
+ */
28
56
  export interface ICustomFilter {
29
57
  val: string | number;
30
- /** This field may be empty. */
31
58
  operator?: CustomFilterOperator;
32
59
  }
33
60
  /**
@@ -44,6 +71,10 @@ export declare enum CustomFilterOperator {
44
71
  LESS_THAN_OR_EQUAL = "lessThanOrEqual",
45
72
  NOT_EQUALS = "notEqual"
46
73
  }
74
+ export interface IDynamicFilter {
75
+ val: string | number;
76
+ type: DynamicFilterOperator;
77
+ }
47
78
  /**
48
79
  * Not used now. Would be used in the future.
49
80
  */
@@ -5,4 +5,5 @@ export declare class UniverSheetsFilterPlugin extends Plugin {
5
5
  static pluginName: string;
6
6
  constructor(_config: unknown, _injector: Injector);
7
7
  onStarting(): void;
8
+ onReady(): void;
8
9
  }
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([core.OnLifecycle(core.LifecycleStages.Ready,exports2.SheetsFilterService),__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([core.OnLifecycle(core.LifecycleStages.Ready,SheetsFilterController),__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))}},__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.8",
3
+ "version": "0.2.10",
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.8",
49
- "@univerjs/core": "0.2.8"
48
+ "@univerjs/sheets": "0.2.10",
49
+ "@univerjs/core": "0.2.10"
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/core": "0.2.8",
57
- "@univerjs/shared": "0.2.8",
58
- "@univerjs/sheets": "0.2.8"
56
+ "@univerjs/shared": "0.2.10",
57
+ "@univerjs/core": "0.2.10",
58
+ "@univerjs/sheets": "0.2.10"
59
59
  },
60
60
  "univerSpace": {
61
61
  ".": {