@odoo/o-spreadsheet 16.4.4 → 16.4.6

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.
@@ -6062,7 +6062,7 @@
6062
6062
  };
6063
6063
  }
6064
6064
  get childrenHaveIcon() {
6065
- return this.props.menuItems.some((menuItem) => !!menuItem.icon || !!menuItem.isActive);
6065
+ return this.props.menuItems.some((menuItem) => !!this.getIconName(menuItem));
6066
6066
  }
6067
6067
  getIconName(menu) {
6068
6068
  if (menu.icon(this.env)) {
@@ -16875,6 +16875,7 @@
16875
16875
  aggregated;
16876
16876
  type = "line";
16877
16877
  dataSetsHaveTitle;
16878
+ cumulative;
16878
16879
  constructor(definition, sheetId, getters) {
16879
16880
  super(definition, sheetId, getters);
16880
16881
  this.dataSets = createDataSets(this.getters, definition.dataSets, sheetId, definition.dataSetsHaveTitle);
@@ -16886,6 +16887,7 @@
16886
16887
  this.stacked = definition.stacked;
16887
16888
  this.aggregated = definition.aggregated;
16888
16889
  this.dataSetsHaveTitle = definition.dataSetsHaveTitle;
16890
+ this.cumulative = definition.cumulative;
16889
16891
  }
16890
16892
  static validateChartDefinition(validator, definition) {
16891
16893
  return validator.checkValidations(definition, checkDataset, checkLabelRange);
@@ -16906,6 +16908,7 @@
16906
16908
  labelRange: context.auxiliaryRange || undefined,
16907
16909
  stacked: false,
16908
16910
  aggregated: false,
16911
+ cumulative: false,
16909
16912
  };
16910
16913
  }
16911
16914
  getDefinition() {
@@ -16926,6 +16929,7 @@
16926
16929
  labelsAsText: this.labelsAsText,
16927
16930
  stacked: this.stacked,
16928
16931
  aggregated: this.aggregated,
16932
+ cumulative: this.cumulative,
16929
16933
  };
16930
16934
  }
16931
16935
  getContextCreation() {
@@ -17136,6 +17140,16 @@
17136
17140
  if (chart.stacked) {
17137
17141
  backgroundRGBA.a = LINE_FILL_TRANSPARENCY;
17138
17142
  }
17143
+ if (chart.cumulative) {
17144
+ let accumulator = 0;
17145
+ data = data.map((value) => {
17146
+ if (!isNaN(value)) {
17147
+ accumulator += parseFloat(value);
17148
+ return accumulator;
17149
+ }
17150
+ return value;
17151
+ });
17152
+ }
17139
17153
  const backgroundColor = rgbaToHex(backgroundRGBA);
17140
17154
  const dataset = {
17141
17155
  label,
@@ -18010,6 +18024,7 @@
18010
18024
  labelsAsText: false,
18011
18025
  stacked: false,
18012
18026
  aggregated: false,
18027
+ cumulative: false,
18013
18028
  labelRange: labelRangeXc,
18014
18029
  type: "line",
18015
18030
  dataSetsHaveTitle,
@@ -18173,6 +18188,13 @@
18173
18188
  elements: rows,
18174
18189
  });
18175
18190
  };
18191
+ const CAN_REMOVE_COLUMNS_ROWS = (dimension, env) => {
18192
+ const sheetId = env.model.getters.getActiveSheetId();
18193
+ const selectedElements = env.model.getters.getElementsFromSelection(dimension);
18194
+ const includesAllVisibleHeaders = env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, dimension, selectedElements);
18195
+ const includesAllNonFrozenHeaders = env.model.getters.checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, selectedElements);
18196
+ return !includesAllVisibleHeaders && !includesAllNonFrozenHeaders;
18197
+ };
18176
18198
  const REMOVE_COLUMNS_NAME = (env) => {
18177
18199
  if (env.model.getters.getSelectedZones().length > 1) {
18178
18200
  return _lt("Delete columns");
@@ -18197,7 +18219,7 @@
18197
18219
  const NOT_ALL_VISIBLE_ROWS_SELECTED = (env) => {
18198
18220
  const sheetId = env.model.getters.getActiveSheetId();
18199
18221
  const selectedRows = env.model.getters.getElementsFromSelection("ROW");
18200
- return env.model.getters.canRemoveHeaders(sheetId, "ROW", selectedRows);
18222
+ return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "ROW", selectedRows);
18201
18223
  };
18202
18224
  const REMOVE_COLUMNS_ACTION = (env) => {
18203
18225
  let columns = [...env.model.getters.getActiveCols()];
@@ -18216,7 +18238,7 @@
18216
18238
  const NOT_ALL_VISIBLE_COLS_SELECTED = (env) => {
18217
18239
  const sheetId = env.model.getters.getActiveSheetId();
18218
18240
  const selectedCols = env.model.getters.getElementsFromSelection("COL");
18219
- return env.model.getters.canRemoveHeaders(sheetId, "COL", selectedCols);
18241
+ return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "COL", selectedCols);
18220
18242
  };
18221
18243
  const INSERT_ROWS_BEFORE_ACTION = (env) => {
18222
18244
  const activeRows = env.model.getters.getActiveRows();
@@ -18488,7 +18510,7 @@
18488
18510
  const deleteRows = {
18489
18511
  name: REMOVE_ROWS_NAME,
18490
18512
  execute: REMOVE_ROWS_ACTION,
18491
- isVisible: NOT_ALL_VISIBLE_ROWS_SELECTED,
18513
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
18492
18514
  };
18493
18515
  const deleteRow = {
18494
18516
  ...deleteRows,
@@ -18501,7 +18523,7 @@
18501
18523
  const deleteCols = {
18502
18524
  name: REMOVE_COLUMNS_NAME,
18503
18525
  execute: REMOVE_COLUMNS_ACTION,
18504
- isVisible: NOT_ALL_VISIBLE_COLS_SELECTED,
18526
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
18505
18527
  };
18506
18528
  const deleteCol = {
18507
18529
  ...deleteCols,
@@ -20728,34 +20750,25 @@
20728
20750
  }
20729
20751
 
20730
20752
  function startDnd(onMouseMove, onMouseUp, onMouseDown = () => { }) {
20731
- const _onMouseDown = (ev) => {
20732
- ev.preventDefault();
20733
- onMouseDown(ev);
20734
- };
20735
- const _onMouseMove = (ev) => {
20736
- ev.preventDefault();
20737
- onMouseMove(ev);
20738
- };
20739
20753
  const _onMouseUp = (ev) => {
20740
- ev.preventDefault();
20741
20754
  onMouseUp(ev);
20742
- window.removeEventListener("mousedown", _onMouseDown);
20755
+ window.removeEventListener("mousedown", onMouseDown);
20743
20756
  window.removeEventListener("mouseup", _onMouseUp);
20744
20757
  window.removeEventListener("dragstart", _onDragStart);
20745
- window.removeEventListener("mousemove", _onMouseMove);
20746
- window.removeEventListener("wheel", _onMouseMove);
20758
+ window.removeEventListener("mousemove", onMouseMove);
20759
+ window.removeEventListener("wheel", onMouseMove);
20747
20760
  };
20748
20761
  function _onDragStart(ev) {
20749
20762
  ev.preventDefault();
20750
20763
  }
20751
- window.addEventListener("mousedown", _onMouseDown);
20764
+ window.addEventListener("mousedown", onMouseDown);
20752
20765
  window.addEventListener("mouseup", _onMouseUp);
20753
20766
  window.addEventListener("dragstart", _onDragStart);
20754
- window.addEventListener("mousemove", _onMouseMove);
20767
+ window.addEventListener("mousemove", onMouseMove);
20755
20768
  // mouse wheel on window is by default a passive event.
20756
20769
  // preventDefault() is not allowed in passive event handler.
20757
20770
  // https://chromestatus.com/feature/6662647093133312
20758
- window.addEventListener("wheel", _onMouseMove, { passive: false });
20771
+ window.addEventListener("wheel", onMouseMove, { passive: false });
20759
20772
  }
20760
20773
  /**
20761
20774
  * Function to be used during a mousedown event, this function allows to
@@ -21485,6 +21498,11 @@
21485
21498
  aggregated: ev.target.checked,
21486
21499
  });
21487
21500
  }
21501
+ onUpdateCumulative(ev) {
21502
+ this.props.updateChart(this.props.figureId, {
21503
+ cumulative: ev.target.checked,
21504
+ });
21505
+ }
21488
21506
  }
21489
21507
 
21490
21508
  class LineChartDesignPanel extends LineBarPieDesignPanel {
@@ -26773,7 +26791,8 @@
26773
26791
  }
26774
26792
  let prevCol = col;
26775
26793
  let prevRow = row;
26776
- const onMouseMove = (col, row) => {
26794
+ const onMouseMove = (col, row, ev) => {
26795
+ ev.preventDefault();
26777
26796
  if ((col !== prevCol && col != -1) || (row !== prevRow && row != -1)) {
26778
26797
  prevCol = col === -1 ? prevCol : col;
26779
26798
  prevRow = row === -1 ? prevRow : row;
@@ -28457,6 +28476,7 @@
28457
28476
  legendPosition: chartData.legendPosition,
28458
28477
  stacked: chartData.stacked || false,
28459
28478
  aggregated: false,
28479
+ cumulative: chartData.cumulative || false,
28460
28480
  labelsAsText: false,
28461
28481
  };
28462
28482
  }
@@ -33117,7 +33137,7 @@
33117
33137
 
33118
33138
  class HeaderVisibilityPlugin extends CorePlugin {
33119
33139
  static getters = [
33120
- "canRemoveHeaders",
33140
+ "checkElementsIncludeAllVisibleHeaders",
33121
33141
  "getHiddenColsGroups",
33122
33142
  "getHiddenRowsGroups",
33123
33143
  "isRowHiddenByUser",
@@ -33151,7 +33171,7 @@
33151
33171
  if (!this.getters.tryGetSheet(cmd.sheetId)) {
33152
33172
  return 28 /* CommandResult.InvalidSheetId */;
33153
33173
  }
33154
- if (!this.canRemoveHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
33174
+ if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
33155
33175
  return 8 /* CommandResult.NotEnoughElements */;
33156
33176
  }
33157
33177
  return 0 /* CommandResult.Success */;
@@ -33201,9 +33221,9 @@
33201
33221
  }
33202
33222
  return;
33203
33223
  }
33204
- canRemoveHeaders(sheetId, dimension, elements) {
33224
+ checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
33205
33225
  const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
33206
- return !includesAll(elements, visibleHeaders);
33226
+ return includesAll(elements, visibleHeaders);
33207
33227
  }
33208
33228
  isRowHiddenByUser(sheetId, index) {
33209
33229
  return this.hiddenHeaders[sheetId].ROW[index];
@@ -34308,6 +34328,7 @@
34308
34328
  "checkZonesExistInSheet",
34309
34329
  "getCommandZones",
34310
34330
  "getUnboundedZone",
34331
+ "checkElementsIncludeAllNonFrozenHeaders",
34311
34332
  ];
34312
34333
  sheetIdsMapName = {};
34313
34334
  orderedSheetIds = [];
@@ -34364,6 +34385,9 @@
34364
34385
  if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
34365
34386
  return 87 /* CommandResult.InvalidHeaderIndex */;
34366
34387
  }
34388
+ else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
34389
+ return 8 /* CommandResult.NotEnoughElements */;
34390
+ }
34367
34391
  else {
34368
34392
  return 0 /* CommandResult.Success */;
34369
34393
  }
@@ -34656,6 +34680,20 @@
34656
34680
  }
34657
34681
  this.history.update("sheets", sheetId, "panes", panes);
34658
34682
  }
34683
+ /**
34684
+ * Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
34685
+ * This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
34686
+ */
34687
+ checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, elements) {
34688
+ const paneDivisions = this.getters.getPaneDivisions(sheetId);
34689
+ const startIndex = dimension === "ROW" ? paneDivisions.ySplit : paneDivisions.xSplit;
34690
+ const endIndex = this.getters.getNumberHeaders(sheetId, dimension);
34691
+ if (!startIndex) {
34692
+ return false;
34693
+ }
34694
+ const indicesToCheck = range(startIndex, endIndex);
34695
+ return includesAll(elements, indicesToCheck);
34696
+ }
34659
34697
  // ---------------------------------------------------------------------------
34660
34698
  // Row/Col manipulation
34661
34699
  // ---------------------------------------------------------------------------
@@ -43942,6 +43980,9 @@
43942
43980
  const sheetId = this.sheetId;
43943
43981
  this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
43944
43982
  this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
43983
+ if (this.left === -1) {
43984
+ this.left = this.boundaries.left;
43985
+ }
43945
43986
  if (this.right === -1) {
43946
43987
  this.right = this.getters.getNumberCols(sheetId) - 1;
43947
43988
  }
@@ -43955,6 +43996,9 @@
43955
43996
  const sheetId = this.sheetId;
43956
43997
  this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
43957
43998
  this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
43999
+ if (this.top === -1) {
44000
+ this.top = this.boundaries.top;
44001
+ }
43958
44002
  if (this.bottom === -1) {
43959
44003
  this.bottom = this.getters.getNumberRows(sheetId) - 1;
43960
44004
  }
@@ -50557,9 +50601,9 @@
50557
50601
  Object.defineProperty(exports, '__esModule', { value: true });
50558
50602
 
50559
50603
 
50560
- __info__.version = '16.4.4';
50561
- __info__.date = '2023-08-17T11:08:07.524Z';
50562
- __info__.hash = 'bdb3a4c';
50604
+ __info__.version = '16.4.6';
50605
+ __info__.date = '2023-09-12T11:43:54.243Z';
50606
+ __info__.hash = '5746355';
50563
50607
 
50564
50608
 
50565
50609
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);