@odoo/o-spreadsheet 16.3.9 → 16.3.11
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 +103 -38
- package/dist/o-spreadsheet.d.ts +13 -5
- package/dist/o-spreadsheet.esm.js +103 -38
- package/dist/o-spreadsheet.iife.js +103 -38
- package/dist/o-spreadsheet.iife.min.js +124 -123
- package/package.json +1 -1
|
@@ -1031,13 +1031,17 @@
|
|
|
1031
1031
|
return position === "after" ? base + 1 : base;
|
|
1032
1032
|
}
|
|
1033
1033
|
/**
|
|
1034
|
-
*
|
|
1034
|
+
* Compares two objects.
|
|
1035
1035
|
*/
|
|
1036
1036
|
function deepEquals(o1, o2) {
|
|
1037
1037
|
if (o1 === o2)
|
|
1038
1038
|
return true;
|
|
1039
1039
|
if ((o1 && !o2) || (o2 && !o1))
|
|
1040
1040
|
return false;
|
|
1041
|
+
if (typeof o1 !== typeof o2)
|
|
1042
|
+
return false;
|
|
1043
|
+
if (typeof o1 !== "object")
|
|
1044
|
+
return o1 === o2;
|
|
1041
1045
|
// Objects can have different keys if the values are undefined
|
|
1042
1046
|
const keys = new Set();
|
|
1043
1047
|
Object.keys(o1).forEach((key) => keys.add(key));
|
|
@@ -4803,6 +4807,7 @@
|
|
|
4803
4807
|
padding: 10px;
|
|
4804
4808
|
width: ${ERROR_TOOLTIP_WIDTH}px;
|
|
4805
4809
|
box-sizing: border-box !important;
|
|
4810
|
+
overflow-wrap: break-word;
|
|
4806
4811
|
}
|
|
4807
4812
|
`;
|
|
4808
4813
|
class ErrorToolTip extends owl.Component {
|
|
@@ -7463,6 +7468,7 @@
|
|
|
7463
7468
|
aggregated;
|
|
7464
7469
|
type = "line";
|
|
7465
7470
|
dataSetsHaveTitle;
|
|
7471
|
+
cumulative;
|
|
7466
7472
|
constructor(definition, sheetId, getters) {
|
|
7467
7473
|
super(definition, sheetId, getters);
|
|
7468
7474
|
this.dataSets = createDataSets(this.getters, definition.dataSets, sheetId, definition.dataSetsHaveTitle);
|
|
@@ -7474,6 +7480,7 @@
|
|
|
7474
7480
|
this.stacked = definition.stacked;
|
|
7475
7481
|
this.aggregated = definition.aggregated;
|
|
7476
7482
|
this.dataSetsHaveTitle = definition.dataSetsHaveTitle;
|
|
7483
|
+
this.cumulative = definition.cumulative;
|
|
7477
7484
|
}
|
|
7478
7485
|
static validateChartDefinition(validator, definition) {
|
|
7479
7486
|
return validator.checkValidations(definition, checkDataset, checkLabelRange);
|
|
@@ -7494,6 +7501,7 @@
|
|
|
7494
7501
|
labelRange: context.auxiliaryRange || undefined,
|
|
7495
7502
|
stacked: false,
|
|
7496
7503
|
aggregated: false,
|
|
7504
|
+
cumulative: false,
|
|
7497
7505
|
};
|
|
7498
7506
|
}
|
|
7499
7507
|
getDefinition() {
|
|
@@ -7514,6 +7522,7 @@
|
|
|
7514
7522
|
labelsAsText: this.labelsAsText,
|
|
7515
7523
|
stacked: this.stacked,
|
|
7516
7524
|
aggregated: this.aggregated,
|
|
7525
|
+
cumulative: this.cumulative,
|
|
7517
7526
|
};
|
|
7518
7527
|
}
|
|
7519
7528
|
getContextCreation() {
|
|
@@ -7722,6 +7731,16 @@
|
|
|
7722
7731
|
if (chart.stacked) {
|
|
7723
7732
|
backgroundRGBA.a = LINE_FILL_TRANSPARENCY;
|
|
7724
7733
|
}
|
|
7734
|
+
if (chart.cumulative) {
|
|
7735
|
+
let accumulator = 0;
|
|
7736
|
+
data = data.map((value) => {
|
|
7737
|
+
if (!isNaN(value)) {
|
|
7738
|
+
accumulator += parseFloat(value);
|
|
7739
|
+
return accumulator;
|
|
7740
|
+
}
|
|
7741
|
+
return value;
|
|
7742
|
+
});
|
|
7743
|
+
}
|
|
7725
7744
|
const backgroundColor = rgbaToHex(backgroundRGBA);
|
|
7726
7745
|
const dataset = {
|
|
7727
7746
|
label,
|
|
@@ -8543,6 +8562,7 @@
|
|
|
8543
8562
|
labelsAsText: false,
|
|
8544
8563
|
stacked: false,
|
|
8545
8564
|
aggregated: false,
|
|
8565
|
+
cumulative: false,
|
|
8546
8566
|
labelRange: labelRangeXc,
|
|
8547
8567
|
type: "line",
|
|
8548
8568
|
dataSetsHaveTitle,
|
|
@@ -8905,6 +8925,13 @@
|
|
|
8905
8925
|
elements: rows,
|
|
8906
8926
|
});
|
|
8907
8927
|
};
|
|
8928
|
+
const CAN_REMOVE_COLUMNS_ROWS = (dimension, env) => {
|
|
8929
|
+
const sheetId = env.model.getters.getActiveSheetId();
|
|
8930
|
+
const selectedElements = env.model.getters.getElementsFromSelection(dimension);
|
|
8931
|
+
const includesAllVisibleHeaders = env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, dimension, selectedElements);
|
|
8932
|
+
const includesAllNonFrozenHeaders = env.model.getters.checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, selectedElements);
|
|
8933
|
+
return !includesAllVisibleHeaders && !includesAllNonFrozenHeaders;
|
|
8934
|
+
};
|
|
8908
8935
|
const REMOVE_COLUMNS_NAME = (env) => {
|
|
8909
8936
|
if (env.model.getters.getSelectedZones().length > 1) {
|
|
8910
8937
|
return _lt("Delete columns");
|
|
@@ -8929,7 +8956,7 @@
|
|
|
8929
8956
|
const NOT_ALL_VISIBLE_ROWS_SELECTED = (env) => {
|
|
8930
8957
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
8931
8958
|
const selectedRows = env.model.getters.getElementsFromSelection("ROW");
|
|
8932
|
-
return env.model.getters.
|
|
8959
|
+
return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "ROW", selectedRows);
|
|
8933
8960
|
};
|
|
8934
8961
|
const REMOVE_COLUMNS_ACTION = (env) => {
|
|
8935
8962
|
let columns = [...env.model.getters.getActiveCols()];
|
|
@@ -8948,7 +8975,7 @@
|
|
|
8948
8975
|
const NOT_ALL_VISIBLE_COLS_SELECTED = (env) => {
|
|
8949
8976
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
8950
8977
|
const selectedCols = env.model.getters.getElementsFromSelection("COL");
|
|
8951
|
-
return env.model.getters.
|
|
8978
|
+
return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "COL", selectedCols);
|
|
8952
8979
|
};
|
|
8953
8980
|
const INSERT_CELL_SHIFT_DOWN = (env) => {
|
|
8954
8981
|
const zone = env.model.getters.getSelectedZone();
|
|
@@ -9405,7 +9432,7 @@
|
|
|
9405
9432
|
const deleteRows = {
|
|
9406
9433
|
name: REMOVE_ROWS_NAME,
|
|
9407
9434
|
execute: REMOVE_ROWS_ACTION,
|
|
9408
|
-
isVisible:
|
|
9435
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
|
|
9409
9436
|
};
|
|
9410
9437
|
const deleteRow = {
|
|
9411
9438
|
...deleteRows,
|
|
@@ -9418,7 +9445,7 @@
|
|
|
9418
9445
|
const deleteCols = {
|
|
9419
9446
|
name: REMOVE_COLUMNS_NAME,
|
|
9420
9447
|
execute: REMOVE_COLUMNS_ACTION,
|
|
9421
|
-
isVisible:
|
|
9448
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
|
|
9422
9449
|
};
|
|
9423
9450
|
const deleteCol = {
|
|
9424
9451
|
...deleteCols,
|
|
@@ -18466,6 +18493,11 @@
|
|
|
18466
18493
|
aggregated: ev.target.checked,
|
|
18467
18494
|
});
|
|
18468
18495
|
}
|
|
18496
|
+
onUpdateCumulative(ev) {
|
|
18497
|
+
this.props.updateChart(this.props.figureId, {
|
|
18498
|
+
cumulative: ev.target.checked,
|
|
18499
|
+
});
|
|
18500
|
+
}
|
|
18469
18501
|
}
|
|
18470
18502
|
|
|
18471
18503
|
class LineChartDesignPanel extends LineBarPieDesignPanel {
|
|
@@ -22191,9 +22223,11 @@
|
|
|
22191
22223
|
}
|
|
22192
22224
|
}
|
|
22193
22225
|
function updateMousePosition(e) {
|
|
22194
|
-
|
|
22195
|
-
|
|
22196
|
-
|
|
22226
|
+
if (gridRef.el === e.target) {
|
|
22227
|
+
x = e.offsetX;
|
|
22228
|
+
y = e.offsetY;
|
|
22229
|
+
lastMoved = Date.now();
|
|
22230
|
+
}
|
|
22197
22231
|
}
|
|
22198
22232
|
function recompute() {
|
|
22199
22233
|
const { col, row } = getPosition();
|
|
@@ -26405,6 +26439,7 @@
|
|
|
26405
26439
|
legendPosition: chartData.legendPosition,
|
|
26406
26440
|
stacked: chartData.stacked || false,
|
|
26407
26441
|
aggregated: false,
|
|
26442
|
+
cumulative: chartData.cumulative || false,
|
|
26408
26443
|
labelsAsText: false,
|
|
26409
26444
|
};
|
|
26410
26445
|
}
|
|
@@ -31085,7 +31120,7 @@
|
|
|
31085
31120
|
|
|
31086
31121
|
class HeaderVisibilityPlugin extends CorePlugin {
|
|
31087
31122
|
static getters = [
|
|
31088
|
-
"
|
|
31123
|
+
"checkElementsIncludeAllVisibleHeaders",
|
|
31089
31124
|
"getHiddenColsGroups",
|
|
31090
31125
|
"getHiddenRowsGroups",
|
|
31091
31126
|
"isRowHiddenByUser",
|
|
@@ -31119,7 +31154,7 @@
|
|
|
31119
31154
|
if (!this.getters.tryGetSheet(cmd.sheetId)) {
|
|
31120
31155
|
return 27 /* CommandResult.InvalidSheetId */;
|
|
31121
31156
|
}
|
|
31122
|
-
if (
|
|
31157
|
+
if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
31123
31158
|
return 8 /* CommandResult.NotEnoughElements */;
|
|
31124
31159
|
}
|
|
31125
31160
|
return 0 /* CommandResult.Success */;
|
|
@@ -31169,9 +31204,9 @@
|
|
|
31169
31204
|
}
|
|
31170
31205
|
return;
|
|
31171
31206
|
}
|
|
31172
|
-
|
|
31207
|
+
checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
|
|
31173
31208
|
const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
|
|
31174
|
-
return
|
|
31209
|
+
return includesAll(elements, visibleHeaders);
|
|
31175
31210
|
}
|
|
31176
31211
|
isRowHiddenByUser(sheetId, index) {
|
|
31177
31212
|
return this.hiddenHeaders[sheetId].ROW[index];
|
|
@@ -32258,6 +32293,7 @@
|
|
|
32258
32293
|
"getPaneDivisions",
|
|
32259
32294
|
"checkZonesExistInSheet",
|
|
32260
32295
|
"getCommandZones",
|
|
32296
|
+
"checkElementsIncludeAllNonFrozenHeaders",
|
|
32261
32297
|
];
|
|
32262
32298
|
sheetIdsMapName = {};
|
|
32263
32299
|
orderedSheetIds = [];
|
|
@@ -32314,6 +32350,9 @@
|
|
|
32314
32350
|
if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
|
|
32315
32351
|
return 86 /* CommandResult.InvalidHeaderIndex */;
|
|
32316
32352
|
}
|
|
32353
|
+
else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
32354
|
+
return 8 /* CommandResult.NotEnoughElements */;
|
|
32355
|
+
}
|
|
32317
32356
|
else {
|
|
32318
32357
|
return 0 /* CommandResult.Success */;
|
|
32319
32358
|
}
|
|
@@ -32596,6 +32635,20 @@
|
|
|
32596
32635
|
}
|
|
32597
32636
|
this.history.update("sheets", sheetId, "panes", panes);
|
|
32598
32637
|
}
|
|
32638
|
+
/**
|
|
32639
|
+
* Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
|
|
32640
|
+
* This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
|
|
32641
|
+
*/
|
|
32642
|
+
checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, elements) {
|
|
32643
|
+
const paneDivisions = this.getters.getPaneDivisions(sheetId);
|
|
32644
|
+
const startIndex = dimension === "ROW" ? paneDivisions.ySplit : paneDivisions.xSplit;
|
|
32645
|
+
const endIndex = this.getters.getNumberHeaders(sheetId, dimension);
|
|
32646
|
+
if (!startIndex) {
|
|
32647
|
+
return false;
|
|
32648
|
+
}
|
|
32649
|
+
const indicesToCheck = range(startIndex, endIndex);
|
|
32650
|
+
return includesAll(elements, indicesToCheck);
|
|
32651
|
+
}
|
|
32599
32652
|
// ---------------------------------------------------------------------------
|
|
32600
32653
|
// Row/Col manipulation
|
|
32601
32654
|
// ---------------------------------------------------------------------------
|
|
@@ -33674,6 +33727,7 @@
|
|
|
33674
33727
|
// stores the computed styles in the format of computedStyles.sheetName[col][row] = Style
|
|
33675
33728
|
computedStyles = {};
|
|
33676
33729
|
computedIcons = {};
|
|
33730
|
+
uuidGenerator = new UuidGenerator();
|
|
33677
33731
|
// ---------------------------------------------------------------------------
|
|
33678
33732
|
// Command Handling
|
|
33679
33733
|
// ---------------------------------------------------------------------------
|
|
@@ -34021,13 +34075,20 @@
|
|
|
34021
34075
|
this.adaptRules(origin.sheetId, cf, [xc], toRemoveRange);
|
|
34022
34076
|
}
|
|
34023
34077
|
else {
|
|
34024
|
-
this.adaptRules(target.sheetId, cf, [xc], []);
|
|
34025
34078
|
this.adaptRules(origin.sheetId, cf, [], toRemoveRange);
|
|
34079
|
+
const cfToCopyTo = this.getCFToCopyTo(target.sheetId, cf);
|
|
34080
|
+
this.adaptRules(target.sheetId, cfToCopyTo, [xc], []);
|
|
34026
34081
|
}
|
|
34027
34082
|
}
|
|
34028
34083
|
}
|
|
34029
34084
|
}
|
|
34030
34085
|
}
|
|
34086
|
+
getCFToCopyTo(targetSheetId, originCF) {
|
|
34087
|
+
const cfInTarget = this.getters
|
|
34088
|
+
.getConditionalFormats(targetSheetId)
|
|
34089
|
+
.find((cf) => cf.stopIfTrue === originCF.stopIfTrue && deepEquals(cf.rule, originCF.rule));
|
|
34090
|
+
return cfInTarget ? cfInTarget : { ...originCF, id: this.uuidGenerator.uuidv4(), ranges: [] };
|
|
34091
|
+
}
|
|
34031
34092
|
}
|
|
34032
34093
|
|
|
34033
34094
|
class FilterEvaluationPlugin extends UIPlugin {
|
|
@@ -34560,6 +34621,9 @@
|
|
|
34560
34621
|
const sheetId = this.sheetId;
|
|
34561
34622
|
this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
|
|
34562
34623
|
this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
|
|
34624
|
+
if (this.left === -1) {
|
|
34625
|
+
this.left = this.boundaries.left;
|
|
34626
|
+
}
|
|
34563
34627
|
if (this.right === -1) {
|
|
34564
34628
|
this.right = this.getters.getNumberCols(sheetId) - 1;
|
|
34565
34629
|
}
|
|
@@ -34573,6 +34637,9 @@
|
|
|
34573
34637
|
const sheetId = this.sheetId;
|
|
34574
34638
|
this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
|
|
34575
34639
|
this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
|
|
34640
|
+
if (this.top === -1) {
|
|
34641
|
+
this.top = this.boundaries.top;
|
|
34642
|
+
}
|
|
34576
34643
|
if (this.bottom === -1) {
|
|
34577
34644
|
this.bottom = this.getters.getNumberRows(sheetId) - 1;
|
|
34578
34645
|
}
|
|
@@ -40139,7 +40206,7 @@
|
|
|
40139
40206
|
allowDispatch(cmd) {
|
|
40140
40207
|
switch (cmd.type) {
|
|
40141
40208
|
case "CUT":
|
|
40142
|
-
const zones =
|
|
40209
|
+
const zones = this.getters.getSelectedZones();
|
|
40143
40210
|
const state = this.getClipboardState(zones, cmd.type);
|
|
40144
40211
|
return state.isCutAllowed(zones);
|
|
40145
40212
|
case "PASTE":
|
|
@@ -40169,7 +40236,7 @@
|
|
|
40169
40236
|
switch (cmd.type) {
|
|
40170
40237
|
case "COPY":
|
|
40171
40238
|
case "CUT":
|
|
40172
|
-
const zones =
|
|
40239
|
+
const zones = this.getters.getSelectedZones();
|
|
40173
40240
|
this.state = this.getClipboardState(zones, cmd.type);
|
|
40174
40241
|
this.status = "visible";
|
|
40175
40242
|
break;
|
|
@@ -41589,26 +41656,24 @@
|
|
|
41589
41656
|
const isBasedBefore = cmd.base < start;
|
|
41590
41657
|
const deltaCol = isBasedBefore && isCol ? thickness : 0;
|
|
41591
41658
|
const deltaRow = isBasedBefore && !isCol ? thickness : 0;
|
|
41592
|
-
|
|
41593
|
-
|
|
41594
|
-
|
|
41595
|
-
|
|
41596
|
-
|
|
41597
|
-
|
|
41598
|
-
|
|
41599
|
-
|
|
41600
|
-
|
|
41601
|
-
|
|
41602
|
-
|
|
41603
|
-
|
|
41604
|
-
|
|
41605
|
-
|
|
41606
|
-
|
|
41607
|
-
|
|
41608
|
-
|
|
41609
|
-
|
|
41610
|
-
],
|
|
41611
|
-
});
|
|
41659
|
+
const target = [
|
|
41660
|
+
{
|
|
41661
|
+
left: isCol ? start + deltaCol : 0,
|
|
41662
|
+
right: isCol ? end + deltaCol : this.getters.getNumberCols(cmd.sheetId) - 1,
|
|
41663
|
+
top: !isCol ? start + deltaRow : 0,
|
|
41664
|
+
bottom: !isCol ? end + deltaRow : this.getters.getNumberRows(cmd.sheetId) - 1,
|
|
41665
|
+
},
|
|
41666
|
+
];
|
|
41667
|
+
const state = new ClipboardCellsState(target, "CUT", this.getters, this.dispatch, this.selection);
|
|
41668
|
+
const pasteTarget = [
|
|
41669
|
+
{
|
|
41670
|
+
left: isCol ? cmd.base : 0,
|
|
41671
|
+
right: isCol ? cmd.base + thickness - 1 : this.getters.getNumberCols(cmd.sheetId) - 1,
|
|
41672
|
+
top: !isCol ? cmd.base : 0,
|
|
41673
|
+
bottom: !isCol ? cmd.base + thickness - 1 : this.getters.getNumberRows(cmd.sheetId) - 1,
|
|
41674
|
+
},
|
|
41675
|
+
];
|
|
41676
|
+
state.paste(pasteTarget, { selectTarget: true });
|
|
41612
41677
|
const toRemove = isBasedBefore ? cmd.elements.map((el) => el + thickness) : cmd.elements;
|
|
41613
41678
|
let currentIndex = cmd.base;
|
|
41614
41679
|
for (const element of toRemove) {
|
|
@@ -47654,9 +47719,9 @@
|
|
|
47654
47719
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
47655
47720
|
|
|
47656
47721
|
|
|
47657
|
-
__info__.version = '16.3.
|
|
47658
|
-
__info__.date = '2023-
|
|
47659
|
-
__info__.hash = '
|
|
47722
|
+
__info__.version = '16.3.11';
|
|
47723
|
+
__info__.date = '2023-09-21T15:56:40.754Z';
|
|
47724
|
+
__info__.hash = '245df8c';
|
|
47660
47725
|
|
|
47661
47726
|
|
|
47662
47727
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|