@odoo/o-spreadsheet 18.1.3 → 18.1.4
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 +43 -27
- package/dist/o-spreadsheet.d.ts +8 -4
- package/dist/o-spreadsheet.esm.js +43 -27
- package/dist/o-spreadsheet.iife.js +43 -27
- 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.4
|
|
6
|
+
* @date 2025-01-29T06:27:32.901Z
|
|
7
|
+
* @hash a11ef27
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
'use strict';
|
|
@@ -9658,13 +9658,13 @@ function toExcelDataset(getters, ds) {
|
|
|
9658
9658
|
else if (ds.labelCell) {
|
|
9659
9659
|
label = {
|
|
9660
9660
|
reference: getters.getRangeString(ds.labelCell, "forceSheetReference", {
|
|
9661
|
-
|
|
9661
|
+
useBoundedReference: true,
|
|
9662
9662
|
}),
|
|
9663
9663
|
};
|
|
9664
9664
|
}
|
|
9665
9665
|
return {
|
|
9666
9666
|
label,
|
|
9667
|
-
range: getters.getRangeString(dataRange, "forceSheetReference", {
|
|
9667
|
+
range: getters.getRangeString(dataRange, "forceSheetReference", { useBoundedReference: true }),
|
|
9668
9668
|
backgroundColor: ds.backgroundColor,
|
|
9669
9669
|
rightYAxis: ds.rightYAxis,
|
|
9670
9670
|
};
|
|
@@ -9679,7 +9679,7 @@ function toExcelLabelRange(getters, labelRange, shouldRemoveFirstLabel) {
|
|
|
9679
9679
|
zone.top = zone.top + 1;
|
|
9680
9680
|
}
|
|
9681
9681
|
const range = labelRange.clone({ zone });
|
|
9682
|
-
return getters.getRangeString(range, "forceSheetReference", {
|
|
9682
|
+
return getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
|
|
9683
9683
|
}
|
|
9684
9684
|
/**
|
|
9685
9685
|
* Transform a chart definition which supports dataSets (dataSets and LabelRange)
|
|
@@ -53313,7 +53313,7 @@ class CellPlugin extends CorePlugin {
|
|
|
53313
53313
|
/*
|
|
53314
53314
|
* Reconstructs the original formula string based on new dependencies
|
|
53315
53315
|
*/
|
|
53316
|
-
getFormulaString(sheetId, tokens, dependencies,
|
|
53316
|
+
getFormulaString(sheetId, tokens, dependencies, useBoundedReference = false) {
|
|
53317
53317
|
if (!dependencies.length) {
|
|
53318
53318
|
return concat(tokens.map((token) => token.value));
|
|
53319
53319
|
}
|
|
@@ -53321,7 +53321,7 @@ class CellPlugin extends CorePlugin {
|
|
|
53321
53321
|
return concat(tokens.map((token) => {
|
|
53322
53322
|
if (token.type === "REFERENCE") {
|
|
53323
53323
|
const range = dependencies[rangeIndex++];
|
|
53324
|
-
return this.getters.getRangeString(range, sheetId, {
|
|
53324
|
+
return this.getters.getRangeString(range, sheetId, { useBoundedReference });
|
|
53325
53325
|
}
|
|
53326
53326
|
return token.value;
|
|
53327
53327
|
}));
|
|
@@ -53601,7 +53601,7 @@ class FormulaCellWithDependencies {
|
|
|
53601
53601
|
if (token.type === "REFERENCE") {
|
|
53602
53602
|
const index = rangeIndex++;
|
|
53603
53603
|
return this.getRangeString(this.compiledFormula.dependencies[index], this.sheetId, {
|
|
53604
|
-
|
|
53604
|
+
useBoundedReference: true,
|
|
53605
53605
|
});
|
|
53606
53606
|
}
|
|
53607
53607
|
return token.value;
|
|
@@ -53938,7 +53938,7 @@ class ConditionalFormatPlugin extends CorePlugin {
|
|
|
53938
53938
|
if (data.sheets) {
|
|
53939
53939
|
for (let sheet of data.sheets) {
|
|
53940
53940
|
if (this.cfRules[sheet.id]) {
|
|
53941
|
-
sheet.conditionalFormats = this.cfRules[sheet.id].map((rule) => this.mapToConditionalFormat(sheet.id, rule, {
|
|
53941
|
+
sheet.conditionalFormats = this.cfRules[sheet.id].map((rule) => this.mapToConditionalFormat(sheet.id, rule, { useBoundedReference: true }));
|
|
53942
53942
|
}
|
|
53943
53943
|
}
|
|
53944
53944
|
}
|
|
@@ -54007,9 +54007,9 @@ class ConditionalFormatPlugin extends CorePlugin {
|
|
|
54007
54007
|
// ---------------------------------------------------------------------------
|
|
54008
54008
|
// Private
|
|
54009
54009
|
// ---------------------------------------------------------------------------
|
|
54010
|
-
mapToConditionalFormat(sheetId, cf, {
|
|
54010
|
+
mapToConditionalFormat(sheetId, cf, { useBoundedReference } = { useBoundedReference: false }) {
|
|
54011
54011
|
const ranges = cf.ranges.map((range) => {
|
|
54012
|
-
return this.getters.getRangeString(range, sheetId, {
|
|
54012
|
+
return this.getters.getRangeString(range, sheetId, { useBoundedReference });
|
|
54013
54013
|
});
|
|
54014
54014
|
if (cf.rule.type !== "DataBarRule") {
|
|
54015
54015
|
return {
|
|
@@ -54024,7 +54024,7 @@ class ConditionalFormatPlugin extends CorePlugin {
|
|
|
54024
54024
|
...cf.rule,
|
|
54025
54025
|
rangeValues: cf.rule.rangeValues &&
|
|
54026
54026
|
this.getters.getRangeString(cf.rule.rangeValues, sheetId, {
|
|
54027
|
-
|
|
54027
|
+
useBoundedReference,
|
|
54028
54028
|
}),
|
|
54029
54029
|
},
|
|
54030
54030
|
ranges,
|
|
@@ -54465,10 +54465,20 @@ class DataValidationPlugin extends CorePlugin {
|
|
|
54465
54465
|
for (const sheet of data.sheets) {
|
|
54466
54466
|
sheet.dataValidationRules = [];
|
|
54467
54467
|
for (const rule of this.rules[sheet.id]) {
|
|
54468
|
-
|
|
54469
|
-
...rule,
|
|
54470
|
-
ranges: rule.ranges.map((range) => this.getters.getRangeString(range, sheet.id, {
|
|
54471
|
-
}
|
|
54468
|
+
const excelRule = {
|
|
54469
|
+
...deepCopy(rule),
|
|
54470
|
+
ranges: rule.ranges.map((range) => this.getters.getRangeString(range, sheet.id, { useBoundedReference: true })),
|
|
54471
|
+
};
|
|
54472
|
+
if (rule.criterion.type === "isValueInRange") {
|
|
54473
|
+
excelRule.criterion.values = rule.criterion.values.map((value) => {
|
|
54474
|
+
const range = this.getters.getRangeFromSheetXC(sheet.id, value);
|
|
54475
|
+
return this.getters.getRangeString(range, sheet.id, {
|
|
54476
|
+
useBoundedReference: true,
|
|
54477
|
+
useFixedReference: true,
|
|
54478
|
+
});
|
|
54479
|
+
});
|
|
54480
|
+
}
|
|
54481
|
+
sheet.dataValidationRules.push(excelRule);
|
|
54472
54482
|
}
|
|
54473
54483
|
}
|
|
54474
54484
|
}
|
|
@@ -55889,9 +55899,10 @@ class RangeAdapter {
|
|
|
55889
55899
|
* @param range the range (received from getRangeFromXC or getRangeFromZone)
|
|
55890
55900
|
* @param forSheetId the id of the sheet where the range string is supposed to be used.
|
|
55891
55901
|
* @param options
|
|
55902
|
+
* @param options.useBoundedReference if true, the range will be returned with bounded row and column
|
|
55892
55903
|
* @param options.useFixedReference if true, the range will be returned with fixed row and column
|
|
55893
55904
|
*/
|
|
55894
|
-
getRangeString(range, forSheetId, options = { useFixedReference: false }) {
|
|
55905
|
+
getRangeString(range, forSheetId, options = { useBoundedReference: false, useFixedReference: false }) {
|
|
55895
55906
|
if (!range) {
|
|
55896
55907
|
return CellErrorType.InvalidReference;
|
|
55897
55908
|
}
|
|
@@ -55994,13 +56005,13 @@ class RangeAdapter {
|
|
|
55994
56005
|
/**
|
|
55995
56006
|
* Get a Xc string that represent a part of a range
|
|
55996
56007
|
*/
|
|
55997
|
-
getRangePartString(range, part, options = { useFixedReference: false }) {
|
|
55998
|
-
const colFixed = range.parts
|
|
56008
|
+
getRangePartString(range, part, options = { useBoundedReference: false, useFixedReference: false }) {
|
|
56009
|
+
const colFixed = range.parts[part]?.colFixed || options.useFixedReference ? "$" : "";
|
|
55999
56010
|
const col = part === 0 ? numberToLetters(range.zone.left) : numberToLetters(range.zone.right);
|
|
56000
|
-
const rowFixed = range.parts
|
|
56011
|
+
const rowFixed = range.parts[part]?.rowFixed || options.useFixedReference ? "$" : "";
|
|
56001
56012
|
const row = part === 0 ? String(range.zone.top + 1) : String(range.zone.bottom + 1);
|
|
56002
56013
|
let str = "";
|
|
56003
|
-
if (range.isFullCol && !options.
|
|
56014
|
+
if (range.isFullCol && !options.useBoundedReference) {
|
|
56004
56015
|
if (part === 0 && range.unboundedZone.hasHeader) {
|
|
56005
56016
|
str = colFixed + col + rowFixed + row;
|
|
56006
56017
|
}
|
|
@@ -56008,7 +56019,7 @@ class RangeAdapter {
|
|
|
56008
56019
|
str = colFixed + col;
|
|
56009
56020
|
}
|
|
56010
56021
|
}
|
|
56011
|
-
else if (range.isFullRow && !options.
|
|
56022
|
+
else if (range.isFullRow && !options.useBoundedReference) {
|
|
56012
56023
|
if (part === 0 && range.unboundedZone.hasHeader) {
|
|
56013
56024
|
str = colFixed + col + rowFixed + row;
|
|
56014
56025
|
}
|
|
@@ -63187,6 +63198,7 @@ class Session extends EventBus {
|
|
|
63187
63198
|
waitingUndoRedoAck = false;
|
|
63188
63199
|
isReplayingInitialRevisions = false;
|
|
63189
63200
|
processedRevisions = new Set();
|
|
63201
|
+
lastRevisionMessage = undefined;
|
|
63190
63202
|
uuidGenerator = new UuidGenerator();
|
|
63191
63203
|
lastLocalOperation;
|
|
63192
63204
|
/**
|
|
@@ -63287,7 +63299,10 @@ class Session extends EventBus {
|
|
|
63287
63299
|
* Notify the server that the user client left the collaborative session
|
|
63288
63300
|
*/
|
|
63289
63301
|
async leave(data) {
|
|
63290
|
-
if (data &&
|
|
63302
|
+
if (data &&
|
|
63303
|
+
Object.keys(this.clients).length === 1 &&
|
|
63304
|
+
this.lastRevisionMessage &&
|
|
63305
|
+
this.lastRevisionMessage?.type !== "SNAPSHOT_CREATED") {
|
|
63291
63306
|
await this.snapshot(data());
|
|
63292
63307
|
}
|
|
63293
63308
|
delete this.clients[this.clientId];
|
|
@@ -63508,6 +63523,7 @@ class Session extends EventBus {
|
|
|
63508
63523
|
this.pendingMessages = this.pendingMessages.filter((msg) => msg.nextRevisionId !== message.nextRevisionId);
|
|
63509
63524
|
this.serverRevisionId = message.nextRevisionId;
|
|
63510
63525
|
this.processedRevisions.add(message.nextRevisionId);
|
|
63526
|
+
this.lastRevisionMessage = message;
|
|
63511
63527
|
this.sendPendingMessage();
|
|
63512
63528
|
break;
|
|
63513
63529
|
}
|
|
@@ -75017,6 +75033,6 @@ exports.tokenColors = tokenColors;
|
|
|
75017
75033
|
exports.tokenize = tokenize;
|
|
75018
75034
|
|
|
75019
75035
|
|
|
75020
|
-
__info__.version = "18.1.
|
|
75021
|
-
__info__.date = "2025-01-
|
|
75022
|
-
__info__.hash = "
|
|
75036
|
+
__info__.version = "18.1.4";
|
|
75037
|
+
__info__.date = "2025-01-29T06:27:32.901Z";
|
|
75038
|
+
__info__.hash = "a11ef27";
|
package/dist/o-spreadsheet.d.ts
CHANGED
|
@@ -1186,6 +1186,7 @@ declare class Session extends EventBus<CollaborativeEvent> {
|
|
|
1186
1186
|
private waitingUndoRedoAck;
|
|
1187
1187
|
private isReplayingInitialRevisions;
|
|
1188
1188
|
private processedRevisions;
|
|
1189
|
+
private lastRevisionMessage;
|
|
1189
1190
|
private uuidGenerator;
|
|
1190
1191
|
private lastLocalOperation;
|
|
1191
1192
|
/**
|
|
@@ -3977,6 +3978,10 @@ interface SpreadsheetChildEnv extends NotificationStoreMethods {
|
|
|
3977
3978
|
getStore: Get;
|
|
3978
3979
|
}
|
|
3979
3980
|
|
|
3981
|
+
interface RangeStringOptions {
|
|
3982
|
+
useBoundedReference?: boolean;
|
|
3983
|
+
useFixedReference?: boolean;
|
|
3984
|
+
}
|
|
3980
3985
|
declare class RangeAdapter implements CommandHandler<CoreCommand> {
|
|
3981
3986
|
private getters;
|
|
3982
3987
|
private providers;
|
|
@@ -4024,11 +4029,10 @@ declare class RangeAdapter implements CommandHandler<CoreCommand> {
|
|
|
4024
4029
|
* @param range the range (received from getRangeFromXC or getRangeFromZone)
|
|
4025
4030
|
* @param forSheetId the id of the sheet where the range string is supposed to be used.
|
|
4026
4031
|
* @param options
|
|
4032
|
+
* @param options.useBoundedReference if true, the range will be returned with bounded row and column
|
|
4027
4033
|
* @param options.useFixedReference if true, the range will be returned with fixed row and column
|
|
4028
4034
|
*/
|
|
4029
|
-
getRangeString(range: Range, forSheetId: UID, options?:
|
|
4030
|
-
useFixedReference: boolean;
|
|
4031
|
-
}): string;
|
|
4035
|
+
getRangeString(range: Range, forSheetId: UID, options?: RangeStringOptions): string;
|
|
4032
4036
|
getRangeDataFromXc(sheetId: UID, xc: string): RangeData;
|
|
4033
4037
|
getRangeDataFromZone(sheetId: UID, zone: Zone | UnboundedZone): RangeData;
|
|
4034
4038
|
getRangeFromZone(sheetId: UID, zone: Zone | UnboundedZone): Range;
|
|
@@ -4262,7 +4266,7 @@ declare class CellPlugin extends CorePlugin<CoreState$1> implements CoreState$1
|
|
|
4262
4266
|
* starting an async evaluation even if it has been moved or re-allocated
|
|
4263
4267
|
*/
|
|
4264
4268
|
getCellById(cellId: UID): Cell | undefined;
|
|
4265
|
-
getFormulaString(sheetId: UID, tokens: Token[], dependencies: Range[],
|
|
4269
|
+
getFormulaString(sheetId: UID, tokens: Token[], dependencies: Range[], useBoundedReference?: boolean): string;
|
|
4266
4270
|
getTranslatedCellFormula(sheetId: UID, offsetX: number, offsetY: number, tokens: Token[]): string;
|
|
4267
4271
|
getFormulaMovedInSheet(originSheetId: UID, targetSheetId: UID, tokens: Token[]): string;
|
|
4268
4272
|
getCellStyle(position: CellPosition): Style;
|
|
@@ -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.4
|
|
6
|
+
* @date 2025-01-29T06:27:32.901Z
|
|
7
|
+
* @hash a11ef27
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { useEnv, useSubEnv, onWillUnmount, useComponent, status, Component, useRef, onMounted, useEffect, useState, onPatched, onWillPatch, onWillUpdateProps, useExternalListener, onWillStart, xml, useChildSubEnv, markRaw, toRaw } from '@odoo/owl';
|
|
@@ -9656,13 +9656,13 @@ function toExcelDataset(getters, ds) {
|
|
|
9656
9656
|
else if (ds.labelCell) {
|
|
9657
9657
|
label = {
|
|
9658
9658
|
reference: getters.getRangeString(ds.labelCell, "forceSheetReference", {
|
|
9659
|
-
|
|
9659
|
+
useBoundedReference: true,
|
|
9660
9660
|
}),
|
|
9661
9661
|
};
|
|
9662
9662
|
}
|
|
9663
9663
|
return {
|
|
9664
9664
|
label,
|
|
9665
|
-
range: getters.getRangeString(dataRange, "forceSheetReference", {
|
|
9665
|
+
range: getters.getRangeString(dataRange, "forceSheetReference", { useBoundedReference: true }),
|
|
9666
9666
|
backgroundColor: ds.backgroundColor,
|
|
9667
9667
|
rightYAxis: ds.rightYAxis,
|
|
9668
9668
|
};
|
|
@@ -9677,7 +9677,7 @@ function toExcelLabelRange(getters, labelRange, shouldRemoveFirstLabel) {
|
|
|
9677
9677
|
zone.top = zone.top + 1;
|
|
9678
9678
|
}
|
|
9679
9679
|
const range = labelRange.clone({ zone });
|
|
9680
|
-
return getters.getRangeString(range, "forceSheetReference", {
|
|
9680
|
+
return getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
|
|
9681
9681
|
}
|
|
9682
9682
|
/**
|
|
9683
9683
|
* Transform a chart definition which supports dataSets (dataSets and LabelRange)
|
|
@@ -53311,7 +53311,7 @@ class CellPlugin extends CorePlugin {
|
|
|
53311
53311
|
/*
|
|
53312
53312
|
* Reconstructs the original formula string based on new dependencies
|
|
53313
53313
|
*/
|
|
53314
|
-
getFormulaString(sheetId, tokens, dependencies,
|
|
53314
|
+
getFormulaString(sheetId, tokens, dependencies, useBoundedReference = false) {
|
|
53315
53315
|
if (!dependencies.length) {
|
|
53316
53316
|
return concat(tokens.map((token) => token.value));
|
|
53317
53317
|
}
|
|
@@ -53319,7 +53319,7 @@ class CellPlugin extends CorePlugin {
|
|
|
53319
53319
|
return concat(tokens.map((token) => {
|
|
53320
53320
|
if (token.type === "REFERENCE") {
|
|
53321
53321
|
const range = dependencies[rangeIndex++];
|
|
53322
|
-
return this.getters.getRangeString(range, sheetId, {
|
|
53322
|
+
return this.getters.getRangeString(range, sheetId, { useBoundedReference });
|
|
53323
53323
|
}
|
|
53324
53324
|
return token.value;
|
|
53325
53325
|
}));
|
|
@@ -53599,7 +53599,7 @@ class FormulaCellWithDependencies {
|
|
|
53599
53599
|
if (token.type === "REFERENCE") {
|
|
53600
53600
|
const index = rangeIndex++;
|
|
53601
53601
|
return this.getRangeString(this.compiledFormula.dependencies[index], this.sheetId, {
|
|
53602
|
-
|
|
53602
|
+
useBoundedReference: true,
|
|
53603
53603
|
});
|
|
53604
53604
|
}
|
|
53605
53605
|
return token.value;
|
|
@@ -53936,7 +53936,7 @@ class ConditionalFormatPlugin extends CorePlugin {
|
|
|
53936
53936
|
if (data.sheets) {
|
|
53937
53937
|
for (let sheet of data.sheets) {
|
|
53938
53938
|
if (this.cfRules[sheet.id]) {
|
|
53939
|
-
sheet.conditionalFormats = this.cfRules[sheet.id].map((rule) => this.mapToConditionalFormat(sheet.id, rule, {
|
|
53939
|
+
sheet.conditionalFormats = this.cfRules[sheet.id].map((rule) => this.mapToConditionalFormat(sheet.id, rule, { useBoundedReference: true }));
|
|
53940
53940
|
}
|
|
53941
53941
|
}
|
|
53942
53942
|
}
|
|
@@ -54005,9 +54005,9 @@ class ConditionalFormatPlugin extends CorePlugin {
|
|
|
54005
54005
|
// ---------------------------------------------------------------------------
|
|
54006
54006
|
// Private
|
|
54007
54007
|
// ---------------------------------------------------------------------------
|
|
54008
|
-
mapToConditionalFormat(sheetId, cf, {
|
|
54008
|
+
mapToConditionalFormat(sheetId, cf, { useBoundedReference } = { useBoundedReference: false }) {
|
|
54009
54009
|
const ranges = cf.ranges.map((range) => {
|
|
54010
|
-
return this.getters.getRangeString(range, sheetId, {
|
|
54010
|
+
return this.getters.getRangeString(range, sheetId, { useBoundedReference });
|
|
54011
54011
|
});
|
|
54012
54012
|
if (cf.rule.type !== "DataBarRule") {
|
|
54013
54013
|
return {
|
|
@@ -54022,7 +54022,7 @@ class ConditionalFormatPlugin extends CorePlugin {
|
|
|
54022
54022
|
...cf.rule,
|
|
54023
54023
|
rangeValues: cf.rule.rangeValues &&
|
|
54024
54024
|
this.getters.getRangeString(cf.rule.rangeValues, sheetId, {
|
|
54025
|
-
|
|
54025
|
+
useBoundedReference,
|
|
54026
54026
|
}),
|
|
54027
54027
|
},
|
|
54028
54028
|
ranges,
|
|
@@ -54463,10 +54463,20 @@ class DataValidationPlugin extends CorePlugin {
|
|
|
54463
54463
|
for (const sheet of data.sheets) {
|
|
54464
54464
|
sheet.dataValidationRules = [];
|
|
54465
54465
|
for (const rule of this.rules[sheet.id]) {
|
|
54466
|
-
|
|
54467
|
-
...rule,
|
|
54468
|
-
ranges: rule.ranges.map((range) => this.getters.getRangeString(range, sheet.id, {
|
|
54469
|
-
}
|
|
54466
|
+
const excelRule = {
|
|
54467
|
+
...deepCopy(rule),
|
|
54468
|
+
ranges: rule.ranges.map((range) => this.getters.getRangeString(range, sheet.id, { useBoundedReference: true })),
|
|
54469
|
+
};
|
|
54470
|
+
if (rule.criterion.type === "isValueInRange") {
|
|
54471
|
+
excelRule.criterion.values = rule.criterion.values.map((value) => {
|
|
54472
|
+
const range = this.getters.getRangeFromSheetXC(sheet.id, value);
|
|
54473
|
+
return this.getters.getRangeString(range, sheet.id, {
|
|
54474
|
+
useBoundedReference: true,
|
|
54475
|
+
useFixedReference: true,
|
|
54476
|
+
});
|
|
54477
|
+
});
|
|
54478
|
+
}
|
|
54479
|
+
sheet.dataValidationRules.push(excelRule);
|
|
54470
54480
|
}
|
|
54471
54481
|
}
|
|
54472
54482
|
}
|
|
@@ -55887,9 +55897,10 @@ class RangeAdapter {
|
|
|
55887
55897
|
* @param range the range (received from getRangeFromXC or getRangeFromZone)
|
|
55888
55898
|
* @param forSheetId the id of the sheet where the range string is supposed to be used.
|
|
55889
55899
|
* @param options
|
|
55900
|
+
* @param options.useBoundedReference if true, the range will be returned with bounded row and column
|
|
55890
55901
|
* @param options.useFixedReference if true, the range will be returned with fixed row and column
|
|
55891
55902
|
*/
|
|
55892
|
-
getRangeString(range, forSheetId, options = { useFixedReference: false }) {
|
|
55903
|
+
getRangeString(range, forSheetId, options = { useBoundedReference: false, useFixedReference: false }) {
|
|
55893
55904
|
if (!range) {
|
|
55894
55905
|
return CellErrorType.InvalidReference;
|
|
55895
55906
|
}
|
|
@@ -55992,13 +56003,13 @@ class RangeAdapter {
|
|
|
55992
56003
|
/**
|
|
55993
56004
|
* Get a Xc string that represent a part of a range
|
|
55994
56005
|
*/
|
|
55995
|
-
getRangePartString(range, part, options = { useFixedReference: false }) {
|
|
55996
|
-
const colFixed = range.parts
|
|
56006
|
+
getRangePartString(range, part, options = { useBoundedReference: false, useFixedReference: false }) {
|
|
56007
|
+
const colFixed = range.parts[part]?.colFixed || options.useFixedReference ? "$" : "";
|
|
55997
56008
|
const col = part === 0 ? numberToLetters(range.zone.left) : numberToLetters(range.zone.right);
|
|
55998
|
-
const rowFixed = range.parts
|
|
56009
|
+
const rowFixed = range.parts[part]?.rowFixed || options.useFixedReference ? "$" : "";
|
|
55999
56010
|
const row = part === 0 ? String(range.zone.top + 1) : String(range.zone.bottom + 1);
|
|
56000
56011
|
let str = "";
|
|
56001
|
-
if (range.isFullCol && !options.
|
|
56012
|
+
if (range.isFullCol && !options.useBoundedReference) {
|
|
56002
56013
|
if (part === 0 && range.unboundedZone.hasHeader) {
|
|
56003
56014
|
str = colFixed + col + rowFixed + row;
|
|
56004
56015
|
}
|
|
@@ -56006,7 +56017,7 @@ class RangeAdapter {
|
|
|
56006
56017
|
str = colFixed + col;
|
|
56007
56018
|
}
|
|
56008
56019
|
}
|
|
56009
|
-
else if (range.isFullRow && !options.
|
|
56020
|
+
else if (range.isFullRow && !options.useBoundedReference) {
|
|
56010
56021
|
if (part === 0 && range.unboundedZone.hasHeader) {
|
|
56011
56022
|
str = colFixed + col + rowFixed + row;
|
|
56012
56023
|
}
|
|
@@ -63185,6 +63196,7 @@ class Session extends EventBus {
|
|
|
63185
63196
|
waitingUndoRedoAck = false;
|
|
63186
63197
|
isReplayingInitialRevisions = false;
|
|
63187
63198
|
processedRevisions = new Set();
|
|
63199
|
+
lastRevisionMessage = undefined;
|
|
63188
63200
|
uuidGenerator = new UuidGenerator();
|
|
63189
63201
|
lastLocalOperation;
|
|
63190
63202
|
/**
|
|
@@ -63285,7 +63297,10 @@ class Session extends EventBus {
|
|
|
63285
63297
|
* Notify the server that the user client left the collaborative session
|
|
63286
63298
|
*/
|
|
63287
63299
|
async leave(data) {
|
|
63288
|
-
if (data &&
|
|
63300
|
+
if (data &&
|
|
63301
|
+
Object.keys(this.clients).length === 1 &&
|
|
63302
|
+
this.lastRevisionMessage &&
|
|
63303
|
+
this.lastRevisionMessage?.type !== "SNAPSHOT_CREATED") {
|
|
63289
63304
|
await this.snapshot(data());
|
|
63290
63305
|
}
|
|
63291
63306
|
delete this.clients[this.clientId];
|
|
@@ -63506,6 +63521,7 @@ class Session extends EventBus {
|
|
|
63506
63521
|
this.pendingMessages = this.pendingMessages.filter((msg) => msg.nextRevisionId !== message.nextRevisionId);
|
|
63507
63522
|
this.serverRevisionId = message.nextRevisionId;
|
|
63508
63523
|
this.processedRevisions.add(message.nextRevisionId);
|
|
63524
|
+
this.lastRevisionMessage = message;
|
|
63509
63525
|
this.sendPendingMessage();
|
|
63510
63526
|
break;
|
|
63511
63527
|
}
|
|
@@ -74971,6 +74987,6 @@ const chartHelpers = { ...CHART_HELPERS, ...CHART_RUNTIME_HELPERS };
|
|
|
74971
74987
|
export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, chartHelpers, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
|
|
74972
74988
|
|
|
74973
74989
|
|
|
74974
|
-
__info__.version = "18.1.
|
|
74975
|
-
__info__.date = "2025-01-
|
|
74976
|
-
__info__.hash = "
|
|
74990
|
+
__info__.version = "18.1.4";
|
|
74991
|
+
__info__.date = "2025-01-29T06:27:32.901Z";
|
|
74992
|
+
__info__.hash = "a11ef27";
|
|
@@ -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.4
|
|
6
|
+
* @date 2025-01-29T06:27:32.901Z
|
|
7
|
+
* @hash a11ef27
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function (exports, owl) {
|
|
@@ -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)
|
|
@@ -53312,7 +53312,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
53312
53312
|
/*
|
|
53313
53313
|
* Reconstructs the original formula string based on new dependencies
|
|
53314
53314
|
*/
|
|
53315
|
-
getFormulaString(sheetId, tokens, dependencies,
|
|
53315
|
+
getFormulaString(sheetId, tokens, dependencies, useBoundedReference = false) {
|
|
53316
53316
|
if (!dependencies.length) {
|
|
53317
53317
|
return concat(tokens.map((token) => token.value));
|
|
53318
53318
|
}
|
|
@@ -53320,7 +53320,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
53320
53320
|
return concat(tokens.map((token) => {
|
|
53321
53321
|
if (token.type === "REFERENCE") {
|
|
53322
53322
|
const range = dependencies[rangeIndex++];
|
|
53323
|
-
return this.getters.getRangeString(range, sheetId, {
|
|
53323
|
+
return this.getters.getRangeString(range, sheetId, { useBoundedReference });
|
|
53324
53324
|
}
|
|
53325
53325
|
return token.value;
|
|
53326
53326
|
}));
|
|
@@ -53600,7 +53600,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
53600
53600
|
if (token.type === "REFERENCE") {
|
|
53601
53601
|
const index = rangeIndex++;
|
|
53602
53602
|
return this.getRangeString(this.compiledFormula.dependencies[index], this.sheetId, {
|
|
53603
|
-
|
|
53603
|
+
useBoundedReference: true,
|
|
53604
53604
|
});
|
|
53605
53605
|
}
|
|
53606
53606
|
return token.value;
|
|
@@ -53937,7 +53937,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
53937
53937
|
if (data.sheets) {
|
|
53938
53938
|
for (let sheet of data.sheets) {
|
|
53939
53939
|
if (this.cfRules[sheet.id]) {
|
|
53940
|
-
sheet.conditionalFormats = this.cfRules[sheet.id].map((rule) => this.mapToConditionalFormat(sheet.id, rule, {
|
|
53940
|
+
sheet.conditionalFormats = this.cfRules[sheet.id].map((rule) => this.mapToConditionalFormat(sheet.id, rule, { useBoundedReference: true }));
|
|
53941
53941
|
}
|
|
53942
53942
|
}
|
|
53943
53943
|
}
|
|
@@ -54006,9 +54006,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
54006
54006
|
// ---------------------------------------------------------------------------
|
|
54007
54007
|
// Private
|
|
54008
54008
|
// ---------------------------------------------------------------------------
|
|
54009
|
-
mapToConditionalFormat(sheetId, cf, {
|
|
54009
|
+
mapToConditionalFormat(sheetId, cf, { useBoundedReference } = { useBoundedReference: false }) {
|
|
54010
54010
|
const ranges = cf.ranges.map((range) => {
|
|
54011
|
-
return this.getters.getRangeString(range, sheetId, {
|
|
54011
|
+
return this.getters.getRangeString(range, sheetId, { useBoundedReference });
|
|
54012
54012
|
});
|
|
54013
54013
|
if (cf.rule.type !== "DataBarRule") {
|
|
54014
54014
|
return {
|
|
@@ -54023,7 +54023,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
54023
54023
|
...cf.rule,
|
|
54024
54024
|
rangeValues: cf.rule.rangeValues &&
|
|
54025
54025
|
this.getters.getRangeString(cf.rule.rangeValues, sheetId, {
|
|
54026
|
-
|
|
54026
|
+
useBoundedReference,
|
|
54027
54027
|
}),
|
|
54028
54028
|
},
|
|
54029
54029
|
ranges,
|
|
@@ -54464,10 +54464,20 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
54464
54464
|
for (const sheet of data.sheets) {
|
|
54465
54465
|
sheet.dataValidationRules = [];
|
|
54466
54466
|
for (const rule of this.rules[sheet.id]) {
|
|
54467
|
-
|
|
54468
|
-
...rule,
|
|
54469
|
-
ranges: rule.ranges.map((range) => this.getters.getRangeString(range, sheet.id, {
|
|
54470
|
-
}
|
|
54467
|
+
const excelRule = {
|
|
54468
|
+
...deepCopy(rule),
|
|
54469
|
+
ranges: rule.ranges.map((range) => this.getters.getRangeString(range, sheet.id, { useBoundedReference: true })),
|
|
54470
|
+
};
|
|
54471
|
+
if (rule.criterion.type === "isValueInRange") {
|
|
54472
|
+
excelRule.criterion.values = rule.criterion.values.map((value) => {
|
|
54473
|
+
const range = this.getters.getRangeFromSheetXC(sheet.id, value);
|
|
54474
|
+
return this.getters.getRangeString(range, sheet.id, {
|
|
54475
|
+
useBoundedReference: true,
|
|
54476
|
+
useFixedReference: true,
|
|
54477
|
+
});
|
|
54478
|
+
});
|
|
54479
|
+
}
|
|
54480
|
+
sheet.dataValidationRules.push(excelRule);
|
|
54471
54481
|
}
|
|
54472
54482
|
}
|
|
54473
54483
|
}
|
|
@@ -55888,9 +55898,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
55888
55898
|
* @param range the range (received from getRangeFromXC or getRangeFromZone)
|
|
55889
55899
|
* @param forSheetId the id of the sheet where the range string is supposed to be used.
|
|
55890
55900
|
* @param options
|
|
55901
|
+
* @param options.useBoundedReference if true, the range will be returned with bounded row and column
|
|
55891
55902
|
* @param options.useFixedReference if true, the range will be returned with fixed row and column
|
|
55892
55903
|
*/
|
|
55893
|
-
getRangeString(range, forSheetId, options = { useFixedReference: false }) {
|
|
55904
|
+
getRangeString(range, forSheetId, options = { useBoundedReference: false, useFixedReference: false }) {
|
|
55894
55905
|
if (!range) {
|
|
55895
55906
|
return CellErrorType.InvalidReference;
|
|
55896
55907
|
}
|
|
@@ -55993,13 +56004,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
55993
56004
|
/**
|
|
55994
56005
|
* Get a Xc string that represent a part of a range
|
|
55995
56006
|
*/
|
|
55996
|
-
getRangePartString(range, part, options = { useFixedReference: false }) {
|
|
55997
|
-
const colFixed = range.parts
|
|
56007
|
+
getRangePartString(range, part, options = { useBoundedReference: false, useFixedReference: false }) {
|
|
56008
|
+
const colFixed = range.parts[part]?.colFixed || options.useFixedReference ? "$" : "";
|
|
55998
56009
|
const col = part === 0 ? numberToLetters(range.zone.left) : numberToLetters(range.zone.right);
|
|
55999
|
-
const rowFixed = range.parts
|
|
56010
|
+
const rowFixed = range.parts[part]?.rowFixed || options.useFixedReference ? "$" : "";
|
|
56000
56011
|
const row = part === 0 ? String(range.zone.top + 1) : String(range.zone.bottom + 1);
|
|
56001
56012
|
let str = "";
|
|
56002
|
-
if (range.isFullCol && !options.
|
|
56013
|
+
if (range.isFullCol && !options.useBoundedReference) {
|
|
56003
56014
|
if (part === 0 && range.unboundedZone.hasHeader) {
|
|
56004
56015
|
str = colFixed + col + rowFixed + row;
|
|
56005
56016
|
}
|
|
@@ -56007,7 +56018,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
56007
56018
|
str = colFixed + col;
|
|
56008
56019
|
}
|
|
56009
56020
|
}
|
|
56010
|
-
else if (range.isFullRow && !options.
|
|
56021
|
+
else if (range.isFullRow && !options.useBoundedReference) {
|
|
56011
56022
|
if (part === 0 && range.unboundedZone.hasHeader) {
|
|
56012
56023
|
str = colFixed + col + rowFixed + row;
|
|
56013
56024
|
}
|
|
@@ -63186,6 +63197,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
63186
63197
|
waitingUndoRedoAck = false;
|
|
63187
63198
|
isReplayingInitialRevisions = false;
|
|
63188
63199
|
processedRevisions = new Set();
|
|
63200
|
+
lastRevisionMessage = undefined;
|
|
63189
63201
|
uuidGenerator = new UuidGenerator();
|
|
63190
63202
|
lastLocalOperation;
|
|
63191
63203
|
/**
|
|
@@ -63286,7 +63298,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
63286
63298
|
* Notify the server that the user client left the collaborative session
|
|
63287
63299
|
*/
|
|
63288
63300
|
async leave(data) {
|
|
63289
|
-
if (data &&
|
|
63301
|
+
if (data &&
|
|
63302
|
+
Object.keys(this.clients).length === 1 &&
|
|
63303
|
+
this.lastRevisionMessage &&
|
|
63304
|
+
this.lastRevisionMessage?.type !== "SNAPSHOT_CREATED") {
|
|
63290
63305
|
await this.snapshot(data());
|
|
63291
63306
|
}
|
|
63292
63307
|
delete this.clients[this.clientId];
|
|
@@ -63507,6 +63522,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
63507
63522
|
this.pendingMessages = this.pendingMessages.filter((msg) => msg.nextRevisionId !== message.nextRevisionId);
|
|
63508
63523
|
this.serverRevisionId = message.nextRevisionId;
|
|
63509
63524
|
this.processedRevisions.add(message.nextRevisionId);
|
|
63525
|
+
this.lastRevisionMessage = message;
|
|
63510
63526
|
this.sendPendingMessage();
|
|
63511
63527
|
break;
|
|
63512
63528
|
}
|
|
@@ -75016,9 +75032,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
75016
75032
|
exports.tokenize = tokenize;
|
|
75017
75033
|
|
|
75018
75034
|
|
|
75019
|
-
__info__.version = "18.1.
|
|
75020
|
-
__info__.date = "2025-01-
|
|
75021
|
-
__info__.hash = "
|
|
75035
|
+
__info__.version = "18.1.4";
|
|
75036
|
+
__info__.date = "2025-01-29T06:27:32.901Z";
|
|
75037
|
+
__info__.hash = "a11ef27";
|
|
75022
75038
|
|
|
75023
75039
|
|
|
75024
75040
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|