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