@odoo/o-spreadsheet 18.1.3 → 18.1.5

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