@odoo/o-spreadsheet 18.1.3 → 18.1.5
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/dist/o-spreadsheet.cjs.js +64 -38
- package/dist/o-spreadsheet.d.ts +9 -4
- package/dist/o-spreadsheet.esm.js +64 -38
- package/dist/o-spreadsheet.iife.js +64 -38
- package/dist/o-spreadsheet.iife.min.js +112 -112
- package/dist/o_spreadsheet.xml +3 -3
- package/package.json +1 -1
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* This file is generated by o-spreadsheet build tools. Do not edit it.
|
|
4
4
|
* @see https://github.com/odoo/o-spreadsheet
|
|
5
|
-
* @version 18.1.
|
|
6
|
-
* @date 2025-01-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.1.5
|
|
6
|
+
* @date 2025-01-31T08:00:10.263Z
|
|
7
|
+
* @hash 97acb8b
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function (exports, owl) {
|
|
@@ -3349,11 +3349,11 @@
|
|
|
3349
3349
|
* number from the point of view of the isNumber function.
|
|
3350
3350
|
*/
|
|
3351
3351
|
function parseNumber(str, locale) {
|
|
3352
|
+
// remove invaluable characters
|
|
3353
|
+
str = str.replace(getInvaluableSymbolsRegexp(locale), "");
|
|
3352
3354
|
if (locale.decimalSeparator !== ".") {
|
|
3353
3355
|
str = str.replace(locale.decimalSeparator, ".");
|
|
3354
3356
|
}
|
|
3355
|
-
// remove invaluable characters
|
|
3356
|
-
str = str.replace(getInvaluableSymbolsRegexp(locale), "");
|
|
3357
3357
|
let n = Number(str);
|
|
3358
3358
|
if (isNaN(n) && str.includes("%")) {
|
|
3359
3359
|
n = Number(str.split("%")[0]);
|
|
@@ -9657,13 +9657,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
9657
9657
|
else if (ds.labelCell) {
|
|
9658
9658
|
label = {
|
|
9659
9659
|
reference: getters.getRangeString(ds.labelCell, "forceSheetReference", {
|
|
9660
|
-
|
|
9660
|
+
useBoundedReference: true,
|
|
9661
9661
|
}),
|
|
9662
9662
|
};
|
|
9663
9663
|
}
|
|
9664
9664
|
return {
|
|
9665
9665
|
label,
|
|
9666
|
-
range: getters.getRangeString(dataRange, "forceSheetReference", {
|
|
9666
|
+
range: getters.getRangeString(dataRange, "forceSheetReference", { useBoundedReference: true }),
|
|
9667
9667
|
backgroundColor: ds.backgroundColor,
|
|
9668
9668
|
rightYAxis: ds.rightYAxis,
|
|
9669
9669
|
};
|
|
@@ -9678,7 +9678,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
9678
9678
|
zone.top = zone.top + 1;
|
|
9679
9679
|
}
|
|
9680
9680
|
const range = labelRange.clone({ zone });
|
|
9681
|
-
return getters.getRangeString(range, "forceSheetReference", {
|
|
9681
|
+
return getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
|
|
9682
9682
|
}
|
|
9683
9683
|
/**
|
|
9684
9684
|
* Transform a chart definition which supports dataSets (dataSets and LabelRange)
|
|
@@ -40368,6 +40368,12 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
40368
40368
|
}
|
|
40369
40369
|
this.contentHelper.updateEl(el);
|
|
40370
40370
|
});
|
|
40371
|
+
this.env.model.selection.observe(this, {
|
|
40372
|
+
handleEvent: () => this.autoCompleteState.hide(),
|
|
40373
|
+
});
|
|
40374
|
+
owl.onWillUnmount(() => {
|
|
40375
|
+
this.env.model.selection.detachObserver(this);
|
|
40376
|
+
});
|
|
40371
40377
|
owl.useEffect(() => {
|
|
40372
40378
|
this.processContent();
|
|
40373
40379
|
if (document.activeElement === this.contentHelper.el &&
|
|
@@ -53312,7 +53318,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
53312
53318
|
/*
|
|
53313
53319
|
* Reconstructs the original formula string based on new dependencies
|
|
53314
53320
|
*/
|
|
53315
|
-
getFormulaString(sheetId, tokens, dependencies,
|
|
53321
|
+
getFormulaString(sheetId, tokens, dependencies, useBoundedReference = false) {
|
|
53316
53322
|
if (!dependencies.length) {
|
|
53317
53323
|
return concat(tokens.map((token) => token.value));
|
|
53318
53324
|
}
|
|
@@ -53320,7 +53326,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
53320
53326
|
return concat(tokens.map((token) => {
|
|
53321
53327
|
if (token.type === "REFERENCE") {
|
|
53322
53328
|
const range = dependencies[rangeIndex++];
|
|
53323
|
-
return this.getters.getRangeString(range, sheetId, {
|
|
53329
|
+
return this.getters.getRangeString(range, sheetId, { useBoundedReference });
|
|
53324
53330
|
}
|
|
53325
53331
|
return token.value;
|
|
53326
53332
|
}));
|
|
@@ -53600,7 +53606,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
53600
53606
|
if (token.type === "REFERENCE") {
|
|
53601
53607
|
const index = rangeIndex++;
|
|
53602
53608
|
return this.getRangeString(this.compiledFormula.dependencies[index], this.sheetId, {
|
|
53603
|
-
|
|
53609
|
+
useBoundedReference: true,
|
|
53604
53610
|
});
|
|
53605
53611
|
}
|
|
53606
53612
|
return token.value;
|
|
@@ -53937,7 +53943,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
53937
53943
|
if (data.sheets) {
|
|
53938
53944
|
for (let sheet of data.sheets) {
|
|
53939
53945
|
if (this.cfRules[sheet.id]) {
|
|
53940
|
-
sheet.conditionalFormats = this.cfRules[sheet.id].map((rule) => this.mapToConditionalFormat(sheet.id, rule, {
|
|
53946
|
+
sheet.conditionalFormats = this.cfRules[sheet.id].map((rule) => this.mapToConditionalFormat(sheet.id, rule, { useBoundedReference: true }));
|
|
53941
53947
|
}
|
|
53942
53948
|
}
|
|
53943
53949
|
}
|
|
@@ -54006,9 +54012,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
54006
54012
|
// ---------------------------------------------------------------------------
|
|
54007
54013
|
// Private
|
|
54008
54014
|
// ---------------------------------------------------------------------------
|
|
54009
|
-
mapToConditionalFormat(sheetId, cf, {
|
|
54015
|
+
mapToConditionalFormat(sheetId, cf, { useBoundedReference } = { useBoundedReference: false }) {
|
|
54010
54016
|
const ranges = cf.ranges.map((range) => {
|
|
54011
|
-
return this.getters.getRangeString(range, sheetId, {
|
|
54017
|
+
return this.getters.getRangeString(range, sheetId, { useBoundedReference });
|
|
54012
54018
|
});
|
|
54013
54019
|
if (cf.rule.type !== "DataBarRule") {
|
|
54014
54020
|
return {
|
|
@@ -54023,7 +54029,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
54023
54029
|
...cf.rule,
|
|
54024
54030
|
rangeValues: cf.rule.rangeValues &&
|
|
54025
54031
|
this.getters.getRangeString(cf.rule.rangeValues, sheetId, {
|
|
54026
|
-
|
|
54032
|
+
useBoundedReference,
|
|
54027
54033
|
}),
|
|
54028
54034
|
},
|
|
54029
54035
|
ranges,
|
|
@@ -54464,10 +54470,20 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
54464
54470
|
for (const sheet of data.sheets) {
|
|
54465
54471
|
sheet.dataValidationRules = [];
|
|
54466
54472
|
for (const rule of this.rules[sheet.id]) {
|
|
54467
|
-
|
|
54468
|
-
...rule,
|
|
54469
|
-
ranges: rule.ranges.map((range) => this.getters.getRangeString(range, sheet.id, {
|
|
54470
|
-
}
|
|
54473
|
+
const excelRule = {
|
|
54474
|
+
...deepCopy(rule),
|
|
54475
|
+
ranges: rule.ranges.map((range) => this.getters.getRangeString(range, sheet.id, { useBoundedReference: true })),
|
|
54476
|
+
};
|
|
54477
|
+
if (rule.criterion.type === "isValueInRange") {
|
|
54478
|
+
excelRule.criterion.values = rule.criterion.values.map((value) => {
|
|
54479
|
+
const range = this.getters.getRangeFromSheetXC(sheet.id, value);
|
|
54480
|
+
return this.getters.getRangeString(range, sheet.id, {
|
|
54481
|
+
useBoundedReference: true,
|
|
54482
|
+
useFixedReference: true,
|
|
54483
|
+
});
|
|
54484
|
+
});
|
|
54485
|
+
}
|
|
54486
|
+
sheet.dataValidationRules.push(excelRule);
|
|
54471
54487
|
}
|
|
54472
54488
|
}
|
|
54473
54489
|
}
|
|
@@ -55888,9 +55904,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
55888
55904
|
* @param range the range (received from getRangeFromXC or getRangeFromZone)
|
|
55889
55905
|
* @param forSheetId the id of the sheet where the range string is supposed to be used.
|
|
55890
55906
|
* @param options
|
|
55907
|
+
* @param options.useBoundedReference if true, the range will be returned with bounded row and column
|
|
55891
55908
|
* @param options.useFixedReference if true, the range will be returned with fixed row and column
|
|
55892
55909
|
*/
|
|
55893
|
-
getRangeString(range, forSheetId, options = { useFixedReference: false }) {
|
|
55910
|
+
getRangeString(range, forSheetId, options = { useBoundedReference: false, useFixedReference: false }) {
|
|
55894
55911
|
if (!range) {
|
|
55895
55912
|
return CellErrorType.InvalidReference;
|
|
55896
55913
|
}
|
|
@@ -55993,13 +56010,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
55993
56010
|
/**
|
|
55994
56011
|
* Get a Xc string that represent a part of a range
|
|
55995
56012
|
*/
|
|
55996
|
-
getRangePartString(range, part, options = { useFixedReference: false }) {
|
|
55997
|
-
const colFixed = range.parts
|
|
56013
|
+
getRangePartString(range, part, options = { useBoundedReference: false, useFixedReference: false }) {
|
|
56014
|
+
const colFixed = range.parts[part]?.colFixed || options.useFixedReference ? "$" : "";
|
|
55998
56015
|
const col = part === 0 ? numberToLetters(range.zone.left) : numberToLetters(range.zone.right);
|
|
55999
|
-
const rowFixed = range.parts
|
|
56016
|
+
const rowFixed = range.parts[part]?.rowFixed || options.useFixedReference ? "$" : "";
|
|
56000
56017
|
const row = part === 0 ? String(range.zone.top + 1) : String(range.zone.bottom + 1);
|
|
56001
56018
|
let str = "";
|
|
56002
|
-
if (range.isFullCol && !options.
|
|
56019
|
+
if (range.isFullCol && !options.useBoundedReference) {
|
|
56003
56020
|
if (part === 0 && range.unboundedZone.hasHeader) {
|
|
56004
56021
|
str = colFixed + col + rowFixed + row;
|
|
56005
56022
|
}
|
|
@@ -56007,7 +56024,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
56007
56024
|
str = colFixed + col;
|
|
56008
56025
|
}
|
|
56009
56026
|
}
|
|
56010
|
-
else if (range.isFullRow && !options.
|
|
56027
|
+
else if (range.isFullRow && !options.useBoundedReference) {
|
|
56011
56028
|
if (part === 0 && range.unboundedZone.hasHeader) {
|
|
56012
56029
|
str = colFixed + col + rowFixed + row;
|
|
56013
56030
|
}
|
|
@@ -61308,7 +61325,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
61308
61325
|
const symbolIndex = rowDomain.findIndex((row) => row.field === symbolName);
|
|
61309
61326
|
return this.getPivotHeaderValueAndFormat(rowDomain.slice(0, symbolIndex + 1));
|
|
61310
61327
|
}
|
|
61311
|
-
return this.
|
|
61328
|
+
return this.getPivotCellValueAndFormat(symbolName, domain);
|
|
61312
61329
|
};
|
|
61313
61330
|
const result = this.getters.evaluateCompiledFormula(measure.computedBy.sheetId, formula, getSymbolValue);
|
|
61314
61331
|
if (isMatrix(result)) {
|
|
@@ -63186,6 +63203,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
63186
63203
|
waitingUndoRedoAck = false;
|
|
63187
63204
|
isReplayingInitialRevisions = false;
|
|
63188
63205
|
processedRevisions = new Set();
|
|
63206
|
+
lastRevisionMessage = undefined;
|
|
63189
63207
|
uuidGenerator = new UuidGenerator();
|
|
63190
63208
|
lastLocalOperation;
|
|
63191
63209
|
/**
|
|
@@ -63286,7 +63304,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
63286
63304
|
* Notify the server that the user client left the collaborative session
|
|
63287
63305
|
*/
|
|
63288
63306
|
async leave(data) {
|
|
63289
|
-
if (data &&
|
|
63307
|
+
if (data &&
|
|
63308
|
+
Object.keys(this.clients).length === 1 &&
|
|
63309
|
+
this.lastRevisionMessage &&
|
|
63310
|
+
this.lastRevisionMessage?.type !== "SNAPSHOT_CREATED") {
|
|
63290
63311
|
await this.snapshot(data());
|
|
63291
63312
|
}
|
|
63292
63313
|
delete this.clients[this.clientId];
|
|
@@ -63507,6 +63528,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
63507
63528
|
this.pendingMessages = this.pendingMessages.filter((msg) => msg.nextRevisionId !== message.nextRevisionId);
|
|
63508
63529
|
this.serverRevisionId = message.nextRevisionId;
|
|
63509
63530
|
this.processedRevisions.add(message.nextRevisionId);
|
|
63531
|
+
this.lastRevisionMessage = message;
|
|
63510
63532
|
this.sendPendingMessage();
|
|
63511
63533
|
break;
|
|
63512
63534
|
}
|
|
@@ -64474,14 +64496,12 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
64474
64496
|
}
|
|
64475
64497
|
break;
|
|
64476
64498
|
case "AUTORESIZE_ROWS":
|
|
64477
|
-
|
|
64478
|
-
|
|
64479
|
-
|
|
64480
|
-
|
|
64481
|
-
|
|
64482
|
-
|
|
64483
|
-
});
|
|
64484
|
-
}
|
|
64499
|
+
this.dispatch("RESIZE_COLUMNS_ROWS", {
|
|
64500
|
+
elements: cmd.rows,
|
|
64501
|
+
dimension: "ROW",
|
|
64502
|
+
size: null,
|
|
64503
|
+
sheetId: cmd.sheetId,
|
|
64504
|
+
});
|
|
64485
64505
|
break;
|
|
64486
64506
|
}
|
|
64487
64507
|
}
|
|
@@ -71505,6 +71525,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
71505
71525
|
observe(owner, callbacks) {
|
|
71506
71526
|
this.observers.set(owner, { owner, callbacks });
|
|
71507
71527
|
}
|
|
71528
|
+
detachObserver(owner) {
|
|
71529
|
+
this.observers.delete(owner);
|
|
71530
|
+
}
|
|
71508
71531
|
/**
|
|
71509
71532
|
* Capture the stream for yourself
|
|
71510
71533
|
*/
|
|
@@ -71597,6 +71620,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
71597
71620
|
observe(owner, callbacks) {
|
|
71598
71621
|
this.stream.observe(owner, callbacks);
|
|
71599
71622
|
}
|
|
71623
|
+
detachObserver(owner) {
|
|
71624
|
+
this.stream.detachObserver(owner);
|
|
71625
|
+
}
|
|
71600
71626
|
release(owner) {
|
|
71601
71627
|
if (this.stream.isListening(owner)) {
|
|
71602
71628
|
this.stream.release(owner);
|
|
@@ -75016,9 +75042,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
75016
75042
|
exports.tokenize = tokenize;
|
|
75017
75043
|
|
|
75018
75044
|
|
|
75019
|
-
__info__.version = "18.1.
|
|
75020
|
-
__info__.date = "2025-01-
|
|
75021
|
-
__info__.hash = "
|
|
75045
|
+
__info__.version = "18.1.5";
|
|
75046
|
+
__info__.date = "2025-01-31T08:00:10.263Z";
|
|
75047
|
+
__info__.hash = "97acb8b";
|
|
75022
75048
|
|
|
75023
75049
|
|
|
75024
75050
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|