@odoo/o-spreadsheet 16.1.18 → 16.1.20

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.
@@ -4827,6 +4827,7 @@
4827
4827
  this.labelsAsText = definition.labelsAsText;
4828
4828
  this.stacked = definition.stacked;
4829
4829
  this.aggregated = definition.aggregated;
4830
+ this.cumulative = definition.cumulative;
4830
4831
  }
4831
4832
  static validateChartDefinition(validator, definition) {
4832
4833
  return validator.checkValidations(definition, checkDataset, checkLabelRange);
@@ -4847,6 +4848,7 @@
4847
4848
  labelRange: context.auxiliaryRange || undefined,
4848
4849
  stacked: false,
4849
4850
  aggregated: false,
4851
+ cumulative: false,
4850
4852
  };
4851
4853
  }
4852
4854
  getDefinition() {
@@ -4867,6 +4869,7 @@
4867
4869
  labelsAsText: this.labelsAsText,
4868
4870
  stacked: this.stacked,
4869
4871
  aggregated: this.aggregated,
4872
+ cumulative: this.cumulative,
4870
4873
  };
4871
4874
  }
4872
4875
  getContextCreation() {
@@ -5060,6 +5063,16 @@
5060
5063
  if (chart.stacked) {
5061
5064
  backgroundRGBA.a = LINE_FILL_TRANSPARENCY;
5062
5065
  }
5066
+ if (chart.cumulative) {
5067
+ let accumulator = 0;
5068
+ data = data.map((value) => {
5069
+ if (!isNaN(value)) {
5070
+ accumulator += parseFloat(value);
5071
+ return accumulator;
5072
+ }
5073
+ return value;
5074
+ });
5075
+ }
5063
5076
  const backgroundColor = rgbaToHex(backgroundRGBA);
5064
5077
  const dataset = {
5065
5078
  label,
@@ -6401,6 +6414,7 @@
6401
6414
  labelsAsText: false,
6402
6415
  stacked: false,
6403
6416
  aggregated: false,
6417
+ cumulative: false,
6404
6418
  labelRange: labelRangeXc,
6405
6419
  type: "line",
6406
6420
  dataSetsHaveTitle,
@@ -6754,6 +6768,13 @@
6754
6768
  elements: rows,
6755
6769
  });
6756
6770
  };
6771
+ const CAN_REMOVE_COLUMNS_ROWS = (dimension, env) => {
6772
+ const sheetId = env.model.getters.getActiveSheetId();
6773
+ const selectedElements = env.model.getters.getElementsFromSelection(dimension);
6774
+ const includesAllVisibleHeaders = env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, dimension, selectedElements);
6775
+ const includesAllNonFrozenHeaders = env.model.getters.checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, selectedElements);
6776
+ return !includesAllVisibleHeaders && !includesAllNonFrozenHeaders;
6777
+ };
6757
6778
  const REMOVE_COLUMNS_NAME = (env) => {
6758
6779
  if (env.model.getters.getSelectedZones().length > 1) {
6759
6780
  return _lt("Delete columns");
@@ -7344,11 +7365,7 @@
7344
7365
  name: REMOVE_COLUMNS_NAME,
7345
7366
  sequence: 90,
7346
7367
  action: REMOVE_COLUMNS_ACTION,
7347
- isVisible: (env) => {
7348
- const sheetId = env.model.getters.getActiveSheetId();
7349
- const selectedCols = env.model.getters.getElementsFromSelection("COL");
7350
- return env.model.getters.canRemoveHeaders(sheetId, "COL", selectedCols);
7351
- },
7368
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
7352
7369
  })
7353
7370
  .add("clear_column", {
7354
7371
  name: DELETE_CONTENT_COLUMNS_NAME,
@@ -7362,7 +7379,7 @@
7362
7379
  isVisible: (env) => {
7363
7380
  const sheetId = env.model.getters.getActiveSheetId();
7364
7381
  const selectedCols = env.model.getters.getElementsFromSelection("COL");
7365
- return env.model.getters.canRemoveHeaders(sheetId, "COL", selectedCols);
7382
+ return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "COL", selectedCols);
7366
7383
  },
7367
7384
  separator: true,
7368
7385
  })
@@ -7436,11 +7453,7 @@
7436
7453
  name: REMOVE_ROWS_NAME,
7437
7454
  sequence: 70,
7438
7455
  action: REMOVE_ROWS_ACTION,
7439
- isVisible: (env) => {
7440
- const sheetId = env.model.getters.getActiveSheetId();
7441
- const selectedRows = env.model.getters.getElementsFromSelection("ROW");
7442
- return env.model.getters.canRemoveHeaders(sheetId, "ROW", selectedRows);
7443
- },
7456
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
7444
7457
  })
7445
7458
  .add("clear_row", {
7446
7459
  name: DELETE_CONTENT_ROWS_NAME,
@@ -7454,7 +7467,7 @@
7454
7467
  isVisible: (env) => {
7455
7468
  const sheetId = env.model.getters.getActiveSheetId();
7456
7469
  const selectedRows = env.model.getters.getElementsFromSelection("ROW");
7457
- return env.model.getters.canRemoveHeaders(sheetId, "ROW", selectedRows);
7470
+ return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "ROW", selectedRows);
7458
7471
  },
7459
7472
  separator: true,
7460
7473
  })
@@ -7478,34 +7491,25 @@
7478
7491
  });
7479
7492
 
7480
7493
  function startDnd(onMouseMove, onMouseUp, onMouseDown = () => { }) {
7481
- const _onMouseDown = (ev) => {
7482
- ev.preventDefault();
7483
- onMouseDown(ev);
7484
- };
7485
- const _onMouseMove = (ev) => {
7486
- ev.preventDefault();
7487
- onMouseMove(ev);
7488
- };
7489
7494
  const _onMouseUp = (ev) => {
7490
- ev.preventDefault();
7491
7495
  onMouseUp(ev);
7492
- window.removeEventListener("mousedown", _onMouseDown);
7496
+ window.removeEventListener("mousedown", onMouseDown);
7493
7497
  window.removeEventListener("mouseup", _onMouseUp);
7494
7498
  window.removeEventListener("dragstart", _onDragStart);
7495
- window.removeEventListener("mousemove", _onMouseMove);
7496
- window.removeEventListener("wheel", _onMouseMove);
7499
+ window.removeEventListener("mousemove", onMouseMove);
7500
+ window.removeEventListener("wheel", onMouseMove);
7497
7501
  };
7498
7502
  function _onDragStart(ev) {
7499
7503
  ev.preventDefault();
7500
7504
  }
7501
- window.addEventListener("mousedown", _onMouseDown);
7505
+ window.addEventListener("mousedown", onMouseDown);
7502
7506
  window.addEventListener("mouseup", _onMouseUp);
7503
7507
  window.addEventListener("dragstart", _onDragStart);
7504
- window.addEventListener("mousemove", _onMouseMove);
7508
+ window.addEventListener("mousemove", onMouseMove);
7505
7509
  // mouse wheel on window is by default a passive event.
7506
7510
  // preventDefault() is not allowed in passive event handler.
7507
7511
  // https://chromestatus.com/feature/6662647093133312
7508
- window.addEventListener("wheel", _onMouseMove, { passive: false });
7512
+ window.addEventListener("wheel", onMouseMove, { passive: false });
7509
7513
  }
7510
7514
  /**
7511
7515
  * Function to be used during a mousedown event, this function allows to
@@ -19340,11 +19344,13 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
19340
19344
  name: REMOVE_ROWS_NAME,
19341
19345
  sequence: 80,
19342
19346
  action: REMOVE_ROWS_ACTION,
19347
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
19343
19348
  })
19344
19349
  .addChild("edit_delete_column", ["edit"], {
19345
19350
  name: REMOVE_COLUMNS_NAME,
19346
19351
  sequence: 90,
19347
19352
  action: REMOVE_COLUMNS_ACTION,
19353
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
19348
19354
  })
19349
19355
  .addChild("edit_delete_cell_shift_up", ["edit"], {
19350
19356
  name: _lt("Delete cell and shift up"),
@@ -20524,6 +20530,11 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
20524
20530
  aggregated: ev.target.checked,
20525
20531
  });
20526
20532
  }
20533
+ onUpdateCumulative(ev) {
20534
+ this.props.updateChart(this.props.figureId, {
20535
+ cumulative: ev.target.checked,
20536
+ });
20537
+ }
20527
20538
  }
20528
20539
  LineConfigPanel.template = "o-spreadsheet-LineConfigPanel";
20529
20540
 
@@ -23855,7 +23866,8 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
23855
23866
  }
23856
23867
  let prevCol = col;
23857
23868
  let prevRow = row;
23858
- const onMouseMove = (col, row) => {
23869
+ const onMouseMove = (col, row, ev) => {
23870
+ ev.preventDefault();
23859
23871
  if ((col !== prevCol && col != -1) || (row !== prevRow && row != -1)) {
23860
23872
  prevCol = col === -1 ? prevCol : col;
23861
23873
  prevRow = row === -1 ? prevRow : row;
@@ -25493,6 +25505,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
25493
25505
  legendPosition: chartData.legendPosition,
25494
25506
  stacked: chartData.stacked || false,
25495
25507
  aggregated: false,
25508
+ cumulative: chartData.cumulative || false,
25496
25509
  labelsAsText: false,
25497
25510
  };
25498
25511
  }
@@ -30057,7 +30070,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
30057
30070
  if (!this.getters.tryGetSheet(cmd.sheetId)) {
30058
30071
  return 27 /* CommandResult.InvalidSheetId */;
30059
30072
  }
30060
- if (!this.canRemoveHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
30073
+ if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
30061
30074
  return 8 /* CommandResult.NotEnoughElements */;
30062
30075
  }
30063
30076
  return 0 /* CommandResult.Success */;
@@ -30107,9 +30120,9 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
30107
30120
  }
30108
30121
  return;
30109
30122
  }
30110
- canRemoveHeaders(sheetId, dimension, elements) {
30123
+ checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
30111
30124
  const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
30112
- return !includesAll(elements, visibleHeaders);
30125
+ return includesAll(elements, visibleHeaders);
30113
30126
  }
30114
30127
  isRowHiddenByUser(sheetId, index) {
30115
30128
  return this.hiddenHeaders[sheetId].ROW[index];
@@ -30205,7 +30218,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
30205
30218
  }
30206
30219
  }
30207
30220
  HeaderVisibilityPlugin.getters = [
30208
- "canRemoveHeaders",
30221
+ "checkElementsIncludeAllVisibleHeaders",
30209
30222
  "getHiddenColsGroups",
30210
30223
  "getHiddenRowsGroups",
30211
30224
  "isRowHiddenByUser",
@@ -31233,6 +31246,9 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
31233
31246
  if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
31234
31247
  return 86 /* CommandResult.InvalidHeaderIndex */;
31235
31248
  }
31249
+ else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
31250
+ return 8 /* CommandResult.NotEnoughElements */;
31251
+ }
31236
31252
  else {
31237
31253
  return 0 /* CommandResult.Success */;
31238
31254
  }
@@ -31519,6 +31535,20 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
31519
31535
  }
31520
31536
  this.history.update("sheets", sheetId, "panes", panes);
31521
31537
  }
31538
+ /**
31539
+ * Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
31540
+ * This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
31541
+ */
31542
+ checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, elements) {
31543
+ const paneDivisions = this.getters.getPaneDivisions(sheetId);
31544
+ const startIndex = dimension === "ROW" ? paneDivisions.ySplit : paneDivisions.xSplit;
31545
+ const endIndex = this.getters.getNumberHeaders(sheetId, dimension);
31546
+ if (!startIndex) {
31547
+ return false;
31548
+ }
31549
+ const indicesToCheck = range(startIndex, endIndex);
31550
+ return includesAll(elements, indicesToCheck);
31551
+ }
31522
31552
  // ---------------------------------------------------------------------------
31523
31553
  // Row/Col manipulation
31524
31554
  // ---------------------------------------------------------------------------
@@ -32051,6 +32081,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
32051
32081
  "getSheetSize",
32052
32082
  "getSheetZone",
32053
32083
  "getPaneDivisions",
32084
+ "checkElementsIncludeAllNonFrozenHeaders",
32054
32085
  ];
32055
32086
 
32056
32087
  /**
@@ -33469,6 +33500,9 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
33469
33500
  const sheetId = this.sheetId;
33470
33501
  this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
33471
33502
  this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
33503
+ if (this.left === -1) {
33504
+ this.left = this.boundaries.left;
33505
+ }
33472
33506
  if (this.right === -1) {
33473
33507
  this.right = this.getters.getNumberCols(sheetId) - 1;
33474
33508
  }
@@ -33482,6 +33516,9 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
33482
33516
  const sheetId = this.sheetId;
33483
33517
  this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
33484
33518
  this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
33519
+ if (this.top === -1) {
33520
+ this.top = this.boundaries.top;
33521
+ }
33485
33522
  if (this.bottom === -1) {
33486
33523
  this.bottom = this.getters.getNumberRows(sheetId) - 1;
33487
33524
  }
@@ -44312,9 +44349,9 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
44312
44349
  Object.defineProperty(exports, '__esModule', { value: true });
44313
44350
 
44314
44351
 
44315
- __info__.version = '16.1.18';
44316
- __info__.date = '2023-08-09T09:09:27.826Z';
44317
- __info__.hash = '2e594e3';
44352
+ __info__.version = '16.1.20';
44353
+ __info__.date = '2023-09-12T11:43:40.624Z';
44354
+ __info__.hash = '7d7b841';
44318
44355
 
44319
44356
 
44320
44357
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);