@odoo/o-spreadsheet 16.0.35 → 16.0.37

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.
@@ -989,7 +989,7 @@
989
989
  }
990
990
  // Generate new Id if the item didn't exist in the dictionary
991
991
  const ids = Object.keys(itemsDic);
992
- const maxId = ids.length === 0 ? 0 : Math.max(...ids.map((id) => parseInt(id, 10)));
992
+ const maxId = ids.length === 0 ? 0 : largeMax(ids.map((id) => parseInt(id, 10)));
993
993
  itemsDic[maxId + 1] = item;
994
994
  return maxId + 1;
995
995
  }
@@ -1135,6 +1135,34 @@
1135
1135
  return cache.get(args[0]);
1136
1136
  },
1137
1137
  }[funcName];
1138
+ }
1139
+ /**
1140
+ * Alternative to Math.max that works with large arrays.
1141
+ * Typically useful for arrays bigger than 100k elements.
1142
+ */
1143
+ function largeMax(array) {
1144
+ let len = array.length;
1145
+ if (len < 100000)
1146
+ return Math.max(...array);
1147
+ let max = -Infinity;
1148
+ while (len--) {
1149
+ max = array[len] > max ? array[len] : max;
1150
+ }
1151
+ return max;
1152
+ }
1153
+ /**
1154
+ * Alternative to Math.min that works with large arrays.
1155
+ * Typically useful for arrays bigger than 100k elements.
1156
+ */
1157
+ function largeMin(array) {
1158
+ let len = array.length;
1159
+ if (len < 100000)
1160
+ return Math.min(...array);
1161
+ let min = +Infinity;
1162
+ while (len--) {
1163
+ min = array[len] < min ? array[len] : min;
1164
+ }
1165
+ return min;
1138
1166
  }
1139
1167
 
1140
1168
  const RBA_REGEX = /rgba?\(|\s+|\)/gi;
@@ -5097,8 +5125,8 @@
5097
5125
  let last;
5098
5126
  const activesRows = env.model.getters.getActiveRows();
5099
5127
  if (activesRows.size !== 0) {
5100
- first = Math.min(...activesRows);
5101
- last = Math.max(...activesRows);
5128
+ first = largeMin([...activesRows]);
5129
+ last = largeMax([...activesRows]);
5102
5130
  }
5103
5131
  else {
5104
5132
  const zone = env.model.getters.getSelectedZones()[0];
@@ -5126,8 +5154,8 @@
5126
5154
  let last;
5127
5155
  const activeCols = env.model.getters.getActiveCols();
5128
5156
  if (activeCols.size !== 0) {
5129
- first = Math.min(...activeCols);
5130
- last = Math.max(...activeCols);
5157
+ first = largeMin([...activeCols]);
5158
+ last = largeMax([...activeCols]);
5131
5159
  }
5132
5160
  else {
5133
5161
  const zone = env.model.getters.getSelectedZones()[0];
@@ -5155,8 +5183,8 @@
5155
5183
  let last;
5156
5184
  const activesRows = env.model.getters.getActiveRows();
5157
5185
  if (activesRows.size !== 0) {
5158
- first = Math.min(...activesRows);
5159
- last = Math.max(...activesRows);
5186
+ first = largeMin([...activesRows]);
5187
+ last = largeMax([...activesRows]);
5160
5188
  }
5161
5189
  else {
5162
5190
  const zone = env.model.getters.getSelectedZones()[0];
@@ -5197,8 +5225,8 @@
5197
5225
  let last;
5198
5226
  const activeCols = env.model.getters.getActiveCols();
5199
5227
  if (activeCols.size !== 0) {
5200
- first = Math.min(...activeCols);
5201
- last = Math.max(...activeCols);
5228
+ first = largeMin([...activeCols]);
5229
+ last = largeMax([...activeCols]);
5202
5230
  }
5203
5231
  else {
5204
5232
  const zone = env.model.getters.getSelectedZones()[0];
@@ -5267,7 +5295,7 @@
5267
5295
  let row;
5268
5296
  let quantity;
5269
5297
  if (activeRows.size) {
5270
- row = Math.min(...activeRows);
5298
+ row = largeMin([...activeRows]);
5271
5299
  quantity = activeRows.size;
5272
5300
  }
5273
5301
  else {
@@ -5299,7 +5327,7 @@
5299
5327
  let row;
5300
5328
  let quantity;
5301
5329
  if (activeRows.size) {
5302
- row = Math.max(...activeRows);
5330
+ row = largeMax([...activeRows]);
5303
5331
  quantity = activeRows.size;
5304
5332
  }
5305
5333
  else {
@@ -5340,7 +5368,7 @@
5340
5368
  let column;
5341
5369
  let quantity;
5342
5370
  if (activeCols.size) {
5343
- column = Math.min(...activeCols);
5371
+ column = largeMin([...activeCols]);
5344
5372
  quantity = activeCols.size;
5345
5373
  }
5346
5374
  else {
@@ -5374,7 +5402,7 @@
5374
5402
  let column;
5375
5403
  let quantity;
5376
5404
  if (activeCols.size) {
5377
- column = Math.max(...activeCols);
5405
+ column = largeMax([...activeCols]);
5378
5406
  quantity = activeCols.size;
5379
5407
  }
5380
5408
  else {
@@ -7930,7 +7958,7 @@
7930
7958
  return undefined;
7931
7959
  }
7932
7960
  const labelsTimestamps = labelDates.map((date) => date.getTime());
7933
- const period = Math.max(...labelsTimestamps) - Math.min(...labelsTimestamps);
7961
+ const period = largeMax(labelsTimestamps) - largeMin(labelsTimestamps);
7934
7962
  const minUnit = getFormatMinDisplayUnit(format);
7935
7963
  if (UNIT_LENGTH.second >= UNIT_LENGTH[minUnit] && Milliseconds.inSeconds(period) < 180) {
7936
7964
  return "second";
@@ -8346,7 +8374,7 @@
8346
8374
  }
8347
8375
  function getPieColors(colors, dataSetsValues) {
8348
8376
  const pieColors = [];
8349
- const maxLength = Math.max(...dataSetsValues.map((ds) => ds.data.length));
8377
+ const maxLength = largeMax(dataSetsValues.map((ds) => ds.data.length));
8350
8378
  for (let i = 0; i <= maxLength; i++) {
8351
8379
  pieColors.push(colors.next());
8352
8380
  }
@@ -20434,6 +20462,10 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
20434
20462
  if (!this.isKeyStillDown) {
20435
20463
  this.processContent();
20436
20464
  }
20465
+ // Required because typing '=SUM' and double-clicking another cell leaves ShowProvider and ShowDescription true
20466
+ if (this.env.model.getters.getEditionMode() === "inactive") {
20467
+ this.processTokenAtCursor();
20468
+ }
20437
20469
  });
20438
20470
  }
20439
20471
  // ---------------------------------------------------------------------------
@@ -20632,6 +20664,12 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
20632
20664
  onCompleted(text) {
20633
20665
  text && this.autoComplete(text);
20634
20666
  }
20667
+ onContextMenu(ev) {
20668
+ var _a, _b;
20669
+ if (this.env.model.getters.getEditionMode() === "inactive") {
20670
+ (_b = (_a = this.props).onInputContextMenu) === null || _b === void 0 ? void 0 : _b.call(_a, ev);
20671
+ }
20672
+ }
20635
20673
  // ---------------------------------------------------------------------------
20636
20674
  // Private
20637
20675
  // ---------------------------------------------------------------------------
@@ -20865,6 +20903,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
20865
20903
  isDefaultFocus: true,
20866
20904
  onComposerContentFocused: this.props.onComposerContentFocused,
20867
20905
  onComposerCellFocused: this.props.onComposerCellFocused,
20906
+ onInputContextMenu: this.props.onInputContextMenu,
20868
20907
  };
20869
20908
  }
20870
20909
  get containerStyle() {
@@ -23015,8 +23054,8 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
23015
23054
  else if (this.env.model.getters.getActiveRows().has(row)) {
23016
23055
  type = "ROW";
23017
23056
  }
23018
- const { x, y, width, height } = this.env.model.getters.getVisibleRect(lastZone);
23019
- this.toggleContextMenu(type, x + width, y + height);
23057
+ const { x, y, width } = this.env.model.getters.getVisibleRect(lastZone);
23058
+ this.toggleContextMenu(type, this.canvasPosition.x + x + width, this.canvasPosition.y + y);
23020
23059
  }
23021
23060
  onCellRightClicked(col, row, { x, y }) {
23022
23061
  const zones = this.env.model.getters.getSelectedZones();
@@ -25182,7 +25221,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
25182
25221
  function getSheetDims(sheet) {
25183
25222
  const dims = [0, 0];
25184
25223
  for (let row of sheet.rows) {
25185
- dims[0] = Math.max(dims[0], ...row.cells.map((cell) => toCartesian(cell.xc).col));
25224
+ dims[0] = Math.max(dims[0], largeMax(row.cells.map((cell) => toCartesian(cell.xc).col)));
25186
25225
  dims[1] = Math.max(dims[1], row.index);
25187
25226
  }
25188
25227
  dims[0] = Math.max(dims[0], EXCEL_IMPORT_DEFAULT_NUMBER_OF_COLS);
@@ -29219,7 +29258,17 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
29219
29258
  }
29220
29259
  }
29221
29260
  exportForExcel(data) {
29222
- this.export(data);
29261
+ for (const sheet of data.sheets) {
29262
+ for (const filterTable of this.getFilterTables(sheet.id)) {
29263
+ if (zoneToDimension(filterTable.zone).height === 1) {
29264
+ continue;
29265
+ }
29266
+ sheet.filterTables.push({
29267
+ range: zoneToXc(filterTable.zone),
29268
+ filters: [],
29269
+ });
29270
+ }
29271
+ }
29223
29272
  }
29224
29273
  }
29225
29274
  FiltersPlugin.getters = [
@@ -29275,7 +29324,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
29275
29324
  for (let headerIndex of [...cmd.elements].sort((a, b) => b - a)) {
29276
29325
  sizes.splice(headerIndex, 1);
29277
29326
  }
29278
- const min = Math.min(...cmd.elements);
29327
+ const min = largeMin(cmd.elements);
29279
29328
  sizes = sizes.map((size, row) => {
29280
29329
  if (cmd.dimension === "ROW" && row >= min) {
29281
29330
  // invalidate sizes
@@ -29503,7 +29552,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
29503
29552
  if (hiddenElements.size >= elements) {
29504
29553
  return 66 /* CommandResult.TooManyHiddenElements */;
29505
29554
  }
29506
- else if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
29555
+ else if (largeMin(cmd.elements) < 0 || largeMax(cmd.elements) > elements) {
29507
29556
  return 86 /* CommandResult.InvalidHeaderIndex */;
29508
29557
  }
29509
29558
  else {
@@ -30178,7 +30227,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
30178
30227
  const elements = cmd.dimension === "COL"
30179
30228
  ? this.getNumberCols(cmd.sheetId)
30180
30229
  : this.getNumberRows(cmd.sheetId);
30181
- if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
30230
+ if (largeMin(cmd.elements) < 0 || largeMax(cmd.elements) > elements) {
30182
30231
  return 86 /* CommandResult.InvalidHeaderIndex */;
30183
30232
  }
30184
30233
  else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
@@ -31551,13 +31600,13 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
31551
31600
  const cells = this.getters.getCellsInZone(sheet.id, zone);
31552
31601
  const cellPositions = range(end, -1, -1);
31553
31602
  const invalidCells = cellPositions.filter((position) => { var _a; return cells[position] && !((_a = cells[position]) === null || _a === void 0 ? void 0 : _a.isAutoSummable); });
31554
- const maxValidPosition = Math.max(...invalidCells);
31603
+ const maxValidPosition = largeMax(invalidCells);
31555
31604
  const numberSequences = groupConsecutive(cellPositions.filter((position) => this.isNumber(cells[position])));
31556
31605
  const firstSequence = numberSequences[0] || [];
31557
- if (Math.max(...firstSequence) < maxValidPosition) {
31606
+ if (largeMax(firstSequence) < maxValidPosition) {
31558
31607
  return Infinity;
31559
31608
  }
31560
- return Math.min(...firstSequence);
31609
+ return largeMin(firstSequence);
31561
31610
  }
31562
31611
  shouldFindData(sheetId, zone) {
31563
31612
  return this.getters.isEmpty(sheetId, zone) || this.getters.isSingleCellOrMerge(sheetId, zone);
@@ -33240,13 +33289,13 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
33240
33289
  .filter(this.isCellValueNumber);
33241
33290
  switch (threshold.type) {
33242
33291
  case "value":
33243
- const result = functionName === "max" ? Math.max(...rangeValues) : Math.min(...rangeValues);
33292
+ const result = functionName === "max" ? largeMax(rangeValues) : largeMin(rangeValues);
33244
33293
  return result;
33245
33294
  case "number":
33246
33295
  return Number(threshold.value);
33247
33296
  case "percentage":
33248
- const min = Math.min(...rangeValues);
33249
- const max = Math.max(...rangeValues);
33297
+ const min = largeMin(rangeValues);
33298
+ const max = largeMax(rangeValues);
33250
33299
  const delta = max - min;
33251
33300
  return min + (delta * Number(threshold.value)) / 100;
33252
33301
  case "percentile":
@@ -37983,7 +38032,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37983
38032
  getColMaxWidth(sheetId, index) {
37984
38033
  const cellsPositions = positions(this.getters.getColsZone(sheetId, index, index));
37985
38034
  const sizes = cellsPositions.map((position) => this.getCellWidth(sheetId, position));
37986
- return Math.max(0, ...sizes);
38035
+ return Math.max(0, largeMax(sizes));
37987
38036
  }
37988
38037
  splitWordToSpecificWidth(ctx, word, width, style) {
37989
38038
  const wordWidth = computeTextWidth(ctx, word, style);
@@ -40334,8 +40383,8 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
40334
40383
  let newRange = range;
40335
40384
  let changeType = "NONE";
40336
40385
  for (let group of groups) {
40337
- const min = Math.min(...group);
40338
- const max = Math.max(...group);
40386
+ const min = largeMin(group);
40387
+ const max = largeMax(group);
40339
40388
  if (range.zone[start] <= min && min <= range.zone[end]) {
40340
40389
  const toRemove = Math.min(range.zone[end], max) - min + 1;
40341
40390
  changeType = "RESIZE";
@@ -41593,7 +41642,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
41593
41642
  }
41594
41643
  function addDoughnutChart(chart, chartSheetIndex, data, { holeSize } = { holeSize: 50 }) {
41595
41644
  const colors = new ChartColors();
41596
- const maxLength = Math.max(...chart.dataSets.map((ds) => getRangeSize(ds.range, chartSheetIndex, data)));
41645
+ const maxLength = largeMax(chart.dataSets.map((ds) => getRangeSize(ds.range, chartSheetIndex, data)));
41597
41646
  const doughnutColors = range(0, maxLength).map(() => toXlsxHexColor(colors.next()));
41598
41647
  const dataSetsNodes = [];
41599
41648
  for (const [dsIndex, dataset] of Object.entries(chart.dataSets).reverse()) {
@@ -43290,9 +43339,9 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
43290
43339
  Object.defineProperty(exports, '__esModule', { value: true });
43291
43340
 
43292
43341
 
43293
- __info__.version = '16.0.35';
43294
- __info__.date = '2024-03-15T10:57:14.362Z';
43295
- __info__.hash = '5cba28b';
43342
+ __info__.version = '16.0.37';
43343
+ __info__.date = '2024-04-05T13:58:08.848Z';
43344
+ __info__.hash = 'e95827b';
43296
43345
 
43297
43346
 
43298
43347
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);