@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.
- package/dist/o-spreadsheet.cjs.js +71 -27
- package/dist/o-spreadsheet.d.ts +11 -3
- package/dist/o-spreadsheet.esm.js +71 -27
- package/dist/o-spreadsheet.iife.js +71 -27
- package/dist/o-spreadsheet.iife.min.js +123 -123
- package/package.json +1 -1
|
@@ -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.
|
|
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.
|
|
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:
|
|
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:
|
|
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",
|
|
20142
|
+
window.removeEventListener("mousedown", onMouseDown);
|
|
20125
20143
|
window.removeEventListener("mouseup", _onMouseUp);
|
|
20126
20144
|
window.removeEventListener("dragstart", _onDragStart);
|
|
20127
|
-
window.removeEventListener("mousemove",
|
|
20128
|
-
window.removeEventListener("wheel",
|
|
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",
|
|
20151
|
+
window.addEventListener("mousedown", onMouseDown);
|
|
20134
20152
|
window.addEventListener("mouseup", _onMouseUp);
|
|
20135
20153
|
window.addEventListener("dragstart", _onDragStart);
|
|
20136
|
-
window.addEventListener("mousemove",
|
|
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",
|
|
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
|
-
"
|
|
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 (
|
|
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
|
-
|
|
31200
|
+
checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
|
|
31181
31201
|
const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
|
|
31182
|
-
return
|
|
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.
|
|
47666
|
-
__info__.date = '2023-
|
|
47667
|
-
__info__.hash = '
|
|
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);
|