@univerjs/sheets-sort 0.2.5 → 0.2.7
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 +191 -186
- package/lib/types/plugin.d.ts +1 -1
- package/lib/umd/index.js +1 -1
- package/package.json +11 -11
package/lib/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var E=Object.defineProperty;var M=(e,r,t)=>r in e?E(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t;var d=(e,r,t)=>M(e,typeof r!="symbol"?r+"":r,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("@univerjs/core"),R=require("@univerjs/sheets"),j=require("@univerjs/engine-formula");var f=(e=>(e.DESC="desc",e.ASC="asc",e))(f||{});const y=e=>e.replace(/-/gi,"").replace(/'/gi,""),$=(e,r)=>{const t=e===null||e==="",o=r===null||r==="";return t&&o?0:t?1:o?-1:null},V=(e,r,t)=>{const o=typeof e=="number",n=typeof r=="number";return o&&n?e<r?t===f.ASC?-1:1:e>r?t===f.ASC?1:-1:0:o?t===f.ASC?1:-1:n?t===f.ASC?-1:1:null},x=(e,r,t)=>{const o=typeof e=="string",n=typeof r=="string";if(o&&(e=y(e.toLocaleLowerCase())),n&&(r=y(r.toLocaleLowerCase())),!o&&!n)return null;if(o&&n){const s=e,i=r;return s<i?t===f.ASC?-1:1:s>i?t===f.ASC?1:-1:0}return o?t===f.ASC?1:-1:n?t===f.ASC?-1:1:null},D=e=>!e||Object.keys(e).length===0||(e==null?void 0:e.v)==null&&(e==null?void 0:e.p)==null;var L=Object.defineProperty,q=Object.getOwnPropertyDescriptor,B=(e,r,t,o)=>{for(var n=o>1?void 0:o?q(r,t):r,s=e.length-1,i;s>=0;s--)(i=e[s])&&(n=(o?i(r,t,n):i(n))||n);return o&&n&&L(r,t,n),n},_=(e,r)=>(t,o)=>r(t,o,e);exports.SheetsSortService=class extends u.Disposable{constructor(t,o,n){super();d(this,"_compareFns",[]);this._univerInstanceService=t,this._commandService=o,this._formulaDataModel=n}mergeCheck(t){var l;const{unitId:o,subUnitId:n,range:s}=t,i=(l=this._univerInstanceService.getUnit(o))==null?void 0:l.getSheetBySheetId(n);if(!i)return!1;const c=i.getMergeData().filter(a=>u.Rectangle.contains(s,a));return c.length===0?!0:G(s,c)}emptyCheck(t){var c;const{unitId:o,subUnitId:n,range:s}=t,i=(c=this._univerInstanceService.getUnit(o))==null?void 0:c.getSheetBySheetId(n);if(!i)return!1;for(let l=s.startRow;l<=s.endRow;l++)for(let a=s.startColumn;a<=s.endColumn;a++)if(!D(i.getCellRaw(l,a)))return!0;return!1}singleCheck(t){return t.range.startRow!==t.range.endRow}formulaCheck(t){var c,l;const{unitId:o,subUnitId:n,range:s}=t,i=(l=(c=this._formulaDataModel.getArrayFormulaRange())==null?void 0:c[o])==null?void 0:l[n];for(const a in i){const S=i[Number(a)];for(const C in S){const g=S[Number(C)];if(g&&u.Rectangle.intersects(s,g))return!1}}return!0}registerCompareFn(t){this._compareFns.unshift(t)}getAllCompareFns(){return this._compareFns}applySort(t,o,n){var c;const{unitId:s,subUnitId:i}=R.getSheetCommandTarget(this._univerInstanceService)||{};this._commandService.executeCommand(I.id,{orderRules:t.orderRules,range:t.range,hasTitle:(c=t.hasTitle)!=null?c:!1,unitId:o||s,subUnitId:n||i})}};exports.SheetsSortService=B([u.OnLifecycle(u.LifecycleStages.Ready,exports.SheetsSortService),_(0,u.IUniverInstanceService),_(1,u.ICommandService),_(2,u.Inject(j.FormulaDataModel))],exports.SheetsSortService);function G(e,r){const t=e.endRow-e.startRow+1,o=e.endColumn-e.startColumn+1;let n=null,s=null;const i=t*o;let c=0;for(const l of r)if(l.startRow>=e.startRow&&l.endRow<=e.endRow&&l.startColumn>=e.startColumn&&l.endColumn<=e.endColumn){const a=l.endRow-l.startRow+1,S=l.endColumn-l.startColumn+1;if(n===null&&s===null)n=a,s=S;else if(a!==n||S!==s)return!1;c+=a*S}return c===i}const I={id:"sheet.command.sort-range",type:u.CommandType.COMMAND,handler:(e,r)=>{const{range:t,orderRules:o,hasTitle:n,unitId:s,subUnitId:i}=r,c=e.get(exports.SheetsSortService),l=e.get(u.IUniverInstanceService),{worksheet:a}=R.getSheetCommandTarget(l,r)||{};if(!a)return!1;const S=a.getMergeData().filter(m=>u.Rectangle.contains(t,m)),C=S.map(m=>m.startRow),{startRow:g,endRow:F}=t,P=n?g+1:g,p=[],w=[];for(let m=P;m<=F;m++)a.getRowFiltered(m)||a.getRowRawVisible(m)!==!1&&(S.length&&!C.includes(m)||(p.push({index:m,value:H(a,m,o)}),w.push(m)));const N=c.getAllCompareFns();p.sort(z(o,W(N)));const b={};p.forEach(({index:m,value:re},T)=>{b[w[T]]=m});const O={id:R.ReorderRangeCommand.id,params:{unitId:s,subUnitId:i,range:t,order:b}},U=e.get(u.ICommandService);return u.sequenceExecute([O],U).result}};function H(e,r,t){const o=[];return t.forEach(({colIndex:n})=>{o.push(e.getCellRaw(r,n))}),o}function W(e){return(r,t,o)=>{for(let n=0;n<e.length;n++){const s=e[n](r,t,o);if(s!=null)return s}return 0}}function z(e,r){return function(t,o){let n=null;for(let s=0;s<e.length;s++){const i=t.value[s],c=o.value[s];if(n=r(e[s].type,i,c),n!==0&&n!==null&&n!==void 0)return n}return 0}}var J=Object.defineProperty,K=Object.getOwnPropertyDescriptor,Q=(e,r,t,o)=>{for(var n=o>1?void 0:o?K(r,t):r,s=e.length-1,i;s>=0;s--)(i=e[s])&&(n=(o?i(r,t,n):i(n))||n);return o&&n&&J(r,t,n),n},A=(e,r)=>(t,o)=>r(t,o,e);let h=class extends u.Disposable{constructor(e,r){super(),this._commandService=e,this._sortService=r,this._initCommands(),this._registerCompareFns()}_initCommands(){[I].forEach(e=>this.disposeWithMe(this._commandService.registerCommand(e)))}_registerCompareFns(){const e=(r,t,o)=>{const n=this._getCommonValue(t),s=this._getCommonValue(o),i=[$,x,V];for(let c=0;c<i.length;c++){const l=i[c](n,s,r);if(l!==null)return l}return null};this._sortService.registerCompareFn(e)}_getCommonValue(e){var t,o;if(D(e))return null;const r=(o=(t=e==null?void 0:e.p)==null?void 0:t.body)==null?void 0:o.dataStream;return r||((e==null?void 0:e.t)===u.CellValueType.NUMBER?Number.parseFloat(`${e.v}`):(e==null?void 0:e.t)===u.CellValueType.STRING?typeof e.v=="number"?e.v:`${e.v}`:(e==null?void 0:e.t)===u.CellValueType.BOOLEAN?`${e.v}`:(e==null?void 0:e.t)===u.CellValueType.FORCE_STRING?Number.parseFloat(`${e.v}`):`${e==null?void 0:e.v}`)}};h=Q([u.OnLifecycle(u.LifecycleStages.Ready,h),A(0,u.ICommandService),A(1,u.Inject(exports.SheetsSortService))],h);var X=Object.defineProperty,Y=Object.getOwnPropertyDescriptor,Z=(e,r,t,o)=>{for(var n=o>1?void 0:o?Y(r,t):r,s=e.length-1,i;s>=0;s--)(i=e[s])&&(n=(o?i(r,t,n):i(n))||n);return o&&n&&X(r,t,n),n},k=(e,r)=>(t,o)=>r(t,o,e);const ee="UNIVER_SHEETS_SORT_PLUGIN";var v;exports.UniverSheetsSortPlugin=(v=class extends u.Plugin{constructor(r,t){super(),this._injector=t}onStarting(r){[[h],[exports.SheetsSortService]].forEach(t=>r.add(t))}},d(v,"type",u.UniverInstanceType.UNIVER_SHEET),d(v,"pluginName",ee),v);exports.UniverSheetsSortPlugin=Z([k(1,u.Inject(u.Injector))],exports.UniverSheetsSortPlugin);exports.SortRangeCommand=I;exports.SortType=f;
|
|
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"),sheets=require("@univerjs/sheets"),engineFormula=require("@univerjs/engine-formula");var SortType=(SortType2=>(SortType2.DESC="desc",SortType2.ASC="asc",SortType2))(SortType||{});const removeStringSymbol=__name(str=>str.replace(/-/gi,"").replace(/'/gi,""),"removeStringSymbol"),compareNull=__name((a1,a2)=>{const isA1Null=a1===null||a1==="",isA2Null=a2===null||a2==="";return isA1Null&&isA2Null?0:isA1Null?1:isA2Null?-1:null},"compareNull"),compareNumber=__name((a1,a2,type)=>{const isA1Num=typeof a1=="number",isA2Num=typeof a2=="number";return isA1Num&&isA2Num?a1<a2?type===SortType.ASC?-1:1:a1>a2?type===SortType.ASC?1:-1:0:isA1Num?type===SortType.ASC?1:-1:isA2Num?type===SortType.ASC?-1:1:null},"compareNumber"),compareString=__name((a1,a2,type)=>{const isA1Str=typeof a1=="string",isA2Str=typeof a2=="string";if(isA1Str&&(a1=removeStringSymbol(a1.toLocaleLowerCase())),isA2Str&&(a2=removeStringSymbol(a2.toLocaleLowerCase())),!isA1Str&&!isA2Str)return null;if(isA1Str&&isA2Str){const a1AsString=a1,a2AsString=a2;return a1AsString<a2AsString?type===SortType.ASC?-1:1:a1AsString>a2AsString?type===SortType.ASC?1:-1:0}return isA1Str?type===SortType.ASC?1:-1:isA2Str?type===SortType.ASC?-1:1:null},"compareString"),isNullValue=__name(cell=>!cell||Object.keys(cell).length===0||(cell==null?void 0:cell.v)==null&&(cell==null?void 0:cell.p)==null,"isNullValue");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"),_a;exports.SheetsSortService=(_a=class extends core.Disposable{constructor(_univerInstanceService,_commandService,_formulaDataModel){super();__publicField(this,"_compareFns",[]);this._univerInstanceService=_univerInstanceService,this._commandService=_commandService,this._formulaDataModel=_formulaDataModel}mergeCheck(location){var _a4;const{unitId,subUnitId,range}=location,sheet=(_a4=this._univerInstanceService.getUnit(unitId))==null?void 0:_a4.getSheetBySheetId(subUnitId);if(!sheet)return!1;const mergeDataInRange=sheet.getMergeData().filter(merge=>core.Rectangle.contains(range,merge));return mergeDataInRange.length===0?!0:isRangeDividedEqually(range,mergeDataInRange)}emptyCheck(location){var _a4;const{unitId,subUnitId,range}=location,sheet=(_a4=this._univerInstanceService.getUnit(unitId))==null?void 0:_a4.getSheetBySheetId(subUnitId);if(!sheet)return!1;for(let row=range.startRow;row<=range.endRow;row++)for(let col=range.startColumn;col<=range.endColumn;col++)if(!isNullValue(sheet.getCellRaw(row,col)))return!0;return!1}singleCheck(location){return location.range.startRow!==location.range.endRow}formulaCheck(location){var _a4,_b;const{unitId,subUnitId,range}=location,arrayFormulaRange=(_b=(_a4=this._formulaDataModel.getArrayFormulaRange())==null?void 0:_a4[unitId])==null?void 0:_b[subUnitId];for(const row in arrayFormulaRange){const rowData=arrayFormulaRange[Number(row)];for(const col in rowData){const arrayFormula=rowData[Number(col)];if(arrayFormula&&core.Rectangle.intersects(range,arrayFormula))return!1}}return!0}registerCompareFn(fn){this._compareFns.unshift(fn)}getAllCompareFns(){return this._compareFns}applySort(sortOption,unitId,subUnitId){var _a4;const{unitId:_unitId,subUnitId:_subUnitId}=sheets.getSheetCommandTarget(this._univerInstanceService)||{};this._commandService.executeCommand(SortRangeCommand.id,{orderRules:sortOption.orderRules,range:sortOption.range,hasTitle:(_a4=sortOption.hasTitle)!=null?_a4:!1,unitId:unitId||_unitId,subUnitId:subUnitId||_subUnitId})}},__name(_a,"SheetsSortService"),_a);exports.SheetsSortService=__decorateClass$2([core.OnLifecycle(core.LifecycleStages.Ready,exports.SheetsSortService),__decorateParam$2(0,core.IUniverInstanceService),__decorateParam$2(1,core.ICommandService),__decorateParam$2(2,core.Inject(engineFormula.FormulaDataModel))],exports.SheetsSortService);function isRangeDividedEqually(range,merges){const rangeRows=range.endRow-range.startRow+1,rangeCols=range.endColumn-range.startColumn+1;let mergeRows=null,mergeCols=null;const totalArea=rangeRows*rangeCols;let totalMergeArea=0;for(const merge of merges)if(merge.startRow>=range.startRow&&merge.endRow<=range.endRow&&merge.startColumn>=range.startColumn&&merge.endColumn<=range.endColumn){const currentMergeRows=merge.endRow-merge.startRow+1,currentMergeCols=merge.endColumn-merge.startColumn+1;if(mergeRows===null&&mergeCols===null)mergeRows=currentMergeRows,mergeCols=currentMergeCols;else if(currentMergeRows!==mergeRows||currentMergeCols!==mergeCols)return!1;totalMergeArea+=currentMergeRows*currentMergeCols}return totalMergeArea===totalArea}__name(isRangeDividedEqually,"isRangeDividedEqually");const SortRangeCommand={id:"sheet.command.sort-range",type:core.CommandType.COMMAND,handler:__name((accessor,params)=>{const{range,orderRules,hasTitle,unitId,subUnitId}=params,sortService=accessor.get(exports.SheetsSortService),univerInstanceService=accessor.get(core.IUniverInstanceService),{worksheet}=sheets.getSheetCommandTarget(univerInstanceService,params)||{};if(!worksheet)return!1;const mergeDataInRange=worksheet.getMergeData().filter(mergeData=>core.Rectangle.contains(range,mergeData)),mergeMainRowIndexes=mergeDataInRange.map(mergeData=>mergeData.startRow),{startRow:rangeStartRow,endRow}=range,startRow=hasTitle?rangeStartRow+1:rangeStartRow,toReorder=[],oldOrder=[];for(let rowIndex=startRow;rowIndex<=endRow;rowIndex++)worksheet.getRowFiltered(rowIndex)||worksheet.getRowRawVisible(rowIndex)!==!1&&(mergeDataInRange.length&&!mergeMainRowIndexes.includes(rowIndex)||(toReorder.push({index:rowIndex,value:getRowCellData(worksheet,rowIndex,orderRules)}),oldOrder.push(rowIndex)));const compareFns=sortService.getAllCompareFns();toReorder.sort(reorderFnGenerator(orderRules,combineCompareFnsAsOne(compareFns)));const order={};toReorder.forEach(({index,value},oldIndex)=>{order[oldOrder[oldIndex]]=index});const reorderRangeCommand={id:sheets.ReorderRangeCommand.id,params:{unitId,subUnitId,range,order}},commandService=accessor.get(core.ICommandService);return core.sequenceExecute([reorderRangeCommand],commandService).result},"handler")};function getRowCellData(worksheet,rowIndex,orderRules){const result=[];return orderRules.forEach(({colIndex})=>{result.push(worksheet.getCellRaw(rowIndex,colIndex))}),result}__name(getRowCellData,"getRowCellData");function combineCompareFnsAsOne(compareFns){return(type,a,b)=>{for(let i=0;i<compareFns.length;i++){const res=compareFns[i](type,a,b);if(res!=null)return res}return 0}}__name(combineCompareFnsAsOne,"combineCompareFnsAsOne");function reorderFnGenerator(orderRules,valueCompare){return function(a,b){let ret=null;for(let index=0;index<orderRules.length;index++){const aCellData=a.value[index],bCellData=b.value[index];if(ret=valueCompare(orderRules[index].type,aCellData,bCellData),ret!==0&&ret!==null&&ret!==void 0)return ret}return 0}}__name(reorderFnGenerator,"reorderFnGenerator");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 SheetsSortController=(_a2=class extends core.Disposable{constructor(_commandService,_sortService){super(),this._commandService=_commandService,this._sortService=_sortService,this._initCommands(),this._registerCompareFns()}_initCommands(){[SortRangeCommand].forEach(command=>this.disposeWithMe(this._commandService.registerCommand(command)))}_registerCompareFns(){const commonFn=__name((type,a,b)=>{const valueA=this._getCommonValue(a),valueB=this._getCommonValue(b),compareTypeFns=[compareNull,compareString,compareNumber];for(let i=0;i<compareTypeFns.length;i++){const res=compareTypeFns[i](valueA,valueB,type);if(res!==null)return res}return null},"commonFn");this._sortService.registerCompareFn(commonFn)}_getCommonValue(a){var _a4,_b;if(isNullValue(a))return null;const richTextValue=(_b=(_a4=a==null?void 0:a.p)==null?void 0:_a4.body)==null?void 0:_b.dataStream;return richTextValue||((a==null?void 0:a.t)===core.CellValueType.NUMBER?Number.parseFloat(`${a.v}`):(a==null?void 0:a.t)===core.CellValueType.STRING?typeof a.v=="number"?a.v:`${a.v}`:(a==null?void 0:a.t)===core.CellValueType.BOOLEAN?`${a.v}`:(a==null?void 0:a.t)===core.CellValueType.FORCE_STRING?Number.parseFloat(`${a.v}`):`${a==null?void 0:a.v}`)}},__name(_a2,"SheetsSortController"),_a2);SheetsSortController=__decorateClass$1([core.OnLifecycle(core.LifecycleStages.Ready,SheetsSortController),__decorateParam$1(0,core.ICommandService),__decorateParam$1(1,core.Inject(exports.SheetsSortService))],SheetsSortController);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");const NAME="UNIVER_SHEETS_SORT_PLUGIN";var _a3;exports.UniverSheetsSortPlugin=(_a3=class extends core.Plugin{constructor(_config,_injector){super(),this._injector=_injector}onStarting(){[[SheetsSortController],[exports.SheetsSortService]].forEach(d=>this._injector.add(d))}},__name(_a3,"UniverSheetsSortPlugin"),__publicField(_a3,"type",core.UniverInstanceType.UNIVER_SHEET),__publicField(_a3,"pluginName",NAME),_a3);exports.UniverSheetsSortPlugin=__decorateClass([__decorateParam(1,core.Inject(core.Injector))],exports.UniverSheetsSortPlugin);exports.SortRangeCommand=SortRangeCommand;exports.SortType=SortType;
|
package/lib/es/index.js
CHANGED
|
@@ -1,237 +1,242 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value;
|
|
3
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: !0 });
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key != "symbol" ? key + "" : key, value);
|
|
5
|
+
import { OnLifecycle, LifecycleStages, Inject, Disposable, Rectangle, IUniverInstanceService, ICommandService, CommandType, sequenceExecute, CellValueType, Plugin, UniverInstanceType, Injector } from "@univerjs/core";
|
|
6
|
+
import { getSheetCommandTarget, ReorderRangeCommand } from "@univerjs/sheets";
|
|
7
|
+
import { FormulaDataModel } from "@univerjs/engine-formula";
|
|
8
|
+
var SortType = /* @__PURE__ */ ((SortType2) => (SortType2.DESC = "desc", SortType2.ASC = "asc", SortType2))(SortType || {});
|
|
9
|
+
const removeStringSymbol = /* @__PURE__ */ __name((str) => str.replace(/-/gi, "").replace(/'/gi, ""), "removeStringSymbol"), compareNull = /* @__PURE__ */ __name((a1, a2) => {
|
|
10
|
+
const isA1Null = a1 === null || a1 === "", isA2Null = a2 === null || a2 === "";
|
|
11
|
+
return isA1Null && isA2Null ? 0 : isA1Null ? 1 : isA2Null ? -1 : null;
|
|
12
|
+
}, "compareNull"), compareNumber = /* @__PURE__ */ __name((a1, a2, type) => {
|
|
13
|
+
const isA1Num = typeof a1 == "number", isA2Num = typeof a2 == "number";
|
|
14
|
+
return isA1Num && isA2Num ? a1 < a2 ? type === SortType.ASC ? -1 : 1 : a1 > a2 ? type === SortType.ASC ? 1 : -1 : 0 : isA1Num ? type === SortType.ASC ? 1 : -1 : isA2Num ? type === SortType.ASC ? -1 : 1 : null;
|
|
15
|
+
}, "compareNumber"), compareString = /* @__PURE__ */ __name((a1, a2, type) => {
|
|
16
|
+
const isA1Str = typeof a1 == "string", isA2Str = typeof a2 == "string";
|
|
17
|
+
if (isA1Str && (a1 = removeStringSymbol(a1.toLocaleLowerCase())), isA2Str && (a2 = removeStringSymbol(a2.toLocaleLowerCase())), !isA1Str && !isA2Str)
|
|
17
18
|
return null;
|
|
18
|
-
if (
|
|
19
|
-
const
|
|
20
|
-
return
|
|
21
|
-
}
|
|
22
|
-
return
|
|
23
|
-
},
|
|
24
|
-
var
|
|
25
|
-
for (var
|
|
26
|
-
(
|
|
27
|
-
return
|
|
28
|
-
},
|
|
29
|
-
let
|
|
30
|
-
constructor(
|
|
19
|
+
if (isA1Str && isA2Str) {
|
|
20
|
+
const a1AsString = a1, a2AsString = a2;
|
|
21
|
+
return a1AsString < a2AsString ? type === SortType.ASC ? -1 : 1 : a1AsString > a2AsString ? type === SortType.ASC ? 1 : -1 : 0;
|
|
22
|
+
}
|
|
23
|
+
return isA1Str ? type === SortType.ASC ? 1 : -1 : isA2Str ? type === SortType.ASC ? -1 : 1 : null;
|
|
24
|
+
}, "compareString"), isNullValue = /* @__PURE__ */ __name((cell) => !cell || Object.keys(cell).length === 0 || (cell == null ? void 0 : cell.v) == null && (cell == null ? void 0 : cell.p) == null, "isNullValue");
|
|
25
|
+
var __defProp$2 = Object.defineProperty, __getOwnPropDesc$2 = Object.getOwnPropertyDescriptor, __decorateClass$2 = /* @__PURE__ */ __name((decorators, target, key, kind) => {
|
|
26
|
+
for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$2(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
|
|
27
|
+
(decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
|
|
28
|
+
return kind && result && __defProp$2(target, key, result), result;
|
|
29
|
+
}, "__decorateClass$2"), __decorateParam$2 = /* @__PURE__ */ __name((index, decorator) => (target, key) => decorator(target, key, index), "__decorateParam$2"), _a;
|
|
30
|
+
let SheetsSortService = (_a = class extends Disposable {
|
|
31
|
+
constructor(_univerInstanceService, _commandService, _formulaDataModel) {
|
|
31
32
|
super();
|
|
32
|
-
|
|
33
|
-
this._univerInstanceService =
|
|
33
|
+
__publicField(this, "_compareFns", []);
|
|
34
|
+
this._univerInstanceService = _univerInstanceService, this._commandService = _commandService, this._formulaDataModel = _formulaDataModel;
|
|
34
35
|
}
|
|
35
|
-
mergeCheck(
|
|
36
|
-
var
|
|
37
|
-
const { unitId
|
|
38
|
-
if (!
|
|
36
|
+
mergeCheck(location) {
|
|
37
|
+
var _a4;
|
|
38
|
+
const { unitId, subUnitId, range } = location, sheet = (_a4 = this._univerInstanceService.getUnit(unitId)) == null ? void 0 : _a4.getSheetBySheetId(subUnitId);
|
|
39
|
+
if (!sheet)
|
|
39
40
|
return !1;
|
|
40
|
-
const
|
|
41
|
-
return
|
|
41
|
+
const mergeDataInRange = sheet.getMergeData().filter((merge) => Rectangle.contains(range, merge));
|
|
42
|
+
return mergeDataInRange.length === 0 ? !0 : isRangeDividedEqually(range, mergeDataInRange);
|
|
42
43
|
}
|
|
43
|
-
emptyCheck(
|
|
44
|
-
var
|
|
45
|
-
const { unitId
|
|
46
|
-
if (!
|
|
44
|
+
emptyCheck(location) {
|
|
45
|
+
var _a4;
|
|
46
|
+
const { unitId, subUnitId, range } = location, sheet = (_a4 = this._univerInstanceService.getUnit(unitId)) == null ? void 0 : _a4.getSheetBySheetId(subUnitId);
|
|
47
|
+
if (!sheet)
|
|
47
48
|
return !1;
|
|
48
|
-
for (let
|
|
49
|
-
for (let
|
|
50
|
-
if (!
|
|
49
|
+
for (let row = range.startRow; row <= range.endRow; row++)
|
|
50
|
+
for (let col = range.startColumn; col <= range.endColumn; col++)
|
|
51
|
+
if (!isNullValue(sheet.getCellRaw(row, col)))
|
|
51
52
|
return !0;
|
|
52
53
|
return !1;
|
|
53
54
|
}
|
|
54
|
-
singleCheck(
|
|
55
|
-
return
|
|
56
|
-
}
|
|
57
|
-
formulaCheck(
|
|
58
|
-
var
|
|
59
|
-
const { unitId
|
|
60
|
-
for (const
|
|
61
|
-
const
|
|
62
|
-
for (const
|
|
63
|
-
const
|
|
64
|
-
if (
|
|
55
|
+
singleCheck(location) {
|
|
56
|
+
return location.range.startRow !== location.range.endRow;
|
|
57
|
+
}
|
|
58
|
+
formulaCheck(location) {
|
|
59
|
+
var _a4, _b;
|
|
60
|
+
const { unitId, subUnitId, range } = location, arrayFormulaRange = (_b = (_a4 = this._formulaDataModel.getArrayFormulaRange()) == null ? void 0 : _a4[unitId]) == null ? void 0 : _b[subUnitId];
|
|
61
|
+
for (const row in arrayFormulaRange) {
|
|
62
|
+
const rowData = arrayFormulaRange[Number(row)];
|
|
63
|
+
for (const col in rowData) {
|
|
64
|
+
const arrayFormula = rowData[Number(col)];
|
|
65
|
+
if (arrayFormula && Rectangle.intersects(range, arrayFormula))
|
|
65
66
|
return !1;
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
return !0;
|
|
69
70
|
}
|
|
70
|
-
registerCompareFn(
|
|
71
|
-
this._compareFns.unshift(
|
|
71
|
+
registerCompareFn(fn) {
|
|
72
|
+
this._compareFns.unshift(fn);
|
|
72
73
|
}
|
|
73
74
|
getAllCompareFns() {
|
|
74
75
|
return this._compareFns;
|
|
75
76
|
}
|
|
76
|
-
applySort(
|
|
77
|
-
var
|
|
78
|
-
const { unitId:
|
|
79
|
-
this._commandService.executeCommand(
|
|
80
|
-
orderRules:
|
|
81
|
-
range:
|
|
82
|
-
hasTitle: (
|
|
83
|
-
unitId:
|
|
84
|
-
subUnitId:
|
|
77
|
+
applySort(sortOption, unitId, subUnitId) {
|
|
78
|
+
var _a4;
|
|
79
|
+
const { unitId: _unitId, subUnitId: _subUnitId } = getSheetCommandTarget(this._univerInstanceService) || {};
|
|
80
|
+
this._commandService.executeCommand(SortRangeCommand.id, {
|
|
81
|
+
orderRules: sortOption.orderRules,
|
|
82
|
+
range: sortOption.range,
|
|
83
|
+
hasTitle: (_a4 = sortOption.hasTitle) != null ? _a4 : !1,
|
|
84
|
+
unitId: unitId || _unitId,
|
|
85
|
+
subUnitId: subUnitId || _subUnitId
|
|
85
86
|
});
|
|
86
87
|
}
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
],
|
|
94
|
-
function
|
|
95
|
-
const
|
|
96
|
-
let
|
|
97
|
-
const
|
|
98
|
-
let
|
|
99
|
-
for (const
|
|
100
|
-
if (
|
|
101
|
-
const
|
|
102
|
-
if (
|
|
103
|
-
|
|
104
|
-
else if (
|
|
88
|
+
}, __name(_a, "SheetsSortService"), _a);
|
|
89
|
+
SheetsSortService = __decorateClass$2([
|
|
90
|
+
OnLifecycle(LifecycleStages.Ready, SheetsSortService),
|
|
91
|
+
__decorateParam$2(0, IUniverInstanceService),
|
|
92
|
+
__decorateParam$2(1, ICommandService),
|
|
93
|
+
__decorateParam$2(2, Inject(FormulaDataModel))
|
|
94
|
+
], SheetsSortService);
|
|
95
|
+
function isRangeDividedEqually(range, merges) {
|
|
96
|
+
const rangeRows = range.endRow - range.startRow + 1, rangeCols = range.endColumn - range.startColumn + 1;
|
|
97
|
+
let mergeRows = null, mergeCols = null;
|
|
98
|
+
const totalArea = rangeRows * rangeCols;
|
|
99
|
+
let totalMergeArea = 0;
|
|
100
|
+
for (const merge of merges)
|
|
101
|
+
if (merge.startRow >= range.startRow && merge.endRow <= range.endRow && merge.startColumn >= range.startColumn && merge.endColumn <= range.endColumn) {
|
|
102
|
+
const currentMergeRows = merge.endRow - merge.startRow + 1, currentMergeCols = merge.endColumn - merge.startColumn + 1;
|
|
103
|
+
if (mergeRows === null && mergeCols === null)
|
|
104
|
+
mergeRows = currentMergeRows, mergeCols = currentMergeCols;
|
|
105
|
+
else if (currentMergeRows !== mergeRows || currentMergeCols !== mergeCols)
|
|
105
106
|
return !1;
|
|
106
|
-
|
|
107
|
+
totalMergeArea += currentMergeRows * currentMergeCols;
|
|
107
108
|
}
|
|
108
|
-
return
|
|
109
|
+
return totalMergeArea === totalArea;
|
|
109
110
|
}
|
|
110
|
-
|
|
111
|
+
__name(isRangeDividedEqually, "isRangeDividedEqually");
|
|
112
|
+
const SortRangeCommand = {
|
|
111
113
|
id: "sheet.command.sort-range",
|
|
112
|
-
type:
|
|
113
|
-
handler: (
|
|
114
|
-
const { range
|
|
115
|
-
if (!
|
|
114
|
+
type: CommandType.COMMAND,
|
|
115
|
+
handler: /* @__PURE__ */ __name((accessor, params) => {
|
|
116
|
+
const { range, orderRules, hasTitle, unitId, subUnitId } = params, sortService = accessor.get(SheetsSortService), univerInstanceService = accessor.get(IUniverInstanceService), { worksheet } = getSheetCommandTarget(univerInstanceService, params) || {};
|
|
117
|
+
if (!worksheet)
|
|
116
118
|
return !1;
|
|
117
|
-
const
|
|
118
|
-
for (let
|
|
119
|
-
|
|
120
|
-
index:
|
|
121
|
-
value:
|
|
122
|
-
}),
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
119
|
+
const mergeDataInRange = worksheet.getMergeData().filter((mergeData) => Rectangle.contains(range, mergeData)), mergeMainRowIndexes = mergeDataInRange.map((mergeData) => mergeData.startRow), { startRow: rangeStartRow, endRow } = range, startRow = hasTitle ? rangeStartRow + 1 : rangeStartRow, toReorder = [], oldOrder = [];
|
|
120
|
+
for (let rowIndex = startRow; rowIndex <= endRow; rowIndex++)
|
|
121
|
+
worksheet.getRowFiltered(rowIndex) || worksheet.getRowRawVisible(rowIndex) !== !1 && (mergeDataInRange.length && !mergeMainRowIndexes.includes(rowIndex) || (toReorder.push({
|
|
122
|
+
index: rowIndex,
|
|
123
|
+
value: getRowCellData(worksheet, rowIndex, orderRules)
|
|
124
|
+
}), oldOrder.push(rowIndex)));
|
|
125
|
+
const compareFns = sortService.getAllCompareFns();
|
|
126
|
+
toReorder.sort(reorderFnGenerator(orderRules, combineCompareFnsAsOne(compareFns)));
|
|
127
|
+
const order = {};
|
|
128
|
+
toReorder.forEach(({ index, value }, oldIndex) => {
|
|
129
|
+
order[oldOrder[oldIndex]] = index;
|
|
128
130
|
});
|
|
129
|
-
const
|
|
130
|
-
id:
|
|
131
|
+
const reorderRangeCommand = {
|
|
132
|
+
id: ReorderRangeCommand.id,
|
|
131
133
|
params: {
|
|
132
|
-
unitId
|
|
133
|
-
subUnitId
|
|
134
|
-
range
|
|
135
|
-
order
|
|
134
|
+
unitId,
|
|
135
|
+
subUnitId,
|
|
136
|
+
range,
|
|
137
|
+
order
|
|
136
138
|
}
|
|
137
|
-
},
|
|
138
|
-
return
|
|
139
|
-
}
|
|
139
|
+
}, commandService = accessor.get(ICommandService);
|
|
140
|
+
return sequenceExecute([reorderRangeCommand], commandService).result;
|
|
141
|
+
}, "handler")
|
|
140
142
|
};
|
|
141
|
-
function
|
|
142
|
-
const
|
|
143
|
-
return
|
|
144
|
-
|
|
145
|
-
}),
|
|
143
|
+
function getRowCellData(worksheet, rowIndex, orderRules) {
|
|
144
|
+
const result = [];
|
|
145
|
+
return orderRules.forEach(({ colIndex }) => {
|
|
146
|
+
result.push(worksheet.getCellRaw(rowIndex, colIndex));
|
|
147
|
+
}), result;
|
|
146
148
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
149
|
+
__name(getRowCellData, "getRowCellData");
|
|
150
|
+
function combineCompareFnsAsOne(compareFns) {
|
|
151
|
+
return (type, a, b) => {
|
|
152
|
+
for (let i = 0; i < compareFns.length; i++) {
|
|
153
|
+
const res = compareFns[i](type, a, b);
|
|
154
|
+
if (res != null)
|
|
155
|
+
return res;
|
|
153
156
|
}
|
|
154
157
|
return 0;
|
|
155
158
|
};
|
|
156
159
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
160
|
+
__name(combineCompareFnsAsOne, "combineCompareFnsAsOne");
|
|
161
|
+
function reorderFnGenerator(orderRules, valueCompare) {
|
|
162
|
+
return function(a, b) {
|
|
163
|
+
let ret = null;
|
|
164
|
+
for (let index = 0; index < orderRules.length; index++) {
|
|
165
|
+
const aCellData = a.value[index], bCellData = b.value[index];
|
|
166
|
+
if (ret = valueCompare(orderRules[index].type, aCellData, bCellData), ret !== 0 && ret !== null && ret !== void 0)
|
|
167
|
+
return ret;
|
|
164
168
|
}
|
|
165
169
|
return 0;
|
|
166
170
|
};
|
|
167
171
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
__name(reorderFnGenerator, "reorderFnGenerator");
|
|
173
|
+
var __defProp$1 = Object.defineProperty, __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor, __decorateClass$1 = /* @__PURE__ */ __name((decorators, target, key, kind) => {
|
|
174
|
+
for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
|
|
175
|
+
(decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
|
|
176
|
+
return kind && result && __defProp$1(target, key, result), result;
|
|
177
|
+
}, "__decorateClass$1"), __decorateParam$1 = /* @__PURE__ */ __name((index, decorator) => (target, key) => decorator(target, key, index), "__decorateParam$1"), _a2;
|
|
178
|
+
let SheetsSortController = (_a2 = class extends Disposable {
|
|
179
|
+
constructor(_commandService, _sortService) {
|
|
180
|
+
super(), this._commandService = _commandService, this._sortService = _sortService, this._initCommands(), this._registerCompareFns();
|
|
176
181
|
}
|
|
177
182
|
_initCommands() {
|
|
178
183
|
[
|
|
179
|
-
|
|
180
|
-
].forEach((
|
|
184
|
+
SortRangeCommand
|
|
185
|
+
].forEach((command) => this.disposeWithMe(this._commandService.registerCommand(command)));
|
|
181
186
|
}
|
|
182
187
|
_registerCompareFns() {
|
|
183
|
-
const
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
+
const commonFn = /* @__PURE__ */ __name((type, a, b) => {
|
|
189
|
+
const valueA = this._getCommonValue(a), valueB = this._getCommonValue(b), compareTypeFns = [
|
|
190
|
+
compareNull,
|
|
191
|
+
compareString,
|
|
192
|
+
compareNumber
|
|
188
193
|
];
|
|
189
|
-
for (let
|
|
190
|
-
const
|
|
191
|
-
if (
|
|
192
|
-
return
|
|
194
|
+
for (let i = 0; i < compareTypeFns.length; i++) {
|
|
195
|
+
const res = compareTypeFns[i](valueA, valueB, type);
|
|
196
|
+
if (res !== null)
|
|
197
|
+
return res;
|
|
193
198
|
}
|
|
194
199
|
return null;
|
|
195
|
-
};
|
|
196
|
-
this._sortService.registerCompareFn(
|
|
200
|
+
}, "commonFn");
|
|
201
|
+
this._sortService.registerCompareFn(commonFn);
|
|
197
202
|
}
|
|
198
|
-
_getCommonValue(
|
|
199
|
-
var
|
|
200
|
-
if (
|
|
203
|
+
_getCommonValue(a) {
|
|
204
|
+
var _a4, _b;
|
|
205
|
+
if (isNullValue(a))
|
|
201
206
|
return null;
|
|
202
|
-
const
|
|
203
|
-
return
|
|
204
|
-
}
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
],
|
|
211
|
-
var
|
|
212
|
-
for (var
|
|
213
|
-
(
|
|
214
|
-
return
|
|
215
|
-
},
|
|
216
|
-
const
|
|
217
|
-
var
|
|
218
|
-
let
|
|
219
|
-
constructor(
|
|
220
|
-
super(), this._injector =
|
|
221
|
-
}
|
|
222
|
-
onStarting(
|
|
207
|
+
const richTextValue = (_b = (_a4 = a == null ? void 0 : a.p) == null ? void 0 : _a4.body) == null ? void 0 : _b.dataStream;
|
|
208
|
+
return richTextValue || ((a == null ? void 0 : a.t) === CellValueType.NUMBER ? Number.parseFloat(`${a.v}`) : (a == null ? void 0 : a.t) === CellValueType.STRING ? typeof a.v == "number" ? a.v : `${a.v}` : (a == null ? void 0 : a.t) === CellValueType.BOOLEAN ? `${a.v}` : (a == null ? void 0 : a.t) === CellValueType.FORCE_STRING ? Number.parseFloat(`${a.v}`) : `${a == null ? void 0 : a.v}`);
|
|
209
|
+
}
|
|
210
|
+
}, __name(_a2, "SheetsSortController"), _a2);
|
|
211
|
+
SheetsSortController = __decorateClass$1([
|
|
212
|
+
OnLifecycle(LifecycleStages.Ready, SheetsSortController),
|
|
213
|
+
__decorateParam$1(0, ICommandService),
|
|
214
|
+
__decorateParam$1(1, Inject(SheetsSortService))
|
|
215
|
+
], SheetsSortController);
|
|
216
|
+
var __defProp2 = Object.defineProperty, __getOwnPropDesc = Object.getOwnPropertyDescriptor, __decorateClass = /* @__PURE__ */ __name((decorators, target, key, kind) => {
|
|
217
|
+
for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
|
|
218
|
+
(decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
|
|
219
|
+
return kind && result && __defProp2(target, key, result), result;
|
|
220
|
+
}, "__decorateClass"), __decorateParam = /* @__PURE__ */ __name((index, decorator) => (target, key) => decorator(target, key, index), "__decorateParam");
|
|
221
|
+
const NAME = "UNIVER_SHEETS_SORT_PLUGIN";
|
|
222
|
+
var _a3;
|
|
223
|
+
let UniverSheetsSortPlugin = (_a3 = class extends Plugin {
|
|
224
|
+
constructor(_config, _injector) {
|
|
225
|
+
super(), this._injector = _injector;
|
|
226
|
+
}
|
|
227
|
+
onStarting() {
|
|
223
228
|
[
|
|
224
|
-
[
|
|
225
|
-
[
|
|
226
|
-
].forEach((
|
|
227
|
-
}
|
|
228
|
-
},
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
],
|
|
229
|
+
[SheetsSortController],
|
|
230
|
+
[SheetsSortService]
|
|
231
|
+
].forEach((d) => this._injector.add(d));
|
|
232
|
+
}
|
|
233
|
+
}, __name(_a3, "UniverSheetsSortPlugin"), __publicField(_a3, "type", UniverInstanceType.UNIVER_SHEET), __publicField(_a3, "pluginName", NAME), _a3);
|
|
234
|
+
UniverSheetsSortPlugin = __decorateClass([
|
|
235
|
+
__decorateParam(1, Inject(Injector))
|
|
236
|
+
], UniverSheetsSortPlugin);
|
|
232
237
|
export {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
238
|
+
SheetsSortService,
|
|
239
|
+
SortRangeCommand,
|
|
240
|
+
SortType,
|
|
241
|
+
UniverSheetsSortPlugin
|
|
237
242
|
};
|
package/lib/types/plugin.d.ts
CHANGED
package/lib/umd/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(l,i){typeof exports=="object"&&typeof module<"u"?i(exports,require("@univerjs/core"),require("@univerjs/sheets"),require("@univerjs/engine-formula")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@univerjs/sheets","@univerjs/engine-formula"],i):(l=typeof globalThis<"u"?globalThis:l||self,i(l.UniverSheetsSort={},l.UniverCore,l.UniverSheets,l.UniverEngineFormula))})(this,function(l,i,v,F){"use strict";var ee=Object.defineProperty;var te=(l,i,v)=>i in l?ee(l,i,{enumerable:!0,configurable:!0,writable:!0,value:v}):l[i]=v;var _=(l,i,v)=>te(l,typeof i!="symbol"?i+"":i,v);var C;var S=(e=>(e.DESC="desc",e.ASC="asc",e))(S||{});const y=e=>e.replace(/-/gi,"").replace(/'/gi,""),P=(e,s)=>{const t=e===null||e==="",n=s===null||s==="";return t&&n?0:t?1:n?-1:null},N=(e,s,t)=>{const n=typeof e=="number",r=typeof s=="number";return n&&r?e<s?t===S.ASC?-1:1:e>s?t===S.ASC?1:-1:0:n?t===S.ASC?1:-1:r?t===S.ASC?-1:1:null},O=(e,s,t)=>{const n=typeof e=="string",r=typeof s=="string";if(n&&(e=y(e.toLocaleLowerCase())),r&&(s=y(s.toLocaleLowerCase())),!n&&!r)return null;if(n&&r){const o=e,u=s;return o<u?t===S.ASC?-1:1:o>u?t===S.ASC?1:-1:0}return n?t===S.ASC?1:-1:r?t===S.ASC?-1:1:null},b=e=>!e||Object.keys(e).length===0||(e==null?void 0:e.v)==null&&(e==null?void 0:e.p)==null;var T=Object.defineProperty,j=Object.getOwnPropertyDescriptor,E=(e,s,t,n)=>{for(var r=n>1?void 0:n?j(s,t):s,o=e.length-1,u;o>=0;o--)(u=e[o])&&(r=(n?u(s,t,r):u(r))||r);return n&&r&&T(s,t,r),r},p=(e,s)=>(t,n)=>s(t,n,e);l.SheetsSortService=class extends i.Disposable{constructor(t,n,r){super();_(this,"_compareFns",[]);this._univerInstanceService=t,this._commandService=n,this._formulaDataModel=r}mergeCheck(t){var a;const{unitId:n,subUnitId:r,range:o}=t,u=(a=this._univerInstanceService.getUnit(n))==null?void 0:a.getSheetBySheetId(r);if(!u)return!1;const c=u.getMergeData().filter(f=>i.Rectangle.contains(o,f));return c.length===0?!0:M(o,c)}emptyCheck(t){var c;const{unitId:n,subUnitId:r,range:o}=t,u=(c=this._univerInstanceService.getUnit(n))==null?void 0:c.getSheetBySheetId(r);if(!u)return!1;for(let a=o.startRow;a<=o.endRow;a++)for(let f=o.startColumn;f<=o.endColumn;f++)if(!b(u.getCellRaw(a,f)))return!0;return!1}singleCheck(t){return t.range.startRow!==t.range.endRow}formulaCheck(t){var c,a;const{unitId:n,subUnitId:r,range:o}=t,u=(a=(c=this._formulaDataModel.getArrayFormulaRange())==null?void 0:c[n])==null?void 0:a[r];for(const f in u){const d=u[Number(f)];for(const I in d){const g=d[Number(I)];if(g&&i.Rectangle.intersects(o,g))return!1}}return!0}registerCompareFn(t){this._compareFns.unshift(t)}getAllCompareFns(){return this._compareFns}applySort(t,n,r){var c;const{unitId:o,subUnitId:u}=v.getSheetCommandTarget(this._univerInstanceService)||{};this._commandService.executeCommand(R.id,{orderRules:t.orderRules,range:t.range,hasTitle:(c=t.hasTitle)!=null?c:!1,unitId:n||o,subUnitId:r||u})}},l.SheetsSortService=E([i.OnLifecycle(i.LifecycleStages.Ready,l.SheetsSortService),p(0,i.IUniverInstanceService),p(1,i.ICommandService),p(2,i.Inject(F.FormulaDataModel))],l.SheetsSortService);function M(e,s){const t=e.endRow-e.startRow+1,n=e.endColumn-e.startColumn+1;let r=null,o=null;const u=t*n;let c=0;for(const a of s)if(a.startRow>=e.startRow&&a.endRow<=e.endRow&&a.startColumn>=e.startColumn&&a.endColumn<=e.endColumn){const f=a.endRow-a.startRow+1,d=a.endColumn-a.startColumn+1;if(r===null&&o===null)r=f,o=d;else if(f!==r||d!==o)return!1;c+=f*d}return c===u}const R={id:"sheet.command.sort-range",type:i.CommandType.COMMAND,handler:(e,s)=>{const{range:t,orderRules:n,hasTitle:r,unitId:o,subUnitId:u}=s,c=e.get(l.SheetsSortService),a=e.get(i.IUniverInstanceService),{worksheet:f}=v.getSheetCommandTarget(a,s)||{};if(!f)return!1;const d=f.getMergeData().filter(m=>i.Rectangle.contains(t,m)),I=d.map(m=>m.startRow),{startRow:g,endRow:K}=t,Q=r?g+1:g,w=[],U=[];for(let m=Q;m<=K;m++)f.getRowFiltered(m)||f.getRowRawVisible(m)!==!1&&(d.length&&!I.includes(m)||(w.push({index:m,value:$(f,m,n)}),U.push(m)));const X=c.getAllCompareFns();w.sort(L(n,V(X)));const D={};w.forEach(({index:m,value:ne},k)=>{D[U[k]]=m});const Y={id:v.ReorderRangeCommand.id,params:{unitId:o,subUnitId:u,range:t,order:D}},Z=e.get(i.ICommandService);return i.sequenceExecute([Y],Z).result}};function $(e,s,t){const n=[];return t.forEach(({colIndex:r})=>{n.push(e.getCellRaw(s,r))}),n}function V(e){return(s,t,n)=>{for(let r=0;r<e.length;r++){const o=e[r](s,t,n);if(o!=null)return o}return 0}}function L(e,s){return function(t,n){let r=null;for(let o=0;o<e.length;o++){const u=t.value[o],c=n.value[o];if(r=s(e[o].type,u,c),r!==0&&r!==null&&r!==void 0)return r}return 0}}var q=Object.defineProperty,B=Object.getOwnPropertyDescriptor,G=(e,s,t,n)=>{for(var r=n>1?void 0:n?B(s,t):s,o=e.length-1,u;o>=0;o--)(u=e[o])&&(r=(n?u(s,t,r):u(r))||r);return n&&r&&q(s,t,r),r},A=(e,s)=>(t,n)=>s(t,n,e);let h=class extends i.Disposable{constructor(e,s){super(),this._commandService=e,this._sortService=s,this._initCommands(),this._registerCompareFns()}_initCommands(){[R].forEach(e=>this.disposeWithMe(this._commandService.registerCommand(e)))}_registerCompareFns(){const e=(s,t,n)=>{const r=this._getCommonValue(t),o=this._getCommonValue(n),u=[P,O,N];for(let c=0;c<u.length;c++){const a=u[c](r,o,s);if(a!==null)return a}return null};this._sortService.registerCompareFn(e)}_getCommonValue(e){var t,n;if(b(e))return null;const s=(n=(t=e==null?void 0:e.p)==null?void 0:t.body)==null?void 0:n.dataStream;return s||((e==null?void 0:e.t)===i.CellValueType.NUMBER?Number.parseFloat(`${e.v}`):(e==null?void 0:e.t)===i.CellValueType.STRING?typeof e.v=="number"?e.v:`${e.v}`:(e==null?void 0:e.t)===i.CellValueType.BOOLEAN?`${e.v}`:(e==null?void 0:e.t)===i.CellValueType.FORCE_STRING?Number.parseFloat(`${e.v}`):`${e==null?void 0:e.v}`)}};h=G([i.OnLifecycle(i.LifecycleStages.Ready,h),A(0,i.ICommandService),A(1,i.Inject(l.SheetsSortService))],h);var H=Object.defineProperty,x=Object.getOwnPropertyDescriptor,W=(e,s,t,n)=>{for(var r=n>1?void 0:n?x(s,t):s,o=e.length-1,u;o>=0;o--)(u=e[o])&&(r=(n?u(s,t,r):u(r))||r);return n&&r&&H(s,t,r),r},z=(e,s)=>(t,n)=>s(t,n,e);const J="UNIVER_SHEETS_SORT_PLUGIN";l.UniverSheetsSortPlugin=(C=class extends i.Plugin{constructor(s,t){super(),this._injector=t}onStarting(s){[[h],[l.SheetsSortService]].forEach(t=>s.add(t))}},_(C,"type",i.UniverInstanceType.UNIVER_SHEET),_(C,"pluginName",J),C),l.UniverSheetsSortPlugin=W([z(1,i.Inject(i.Injector))],l.UniverSheetsSortPlugin),l.SortRangeCommand=R,l.SortType=S,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(global,factory){typeof exports=="object"&&typeof module<"u"?factory(exports,require("@univerjs/core"),require("@univerjs/sheets"),require("@univerjs/engine-formula")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@univerjs/sheets","@univerjs/engine-formula"],factory):(global=typeof globalThis<"u"?globalThis:global||self,factory(global.UniverSheetsSort={},global.UniverCore,global.UniverSheets,global.UniverEngineFormula))})(this,function(exports2,core,sheets,engineFormula){"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 SortType=(SortType2=>(SortType2.DESC="desc",SortType2.ASC="asc",SortType2))(SortType||{});const removeStringSymbol=__name(str=>str.replace(/-/gi,"").replace(/'/gi,""),"removeStringSymbol"),compareNull=__name((a1,a2)=>{const isA1Null=a1===null||a1==="",isA2Null=a2===null||a2==="";return isA1Null&&isA2Null?0:isA1Null?1:isA2Null?-1:null},"compareNull"),compareNumber=__name((a1,a2,type)=>{const isA1Num=typeof a1=="number",isA2Num=typeof a2=="number";return isA1Num&&isA2Num?a1<a2?type===SortType.ASC?-1:1:a1>a2?type===SortType.ASC?1:-1:0:isA1Num?type===SortType.ASC?1:-1:isA2Num?type===SortType.ASC?-1:1:null},"compareNumber"),compareString=__name((a1,a2,type)=>{const isA1Str=typeof a1=="string",isA2Str=typeof a2=="string";if(isA1Str&&(a1=removeStringSymbol(a1.toLocaleLowerCase())),isA2Str&&(a2=removeStringSymbol(a2.toLocaleLowerCase())),!isA1Str&&!isA2Str)return null;if(isA1Str&&isA2Str){const a1AsString=a1,a2AsString=a2;return a1AsString<a2AsString?type===SortType.ASC?-1:1:a1AsString>a2AsString?type===SortType.ASC?1:-1:0}return isA1Str?type===SortType.ASC?1:-1:isA2Str?type===SortType.ASC?-1:1:null},"compareString"),isNullValue=__name(cell=>!cell||Object.keys(cell).length===0||(cell==null?void 0:cell.v)==null&&(cell==null?void 0:cell.p)==null,"isNullValue");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");exports2.SheetsSortService=(_a=class extends core.Disposable{constructor(_univerInstanceService,_commandService,_formulaDataModel){super();__publicField(this,"_compareFns",[]);this._univerInstanceService=_univerInstanceService,this._commandService=_commandService,this._formulaDataModel=_formulaDataModel}mergeCheck(location){var _a2;const{unitId,subUnitId,range}=location,sheet=(_a2=this._univerInstanceService.getUnit(unitId))==null?void 0:_a2.getSheetBySheetId(subUnitId);if(!sheet)return!1;const mergeDataInRange=sheet.getMergeData().filter(merge=>core.Rectangle.contains(range,merge));return mergeDataInRange.length===0?!0:isRangeDividedEqually(range,mergeDataInRange)}emptyCheck(location){var _a2;const{unitId,subUnitId,range}=location,sheet=(_a2=this._univerInstanceService.getUnit(unitId))==null?void 0:_a2.getSheetBySheetId(subUnitId);if(!sheet)return!1;for(let row=range.startRow;row<=range.endRow;row++)for(let col=range.startColumn;col<=range.endColumn;col++)if(!isNullValue(sheet.getCellRaw(row,col)))return!0;return!1}singleCheck(location){return location.range.startRow!==location.range.endRow}formulaCheck(location){var _a2,_b2;const{unitId,subUnitId,range}=location,arrayFormulaRange=(_b2=(_a2=this._formulaDataModel.getArrayFormulaRange())==null?void 0:_a2[unitId])==null?void 0:_b2[subUnitId];for(const row in arrayFormulaRange){const rowData=arrayFormulaRange[Number(row)];for(const col in rowData){const arrayFormula=rowData[Number(col)];if(arrayFormula&&core.Rectangle.intersects(range,arrayFormula))return!1}}return!0}registerCompareFn(fn){this._compareFns.unshift(fn)}getAllCompareFns(){return this._compareFns}applySort(sortOption,unitId,subUnitId){var _a2;const{unitId:_unitId,subUnitId:_subUnitId}=sheets.getSheetCommandTarget(this._univerInstanceService)||{};this._commandService.executeCommand(SortRangeCommand.id,{orderRules:sortOption.orderRules,range:sortOption.range,hasTitle:(_a2=sortOption.hasTitle)!=null?_a2:!1,unitId:unitId||_unitId,subUnitId:subUnitId||_subUnitId})}},__name(_a,"SheetsSortService"),_a),exports2.SheetsSortService=__decorateClass$2([core.OnLifecycle(core.LifecycleStages.Ready,exports2.SheetsSortService),__decorateParam$2(0,core.IUniverInstanceService),__decorateParam$2(1,core.ICommandService),__decorateParam$2(2,core.Inject(engineFormula.FormulaDataModel))],exports2.SheetsSortService);function isRangeDividedEqually(range,merges){const rangeRows=range.endRow-range.startRow+1,rangeCols=range.endColumn-range.startColumn+1;let mergeRows=null,mergeCols=null;const totalArea=rangeRows*rangeCols;let totalMergeArea=0;for(const merge of merges)if(merge.startRow>=range.startRow&&merge.endRow<=range.endRow&&merge.startColumn>=range.startColumn&&merge.endColumn<=range.endColumn){const currentMergeRows=merge.endRow-merge.startRow+1,currentMergeCols=merge.endColumn-merge.startColumn+1;if(mergeRows===null&&mergeCols===null)mergeRows=currentMergeRows,mergeCols=currentMergeCols;else if(currentMergeRows!==mergeRows||currentMergeCols!==mergeCols)return!1;totalMergeArea+=currentMergeRows*currentMergeCols}return totalMergeArea===totalArea}__name(isRangeDividedEqually,"isRangeDividedEqually");const SortRangeCommand={id:"sheet.command.sort-range",type:core.CommandType.COMMAND,handler:__name((accessor,params)=>{const{range,orderRules,hasTitle,unitId,subUnitId}=params,sortService=accessor.get(exports2.SheetsSortService),univerInstanceService=accessor.get(core.IUniverInstanceService),{worksheet}=sheets.getSheetCommandTarget(univerInstanceService,params)||{};if(!worksheet)return!1;const mergeDataInRange=worksheet.getMergeData().filter(mergeData=>core.Rectangle.contains(range,mergeData)),mergeMainRowIndexes=mergeDataInRange.map(mergeData=>mergeData.startRow),{startRow:rangeStartRow,endRow}=range,startRow=hasTitle?rangeStartRow+1:rangeStartRow,toReorder=[],oldOrder=[];for(let rowIndex=startRow;rowIndex<=endRow;rowIndex++)worksheet.getRowFiltered(rowIndex)||worksheet.getRowRawVisible(rowIndex)!==!1&&(mergeDataInRange.length&&!mergeMainRowIndexes.includes(rowIndex)||(toReorder.push({index:rowIndex,value:getRowCellData(worksheet,rowIndex,orderRules)}),oldOrder.push(rowIndex)));const compareFns=sortService.getAllCompareFns();toReorder.sort(reorderFnGenerator(orderRules,combineCompareFnsAsOne(compareFns)));const order={};toReorder.forEach(({index,value},oldIndex)=>{order[oldOrder[oldIndex]]=index});const reorderRangeCommand={id:sheets.ReorderRangeCommand.id,params:{unitId,subUnitId,range,order}},commandService=accessor.get(core.ICommandService);return core.sequenceExecute([reorderRangeCommand],commandService).result},"handler")};function getRowCellData(worksheet,rowIndex,orderRules){const result=[];return orderRules.forEach(({colIndex})=>{result.push(worksheet.getCellRaw(rowIndex,colIndex))}),result}__name(getRowCellData,"getRowCellData");function combineCompareFnsAsOne(compareFns){return(type,a,b)=>{for(let i=0;i<compareFns.length;i++){const res=compareFns[i](type,a,b);if(res!=null)return res}return 0}}__name(combineCompareFnsAsOne,"combineCompareFnsAsOne");function reorderFnGenerator(orderRules,valueCompare){return function(a,b){let ret=null;for(let index=0;index<orderRules.length;index++){const aCellData=a.value[index],bCellData=b.value[index];if(ret=valueCompare(orderRules[index].type,aCellData,bCellData),ret!==0&&ret!==null&&ret!==void 0)return ret}return 0}}__name(reorderFnGenerator,"reorderFnGenerator");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 SheetsSortController=(_b=class extends core.Disposable{constructor(_commandService,_sortService){super(),this._commandService=_commandService,this._sortService=_sortService,this._initCommands(),this._registerCompareFns()}_initCommands(){[SortRangeCommand].forEach(command=>this.disposeWithMe(this._commandService.registerCommand(command)))}_registerCompareFns(){const commonFn=__name((type,a,b)=>{const valueA=this._getCommonValue(a),valueB=this._getCommonValue(b),compareTypeFns=[compareNull,compareString,compareNumber];for(let i=0;i<compareTypeFns.length;i++){const res=compareTypeFns[i](valueA,valueB,type);if(res!==null)return res}return null},"commonFn");this._sortService.registerCompareFn(commonFn)}_getCommonValue(a){var _a2,_b2;if(isNullValue(a))return null;const richTextValue=(_b2=(_a2=a==null?void 0:a.p)==null?void 0:_a2.body)==null?void 0:_b2.dataStream;return richTextValue||((a==null?void 0:a.t)===core.CellValueType.NUMBER?Number.parseFloat(`${a.v}`):(a==null?void 0:a.t)===core.CellValueType.STRING?typeof a.v=="number"?a.v:`${a.v}`:(a==null?void 0:a.t)===core.CellValueType.BOOLEAN?`${a.v}`:(a==null?void 0:a.t)===core.CellValueType.FORCE_STRING?Number.parseFloat(`${a.v}`):`${a==null?void 0:a.v}`)}},__name(_b,"SheetsSortController"),_b);SheetsSortController=__decorateClass$1([core.OnLifecycle(core.LifecycleStages.Ready,SheetsSortController),__decorateParam$1(0,core.ICommandService),__decorateParam$1(1,core.Inject(exports2.SheetsSortService))],SheetsSortController);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");const NAME="UNIVER_SHEETS_SORT_PLUGIN";exports2.UniverSheetsSortPlugin=(_c=class extends core.Plugin{constructor(_config,_injector){super(),this._injector=_injector}onStarting(){[[SheetsSortController],[exports2.SheetsSortService]].forEach(d=>this._injector.add(d))}},__name(_c,"UniverSheetsSortPlugin"),__publicField(_c,"type",core.UniverInstanceType.UNIVER_SHEET),__publicField(_c,"pluginName",NAME),_c),exports2.UniverSheetsSortPlugin=__decorateClass([__decorateParam(1,core.Inject(core.Injector))],exports2.UniverSheetsSortPlugin),exports2.SortRangeCommand=SortRangeCommand,exports2.SortType=SortType,Object.defineProperty(exports2,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@univerjs/sheets-sort",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A library for sorting data in Univer Sheet",
|
|
6
6
|
"author": "DreamNum <developer@univer.ai>",
|
|
@@ -45,19 +45,19 @@
|
|
|
45
45
|
"lib"
|
|
46
46
|
],
|
|
47
47
|
"peerDependencies": {
|
|
48
|
-
"@univerjs/
|
|
49
|
-
"@univerjs/
|
|
50
|
-
"@univerjs/
|
|
48
|
+
"@univerjs/sheets": "0.2.7",
|
|
49
|
+
"@univerjs/core": "0.2.7",
|
|
50
|
+
"@univerjs/engine-formula": "0.2.7"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"rxjs": "^7.8.1",
|
|
54
|
-
"typescript": "^5.5.
|
|
55
|
-
"vite": "^5.3.
|
|
56
|
-
"vitest": "^2.0.
|
|
57
|
-
"@univerjs/core": "0.2.
|
|
58
|
-
"@univerjs/engine-formula": "0.2.
|
|
59
|
-
"@univerjs/sheets": "0.2.
|
|
60
|
-
"@univerjs/shared": "0.2.
|
|
54
|
+
"typescript": "^5.5.4",
|
|
55
|
+
"vite": "^5.3.5",
|
|
56
|
+
"vitest": "^2.0.5",
|
|
57
|
+
"@univerjs/core": "0.2.7",
|
|
58
|
+
"@univerjs/engine-formula": "0.2.7",
|
|
59
|
+
"@univerjs/sheets": "0.2.7",
|
|
60
|
+
"@univerjs/shared": "0.2.7"
|
|
61
61
|
},
|
|
62
62
|
"univerSpace": {
|
|
63
63
|
".": {
|