@odoo/o-spreadsheet 16.3.9 → 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 {
@@ -26405,6 +26432,7 @@
26405
26432
  legendPosition: chartData.legendPosition,
26406
26433
  stacked: chartData.stacked || false,
26407
26434
  aggregated: false,
26435
+ cumulative: chartData.cumulative || false,
26408
26436
  labelsAsText: false,
26409
26437
  };
26410
26438
  }
@@ -31085,7 +31113,7 @@
31085
31113
 
31086
31114
  class HeaderVisibilityPlugin extends CorePlugin {
31087
31115
  static getters = [
31088
- "canRemoveHeaders",
31116
+ "checkElementsIncludeAllVisibleHeaders",
31089
31117
  "getHiddenColsGroups",
31090
31118
  "getHiddenRowsGroups",
31091
31119
  "isRowHiddenByUser",
@@ -31119,7 +31147,7 @@
31119
31147
  if (!this.getters.tryGetSheet(cmd.sheetId)) {
31120
31148
  return 27 /* CommandResult.InvalidSheetId */;
31121
31149
  }
31122
- if (!this.canRemoveHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
31150
+ if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
31123
31151
  return 8 /* CommandResult.NotEnoughElements */;
31124
31152
  }
31125
31153
  return 0 /* CommandResult.Success */;
@@ -31169,9 +31197,9 @@
31169
31197
  }
31170
31198
  return;
31171
31199
  }
31172
- canRemoveHeaders(sheetId, dimension, elements) {
31200
+ checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
31173
31201
  const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
31174
- return !includesAll(elements, visibleHeaders);
31202
+ return includesAll(elements, visibleHeaders);
31175
31203
  }
31176
31204
  isRowHiddenByUser(sheetId, index) {
31177
31205
  return this.hiddenHeaders[sheetId].ROW[index];
@@ -32258,6 +32286,7 @@
32258
32286
  "getPaneDivisions",
32259
32287
  "checkZonesExistInSheet",
32260
32288
  "getCommandZones",
32289
+ "checkElementsIncludeAllNonFrozenHeaders",
32261
32290
  ];
32262
32291
  sheetIdsMapName = {};
32263
32292
  orderedSheetIds = [];
@@ -32314,6 +32343,9 @@
32314
32343
  if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
32315
32344
  return 86 /* CommandResult.InvalidHeaderIndex */;
32316
32345
  }
32346
+ else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
32347
+ return 8 /* CommandResult.NotEnoughElements */;
32348
+ }
32317
32349
  else {
32318
32350
  return 0 /* CommandResult.Success */;
32319
32351
  }
@@ -32596,6 +32628,20 @@
32596
32628
  }
32597
32629
  this.history.update("sheets", sheetId, "panes", panes);
32598
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
+ }
32599
32645
  // ---------------------------------------------------------------------------
32600
32646
  // Row/Col manipulation
32601
32647
  // ---------------------------------------------------------------------------
@@ -34560,6 +34606,9 @@
34560
34606
  const sheetId = this.sheetId;
34561
34607
  this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
34562
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
+ }
34563
34612
  if (this.right === -1) {
34564
34613
  this.right = this.getters.getNumberCols(sheetId) - 1;
34565
34614
  }
@@ -34573,6 +34622,9 @@
34573
34622
  const sheetId = this.sheetId;
34574
34623
  this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
34575
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
+ }
34576
34628
  if (this.bottom === -1) {
34577
34629
  this.bottom = this.getters.getNumberRows(sheetId) - 1;
34578
34630
  }
@@ -47654,9 +47706,9 @@
47654
47706
  Object.defineProperty(exports, '__esModule', { value: true });
47655
47707
 
47656
47708
 
47657
- __info__.version = '16.3.9';
47658
- __info__.date = '2023-08-29T13:54:26.065Z';
47659
- __info__.hash = '79cedd4';
47709
+ __info__.version = '16.3.10';
47710
+ __info__.date = '2023-09-12T11:41:57.775Z';
47711
+ __info__.hash = '3a95562';
47660
47712
 
47661
47713
 
47662
47714
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);