@odoo/o-spreadsheet 16.4.5 → 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.
@@ -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,
@@ -21476,6 +21498,11 @@
21476
21498
  aggregated: ev.target.checked,
21477
21499
  });
21478
21500
  }
21501
+ onUpdateCumulative(ev) {
21502
+ this.props.updateChart(this.props.figureId, {
21503
+ cumulative: ev.target.checked,
21504
+ });
21505
+ }
21479
21506
  }
21480
21507
 
21481
21508
  class LineChartDesignPanel extends LineBarPieDesignPanel {
@@ -28449,6 +28476,7 @@
28449
28476
  legendPosition: chartData.legendPosition,
28450
28477
  stacked: chartData.stacked || false,
28451
28478
  aggregated: false,
28479
+ cumulative: chartData.cumulative || false,
28452
28480
  labelsAsText: false,
28453
28481
  };
28454
28482
  }
@@ -33109,7 +33137,7 @@
33109
33137
 
33110
33138
  class HeaderVisibilityPlugin extends CorePlugin {
33111
33139
  static getters = [
33112
- "canRemoveHeaders",
33140
+ "checkElementsIncludeAllVisibleHeaders",
33113
33141
  "getHiddenColsGroups",
33114
33142
  "getHiddenRowsGroups",
33115
33143
  "isRowHiddenByUser",
@@ -33143,7 +33171,7 @@
33143
33171
  if (!this.getters.tryGetSheet(cmd.sheetId)) {
33144
33172
  return 28 /* CommandResult.InvalidSheetId */;
33145
33173
  }
33146
- if (!this.canRemoveHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
33174
+ if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
33147
33175
  return 8 /* CommandResult.NotEnoughElements */;
33148
33176
  }
33149
33177
  return 0 /* CommandResult.Success */;
@@ -33193,9 +33221,9 @@
33193
33221
  }
33194
33222
  return;
33195
33223
  }
33196
- canRemoveHeaders(sheetId, dimension, elements) {
33224
+ checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
33197
33225
  const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
33198
- return !includesAll(elements, visibleHeaders);
33226
+ return includesAll(elements, visibleHeaders);
33199
33227
  }
33200
33228
  isRowHiddenByUser(sheetId, index) {
33201
33229
  return this.hiddenHeaders[sheetId].ROW[index];
@@ -34300,6 +34328,7 @@
34300
34328
  "checkZonesExistInSheet",
34301
34329
  "getCommandZones",
34302
34330
  "getUnboundedZone",
34331
+ "checkElementsIncludeAllNonFrozenHeaders",
34303
34332
  ];
34304
34333
  sheetIdsMapName = {};
34305
34334
  orderedSheetIds = [];
@@ -34356,6 +34385,9 @@
34356
34385
  if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
34357
34386
  return 87 /* CommandResult.InvalidHeaderIndex */;
34358
34387
  }
34388
+ else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
34389
+ return 8 /* CommandResult.NotEnoughElements */;
34390
+ }
34359
34391
  else {
34360
34392
  return 0 /* CommandResult.Success */;
34361
34393
  }
@@ -34648,6 +34680,20 @@
34648
34680
  }
34649
34681
  this.history.update("sheets", sheetId, "panes", panes);
34650
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
+ }
34651
34697
  // ---------------------------------------------------------------------------
34652
34698
  // Row/Col manipulation
34653
34699
  // ---------------------------------------------------------------------------
@@ -43934,6 +43980,9 @@
43934
43980
  const sheetId = this.sheetId;
43935
43981
  this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
43936
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
+ }
43937
43986
  if (this.right === -1) {
43938
43987
  this.right = this.getters.getNumberCols(sheetId) - 1;
43939
43988
  }
@@ -43947,6 +43996,9 @@
43947
43996
  const sheetId = this.sheetId;
43948
43997
  this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
43949
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
+ }
43950
44002
  if (this.bottom === -1) {
43951
44003
  this.bottom = this.getters.getNumberRows(sheetId) - 1;
43952
44004
  }
@@ -50549,9 +50601,9 @@
50549
50601
  Object.defineProperty(exports, '__esModule', { value: true });
50550
50602
 
50551
50603
 
50552
- __info__.version = '16.4.5';
50553
- __info__.date = '2023-08-29T13:55:58.527Z';
50554
- __info__.hash = '105c130';
50604
+ __info__.version = '16.4.6';
50605
+ __info__.date = '2023-09-12T11:43:54.243Z';
50606
+ __info__.hash = '5746355';
50555
50607
 
50556
50608
 
50557
50609
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);