@odoo/o-spreadsheet 16.3.8 → 16.3.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.
@@ -7463,6 +7463,7 @@
7463
7463
  aggregated;
7464
7464
  type = "line";
7465
7465
  dataSetsHaveTitle;
7466
+ cumulative;
7466
7467
  constructor(definition, sheetId, getters) {
7467
7468
  super(definition, sheetId, getters);
7468
7469
  this.dataSets = createDataSets(this.getters, definition.dataSets, sheetId, definition.dataSetsHaveTitle);
@@ -7474,6 +7475,7 @@
7474
7475
  this.stacked = definition.stacked;
7475
7476
  this.aggregated = definition.aggregated;
7476
7477
  this.dataSetsHaveTitle = definition.dataSetsHaveTitle;
7478
+ this.cumulative = definition.cumulative;
7477
7479
  }
7478
7480
  static validateChartDefinition(validator, definition) {
7479
7481
  return validator.checkValidations(definition, checkDataset, checkLabelRange);
@@ -7494,6 +7496,7 @@
7494
7496
  labelRange: context.auxiliaryRange || undefined,
7495
7497
  stacked: false,
7496
7498
  aggregated: false,
7499
+ cumulative: false,
7497
7500
  };
7498
7501
  }
7499
7502
  getDefinition() {
@@ -7514,6 +7517,7 @@
7514
7517
  labelsAsText: this.labelsAsText,
7515
7518
  stacked: this.stacked,
7516
7519
  aggregated: this.aggregated,
7520
+ cumulative: this.cumulative,
7517
7521
  };
7518
7522
  }
7519
7523
  getContextCreation() {
@@ -7722,6 +7726,16 @@
7722
7726
  if (chart.stacked) {
7723
7727
  backgroundRGBA.a = LINE_FILL_TRANSPARENCY;
7724
7728
  }
7729
+ if (chart.cumulative) {
7730
+ let accumulator = 0;
7731
+ data = data.map((value) => {
7732
+ if (!isNaN(value)) {
7733
+ accumulator += parseFloat(value);
7734
+ return accumulator;
7735
+ }
7736
+ return value;
7737
+ });
7738
+ }
7725
7739
  const backgroundColor = rgbaToHex(backgroundRGBA);
7726
7740
  const dataset = {
7727
7741
  label,
@@ -8543,6 +8557,7 @@
8543
8557
  labelsAsText: false,
8544
8558
  stacked: false,
8545
8559
  aggregated: false,
8560
+ cumulative: false,
8546
8561
  labelRange: labelRangeXc,
8547
8562
  type: "line",
8548
8563
  dataSetsHaveTitle,
@@ -8905,6 +8920,13 @@
8905
8920
  elements: rows,
8906
8921
  });
8907
8922
  };
8923
+ const CAN_REMOVE_COLUMNS_ROWS = (dimension, env) => {
8924
+ const sheetId = env.model.getters.getActiveSheetId();
8925
+ const selectedElements = env.model.getters.getElementsFromSelection(dimension);
8926
+ const includesAllVisibleHeaders = env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, dimension, selectedElements);
8927
+ const includesAllNonFrozenHeaders = env.model.getters.checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, selectedElements);
8928
+ return !includesAllVisibleHeaders && !includesAllNonFrozenHeaders;
8929
+ };
8908
8930
  const REMOVE_COLUMNS_NAME = (env) => {
8909
8931
  if (env.model.getters.getSelectedZones().length > 1) {
8910
8932
  return _lt("Delete columns");
@@ -8929,7 +8951,7 @@
8929
8951
  const NOT_ALL_VISIBLE_ROWS_SELECTED = (env) => {
8930
8952
  const sheetId = env.model.getters.getActiveSheetId();
8931
8953
  const selectedRows = env.model.getters.getElementsFromSelection("ROW");
8932
- return env.model.getters.canRemoveHeaders(sheetId, "ROW", selectedRows);
8954
+ return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "ROW", selectedRows);
8933
8955
  };
8934
8956
  const REMOVE_COLUMNS_ACTION = (env) => {
8935
8957
  let columns = [...env.model.getters.getActiveCols()];
@@ -8948,7 +8970,7 @@
8948
8970
  const NOT_ALL_VISIBLE_COLS_SELECTED = (env) => {
8949
8971
  const sheetId = env.model.getters.getActiveSheetId();
8950
8972
  const selectedCols = env.model.getters.getElementsFromSelection("COL");
8951
- return env.model.getters.canRemoveHeaders(sheetId, "COL", selectedCols);
8973
+ return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "COL", selectedCols);
8952
8974
  };
8953
8975
  const INSERT_CELL_SHIFT_DOWN = (env) => {
8954
8976
  const zone = env.model.getters.getSelectedZone();
@@ -9405,7 +9427,7 @@
9405
9427
  const deleteRows = {
9406
9428
  name: REMOVE_ROWS_NAME,
9407
9429
  execute: REMOVE_ROWS_ACTION,
9408
- isVisible: NOT_ALL_VISIBLE_ROWS_SELECTED,
9430
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
9409
9431
  };
9410
9432
  const deleteRow = {
9411
9433
  ...deleteRows,
@@ -9418,7 +9440,7 @@
9418
9440
  const deleteCols = {
9419
9441
  name: REMOVE_COLUMNS_NAME,
9420
9442
  execute: REMOVE_COLUMNS_ACTION,
9421
- isVisible: NOT_ALL_VISIBLE_COLS_SELECTED,
9443
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
9422
9444
  };
9423
9445
  const deleteCol = {
9424
9446
  ...deleteCols,
@@ -18466,6 +18488,11 @@
18466
18488
  aggregated: ev.target.checked,
18467
18489
  });
18468
18490
  }
18491
+ onUpdateCumulative(ev) {
18492
+ this.props.updateChart(this.props.figureId, {
18493
+ cumulative: ev.target.checked,
18494
+ });
18495
+ }
18469
18496
  }
18470
18497
 
18471
18498
  class LineChartDesignPanel extends LineBarPieDesignPanel {
@@ -20110,34 +20137,25 @@
20110
20137
  };
20111
20138
 
20112
20139
  function startDnd(onMouseMove, onMouseUp, onMouseDown = () => { }) {
20113
- const _onMouseDown = (ev) => {
20114
- ev.preventDefault();
20115
- onMouseDown(ev);
20116
- };
20117
- const _onMouseMove = (ev) => {
20118
- ev.preventDefault();
20119
- onMouseMove(ev);
20120
- };
20121
20140
  const _onMouseUp = (ev) => {
20122
- ev.preventDefault();
20123
20141
  onMouseUp(ev);
20124
- window.removeEventListener("mousedown", _onMouseDown);
20142
+ window.removeEventListener("mousedown", onMouseDown);
20125
20143
  window.removeEventListener("mouseup", _onMouseUp);
20126
20144
  window.removeEventListener("dragstart", _onDragStart);
20127
- window.removeEventListener("mousemove", _onMouseMove);
20128
- window.removeEventListener("wheel", _onMouseMove);
20145
+ window.removeEventListener("mousemove", onMouseMove);
20146
+ window.removeEventListener("wheel", onMouseMove);
20129
20147
  };
20130
20148
  function _onDragStart(ev) {
20131
20149
  ev.preventDefault();
20132
20150
  }
20133
- window.addEventListener("mousedown", _onMouseDown);
20151
+ window.addEventListener("mousedown", onMouseDown);
20134
20152
  window.addEventListener("mouseup", _onMouseUp);
20135
20153
  window.addEventListener("dragstart", _onDragStart);
20136
- window.addEventListener("mousemove", _onMouseMove);
20154
+ window.addEventListener("mousemove", onMouseMove);
20137
20155
  // mouse wheel on window is by default a passive event.
20138
20156
  // preventDefault() is not allowed in passive event handler.
20139
20157
  // https://chromestatus.com/feature/6662647093133312
20140
- window.addEventListener("wheel", _onMouseMove, { passive: false });
20158
+ window.addEventListener("wheel", onMouseMove, { passive: false });
20141
20159
  }
20142
20160
  /**
20143
20161
  * Function to be used during a mousedown event, this function allows to
@@ -23698,7 +23716,8 @@
23698
23716
  }
23699
23717
  let prevCol = col;
23700
23718
  let prevRow = row;
23701
- const onMouseMove = (col, row) => {
23719
+ const onMouseMove = (col, row, ev) => {
23720
+ ev.preventDefault();
23702
23721
  if ((col !== prevCol && col != -1) || (row !== prevRow && row != -1)) {
23703
23722
  prevCol = col === -1 ? prevCol : col;
23704
23723
  prevRow = row === -1 ? prevRow : row;
@@ -26413,6 +26432,7 @@
26413
26432
  legendPosition: chartData.legendPosition,
26414
26433
  stacked: chartData.stacked || false,
26415
26434
  aggregated: false,
26435
+ cumulative: chartData.cumulative || false,
26416
26436
  labelsAsText: false,
26417
26437
  };
26418
26438
  }
@@ -31093,7 +31113,7 @@
31093
31113
 
31094
31114
  class HeaderVisibilityPlugin extends CorePlugin {
31095
31115
  static getters = [
31096
- "canRemoveHeaders",
31116
+ "checkElementsIncludeAllVisibleHeaders",
31097
31117
  "getHiddenColsGroups",
31098
31118
  "getHiddenRowsGroups",
31099
31119
  "isRowHiddenByUser",
@@ -31127,7 +31147,7 @@
31127
31147
  if (!this.getters.tryGetSheet(cmd.sheetId)) {
31128
31148
  return 27 /* CommandResult.InvalidSheetId */;
31129
31149
  }
31130
- if (!this.canRemoveHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
31150
+ if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
31131
31151
  return 8 /* CommandResult.NotEnoughElements */;
31132
31152
  }
31133
31153
  return 0 /* CommandResult.Success */;
@@ -31177,9 +31197,9 @@
31177
31197
  }
31178
31198
  return;
31179
31199
  }
31180
- canRemoveHeaders(sheetId, dimension, elements) {
31200
+ checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
31181
31201
  const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
31182
- return !includesAll(elements, visibleHeaders);
31202
+ return includesAll(elements, visibleHeaders);
31183
31203
  }
31184
31204
  isRowHiddenByUser(sheetId, index) {
31185
31205
  return this.hiddenHeaders[sheetId].ROW[index];
@@ -32266,6 +32286,7 @@
32266
32286
  "getPaneDivisions",
32267
32287
  "checkZonesExistInSheet",
32268
32288
  "getCommandZones",
32289
+ "checkElementsIncludeAllNonFrozenHeaders",
32269
32290
  ];
32270
32291
  sheetIdsMapName = {};
32271
32292
  orderedSheetIds = [];
@@ -32322,6 +32343,9 @@
32322
32343
  if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
32323
32344
  return 86 /* CommandResult.InvalidHeaderIndex */;
32324
32345
  }
32346
+ else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
32347
+ return 8 /* CommandResult.NotEnoughElements */;
32348
+ }
32325
32349
  else {
32326
32350
  return 0 /* CommandResult.Success */;
32327
32351
  }
@@ -32604,6 +32628,20 @@
32604
32628
  }
32605
32629
  this.history.update("sheets", sheetId, "panes", panes);
32606
32630
  }
32631
+ /**
32632
+ * Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
32633
+ * This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
32634
+ */
32635
+ checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, elements) {
32636
+ const paneDivisions = this.getters.getPaneDivisions(sheetId);
32637
+ const startIndex = dimension === "ROW" ? paneDivisions.ySplit : paneDivisions.xSplit;
32638
+ const endIndex = this.getters.getNumberHeaders(sheetId, dimension);
32639
+ if (!startIndex) {
32640
+ return false;
32641
+ }
32642
+ const indicesToCheck = range(startIndex, endIndex);
32643
+ return includesAll(elements, indicesToCheck);
32644
+ }
32607
32645
  // ---------------------------------------------------------------------------
32608
32646
  // Row/Col manipulation
32609
32647
  // ---------------------------------------------------------------------------
@@ -34568,6 +34606,9 @@
34568
34606
  const sheetId = this.sheetId;
34569
34607
  this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
34570
34608
  this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
34609
+ if (this.left === -1) {
34610
+ this.left = this.boundaries.left;
34611
+ }
34571
34612
  if (this.right === -1) {
34572
34613
  this.right = this.getters.getNumberCols(sheetId) - 1;
34573
34614
  }
@@ -34581,6 +34622,9 @@
34581
34622
  const sheetId = this.sheetId;
34582
34623
  this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
34583
34624
  this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
34625
+ if (this.top === -1) {
34626
+ this.top = this.boundaries.top;
34627
+ }
34584
34628
  if (this.bottom === -1) {
34585
34629
  this.bottom = this.getters.getNumberRows(sheetId) - 1;
34586
34630
  }
@@ -47662,9 +47706,9 @@
47662
47706
  Object.defineProperty(exports, '__esModule', { value: true });
47663
47707
 
47664
47708
 
47665
- __info__.version = '16.3.8';
47666
- __info__.date = '2023-08-17T11:06:03.177Z';
47667
- __info__.hash = 'af65228';
47709
+ __info__.version = '16.3.10';
47710
+ __info__.date = '2023-09-12T11:41:57.775Z';
47711
+ __info__.hash = '3a95562';
47668
47712
 
47669
47713
 
47670
47714
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);