@odoo/o-spreadsheet 18.3.31 → 18.3.33
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 +299 -233
- package/dist/o-spreadsheet.d.ts +224 -212
- package/dist/o-spreadsheet.esm.js +299 -233
- package/dist/o-spreadsheet.iife.js +299 -233
- package/dist/o-spreadsheet.iife.min.js +399 -399
- package/dist/o_spreadsheet.css +3 -3
- package/dist/o_spreadsheet.xml +5 -4
- 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.3.
|
|
6
|
-
* @date
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.3.33
|
|
6
|
+
* @date 2026-01-21T11:05:17.933Z
|
|
7
|
+
* @hash b7e5d91
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function (exports, owl) {
|
|
@@ -33,7 +33,8 @@
|
|
|
33
33
|
return children
|
|
34
34
|
.map((child) => (typeof child === "function" ? child(env) : child))
|
|
35
35
|
.flat()
|
|
36
|
-
.map(createAction)
|
|
36
|
+
.map(createAction)
|
|
37
|
+
.sort((a, b) => a.sequence - b.sequence);
|
|
37
38
|
}
|
|
38
39
|
: () => [],
|
|
39
40
|
isReadonlyAllowed: item.isReadonlyAllowed || false,
|
|
@@ -308,6 +309,7 @@
|
|
|
308
309
|
fillColor: "",
|
|
309
310
|
textColor: "",
|
|
310
311
|
};
|
|
312
|
+
const DEFAULT_NUMBER_STYLE = { ...DEFAULT_STYLE, align: "right" };
|
|
311
313
|
const DEFAULT_VERTICAL_ALIGN = DEFAULT_STYLE.verticalAlign;
|
|
312
314
|
const DEFAULT_WRAPPING_MODE = DEFAULT_STYLE.wrapping;
|
|
313
315
|
// Fonts
|
|
@@ -6180,67 +6182,6 @@
|
|
|
6180
6182
|
return sheetName !== undefined ? `${getCanonicalSymbolName(sheetName)}!${xc}` : xc;
|
|
6181
6183
|
}
|
|
6182
6184
|
|
|
6183
|
-
function createDefaultRows(rowNumber) {
|
|
6184
|
-
const rows = [];
|
|
6185
|
-
for (let i = 0; i < rowNumber; i++) {
|
|
6186
|
-
const row = {
|
|
6187
|
-
cells: {},
|
|
6188
|
-
};
|
|
6189
|
-
rows.push(row);
|
|
6190
|
-
}
|
|
6191
|
-
return rows;
|
|
6192
|
-
}
|
|
6193
|
-
function moveHeaderIndexesOnHeaderAddition(indexHeaderAdded, numberAdded, headers) {
|
|
6194
|
-
return headers.map((header) => {
|
|
6195
|
-
if (header >= indexHeaderAdded) {
|
|
6196
|
-
return header + numberAdded;
|
|
6197
|
-
}
|
|
6198
|
-
return header;
|
|
6199
|
-
});
|
|
6200
|
-
}
|
|
6201
|
-
function moveHeaderIndexesOnHeaderDeletion(deletedHeaders, headers) {
|
|
6202
|
-
deletedHeaders = [...deletedHeaders].sort((a, b) => b - a);
|
|
6203
|
-
return headers
|
|
6204
|
-
.map((header) => {
|
|
6205
|
-
for (const deletedHeader of deletedHeaders) {
|
|
6206
|
-
if (header > deletedHeader) {
|
|
6207
|
-
header--;
|
|
6208
|
-
}
|
|
6209
|
-
else if (header === deletedHeader) {
|
|
6210
|
-
return undefined;
|
|
6211
|
-
}
|
|
6212
|
-
}
|
|
6213
|
-
return header;
|
|
6214
|
-
})
|
|
6215
|
-
.filter(isDefined);
|
|
6216
|
-
}
|
|
6217
|
-
function getNextSheetName(existingNames, baseName = "Sheet") {
|
|
6218
|
-
let i = 1;
|
|
6219
|
-
let name = `${baseName}${i}`;
|
|
6220
|
-
while (existingNames.includes(name)) {
|
|
6221
|
-
name = `${baseName}${i}`;
|
|
6222
|
-
i++;
|
|
6223
|
-
}
|
|
6224
|
-
return name;
|
|
6225
|
-
}
|
|
6226
|
-
function getDuplicateSheetName(nameToDuplicate, existingNames) {
|
|
6227
|
-
let i = 1;
|
|
6228
|
-
const baseName = _t("Copy of %s", nameToDuplicate);
|
|
6229
|
-
let name = baseName.toString();
|
|
6230
|
-
while (existingNames.includes(name)) {
|
|
6231
|
-
name = `${baseName} (${i})`;
|
|
6232
|
-
i++;
|
|
6233
|
-
}
|
|
6234
|
-
return name;
|
|
6235
|
-
}
|
|
6236
|
-
function isSheetNameEqual(name1, name2) {
|
|
6237
|
-
if (name1 === undefined || name2 === undefined) {
|
|
6238
|
-
return false;
|
|
6239
|
-
}
|
|
6240
|
-
return (getUnquotedSheetName(name1.trim().toUpperCase()) ===
|
|
6241
|
-
getUnquotedSheetName(name2.trim().toUpperCase()));
|
|
6242
|
-
}
|
|
6243
|
-
|
|
6244
6185
|
function createRange(args, getSheetSize) {
|
|
6245
6186
|
const unboundedZone = args.zone;
|
|
6246
6187
|
const zone = boundUnboundedZone(unboundedZone, getSheetSize(args.sheetId));
|
|
@@ -6535,8 +6476,8 @@
|
|
|
6535
6476
|
elements.sort((a, b) => b - a);
|
|
6536
6477
|
const groups = groupConsecutive(elements);
|
|
6537
6478
|
return (range) => {
|
|
6538
|
-
if (
|
|
6539
|
-
return { changeType: "NONE" };
|
|
6479
|
+
if (range.sheetId !== cmd.sheetId) {
|
|
6480
|
+
return { changeType: "NONE", range };
|
|
6540
6481
|
}
|
|
6541
6482
|
let newRange = range;
|
|
6542
6483
|
let changeType = "NONE";
|
|
@@ -6563,10 +6504,7 @@
|
|
|
6563
6504
|
newRange = createAdaptedRange(newRange, dimension, changeType, -(max - min + 1));
|
|
6564
6505
|
}
|
|
6565
6506
|
}
|
|
6566
|
-
|
|
6567
|
-
return { changeType, range: newRange };
|
|
6568
|
-
}
|
|
6569
|
-
return { changeType: "NONE" };
|
|
6507
|
+
return { changeType, range: newRange };
|
|
6570
6508
|
};
|
|
6571
6509
|
}
|
|
6572
6510
|
function getApplyRangeChangeAddColRow(cmd) {
|
|
@@ -6575,7 +6513,7 @@
|
|
|
6575
6513
|
let dimension = cmd.dimension === "COL" ? "columns" : "rows";
|
|
6576
6514
|
return (range) => {
|
|
6577
6515
|
if (range.sheetId !== cmd.sheetId) {
|
|
6578
|
-
return { changeType: "NONE" };
|
|
6516
|
+
return { changeType: "NONE", range };
|
|
6579
6517
|
}
|
|
6580
6518
|
if (cmd.position === "after") {
|
|
6581
6519
|
if (range.zone[start] <= cmd.base && cmd.base < range.zone[end]) {
|
|
@@ -6605,13 +6543,13 @@
|
|
|
6605
6543
|
};
|
|
6606
6544
|
}
|
|
6607
6545
|
}
|
|
6608
|
-
return { changeType: "NONE" };
|
|
6546
|
+
return { changeType: "NONE", range };
|
|
6609
6547
|
};
|
|
6610
6548
|
}
|
|
6611
6549
|
function getApplyRangeChangeDeleteSheet(cmd) {
|
|
6612
6550
|
return (range) => {
|
|
6613
6551
|
if (range.sheetId !== cmd.sheetId && range.invalidSheetName !== cmd.sheetName) {
|
|
6614
|
-
return { changeType: "NONE" };
|
|
6552
|
+
return { changeType: "NONE", range };
|
|
6615
6553
|
}
|
|
6616
6554
|
const invalidSheetName = cmd.sheetName;
|
|
6617
6555
|
range = {
|
|
@@ -6638,14 +6576,14 @@
|
|
|
6638
6576
|
const newRange = { ...range, sheetId, invalidSheetName };
|
|
6639
6577
|
return { changeType: "CHANGE", range: newRange };
|
|
6640
6578
|
}
|
|
6641
|
-
return { changeType: "NONE" };
|
|
6579
|
+
return { changeType: "NONE", range };
|
|
6642
6580
|
};
|
|
6643
6581
|
}
|
|
6644
6582
|
function getApplyRangeChangeMoveRange(cmd) {
|
|
6645
6583
|
const originZone = cmd.target[0];
|
|
6646
6584
|
return (range) => {
|
|
6647
6585
|
if (range.sheetId !== cmd.sheetId || !isZoneInside(range.zone, originZone)) {
|
|
6648
|
-
return { changeType: "NONE" };
|
|
6586
|
+
return { changeType: "NONE", range };
|
|
6649
6587
|
}
|
|
6650
6588
|
const targetSheetId = cmd.targetSheetId;
|
|
6651
6589
|
const offsetX = cmd.col - originZone.left;
|
|
@@ -6742,17 +6680,87 @@
|
|
|
6742
6680
|
return results.map((r) => r.elem);
|
|
6743
6681
|
}
|
|
6744
6682
|
|
|
6683
|
+
function createDefaultRows(rowNumber) {
|
|
6684
|
+
const rows = [];
|
|
6685
|
+
for (let i = 0; i < rowNumber; i++) {
|
|
6686
|
+
const row = {
|
|
6687
|
+
cells: {},
|
|
6688
|
+
};
|
|
6689
|
+
rows.push(row);
|
|
6690
|
+
}
|
|
6691
|
+
return rows;
|
|
6692
|
+
}
|
|
6693
|
+
function moveHeaderIndexesOnHeaderAddition(indexHeaderAdded, numberAdded, headers) {
|
|
6694
|
+
return headers.map((header) => {
|
|
6695
|
+
if (header >= indexHeaderAdded) {
|
|
6696
|
+
return header + numberAdded;
|
|
6697
|
+
}
|
|
6698
|
+
return header;
|
|
6699
|
+
});
|
|
6700
|
+
}
|
|
6701
|
+
function moveHeaderIndexesOnHeaderDeletion(deletedHeaders, headers) {
|
|
6702
|
+
deletedHeaders = [...deletedHeaders].sort((a, b) => b - a);
|
|
6703
|
+
return headers
|
|
6704
|
+
.map((header) => {
|
|
6705
|
+
for (const deletedHeader of deletedHeaders) {
|
|
6706
|
+
if (header > deletedHeader) {
|
|
6707
|
+
header--;
|
|
6708
|
+
}
|
|
6709
|
+
else if (header === deletedHeader) {
|
|
6710
|
+
return undefined;
|
|
6711
|
+
}
|
|
6712
|
+
}
|
|
6713
|
+
return header;
|
|
6714
|
+
})
|
|
6715
|
+
.filter(isDefined);
|
|
6716
|
+
}
|
|
6717
|
+
function getNextSheetName(existingNames, baseName = "Sheet") {
|
|
6718
|
+
let i = 1;
|
|
6719
|
+
let name = `${baseName}${i}`;
|
|
6720
|
+
while (existingNames.includes(name)) {
|
|
6721
|
+
name = `${baseName}${i}`;
|
|
6722
|
+
i++;
|
|
6723
|
+
}
|
|
6724
|
+
return name;
|
|
6725
|
+
}
|
|
6726
|
+
function getDuplicateSheetName(nameToDuplicate, existingNames) {
|
|
6727
|
+
let i = 1;
|
|
6728
|
+
const baseName = _t("Copy of %s", nameToDuplicate);
|
|
6729
|
+
let name = baseName.toString();
|
|
6730
|
+
while (existingNames.includes(name)) {
|
|
6731
|
+
name = `${baseName} (${i})`;
|
|
6732
|
+
i++;
|
|
6733
|
+
}
|
|
6734
|
+
return name;
|
|
6735
|
+
}
|
|
6736
|
+
function isSheetNameEqual(name1, name2) {
|
|
6737
|
+
if (name1 === undefined || name2 === undefined) {
|
|
6738
|
+
return false;
|
|
6739
|
+
}
|
|
6740
|
+
return (getUnquotedSheetName(name1.trim().toUpperCase()) ===
|
|
6741
|
+
getUnquotedSheetName(name2.trim().toUpperCase()));
|
|
6742
|
+
}
|
|
6743
|
+
|
|
6745
6744
|
function computeTextLinesHeight(textLineHeight, numberOfLines = 1) {
|
|
6746
6745
|
return numberOfLines * (textLineHeight + MIN_CELL_TEXT_MARGIN) - MIN_CELL_TEXT_MARGIN;
|
|
6747
6746
|
}
|
|
6748
6747
|
/**
|
|
6749
6748
|
* Get the default height of the cell given its style.
|
|
6750
6749
|
*/
|
|
6751
|
-
function getDefaultCellHeight(ctx, cell, colSize) {
|
|
6750
|
+
function getDefaultCellHeight(ctx, cell, locale, colSize) {
|
|
6752
6751
|
if (!cell || (!cell.isFormula && !cell.content)) {
|
|
6753
6752
|
return DEFAULT_CELL_HEIGHT;
|
|
6754
6753
|
}
|
|
6755
|
-
|
|
6754
|
+
let content = "";
|
|
6755
|
+
try {
|
|
6756
|
+
if (!cell.isFormula) {
|
|
6757
|
+
const localeFormat = { format: cell.format, locale };
|
|
6758
|
+
content = formatValue(parseLiteral(cell.content, locale), localeFormat);
|
|
6759
|
+
}
|
|
6760
|
+
}
|
|
6761
|
+
catch {
|
|
6762
|
+
content = CellErrorType.GenericError;
|
|
6763
|
+
}
|
|
6756
6764
|
return getCellContentHeight(ctx, content, cell.style, colSize);
|
|
6757
6765
|
}
|
|
6758
6766
|
function getCellContentHeight(ctx, content, style, colSize) {
|
|
@@ -18414,9 +18422,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
18414
18422
|
throw new EvaluationError(_t("Function PIVOT takes an even number of arguments."));
|
|
18415
18423
|
}
|
|
18416
18424
|
}
|
|
18417
|
-
function addPivotDependencies(evalContext,
|
|
18425
|
+
function addPivotDependencies(evalContext, pivotId, forMeasures) {
|
|
18418
18426
|
//TODO This function can be very costly when used with PIVOT.VALUE and PIVOT.HEADER
|
|
18419
18427
|
const dependencies = [];
|
|
18428
|
+
const coreDefinition = evalContext.getters.getPivotCoreDefinition(pivotId);
|
|
18420
18429
|
if (coreDefinition.type === "SPREADSHEET" && coreDefinition.dataSet) {
|
|
18421
18430
|
const { sheetId, zone } = coreDefinition.dataSet;
|
|
18422
18431
|
const xc = zoneToXc(zone);
|
|
@@ -18433,8 +18442,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
18433
18442
|
}
|
|
18434
18443
|
for (const measure of forMeasures) {
|
|
18435
18444
|
if (measure.computedBy) {
|
|
18436
|
-
|
|
18437
|
-
dependencies.push(...formula.dependencies.filter((range) => !range.invalidXc));
|
|
18445
|
+
dependencies.push(...evalContext.getters.getMeasureFullDependencies(pivotId, measure));
|
|
18438
18446
|
}
|
|
18439
18447
|
}
|
|
18440
18448
|
const originPosition = evalContext.__originCellPosition;
|
|
@@ -18869,7 +18877,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
18869
18877
|
assertDomainLength(domainArgs);
|
|
18870
18878
|
const pivot = this.getters.getPivot(pivotId);
|
|
18871
18879
|
const coreDefinition = this.getters.getPivotCoreDefinition(pivotId);
|
|
18872
|
-
addPivotDependencies(this,
|
|
18880
|
+
addPivotDependencies(this, pivotId, coreDefinition.measures.filter((m) => m.id === _measure));
|
|
18873
18881
|
pivot.init({ reload: pivot.needsReevaluation });
|
|
18874
18882
|
const error = pivot.assertIsValid({ throwOnError: false });
|
|
18875
18883
|
if (error) {
|
|
@@ -18902,8 +18910,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
18902
18910
|
const _pivotId = getPivotId(_pivotFormulaId, this.getters);
|
|
18903
18911
|
assertDomainLength(domainArgs);
|
|
18904
18912
|
const pivot = this.getters.getPivot(_pivotId);
|
|
18905
|
-
|
|
18906
|
-
addPivotDependencies(this, coreDefinition, []);
|
|
18913
|
+
addPivotDependencies(this, _pivotId, []);
|
|
18907
18914
|
pivot.init({ reload: pivot.needsReevaluation });
|
|
18908
18915
|
const error = pivot.assertIsValid({ throwOnError: false });
|
|
18909
18916
|
if (error) {
|
|
@@ -18957,7 +18964,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
18957
18964
|
const pivotId = getPivotId(_pivotFormulaId, this.getters);
|
|
18958
18965
|
const pivot = this.getters.getPivot(pivotId);
|
|
18959
18966
|
const coreDefinition = this.getters.getPivotCoreDefinition(pivotId);
|
|
18960
|
-
addPivotDependencies(this,
|
|
18967
|
+
addPivotDependencies(this, pivotId, coreDefinition.measures);
|
|
18961
18968
|
pivot.init({ reload: pivot.needsReevaluation });
|
|
18962
18969
|
const error = pivot.assertIsValid({ throwOnError: false });
|
|
18963
18970
|
if (error) {
|
|
@@ -20186,7 +20193,16 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
20186
20193
|
}
|
|
20187
20194
|
acceptToVectorize.push(!argDefinition.acceptMatrix);
|
|
20188
20195
|
}
|
|
20189
|
-
return applyVectorization(errorHandlingCompute.bind(this), args, acceptToVectorize);
|
|
20196
|
+
return replaceErrorPlaceholderInResult(applyVectorization(errorHandlingCompute.bind(this), args, acceptToVectorize));
|
|
20197
|
+
}
|
|
20198
|
+
function replaceErrorPlaceholderInResult(result) {
|
|
20199
|
+
if (!isMatrix(result)) {
|
|
20200
|
+
replaceFunctionNamePlaceholder(result, descr.name);
|
|
20201
|
+
}
|
|
20202
|
+
else {
|
|
20203
|
+
matrixForEach(result, (result) => replaceFunctionNamePlaceholder(result, descr.name));
|
|
20204
|
+
}
|
|
20205
|
+
return result;
|
|
20190
20206
|
}
|
|
20191
20207
|
function errorHandlingCompute(...args) {
|
|
20192
20208
|
for (let i = 0; i < args.length; i++) {
|
|
@@ -20214,13 +20230,12 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
20214
20230
|
const result = descr.compute.apply(this, args);
|
|
20215
20231
|
if (!isMatrix(result)) {
|
|
20216
20232
|
if (typeof result === "object" && result !== null && "value" in result) {
|
|
20217
|
-
replaceFunctionNamePlaceholder(result, descr.name);
|
|
20218
20233
|
return result;
|
|
20219
20234
|
}
|
|
20235
|
+
descr.name;
|
|
20220
20236
|
return { value: result };
|
|
20221
20237
|
}
|
|
20222
20238
|
if (typeof result[0][0] === "object" && result[0][0] !== null && "value" in result[0][0]) {
|
|
20223
|
-
matrixForEach(result, (result) => replaceFunctionNamePlaceholder(result, descr.name));
|
|
20224
20239
|
return result;
|
|
20225
20240
|
}
|
|
20226
20241
|
return matrixMap(result, (row) => ({ value: row }));
|
|
@@ -20672,7 +20687,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
20672
20687
|
continue;
|
|
20673
20688
|
}
|
|
20674
20689
|
const sheetXC = tokens[tokenIdx].value;
|
|
20675
|
-
const newSheetXC = adaptStringRange(defaultSheetId, sheetXC, applyChange);
|
|
20690
|
+
const newSheetXC = adaptStringRange(defaultSheetId, sheetXC, applyChange).range;
|
|
20676
20691
|
if (sheetXC !== newSheetXC) {
|
|
20677
20692
|
tokens[tokenIdx] = {
|
|
20678
20693
|
value: newSheetXC,
|
|
@@ -20682,23 +20697,30 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
20682
20697
|
}
|
|
20683
20698
|
return concat(tokens.map((token) => token.value));
|
|
20684
20699
|
}
|
|
20685
|
-
function adaptStringRange(defaultSheetId, sheetXC,
|
|
20700
|
+
function adaptStringRange(defaultSheetId, sheetXC, rangeAdapter) {
|
|
20686
20701
|
const sheetName = splitReference(sheetXC).sheetName;
|
|
20687
20702
|
if (sheetName
|
|
20688
|
-
? !isSheetNameEqual(sheetName,
|
|
20689
|
-
: defaultSheetId !==
|
|
20690
|
-
return sheetXC;
|
|
20703
|
+
? !isSheetNameEqual(sheetName, rangeAdapter.sheetName.old)
|
|
20704
|
+
: defaultSheetId !== rangeAdapter.sheetId) {
|
|
20705
|
+
return { changeType: "NONE", range: sheetXC };
|
|
20691
20706
|
}
|
|
20692
|
-
const sheetId = sheetName ?
|
|
20707
|
+
const sheetId = sheetName ? rangeAdapter.sheetId : defaultSheetId;
|
|
20693
20708
|
const range = getRange(sheetXC, sheetId);
|
|
20694
20709
|
if (range.invalidXc) {
|
|
20695
|
-
return sheetXC;
|
|
20710
|
+
return { changeType: "NONE", range: sheetXC };
|
|
20696
20711
|
}
|
|
20697
|
-
const change =
|
|
20712
|
+
const change = rangeAdapter.applyChange(range);
|
|
20698
20713
|
if (change.changeType === "NONE" || change.changeType === "REMOVE") {
|
|
20699
|
-
return sheetXC;
|
|
20714
|
+
return { changeType: change.changeType, range: sheetXC };
|
|
20700
20715
|
}
|
|
20701
|
-
|
|
20716
|
+
const rangeStr = getRangeString(change.range, defaultSheetId, getSheetNameGetter(rangeAdapter));
|
|
20717
|
+
if (rangeStr === CellErrorType.InvalidReference) {
|
|
20718
|
+
return { changeType: "REMOVE", range: rangeStr };
|
|
20719
|
+
}
|
|
20720
|
+
return {
|
|
20721
|
+
changeType: change.changeType,
|
|
20722
|
+
range: rangeStr,
|
|
20723
|
+
};
|
|
20702
20724
|
}
|
|
20703
20725
|
function getSheetNameGetter(applyChange) {
|
|
20704
20726
|
return (sheetId) => {
|
|
@@ -20797,8 +20819,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
20797
20819
|
}
|
|
20798
20820
|
const change = applyChange(range);
|
|
20799
20821
|
switch (change.changeType) {
|
|
20800
|
-
case "NONE":
|
|
20801
|
-
return range;
|
|
20802
20822
|
case "REMOVE":
|
|
20803
20823
|
return undefined;
|
|
20804
20824
|
default:
|
|
@@ -20936,16 +20956,16 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
20936
20956
|
function transformChartDefinitionWithDataSetsWithZone(chartSheetId, definition, applyChange) {
|
|
20937
20957
|
let labelRange;
|
|
20938
20958
|
if (definition.labelRange) {
|
|
20939
|
-
const adaptedRange = adaptStringRange(chartSheetId, definition.labelRange, applyChange);
|
|
20940
|
-
if (
|
|
20959
|
+
const { changeType, range: adaptedRange } = adaptStringRange(chartSheetId, definition.labelRange, applyChange);
|
|
20960
|
+
if (changeType !== "REMOVE") {
|
|
20941
20961
|
labelRange = adaptedRange;
|
|
20942
20962
|
}
|
|
20943
20963
|
}
|
|
20944
20964
|
const dataSets = [];
|
|
20945
20965
|
for (const dataSet of definition.dataSets) {
|
|
20946
20966
|
const newDataSet = { ...dataSet };
|
|
20947
|
-
const adaptedRange = adaptStringRange(chartSheetId, dataSet.dataRange, applyChange);
|
|
20948
|
-
if (
|
|
20967
|
+
const { changeType, range: adaptedRange } = adaptStringRange(chartSheetId, dataSet.dataRange, applyChange);
|
|
20968
|
+
if (changeType !== "REMOVE") {
|
|
20949
20969
|
newDataSet.dataRange = adaptedRange;
|
|
20950
20970
|
dataSets.push(newDataSet);
|
|
20951
20971
|
}
|
|
@@ -22271,14 +22291,14 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
22271
22291
|
let baseline;
|
|
22272
22292
|
let keyValue;
|
|
22273
22293
|
if (definition.baseline) {
|
|
22274
|
-
const adaptedRange = adaptStringRange(chartSheetId, definition.baseline, applyChange);
|
|
22275
|
-
if (
|
|
22294
|
+
const { changeType, range: adaptedRange } = adaptStringRange(chartSheetId, definition.baseline, applyChange);
|
|
22295
|
+
if (changeType !== "REMOVE") {
|
|
22276
22296
|
baseline = adaptedRange;
|
|
22277
22297
|
}
|
|
22278
22298
|
}
|
|
22279
22299
|
if (definition.keyValue) {
|
|
22280
|
-
const adaptedRange = adaptStringRange(chartSheetId, definition.keyValue, applyChange);
|
|
22281
|
-
if (
|
|
22300
|
+
const { changeType, range: adaptedRange } = adaptStringRange(chartSheetId, definition.keyValue, applyChange);
|
|
22301
|
+
if (changeType !== "REMOVE") {
|
|
22282
22302
|
keyValue = adaptedRange;
|
|
22283
22303
|
}
|
|
22284
22304
|
}
|
|
@@ -22334,7 +22354,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
22334
22354
|
// This kind of graph is not exportable in Excel
|
|
22335
22355
|
return undefined;
|
|
22336
22356
|
}
|
|
22337
|
-
updateRanges(applyChange) {
|
|
22357
|
+
updateRanges({ applyChange }) {
|
|
22338
22358
|
const baseline = adaptChartRange(this.baseline, applyChange);
|
|
22339
22359
|
const keyValue = adaptChartRange(this.keyValue, applyChange);
|
|
22340
22360
|
if (this.baseline === baseline && this.keyValue === keyValue) {
|
|
@@ -23229,7 +23249,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
23229
23249
|
}
|
|
23230
23250
|
captureSelection(zone, col, row) {
|
|
23231
23251
|
this.model.selection.capture(this, {
|
|
23232
|
-
cell: { col: col ?? zone.left, row: row ?? zone.
|
|
23252
|
+
cell: { col: col ?? zone.left, row: row ?? zone.top },
|
|
23233
23253
|
zone,
|
|
23234
23254
|
}, {
|
|
23235
23255
|
handleEvent: this.handleEvent.bind(this),
|
|
@@ -27206,7 +27226,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
27206
27226
|
verticalAxis: getDefinedAxis(definition),
|
|
27207
27227
|
};
|
|
27208
27228
|
}
|
|
27209
|
-
updateRanges(applyChange) {
|
|
27229
|
+
updateRanges({ applyChange }) {
|
|
27210
27230
|
const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
|
|
27211
27231
|
if (!isStale) {
|
|
27212
27232
|
return this;
|
|
@@ -27327,7 +27347,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
27327
27347
|
verticalAxis: getDefinedAxis(definition),
|
|
27328
27348
|
};
|
|
27329
27349
|
}
|
|
27330
|
-
updateRanges(applyChange) {
|
|
27350
|
+
updateRanges({ applyChange }) {
|
|
27331
27351
|
const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
|
|
27332
27352
|
if (!isStale) {
|
|
27333
27353
|
return this;
|
|
@@ -27498,7 +27518,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
27498
27518
|
getDefinitionForExcel() {
|
|
27499
27519
|
return undefined;
|
|
27500
27520
|
}
|
|
27501
|
-
updateRanges(applyChange) {
|
|
27521
|
+
updateRanges({ applyChange }) {
|
|
27502
27522
|
const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
|
|
27503
27523
|
if (!isStale) {
|
|
27504
27524
|
return this;
|
|
@@ -27609,8 +27629,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
27609
27629
|
static transformDefinition(chartSheetId, definition, applyChange) {
|
|
27610
27630
|
let dataRange;
|
|
27611
27631
|
if (definition.dataRange) {
|
|
27612
|
-
const adaptedRange = adaptStringRange(chartSheetId, definition.dataRange, applyChange);
|
|
27613
|
-
if (
|
|
27632
|
+
const { changeType, range: adaptedRange } = adaptStringRange(chartSheetId, definition.dataRange, applyChange);
|
|
27633
|
+
if (changeType !== "REMOVE") {
|
|
27614
27634
|
dataRange = adaptedRange;
|
|
27615
27635
|
}
|
|
27616
27636
|
}
|
|
@@ -27685,13 +27705,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
27685
27705
|
: undefined,
|
|
27686
27706
|
};
|
|
27687
27707
|
}
|
|
27688
|
-
updateRanges(applyChange,
|
|
27708
|
+
updateRanges({ applyChange, adaptFormulaString }) {
|
|
27689
27709
|
const dataRange = adaptChartRange(this.dataRange, applyChange);
|
|
27690
|
-
const adaptFormula = (formula) =>
|
|
27691
|
-
applyChange,
|
|
27692
|
-
sheetId,
|
|
27693
|
-
sheetName: adaptSheetName,
|
|
27694
|
-
});
|
|
27710
|
+
const adaptFormula = (formula) => adaptFormulaString(this.sheetId, formula);
|
|
27695
27711
|
const sectionRule = adaptSectionRuleFormulas(this.sectionRule, adaptFormula);
|
|
27696
27712
|
const definition = this.getDefinitionWithSpecificRanges(dataRange, sectionRule);
|
|
27697
27713
|
return new GaugeChart(definition, this.sheetId, this.getters);
|
|
@@ -27911,7 +27927,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
27911
27927
|
getDefinitionForExcel() {
|
|
27912
27928
|
return undefined;
|
|
27913
27929
|
}
|
|
27914
|
-
updateRanges(applyChange) {
|
|
27930
|
+
updateRanges({ applyChange }) {
|
|
27915
27931
|
const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
|
|
27916
27932
|
if (!isStale) {
|
|
27917
27933
|
return this;
|
|
@@ -28043,7 +28059,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28043
28059
|
: undefined,
|
|
28044
28060
|
};
|
|
28045
28061
|
}
|
|
28046
|
-
updateRanges(applyChange) {
|
|
28062
|
+
updateRanges({ applyChange }) {
|
|
28047
28063
|
const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
|
|
28048
28064
|
if (!isStale) {
|
|
28049
28065
|
return this;
|
|
@@ -28200,7 +28216,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28200
28216
|
labelRange,
|
|
28201
28217
|
};
|
|
28202
28218
|
}
|
|
28203
|
-
updateRanges(applyChange) {
|
|
28219
|
+
updateRanges({ applyChange }) {
|
|
28204
28220
|
const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
|
|
28205
28221
|
if (!isStale) {
|
|
28206
28222
|
return this;
|
|
@@ -28336,7 +28352,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28336
28352
|
getDefinitionForExcel() {
|
|
28337
28353
|
return undefined;
|
|
28338
28354
|
}
|
|
28339
|
-
updateRanges(applyChange) {
|
|
28355
|
+
updateRanges({ applyChange }) {
|
|
28340
28356
|
const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
|
|
28341
28357
|
if (!isStale) {
|
|
28342
28358
|
return this;
|
|
@@ -28483,7 +28499,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28483
28499
|
labelRange,
|
|
28484
28500
|
};
|
|
28485
28501
|
}
|
|
28486
|
-
updateRanges(applyChange) {
|
|
28502
|
+
updateRanges({ applyChange }) {
|
|
28487
28503
|
const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
|
|
28488
28504
|
if (!isStale) {
|
|
28489
28505
|
return this;
|
|
@@ -28605,7 +28621,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28605
28621
|
: undefined,
|
|
28606
28622
|
};
|
|
28607
28623
|
}
|
|
28608
|
-
updateRanges(applyChange) {
|
|
28624
|
+
updateRanges({ applyChange }) {
|
|
28609
28625
|
const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
|
|
28610
28626
|
if (!isStale) {
|
|
28611
28627
|
return this;
|
|
@@ -28767,7 +28783,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28767
28783
|
getDefinitionForExcel() {
|
|
28768
28784
|
return undefined;
|
|
28769
28785
|
}
|
|
28770
|
-
updateRanges(applyChange) {
|
|
28786
|
+
updateRanges({ applyChange }) {
|
|
28771
28787
|
const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
|
|
28772
28788
|
if (!isStale) {
|
|
28773
28789
|
return this;
|
|
@@ -28915,7 +28931,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28915
28931
|
getDefinitionForExcel() {
|
|
28916
28932
|
return undefined;
|
|
28917
28933
|
}
|
|
28918
|
-
updateRanges(applyChange) {
|
|
28934
|
+
updateRanges({ applyChange }) {
|
|
28919
28935
|
const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
|
|
28920
28936
|
if (!isStale) {
|
|
28921
28937
|
return this;
|
|
@@ -29070,7 +29086,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
29070
29086
|
// TODO: implement export excel
|
|
29071
29087
|
return undefined;
|
|
29072
29088
|
}
|
|
29073
|
-
updateRanges(applyChange) {
|
|
29089
|
+
updateRanges({ applyChange }) {
|
|
29074
29090
|
const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
|
|
29075
29091
|
if (!isStale) {
|
|
29076
29092
|
return this;
|
|
@@ -31938,6 +31954,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
31938
31954
|
? V_ALIGNMENT_EXPORT_CONVERSION_MAP[style.verticalAlign]
|
|
31939
31955
|
: undefined,
|
|
31940
31956
|
wrapText: style.wrapping === "wrap" || content?.includes(NEWLINE) ? true : undefined,
|
|
31957
|
+
shrinkToFit: style.wrapping === "clip" ? true : undefined,
|
|
31941
31958
|
},
|
|
31942
31959
|
};
|
|
31943
31960
|
styles.font["strike"] = !!style?.strikethrough || undefined;
|
|
@@ -31958,6 +31975,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
31958
31975
|
vertical: styles.alignment.vertical,
|
|
31959
31976
|
horizontal: styles.alignment.horizontal,
|
|
31960
31977
|
wrapText: styles.alignment.wrapText,
|
|
31978
|
+
shrinkToFit: styles.alignment.shrinkToFit,
|
|
31961
31979
|
},
|
|
31962
31980
|
};
|
|
31963
31981
|
return pushElement(style, construct.styles);
|
|
@@ -42962,7 +42980,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
42962
42980
|
});
|
|
42963
42981
|
dataRange = this.props.definition.dataRange;
|
|
42964
42982
|
get configurationErrorMessages() {
|
|
42965
|
-
const cancelledReasons = [...(this.state.dataRangeDispatchResult?.reasons || [])];
|
|
42983
|
+
const cancelledReasons = [...(this.state.dataRangeDispatchResult?.reasons || [])].filter((reason) => reason !== "NoChanges" /* CommandResult.NoChanges */);
|
|
42966
42984
|
return cancelledReasons.map((error) => ChartTerms.Errors[error] || ChartTerms.Errors.Unexpected);
|
|
42967
42985
|
}
|
|
42968
42986
|
get isDataRangeInvalid() {
|
|
@@ -44386,7 +44404,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
44386
44404
|
});
|
|
44387
44405
|
}
|
|
44388
44406
|
get designErrorMessages() {
|
|
44389
|
-
const cancelledReasons = [...(this.state.sectionRuleCancelledReasons || [])];
|
|
44407
|
+
const cancelledReasons = [...(this.state.sectionRuleCancelledReasons || [])].filter((reason) => reason !== "NoChanges" /* CommandResult.NoChanges */);
|
|
44390
44408
|
return cancelledReasons.map((error) => ChartTerms.Errors[error] || ChartTerms.Errors.Unexpected);
|
|
44391
44409
|
}
|
|
44392
44410
|
get isRangeMinInvalid() {
|
|
@@ -44722,7 +44740,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
44722
44740
|
const cancelledReasons = [
|
|
44723
44741
|
...(this.state.keyValueDispatchResult?.reasons || []),
|
|
44724
44742
|
...(this.state.baselineDispatchResult?.reasons || []),
|
|
44725
|
-
];
|
|
44743
|
+
].filter((reason) => reason !== "NoChanges" /* CommandResult.NoChanges */);
|
|
44726
44744
|
return cancelledReasons.map((error) => ChartTerms.Errors[error] || ChartTerms.Errors.Unexpected);
|
|
44727
44745
|
}
|
|
44728
44746
|
get isKeyValueInvalid() {
|
|
@@ -47617,6 +47635,12 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
47617
47635
|
case "ACTIVATE_SHEET":
|
|
47618
47636
|
this.isSearchDirty = true;
|
|
47619
47637
|
this.shouldFinalizeUpdateSelection = true;
|
|
47638
|
+
if (this.searchOptions.specificRange) {
|
|
47639
|
+
this.searchOptions.specificRange = {
|
|
47640
|
+
...this.searchOptions.specificRange,
|
|
47641
|
+
sheetId: this.getters.getActiveSheetId(),
|
|
47642
|
+
};
|
|
47643
|
+
}
|
|
47620
47644
|
break;
|
|
47621
47645
|
case "REPLACE_SEARCH":
|
|
47622
47646
|
for (const match of cmd.matches) {
|
|
@@ -48038,9 +48062,20 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
48038
48062
|
const specificRange = this.env.model.getters.getRangeFromSheetXC(this.env.model.getters.getActiveSheetId(), this.state.dataRange);
|
|
48039
48063
|
this.store.updateSearchOptions({ specificRange });
|
|
48040
48064
|
}
|
|
48065
|
+
get specificRange() {
|
|
48066
|
+
const range = this.store.searchOptions.specificRange;
|
|
48067
|
+
return range ? this.env.model.getters.getRangeString(range, "forceSheetReference") : "";
|
|
48068
|
+
}
|
|
48041
48069
|
get pendingSearch() {
|
|
48042
48070
|
return this.updateSearchContent.isDebouncePending();
|
|
48043
48071
|
}
|
|
48072
|
+
get selectionInputKey() {
|
|
48073
|
+
// Selections input are made to work with objects linked to a sheet id. They store the active sheet id at their creation,
|
|
48074
|
+
// and have specific behaviour linked to it (eg. go back to the initial sheet after confirmation).
|
|
48075
|
+
// We don't want all those behaviors here, so we force the recreation of the component when the active sheet changes.
|
|
48076
|
+
// The only drawback is that the input loses focus when changing sheet.
|
|
48077
|
+
return this.env.model.getters.getActiveSheetId();
|
|
48078
|
+
}
|
|
48044
48079
|
}
|
|
48045
48080
|
|
|
48046
48081
|
css /* scss */ `
|
|
@@ -50310,8 +50345,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
50310
50345
|
}
|
|
50311
50346
|
const change = applyChange(range);
|
|
50312
50347
|
switch (change.changeType) {
|
|
50313
|
-
case "NONE":
|
|
50314
|
-
return range;
|
|
50315
50348
|
case "REMOVE":
|
|
50316
50349
|
return undefined;
|
|
50317
50350
|
default:
|
|
@@ -57374,7 +57407,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
57374
57407
|
* @param sheetId an sheetId to adapt either range of that sheet specifically, or ranges pointing to that sheet
|
|
57375
57408
|
* @param sheetName couple of old and new sheet names to adapt ranges pointing to that sheet
|
|
57376
57409
|
*/
|
|
57377
|
-
adaptRanges(
|
|
57410
|
+
adaptRanges(rangeAdapterFunctions, sheetId, sheetName) { }
|
|
57378
57411
|
/**
|
|
57379
57412
|
* Implement this method to clean unused external resources, such as images
|
|
57380
57413
|
* stored on a server which have been deleted.
|
|
@@ -57970,7 +58003,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
57970
58003
|
];
|
|
57971
58004
|
nextId = 1;
|
|
57972
58005
|
cells = {};
|
|
57973
|
-
adaptRanges(applyChange, sheetId, sheetName) {
|
|
58006
|
+
adaptRanges({ applyChange }, sheetId, sheetName) {
|
|
57974
58007
|
for (const sheet of Object.keys(this.cells)) {
|
|
57975
58008
|
for (const cell of Object.values(this.cells[sheet] || {})) {
|
|
57976
58009
|
if (cell.isFormula) {
|
|
@@ -58192,7 +58225,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
58192
58225
|
for (const position of positions) {
|
|
58193
58226
|
const cell = this.getters.getCell(position);
|
|
58194
58227
|
const xc = toXC(position.col, position.row);
|
|
58195
|
-
const style = this.
|
|
58228
|
+
const style = this.extractCustomStyle(cell);
|
|
58196
58229
|
if (Object.keys(style).length) {
|
|
58197
58230
|
const styleId = getItemId(style, styles);
|
|
58198
58231
|
positionsByStyle[styleId] ??= [];
|
|
@@ -58238,10 +58271,14 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
58238
58271
|
}
|
|
58239
58272
|
}
|
|
58240
58273
|
}
|
|
58241
|
-
|
|
58242
|
-
const cleanedStyle = { ...style };
|
|
58243
|
-
|
|
58244
|
-
|
|
58274
|
+
extractCustomStyle(cell) {
|
|
58275
|
+
const cleanedStyle = { ...cell.style };
|
|
58276
|
+
const defaultStyle = isNumber(cell.content, DEFAULT_LOCALE)
|
|
58277
|
+
? DEFAULT_NUMBER_STYLE
|
|
58278
|
+
: DEFAULT_STYLE;
|
|
58279
|
+
for (const property in cleanedStyle) {
|
|
58280
|
+
if ((property !== "align" || !cell.isFormula) &&
|
|
58281
|
+
cleanedStyle[property] === defaultStyle[property]) {
|
|
58245
58282
|
delete cleanedStyle[property];
|
|
58246
58283
|
}
|
|
58247
58284
|
}
|
|
@@ -58591,9 +58628,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
58591
58628
|
charts = {};
|
|
58592
58629
|
createChart = chartFactory(this.getters);
|
|
58593
58630
|
validateChartDefinition = (cmd) => validateChartDefinition(this, cmd.definition);
|
|
58594
|
-
adaptRanges(
|
|
58631
|
+
adaptRanges(rangeAdapters) {
|
|
58595
58632
|
for (const [chartId, chart] of Object.entries(this.charts)) {
|
|
58596
|
-
this.history.update("charts", chartId, chart?.updateRanges(
|
|
58633
|
+
this.history.update("charts", chartId, chart?.updateRanges(rangeAdapters));
|
|
58597
58634
|
}
|
|
58598
58635
|
}
|
|
58599
58636
|
// ---------------------------------------------------------------------------
|
|
@@ -58783,7 +58820,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
58783
58820
|
"getAdaptedCfRanges",
|
|
58784
58821
|
];
|
|
58785
58822
|
cfRules = {};
|
|
58786
|
-
adaptCFFormulas(applyChange) {
|
|
58823
|
+
adaptCFFormulas({ applyChange, adaptFormulaString }) {
|
|
58787
58824
|
for (const sheetId in this.cfRules) {
|
|
58788
58825
|
for (const rule of this.cfRules[sheetId]) {
|
|
58789
58826
|
if (rule.rule.type === "DataBarRule" && rule.rule.rangeValues) {
|
|
@@ -58807,7 +58844,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
58807
58844
|
for (let i = 0; i < rule.rule.values.length; i++) {
|
|
58808
58845
|
this.history.update("cfRules", sheetId, this.cfRules[sheetId].indexOf(rule), "rule",
|
|
58809
58846
|
//@ts-expect-error
|
|
58810
|
-
"values", i,
|
|
58847
|
+
"values", i, adaptFormulaString(sheetId, rule.rule.values[i]));
|
|
58811
58848
|
}
|
|
58812
58849
|
}
|
|
58813
58850
|
else if (rule.rule.type === "IconSetRule") {
|
|
@@ -58815,7 +58852,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
58815
58852
|
if (rule.rule[inflectionPoint].type === "formula") {
|
|
58816
58853
|
this.history.update("cfRules", sheetId, this.cfRules[sheetId].indexOf(rule), "rule",
|
|
58817
58854
|
//@ts-expect-error
|
|
58818
|
-
inflectionPoint, "value",
|
|
58855
|
+
inflectionPoint, "value", adaptFormulaString(sheetId, rule.rule[inflectionPoint].value));
|
|
58819
58856
|
}
|
|
58820
58857
|
}
|
|
58821
58858
|
}
|
|
@@ -58825,14 +58862,14 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
58825
58862
|
if (ruleValue?.type === "formula" && ruleValue?.value) {
|
|
58826
58863
|
this.history.update("cfRules", sheetId, this.cfRules[sheetId].indexOf(rule), "rule",
|
|
58827
58864
|
//@ts-expect-error
|
|
58828
|
-
value, "value",
|
|
58865
|
+
value, "value", adaptFormulaString(sheetId, ruleValue.value));
|
|
58829
58866
|
}
|
|
58830
58867
|
}
|
|
58831
58868
|
}
|
|
58832
58869
|
}
|
|
58833
58870
|
}
|
|
58834
58871
|
}
|
|
58835
|
-
adaptCFRanges(sheetId, applyChange) {
|
|
58872
|
+
adaptCFRanges(sheetId, { applyChange }) {
|
|
58836
58873
|
for (const rule of this.cfRules[sheetId]) {
|
|
58837
58874
|
for (const range of rule.ranges) {
|
|
58838
58875
|
const change = applyChange(range);
|
|
@@ -58856,12 +58893,12 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
58856
58893
|
}
|
|
58857
58894
|
}
|
|
58858
58895
|
}
|
|
58859
|
-
adaptRanges(
|
|
58896
|
+
adaptRanges(rangeAdapters, sheetId) {
|
|
58860
58897
|
const sheetIds = sheetId ? [sheetId] : Object.keys(this.cfRules);
|
|
58861
58898
|
for (const sheetId of sheetIds) {
|
|
58862
|
-
this.adaptCFRanges(sheetId,
|
|
58899
|
+
this.adaptCFRanges(sheetId, rangeAdapters);
|
|
58863
58900
|
}
|
|
58864
|
-
this.adaptCFFormulas(
|
|
58901
|
+
this.adaptCFFormulas(rangeAdapters);
|
|
58865
58902
|
}
|
|
58866
58903
|
// ---------------------------------------------------------------------------
|
|
58867
58904
|
// Command Handling
|
|
@@ -59252,23 +59289,23 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
59252
59289
|
"getValidationRuleForCell",
|
|
59253
59290
|
];
|
|
59254
59291
|
rules = {};
|
|
59255
|
-
adaptRanges(
|
|
59256
|
-
this.adaptDVRanges(sheetId,
|
|
59257
|
-
this.adaptDVFormulas(
|
|
59292
|
+
adaptRanges(rangeAdapters, sheetId) {
|
|
59293
|
+
this.adaptDVRanges(sheetId, rangeAdapters);
|
|
59294
|
+
this.adaptDVFormulas(rangeAdapters);
|
|
59258
59295
|
}
|
|
59259
|
-
adaptDVFormulas(
|
|
59296
|
+
adaptDVFormulas({ adaptFormulaString }) {
|
|
59260
59297
|
for (const sheetId in this.rules) {
|
|
59261
59298
|
const rules = this.rules[sheetId];
|
|
59262
59299
|
for (let ruleIndex = rules.length - 1; ruleIndex >= 0; ruleIndex--) {
|
|
59263
59300
|
const rule = this.rules[sheetId][ruleIndex];
|
|
59264
59301
|
for (let valueIndex = 0; valueIndex < rule.criterion.values.length; valueIndex++) {
|
|
59265
|
-
const value =
|
|
59302
|
+
const value = adaptFormulaString(sheetId, rule.criterion.values[valueIndex]);
|
|
59266
59303
|
this.history.update("rules", sheetId, ruleIndex, "criterion", "values", valueIndex, value);
|
|
59267
59304
|
}
|
|
59268
59305
|
}
|
|
59269
59306
|
}
|
|
59270
59307
|
}
|
|
59271
|
-
adaptDVRanges(sheetId, applyChange) {
|
|
59308
|
+
adaptDVRanges(sheetId, { applyChange }) {
|
|
59272
59309
|
const rules = this.rules[sheetId];
|
|
59273
59310
|
for (let ruleIndex = rules.length - 1; ruleIndex >= 0; ruleIndex--) {
|
|
59274
59311
|
const rule = this.rules[sheetId][ruleIndex];
|
|
@@ -59542,7 +59579,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
59542
59579
|
// ---------------------------------------------------------------------------
|
|
59543
59580
|
// Command Handling
|
|
59544
59581
|
// ---------------------------------------------------------------------------
|
|
59545
|
-
adaptRanges(applyChange, sheetId) {
|
|
59582
|
+
adaptRanges({ applyChange }, sheetId) {
|
|
59546
59583
|
for (const figure of this.getFigures(sheetId)) {
|
|
59547
59584
|
const change = applyChange(this.getters.getRangeFromZone(sheetId, {
|
|
59548
59585
|
left: figure.col,
|
|
@@ -60349,8 +60386,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
60349
60386
|
break;
|
|
60350
60387
|
}
|
|
60351
60388
|
}
|
|
60352
|
-
adaptRanges(
|
|
60353
|
-
this.applyRangeChangeOnSheet(sheetId,
|
|
60389
|
+
adaptRanges(rangeAdapters, sheetId) {
|
|
60390
|
+
this.applyRangeChangeOnSheet(sheetId, rangeAdapters);
|
|
60354
60391
|
}
|
|
60355
60392
|
// ---------------------------------------------------------------------------
|
|
60356
60393
|
// Getters
|
|
@@ -60655,7 +60692,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
60655
60692
|
/**
|
|
60656
60693
|
* Apply a range change on merges of a particular sheet.
|
|
60657
60694
|
*/
|
|
60658
|
-
applyRangeChangeOnSheet(sheetId, applyChange) {
|
|
60695
|
+
applyRangeChangeOnSheet(sheetId, { applyChange }) {
|
|
60659
60696
|
const merges = Object.entries(this.merges[sheetId] || {});
|
|
60660
60697
|
for (const [mergeId, range] of merges) {
|
|
60661
60698
|
if (range) {
|
|
@@ -60729,7 +60766,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
60729
60766
|
};
|
|
60730
60767
|
}
|
|
60731
60768
|
|
|
60732
|
-
class
|
|
60769
|
+
class RangeAdapterPlugin {
|
|
60733
60770
|
getters;
|
|
60734
60771
|
providers = [];
|
|
60735
60772
|
isAdaptingRanges = false;
|
|
@@ -60737,7 +60774,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
60737
60774
|
this.getters = getters;
|
|
60738
60775
|
}
|
|
60739
60776
|
static getters = [
|
|
60740
|
-
"adaptFormulaStringDependencies",
|
|
60741
60777
|
"copyFormulaStringForSheet",
|
|
60742
60778
|
"extendRange",
|
|
60743
60779
|
"getRangeString",
|
|
@@ -60768,8 +60804,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
60768
60804
|
throw new Error("Plugins cannot dispatch commands during adaptRanges phase");
|
|
60769
60805
|
}
|
|
60770
60806
|
const rangeAdapter = getRangeAdapter(cmd);
|
|
60771
|
-
if (rangeAdapter
|
|
60772
|
-
this.executeOnAllRanges(rangeAdapter
|
|
60807
|
+
if (rangeAdapter) {
|
|
60808
|
+
this.executeOnAllRanges(rangeAdapter);
|
|
60773
60809
|
}
|
|
60774
60810
|
}
|
|
60775
60811
|
finalize() { }
|
|
@@ -60788,11 +60824,15 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
60788
60824
|
return result;
|
|
60789
60825
|
};
|
|
60790
60826
|
}
|
|
60791
|
-
executeOnAllRanges(
|
|
60827
|
+
executeOnAllRanges(rangeAdapter) {
|
|
60792
60828
|
this.isAdaptingRanges = true;
|
|
60793
|
-
const
|
|
60829
|
+
const adapterFunctions = {
|
|
60830
|
+
applyChange: this.verifyRangeRemoved(rangeAdapter.applyChange),
|
|
60831
|
+
adaptRangeString: (defaultSheetId, sheetXC) => adaptStringRange(defaultSheetId, sheetXC, rangeAdapter),
|
|
60832
|
+
adaptFormulaString: (defaultSheetId, formula) => adaptFormulaStringRanges(defaultSheetId, formula, rangeAdapter),
|
|
60833
|
+
};
|
|
60794
60834
|
for (const provider of this.providers) {
|
|
60795
|
-
provider(
|
|
60835
|
+
provider(adapterFunctions, rangeAdapter.sheetId, rangeAdapter.sheetName);
|
|
60796
60836
|
}
|
|
60797
60837
|
this.isAdaptingRanges = false;
|
|
60798
60838
|
}
|
|
@@ -60960,18 +61000,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
60960
61000
|
const unionOfZones = unionUnboundedZones(...zones);
|
|
60961
61001
|
return this.getRangeFromZone(ranges[0].sheetId, unionOfZones);
|
|
60962
61002
|
}
|
|
60963
|
-
adaptFormulaStringDependencies(sheetId, formula, applyChange) {
|
|
60964
|
-
if (!formula.startsWith("=")) {
|
|
60965
|
-
return formula;
|
|
60966
|
-
}
|
|
60967
|
-
const compiledFormula = compile(formula);
|
|
60968
|
-
const updatedDependencies = compiledFormula.dependencies.map((dep) => {
|
|
60969
|
-
const range = this.getters.getRangeFromSheetXC(sheetId, dep);
|
|
60970
|
-
const changedRange = applyChange(range);
|
|
60971
|
-
return changedRange.changeType === "NONE" ? range : changedRange.range;
|
|
60972
|
-
});
|
|
60973
|
-
return this.getters.getFormulaString(sheetId, compiledFormula.tokens, updatedDependencies);
|
|
60974
|
-
}
|
|
60975
61003
|
/**
|
|
60976
61004
|
* Copy a formula string to another sheet.
|
|
60977
61005
|
*
|
|
@@ -61864,7 +61892,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
61864
61892
|
static getters = ["getCoreTable", "getCoreTables", "getCoreTableMatchingTopLeft"];
|
|
61865
61893
|
tables = {};
|
|
61866
61894
|
nextTableId = 1;
|
|
61867
|
-
adaptRanges(applyChange, sheetId) {
|
|
61895
|
+
adaptRanges({ applyChange }, sheetId) {
|
|
61868
61896
|
for (const table of this.getCoreTables(sheetId)) {
|
|
61869
61897
|
this.applyRangeChangeOnTable(sheetId, table, applyChange);
|
|
61870
61898
|
}
|
|
@@ -62742,6 +62770,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
62742
62770
|
"getMeasureCompiledFormula",
|
|
62743
62771
|
"getPivotName",
|
|
62744
62772
|
"isExistingPivot",
|
|
62773
|
+
"getMeasureFullDependencies",
|
|
62745
62774
|
];
|
|
62746
62775
|
nextFormulaId = 1;
|
|
62747
62776
|
pivots = {};
|
|
@@ -62824,12 +62853,12 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
62824
62853
|
}
|
|
62825
62854
|
case "UPDATE_PIVOT": {
|
|
62826
62855
|
this.history.update("pivots", cmd.pivotId, "definition", this.repairSortedColumn(deepCopy(cmd.pivot)));
|
|
62827
|
-
this.compileCalculatedMeasures(cmd.pivot.measures);
|
|
62856
|
+
this.compileCalculatedMeasures(cmd.pivotId, cmd.pivot.measures);
|
|
62828
62857
|
break;
|
|
62829
62858
|
}
|
|
62830
62859
|
}
|
|
62831
62860
|
}
|
|
62832
|
-
adaptRanges(applyChange) {
|
|
62861
|
+
adaptRanges({ applyChange, adaptFormulaString }) {
|
|
62833
62862
|
for (const pivotId in this.pivots) {
|
|
62834
62863
|
const definition = deepCopy(this.pivots[pivotId]?.definition);
|
|
62835
62864
|
if (!definition) {
|
|
@@ -62842,22 +62871,22 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
62842
62871
|
this.history.update("pivots", pivotId, "definition", newDefinition);
|
|
62843
62872
|
}
|
|
62844
62873
|
}
|
|
62845
|
-
for (const
|
|
62846
|
-
for (const
|
|
62847
|
-
const
|
|
62848
|
-
|
|
62849
|
-
|
|
62850
|
-
const change = applyChange(range);
|
|
62851
|
-
if (change.changeType === "NONE") {
|
|
62852
|
-
newDependencies.push(range);
|
|
62853
|
-
}
|
|
62854
|
-
else {
|
|
62855
|
-
newDependencies.push(change.range);
|
|
62856
|
-
}
|
|
62874
|
+
for (const pivotId in this.compiledMeasureFormulas) {
|
|
62875
|
+
for (const measureId in this.compiledMeasureFormulas[pivotId]) {
|
|
62876
|
+
const measure = this.pivots[pivotId]?.definition.measures.find((m) => m.id === measureId);
|
|
62877
|
+
if (!measure || !measure.computedBy) {
|
|
62878
|
+
continue;
|
|
62857
62879
|
}
|
|
62858
|
-
const
|
|
62859
|
-
|
|
62860
|
-
|
|
62880
|
+
const sheetId = measure.computedBy.sheetId;
|
|
62881
|
+
const { formula: compiledFormula, dependencies: indirectDependencies } = this.compiledMeasureFormulas[pivotId][measureId];
|
|
62882
|
+
// adapt direct dependencies
|
|
62883
|
+
this.history.update("compiledMeasureFormulas", pivotId, measureId, "formula", "dependencies", compiledFormula.dependencies.map((range) => applyChange(range).range));
|
|
62884
|
+
// adapt all dependencies (including indirect)
|
|
62885
|
+
this.history.update("compiledMeasureFormulas", pivotId, measure.id, "dependencies", indirectDependencies.map((range) => applyChange(range).range));
|
|
62886
|
+
const oldFormulaString = measure.computedBy.formula;
|
|
62887
|
+
const newFormulaString = adaptFormulaString(sheetId, oldFormulaString);
|
|
62888
|
+
if (newFormulaString !== oldFormulaString) {
|
|
62889
|
+
this.replaceMeasureFormula(pivotId, measure, newFormulaString);
|
|
62861
62890
|
}
|
|
62862
62891
|
}
|
|
62863
62892
|
}
|
|
@@ -62895,12 +62924,17 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
62895
62924
|
isExistingPivot(pivotId) {
|
|
62896
62925
|
return pivotId in this.pivots;
|
|
62897
62926
|
}
|
|
62898
|
-
getMeasureCompiledFormula(measure) {
|
|
62927
|
+
getMeasureCompiledFormula(pivotId, measure) {
|
|
62928
|
+
if (!measure.computedBy) {
|
|
62929
|
+
throw new Error(`Measure ${measure.fieldName} is not computed by formula`);
|
|
62930
|
+
}
|
|
62931
|
+
return this.compiledMeasureFormulas[pivotId][measure.id].formula;
|
|
62932
|
+
}
|
|
62933
|
+
getMeasureFullDependencies(pivotId, measure) {
|
|
62899
62934
|
if (!measure.computedBy) {
|
|
62900
62935
|
throw new Error(`Measure ${measure.fieldName} is not computed by formula`);
|
|
62901
62936
|
}
|
|
62902
|
-
|
|
62903
|
-
return this.compiledMeasureFormulas[sheetId][measure.computedBy.formula];
|
|
62937
|
+
return this.compiledMeasureFormulas[pivotId][measure.id].dependencies;
|
|
62904
62938
|
}
|
|
62905
62939
|
// -------------------------------------------------------------------------
|
|
62906
62940
|
// Private
|
|
@@ -62910,18 +62944,42 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
62910
62944
|
definition: this.repairSortedColumn(deepCopy(pivot)),
|
|
62911
62945
|
formulaId,
|
|
62912
62946
|
});
|
|
62913
|
-
this.compileCalculatedMeasures(pivot.measures);
|
|
62947
|
+
this.compileCalculatedMeasures(pivotId, pivot.measures);
|
|
62914
62948
|
this.history.update("formulaIds", formulaId, pivotId);
|
|
62915
62949
|
this.history.update("nextFormulaId", this.nextFormulaId + 1);
|
|
62916
62950
|
}
|
|
62917
|
-
compileCalculatedMeasures(measures) {
|
|
62951
|
+
compileCalculatedMeasures(pivotId, measures) {
|
|
62918
62952
|
for (const measure of measures) {
|
|
62919
62953
|
if (measure.computedBy) {
|
|
62920
|
-
const sheetId = measure.computedBy.sheetId;
|
|
62921
62954
|
const compiledFormula = this.compileMeasureFormula(measure.computedBy.sheetId, measure.computedBy.formula);
|
|
62922
|
-
this.history.update("compiledMeasureFormulas",
|
|
62955
|
+
this.history.update("compiledMeasureFormulas", pivotId, measure.id, "formula", compiledFormula);
|
|
62923
62956
|
}
|
|
62924
62957
|
}
|
|
62958
|
+
for (const measure of measures) {
|
|
62959
|
+
if (measure.computedBy) {
|
|
62960
|
+
const dependencies = this.computeMeasureFullDependencies(pivotId, measure);
|
|
62961
|
+
this.history.update("compiledMeasureFormulas", pivotId, measure.id, "dependencies", dependencies);
|
|
62962
|
+
}
|
|
62963
|
+
}
|
|
62964
|
+
}
|
|
62965
|
+
computeMeasureFullDependencies(pivotId, measure, exploredMeasures = new Set()) {
|
|
62966
|
+
const rangeDependencies = [];
|
|
62967
|
+
const definition = this.getPivotCoreDefinition(pivotId);
|
|
62968
|
+
const formula = this.getMeasureCompiledFormula(pivotId, measure);
|
|
62969
|
+
exploredMeasures.add(measure.id);
|
|
62970
|
+
for (const token of formula.tokens) {
|
|
62971
|
+
if (token.type !== "SYMBOL") {
|
|
62972
|
+
continue;
|
|
62973
|
+
}
|
|
62974
|
+
const otherMeasure = definition.measures.find((measureCandidate) => getCanonicalSymbolName(measureCandidate.id) === token.value &&
|
|
62975
|
+
measure.id !== measureCandidate.id);
|
|
62976
|
+
if (!otherMeasure || exploredMeasures.has(otherMeasure.id) || !otherMeasure.computedBy) {
|
|
62977
|
+
continue;
|
|
62978
|
+
}
|
|
62979
|
+
rangeDependencies.push(...this.computeMeasureFullDependencies(pivotId, otherMeasure, exploredMeasures));
|
|
62980
|
+
}
|
|
62981
|
+
rangeDependencies.push(...formula.dependencies.filter((range) => !range.invalidXc));
|
|
62982
|
+
return rangeDependencies;
|
|
62925
62983
|
}
|
|
62926
62984
|
insertPivot(position, formulaId, table) {
|
|
62927
62985
|
this.resizeSheet(position.sheetId, position, table);
|
|
@@ -62981,21 +63039,16 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
62981
63039
|
dependencies: rangeDependencies,
|
|
62982
63040
|
};
|
|
62983
63041
|
}
|
|
62984
|
-
replaceMeasureFormula(
|
|
62985
|
-
|
|
62986
|
-
|
|
62987
|
-
|
|
62988
|
-
const pivot = this.pivots[pivotId];
|
|
62989
|
-
if (!pivot) {
|
|
62990
|
-
continue;
|
|
62991
|
-
}
|
|
62992
|
-
for (const measure of pivot.definition.measures) {
|
|
62993
|
-
if (measure.computedBy?.formula === formulaString) {
|
|
62994
|
-
const measureIndex = pivot.definition.measures.indexOf(measure);
|
|
62995
|
-
this.history.update("pivots", pivotId, "definition", "measures", measureIndex, "computedBy", { formula: newFormulaString, sheetId });
|
|
62996
|
-
}
|
|
62997
|
-
}
|
|
63042
|
+
replaceMeasureFormula(pivotId, measure, newFormulaString) {
|
|
63043
|
+
const pivot = this.pivots[pivotId];
|
|
63044
|
+
if (!pivot) {
|
|
63045
|
+
return;
|
|
62998
63046
|
}
|
|
63047
|
+
const measureIndex = pivot.definition.measures.indexOf(measure);
|
|
63048
|
+
this.history.update("pivots", pivotId, "definition", "measures", measureIndex, "computedBy", {
|
|
63049
|
+
formula: newFormulaString,
|
|
63050
|
+
sheetId: measure.computedBy.sheetId,
|
|
63051
|
+
});
|
|
62999
63052
|
}
|
|
63000
63053
|
checkSortedColumnInMeasures(definition) {
|
|
63001
63054
|
definition = this.repairSortedColumn(definition);
|
|
@@ -64400,11 +64453,16 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
64400
64453
|
return this.arrayFormulasToResults.get(formulasPosition);
|
|
64401
64454
|
}
|
|
64402
64455
|
/**
|
|
64403
|
-
* Remove a
|
|
64456
|
+
* Remove a spreading relation for a given array formula position
|
|
64457
|
+
* and its result zone
|
|
64404
64458
|
*/
|
|
64405
64459
|
removeNode(position) {
|
|
64460
|
+
const resultZone = this.arrayFormulasToResults.get(position);
|
|
64461
|
+
if (!resultZone) {
|
|
64462
|
+
return;
|
|
64463
|
+
}
|
|
64406
64464
|
this.resultsToArrayFormulas.remove({
|
|
64407
|
-
boundingBox: { sheetId: position.sheetId, zone:
|
|
64465
|
+
boundingBox: { sheetId: position.sheetId, zone: resultZone },
|
|
64408
64466
|
data: position,
|
|
64409
64467
|
});
|
|
64410
64468
|
this.arrayFormulasToResults.delete(position);
|
|
@@ -64692,6 +64750,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
64692
64750
|
// empty matrix
|
|
64693
64751
|
return createEvaluatedCell({ value: 0 }, this.getters.getLocale(), cellData);
|
|
64694
64752
|
}
|
|
64753
|
+
if (nbRows === 1 && nbColumns === 1) {
|
|
64754
|
+
// single value matrix
|
|
64755
|
+
return createEvaluatedCell(nullValueToZeroValue(formulaReturn[0][0]), this.getters.getLocale(), cellData);
|
|
64756
|
+
}
|
|
64695
64757
|
const resultZone = {
|
|
64696
64758
|
top: formulaPosition.row,
|
|
64697
64759
|
bottom: formulaPosition.row + nbRows - 1,
|
|
@@ -66117,6 +66179,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
66117
66179
|
handle(cmd) {
|
|
66118
66180
|
switch (cmd.type) {
|
|
66119
66181
|
case "START":
|
|
66182
|
+
case "UPDATE_LOCALE":
|
|
66120
66183
|
for (const sheetId of this.getters.getSheetIds()) {
|
|
66121
66184
|
this.initializeSheet(sheetId);
|
|
66122
66185
|
}
|
|
@@ -66238,7 +66301,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
66238
66301
|
}
|
|
66239
66302
|
const cell = this.getters.getCell(position);
|
|
66240
66303
|
const colSize = this.getters.getColSize(position.sheetId, position.col);
|
|
66241
|
-
return getDefaultCellHeight(this.ctx, cell, colSize);
|
|
66304
|
+
return getDefaultCellHeight(this.ctx, cell, this.getters.getLocale(), colSize);
|
|
66242
66305
|
}
|
|
66243
66306
|
isInMultiRowMerge(position) {
|
|
66244
66307
|
const merge = this.getters.getMerge(position);
|
|
@@ -66285,14 +66348,16 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
66285
66348
|
function withPivotPresentationLayer (PivotClass) {
|
|
66286
66349
|
class PivotPresentationLayer extends PivotClass {
|
|
66287
66350
|
getters;
|
|
66351
|
+
pivotId;
|
|
66288
66352
|
cache = {};
|
|
66289
66353
|
rankAsc = {};
|
|
66290
66354
|
rankDesc = {};
|
|
66291
66355
|
runningTotal = {};
|
|
66292
66356
|
runningTotalInPercent = {};
|
|
66293
|
-
constructor(custom, params) {
|
|
66357
|
+
constructor(pivotId, custom, params) {
|
|
66294
66358
|
super(custom, params);
|
|
66295
66359
|
this.getters = params.getters;
|
|
66360
|
+
this.pivotId = pivotId;
|
|
66296
66361
|
}
|
|
66297
66362
|
markAsDirtyForEvaluation() {
|
|
66298
66363
|
this.cache = {};
|
|
@@ -66342,7 +66407,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
66342
66407
|
return handleError(error, measure.aggregator.toUpperCase());
|
|
66343
66408
|
}
|
|
66344
66409
|
}
|
|
66345
|
-
const formula = this.getters.getMeasureCompiledFormula(measure);
|
|
66410
|
+
const formula = this.getters.getMeasureCompiledFormula(this.pivotId, measure);
|
|
66346
66411
|
const getSymbolValue = (symbolName) => {
|
|
66347
66412
|
const { columns, rows } = this.definition;
|
|
66348
66413
|
if (columns.find((col) => col.nameWithGranularity === symbolName)) {
|
|
@@ -67070,7 +67135,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
67070
67135
|
const definition = deepCopy(this.getters.getPivotCoreDefinition(pivotId));
|
|
67071
67136
|
if (!(pivotId in this.pivots)) {
|
|
67072
67137
|
const Pivot = withPivotPresentationLayer(pivotRegistry.get(definition.type).ui);
|
|
67073
|
-
this.pivots[pivotId] = new Pivot(this.custom, { definition, getters: this.getters });
|
|
67138
|
+
this.pivots[pivotId] = new Pivot(pivotId, this.custom, { definition, getters: this.getters });
|
|
67074
67139
|
}
|
|
67075
67140
|
else if (recreate) {
|
|
67076
67141
|
this.pivots[pivotId].onDefinitionChange(definition);
|
|
@@ -68125,7 +68190,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
68125
68190
|
cmd.cf.rule = {
|
|
68126
68191
|
...rule,
|
|
68127
68192
|
rangeValues: rule.rangeValues
|
|
68128
|
-
? adaptStringRange(cmd.sheetId, rule.rangeValues, applyChange)
|
|
68193
|
+
? adaptStringRange(cmd.sheetId, rule.rangeValues, applyChange).range
|
|
68129
68194
|
: undefined,
|
|
68130
68195
|
};
|
|
68131
68196
|
}
|
|
@@ -79612,6 +79677,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
79612
79677
|
if (style.alignment && style.alignment.wrapText) {
|
|
79613
79678
|
alignAttrs.push(["wrapText", "1"]);
|
|
79614
79679
|
}
|
|
79680
|
+
if (style.alignment && style.alignment.shrinkToFit) {
|
|
79681
|
+
alignAttrs.push(["shrinkToFit", "1"]);
|
|
79682
|
+
}
|
|
79615
79683
|
if (alignAttrs.length > 0) {
|
|
79616
79684
|
attributes.push(["applyAlignment", "1"]); // for Libre Office
|
|
79617
79685
|
styleNodes.push(escapeXml /*xml*/ `<xf ${formatAttributes(attributes)}><alignment ${formatAttributes(alignAttrs)} /></xf> `);
|
|
@@ -80382,7 +80450,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
80382
80450
|
this.config = this.setupConfig(config);
|
|
80383
80451
|
this.session = this.setupSession(workbookData.revisionId);
|
|
80384
80452
|
this.coreGetters = {};
|
|
80385
|
-
this.range = new
|
|
80453
|
+
this.range = new RangeAdapterPlugin(this.coreGetters);
|
|
80386
80454
|
this.coreGetters.getRangeString = this.range.getRangeString.bind(this.range);
|
|
80387
80455
|
this.coreGetters.getRangeFromSheetXC = this.range.getRangeFromSheetXC.bind(this.range);
|
|
80388
80456
|
this.coreGetters.createAdaptedRanges = this.range.createAdaptedRanges.bind(this.range);
|
|
@@ -80396,8 +80464,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
80396
80464
|
this.coreGetters.extendRange = this.range.extendRange.bind(this.range);
|
|
80397
80465
|
this.coreGetters.getRangesUnion = this.range.getRangesUnion.bind(this.range);
|
|
80398
80466
|
this.coreGetters.removeRangesSheetPrefix = this.range.removeRangesSheetPrefix.bind(this.range);
|
|
80399
|
-
this.coreGetters.adaptFormulaStringDependencies =
|
|
80400
|
-
this.range.adaptFormulaStringDependencies.bind(this.range);
|
|
80401
80467
|
this.coreGetters.copyFormulaStringForSheet = this.range.copyFormulaStringForSheet.bind(this.range);
|
|
80402
80468
|
this.getters = {
|
|
80403
80469
|
isReadonly: () => this.config.mode === "readonly" || this.config.mode === "dashboard",
|
|
@@ -81113,9 +81179,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
81113
81179
|
exports.tokenize = tokenize;
|
|
81114
81180
|
|
|
81115
81181
|
|
|
81116
|
-
__info__.version = "18.3.
|
|
81117
|
-
__info__.date = "
|
|
81118
|
-
__info__.hash = "
|
|
81182
|
+
__info__.version = "18.3.33";
|
|
81183
|
+
__info__.date = "2026-01-21T11:05:17.933Z";
|
|
81184
|
+
__info__.hash = "b7e5d91";
|
|
81119
81185
|
|
|
81120
81186
|
|
|
81121
81187
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|