@univerjs/sheets-sort 0.20.1 → 0.21.0

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.
Files changed (44) hide show
  1. package/lib/cjs/facade.js +125 -1
  2. package/lib/cjs/index.js +406 -1
  3. package/lib/cjs/locale/ca-ES.js +18 -1
  4. package/lib/cjs/locale/en-US.js +33 -1
  5. package/lib/cjs/locale/es-ES.js +18 -1
  6. package/lib/cjs/locale/fa-IR.js +18 -1
  7. package/lib/cjs/locale/fr-FR.js +18 -1
  8. package/lib/cjs/locale/ja-JP.js +18 -1
  9. package/lib/cjs/locale/ko-KR.js +18 -1
  10. package/lib/cjs/locale/ru-RU.js +18 -1
  11. package/lib/cjs/locale/sk-SK.js +18 -1
  12. package/lib/cjs/locale/vi-VN.js +18 -1
  13. package/lib/cjs/locale/zh-CN.js +18 -1
  14. package/lib/cjs/locale/zh-TW.js +18 -1
  15. package/lib/es/facade.js +126 -1
  16. package/lib/es/index.js +392 -1
  17. package/lib/es/locale/ca-ES.js +17 -1
  18. package/lib/es/locale/en-US.js +32 -1
  19. package/lib/es/locale/es-ES.js +17 -1
  20. package/lib/es/locale/fa-IR.js +17 -1
  21. package/lib/es/locale/fr-FR.js +17 -1
  22. package/lib/es/locale/ja-JP.js +17 -1
  23. package/lib/es/locale/ko-KR.js +17 -1
  24. package/lib/es/locale/ru-RU.js +17 -1
  25. package/lib/es/locale/sk-SK.js +17 -1
  26. package/lib/es/locale/vi-VN.js +17 -1
  27. package/lib/es/locale/zh-CN.js +17 -1
  28. package/lib/es/locale/zh-TW.js +17 -1
  29. package/lib/facade.js +126 -1
  30. package/lib/index.js +392 -1
  31. package/lib/locale/ca-ES.js +17 -1
  32. package/lib/locale/en-US.js +32 -1
  33. package/lib/locale/es-ES.js +17 -1
  34. package/lib/locale/fa-IR.js +17 -1
  35. package/lib/locale/fr-FR.js +17 -1
  36. package/lib/locale/ja-JP.js +17 -1
  37. package/lib/locale/ko-KR.js +17 -1
  38. package/lib/locale/ru-RU.js +17 -1
  39. package/lib/locale/sk-SK.js +17 -1
  40. package/lib/locale/vi-VN.js +17 -1
  41. package/lib/locale/zh-CN.js +17 -1
  42. package/lib/locale/zh-TW.js +17 -1
  43. package/lib/umd/index.js +1 -1
  44. package/package.json +6 -6
package/lib/cjs/facade.js CHANGED
@@ -1 +1,125 @@
1
- let e=require(`@univerjs/core`),t=require(`@univerjs/core/facade`),n=require(`@univerjs/sheets-sort`),r=require(`@univerjs/sheets/facade`);var i=class extends t.FUniver{_initialize(t){let r=t.get(e.ICommandService);this.disposeWithMe(this.registerEventHandler(this.Event.SheetBeforeRangeSort,()=>r.beforeCommandExecuted(e=>{e.id===n.SortRangeCommand.id&&this._beforeRangeSort(e)}))),this.disposeWithMe(this.registerEventHandler(this.Event.SheetRangeSorted,()=>r.onCommandExecuted(e=>{e.id===n.SortRangeCommand.id&&this._onRangeSorted(e)})))}_beforeRangeSort(e){let t=e.params,r=this.getUniverSheet(t.unitId),i=r.getSheetBySheetId(t.subUnitId),{startColumn:a,endColumn:o,startRow:s,endRow:c}=t.range,l={workbook:r,worksheet:i,range:i.getRange(s,a,c-s+1,o-a+1),sortColumn:t.orderRules.map(e=>({column:e.colIndex-a,ascending:e.type===n.SortType.ASC}))};if(this.fireEvent(this.Event.SheetBeforeRangeSort,l),l.cancel)throw Error(`SortRangeCommand canceled.`)}_onRangeSorted(e){let t=e.params,r=this.getUniverSheet(t.unitId),i=r.getSheetBySheetId(t.subUnitId),{startColumn:a,endColumn:o,startRow:s,endRow:c}=t.range,l={workbook:r,worksheet:i,range:i.getRange(s,a,c-s+1,o-a+1),sortColumn:t.orderRules.map(e=>({column:e.colIndex-a,ascending:e.type===n.SortType.ASC}))};if(this.fireEvent(this.Event.SheetRangeSorted,l),l.cancel)throw Error(`SortRangeCommand canceled.`)}};t.FUniver.extend(i);var a=class extends r.FRange{sort(e){let t=this._range.startColumn,r=(Array.isArray(e)?e:[e]).map(e=>typeof e==`number`?{colIndex:e+t,type:n.SortType.ASC}:{colIndex:e.column+t,type:e.ascending?n.SortType.ASC:n.SortType.DESC});return this._commandService.syncExecuteCommand(n.SortRangeCommand.id,{orderRules:r,range:this._range,hasTitle:!1,unitId:this._workbook.getUnitId(),subUnitId:this._worksheet.getSheetId()}),this}};r.FRange.extend(a);var o=class extends r.FWorksheet{sort(t,r=!0){let i=[{colIndex:t,type:r?n.SortType.ASC:n.SortType.DESC}],a={startRow:0,startColumn:0,endRow:this._worksheet.getRowCount()-1,endColumn:this._worksheet.getColumnCount()-1,rangeType:e.RANGE_TYPE.ALL};return this._commandService.syncExecuteCommand(n.SortRangeCommand.id,{orderRules:i,range:a,hasTitle:!1,unitId:this._workbook.getUnitId(),subUnitId:this._worksheet.getSheetId()}),this}};r.FWorksheet.extend(o);var s=class{get SheetRangeSorted(){return`SheetRangeSorted`}get SheetBeforeRangeSort(){return`SheetBeforeRangeSort`}};t.FEventName.extend(s);
1
+ let _univerjs_core = require("@univerjs/core");
2
+ let _univerjs_core_facade = require("@univerjs/core/facade");
3
+ let _univerjs_sheets_sort = require("@univerjs/sheets-sort");
4
+ let _univerjs_sheets_facade = require("@univerjs/sheets/facade");
5
+
6
+ //#region src/facade/f-univer.ts
7
+ var FUniverSheetsSortMixin = class extends _univerjs_core_facade.FUniver {
8
+ /**
9
+ * @ignore
10
+ */
11
+ _initialize(injector) {
12
+ const commandService = injector.get(_univerjs_core.ICommandService);
13
+ this.disposeWithMe(this.registerEventHandler(this.Event.SheetBeforeRangeSort, () => commandService.beforeCommandExecuted((commandInfo) => {
14
+ if (commandInfo.id !== _univerjs_sheets_sort.SortRangeCommand.id) return;
15
+ this._beforeRangeSort(commandInfo);
16
+ })));
17
+ this.disposeWithMe(this.registerEventHandler(this.Event.SheetRangeSorted, () => commandService.onCommandExecuted((commandInfo) => {
18
+ if (commandInfo.id !== _univerjs_sheets_sort.SortRangeCommand.id) return;
19
+ this._onRangeSorted(commandInfo);
20
+ })));
21
+ }
22
+ _beforeRangeSort(commandInfo) {
23
+ const params = commandInfo.params;
24
+ const fWorkbook = this.getUniverSheet(params.unitId);
25
+ const fWorksheet = fWorkbook.getSheetBySheetId(params.subUnitId);
26
+ const { startColumn, endColumn, startRow, endRow } = params.range;
27
+ const eventParams = {
28
+ workbook: fWorkbook,
29
+ worksheet: fWorksheet,
30
+ range: fWorksheet.getRange(startRow, startColumn, endRow - startRow + 1, endColumn - startColumn + 1),
31
+ sortColumn: params.orderRules.map((rule) => ({
32
+ column: rule.colIndex - startColumn,
33
+ ascending: rule.type === _univerjs_sheets_sort.SortType.ASC
34
+ }))
35
+ };
36
+ this.fireEvent(this.Event.SheetBeforeRangeSort, eventParams);
37
+ if (eventParams.cancel) throw new Error("SortRangeCommand canceled.");
38
+ }
39
+ _onRangeSorted(commandInfo) {
40
+ const params = commandInfo.params;
41
+ const fWorkbook = this.getUniverSheet(params.unitId);
42
+ const fWorksheet = fWorkbook.getSheetBySheetId(params.subUnitId);
43
+ const { startColumn, endColumn, startRow, endRow } = params.range;
44
+ const eventParams = {
45
+ workbook: fWorkbook,
46
+ worksheet: fWorksheet,
47
+ range: fWorksheet.getRange(startRow, startColumn, endRow - startRow + 1, endColumn - startColumn + 1),
48
+ sortColumn: params.orderRules.map((rule) => ({
49
+ column: rule.colIndex - startColumn,
50
+ ascending: rule.type === _univerjs_sheets_sort.SortType.ASC
51
+ }))
52
+ };
53
+ this.fireEvent(this.Event.SheetRangeSorted, eventParams);
54
+ if (eventParams.cancel) throw new Error("SortRangeCommand canceled.");
55
+ }
56
+ };
57
+ _univerjs_core_facade.FUniver.extend(FUniverSheetsSortMixin);
58
+
59
+ //#endregion
60
+ //#region src/facade/f-range.ts
61
+ var FRangeSheetsSortMixin = class extends _univerjs_sheets_facade.FRange {
62
+ sort(column) {
63
+ const columnBase = this._range.startColumn;
64
+ const orderRules = (Array.isArray(column) ? column : [column]).map((c) => {
65
+ if (typeof c === "number") return {
66
+ colIndex: c + columnBase,
67
+ type: _univerjs_sheets_sort.SortType.ASC
68
+ };
69
+ return {
70
+ colIndex: c.column + columnBase,
71
+ type: c.ascending ? _univerjs_sheets_sort.SortType.ASC : _univerjs_sheets_sort.SortType.DESC
72
+ };
73
+ });
74
+ this._commandService.syncExecuteCommand(_univerjs_sheets_sort.SortRangeCommand.id, {
75
+ orderRules,
76
+ range: this._range,
77
+ hasTitle: false,
78
+ unitId: this._workbook.getUnitId(),
79
+ subUnitId: this._worksheet.getSheetId()
80
+ });
81
+ return this;
82
+ }
83
+ };
84
+ _univerjs_sheets_facade.FRange.extend(FRangeSheetsSortMixin);
85
+
86
+ //#endregion
87
+ //#region src/facade/f-worksheet.ts
88
+ var FWorksheetSortMixin = class extends _univerjs_sheets_facade.FWorksheet {
89
+ sort(colIndex, asc = true) {
90
+ const orderRules = [{
91
+ colIndex,
92
+ type: asc ? _univerjs_sheets_sort.SortType.ASC : _univerjs_sheets_sort.SortType.DESC
93
+ }];
94
+ const range = {
95
+ startRow: 0,
96
+ startColumn: 0,
97
+ endRow: this._worksheet.getRowCount() - 1,
98
+ endColumn: this._worksheet.getColumnCount() - 1,
99
+ rangeType: _univerjs_core.RANGE_TYPE.ALL
100
+ };
101
+ this._commandService.syncExecuteCommand(_univerjs_sheets_sort.SortRangeCommand.id, {
102
+ orderRules,
103
+ range,
104
+ hasTitle: false,
105
+ unitId: this._workbook.getUnitId(),
106
+ subUnitId: this._worksheet.getSheetId()
107
+ });
108
+ return this;
109
+ }
110
+ };
111
+ _univerjs_sheets_facade.FWorksheet.extend(FWorksheetSortMixin);
112
+
113
+ //#endregion
114
+ //#region src/facade/f-event.ts
115
+ var FSheetsSortEventNameMixin = class {
116
+ get SheetRangeSorted() {
117
+ return "SheetRangeSorted";
118
+ }
119
+ get SheetBeforeRangeSort() {
120
+ return "SheetBeforeRangeSort";
121
+ }
122
+ };
123
+ _univerjs_core_facade.FEventName.extend(FSheetsSortEventNameMixin);
124
+
125
+ //#endregion
package/lib/cjs/index.js CHANGED
@@ -1 +1,406 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@univerjs/core`),t=require(`@univerjs/sheets`),n=require(`@univerjs/engine-formula`),r=function(e){return e.DESC=`desc`,e.ASC=`asc`,e}({}),i=function(e){return e[e.POSITIVE=1]=`POSITIVE`,e[e.NEGATIVE=-1]=`NEGATIVE`,e[e.ZERO=0]=`ZERO`,e}({});const a=e=>e.replace(/-/gi,``).replace(/'/gi,``),o=(e,t)=>{let n=e===null||e===``,r=t===null||t===``;return n&&r?i.ZERO:n?i.POSITIVE:r?i.NEGATIVE:null},s=(e,t,n)=>{let a=typeof e==`number`,o=typeof t==`number`;return a&&o?e<t?n===r.ASC?i.NEGATIVE:i.POSITIVE:e>t?n===r.ASC?i.POSITIVE:i.NEGATIVE:i.ZERO:a?n===r.ASC?i.POSITIVE:i.NEGATIVE:o?n===r.ASC?i.NEGATIVE:i.POSITIVE:null},c=(e,t,n)=>{let o=typeof e==`string`,s=typeof t==`string`;if(o&&(e=a(e.toLocaleLowerCase())),s&&(t=a(t.toLocaleLowerCase())),!o&&!s)return null;if(o&&s){let a=e,o=t;return a<o?n===r.ASC?i.NEGATIVE:i.POSITIVE:a>o?n===r.ASC?i.POSITIVE:i.NEGATIVE:i.ZERO}return o?n===r.ASC?i.POSITIVE:i.NEGATIVE:s?n===r.ASC?i.NEGATIVE:i.POSITIVE:null},l=e=>!e||Object.keys(e).length===0||(e==null?void 0:e.v)==null&&(e==null?void 0:e.p)==null;function u(e){"@babel/helpers - typeof";return u=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},u(e)}function d(e,t){if(u(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(u(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function f(e){var t=d(e,`string`);return u(t)==`symbol`?t:t+``}function p(e,t,n){return(t=f(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e,t){return function(n,r){t(n,r,e)}}function h(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let g=class extends e.Disposable{constructor(e,t,n){super(),this._univerInstanceService=e,this._commandService=t,this._formulaDataModel=n,p(this,`_compareFns`,[])}mergeCheck(t){var n;let{unitId:r,subUnitId:i,range:a}=t,o=(n=this._univerInstanceService.getUnit(r))==null?void 0:n.getSheetBySheetId(i);if(!o)return!1;let s=o.getMergeData().filter(t=>e.Rectangle.contains(a,t));return s.length===0?!0:_(a,s)}emptyCheck(e){var t;let{unitId:n,subUnitId:r,range:i}=e,a=(t=this._univerInstanceService.getUnit(n))==null?void 0:t.getSheetBySheetId(r);if(!a)return!1;for(let e=i.startRow;e<=i.endRow;e++)for(let t=i.startColumn;t<=i.endColumn;t++)if(!l(a.getCellRaw(e,t)))return!0;return!1}singleCheck(e){return e.range.startRow!==e.range.endRow}formulaCheck(t){var n;let{unitId:r,subUnitId:i,range:a}=t,o=(n=this._formulaDataModel.getArrayFormulaRange())==null||(n=n[r])==null?void 0:n[i];for(let t in o){let n=o[Number(t)];for(let t in n){let r=n[Number(t)];if(r&&e.Rectangle.intersects(a,r))return!1}}return!0}registerCompareFn(e){this._compareFns.unshift(e)}getAllCompareFns(){return this._compareFns}applySort(e,n,r){var i;let{unitId:a,subUnitId:o}=(0,t.getSheetCommandTarget)(this._univerInstanceService)||{};this._commandService.executeCommand(v.id,{orderRules:e.orderRules,range:e.range,hasTitle:(i=e.hasTitle)==null?!1:i,unitId:n||a,subUnitId:r||o})}};g=h([m(0,e.IUniverInstanceService),m(1,e.ICommandService),m(2,(0,e.Inject)(n.FormulaDataModel))],g);function _(e,t){let n=e.endRow-e.startRow+1,r=e.endColumn-e.startColumn+1,i=null,a=null,o=n*r,s=0;for(let n of t)if(n.startRow>=e.startRow&&n.endRow<=e.endRow&&n.startColumn>=e.startColumn&&n.endColumn<=e.endColumn){let e=n.endRow-n.startRow+1,t=n.endColumn-n.startColumn+1;if(i===null&&a===null)i=e,a=t;else if(e!==i||t!==a)return!1;s+=e*t}return s===o}const v={id:`sheet.command.sort-range`,type:e.CommandType.COMMAND,handler:(n,r)=>{let{range:i,orderRules:a,hasTitle:o,unitId:s,subUnitId:c}=r,l=n.get(g),{worksheet:u}=(0,t.getSheetCommandTarget)(n.get(e.IUniverInstanceService),r)||{};if(!u)return!1;let d=u.getMergeData().filter(t=>e.Rectangle.contains(i,t)),f=d.map(e=>e.startRow),{startRow:p,endRow:m}=i,h=o?p+1:p,_=[],v=[];for(let e=h;e<=m;e++)u.getRowFiltered(e)||u.getRowRawVisible(e)!==!1&&(d.length&&!f.includes(e)||(_.push({index:e,value:y(u,e,a)}),v.push(e)));let S=l.getAllCompareFns();_.sort(x(a,b(S)));let C={};_.forEach(({index:e,value:t},n)=>{C[v[n]]=e});let w={id:t.ReorderRangeCommand.id,params:{unitId:s,subUnitId:c,range:i,order:C}},T=n.get(e.ICommandService);return(0,e.sequenceExecute)([w],T).result}};function y(e,t,n){let r=[];return n.forEach(({colIndex:n})=>{r.push(e.getCellRaw(t,n))}),r}function b(e){return(t,n,r)=>{for(let i=0;i<e.length;i++){let a=e[i](t,n,r);if(a!=null)return a}return 0}}function x(e,t){return function(n,r){let i=null;for(let a=0;a<e.length;a++){let o=n.value[a],s=r.value[a];if(i=t(e[a].type,o,s),i!==0&&i!=null)return i}return 0}}var S=`@univerjs/sheets-sort`,C=`0.20.1`;const w=`sheets-sort.config`;Symbol(w);const T={};let E=class extends e.Disposable{constructor(e,t){super(),this._commandService=e,this._sortService=t,this._initCommands(),this._registerCompareFns()}_initCommands(){[v].forEach(e=>this.disposeWithMe(this._commandService.registerCommand(e)))}_registerCompareFns(){this._sortService.registerCompareFn((e,t,n)=>{let r=this._getCommonValue(t),i=this._getCommonValue(n),a=[o,c,s];for(let t=0;t<a.length;t++){let n=a[t](r,i,e);if(n!==null)return n}return null})}_getCommonValue(t){var n;return l(t)?null:(t==null||(n=t.p)==null||(n=n.body)==null?void 0:n.dataStream)||((t==null?void 0:t.t)===e.CellValueType.NUMBER?Number.parseFloat(`${t.v}`):(t==null?void 0:t.t)===e.CellValueType.STRING?typeof t.v==`number`?t.v:`${t.v}`:(t==null?void 0:t.t)===e.CellValueType.BOOLEAN?`${t.v}`:(t==null?void 0:t.t)===e.CellValueType.FORCE_STRING?Number.parseFloat(`${t.v}`):`${t==null?void 0:t.v}`)}};E=h([m(0,e.ICommandService),m(1,(0,e.Inject)(g))],E);let D=class extends e.Plugin{constructor(t=T,n,r){super(),this._config=t,this._injector=n,this._configService=r;let{...i}=(0,e.merge)({},T,this._config);this._configService.setConfig(w,i)}onStarting(){[[E],[g]].forEach(e=>this._injector.add(e))}onReady(){this._injector.get(E)}};p(D,`type`,e.UniverInstanceType.UNIVER_SHEET),p(D,`pluginName`,`SHEET_SORT_PLUGIN`),p(D,`packageName`,S),p(D,`version`,C),D=h([(0,e.DependentOn)(t.UniverSheetsPlugin,n.UniverFormulaEnginePlugin),m(1,(0,e.Inject)(e.Injector)),m(2,e.IConfigService)],D),Object.defineProperty(exports,`SheetsSortService`,{enumerable:!0,get:function(){return g}}),exports.SortRangeCommand=v,exports.SortType=r,Object.defineProperty(exports,`UniverSheetsSortPlugin`,{enumerable:!0,get:function(){return D}});
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ let _univerjs_core = require("@univerjs/core");
3
+ let _univerjs_sheets = require("@univerjs/sheets");
4
+ let _univerjs_engine_formula = require("@univerjs/engine-formula");
5
+
6
+ //#region src/services/interface.ts
7
+ let SortType = /* @__PURE__ */ function(SortType) {
8
+ SortType["DESC"] = "desc";
9
+ SortType["ASC"] = "asc";
10
+ return SortType;
11
+ }({});
12
+
13
+ //#endregion
14
+ //#region src/controllers/utils.ts
15
+ let ORDER = /* @__PURE__ */ function(ORDER) {
16
+ ORDER[ORDER["POSITIVE"] = 1] = "POSITIVE";
17
+ ORDER[ORDER["NEGATIVE"] = -1] = "NEGATIVE";
18
+ ORDER[ORDER["ZERO"] = 0] = "ZERO";
19
+ return ORDER;
20
+ }({});
21
+ const removeStringSymbol = (str) => {
22
+ return str.replace(/-/gi, "").replace(/'/gi, "");
23
+ };
24
+ const compareNull = (a1, a2) => {
25
+ const isA1Null = a1 === null || a1 === "";
26
+ const isA2Null = a2 === null || a2 === "";
27
+ if (isA1Null && isA2Null) return ORDER.ZERO;
28
+ if (isA1Null) return ORDER.POSITIVE;
29
+ if (isA2Null) return ORDER.NEGATIVE;
30
+ return null;
31
+ };
32
+ const compareNumber = (a1, a2, type) => {
33
+ const isA1Num = typeof a1 === "number";
34
+ const isA2Num = typeof a2 === "number";
35
+ if (isA1Num && isA2Num) {
36
+ if (a1 < a2) return type === SortType.ASC ? ORDER.NEGATIVE : ORDER.POSITIVE;
37
+ if (a1 > a2) return type === SortType.ASC ? ORDER.POSITIVE : ORDER.NEGATIVE;
38
+ return ORDER.ZERO;
39
+ }
40
+ if (isA1Num) return type === SortType.ASC ? ORDER.POSITIVE : ORDER.NEGATIVE;
41
+ if (isA2Num) return type === SortType.ASC ? ORDER.NEGATIVE : ORDER.POSITIVE;
42
+ return null;
43
+ };
44
+ const compareString = (a1, a2, type) => {
45
+ const isA1Str = typeof a1 === "string";
46
+ const isA2Str = typeof a2 === "string";
47
+ if (isA1Str) a1 = removeStringSymbol(a1.toLocaleLowerCase());
48
+ if (isA2Str) a2 = removeStringSymbol(a2.toLocaleLowerCase());
49
+ if (!isA1Str && !isA2Str) return null;
50
+ if (isA1Str && isA2Str) {
51
+ const a1AsString = a1;
52
+ const a2AsString = a2;
53
+ if (a1AsString < a2AsString) return type === SortType.ASC ? ORDER.NEGATIVE : ORDER.POSITIVE;
54
+ if (a1AsString > a2AsString) return type === SortType.ASC ? ORDER.POSITIVE : ORDER.NEGATIVE;
55
+ return ORDER.ZERO;
56
+ }
57
+ if (isA1Str) return type === SortType.ASC ? ORDER.POSITIVE : ORDER.NEGATIVE;
58
+ if (isA2Str) return type === SortType.ASC ? ORDER.NEGATIVE : ORDER.POSITIVE;
59
+ return null;
60
+ };
61
+ const isNullValue = (cell) => {
62
+ if (!cell) return true;
63
+ if (Object.keys(cell).length === 0) return true;
64
+ if ((cell === null || cell === void 0 ? void 0 : cell.v) == null && (cell === null || cell === void 0 ? void 0 : cell.p) == null) return true;
65
+ return false;
66
+ };
67
+
68
+ //#endregion
69
+ //#region \0@oxc-project+runtime@0.124.0/helpers/typeof.js
70
+ function _typeof(o) {
71
+ "@babel/helpers - typeof";
72
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
73
+ return typeof o;
74
+ } : function(o) {
75
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
76
+ }, _typeof(o);
77
+ }
78
+
79
+ //#endregion
80
+ //#region \0@oxc-project+runtime@0.124.0/helpers/toPrimitive.js
81
+ function toPrimitive(t, r) {
82
+ if ("object" != _typeof(t) || !t) return t;
83
+ var e = t[Symbol.toPrimitive];
84
+ if (void 0 !== e) {
85
+ var i = e.call(t, r || "default");
86
+ if ("object" != _typeof(i)) return i;
87
+ throw new TypeError("@@toPrimitive must return a primitive value.");
88
+ }
89
+ return ("string" === r ? String : Number)(t);
90
+ }
91
+
92
+ //#endregion
93
+ //#region \0@oxc-project+runtime@0.124.0/helpers/toPropertyKey.js
94
+ function toPropertyKey(t) {
95
+ var i = toPrimitive(t, "string");
96
+ return "symbol" == _typeof(i) ? i : i + "";
97
+ }
98
+
99
+ //#endregion
100
+ //#region \0@oxc-project+runtime@0.124.0/helpers/defineProperty.js
101
+ function _defineProperty(e, r, t) {
102
+ return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
103
+ value: t,
104
+ enumerable: !0,
105
+ configurable: !0,
106
+ writable: !0
107
+ }) : e[r] = t, e;
108
+ }
109
+
110
+ //#endregion
111
+ //#region \0@oxc-project+runtime@0.124.0/helpers/decorateParam.js
112
+ function __decorateParam(paramIndex, decorator) {
113
+ return function(target, key) {
114
+ decorator(target, key, paramIndex);
115
+ };
116
+ }
117
+
118
+ //#endregion
119
+ //#region \0@oxc-project+runtime@0.124.0/helpers/decorate.js
120
+ function __decorate(decorators, target, key, desc) {
121
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
122
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
123
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
124
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
125
+ }
126
+
127
+ //#endregion
128
+ //#region src/services/sheets-sort.service.ts
129
+ let SheetsSortService = class SheetsSortService extends _univerjs_core.Disposable {
130
+ constructor(_univerInstanceService, _commandService, _formulaDataModel) {
131
+ super();
132
+ this._univerInstanceService = _univerInstanceService;
133
+ this._commandService = _commandService;
134
+ this._formulaDataModel = _formulaDataModel;
135
+ _defineProperty(this, "_compareFns", []);
136
+ }
137
+ mergeCheck(location) {
138
+ var _this$_univerInstance;
139
+ const { unitId, subUnitId, range } = location;
140
+ const sheet = (_this$_univerInstance = this._univerInstanceService.getUnit(unitId)) === null || _this$_univerInstance === void 0 ? void 0 : _this$_univerInstance.getSheetBySheetId(subUnitId);
141
+ if (!sheet) return false;
142
+ const mergeDataInRange = sheet.getMergeData().filter((merge) => _univerjs_core.Rectangle.contains(range, merge));
143
+ if (mergeDataInRange.length === 0) return true;
144
+ return isRangeDividedEqually(range, mergeDataInRange);
145
+ }
146
+ emptyCheck(location) {
147
+ var _this$_univerInstance2;
148
+ const { unitId, subUnitId, range } = location;
149
+ const sheet = (_this$_univerInstance2 = this._univerInstanceService.getUnit(unitId)) === null || _this$_univerInstance2 === void 0 ? void 0 : _this$_univerInstance2.getSheetBySheetId(subUnitId);
150
+ if (!sheet) return false;
151
+ 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 true;
152
+ return false;
153
+ }
154
+ singleCheck(location) {
155
+ if (location.range.startRow === location.range.endRow) return false;
156
+ return true;
157
+ }
158
+ formulaCheck(location) {
159
+ var _this$_formulaDataMod;
160
+ const { unitId, subUnitId, range } = location;
161
+ const arrayFormulaRange = (_this$_formulaDataMod = this._formulaDataModel.getArrayFormulaRange()) === null || _this$_formulaDataMod === void 0 || (_this$_formulaDataMod = _this$_formulaDataMod[unitId]) === null || _this$_formulaDataMod === void 0 ? void 0 : _this$_formulaDataMod[subUnitId];
162
+ for (const row in arrayFormulaRange) {
163
+ const rowData = arrayFormulaRange[Number(row)];
164
+ for (const col in rowData) {
165
+ const arrayFormula = rowData[Number(col)];
166
+ if (arrayFormula && _univerjs_core.Rectangle.intersects(range, arrayFormula)) return false;
167
+ }
168
+ }
169
+ return true;
170
+ }
171
+ registerCompareFn(fn) {
172
+ this._compareFns.unshift(fn);
173
+ }
174
+ getAllCompareFns() {
175
+ return this._compareFns;
176
+ }
177
+ applySort(sortOption, unitId, subUnitId) {
178
+ var _sortOption$hasTitle;
179
+ const { unitId: _unitId, subUnitId: _subUnitId } = (0, _univerjs_sheets.getSheetCommandTarget)(this._univerInstanceService) || {};
180
+ this._commandService.executeCommand(SortRangeCommand.id, {
181
+ orderRules: sortOption.orderRules,
182
+ range: sortOption.range,
183
+ hasTitle: (_sortOption$hasTitle = sortOption.hasTitle) !== null && _sortOption$hasTitle !== void 0 ? _sortOption$hasTitle : false,
184
+ unitId: unitId || _unitId,
185
+ subUnitId: subUnitId || _subUnitId
186
+ });
187
+ }
188
+ };
189
+ SheetsSortService = __decorate([
190
+ __decorateParam(0, _univerjs_core.IUniverInstanceService),
191
+ __decorateParam(1, _univerjs_core.ICommandService),
192
+ __decorateParam(2, (0, _univerjs_core.Inject)(_univerjs_engine_formula.FormulaDataModel))
193
+ ], SheetsSortService);
194
+ function isRangeDividedEqually(range, merges) {
195
+ const rangeRows = range.endRow - range.startRow + 1;
196
+ const rangeCols = range.endColumn - range.startColumn + 1;
197
+ let mergeRows = null;
198
+ let mergeCols = null;
199
+ const totalArea = rangeRows * rangeCols;
200
+ let totalMergeArea = 0;
201
+ for (const merge of merges) if (merge.startRow >= range.startRow && merge.endRow <= range.endRow && merge.startColumn >= range.startColumn && merge.endColumn <= range.endColumn) {
202
+ const currentMergeRows = merge.endRow - merge.startRow + 1;
203
+ const currentMergeCols = merge.endColumn - merge.startColumn + 1;
204
+ if (mergeRows === null && mergeCols === null) {
205
+ mergeRows = currentMergeRows;
206
+ mergeCols = currentMergeCols;
207
+ } else if (currentMergeRows !== mergeRows || currentMergeCols !== mergeCols) return false;
208
+ totalMergeArea += currentMergeRows * currentMergeCols;
209
+ }
210
+ return totalMergeArea === totalArea;
211
+ }
212
+
213
+ //#endregion
214
+ //#region src/commands/commands/sheets-sort.command.ts
215
+ const SortRangeCommand = {
216
+ id: "sheet.command.sort-range",
217
+ type: _univerjs_core.CommandType.COMMAND,
218
+ handler: (accessor, params) => {
219
+ const { range, orderRules, hasTitle, unitId, subUnitId } = params;
220
+ const sortService = accessor.get(SheetsSortService);
221
+ const { worksheet } = (0, _univerjs_sheets.getSheetCommandTarget)(accessor.get(_univerjs_core.IUniverInstanceService), params) || {};
222
+ if (!worksheet) return false;
223
+ const mergeDataInRange = worksheet.getMergeData().filter((mergeData) => {
224
+ return _univerjs_core.Rectangle.contains(range, mergeData);
225
+ });
226
+ const mergeMainRowIndexes = mergeDataInRange.map((mergeData) => {
227
+ return mergeData.startRow;
228
+ });
229
+ const { startRow: rangeStartRow, endRow } = range;
230
+ const startRow = hasTitle ? rangeStartRow + 1 : rangeStartRow;
231
+ const toReorder = [];
232
+ const oldOrder = [];
233
+ for (let rowIndex = startRow; rowIndex <= endRow; rowIndex++) {
234
+ if (worksheet.getRowFiltered(rowIndex)) continue;
235
+ if (worksheet.getRowRawVisible(rowIndex) === false) continue;
236
+ if (mergeDataInRange.length && !mergeMainRowIndexes.includes(rowIndex)) continue;
237
+ toReorder.push({
238
+ index: rowIndex,
239
+ value: getRowCellData(worksheet, rowIndex, orderRules)
240
+ });
241
+ oldOrder.push(rowIndex);
242
+ }
243
+ const compareFns = sortService.getAllCompareFns();
244
+ toReorder.sort(reorderFnGenerator(orderRules, combineCompareFnsAsOne(compareFns)));
245
+ const order = {};
246
+ toReorder.forEach(({ index, value }, oldIndex) => {
247
+ order[oldOrder[oldIndex]] = index;
248
+ });
249
+ const reorderRangeCommand = {
250
+ id: _univerjs_sheets.ReorderRangeCommand.id,
251
+ params: {
252
+ unitId,
253
+ subUnitId,
254
+ range,
255
+ order
256
+ }
257
+ };
258
+ const commandService = accessor.get(_univerjs_core.ICommandService);
259
+ return (0, _univerjs_core.sequenceExecute)([reorderRangeCommand], commandService).result;
260
+ }
261
+ };
262
+ function getRowCellData(worksheet, rowIndex, orderRules) {
263
+ const result = [];
264
+ orderRules.forEach(({ colIndex }) => {
265
+ result.push(worksheet.getCellRaw(rowIndex, colIndex));
266
+ });
267
+ return result;
268
+ }
269
+ function combineCompareFnsAsOne(compareFns) {
270
+ return (type, a, b) => {
271
+ for (let i = 0; i < compareFns.length; i++) {
272
+ const res = compareFns[i](type, a, b);
273
+ if (res != null) return res;
274
+ }
275
+ return 0;
276
+ };
277
+ }
278
+ function reorderFnGenerator(orderRules, valueCompare) {
279
+ return function(a, b) {
280
+ let ret = null;
281
+ for (let index = 0; index < orderRules.length; index++) {
282
+ const aCellData = a.value[index];
283
+ const bCellData = b.value[index];
284
+ ret = valueCompare(orderRules[index].type, aCellData, bCellData);
285
+ if (ret !== 0 && ret !== null && ret !== void 0) return ret;
286
+ }
287
+ return 0;
288
+ };
289
+ }
290
+
291
+ //#endregion
292
+ //#region package.json
293
+ var name = "@univerjs/sheets-sort";
294
+ var version = "0.21.0";
295
+
296
+ //#endregion
297
+ //#region src/config/config.ts
298
+ /**
299
+ * Copyright 2023-present DreamNum Co., Ltd.
300
+ *
301
+ * Licensed under the Apache License, Version 2.0 (the "License");
302
+ * you may not use this file except in compliance with the License.
303
+ * You may obtain a copy of the License at
304
+ *
305
+ * http://www.apache.org/licenses/LICENSE-2.0
306
+ *
307
+ * Unless required by applicable law or agreed to in writing, software
308
+ * distributed under the License is distributed on an "AS IS" BASIS,
309
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
310
+ * See the License for the specific language governing permissions and
311
+ * limitations under the License.
312
+ */
313
+ const SHEETS_SORT_PLUGIN_CONFIG_KEY = "sheets-sort.config";
314
+ const configSymbol = Symbol(SHEETS_SORT_PLUGIN_CONFIG_KEY);
315
+ const defaultPluginConfig = {};
316
+
317
+ //#endregion
318
+ //#region src/controllers/sheets-sort.controller.ts
319
+ let SheetsSortController = class SheetsSortController extends _univerjs_core.Disposable {
320
+ constructor(_commandService, _sortService) {
321
+ super();
322
+ this._commandService = _commandService;
323
+ this._sortService = _sortService;
324
+ this._initCommands();
325
+ this._registerCompareFns();
326
+ }
327
+ _initCommands() {
328
+ [SortRangeCommand].forEach((command) => this.disposeWithMe(this._commandService.registerCommand(command)));
329
+ }
330
+ _registerCompareFns() {
331
+ const commonFn = (type, a, b) => {
332
+ const valueA = this._getCommonValue(a);
333
+ const valueB = this._getCommonValue(b);
334
+ const compareTypeFns = [
335
+ compareNull,
336
+ compareString,
337
+ compareNumber
338
+ ];
339
+ for (let i = 0; i < compareTypeFns.length; i++) {
340
+ const res = compareTypeFns[i](valueA, valueB, type);
341
+ if (res !== null) return res;
342
+ }
343
+ return null;
344
+ };
345
+ this._sortService.registerCompareFn(commonFn);
346
+ }
347
+ _getCommonValue(a) {
348
+ var _a$p;
349
+ if (isNullValue(a)) return null;
350
+ const richTextValue = a === null || a === void 0 || (_a$p = a.p) === null || _a$p === void 0 || (_a$p = _a$p.body) === null || _a$p === void 0 ? void 0 : _a$p.dataStream;
351
+ if (richTextValue) return richTextValue;
352
+ if ((a === null || a === void 0 ? void 0 : a.t) === _univerjs_core.CellValueType.NUMBER) return Number.parseFloat(`${a.v}`);
353
+ if ((a === null || a === void 0 ? void 0 : a.t) === _univerjs_core.CellValueType.STRING) {
354
+ if (typeof a.v === "number") return a.v;
355
+ return `${a.v}`;
356
+ }
357
+ if ((a === null || a === void 0 ? void 0 : a.t) === _univerjs_core.CellValueType.BOOLEAN) return `${a.v}`;
358
+ if ((a === null || a === void 0 ? void 0 : a.t) === _univerjs_core.CellValueType.FORCE_STRING) return Number.parseFloat(`${a.v}`);
359
+ return `${a === null || a === void 0 ? void 0 : a.v}`;
360
+ }
361
+ };
362
+ SheetsSortController = __decorate([__decorateParam(0, _univerjs_core.ICommandService), __decorateParam(1, (0, _univerjs_core.Inject)(SheetsSortService))], SheetsSortController);
363
+
364
+ //#endregion
365
+ //#region src/plugin.ts
366
+ let UniverSheetsSortPlugin = class UniverSheetsSortPlugin extends _univerjs_core.Plugin {
367
+ constructor(_config = defaultPluginConfig, _injector, _configService) {
368
+ super();
369
+ this._config = _config;
370
+ this._injector = _injector;
371
+ this._configService = _configService;
372
+ const { ...rest } = (0, _univerjs_core.merge)({}, defaultPluginConfig, this._config);
373
+ this._configService.setConfig(SHEETS_SORT_PLUGIN_CONFIG_KEY, rest);
374
+ }
375
+ onStarting() {
376
+ [[SheetsSortController], [SheetsSortService]].forEach((d) => this._injector.add(d));
377
+ }
378
+ onReady() {
379
+ this._injector.get(SheetsSortController);
380
+ }
381
+ };
382
+ _defineProperty(UniverSheetsSortPlugin, "type", _univerjs_core.UniverInstanceType.UNIVER_SHEET);
383
+ _defineProperty(UniverSheetsSortPlugin, "pluginName", "SHEET_SORT_PLUGIN");
384
+ _defineProperty(UniverSheetsSortPlugin, "packageName", name);
385
+ _defineProperty(UniverSheetsSortPlugin, "version", version);
386
+ UniverSheetsSortPlugin = __decorate([
387
+ (0, _univerjs_core.DependentOn)(_univerjs_sheets.UniverSheetsPlugin, _univerjs_engine_formula.UniverFormulaEnginePlugin),
388
+ __decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_core.Injector)),
389
+ __decorateParam(2, _univerjs_core.IConfigService)
390
+ ], UniverSheetsSortPlugin);
391
+
392
+ //#endregion
393
+ Object.defineProperty(exports, 'SheetsSortService', {
394
+ enumerable: true,
395
+ get: function () {
396
+ return SheetsSortService;
397
+ }
398
+ });
399
+ exports.SortRangeCommand = SortRangeCommand;
400
+ exports.SortType = SortType;
401
+ Object.defineProperty(exports, 'UniverSheetsSortPlugin', {
402
+ enumerable: true,
403
+ get: function () {
404
+ return UniverSheetsSortPlugin;
405
+ }
406
+ });
@@ -1 +1,18 @@
1
- const e={sheetsSort:{title:`Ordena`,toolbar:{"sort-asc":`ordre ascendent`,"sort-desc":`ordre descendent`,"sort-custom":`ordre personalitzat`},"context-menu":{"sort-asc":`ordre ascendent`,"sort-desc":`ordre descendent`,"sort-custom":`ordre personalitzat`}}};module.exports=e;
1
+
2
+ //#region src/locale/ca-ES.ts
3
+ const locale = { sheetsSort: {
4
+ title: "Ordena",
5
+ toolbar: {
6
+ "sort-asc": "ordre ascendent",
7
+ "sort-desc": "ordre descendent",
8
+ "sort-custom": "ordre personalitzat"
9
+ },
10
+ "context-menu": {
11
+ "sort-asc": "ordre ascendent",
12
+ "sort-desc": "ordre descendent",
13
+ "sort-custom": "ordre personalitzat"
14
+ }
15
+ } };
16
+
17
+ //#endregion
18
+ module.exports = locale;
@@ -1 +1,33 @@
1
- const e={sheetsSort:{title:`Sort`,toolbar:{"sort-asc":`ascending order`,"sort-desc":`descending order`,"sort-custom":`custom order`},"context-menu":{"sort-asc":`ascending order`,"sort-desc":`descending order`,"sort-custom":`custom order`}}};module.exports=e;
1
+
2
+ //#region src/locale/en-US.ts
3
+ /**
4
+ * Copyright 2023-present DreamNum Co., Ltd.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+ const locale = { sheetsSort: {
19
+ title: "Sort",
20
+ toolbar: {
21
+ "sort-asc": "ascending order",
22
+ "sort-desc": "descending order",
23
+ "sort-custom": "custom order"
24
+ },
25
+ "context-menu": {
26
+ "sort-asc": "ascending order",
27
+ "sort-desc": "descending order",
28
+ "sort-custom": "custom order"
29
+ }
30
+ } };
31
+
32
+ //#endregion
33
+ module.exports = locale;
@@ -1 +1,18 @@
1
- const e={sheetsSort:{title:`Ordenar`,toolbar:{"sort-asc":`orden ascendente`,"sort-desc":`orden descendente`,"sort-custom":`orden personalizado`},"context-menu":{"sort-asc":`orden ascendente`,"sort-desc":`orden descendente`,"sort-custom":`orden personalizado`}}};module.exports=e;
1
+
2
+ //#region src/locale/es-ES.ts
3
+ const locale = { sheetsSort: {
4
+ title: "Ordenar",
5
+ toolbar: {
6
+ "sort-asc": "orden ascendente",
7
+ "sort-desc": "orden descendente",
8
+ "sort-custom": "orden personalizado"
9
+ },
10
+ "context-menu": {
11
+ "sort-asc": "orden ascendente",
12
+ "sort-desc": "orden descendente",
13
+ "sort-custom": "orden personalizado"
14
+ }
15
+ } };
16
+
17
+ //#endregion
18
+ module.exports = locale;
@@ -1 +1,18 @@
1
- const e={sheetsSort:{title:`مرتب‌سازی`,toolbar:{"sort-asc":`ترتیب صعودی`,"sort-desc":`ترتیب نزولی`,"sort-custom":`ترتیب سفارشی`},"context-menu":{"sort-asc":`ترتیب صعودی`,"sort-desc":`ترتیب نزولی`,"sort-custom":`ترتیب سفارشی`}}};module.exports=e;
1
+
2
+ //#region src/locale/fa-IR.ts
3
+ const locale = { sheetsSort: {
4
+ title: "مرتب‌سازی",
5
+ toolbar: {
6
+ "sort-asc": "ترتیب صعودی",
7
+ "sort-desc": "ترتیب نزولی",
8
+ "sort-custom": "ترتیب سفارشی"
9
+ },
10
+ "context-menu": {
11
+ "sort-asc": "ترتیب صعودی",
12
+ "sort-desc": "ترتیب نزولی",
13
+ "sort-custom": "ترتیب سفارشی"
14
+ }
15
+ } };
16
+
17
+ //#endregion
18
+ module.exports = locale;
@@ -1 +1,18 @@
1
- const e={sheetsSort:{title:`Trier`,toolbar:{"sort-asc":`ordre croissant`,"sort-desc":`ordre décroissant`,"sort-custom":`ordre personnalisé`},"context-menu":{"sort-asc":`ordre croissant`,"sort-desc":`ordre décroissant`,"sort-custom":`ordre personnalisé`}}};module.exports=e;
1
+
2
+ //#region src/locale/fr-FR.ts
3
+ const locale = { sheetsSort: {
4
+ title: "Trier",
5
+ toolbar: {
6
+ "sort-asc": "ordre croissant",
7
+ "sort-desc": "ordre décroissant",
8
+ "sort-custom": "ordre personnalisé"
9
+ },
10
+ "context-menu": {
11
+ "sort-asc": "ordre croissant",
12
+ "sort-desc": "ordre décroissant",
13
+ "sort-custom": "ordre personnalisé"
14
+ }
15
+ } };
16
+
17
+ //#endregion
18
+ module.exports = locale;