@odoo/o-spreadsheet 16.0.36 → 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
  }
@@ -20636,6 +20664,12 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
20636
20664
  onCompleted(text) {
20637
20665
  text && this.autoComplete(text);
20638
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
+ }
20639
20673
  // ---------------------------------------------------------------------------
20640
20674
  // Private
20641
20675
  // ---------------------------------------------------------------------------
@@ -20869,6 +20903,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
20869
20903
  isDefaultFocus: true,
20870
20904
  onComposerContentFocused: this.props.onComposerContentFocused,
20871
20905
  onComposerCellFocused: this.props.onComposerCellFocused,
20906
+ onInputContextMenu: this.props.onInputContextMenu,
20872
20907
  };
20873
20908
  }
20874
20909
  get containerStyle() {
@@ -23019,8 +23054,8 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
23019
23054
  else if (this.env.model.getters.getActiveRows().has(row)) {
23020
23055
  type = "ROW";
23021
23056
  }
23022
- const { x, y, width, height } = this.env.model.getters.getVisibleRect(lastZone);
23023
- 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);
23024
23059
  }
23025
23060
  onCellRightClicked(col, row, { x, y }) {
23026
23061
  const zones = this.env.model.getters.getSelectedZones();
@@ -25186,7 +25221,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
25186
25221
  function getSheetDims(sheet) {
25187
25222
  const dims = [0, 0];
25188
25223
  for (let row of sheet.rows) {
25189
- 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)));
25190
25225
  dims[1] = Math.max(dims[1], row.index);
25191
25226
  }
25192
25227
  dims[0] = Math.max(dims[0], EXCEL_IMPORT_DEFAULT_NUMBER_OF_COLS);
@@ -29223,7 +29258,17 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
29223
29258
  }
29224
29259
  }
29225
29260
  exportForExcel(data) {
29226
- 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
+ }
29227
29272
  }
29228
29273
  }
29229
29274
  FiltersPlugin.getters = [
@@ -29279,7 +29324,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
29279
29324
  for (let headerIndex of [...cmd.elements].sort((a, b) => b - a)) {
29280
29325
  sizes.splice(headerIndex, 1);
29281
29326
  }
29282
- const min = Math.min(...cmd.elements);
29327
+ const min = largeMin(cmd.elements);
29283
29328
  sizes = sizes.map((size, row) => {
29284
29329
  if (cmd.dimension === "ROW" && row >= min) {
29285
29330
  // invalidate sizes
@@ -29507,7 +29552,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
29507
29552
  if (hiddenElements.size >= elements) {
29508
29553
  return 66 /* CommandResult.TooManyHiddenElements */;
29509
29554
  }
29510
- else if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
29555
+ else if (largeMin(cmd.elements) < 0 || largeMax(cmd.elements) > elements) {
29511
29556
  return 86 /* CommandResult.InvalidHeaderIndex */;
29512
29557
  }
29513
29558
  else {
@@ -30182,7 +30227,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
30182
30227
  const elements = cmd.dimension === "COL"
30183
30228
  ? this.getNumberCols(cmd.sheetId)
30184
30229
  : this.getNumberRows(cmd.sheetId);
30185
- if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
30230
+ if (largeMin(cmd.elements) < 0 || largeMax(cmd.elements) > elements) {
30186
30231
  return 86 /* CommandResult.InvalidHeaderIndex */;
30187
30232
  }
30188
30233
  else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
@@ -31555,13 +31600,13 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
31555
31600
  const cells = this.getters.getCellsInZone(sheet.id, zone);
31556
31601
  const cellPositions = range(end, -1, -1);
31557
31602
  const invalidCells = cellPositions.filter((position) => { var _a; return cells[position] && !((_a = cells[position]) === null || _a === void 0 ? void 0 : _a.isAutoSummable); });
31558
- const maxValidPosition = Math.max(...invalidCells);
31603
+ const maxValidPosition = largeMax(invalidCells);
31559
31604
  const numberSequences = groupConsecutive(cellPositions.filter((position) => this.isNumber(cells[position])));
31560
31605
  const firstSequence = numberSequences[0] || [];
31561
- if (Math.max(...firstSequence) < maxValidPosition) {
31606
+ if (largeMax(firstSequence) < maxValidPosition) {
31562
31607
  return Infinity;
31563
31608
  }
31564
- return Math.min(...firstSequence);
31609
+ return largeMin(firstSequence);
31565
31610
  }
31566
31611
  shouldFindData(sheetId, zone) {
31567
31612
  return this.getters.isEmpty(sheetId, zone) || this.getters.isSingleCellOrMerge(sheetId, zone);
@@ -33244,13 +33289,13 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
33244
33289
  .filter(this.isCellValueNumber);
33245
33290
  switch (threshold.type) {
33246
33291
  case "value":
33247
- const result = functionName === "max" ? Math.max(...rangeValues) : Math.min(...rangeValues);
33292
+ const result = functionName === "max" ? largeMax(rangeValues) : largeMin(rangeValues);
33248
33293
  return result;
33249
33294
  case "number":
33250
33295
  return Number(threshold.value);
33251
33296
  case "percentage":
33252
- const min = Math.min(...rangeValues);
33253
- const max = Math.max(...rangeValues);
33297
+ const min = largeMin(rangeValues);
33298
+ const max = largeMax(rangeValues);
33254
33299
  const delta = max - min;
33255
33300
  return min + (delta * Number(threshold.value)) / 100;
33256
33301
  case "percentile":
@@ -37987,7 +38032,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37987
38032
  getColMaxWidth(sheetId, index) {
37988
38033
  const cellsPositions = positions(this.getters.getColsZone(sheetId, index, index));
37989
38034
  const sizes = cellsPositions.map((position) => this.getCellWidth(sheetId, position));
37990
- return Math.max(0, ...sizes);
38035
+ return Math.max(0, largeMax(sizes));
37991
38036
  }
37992
38037
  splitWordToSpecificWidth(ctx, word, width, style) {
37993
38038
  const wordWidth = computeTextWidth(ctx, word, style);
@@ -40338,8 +40383,8 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
40338
40383
  let newRange = range;
40339
40384
  let changeType = "NONE";
40340
40385
  for (let group of groups) {
40341
- const min = Math.min(...group);
40342
- const max = Math.max(...group);
40386
+ const min = largeMin(group);
40387
+ const max = largeMax(group);
40343
40388
  if (range.zone[start] <= min && min <= range.zone[end]) {
40344
40389
  const toRemove = Math.min(range.zone[end], max) - min + 1;
40345
40390
  changeType = "RESIZE";
@@ -41597,7 +41642,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
41597
41642
  }
41598
41643
  function addDoughnutChart(chart, chartSheetIndex, data, { holeSize } = { holeSize: 50 }) {
41599
41644
  const colors = new ChartColors();
41600
- 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)));
41601
41646
  const doughnutColors = range(0, maxLength).map(() => toXlsxHexColor(colors.next()));
41602
41647
  const dataSetsNodes = [];
41603
41648
  for (const [dsIndex, dataset] of Object.entries(chart.dataSets).reverse()) {
@@ -43294,9 +43339,9 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
43294
43339
  Object.defineProperty(exports, '__esModule', { value: true });
43295
43340
 
43296
43341
 
43297
- __info__.version = '16.0.36';
43298
- __info__.date = '2024-03-25T09:36:40.811Z';
43299
- __info__.hash = '2c2117b';
43342
+ __info__.version = '16.0.37';
43343
+ __info__.date = '2024-04-05T13:58:08.848Z';
43344
+ __info__.hash = 'e95827b';
43300
43345
 
43301
43346
 
43302
43347
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);