@odoo/o-spreadsheet 17.0.9 → 17.0.10

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 17.0.9
6
- * @date 2024-01-29T13:53:22.963Z
7
- * @hash 3c1209a
5
+ * @version 17.0.10
6
+ * @date 2024-02-02T13:48:28.727Z
7
+ * @hash be06aa9
8
8
  */
9
9
 
10
10
  (function (exports, owl) {
@@ -4933,14 +4933,8 @@
4933
4933
  : undefined));
4934
4934
  }
4935
4935
  }
4936
- else if (zone.left === zone.right && zone.top === zone.bottom) {
4937
- // A single cell. If it's only the title, the dataset is not added.
4938
- if (!dataSetsHaveTitle) {
4939
- dataSets.push(createDataSet(getters, dataSetSheetId, zone, undefined));
4940
- }
4941
- }
4942
4936
  else {
4943
- /* 1 row or 1 column */
4937
+ /* 1 cell, 1 row or 1 column */
4944
4938
  dataSets.push(createDataSet(getters, dataSetSheetId, zone, dataSetsHaveTitle
4945
4939
  ? {
4946
4940
  top: zone.top,
@@ -4989,8 +4983,10 @@
4989
4983
  }
4990
4984
  const dataRange = ds.dataRange.clone({ zone: dataZone });
4991
4985
  return {
4992
- label: ds.labelCell ? getters.getRangeString(ds.labelCell, "forceSheetReference") : undefined,
4993
- range: getters.getRangeString(dataRange, "forceSheetReference"),
4986
+ label: ds.labelCell
4987
+ ? getters.getRangeString(ds.labelCell, "forceSheetReference", { useFixedReference: true })
4988
+ : undefined,
4989
+ range: getters.getRangeString(dataRange, "forceSheetReference", { useFixedReference: true }),
4994
4990
  };
4995
4991
  }
4996
4992
  function toExcelLabelRange(getters, labelRange, shouldRemoveFirstLabel) {
@@ -5003,7 +4999,7 @@
5003
4999
  zone.top = zone.top + 1;
5004
5000
  }
5005
5001
  const range = labelRange.clone({ zone });
5006
- return getters.getRangeString(range, "forceSheetReference");
5002
+ return getters.getRangeString(range, "forceSheetReference", { useFixedReference: true });
5007
5003
  }
5008
5004
  /**
5009
5005
  * Transform a chart definition which supports dataSets (dataSets and LabelRange)
@@ -8593,7 +8589,7 @@
8593
8589
  return undefined;
8594
8590
  const dataSets = this.dataSets
8595
8591
  .map((ds) => toExcelDataset(this.getters, ds))
8596
- .filter((ds) => ds.range !== ""); // && range !== INCORRECT_RANGE_STRING ? show incorrect #ref ?
8592
+ .filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
8597
8593
  const labelRange = toExcelLabelRange(this.getters, this.labelRange, shouldRemoveFirstLabel(this.labelRange, this.dataSets[0], this.dataSetsHaveTitle));
8598
8594
  return {
8599
8595
  ...this.getDefinition(),
@@ -9171,7 +9167,7 @@
9171
9167
  return undefined;
9172
9168
  const dataSets = this.dataSets
9173
9169
  .map((ds) => toExcelDataset(this.getters, ds))
9174
- .filter((ds) => ds.range !== ""); // && range !== INCORRECT_RANGE_STRING ? show incorrect #ref ?
9170
+ .filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
9175
9171
  const labelRange = toExcelLabelRange(this.getters, this.labelRange, shouldRemoveFirstLabel(this.labelRange, this.dataSets[0], this.dataSetsHaveTitle));
9176
9172
  return {
9177
9173
  ...this.getDefinition(),
@@ -9477,7 +9473,7 @@
9477
9473
  return undefined;
9478
9474
  const dataSets = this.dataSets
9479
9475
  .map((ds) => toExcelDataset(this.getters, ds))
9480
- .filter((ds) => ds.range !== ""); // && range !== INCORRECT_RANGE_STRING ? show incorrect #ref ?
9476
+ .filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
9481
9477
  const labelRange = toExcelLabelRange(this.getters, this.labelRange, shouldRemoveFirstLabel(this.labelRange, this.dataSets[0], this.dataSetsHaveTitle));
9482
9478
  return {
9483
9479
  ...this.getDefinition(),
@@ -19920,19 +19916,20 @@
19920
19916
  const formatNumberCurrency = createFormatActionSpec({
19921
19917
  name: _t("Currency"),
19922
19918
  descriptionValue: 1000.12,
19923
- format: (env) => env.model.config.defaultCurrencyFormat,
19919
+ format: (env) => env.model.config.defaultCurrencyFormat ?? DEFAULT_CURRENCY_FORMAT,
19924
19920
  });
19925
19921
  const formatNumberCurrencyRounded = {
19926
19922
  ...createFormatActionSpec({
19927
19923
  name: _t("Currency rounded"),
19928
19924
  descriptionValue: 1000,
19929
- format: (env) => roundFormat(env.model.config.defaultCurrencyFormat),
19925
+ format: (env) => roundFormat(env.model.config.defaultCurrencyFormat ?? DEFAULT_CURRENCY_FORMAT),
19930
19926
  }),
19931
19927
  isVisible: (env) => {
19932
19928
  const currencyFormat = env.model.config.defaultCurrencyFormat;
19933
- return currencyFormat !== roundFormat(currencyFormat);
19929
+ return currencyFormat !== roundFormat(currencyFormat ?? DEFAULT_CURRENCY_FORMAT);
19934
19930
  },
19935
19931
  };
19932
+ const DEFAULT_CURRENCY_FORMAT = "[$$]#,##0.00";
19936
19933
  const EXAMPLE_DATE = parseLiteral("2023/09/26 10:43:00 PM", DEFAULT_LOCALE);
19937
19934
  const formatCustomCurrency = {
19938
19935
  name: _t("Custom currency"),
@@ -29352,6 +29349,7 @@
29352
29349
  GROUP_HEADERS: groupHeadersMenuRegistry,
29353
29350
  UNGROUP_HEADERS: unGroupHeadersMenuRegistry,
29354
29351
  };
29352
+ const MODIFIER_KEYS = ["Shift", "Control", "Alt", "Meta"];
29355
29353
  // -----------------------------------------------------------------------------
29356
29354
  // JS
29357
29355
  // -----------------------------------------------------------------------------
@@ -29724,16 +29722,15 @@
29724
29722
  }
29725
29723
  }
29726
29724
  onKeydown(ev) {
29727
- const eventKey = ev.key.toUpperCase();
29728
29725
  let keyDownString = "";
29729
- if (isCtrlKey(ev) && eventKey !== "CTRL")
29730
- keyDownString += "CTRL+";
29731
- if (ev.metaKey)
29732
- keyDownString += "CTRL+";
29733
- if (ev.altKey && eventKey !== "ALT")
29734
- keyDownString += "ALT+";
29735
- if (ev.shiftKey && eventKey !== "SHIFT")
29736
- keyDownString += "SHIFT+";
29726
+ if (!MODIFIER_KEYS.includes(ev.key)) {
29727
+ if (isCtrlKey(ev))
29728
+ keyDownString += "CTRL+";
29729
+ if (ev.altKey)
29730
+ keyDownString += "ALT+";
29731
+ if (ev.shiftKey)
29732
+ keyDownString += "SHIFT+";
29733
+ }
29737
29734
  keyDownString += ev.key.toUpperCase();
29738
29735
  let handler = this.keyDownMapping[keyDownString];
29739
29736
  if (handler) {
@@ -35571,6 +35568,9 @@
35571
35568
  format: cell.format ? getItemId(cell.format, formats) : undefined,
35572
35569
  content: cell.content || undefined,
35573
35570
  };
35571
+ if (cell instanceof FormulaCellWithDependencies) {
35572
+ cells[xc].content = cell.contentWithFixedReferences || undefined;
35573
+ }
35574
35574
  }
35575
35575
  _sheet.cells = cells;
35576
35576
  }
@@ -35614,13 +35614,13 @@
35614
35614
  /*
35615
35615
  * Reconstructs the original formula string based on a normalized form and its dependencies
35616
35616
  */
35617
- getFormulaCellContent(sheetId, compiledFormula, dependencies) {
35617
+ getFormulaCellContent(sheetId, compiledFormula, dependencies, useFixedReference = false) {
35618
35618
  const ranges = dependencies || compiledFormula.dependencies;
35619
35619
  let rangeIndex = 0;
35620
35620
  return concat(compiledFormula.tokens.map((token) => {
35621
35621
  if (token.type === "REFERENCE") {
35622
35622
  const range = ranges[rangeIndex++];
35623
- return this.getters.getRangeString(range, sheetId);
35623
+ return this.getters.getRangeString(range, sheetId, { useFixedReference });
35624
35624
  }
35625
35625
  return token.value;
35626
35626
  }));
@@ -35889,6 +35889,18 @@
35889
35889
  get content() {
35890
35890
  return concat(this.compiledFormula.tokens.map((token) => token.value));
35891
35891
  }
35892
+ get contentWithFixedReferences() {
35893
+ let rangeIndex = 0;
35894
+ return concat(this.compiledFormula.tokens.map((token) => {
35895
+ if (token.type === "REFERENCE") {
35896
+ const index = rangeIndex++;
35897
+ return this.getRangeString(this.compiledFormula.dependencies[index], this.sheetId, {
35898
+ useFixedReference: true,
35899
+ });
35900
+ }
35901
+ return token.value;
35902
+ }));
35903
+ }
35892
35904
  }
35893
35905
  class RangeReferenceToken {
35894
35906
  getValue;
@@ -36193,7 +36205,13 @@
36193
36205
  }
36194
36206
  }
36195
36207
  exportForExcel(data) {
36196
- this.export(data);
36208
+ if (data.sheets) {
36209
+ for (let sheet of data.sheets) {
36210
+ if (this.cfRules[sheet.id]) {
36211
+ sheet.conditionalFormats = this.cfRules[sheet.id].map((rule) => this.mapToConditionalFormat(sheet.id, rule, { useFixedReference: true }));
36212
+ }
36213
+ }
36214
+ }
36197
36215
  }
36198
36216
  // ---------------------------------------------------------------------------
36199
36217
  // Getters
@@ -36258,11 +36276,11 @@
36258
36276
  // ---------------------------------------------------------------------------
36259
36277
  // Private
36260
36278
  // ---------------------------------------------------------------------------
36261
- mapToConditionalFormat(sheetId, cf) {
36279
+ mapToConditionalFormat(sheetId, cf, { useFixedReference } = { useFixedReference: false }) {
36262
36280
  return {
36263
36281
  ...cf,
36264
36282
  ranges: cf.ranges.map((range) => {
36265
- return this.getters.getRangeString(range, sheetId);
36283
+ return this.getters.getRangeString(range, sheetId, { useFixedReference });
36266
36284
  }),
36267
36285
  };
36268
36286
  }
@@ -38330,8 +38348,10 @@
38330
38348
  *
38331
38349
  * @param range the range (received from getRangeFromXC or getRangeFromZone)
38332
38350
  * @param forSheetId the id of the sheet where the range string is supposed to be used.
38351
+ * @param options
38352
+ * @param options.useFixedReference if true, the range will be returned with fixed row and column
38333
38353
  */
38334
- getRangeString(range, forSheetId) {
38354
+ getRangeString(range, forSheetId, options = { useFixedReference: false }) {
38335
38355
  if (!range) {
38336
38356
  return INCORRECT_RANGE_STRING;
38337
38357
  }
@@ -38358,7 +38378,7 @@
38358
38378
  if (prefixSheet && !sheetName) {
38359
38379
  return INCORRECT_RANGE_STRING;
38360
38380
  }
38361
- let rangeString = this.getRangePartString(rangeImpl, 0);
38381
+ let rangeString = this.getRangePartString(rangeImpl, 0, options);
38362
38382
  if (rangeImpl.parts && rangeImpl.parts.length === 2) {
38363
38383
  // this if converts A2:A2 into A2 except if any part of the original range had fixed row or column (with $)
38364
38384
  if (rangeImpl.zone.top !== rangeImpl.zone.bottom ||
@@ -38368,7 +38388,7 @@
38368
38388
  rangeImpl.parts[1].rowFixed ||
38369
38389
  rangeImpl.parts[1].colFixed) {
38370
38390
  rangeString += ":";
38371
- rangeString += this.getRangePartString(rangeImpl, 1);
38391
+ rangeString += this.getRangePartString(rangeImpl, 1, options);
38372
38392
  }
38373
38393
  }
38374
38394
  return `${prefixSheet ? sheetName + "!" : ""}${rangeString}`;
@@ -38409,13 +38429,13 @@
38409
38429
  /**
38410
38430
  * Get a Xc string that represent a part of a range
38411
38431
  */
38412
- getRangePartString(range, part) {
38432
+ getRangePartString(range, part, options = { useFixedReference: false }) {
38413
38433
  const colFixed = range.parts && range.parts[part]?.colFixed ? "$" : "";
38414
38434
  const col = part === 0 ? numberToLetters(range.zone.left) : numberToLetters(range.zone.right);
38415
38435
  const rowFixed = range.parts && range.parts[part]?.rowFixed ? "$" : "";
38416
38436
  const row = part === 0 ? String(range.zone.top + 1) : String(range.zone.bottom + 1);
38417
38437
  let str = "";
38418
- if (range.isFullCol) {
38438
+ if (range.isFullCol && !options.useFixedReference) {
38419
38439
  if (part === 0 && range.unboundedZone.hasHeader) {
38420
38440
  str = colFixed + col + rowFixed + row;
38421
38441
  }
@@ -38423,7 +38443,7 @@
38423
38443
  str = colFixed + col;
38424
38444
  }
38425
38445
  }
38426
- else if (range.isFullRow) {
38446
+ else if (range.isFullRow && !options.useFixedReference) {
38427
38447
  if (part === 0 && range.unboundedZone.hasHeader) {
38428
38448
  str = colFixed + col + rowFixed + row;
38429
38449
  }
@@ -54950,12 +54970,7 @@
54950
54970
  attrs.push(["t", "str"]);
54951
54971
  cycle = escapeXml /*xml*/ `<v>${cell.value}</v>`;
54952
54972
  }
54953
- node = escapeXml /*xml*/ `
54954
- <f>
54955
- ${XlsxFormula}
54956
- </f>
54957
- ${cycle}
54958
- `;
54973
+ node = escapeXml /*xml*/ `<f>${XlsxFormula}</f>${cycle}`;
54959
54974
  return { attrs, node };
54960
54975
  }
54961
54976
  function addContent(content, sharedStrings, forceString = false) {
@@ -55774,11 +55789,10 @@
55774
55789
  ({ attrs: additionalAttrs, node: cellNode } = addContent(cell.content, construct.sharedStrings, isTableHeader));
55775
55790
  }
55776
55791
  attributes.push(...additionalAttrs);
55777
- cellNodes.push(escapeXml /*xml*/ `
55778
- <c ${formatAttributes(attributes)}>
55779
- ${cellNode}
55780
- </c>
55781
- `);
55792
+ // prettier-ignore
55793
+ cellNodes.push(escapeXml /*xml*/ `<c ${formatAttributes(attributes)}>
55794
+ ${cellNode}
55795
+ </c>`);
55782
55796
  }
55783
55797
  }
55784
55798
  if (cellNodes.length || row.size !== DEFAULT_CELL_HEIGHT || row.isHidden) {
@@ -56374,7 +56388,6 @@
56374
56388
  ...config,
56375
56389
  mode: config.mode || "normal",
56376
56390
  custom: config.custom || {},
56377
- defaultCurrencyFormat: config.defaultCurrencyFormat || "[$$]#,##0.00",
56378
56391
  external: this.setupExternalConfig(config.external || {}),
56379
56392
  transportService,
56380
56393
  client,
@@ -56412,6 +56425,7 @@
56412
56425
  custom: this.config.custom,
56413
56426
  uiActions: this.config,
56414
56427
  session: this.session,
56428
+ defaultCurrencyFormat: this.config.defaultCurrencyFormat,
56415
56429
  };
56416
56430
  }
56417
56431
  // ---------------------------------------------------------------------------
@@ -56784,9 +56798,9 @@
56784
56798
  exports.tokenize = tokenize;
56785
56799
 
56786
56800
 
56787
- __info__.version = "17.0.9";
56788
- __info__.date = "2024-01-29T13:53:22.963Z";
56789
- __info__.hash = "3c1209a";
56801
+ __info__.version = "17.0.10";
56802
+ __info__.date = "2024-02-02T13:48:28.727Z";
56803
+ __info__.hash = "be06aa9";
56790
56804
 
56791
56805
 
56792
56806
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);